[Mixmaster-devel] r991 - trunk/Mix/Src
Brought to you by:
weaselp
From: <co...@as...> - 2008-03-07 17:30:07
|
Author: colin Date: 2008-03-07 18:30:03 +0100 (Fri, 07 Mar 2008) New Revision: 991 Modified: trunk/Mix/Src/pool.c Log: doallow() check more than one email address in a line Modified: trunk/Mix/Src/pool.c =================================================================== --- trunk/Mix/Src/pool.c 2008-03-07 17:22:43 UTC (rev 990) +++ trunk/Mix/Src/pool.c 2008-03-07 17:30:03 UTC (rev 991) @@ -617,22 +617,39 @@ int doallow(BUFFER *line, BUFFER *filter) /* line is a To, CC or BCC line. - * problem is: there may be multiple addresses in one header - * line but we only want to allow if _all_ are allowed * - * So to not send direct if we do not want, we _never_ send - * direct if there is more than one address: This is - * assumed to be the case when there is a - * comma in the header line. + * there may be multiple addresses in one header + * line but we only allow if _all_ are allowed * - * this should probably be rewritten somehwhen. therefore: FIXME - * * returns: 1 if allowed * 0 if message should be send indirectly */ { - if (strchr( line->data, ',')) return 0; - return doblock(line, filter, 0); + BUFFER *newlinelist; + BUFFER *addrs; + int res = 1; + + newlinelist = buf_new(); + addrs = buf_new(); + + while (buf_getc(line) != ':'); /* find the : */ + buf_getc(line); /* skip the space */ + buf_rest(addrs, line); /* and copy the addresses */ + buf_rewind(line); + + rfc822_addr(addrs, newlinelist); /* split into one address per line */ + + buf_clear(addrs); + + while (buf_getline(newlinelist, addrs) != -1) { + if (doblock(addrs, filter, 0) == 0) res = 0; + buf_clear(addrs); + } + + buf_free(newlinelist); + buf_free(addrs); + + return (res); } int filtermsg(BUFFER *in) |