X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/059ec3d9952740285fb1ebf47961b8aca2eb1b4a..8e669ac162fe3b1040297f1d021de10778dce9d9:/src/src/rda.c diff --git a/src/src/rda.c b/src/src/rda.c index 66fd8745d..cae283d8c 100644 --- a/src/src/rda.c +++ b/src/src/rda.c @@ -1,10 +1,10 @@ -/* $Cambridge: exim/src/src/rda.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */ +/* $Cambridge: exim/src/src/rda.c,v 1.4 2005/02/17 11:58:26 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2004 */ +/* Copyright (c) University of Cambridge 1995 - 2005 */ /* See the file NOTICE for conditions of use and distribution. */ /* This module contains code for extracting addresses from a forwarding list @@ -374,23 +374,42 @@ if (*filtertype != FILTER_FORWARD) int frc; int old_expand_forbid = expand_forbid; + DEBUG(D_route) debug_printf("data is %s filter program\n", + (*filtertype == FILTER_EXIM)? "an Exim" : "a Sieve"); + + /* RDO_FILTER is an "allow" bit */ + if ((options & RDO_FILTER) == 0) { *error = US"filtering not enabled"; return FF_ERROR; } - DEBUG(D_route) debug_printf("data is %s filter program\n", - (*filtertype == FILTER_EXIM)? "an Exim" : "a Sieve"); - expand_forbid = (expand_forbid & ~RDO_FILTER_EXPANSIONS) | (options & RDO_FILTER_EXPANSIONS); - frc = (*filtertype == FILTER_EXIM)? - filter_interpret(data, options, generated, error) - : - sieve_interpret(data, options, sieve_vacation_directory, generated, error); + /* RDO_{EXIM,SIEVE}_FILTER are forbid bits */ + + if (*filtertype == FILTER_EXIM) + { + if ((options & RDO_EXIM_FILTER) != 0) + { + *error = US"Exim filtering not enabled"; + return FF_ERROR; + } + frc = filter_interpret(data, options, generated, error); + } + else + { + if ((options & RDO_SIEVE_FILTER) != 0) + { + *error = US"Sieve filtering not enabled"; + return FF_ERROR; + } + frc = sieve_interpret(data, options, sieve_vacation_directory, generated, + error); + } expand_forbid = old_expand_forbid; return frc;