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