From 320bc2a7e4d38eb78ad65b557189d16c84db76e1 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Wed, 2 Sep 2026 21:57:08 +0300 Subject: [PATCH] =?UTF-8?q?dns:=20=D0=BF=D0=BE=D0=BB=D0=BD=D1=8B=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=82=D0=BE=D1=82=D0=B8=D0=BF=D1=8B=20=D1=83?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20=D0=B2?= =?UTF-8?q?=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20()=20=E2=80=94=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D1=81=20C23=20(FreeBSD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/dns.c | 40 +++++++++++++++++++++++----------------- lib/dns.h | 2 +- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/dns.c b/lib/dns.c index bc207cf9..07267e0c 100644 --- a/lib/dns.c +++ b/lib/dns.c @@ -3403,27 +3403,33 @@ size_t dns_txt_print(void *dst_, size_t lim, struct dns_txt *txt) { } /* dns_txt_print() */ +typedef int (*dns_rrtype_parse_fn)(union dns_any *, struct dns_rr *, struct dns_packet *); +typedef int (*dns_rrtype_push_fn)(struct dns_packet *, union dns_any *); +typedef int (*dns_rrtype_cmp_fn)(const union dns_any *, const union dns_any *); +typedef size_t (*dns_rrtype_print_fn)(void *, size_t, union dns_any *); +typedef size_t (*dns_rrtype_cname_fn)(void *, size_t, union dns_any *); + static const struct { enum dns_type type; const char *name; - int (*parse)(); - int (*push)(); - int (*cmp)(); - size_t (*print)(); - size_t (*cname)(); + dns_rrtype_parse_fn parse; + dns_rrtype_push_fn push; + dns_rrtype_cmp_fn cmp; + dns_rrtype_print_fn print; + dns_rrtype_cname_fn cname; } dns_rrtypes[] = { - { DNS_T_A, "A", &dns_a_parse, &dns_a_push, &dns_a_cmp, &dns_a_print, 0 }, - { DNS_T_AAAA, "AAAA", &dns_aaaa_parse, &dns_aaaa_push, &dns_aaaa_cmp, &dns_aaaa_print, 0 }, - { DNS_T_MX, "MX", &dns_mx_parse, &dns_mx_push, &dns_mx_cmp, &dns_mx_print, &dns_mx_cname }, - { DNS_T_NS, "NS", &dns_ns_parse, &dns_ns_push, &dns_ns_cmp, &dns_ns_print, &dns_ns_cname }, - { DNS_T_CNAME, "CNAME", &dns_cname_parse, &dns_cname_push, &dns_cname_cmp, &dns_cname_print, &dns_cname_cname }, - { DNS_T_SOA, "SOA", &dns_soa_parse, &dns_soa_push, &dns_soa_cmp, &dns_soa_print, 0 }, - { DNS_T_SRV, "SRV", &dns_srv_parse, &dns_srv_push, &dns_srv_cmp, &dns_srv_print, &dns_srv_cname }, - { DNS_T_OPT, "OPT", &dns_opt_parse, &dns_opt_push, &dns_opt_cmp, &dns_opt_print, 0 }, - { DNS_T_PTR, "PTR", &dns_ptr_parse, &dns_ptr_push, &dns_ptr_cmp, &dns_ptr_print, &dns_ptr_cname }, - { DNS_T_TXT, "TXT", &dns_txt_parse, &dns_txt_push, &dns_txt_cmp, &dns_txt_print, 0 }, - { DNS_T_SPF, "SPF", &dns_txt_parse, &dns_txt_push, &dns_txt_cmp, &dns_txt_print, 0 }, - { DNS_T_SSHFP, "SSHFP", &dns_sshfp_parse, &dns_sshfp_push, &dns_sshfp_cmp, &dns_sshfp_print, 0 }, + { DNS_T_A, "A", (dns_rrtype_parse_fn)&dns_a_parse, (dns_rrtype_push_fn)&dns_a_push, (dns_rrtype_cmp_fn)&dns_a_cmp, (dns_rrtype_print_fn)&dns_a_print, 0 }, + { DNS_T_AAAA, "AAAA", (dns_rrtype_parse_fn)&dns_aaaa_parse, (dns_rrtype_push_fn)&dns_aaaa_push, (dns_rrtype_cmp_fn)&dns_aaaa_cmp, (dns_rrtype_print_fn)&dns_aaaa_print, 0 }, + { DNS_T_MX, "MX", (dns_rrtype_parse_fn)&dns_mx_parse, (dns_rrtype_push_fn)&dns_mx_push, (dns_rrtype_cmp_fn)&dns_mx_cmp, (dns_rrtype_print_fn)&dns_mx_print, (dns_rrtype_cname_fn)&dns_mx_cname }, + { DNS_T_NS, "NS", (dns_rrtype_parse_fn)&dns_ns_parse, (dns_rrtype_push_fn)&dns_ns_push, (dns_rrtype_cmp_fn)&dns_ns_cmp, (dns_rrtype_print_fn)&dns_ns_print, (dns_rrtype_cname_fn)&dns_ns_cname }, + { DNS_T_CNAME, "CNAME", (dns_rrtype_parse_fn)&dns_cname_parse, (dns_rrtype_push_fn)&dns_cname_push, (dns_rrtype_cmp_fn)&dns_cname_cmp, (dns_rrtype_print_fn)&dns_cname_print, (dns_rrtype_cname_fn)&dns_cname_cname }, + { DNS_T_SOA, "SOA", (dns_rrtype_parse_fn)&dns_soa_parse, (dns_rrtype_push_fn)&dns_soa_push, (dns_rrtype_cmp_fn)&dns_soa_cmp, (dns_rrtype_print_fn)&dns_soa_print, 0 }, + { DNS_T_SRV, "SRV", (dns_rrtype_parse_fn)&dns_srv_parse, (dns_rrtype_push_fn)&dns_srv_push, (dns_rrtype_cmp_fn)&dns_srv_cmp, (dns_rrtype_print_fn)&dns_srv_print, (dns_rrtype_cname_fn)&dns_srv_cname }, + { DNS_T_OPT, "OPT", (dns_rrtype_parse_fn)&dns_opt_parse, (dns_rrtype_push_fn)&dns_opt_push, (dns_rrtype_cmp_fn)&dns_opt_cmp, (dns_rrtype_print_fn)&dns_opt_print, 0 }, + { DNS_T_PTR, "PTR", (dns_rrtype_parse_fn)&dns_ptr_parse, (dns_rrtype_push_fn)&dns_ptr_push, (dns_rrtype_cmp_fn)&dns_ptr_cmp, (dns_rrtype_print_fn)&dns_ptr_print, (dns_rrtype_cname_fn)&dns_ptr_cname }, + { DNS_T_TXT, "TXT", (dns_rrtype_parse_fn)&dns_txt_parse, (dns_rrtype_push_fn)&dns_txt_push, (dns_rrtype_cmp_fn)&dns_txt_cmp, (dns_rrtype_print_fn)&dns_txt_print, 0 }, + { DNS_T_SPF, "SPF", (dns_rrtype_parse_fn)&dns_txt_parse, (dns_rrtype_push_fn)&dns_txt_push, (dns_rrtype_cmp_fn)&dns_txt_cmp, (dns_rrtype_print_fn)&dns_txt_print, 0 }, + { DNS_T_SSHFP, "SSHFP", (dns_rrtype_parse_fn)&dns_sshfp_parse, (dns_rrtype_push_fn)&dns_sshfp_push, (dns_rrtype_cmp_fn)&dns_sshfp_cmp, (dns_rrtype_print_fn)&dns_sshfp_print, 0 }, }; /* dns_rrtypes[] */ diff --git a/lib/dns.h b/lib/dns.h index 2949cb33..1da0d399 100644 --- a/lib/dns.h +++ b/lib/dns.h @@ -508,7 +508,7 @@ struct dns_rr_i { int follow; - int (*sort)(); + int (*sort)(struct dns_rr *, struct dns_rr *, struct dns_rr_i *, struct dns_packet *); unsigned args[2]; struct {