1 /* $NetBSD: smtp_misc.c,v 1.2 2020/03/18 19:05:20 christos Exp $ */
2
3 /*++
4 /* NAME
5 /* smtp_misc 3
6 /* SUMMARY
7 /* SMTP client address rewriting
8 /* SYNOPSIS
9 /* #include <smtp_addr.h>
10 /*
11 /* void smtp_rewrite_generic_internal(
12 /* VSTRING *dst,
13 /* const char *src);
14 /*
15 /* void smtp_quote_822_address_flags(
16 /* VSTRING *dst,
17 /* const char *src,
18 /* int flags);
19 /*
20 /* void smtp_quote_821_address(
21 /* VSTRING *dst,
22 /* const char *src);
23 /* DESCRIPTION
24 /* smtp_rewrite_generic_internal() rewrites a non-empty address
25 /* if generic mapping is enabled, otherwise copies it literally.
26 /*
27 /* smtp_quote_822_address_flags() is a wrapper around
28 /* quote_822_local_flags(), except for the empty address which
29 /* is copied literally.
30 /*
31 /* smtp_quote_821_address() is a wrapper around quote_821_local(),
32 /* except for the empty address or with "smtp_quote_rfc821_envelope
33 /* = no"; in those cases the address is copied literally.
34 /* DIAGNOSTICS
35 /* Fatal: out of memory.
36 /* LICENSE
37 /* .ad
38 /* .fi
39 /* The Secure Mailer license must be distributed with this software.
40 /* AUTHOR(S)
41 /* Wietse Venema
42 /* Google, Inc.
43 /* 111 8th Avenue
44 /* New York, NY 10011, USA
45 /*--*/
46
47 /*
48 * System library.
49 */
50 #include <sys_defs.h>
51
52 /*
53 * Utility library.
54 */
55 #include <vstring.h>
56
57 /*
58 * Global library.
59 */
60 #include <ext_prop.h>
61 #include <mail_params.h>
62 #include <quote_821_local.h>
63 #include <quote_822_local.h>
64
65 /*
66 * Application-specific.
67 */
68 #include <smtp.h>
69
70 /* smtp_rewrite_generic_internal - generic non-empty address rewriting */
71
smtp_rewrite_generic_internal(VSTRING * dst,const char * src)72 void smtp_rewrite_generic_internal(VSTRING *dst, const char *src)
73 {
74 vstring_strcpy(dst, src);
75 if (*src && smtp_generic_maps)
76 smtp_map11_internal(dst, smtp_generic_maps,
77 smtp_ext_prop_mask & EXT_PROP_GENERIC);
78 }
79
80 /* smtp_quote_822_address_flags - quote non-empty header address */
81
smtp_quote_822_address_flags(VSTRING * dst,const char * src,int flags)82 void smtp_quote_822_address_flags(VSTRING *dst, const char *src, int flags)
83 {
84 if (*src) {
85 quote_822_local_flags(dst, src, flags);
86 } else if (flags & QUOTE_FLAG_APPEND) {
87 vstring_strcat(dst, src);
88 } else {
89 vstring_strcpy(dst, src);
90 }
91 }
92
93 /* smtp_quote_821_address - quote non-empty envelope address */
94
smtp_quote_821_address(VSTRING * dst,const char * src)95 void smtp_quote_821_address(VSTRING *dst, const char *src)
96 {
97 if (*src && var_smtp_quote_821_env) {
98 quote_821_local(dst, src);
99 } else {
100 vstring_strcpy(dst, src);
101 }
102 }
103