Am 08.07.2010 um 19:02 schrieb Philipp Leusmann: > > Am 08.07.2010 um 18:23 schrieb Noel Jones: > >> On 7/8/2010 10:58 AM, Philipp Leusmann wrote: >>> Hi all, >>> >>> to stop backscattering I wrote a tcp_table server which checks quota >>> availability for incoming messages. >>> I read<http://www.postfix.org/tcp_table.5.html> over and over again, but >>> still I am getting messages like >>> >>> Jul 8 17:46:24 s15277780 postfix/smtpd[3325]: warning: read TCP map reply >>> from localhost:1337: unexpected EOF (Success) >>> Jul 8 17:46:25 s15277780 postfix/smtpd[3325]: warning: tcp:localhost:1337: >>> table lookup problem >>> >>> >>> in the logfile, when the server returns a 400 or 500 reply. For a 200-reply >>> it works ok and the mail is delivered. >>> >>> For a 400-reply, my server generates the following (from my logfile): >>> >>> The encoded reply is [400 User%20over%20quota >>> ] >>> >>> >>> The server sends everything between [ and ] . I think that should be ok. Or >>> isn't it? >>> >>> >>> When I try a >>> >>> postmap -vv -q "benny" tcp:localhost:1337 >>> >>> (benny is over quota) >>> >>> the output ends with: >>> >>> postmap: loaded dict_tcp_open = 7f50d057bd20 >>> postmap: dict_open: calling tcp open routine >>> postmap: dict_open: tcp:localhost:1337 >>> postmap: dict_tcp_lookup: key benny >>> postmap: trying... [127.0.0.1] >>> postmap: dict_tcp_lookup: send: get benny >>> postmap: dict_tcp_lookup: recv: 400 User%20over%20quota >>> postmap: dict_tcp_lookup: soft error: 400 User%20over%20quota >>> >>> For a user having available space, it looks like: >>> >>> postmap: loaded dict_tcp_open = 7f30f5c76d20 >>> postmap: dict_open: calling tcp open routine >>> postmap: dict_open: tcp:localhost:1337 >>> postmap: dict_tcp_lookup: key laus >>> postmap: trying... [127.0.0.1] >>> postmap: dict_tcp_lookup: send: get laus >>> postmap: dict_tcp_lookup: recv: 200 OK >>> postmap: dict_tcp_lookup: found: OK >>> OK >>> >>> >>> >>> Can anybody tell me, what is wrong? >>> >>> And what does postfix return the the delivering client in my current case? >>> a 500 ? >>> >>> Regards, >>> Philipp >> >> The 200, 400, and 500 codes indicate the status of the lookup itself, and do >> not indicate the result. >> >> 200, the lookup found something, here it is: (OK, DEFER, REJECT ... other >> access(5) actions) >> 400, the lookup table is broken, try later >> 500, the key wasn't found >> >> In the case of an over-quota user, your table should return >> 200 REJECT User over quota >> or DEFER if that's the action you want. >> >> This isn't documented explicitly in the README because tcp tables can be >> used for purposes other than access maps. >> >> -- Noel Jones > > Noel, > > thanks for your advice. This really should be pointed out more explicitly in > the documentation. > > As for 500, would it be a good practice to return 500, if the key, which in > this case is the email-adress is not known at all? > > I also use a local_recipients_map, which already decides if a user exists or > not. > So, which of the both is evaluated first? local_recipient_maps or > smtpd_recipient_restrictions ? > > What would be the best practice for my case? > > Regards, > Philipp >
Sorry for quoting my own mail, but there is one more question: I just implemented Noels suggestuons, and mail get rejected properly now. Thanks for that. But I still get the odd warning: read TCP map reply from localhost:1337: unexpected EOF (Success) log entry. Is there missing anything? Regards, Philipp