-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Sun, 12 Jan 2014, Greg Rivers wrote:
On Sat, 11 Jan 2014, Steffen wrote:
I have: ... deliverable: mailer local, user uid+detail instead of "deliverable: mailer local, host detail, user gcr"
Hmm, see http://etutorials.org/Server+Administration/Sendmail/Part+I+Build+and+Instal...
My mc-file has this setting commented out (prefixed by dnl). Ah, I see where the processing differs. I had added this:
SLocal_localaddr R< $* > $1 Remove <> from address R$+ + $* $: $1 Remove detail from address R$+ $: <$(localuser $1 $: TEMPFAIL $)> $1 Query socket map server, if that's a local user R<OK> $* $# ok yes, this preserves detail R<REJECT> $* $# error $@ 5.7.1 $: 550 User unknown R<TEMPFAIL> $* $# error $@ TEMPFAIL $: $1 try again later Does it work????
See the R<OK> line. The map is to verify if the user is local or not. In my system sendmail cannot do so on its own. Maybe the FEATURE above works for the standard config.
"FEATURE(`preserve_local_plus_detail')" is actually one of the first things I tried when I started working on this problem, but it doesn't quite work with the standard configuration:
$ sendmail -bv -d21.12 gcr+XYZZY@badger.tharned.org -----rule matches: $@ $1 rewritten as: gcr + xyzzy rewrite: ruleset localaddr returns: gcr + xyzzy gcr+XYZZY@badger.tharned.org... User unknown
OK, that rings a bell: the problem is the "w" flag. It checks that a valid system exists.
If you remove the "w" flag, you loose the system user validaty check and the .forward feature.
You have four ways, IMHO:
a) switch to LDA
b) add Local_localaddr to validate the user yourself and accept that the .forward feature is not working
c) I've patched sendmail's mailbox database code with a Dovecot stub, that queries the UserDB socket for validity of the users. If you use system users, you could probably just patch libsm/mbdb.c: mbdb_pw_lookup(name, user) to cut the +detail, something like:
char *detailp;
if(detailp = strchr(name, '+')) *detailp = '\0'; pw = getpwnam(name); if(detailp) *detailp = '+';
This code is untested and I don't know, if mbdb_pw_lookup() could get passed in a pointer to a constant, which would throw a SEGV or SIGBUS or whatever signal and dump core.
d) try a PAM module in pam.d/sendmail, that strips the +detail before processing the request
e) try to file a bug with sendmail.
Steffen Kaiser -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux)
iQEVAwUBUtUQY3D1/YhP6VMHAQI6aAf8D6Z+ba8G+PePQqyPmQY+D8ZBjFXm6dqj fT/MvAazs8YZJTs/vvxzZ9IWwQPbnSzBTCUdChouzxtA1NPHUwvO23hkR8oFaLT2 8wtfQCJ4e1BXclfqgGO/COJ632IvE7ygvhMmwAtV5+WHil8Ea1hyjTAwpzXUL4Im btkHvTkGiW/m2CZsaaIJ2keeMGK8ygWgU/7ZCtEi+2M4MF3WhGiGZznRAnAfkfr8 fk7ybicEpLD5VGpRc5+D47XT+KM6ViI/Wou3hVzGJ8MsbPxn6kIeRmZHY24xtPyW 5Q0YoD9nYUZorwN2LNAj15TRNztodwewZH3HUAoFYGAM3YVQWuRxTQ== =ye9c -----END PGP SIGNATURE-----