157 |
#define KW_SOCKS_AUTH 11 |
#define KW_SOCKS_AUTH 11 |
158 |
#define KW_READ_ENTIRE_BODY 12 |
#define KW_READ_ENTIRE_BODY 12 |
159 |
|
|
160 |
|
char ** |
161 |
|
list_to_argv(struct list *list) |
162 |
|
{ |
163 |
|
int i, argc; |
164 |
|
char **argv, *p; |
165 |
|
|
166 |
|
argc = list_count(list); |
167 |
|
argv = xmalloc((argc + 1) * sizeof(argv[0])); |
168 |
|
for (i = 0, p = list_first(list); p; i++, p = list_next(list)) |
169 |
|
argv[i] = strdup(p); |
170 |
|
argv[i] = NULL; |
171 |
|
return argv; |
172 |
|
} |
173 |
|
|
174 |
int |
int |
175 |
control_parser(int method, int key, char *arg, void *inv_data, void *func_data, |
control_parser(int method, int key, struct list *arglist, |
176 |
MESSAGE *msg) |
void *inv_data, void *func_data, MESSAGE *msg) |
177 |
{ |
{ |
178 |
|
char *arg = list_item(arglist, 0); |
179 |
|
|
180 |
switch (key) { |
switch (key) { |
181 |
case KW_BIND: |
case KW_BIND: |
182 |
parse_mtahost(arg, session.tunnel, &session.tunnel_port); |
parse_mtahost(arg, session.tunnel, &session.tunnel_port); |
230 |
parse_mtaport(arg, session.mta, &session.mta_port); |
parse_mtaport(arg, session.mta, &session.mta_port); |
231 |
break; |
break; |
232 |
|
|
233 |
case KW_LOCAL_MTA: { |
case KW_LOCAL_MTA: |
|
char *a = 0; |
|
|
char *p = 0; |
|
|
char tmp[LINEBUFFER+1]; |
|
|
|
|
|
a = strchr(arg, ' '); /* an extra arguments */ |
|
|
if (a) { |
|
|
*a++ = '\0'; |
|
|
p = strrchr(arg, '/'); |
|
|
if (p) |
|
|
p++; |
|
|
else |
|
|
p = arg; |
|
|
snprintf(tmp, sizeof(tmp), "%s %s", p, a); |
|
|
p = arg; |
|
|
a = tmp; |
|
|
} else { /* no arguments */ |
|
|
p = arg; |
|
|
a = strrchr(arg, '/'); |
|
|
if (a) |
|
|
a++; |
|
|
else |
|
|
a = arg; |
|
|
} |
|
234 |
xfree(session.execpath); |
xfree(session.execpath); |
|
session.execpath = allocbuf(p, MAXPATHLEN); |
|
|
topt |= T_LOCAL_MTA; |
|
235 |
xfree_pptr(session.execargs); |
xfree_pptr(session.execargs); |
236 |
session.execargs = gen_execargs(a); |
session.execpath = strdup(arg); |
237 |
} |
session.execargs = list_to_argv(arglist); |
238 |
break; |
topt |= T_LOCAL_MTA; |
239 |
|
break; |
240 |
|
|
241 |
case KW_ESMTP_AUTH: { |
case KW_ESMTP_AUTH: { |
242 |
char *p = strchr(arg, ':'); |
char *p = strchr(arg, ':'); |
350 |
#define KW_CAFILE 5 |
#define KW_CAFILE 5 |
351 |
|
|
352 |
int |
int |
353 |
tls_parser(int method, int key, char *arg, void *inv_data, void *func_data, |
tls_parser(int method, int key, struct list *arglist, |
354 |
MESSAGE *msg) |
void *inv_data, void *func_data, MESSAGE *msg) |
355 |
{ |
{ |
356 |
|
char *arg = list_item(arglist, 0); |
357 |
switch (key) { |
switch (key) { |
358 |
case KW_SSL: |
case KW_SSL: |
359 |
setbool(arg, topt, T_SSL); |
setbool(arg, topt, T_SSL); |
433 |
#define KW_EXTERNAL_BODY_PROCESSOR 11 |
#define KW_EXTERNAL_BODY_PROCESSOR 11 |
434 |
|
|
435 |
int |
int |
436 |
rule_parser(int method, int key, char *arg, void *inv_data, void *func_data, |
rule_parser(int method, int key, struct list *arglist, |
437 |
MESSAGE *msg) |
void *inv_data, void *func_data, MESSAGE *msg) |
438 |
{ |
{ |
439 |
|
char *arg = list_item(arglist, 0); |
440 |
|
char **argv; |
441 |
|
|
442 |
switch (key) { |
switch (key) { |
443 |
case KW_SIGNATURE_FILE_APPEND: |
case KW_SIGNATURE_FILE_APPEND: |
444 |
message_append_signature_file(msg, arg); |
message_append_signature_file(msg, arg); |
474 |
break; |
break; |
475 |
|
|
476 |
case KW_EXTERNAL_BODY_PROCESSOR: |
case KW_EXTERNAL_BODY_PROCESSOR: |
477 |
message_external_proc(msg, arg); |
session.execargs = list_to_argv(arglist); |
478 |
|
message_external_proc(msg, argv); |
479 |
|
xfree_pptr(argv); |
480 |
break; |
break; |
481 |
|
|
482 |
default: |
default: |