7
7
/* #include <cleanup.h>
9
/* void cleanup_rewrite_external(result, addr)
13
/* void cleanup_rewrite_internal(result, addr)
17
/* void cleanup_rewrite_tree(tree)
9
/* int cleanup_rewrite_external(context_name, result, addr)
10
/* const char *context;
14
/* int cleanup_rewrite_internal(context_name, result, addr)
15
/* const char *context;
19
/* int cleanup_rewrite_tree(context_name, tree)
20
/* const char *context;
20
23
/* This module rewrites addresses to canonical form, adding missing
21
24
/* domains and stripping source routes etc., and performs
22
25
/* \fIcanonical\fR map lookups to map addresses to official form.
26
/* These functions return non-zero when the address was changed.
24
28
/* cleanup_rewrite_init() performs one-time initialization.
33
37
/* cleanup_rewrite_tree() is a wrapper around the
34
38
/* cleanup_rewrite_external() routine that transforms from
35
39
/* internal parse tree form to external form and back.
43
/* The name of an address rewriting context that supplies
44
/* the equivalents of myorigin and mydomain.
69
82
/* cleanup_rewrite_external - rewrite address external form */
71
void cleanup_rewrite_external(VSTRING *result, const char *addr)
84
int cleanup_rewrite_external(const char *context_name, VSTRING *result,
73
rewrite_clnt(REWRITE_CANON, addr, result);
87
rewrite_clnt(context_name, addr, result);
88
return (strcmp(STR(result), addr) != 0);
76
91
/* cleanup_rewrite_tree - rewrite address node */
78
void cleanup_rewrite_tree(TOK822 *tree)
93
int cleanup_rewrite_tree(const char *context_name, TOK822 *tree)
80
95
VSTRING *dst = vstring_alloc(100);
81
96
VSTRING *src = vstring_alloc(100);
83
99
tok822_externalize(src, tree->head, TOK822_STR_DEFL);
84
cleanup_rewrite_external(dst, STR(src));
100
did_rewrite = cleanup_rewrite_external(context_name, dst, STR(src));
85
101
tok822_free_tree(tree->head);
86
102
tree->head = tok822_scan(STR(dst), &tree->tail);
87
103
vstring_free(dst);
88
104
vstring_free(src);
105
return (did_rewrite);
91
108
/* cleanup_rewrite_internal - rewrite address internal form */
93
void cleanup_rewrite_internal(VSTRING *result, const char *addr)
110
int cleanup_rewrite_internal(const char *context_name,
111
VSTRING *result, const char *addr)
95
113
VSTRING *dst = vstring_alloc(100);
96
114
VSTRING *src = vstring_alloc(100);
98
117
quote_822_local(src, addr);
99
cleanup_rewrite_external(dst, STR(src));
118
did_rewrite = cleanup_rewrite_external(context_name, dst, STR(src));
100
119
unquote_822_local(result, STR(dst));
101
120
vstring_free(dst);
102
121
vstring_free(src);
122
return (did_rewrite);