xref: /netbsd-src/external/ibm-public/postfix/dist/src/global/info_log_addr_form.c (revision 33881f779a77dce6440bdc44610d94de75bebefe)
1 /*	$NetBSD: info_log_addr_form.c,v 1.2 2020/03/18 19:05:16 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 
info_log_addr_form_init(void)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     info_log_addr_form_form = name_code(info_log_addr_form_table,
78 					NAME_CODE_FLAG_NONE,
79 					var_info_log_addr_form);
80 
81     if (info_log_addr_form_form == INFO_LOG_ADDR_FORM_VAL_NOT_SET)
82 	msg_fatal("invalid parameter setting \"%s = %s\"",
83 		  VAR_INFO_LOG_ADDR_FORM, var_info_log_addr_form);
84 }
85 
86 /* info_log_addr_form - format an email address for info logging */
87 
info_log_addr_form(VSTRING * buf,const char * addr)88 static VSTRING *info_log_addr_form(VSTRING *buf, const char *addr)
89 {
90     const char myname[] = "info_log_addr_form";
91 
92     if (buf == 0)
93 	buf = vstring_alloc(100);
94     if (info_log_addr_form_form == INFO_LOG_ADDR_FORM_VAL_NOT_SET)
95 	info_log_addr_form_init();
96     if (*addr == 0
97 	|| info_log_addr_form_form == INFO_LOG_ADDR_FORM_VAL_INTERNAL) {
98 	vstring_strcpy(buf, addr);
99     } else if (info_log_addr_form_form == INFO_LOG_ADDR_FORM_VAL_EXTERNAL) {
100 	quote_822_local(buf, addr);
101     } else {
102 	msg_panic("%s: bad format type: %d",
103 		  myname, info_log_addr_form_form);
104     }
105     return (buf);
106 }
107 
108 /* info_log_addr_form_recipient - format a recipient address for info logging */
109 
info_log_addr_form_recipient(const char * recipient_addr)110 const char *info_log_addr_form_recipient(const char *recipient_addr)
111 {
112     static VSTRING *recipient_buffer = 0;
113 
114     recipient_buffer = info_log_addr_form(recipient_buffer, recipient_addr);
115     return (STR(recipient_buffer));
116 }
117 
118 /* info_log_addr_form_sender - format a sender address for info logging */
119 
info_log_addr_form_sender(const char * sender_addr)120 const char *info_log_addr_form_sender(const char *sender_addr)
121 {
122     static VSTRING *sender_buffer = 0;
123 
124     sender_buffer = info_log_addr_form(sender_buffer, sender_addr);
125     return (STR(sender_buffer));
126 }
127