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