]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add experimental support of CNAME RR type
authorVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 10 Aug 2022 22:35:28 +0000 (23:35 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 10 Aug 2022 22:35:28 +0000 (23:35 +0100)
contrib/librdns/parse.c
contrib/librdns/rdns.h
contrib/librdns/util.c

index e9fb85e9849c1c7700b5eaff70f754a7aecaa3b2..f9025e159734091e856c026f041011a06ce03844 100644 (file)
@@ -438,9 +438,12 @@ rdns_parse_rr (struct rdns_resolver *resolver,
                parsed = true;
                break;
        case DNS_T_CNAME:
-               /* Skip cname records */
-               p += datalen;
-               *remain -= datalen;
+               if (! rdns_parse_labels (resolver, in, &elt->content.cname.name, &p,
+                               rep, remain, true)) {
+                       rdns_info ("invalid labels in CNAME record; domain %s", rep->requested_name);
+                       return -1;
+               }
+               parsed = true;
                break;
        default:
                rdns_info ("unexpected RR type: %d; domain %s", type, rep->requested_name);
index 2e00951ea386884fe5cfaffca45312bc38e9af79..c0da5ed295fc642c38e60db65ed3d3926d6faf89 100644 (file)
@@ -48,6 +48,7 @@ enum rdns_request_type {
        RDNS_REQUEST_INVALID = -1,
        RDNS_REQUEST_A = 1,
        RDNS_REQUEST_NS = 2,
+       RDNS_REQUEST_CNAME = 5,
        RDNS_REQUEST_SOA = 6,
        RDNS_REQUEST_PTR = 12,
        RDNS_REQUEST_MX = 15,
@@ -101,6 +102,9 @@ union rdns_reply_element_un {
                uint16_t datalen;
                uint8_t *data;
        } tlsa;
+       struct {
+               char *name;
+       } cname;
 };
 
 struct rdns_reply_entry {
index e09eb2007e44f208141fd7f3e100c11329e12bbd..b20b327bc0d89cad407f8240b70270ccc345f367 100644 (file)
@@ -457,6 +457,9 @@ rdns_reply_free (struct rdns_reply *rep)
                                free (entry->content.soa.mname);
                                free (entry->content.soa.admin);
                                break;
+                       case RDNS_REQUEST_CNAME:
+                               free(entry->content.cname.name);
+                               break;
                        default:
                                break;
                        }