Mercurial > masqmail
comparison src/conf.c @ 317:55b7bde95d37
reworked allowed and denied addrs for routes
The following refactorings had been made:
- allowed_mail_locals + allowed_return_paths -> allowed_senders
- not_allowed_mail_locals + not_allowed_return_paths -> denied_senders
- allowed_rcpt_domains -> allowed_recipients
- not_allowed_rcpt_domains -> denied_recipients
The new options allow more consistent and more flexible matching.
author | meillo@marmaro.de |
---|---|
date | Thu, 28 Apr 2011 09:55:06 +0200 |
parents | e230bcd0f1c6 |
children | d41fb3b9ed3e |
comparison
equal
deleted
inserted
replaced
316:d596ac8b5afb | 317:55b7bde95d37 |
---|---|
140 p++; | 140 p++; |
141 } | 141 } |
142 return list; | 142 return list; |
143 } | 143 } |
144 | 144 |
145 /* Split the addrs at '@' into local_part and domain. Without an '@' | |
146 everything is local_part. Create address structs, which are put | |
147 into a list and returned. | |
148 This funktion is used for lists of addrs containing globbing chars (* and ?). | |
149 We don't need valid RFC821 addresses here, just patterns to match against. | |
150 */ | |
145 static GList* | 151 static GList* |
146 parse_address_list(gchar * line, gboolean read_file) | 152 parse_address_glob_list(gchar * line, gboolean read_file) |
147 { | 153 { |
148 GList *plain_list = parse_list(line, read_file); | 154 GList *plain_list = parse_list(line, read_file); |
149 GList *node; | 155 GList *node; |
150 GList *list = NULL; | 156 GList *list = NULL; |
151 | 157 |
152 foreach(plain_list, node) { | 158 foreach(plain_list, node) { |
153 gchar *item = (gchar *) (node->data); | 159 gchar *item = (gchar *) (node->data); |
154 address *addr = create_address(item, TRUE); | 160 char* at; |
155 if (addr) | 161 char* p; |
156 list = g_list_append(list, addr); | 162 address *addr = calloc(1, sizeof(address)); |
163 | |
164 for (p=item+strlen(item)-1; isspace(*p) || *p=='>'; p--) { | |
165 *p = '\0'; | |
166 } | |
167 for (p=item; isspace(*p) || *p=='<'; p++) { | |
168 } | |
169 | |
170 addr->address = strdup(p); | |
171 at = strrchr(p, '@'); | |
172 if (at) { | |
173 *at = '\0'; | |
174 addr->local_part = strdup(p); | |
175 addr->domain = strdup(at+1); | |
176 } else { | |
177 addr->local_part = strdup(p); | |
178 addr->domain = ""; | |
179 } | |
180 list = g_list_append(list, addr); | |
181 DEBUG(6) debugf("parse_address_glob_list: read pattern `%s' `%s'\n", | |
182 addr->local_part, addr->domain); | |
157 g_free(item); | 183 g_free(item); |
158 } | 184 } |
159 g_list_free(plain_list); | 185 g_list_free(plain_list); |
160 | |
161 return list; | 186 return list; |
162 } | 187 } |
163 | 188 |
164 static GList* | 189 static GList* |
165 parse_resolve_list(gchar * line) | 190 parse_resolve_list(gchar * line) |
646 route->do_correct_helo = parse_boolean(rval); | 671 route->do_correct_helo = parse_boolean(rval); |
647 else if (strcmp(lval, "instant_helo") == 0) | 672 else if (strcmp(lval, "instant_helo") == 0) |
648 route->instant_helo = parse_boolean(rval); | 673 route->instant_helo = parse_boolean(rval); |
649 else if (strcmp(lval, "do_pipelining") == 0) | 674 else if (strcmp(lval, "do_pipelining") == 0) |
650 route->do_pipelining = parse_boolean(rval); | 675 route->do_pipelining = parse_boolean(rval); |
651 else if (strcmp(lval, "allowed_return_paths") == 0) | 676 |
652 route->allowed_return_paths = parse_address_list(rval, TRUE); | 677 else if (strcmp(lval, "allowed_senders") == 0) |
653 else if (strcmp(lval, "allowed_mail_locals") == 0) | 678 route->allowed_senders = parse_address_glob_list(rval, TRUE); |
654 route->allowed_mail_locals = parse_list(rval, TRUE); | 679 else if (strcmp(lval, "denied_senders") == 0) |
655 else if (strcmp(lval, "not_allowed_return_paths") == 0) | 680 route->denied_senders = parse_address_glob_list(rval, TRUE); |
656 route->not_allowed_return_paths = parse_address_list(rval, TRUE); | 681 else if (strcmp(lval, "allowed_recipients") == 0) |
657 else if (strcmp(lval, "not_allowed_mail_locals") == 0) | 682 route->allowed_recipients = parse_address_glob_list(rval, TRUE); |
658 route->not_allowed_mail_locals = parse_list(rval, TRUE); | 683 else if (strcmp(lval, "denied_recipients") == 0) |
659 else if (strcmp(lval, "allowed_rcpt_domains") == 0) | 684 route->denied_recipients = parse_address_glob_list(rval, TRUE); |
660 route->allowed_rcpt_domains = parse_list(rval, TRUE); | 685 |
661 else if (strcmp(lval, "not_allowed_rcpt_domains") == 0) | |
662 route->not_allowed_rcpt_domains = parse_list(rval, TRUE); | |
663 else if (strcmp(lval, "set_h_from_domain") == 0) | 686 else if (strcmp(lval, "set_h_from_domain") == 0) |
664 route->set_h_from_domain = g_strdup(rval); | 687 route->set_h_from_domain = g_strdup(rval); |
665 else if (strcmp(lval, "set_h_reply_to_domain") == 0) | 688 else if (strcmp(lval, "set_h_reply_to_domain") == 0) |
666 route->set_h_reply_to_domain = g_strdup(rval); | 689 route->set_h_reply_to_domain = g_strdup(rval); |
667 else if (strcmp(lval, "set_return_path_domain") == 0) | 690 else if (strcmp(lval, "set_return_path_domain") == 0) |
806 } | 829 } |
807 if (r->wrapper) | 830 if (r->wrapper) |
808 g_free(r->wrapper); | 831 g_free(r->wrapper); |
809 if (r->helo_name) | 832 if (r->helo_name) |
810 g_free(r->helo_name); | 833 g_free(r->helo_name); |
811 _g_list_free_all(r->allowed_mail_locals); | 834 _g_list_free_all(r->allowed_senders); |
812 _g_list_free_all(r->not_allowed_mail_locals); | 835 _g_list_free_all(r->denied_senders); |
813 _g_list_free_all(r->allowed_rcpt_domains); | 836 _g_list_free_all(r->allowed_recipients); |
814 _g_list_free_all(r->not_allowed_rcpt_domains); | 837 _g_list_free_all(r->denied_recipients); |
815 if (r->set_h_from_domain) | 838 if (r->set_h_from_domain) |
816 g_free(r->set_h_from_domain); | 839 g_free(r->set_h_from_domain); |
817 if (r->set_h_reply_to_domain) | 840 if (r->set_h_reply_to_domain) |
818 g_free(r->set_h_reply_to_domain); | 841 g_free(r->set_h_reply_to_domain); |
819 if (r->set_return_path_domain) | 842 if (r->set_return_path_domain) |