On November 29, 2009 10:15:55 AM -0800 Frank Cusack <fcus...@fcusack.com> wrote:
Easy enough for me to patch the sieve code which is likely what I'll do.

Here it is.  I decided to store the timestamp (dup) info even though
it isn't used when deciding to send a response, because

1) it saves the addresses that vacation replies were sent to, so that
when disabling vacation the user can get a report of those recipients
2) if the user changes the vacation :days the dup database already
exists and doesn't have to start fresh -- just like happens if they
change it from (e.g.) :1 to :2

If you want to use this patch, you might want to consider using a
magic number (e.g. 999) for :days instead of 0, so that users unaware
of the magic number can't easily send unthrottled vacation responses.
Just change the

+       if ( ctx->days && senv->duplicate_check != NULL ) {

part to be

+       if ( ctx->days != 999 && senv->duplicate_check != NULL ) {

-frank
allow vacation :days parameter to be '0', to respond to every single message

--- dovecot-1.2-sieve-0.1.13.orig/src/lib-sieve/plugins/vacation/cmd-vacation.c 
2009-08-06 12:43:30.000000000 -0700
+++ dovecot-1.2-sieve-0.1.13/src/lib-sieve/plugins/vacation/cmd-vacation.c      
2009-12-01 22:33:50.565468045 -0800
@@ -247,10 +247,12 @@ static bool cmd_vacation_validate_number
                return FALSE;
        }
 
+#if 0
        /* Enforce :days > 0 */
        if ( sieve_ast_argument_number(*arg) == 0 ) {
                sieve_ast_argument_number_set(*arg, 1);
        }
+#endif
 
        /* Skip parameter */
        *arg = sieve_ast_argument_next(*arg);
@@ -585,9 +587,11 @@ static int ext_vacation_operation_execut
                                        return SIEVE_EXEC_BIN_CORRUPT;
                                }

+#if 0
                                /* Enforce days > 0 (just to be sure) */
                                if ( days == 0 )
                                        days = 1;
+#endif
                                break;
                        case OPT_SUBJECT:
                                if ( !sieve_opr_string_read(renv, address, 
&subject) ) {
@@ -996,7 +1000,7 @@ static bool act_vacation_commit
        }

        /* Did whe respond to this user before? */
-       if ( senv->duplicate_check != NULL ) {
+       if ( ctx->days && senv->duplicate_check != NULL ) {
                act_vacation_hash(ctx, sender, dupl_hash);

                if ( senv->duplicate_check(dupl_hash, sizeof(dupl_hash), 
senv->username) ) 

Reply via email to