Viktor Dukhovni: > On Tue, Feb 14, 2017 at 09:43:25PM +0100, Matthias Schneider wrote: > > Hi Viktor, > > > > i applyed the patch and after connecting to port 25 i'll get: > > > > Yes, sorry, the original patch is buggy, it fails to initialize > "cname" for already canonical (enclosed in {}) multi-char names. > Try this one instead: > > diff --git a/src/milter/milter.c b/src/milter/milter.c > index 64836d4..571db7a 100644 > --- a/src/milter/milter.c > +++ b/src/milter/milter.c > @@ -333,16 +333,19 @@ 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)); > + else > + cname = 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)
This breaks milter_macro_defaults lookups, which always require the form {name}. This would have been found immediately if the library had tests. Wietse