]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Same fix for lua_tcp
authorVsevolod Stakhov <vsevolod@rspamd.com>
Sun, 25 Sep 2022 12:05:00 +0000 (13:05 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Sun, 25 Sep 2022 12:05:00 +0000 (13:05 +0100)
src/lua/lua_tcp.c

index 73b2c9ae28b81ebf3e4f04951b3a233681cdb83e..05c9de7a27dbb22e419444cb8dd3f55a8227445f 100644 (file)
@@ -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)) {