]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Core: Pass server name when doing DNS request
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 27 Dec 2018 09:21:10 +0000 (09:21 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 27 Dec 2018 09:21:10 +0000 (09:21 +0000)
contrib/librdns/rdns.h
contrib/librdns/util.c
src/lua/lua_dns_resolver.c

index 016903ba600a1be58a2787d491ca8348ceb2a5ec..647f0f1b116877e3c9f97bdb1ed1074051eb86e8 100644 (file)
@@ -435,6 +435,14 @@ bool rdns_request_has_type (struct rdns_request *req, enum rdns_request_type typ
 const struct rdns_request_name* rdns_request_get_name (struct rdns_request *req,
                unsigned int *count);
 
+/**
+ * Return a DNS server name associated with the request
+ * @param req request object
+ * @return name of a DNS server
+ */
+const char* rdns_request_get_server (struct rdns_request *req);
+
+
 /**
  * Return PTR string for a request (ipv4 or ipv6) addresses
  * @param str string representation of IP address
index c9480beb639c26b296054e7e4ea110001397f8e7..b793b9077312b6d941b1810209a6870c64fc04ab 100644 (file)
@@ -663,6 +663,16 @@ rdns_request_get_name (struct rdns_request *req, unsigned int *count)
        return req->requested_names;
 }
 
+const char*
+rdns_request_get_server (struct rdns_request *req)
+{
+       if (req && req->io) {
+               return req->io->srv->name;
+       }
+
+       return NULL;
+}
+
 char *
 rdns_generate_ptr_from_str (const char *str)
 {
index ffc4cd73865404fd39afa5f4ee5ccb904a129516..d108744e1f8a7ceedca68b2877cf71ba76020637 100644 (file)
@@ -172,6 +172,7 @@ lua_dns_resolver_callback (struct rdns_reply *reply, gpointer arg)
         * 4 - error | nil
         * 5 - user_str
         * 6 - reply->authenticated
+        * 7 - server
         */
        if (reply->code != RDNS_RC_NOERROR) {
                lua_pushnil (L);
@@ -186,12 +187,21 @@ lua_dns_resolver_callback (struct rdns_reply *reply, gpointer arg)
 
        lua_pushboolean (L, reply->authenticated);
 
+       const gchar *servname = rdns_request_get_server (reply->request);
+
+       if (servname) {
+               lua_pushstring (L, servname);
+       }
+       else {
+               lua_pushnil (L);
+       }
+
        if (cd->item) {
                /* We also need to restore the item in case there are some chains */
                rspamd_symcache_set_cur_item (cd->task, cd->item);
        }
 
-       if (lua_pcall (L, 6, 0, err_idx) != 0) {
+       if (lua_pcall (L, 7, 0, err_idx) != 0) {
                tb = lua_touserdata (L, -1);
 
                if (tb) {