Hi Viktor, i applyed the patch and after connecting to port 25 i'll get:
postfix/master[15476]: warning: process /usr/lib/postfix/sbin/smtpd pid 15593 killed by signal 11 postfix/master[15476]: warning: /usr/lib/postfix/sbin/smtpd: bad command startup -- throttling my code: /* milter_macro_lookup - look up macros */ static ARGV *milter_macro_lookup(MILTERS *milters, const char *macro_names) { const char *myname = "milter_macro_lookup"; char *saved_names = mystrdup(macro_names); char *cp = saved_names; ARGV *argv = argv_alloc(10); VSTRING *canon_buf = vstring_alloc(20); const char *value; const char *name; const char *cname; while ((name = mystrtok(&cp, CHARS_COMMA_SP)) != 0) { if (msg_verbose) msg_info("%s: \"%s\"", myname, name); if (*name != '{') /* } */ cname = STR(vstring_sprintf(canon_buf, "%s", name)); if ((value = milters->mac_lookup(cname, milters->mac_context)) != 0) { if (msg_verbose) msg_info("%s: result \"%s\"", myname, value); argv_add(argv, name[1] == '\0' ? name : cname, value, (char *) 0); } else if (milters->macro_defaults != 0 && (value = htable_find(milters->macro_defaults, name)) != 0) { if (msg_verbose) msg_info("%s: using default \"%s\"", myname, value); argv_add(argv, name, value, (char *) 0); } } myfree(saved_names); vstring_free(canon_buf); return (argv); } Thank you, Matthias Schneider ----- Ursprüngliche Mail ----- Von: "Viktor Dukhovni" <postfix-us...@dukhovni.org> An: postfix-users@postfix.org Gesendet: Dienstag, 14. Februar 2017 20:43:42 Betreff: Re: milter macro names (potential patch) On Tue, Feb 14, 2017 at 05:54:07PM +0100, Matthias Schneider wrote: > I just tried to upgrade our postfix instances from 2.11 to 3.1. This broke > our milter that is expecting macro with name "i" but we got "{i}". > Could we make this configurable? It may be simplest to revert to the original (braceless) form of single-letter macros, I think that's more typically expected. >From the Sendmail book: Macros may have single-character names or multicharacter names. Multicharacter names must always be enclosed in curly braces. Single-character names may be enclosed in curly braces if you desire. Prior to V8.7 you could use single characters only without curly braces. [ This does suggest that your milter application ought to be able to deal with either form, but theory and practice do at times differ. ] Does the patch below resolve your issue? diff --git a/src/milter/milter.c b/src/milter/milter.c index 64836d4..bf2760a 100644 --- a/src/milter/milter.c +++ b/src/milter/milter.c @@ -333,16 +333,17 @@ static ARGV *milter_macro_lookup(MILTERS *milters, const char *macro_names) VSTRING *canon_buf = vstring_alloc(20); const char *value; const char *name; + const char *cname; while ((name = mystrtok(&cp, CHARS_COMMA_SP)) != 0) { if (msg_verbose) msg_info("%s: \"%s\"", myname, name); if (*name != '{') /* } */ - name = STR(vstring_sprintf(canon_buf, "{%s}", name)); - if ((value = milters->mac_lookup(name, milters->mac_context)) != 0) { + cname = STR(vstring_sprintf(canon_buf, "{%s}", name)); + if ((value = milters->mac_lookup(cname, milters->mac_context)) != 0) { if (msg_verbose) msg_info("%s: result \"%s\"", myname, value); - argv_add(argv, name, value, (char *) 0); + argv_add(argv, name[1] == '\0' ? name : cname, value, (char *) 0); } else if (milters->macro_defaults != 0 && (value = htable_find(milters->macro_defaults, name)) != 0) { if (msg_verbose) -- Viktor.