> On 07 Apr 2016, at 16:41, Michiel van Es <m...@pragmasec.nl> wrote: > > >> On 07 Apr 2016, at 16:37, Michiel van Es <m...@pragmasec.nl> wrote: >> >> >>> On 07 Apr 2016, at 16:05, Joerg Jung <m...@umaxx.net> wrote: >>> >>> >>>> On 07 Apr 2016, at 14:47, Michiel van Es <m...@pragmasec.nl> wrote: >>>> >>>> >>>>> On 07 Apr 2016, at 14:40, Joerg Jung <m...@umaxx.net> wrote: >>>>> >>>>> >>>>>> On 07 Apr 2016, at 13:13, Michiel van Es <m...@pragmasec.nl> wrote: >>>>>>> On 07 Apr 2016, at 12:59, Joerg Jung <m...@umaxx.net> 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
I also tried Debian Jessie but run into a lot of issues with OpenSMTPD libressl and libasr issues.. CentOS 7 was a complete mess so I am stuck with this error on Ubuntu 16.04 ;) > >> >>> >>> 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. I am interested in the quick fix or a complete fix ;) >>> >>> >>> >>> >>> >>> -- >>> You received this mail because you are subscribed to misc@opensmtpd.org >>> To unsubscribe, send a mail to: misc+unsubscr...@opensmtpd.org >>> >> >> >> -- >> You received this mail because you are subscribed to misc@opensmtpd.org >> To unsubscribe, send a mail to: misc+unsubscr...@opensmtpd.org >> > -- You received this mail because you are subscribed to misc@opensmtpd.org To unsubscribe, send a mail to: misc+unsubscr...@opensmtpd.org