X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/c3aea640e1d51e0eab69cde6a3dc8b30e41cbf9c..8e669ac162fe3b1040297f1d021de10778dce9d9:/src/src/sieve.c diff --git a/src/src/sieve.c b/src/src/sieve.c index b5053c796..0229dbcbd 100644 --- a/src/src/sieve.c +++ b/src/src/sieve.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/sieve.c,v 1.5 2005/02/15 15:48:46 ph10 Exp $ */ +/* $Cambridge: exim/src/src/sieve.c,v 1.7 2005/02/17 11:58:26 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -2101,7 +2101,7 @@ if (*filter->pc=='{') } else { - filter->errmsg=CUS "expecting command or closing brace"; + filter->errmsg=CUS "expecting command or closing brace"; return -1; } } @@ -2373,7 +2373,7 @@ while (*filter->pc) int m; unsigned long days; - struct String *addresses=(struct String*)0; + struct String *addresses; struct String subject; int reason_is_mime; string_item *aliases; @@ -2394,6 +2394,7 @@ while (*filter->pc) filter->vacation_ran=1; } days=VACATION_MIN_DAYS>7 ? VACATION_MIN_DAYS : 7; + addresses=(struct String*)0; subject.character=(uschar*)0; subject.length=-1; aliases=NULL; @@ -2458,6 +2459,7 @@ while (*filter->pc) uschar *buffer; int buffer_capacity; struct String key; + struct String *a; md5 base; uschar digest[16]; uschar hexdigest[33]; @@ -2479,6 +2481,11 @@ while (*filter->pc) if (subject.length!=-1) key.character=string_cat(key.character,&capacity,&key.length,subject.character,subject.length); key.character=string_cat(key.character,&capacity,&key.length,reason_is_mime?US"1":US"0",1); key.character=string_cat(key.character,&capacity,&key.length,reason.character,reason.length); + if (addresses!=(struct String*)0) for (a=addresses; a->length!=-1; ++a) + { + key.character=string_cat(key.character,&capacity,&key.length,US":",1); + key.character=string_cat(key.character,&capacity,&key.length,a->character,a->length); + } md5_start(&base); md5_end(&base, key.character, key.length, digest); for (i = 0; i < 16; i++) sprintf(CS (hexdigest+2*i), "%02X", digest[i]); @@ -2486,6 +2493,7 @@ while (*filter->pc) start=capacity; once=string_cat(filter->vacation_directory,&capacity,&start,US"/",1); once=string_cat(once,&capacity,&start,hexdigest,33); + once[start] = '\0'; /* process subject */ @@ -2513,7 +2521,7 @@ while (*filter->pc) addr->reply = store_get(sizeof(reply_item)); memset(addr->reply,0,sizeof(reply_item)); /* XXX */ addr->reply->to = string_copy(sender_address); - addr->reply->from = expand_string(US"$local_part@$domain"); + addr->reply->from = expand_string(US"$local_part@$domain"); /* Allocation is larger than neccessary, but enough even for split MIME words */ buffer_capacity=16+4*subject.length; buffer=store_get(buffer_capacity); @@ -2541,10 +2549,13 @@ while (*filter->pc) capacity = 0; start = 0; addr->reply->headers = string_cat(NULL,&capacity,&start,reason.character,mime_body-reason.character); + addr->reply->headers[start] = '\0'; capacity = 0; start = 0; - if (mime_bodyreply->text = string_cat(NULL,&capacity,&start,mime_body,reason_end-mime_body); + addr->reply->text[start] = '\0'; } else {