> On 07 Apr 2016, at 16:37, Michiel van Es <[email protected]> wrote: > > >> On 07 Apr 2016, at 16:05, Joerg Jung <[email protected]> wrote: >> >> >>> On 07 Apr 2016, at 14:47, Michiel van Es <[email protected]> wrote: >>> >>> >>>> On 07 Apr 2016, at 14:40, Joerg Jung <[email protected]> wrote: >>>> >>>> >>>>> On 07 Apr 2016, at 13:13, Michiel van Es <[email protected]> wrote: >>>>>> On 07 Apr 2016, at 12:59, Joerg Jung <[email protected]> wrote: >>>>>> >>>>>> Ok... that makes sense now. >>>>>> -2 seems to be EAI_NONAME which seems to be the error code specific on >>>>>> Ubuntu libc for NXDOMAIN replies, instead of EAI_NODATA. >>>>>> >>>>>> These error codes and related RFCs are subject to a lot of discussions. >>>>>> See here to get an idea: >>>>>> https://sourceware.org/bugzilla/show_bug.cgi?id=15726 >>>>>> Especially, note the cross references to Ubuntu bugs ... >>>>>> >>>>>> Instead of trying to fit all distribution specific changes, >>>>>> the easiest might be to change the logic here and check for the returned >>>>>> address not being empty -- instead of errno. >>>>>> >>>>>> I'll try to come up with a proper diff to fix this, but give me some >>>>>> time as >>>>>> I'm very busy currently. >>>>>> >>>>>> As quick fix: you can just change the if statement to: >>>>>> if (ar->ar_gai_errno != EAI_NODATA && ar->ar_gai_errno != EAI_NONAME) { >>>>> >>>>> like this? => >>>> >>>> yes. >>>> >>>>> dnsbl_event_dispatch(struct asr_result *ar, void *arg) >>>>> { >>>>> uint64_t *q = arg; >>>>> >>>>> if (ar->ar_addrinfo) >>>>> freeaddrinfo(ar->ar_addrinfo); >>>>> log_warnx("warn: DEBUG: ar_gai_errno=%d, EAI_NODATA=%d", >>>>> ar->ar_gai_errno, EAI_NODATA); >>>>> if (ar->ar_gai_errno != EAI_NODATA && ar->ar_gai_errno != EAI_NONAME) { >>>>> log_warnx("warn: session %016"PRIx64": event_dispatch: REJECT >>>>> address ar_gai_errno=%d", *q, ar->ar_gai_errno); >>>>> filter_api_reject_code(*q, FILTER_CLOSE, 554, "5.7.1 Address >>>>> in DNSBL"); >>>>> } else >>>>> filter_api_accept(*q); >>>>> free(q); >>>>> } >>>>> >>>>>> ... and it should start working as expected. Can you confirm that, >>>>>> please? >>>>> >>>>> if above is correct, it did not work: >>>>> >>>>> dnsbl[26098]: warn: DEBUG: ar_gai_errno=-5, EAI_NODATA=-2 >>>>> dnsbl[26098]: warn: session de57c06bd67994d3: event_dispatch: REJECT >>>>> address ar_gai_errno=-5 >>>>> filter: imsg IMSG_FILTER_RESPONSE from procfilter >>>>> dnsbl[hooks=0xffffffff,flags=0x0000] >>>>> filter: filter_drain_query de57c06c3dc0ecca[QUERY_CONNECT=178.21.114.197 >>>>> <-> >>>>> 185.14.168.222(pro-mail-smtp-001.bol.com),filter_session@0x1588030[datalen=0,eom=(nil),ofile=(nil)]] >>>>> filter: filter_end_query de57c06c3dc0ecca[QUERY_CONNECT=178.21.114.197 >>>>> <-> >>>>> 185.14.168.222(pro-mail-smtp-001.bol.com),filter_session@0x1588030[datalen=0,eom=(nil),ofile=(nil)]] >>>>> filter: query de57c06c3dc0ecca done: status=FILTER_CLOSE code=554 >>>>> response="5.7.1 Address in DNSBL" >>>>> smtp-in: Failed command on session de57c06bd67994d3: "" => 554 5.7.1 >>>>> Address in DNSBL >>>>> smtp-in: Closing session de57c06bd67994d3 >>>>> debug: smtp: 0x1655cf0: deleting session: done >>>>> filter: post-event event=EVENT_DISCONNECT filter=dnsbl >>>>> ^Cinfo: queue handler exiting >>>>> info: scheduler handler exiting >>>>> info: ca agent exiting >>>>> warn: control -> queue: pipe closed >>>>> warn: lka -> queue: pipe closed >>>>> strace: Process 26091 detached >>>>> >>>> >>>> Ok can change the added DEBUG line right before the if statement once >>>> again to: >>>> >>>> log_warnx("warn: DEBUG: ar_gai_errno=%d, EAI_NODATA=%d, EAI_NONAME=%d, >>>> gai_strerror=‘%s'", ar->ar_gai_errno, EAI_NODATA, EAI_NONAME, >>>> gai_strerror(ar->ar_gai_errno)); >>>> >>>> … and show me output? >>> >>> debug: smtp: new client on listener: 0x1a90130 >>> smtp-in: New session 1dc609e7cb3551c5 from host pro-mail-smtp-001.bol.com >>> [185.14.168.222] >>> filter: post-event event=EVENT_CONNECT filter=dnsbl >>> filter: new query QUERY_CONNECT >>> filter: filter_drain_query 1dc609e878b913e8[QUERY_CONNECT=178.21.114.197 >>> <-> >>> 185.14.168.222(pro-mail-smtp-001.bol.com),filter_session@0x1a7f030[datalen=0,eom=(nil),ofile=(nil)]] >>> filter: running filter filter:dnsbl[hooks=0xffffffff,flags=0x0000] for >>> query 1dc609e878b913e8[QUERY_CONNECT=178.21.114.197 <-> >>> 185.14.168.222(pro-mail-smtp-001.bol.com),filter_session@0x1a7f030[datalen=0,eom=(nil),ofile=(nil)]] >>> filter: waiting for running query >>> 1dc609e878b913e8[QUERY_CONNECT=178.21.114.197 <-> >>> 185.14.168.222(pro-mail-smtp-001.bol.com),filter_session@0x1a7f030[datalen=0,eom=(nil),ofile=(nil)]] >>> dnsbl[27129]: debug: on_connect: checking 222.168.14.185.psbl.surriel.com. >>> >>> dnsbl[27129]: warn: DEBUG: ar_gai_errno=-5, EAI_NODATA=-2, EAI_NONAME=-2, >>> gai_strerror=‘No address associated with hostname' >>> dnsbl[27129]: warn: session 1dc609e7cb3551c5: event_dispatch: REJECT >>> address ar_gai_errno=-5 >>> filter: imsg IMSG_FILTER_RESPONSE from procfilter >>> dnsbl[hooks=0xffffffff,flags=0x0000] >>> filter: filter_drain_query 1dc609e878b913e8[QUERY_CONNECT=178.21.114.197 >>> <-> >>> 185.14.168.222(pro-mail-smtp-001.bol.com),filter_session@0x1a7f030[datalen=0,eom=(nil),ofile=(nil)]] >>> filter: filter_end_query 1dc609e878b913e8[QUERY_CONNECT=178.21.114.197 <-> >>> 185.14.168.222(pro-mail-smtp-001.bol.com),filter_session@0x1a7f030[datalen=0,eom=(nil),ofile=(nil)]] >>> filter: query 1dc609e878b913e8 done: status=FILTER_CLOSE code=554 >>> response="5.7.1 Address in DNSBL" >>> smtp-in: Failed command on session 1dc609e7cb3551c5: "" => 554 5.7.1 >>> Address in DNSBL >>> smtp-in: Closing session 1dc609e7cb3551c5 >>> debug: smtp: 0x1b4ccf0: deleting session: done >>> filter: post-event event=EVENT_DISCONNECT filter=dnsbl >> >> Wow… what a mess, I think this is what is happening: >> >> - EAI_NODATA is usually -5 aka "No address associated with hostname". >> >> - Ubuntu eglibc seems to guard EAI_NODATA behind a #ifdef _GNU_SOURCE in >> netdb.h, >> so you may do not have it defined at all. >> (- Nevertheless the error string is given with gai_strerror() anyway, no >> matter that EAI_NODATA is not there.) >> >> - in case EAI_NODATA is not defined opensmtpd-extras defines EAI_NODATA == >> EAI_NONAME == -2 in configure.ac >> -> I think this is wrong and should be done as last resort. The better >> solution should be to define _GNU_SOURCE to >> receive EAI_NODATA from standard netdb.h. Can you try the following please: >> >> Add the following CFLAGS line to filter-dnsbl Makefile.am line 10: >> https://github.com/OpenSMTPD/OpenSMTPD-extras/blob/master/extras/wip/filters/filter-dnsbl/Makefile.am >> >> CFLAGS += -D_GNU_SOURCE >> >> Rebuild everything — it’s important to clear the whole configure cache and >> re-run sh bootstrap fully, so that this _GNU_SOURCE ends up in the Makefile. >> >> Let me know if this helps and fixes the issue. > > So: > > 1) the Makefile.am looks like this then: > > include $(top_srcdir)/mk/wip.mk > include $(top_srcdir)/mk/filter.mk > > pkglibexec_PROGRAMS = filter-dnsbl > > filter_dnsbl_SOURCES = $(SRCS) > filter_dnsbl_SOURCES += filter_dnsbl.c > > man_MANS = filter-dnsbl.8 > CFLAGS += -D_GNU_SOURCE > if !NO_LIBASR > LDADD += -lasr > endif > > 2) make clean in OpenSMTP-Extras > 3)rebuild with ./bootstrap;./configure --with-filter*;make;make install > 4)test again? >
did a make uninstall after adding the Makefile.am line as instructed, ./bootstrap;./configure —with-filter-*;make;make install retested but still no go: debug: smtp: new client on listener: 0xebd0f0 smtp-in: New session 141e1ab081a9e56f from host pro-mail-smtp-002.bol.com [185.14.169.222] filter: post-event event=EVENT_CONNECT filter=dnsbl filter: new query QUERY_CONNECT filter: filter_drain_query 141e1ab15e6c4024[QUERY_CONNECT=178.21.114.197 <-> 185.14.169.222(pro-mail-smtp-002.bol.com),filter_session@0xeabff0[datalen=0,eom=(nil),ofile=(nil)]] filter: running filter filter:dnsbl[hooks=0xffffffff,flags=0x0000] for query 141e1ab15e6c4024[QUERY_CONNECT=178.21.114.197 <-> 185.14.169.222(pro-mail-smtp-002.bol.com),filter_session@0xeabff0[datalen=0,eom=(nil),ofile=(nil)]] filter: waiting for running query 141e1ab15e6c4024[QUERY_CONNECT=178.21.114.197 <-> 185.14.169.222(pro-mail-smtp-002.bol.com),filter_session@0xeabff0[datalen=0,eom=(nil),ofile=(nil)]] dnsbl[2010]: debug: on_connect: checking 222.169.14.185.psbl.surriel.com. dnsbl[2010]: warn: DEBUG: ar_gai_errno=-5, EAI_NODATA=-2, EAI_NONAME=-2, gai_strerror=‘No address associated with hostname' dnsbl[2010]: warn: session 141e1ab081a9e56f: event_dispatch: REJECT address ar_gai_errno=-5 filter: imsg IMSG_FILTER_RESPONSE from procfilter dnsbl[hooks=0xffffffff,flags=0x0000] filter: filter_drain_query 141e1ab15e6c4024[QUERY_CONNECT=178.21.114.197 <-> 185.14.169.222(pro-mail-smtp-002.bol.com),filter_session@0xeabff0[datalen=0,eom=(nil),ofile=(nil)]] filter: filter_end_query 141e1ab15e6c4024[QUERY_CONNECT=178.21.114.197 <-> 185.14.169.222(pro-mail-smtp-002.bol.com),filter_session@0xeabff0[datalen=0,eom=(nil),ofile=(nil)]] filter: query 141e1ab15e6c4024 done: status=FILTER_CLOSE code=554 response="5.7.1 Address in DNSBL" smtp-in: Failed command on session 141e1ab081a9e56f: "" => 554 5.7.1 Address in DNSBL smtp-in: Closing session 141e1ab081a9e56f debug: smtp: 0xf79cb0: deleting session: done filter: post-event event=EVENT_DISCONNECT filter=dnsbl > >> >> However as written earlier, all this is just quick-fix. Better solution >> would be IMHO to NOT rely on gai errno at all. >> I’ll try to come up with a better fix soon. >> >> >> >> >> >> -- >> You received this mail because you are subscribed to [email protected] >> To unsubscribe, send a mail to: [email protected] >> > > > -- > You received this mail because you are subscribed to [email protected] > To unsubscribe, send a mail to: [email protected] > -- You received this mail because you are subscribed to [email protected] To unsubscribe, send a mail to: [email protected]
