masqmail
diff src/route.c @ 373:4cab237ce923
Fixed bug in matching of allowed recipients.
Thanks to Juergen Daubert for finding and reporting the issue.
The code had evaluated completely different data ...
author | markus schnalke <meillo@marmaro.de> |
---|---|
date | Sat, 14 Jan 2012 11:47:57 +0100 |
parents | b27f66555ba8 |
children | 5593964ec779 |
line diff
1.1 --- a/src/route.c Tue Oct 25 14:31:28 2011 +0200 1.2 +++ b/src/route.c Sat Jan 14 11:47:57 2012 +0100 1.3 @@ -204,7 +204,7 @@ 1.4 GList **rl_matching, GList **rl_others) 1.5 { 1.6 GList *rcpt_node; 1.7 - GList *host_node = NULL; 1.8 + GList *pat_node = NULL; 1.9 address *rcpt = NULL; 1.10 1.11 if (rcpt_list == NULL) 1.12 @@ -212,22 +212,23 @@ 1.13 1.14 foreach(rcpt_list, rcpt_node) { 1.15 rcpt = (address *) (rcpt_node->data); 1.16 - host_node = NULL; 1.17 + pat_node = NULL; 1.18 1.19 if (addr_is_local(rcpt)) { 1.20 if (rl_local) 1.21 *rl_local = g_list_append(*rl_local, rcpt); 1.22 } else { 1.23 /* 1.24 - ** if patterns is NULL, host_node will be NULL, 1.25 + ** if patterns is NULL, pat_node will be NULL, 1.26 ** hence all non-locals are put to others 1.27 */ 1.28 - foreach(patterns, host_node) { 1.29 - gchar *host = (gchar *) (host_node->data); 1.30 - if (fnmatch(host, rcpt->domain, FNM_CASEFOLD) == 0) 1.31 + foreach(patterns, pat_node) { 1.32 + address *pat = (address *) (pat_node->data); 1.33 + if (fnmatch(pat->domain, rcpt->domain, FNM_CASEFOLD)==0 && fnmatch(pat->local_part, rcpt->local_part, 0)==0) { /* TODO: match local_part caseless? */ 1.34 break; 1.35 + } 1.36 } 1.37 - if (host_node) { 1.38 + if (pat_node) { 1.39 if (rl_matching) 1.40 *rl_matching = g_list_append(*rl_matching, rcpt); 1.41 } else {