Home | History | Annotate | Line # | Download | only in global
      1 /*	$NetBSD: info_log_addr_form.c,v 1.3 2025/02/25 19:15:45 christos Exp $	*/
      2 
      3 /*++
      4 /* NAME
      5 /*	info_log_addr_form 3
      6 /* SUMMARY
      7 /*	format internal-form information for info logging
      8 /* SYNOPSIS
      9 /*	#include <info_log_addr_form.h>
     10 /*
     11 /*	const char *info_log_addr_form_recipient(
     12 /*	const char *recipient_addr)
     13 /*
     14 /*	const char *info_log_addr_form_sender_addr(
     15 /*	const char *sender_addr)
     16 /* DESCRIPTION
     17 /*	info_log_addr_form_recipient() and info_log_addr_form_sender_addr()
     18 /*	format an internal-form recipient or sender email address
     19 /*	for non-debug logging. Each function has its own private
     20 /*	buffer. Each call overwrites the result from a previous call.
     21 /*
     22 /*	Note: the empty address is passed unchanged; it is not
     23 /*	formatted as "".
     24 /* .IP recipient_addr
     25 /* .IP *sender_addr
     26 /*	An internal-form email address.
     27 /* LICENSE
     28 /* .ad
     29 /* .fi
     30 /*	The Secure Mailer license must be distributed with this software.
     31 /* AUTHOR(S)
     32 /*	Wietse Venema
     33 /*	Google, Inc.
     34 /*	111 8th Avenue
     35 /*	New York, NY 10011, USA
     36 /*--*/
     37 
     38  /*
     39   * System library.
     40   */
     41 #include <sys_defs.h>
     42 
     43  /*
     44   * Utility library.
     45   */
     46 #include <msg.h>
     47 #include <name_code.h>
     48 #include <vstring.h>
     49 
     50  /*
     51   * Global library.
     52   */
     53 #include <info_log_addr_form.h>
     54 #include <mail_addr_form.h>
     55 #include <mail_params.h>
     56 #include <quote_822_local.h>
     57 
     58 #define INFO_LOG_ADDR_FORM_VAL_NOT_SET	0
     59 #define INFO_LOG_ADDR_FORM_VAL_INTERNAL	1
     60 #define INFO_LOG_ADDR_FORM_VAL_EXTERNAL	2
     61 
     62 /* Format for info logging. */
     63 
     64 int     info_log_addr_form_form = INFO_LOG_ADDR_FORM_VAL_NOT_SET;
     65 
     66 #define STR(x)	vstring_str(x)
     67 
     68 /* info_log_addr_form_init - one-time initialization */
     69 
     70 static void info_log_addr_form_init(void)
     71 {
     72     static NAME_CODE info_log_addr_form_table[] = {
     73 	INFO_LOG_ADDR_FORM_NAME_EXTERNAL, INFO_LOG_ADDR_FORM_VAL_EXTERNAL,
     74 	INFO_LOG_ADDR_FORM_NAME_INTERNAL, INFO_LOG_ADDR_FORM_VAL_INTERNAL,
     75 	0, INFO_LOG_ADDR_FORM_VAL_NOT_SET,
     76     };
     77 
     78     info_log_addr_form_form = name_code(info_log_addr_form_table,
     79 					NAME_CODE_FLAG_NONE,
     80 					var_info_log_addr_form);
     81 
     82     if (info_log_addr_form_form == INFO_LOG_ADDR_FORM_VAL_NOT_SET)
     83 	msg_fatal("invalid parameter setting \"%s = %s\"",
     84 		  VAR_INFO_LOG_ADDR_FORM, var_info_log_addr_form);
     85 }
     86 
     87 /* info_log_addr_form - format an email address for info logging */
     88 
     89 static VSTRING *info_log_addr_form(VSTRING *buf, const char *addr)
     90 {
     91     const char myname[] = "info_log_addr_form";
     92 
     93     if (buf == 0)
     94 	buf = vstring_alloc(100);
     95     if (info_log_addr_form_form == INFO_LOG_ADDR_FORM_VAL_NOT_SET)
     96 	info_log_addr_form_init();
     97     if (*addr == 0
     98 	|| info_log_addr_form_form == INFO_LOG_ADDR_FORM_VAL_INTERNAL) {
     99 	vstring_strcpy(buf, addr);
    100     } else if (info_log_addr_form_form == INFO_LOG_ADDR_FORM_VAL_EXTERNAL) {
    101 	quote_822_local(buf, addr);
    102     } else {
    103 	msg_panic("%s: bad format type: %d",
    104 		  myname, info_log_addr_form_form);
    105     }
    106     return (buf);
    107 }
    108 
    109 /* info_log_addr_form_recipient - format a recipient address for info logging */
    110 
    111 const char *info_log_addr_form_recipient(const char *recipient_addr)
    112 {
    113     static VSTRING *recipient_buffer = 0;
    114 
    115     recipient_buffer = info_log_addr_form(recipient_buffer, recipient_addr);
    116     return (STR(recipient_buffer));
    117 }
    118 
    119 /* info_log_addr_form_sender - format a sender address for info logging */
    120 
    121 const char *info_log_addr_form_sender(const char *sender_addr)
    122 {
    123     static VSTRING *sender_buffer = 0;
    124 
    125     sender_buffer = info_log_addr_form(sender_buffer, sender_addr);
    126     return (STR(sender_buffer));
    127 }
    128