From: Vsevolod Stakhov Date: Sun, 25 Sep 2022 12:05:00 +0000 (+0100) Subject: [Fix] Same fix for lua_tcp X-Git-Tag: 3.3~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=60cd96905a9eab257074634a18aae8c711d62293;p=thirdparty%2Frspamd.git [Fix] Same fix for lua_tcp --- diff --git a/src/lua/lua_tcp.c b/src/lua/lua_tcp.c index 73b2c9ae28..05c9de7a27 100644 --- a/src/lua/lua_tcp.c +++ b/src/lua/lua_tcp.c @@ -1378,17 +1378,30 @@ lua_tcp_dns_handler (struct rdns_reply *reply, gpointer ud) * We set this flag as it means that we have already registered the watcher * when started DNS query */ - cbd->flags |= LUA_TCP_FLAG_RESOLVED; + struct rdns_reply_entry *entry; - if (reply->entries->type == RDNS_REQUEST_A) { - cbd->addr = rspamd_inet_address_new (AF_INET, - &reply->entries->content.a.addr); + DL_FOREACH(reply->entries, entry) { + if (entry->type == RDNS_REQUEST_A) { + cbd->addr = rspamd_inet_address_new(AF_INET, + &entry->content.a.addr); + break; + } + else if (entry->type == RDNS_REQUEST_AAAA) { + cbd->addr = rspamd_inet_address_new(AF_INET6, + &entry->content.aaa.addr); + break; + } } - else if (reply->entries->type == RDNS_REQUEST_AAAA) { - cbd->addr = rspamd_inet_address_new (AF_INET6, - &reply->entries->content.aaa.addr); + + if (cbd->addr == NULL){ + rn = rdns_request_get_name (reply->request, NULL); + lua_tcp_push_error (cbd, TRUE, "unable to resolve host: %s; no records with this name", + rn->name); + TCP_RELEASE (cbd); + return; } + cbd->flags |= LUA_TCP_FLAG_RESOLVED; rspamd_inet_address_set_port (cbd->addr, cbd->port); if (!lua_tcp_make_connection (cbd)) {