Index: dv-amavisd-milter-1.5.0/amavisd-milter/main.c =================================================================== --- dv-amavisd-milter-1.5.0.orig/amavisd-milter/main.c 2011-09-12 20:43:17.000000000 +0200 +++ dv-amavisd-milter-1.5.0/amavisd-milter/main.c 2011-09-12 20:56:01.000000000 +0200 @@ -38,6 +38,7 @@ /* ** GLOBAL VARIABLES */ +int policybank_from_daemon_name = 0; int daemonize = 1; int daemonized = 0; int debug_level = LOG_WARNING; @@ -66,6 +67,7 @@ { (void) fprintf(stdout, "\nUsage: %s [OPTIONS]\n", progname); (void) fprintf(stdout, "Options are:\n"); + (void) fprintf(stdout, " -b Select Policybank from MilterMacro daemon_name\n"); (void) fprintf(stdout, " -d debug-level Set debug level\n"); (void) fprintf(stdout, " -D delivery Delivery care of server or client\n"); (void) fprintf(stdout, " -f Run in the foreground\n"); @@ -123,7 +125,7 @@ int main(int argc, char *argv[]) { - static const char *args = "d:D:fhm:M:p:Pq:s:S:t:T:vw:"; + static const char *args = "bd:D:fhm:M:p:Pq:s:S:t:T:vw:"; int c, rstat; char *p; @@ -147,6 +149,9 @@ /* Process command line options */ while ((c = getopt(argc, argv, args)) != EOF) { switch (c) { + case 'b': + policybank_from_daemon_name = 1; + break; case 'd': /* debug level */ if (optarg == NULL || *optarg == '\0') { usageerr(progname, "option requires an argument -- %c", Index: dv-amavisd-milter-1.5.0/amavisd-milter/amavisd-milter.h =================================================================== --- dv-amavisd-milter-1.5.0.orig/amavisd-milter/amavisd-milter.h 2011-09-12 20:43:17.000000000 +0200 +++ dv-amavisd-milter-1.5.0/amavisd-milter/amavisd-milter.h 2011-09-12 20:56:01.000000000 +0200 @@ -93,6 +93,7 @@ extern sfsistat mlfi_abort(SMFICTX *); /* Global variables */ +extern int policybank_from_daemon_name; /* Select Policybank from Miltermacro daemon_name */ extern int daemonize; /* run as daemon */ extern int daemonized; /* is daemon */ extern int debug_level; /* max debug level */ Index: dv-amavisd-milter-1.5.0/amavisd-milter/mlfi.c =================================================================== --- dv-amavisd-milter-1.5.0.orig/amavisd-milter/mlfi.c 2011-09-12 20:43:17.000000000 +0200 +++ dv-amavisd-milter-1.5.0/amavisd-milter/mlfi.c 2011-09-12 20:56:01.000000000 +0200 @@ -467,6 +467,7 @@ time_t t; struct tm gt, lt; int gmtoff; + const char *milter_macro_daemon_name; /* Check milter private data */ if (mlfi == NULL) { @@ -668,7 +669,7 @@ } /* Policy bank names */ - if (auth_type != NULL) { + if ((policybank_from_daemon_name == 0) && (auth_type != NULL)) { *mlfi->mlfi_amabuf = '\0'; l = snprintfcat(0, mlfi->mlfi_amabuf, mlfi->mlfi_amabuf_length, "SMTP_AUTH,SMTP_AUTH_%s", auth_type); @@ -683,6 +684,17 @@ } } + if (policybank_from_daemon_name == 1) { + if ((milter_macro_daemon_name = smfi_getsymval(ctx, "{daemon_name}")) != NULL) { + logqidmsg(mlfi, LOG_DEBUG, "Policybank from milter_macro_daemon_name: %s", milter_macro_daemon_name); + if ((mlfi->mlfi_policy_bank = strdup(milter_macro_daemon_name)) == NULL) { + logqidmsg(mlfi, LOG_ERR, "could not allocate memory"); + mlfi_setreply_tempfail(ctx); + return SMFIS_TEMPFAIL; + } + } + } + /* Continue processing */ return SMFIS_CONTINUE; } Index: dv-amavisd-milter-1.5.0/amavisd-milter/amavisd-milter.8 =================================================================== --- dv-amavisd-milter-1.5.0.orig/amavisd-milter/amavisd-milter.8 2011-09-12 20:43:17.000000000 +0200 +++ dv-amavisd-milter-1.5.0/amavisd-milter/amavisd-milter.8 2011-09-12 20:56:24.000000000 +0200 @@ -9,7 +9,7 @@ .Nd sendmail milter for amavisd-new .Sh SYNOPSIS .Nm -.Op Fl fhv +.Op Fl bfhv .Op Fl d Ar debug-level .Op Fl D Ar delivery-care-of .Op Fl m Ar max-conns @@ -52,6 +52,10 @@ .Ss Options The options are as follows: .Bl -tag -width indent +.It Fl b +enables alternativ selection for amavisd-new policy banks. (see +.Sy POLICY BANK +below.) .It Fl d Ar debug-level Set the debug level to .Sy debug-level Ns @@ -241,6 +245,23 @@ The number of bits used for the key of the symmetric cipher when authentication mechanism use it. .El +.Pp +If the Option +.Sy -b +is enabled, +.Nm +uses the value of the milter macro +.Sy {daemon_name} +as name of the policy bank. +.Pp +Normaly this milter macro is the name of the MTA. At least in postfix is is mostly unused +and can be set for private purposes. To select an alternative policy bank for a submission +service change the master.cf by appending an option to the specific smtpd: +.Bd -literal -offset indent +submission inet n - n - - smtpd -o milter_macro_daemon_name=ORIGINATING +.Ed +.Pp +Then the impicit defined policy bank ORIGINATING is used by amavisd-new. .Sh EXAMPLES .Ss Configuring amavisd-new In amavisd.conf file change protocol and socket settings to: