# HG changeset patch # User mortenp # Date 1178729963 -36000 # Node ID 3770bb64ea17527c1993678938abc48cc502c81b # Parent df592ffbe26466d2457f5fd3882a39a93425b0b8 Added support for 'discard' keyword in access rules (Sascha Sommer) diff -r df592ffbe264 -r 3770bb64ea17 ChangeLog --- a/ChangeLog Tue Apr 03 20:38:44 2007 +1000 +++ b/ChangeLog Thu May 10 02:59:23 2007 +1000 @@ -1,3 +1,4 @@ + o Added support for 'discard' keyword in access rules (Sascha Sommer) 1.2.14 o Updated Danish listtexts (Jesper Lund) 1.2.14-RC1 diff -r df592ffbe264 -r 3770bb64ea17 README.access --- a/README.access Tue Apr 03 20:38:44 2007 +1000 +++ b/README.access Thu May 10 02:59:23 2007 +1000 @@ -13,11 +13,11 @@ all headers are first tested against the first rule, then all headers are tested against the second rule, and so on. -The first rule to match a header decides which action to take - allow, deny -or moderate the post. +The first rule to match a header decides which action to take - allow, deny, +discard or moderate the post. The syntax is quite simple: action[ [!]regexp] -- "Action" can be "allow", "deny" or "moderate". +- "Action" can be "allow", "deny", "discard" or "moderate". - The optional "!" makes the rule a match, if NO header matches the regular expression. - "Regexp" is a POSIX.2 extended regular expression. Matching is done case diff -r df592ffbe264 -r 3770bb64ea17 src/mlmmj-process.c --- a/src/mlmmj-process.c Tue Apr 03 20:38:44 2007 +1000 +++ b/src/mlmmj-process.c Thu May 10 02:59:23 2007 +1000 @@ -56,14 +56,16 @@ enum action { ALLOW, DENY, - MODERATE + MODERATE, + DISCARD }; static char *action_strs[] = { "allowed", "denied", - "moderated" + "moderated", + "discarded" }; @@ -179,6 +181,9 @@ } else if (strncmp(rule_ptr, "moderate", 8) == 0) { rule_ptr += 8; act = MODERATE; + } else if (strncmp(rule_ptr, "discard", 7) == 0) { + rule_ptr += 7; + act = DISCARD; } else { errno = 0; log_error(LOG_ARGS, "Unable to parse rule #%d \"%s\":" @@ -896,6 +901,20 @@ exit(EXIT_FAILURE); } else if (accret == MODERATE) { moderated = 1; + } else if (accret == DISCARD) { + discardname = concatstr(3, listdir, + "/queue/discarded/", randomstr); + myfree(randomstr); + if(rename(donemailname, discardname) < 0) { + log_error(LOG_ARGS, "could not rename(%s,%s)", + donemailname, discardname); + myfree(donemailname); + myfree(discardname); + exit(EXIT_FAILURE); + } + myfree(donemailname); + myfree(discardname); + exit(EXIT_SUCCESS); } }