X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/f44cbc208bbc37a70e527d4ed3ab517b63f0d950..261dc43e32f6039781ca92535e56f5caaa68b809:/src/src/sieve.c diff --git a/src/src/sieve.c b/src/src/sieve.c index 30fa62999..db19d713b 100644 --- a/src/src/sieve.c +++ b/src/src/sieve.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/sieve.c,v 1.35 2008/11/18 11:10:43 michael Exp $ */ +/* $Cambridge: exim/src/src/sieve.c,v 1.38 2009/11/05 19:40:51 nm4 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -71,6 +71,7 @@ struct Sieve int require_enotify; struct Notification *notified; #endif + uschar *enotify_mailto_owner; #ifdef SUBADDRESS int require_subaddress; #endif @@ -2970,7 +2971,7 @@ while (*filter->pc) subject.character=(uschar*)0; body.length=-1; body.character=(uschar*)0; - envelope_from=(sender_address && sender_address[0]) ? expand_string("$local_part_prefix$local_part$local_part_suffix@$domain") : US ""; + envelope_from=(sender_address && sender_address[0]) ? expand_string(US"$local_part_prefix$local_part$local_part_suffix@$domain") : US ""; for (;;) { if (parse_white(filter)==-1) return -1; @@ -3037,11 +3038,11 @@ while (*filter->pc) for (already=filter->notified; already; already=already->next) { if (already->method.length==method.length - && (method.length==-1 || strcmp(already->method.character,method.character)==0) + && (method.length==-1 || Ustrcmp(already->method.character,method.character)==0) && already->importance.length==importance.length - && (importance.length==-1 || strcmp(already->importance.character,importance.character)==0) + && (importance.length==-1 || Ustrcmp(already->importance.character,importance.character)==0) && already->message.length==message.length - && (message.length==-1 || strcmp(already->message.character,message.character)==0)) + && (message.length==-1 || Ustrcmp(already->message.character,message.character)==0)) break; } if (already==(struct Notification*)0) @@ -3067,9 +3068,9 @@ while (*filter->pc) int buffer_capacity; f = fdopen(fd, "wb"); - fprintf(f,"From: %s\n",from.length==-1 ? expand_string("$local_part_prefix$local_part$local_part_suffix@$domain") : from.character); + fprintf(f,"From: %s\n",from.length==-1 ? expand_string(US"$local_part_prefix$local_part$local_part_suffix@$domain") : from.character); for (p=recipient; p; p=p->next) fprintf(f,"To: %s\n",p->text); - fprintf(f,"Auto-Submitted: auto-notified\n"); + fprintf(f,"Auto-Submitted: auto-notified; %s\n",filter->enotify_mailto_owner); if (header.length>0) fprintf(f,"%s",header.character); if (message.length==-1) { @@ -3490,7 +3491,15 @@ while (parse_identifier(filter,CUS "require")) else if (eq_octet(check,&str_envelope_auth,0)) filter->require_envelope_auth=1; #endif #ifdef ENOTIFY - else if (eq_octet(check,&str_enotify,0)) filter->require_enotify=1; + else if (eq_octet(check,&str_enotify,0)) + { + if (filter->enotify_mailto_owner == NULL) + { + filter->errmsg=CUS "enotify disabled"; + return -1; + } + filter->require_enotify=1; + } #endif #ifdef SUBADDRESS else if (eq_octet(check,&str_subaddress,0)) filter->require_subaddress=1; @@ -3538,7 +3547,8 @@ Arguments: filter points to the entire file, read into store as a single string options controls whether various special things are allowed, and requests special actions (not currently used) - sieve_vacation_directory where to store vacation "once" files + vacation_directory where to store vacation "once" files + enotify_mailto_owner owner of mailto notifications useraddress string expression for :user part of address subaddress string expression for :subaddress part of address generated where to hang newly-generated addresses @@ -3554,7 +3564,8 @@ Returns: FF_DELIVERED success, a significant action was taken int sieve_interpret(uschar *filter, int options, uschar *vacation_directory, - uschar *useraddress, uschar *subaddress, address_item **generated, uschar **error) + uschar *enotify_mailto_owner, uschar *useraddress, uschar *subaddress, + address_item **generated, uschar **error) { struct Sieve sieve; int r; @@ -3580,6 +3591,20 @@ else } } +if (enotify_mailto_owner == NULL) + sieve.enotify_mailto_owner = NULL; +else + { + sieve.enotify_mailto_owner=expand_string(enotify_mailto_owner); + if (sieve.enotify_mailto_owner == NULL) + { + *error = string_sprintf("failed to expand \"%s\" " + "(sieve_enotify_mailto_owner): %s", enotify_mailto_owner, + expand_string_message); + return FF_ERROR; + } + } + sieve.useraddress = useraddress == NULL ? CUS "$local_part_prefix$local_part$local_part_suffix" : useraddress; sieve.subaddress = subaddress;