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

Reply via email to