X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/8e669ac162fe3b1040297f1d021de10778dce9d9..e4a89c47c2a7d9a9268f36728b4b4f1b028b17b1:/src/src/routers/redirect.c diff --git a/src/src/routers/redirect.c b/src/src/routers/redirect.c index 90ec9de6a..0153a4d49 100644 --- a/src/src/routers/redirect.c +++ b/src/src/routers/redirect.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/routers/redirect.c,v 1.5 2005/02/17 11:58:27 ph10 Exp $ */ +/* $Cambridge: exim/src/src/routers/redirect.c,v 1.9 2005/04/06 14:40:24 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -45,16 +45,16 @@ optionlist redirect_router_options[] = { (void *)offsetof(redirect_router_options_block, bit_options) }, { "forbid_file", opt_bool, (void *)offsetof(redirect_router_options_block, forbid_file) }, + { "forbid_filter_dlfunc", opt_bit | (RDON_DLFUNC << 16), + (void *)offsetof(redirect_router_options_block, bit_options) }, { "forbid_filter_existstest", opt_bit | (RDON_EXISTS << 16), (void *)offsetof(redirect_router_options_block, bit_options) }, { "forbid_filter_logwrite",opt_bit | (RDON_LOG << 16), (void *)offsetof(redirect_router_options_block, bit_options) }, { "forbid_filter_lookup", opt_bit | (RDON_LOOKUP << 16), (void *)offsetof(redirect_router_options_block, bit_options) }, - #ifdef EXIM_PERL { "forbid_filter_perl", opt_bit | (RDON_PERL << 16), (void *)offsetof(redirect_router_options_block, bit_options) }, - #endif { "forbid_filter_readfile", opt_bit | (RDON_READFILE << 16), (void *)offsetof(redirect_router_options_block, bit_options) }, { "forbid_filter_readsocket", opt_bit | (RDON_READSOCK << 16), @@ -97,6 +97,10 @@ optionlist redirect_router_options[] = { (void *)offsetof(redirect_router_options_block, reply_transport_name) }, { "rewrite", opt_bit | (RDON_REWRITE << 16), (void *)offsetof(redirect_router_options_block, bit_options) }, + { "sieve_subaddress", opt_stringptr, + (void *)offsetof(redirect_router_options_block, sieve_subaddress) }, + { "sieve_useraddress", opt_stringptr, + (void *)offsetof(redirect_router_options_block, sieve_useraddress) }, { "sieve_vacation_directory", opt_stringptr, (void *)offsetof(redirect_router_options_block, sieve_vacation_directory) }, { "skip_syntax_errors", opt_bool, @@ -138,6 +142,8 @@ redirect_router_options_block redirect_router_option_defaults = { NULL, /* include_directory */ NULL, /* pipe_transport_name */ NULL, /* reply_transport_name */ + NULL, /* sieve_subaddress */ + NULL, /* sieve_useraddress */ NULL, /* sieve_vacation_directory */ NULL, /* syntax_errors_text */ NULL, /* syntax_errors_to */ @@ -185,7 +191,10 @@ if ((ob->file == NULL) == (ob->data == NULL)) "%sone of \"file\" or \"data\" must be specified", rblock->name, (ob->file == NULL)? "" : "only "); -/* Onetime aliases can only be real addresses. Headers can't be manipulated. */ +/* Onetime aliases can only be real addresses. Headers can't be manipulated. +The combination of one_time and unseen is not allowed. We can't check the +expansion of "unseen" here, but we assume that if it is set to anything other +than false, there is likely to be a problem. */ if (ob->one_time) { @@ -194,6 +203,9 @@ if (ob->one_time) log_write(0, LOG_PANIC_DIE|LOG_CONFIG_FOR, "%s router:\n " "\"headers_add\" and \"headers_remove\" are not permitted with " "\"one_time\"", rblock->name); + if (rblock->unseen || rblock->expand_unseen != NULL) + log_write(0, LOG_PANIC_DIE|LOG_CONFIG_FOR, "%s router:\n " + "\"unseen\" may not be used with \"one_time\"", rblock->name); } /* The defaults for check_owner and check_group depend on other settings. The @@ -607,9 +619,10 @@ else } frc = rda_interpret(&redirect, options, ob->include_directory, - ob->sieve_vacation_directory, &ugid, &generated, &(addr->message), - ob->skip_syntax_errors? &eblock : NULL, &filtertype, - string_sprintf("%s router (recipient is %s)", rblock->name, addr->address)); + ob->sieve_vacation_directory, ob->sieve_useraddress, ob->sieve_subaddress, + &ugid, &generated, &(addr->message), ob->skip_syntax_errors? &eblock : NULL, + &filtertype, string_sprintf("%s router (recipient is %s)", rblock->name, + addr->address)); qualify_domain_recipient = save_qualify_domain_recipient;