The branch, master has been updated
       via  fcecdfa8e5c s4:dnsserver: Rename dns_name_equal() to 
samba_dns_name_equal()
      from  872ea49ac6d kdc: Don't reference ENODATA in platform-independent 
code

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit fcecdfa8e5c651d4a27f8fcd5df6e9bce37ed8a7
Author: Samuel Cabrero <scabr...@samba.org>
Date:   Wed Jan 18 17:25:29 2023 +0100

    s4:dnsserver: Rename dns_name_equal() to samba_dns_name_equal()
    
    This function already exists in bind9 but takes different arguments, so when
    the DLZ is loaded and this function is called bind crashes:
    
      named[1523]: samba_dlz: allowing update of 
signer=DESKTOP-8BUKMBK\$\@AFOREST.AD name=118.101.168.192.in-addr.arpa 
tcpaddr=192.168.101.118  type=PTR 
key=1264-ms-7.1-2ac9.9ef238e1-9747-11ed-9f95-525400dc6981/159/0
      named[1523]: samba_dlz: allowing update of 
signer=DESKTOP-8BUKMBK\$\@AFOREST.AD name=118.101.168.192.in-addr.arpa 
tcpaddr=192.168.101.118  type=PTR 
key=1264-ms-7.1-2ac9.9ef238e1-9747-11ed-9f95-525400dc6981/159/0
      named[1523]: client @0x7f26caa90f68 192.168.101.118#58223/key 
DESKTOP-8BUKMBK\$\@AFOREST.AD: updating zone '101.168.192.in-addr.arpa/NONE': 
deleting rrset at '118.101.168.192.in-addr.ar
      named[1523]: name.c:664: REQUIRE(((name1) != ((void *)0) && ((const 
isc__magic_t *)(name1))->magic == ((('D') << 24 | ('N') << 16 | ('S') << 8 | 
('n'))))) failed, back trace
    
    Backtrace:
    
      #0  0x00007f2716c957ec in __pthread_kill_implementation () from 
/lib64/libc.so.6
      #1  0x00007f2716c42816 in raise () from /lib64/libc.so.6
      #2  0x00007f2716c2b81c in abort () from /lib64/libc.so.6
      #3  0x000055d4de847995 in assertion_failed (file=<optimized out>, 
line=<optimized out>,
          type=<optimized out>, cond=<optimized out>) at 
/usr/src/debug/bind-9.18.10/bin/named/main.c:237
      #4  0x00007f27176388fc in isc_assertion_failed 
(file=file@entry=0x7f27173b0df6 "name.c",
          line=line@entry=664, type=type@entry=isc_assertiontype_require,
          cond=cond@entry=0x7f27173b0268 "((name1) != ((void *)0) && ((const 
isc__magic_t *)(name1))->magic == ((('D') << 24 | ('N') << 16 | ('S') << 8 | 
('n'))))")
          at /usr/src/debug/bind-9.18.10/lib/isc/assertions.c:48
      #5  0x00007f27172946f9 in dns_name_equal (name1=<optimized out>, 
name2=<optimized out>)
          at /usr/src/debug/bind-9.18.10/lib/dns/name.c:664
    
      **** Here bind's dns_name_equal() is called instead of samba's 
dns_name_equal() ****
    
      #6  0x00007f27077ad6f2 in dns_record_match (rec1=0x7f26f8042d70, 
rec2=0x7f26f8044d10)
          at ../../source4/dns_server/dnsserver_common.c:1346
      #7  0x00007f271404732c in b9_record_match (rec1=0x7f26f8042d70, 
rec2=0x7f26f8044d10)
          at ../../source4/dns_server/dlz_bind9.c:1830
      #8  0x00007f2714047daa in dlz_subrdataset (name=0x7f2706ff82f0 
"118.101.168.192.in-addr.arpa",
          rdatastr=0x7f26c9c10000 
"118.101.168.192.in-addr.arpa.\t1200\tIN\tPTR\tDESKTOP-8BUKMBK.aforest.ad.",
          dbdata=0x7f271003d300, version=0x7f26f8044b20) at 
../../source4/dns_server/dlz_bind9.c:2077
      #9  0x000055d4de84afb4 in dlopen_dlz_subrdataset (name=0x7f2706ff82f0 
"118.101.168.192.in-addr.arpa",
          rdatastr=<optimized out>, driverarg=<optimized out>, 
dbdata=0x7f270430f680, version=<optimized out>)
          at /usr/src/debug/bind-9.18.10/bin/named/dlz_dlopen_driver.c:483
      #10 0x00007f271738e734 in modrdataset.constprop.0 (db=0x7f2704291740, 
node=0x7f26c9c006e0,
          version=0x7f26f8044b20, rdataset=0x7f2706ff8830,
          mod_function=0x55d4de84af80 <dlopen_dlz_subrdataset>, 
options=<optimized out>)
          at /usr/src/debug/bind-9.18.10/lib/dns/sdlz.c:1107
      #11 0x00007f2717251855 in diff_apply (diff=diff@entry=0x7f2706ff8df0, 
db=db@entry=0x7f2704291740,
          ver=ver@entry=0x7f26f8044b20, warn=warn@entry=true) at 
/usr/src/debug/bind-9.18.10/lib/dns/diff.c:370
      #12 0x00007f2717251c8a in dns_diff_apply (diff=diff@entry=0x7f2706ff8df0, 
db=db@entry=0x7f2704291740,
          ver=ver@entry=0x7f26f8044b20) at 
/usr/src/debug/bind-9.18.10/lib/dns/diff.c:465
      #13 0x00007f2717d105aa in do_one_tuple (tuple=tuple@entry=0x7f2706ff8e50, 
db=db@entry=0x7f2704291740,
          ver=ver@entry=0x7f26f8044b20, diff=diff@entry=0x7f2706ff9400)
          at /usr/src/debug/bind-9.18.10/lib/ns/update.c:454
      #14 0x00007f2717d10fff in update_one_rr (rdata=0x7f2706ff8ee8, 
ttl=<optimized out>,
          name=<optimized out>, op=DNS_DIFFOP_DEL, diff=0x7f2706ff9400, 
ver=0x7f26f8044b20, db=0x7f2704291740)
          at /usr/src/debug/bind-9.18.10/lib/ns/update.c:505
      #15 delete_if_action (data=<optimized out>, rr=0x7f2706ff8ee0)
          at /usr/src/debug/bind-9.18.10/lib/ns/update.c:1427
      #16 0x00007f2717d10ccd in foreach_rr (db=0x7f2704291740, ver=<optimized 
out>, name=0x7f26caa61d00,
          type=<optimized out>, covers=<optimized out>,
          rr_action=rr_action@entry=0x7f2717d10f60 <delete_if_action>, 
rr_action_data=0x7f2706ff9280)
          at /usr/src/debug/bind-9.18.10/lib/ns/update.c:736
      #17 0x00007f2717d10e76 in delete_if 
(predicate=predicate@entry=0x7f2717d0fb10 <true_p>,
          db=<optimized out>, ver=<optimized out>, name=<optimized out>, 
type=<optimized out>,
          covers=<optimized out>, update_rr=0x7f2706ff94b0, diff=0x7f2706ff9400)
          at /usr/src/debug/bind-9.18.10/lib/ns/update.c:1454
      #18 0x00007f2717d1bccd in update_action (task=<optimized out>, 
event=<optimized out>)
          at /usr/src/debug/bind-9.18.10/lib/ns/update.c:3299
      #19 0x00007f271765eb4c in task_run (task=0x7f27155ccf00)
          at /usr/src/debug/bind-9.18.10/lib/isc/task.c:823
      #20 isc_task_run (task=0x7f27155ccf00) at 
/usr/src/debug/bind-9.18.10/lib/isc/task.c:904
      #21 0x00007f271762cb12 in isc__nm_async_task (worker=0x7f2716236560, 
ev0=0x7f26caa07000)
          at netmgr/netmgr.c:840
      #22 process_netievent (worker=worker@entry=0x7f2716236560, 
ievent=0x7f26caa07000) at netmgr/netmgr.c:918
      #23 0x00007f271762d197 in process_queue 
(worker=worker@entry=0x7f2716236560,
          type=type@entry=NETIEVENT_TASK) at netmgr/netmgr.c:1011
      #24 0x00007f271762d3b3 in process_all_queues (worker=0x7f2716236560) at 
netmgr/netmgr.c:765
      #25 async_cb (handle=0x7f27162368c0) at netmgr/netmgr.c:794
      #26 0x00007f2717c4cb0d in uv__async_io (loop=0x7f2716236570, w=<optimized 
out>, events=<optimized out>)
          at src/unix/async.c:163
      #27 0x00007f2717c6825d in uv__io_poll (loop=0x7f2716236570, 
timeout=<optimized out>)
          at src/unix/epoll.c:374
      #28 0x00007f2717c5247a in uv__io_poll (timeout=<optimized out>, 
loop=0x7f2716236570)
          at src/unix/udp.c:122
      #29 uv_run (loop=loop@entry=0x7f2716236570, 
mode=mode@entry=UV_RUN_DEFAULT) at src/unix/core.c:406
      #30 0x00007f271762d834 in nm_thread (worker0=0x7f2716236560) at 
netmgr/netmgr.c:696
      #31 0x00007f27176627f5 in isc__trampoline_run (arg=0x55d4dfe3ad70)
          at /usr/src/debug/bind-9.18.10/lib/isc/trampoline.c:189
      #32 0x00007f2716c9398d in start_thread () from /lib64/libc.so.6
      #33 0x00007f2716d19344 in clone () from /lib64/libc.so.6
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14030
    
    Signed-off-by: Samuel Cabrero <scabr...@samba.org>
    Reviewed-by: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
    
    Autobuild-User(master): Samuel Cabrero <scabr...@samba.org>
    Autobuild-Date(master): Thu Jan 19 10:20:27 UTC 2023 on atb-devel-224

-----------------------------------------------------------------------

Summary of changes:
 source4/dns_server/dns_crypto.c         |  2 +-
 source4/dns_server/dns_update.c         |  4 ++--
 source4/dns_server/dnsserver_common.c   | 21 +++++++++++++--------
 source4/dns_server/dnsserver_common.h   |  2 +-
 source4/rpc_server/dnsserver/dnsutils.c |  2 +-
 source4/torture/dns/dlz_bind9.c         |  8 ++++----
 6 files changed, 22 insertions(+), 17 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dns_server/dns_crypto.c b/source4/dns_server/dns_crypto.c
index 6d2b8648757..b38eb8b13bb 100644
--- a/source4/dns_server/dns_crypto.c
+++ b/source4/dns_server/dns_crypto.c
@@ -81,7 +81,7 @@ struct dns_server_tkey *dns_find_tkey(struct 
dns_server_tkey_store *store,
                if (tmp_key == NULL) {
                        continue;
                }
-               if (dns_name_equal(name, tmp_key->name)) {
+               if (samba_dns_name_equal(name, tmp_key->name)) {
                        tkey = tmp_key;
                        break;
                }
diff --git a/source4/dns_server/dns_update.c b/source4/dns_server/dns_update.c
index 2d5f353671e..7b87dc6c6e3 100644
--- a/source4/dns_server/dns_update.c
+++ b/source4/dns_server/dns_update.c
@@ -593,7 +593,7 @@ static WERROR handle_one_update(struct dns_server *dns,
                 * work out if the node as a whole needs tombstoning.
                 */
                if (update->rr_type == DNS_QTYPE_ALL) {
-                       if (dns_name_equal(update->name, zone->name)) {
+                       if (samba_dns_name_equal(update->name, zone->name)) {
                                for (i = first; i < rcount; i++) {
 
                                        if (recs[i].wType == DNS_TYPE_SOA) {
@@ -617,7 +617,7 @@ static WERROR handle_one_update(struct dns_server *dns,
                                }
                        }
 
-               } else if (dns_name_equal(update->name, zone->name)) {
+               } else if (samba_dns_name_equal(update->name, zone->name)) {
 
                        if (update->rr_type == DNS_QTYPE_SOA) {
                                return WERR_OK;
diff --git a/source4/dns_server/dnsserver_common.c 
b/source4/dns_server/dnsserver_common.c
index 03f76d4a871..0481b0715c7 100644
--- a/source4/dns_server/dnsserver_common.c
+++ b/source4/dns_server/dnsserver_common.c
@@ -1331,7 +1331,8 @@ bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1,
                return memcmp(&rec1_in_addr6, &rec2_in_addr6, 
sizeof(rec1_in_addr6)) == 0;
        }
        case DNS_TYPE_CNAME:
-               return dns_name_equal(rec1->data.cname, rec2->data.cname);
+               return samba_dns_name_equal(rec1->data.cname,
+                                           rec2->data.cname);
        case DNS_TYPE_TXT:
                if (rec1->data.txt.count != rec2->data.txt.count) {
                        return false;
@@ -1343,23 +1344,27 @@ bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1,
                }
                return true;
        case DNS_TYPE_PTR:
-               return dns_name_equal(rec1->data.ptr, rec2->data.ptr);
+               return samba_dns_name_equal(rec1->data.ptr, rec2->data.ptr);
        case DNS_TYPE_NS:
-               return dns_name_equal(rec1->data.ns, rec2->data.ns);
+               return samba_dns_name_equal(rec1->data.ns, rec2->data.ns);
 
        case DNS_TYPE_SRV:
                return rec1->data.srv.wPriority == rec2->data.srv.wPriority &&
                        rec1->data.srv.wWeight  == rec2->data.srv.wWeight &&
                        rec1->data.srv.wPort    == rec2->data.srv.wPort &&
-                       dns_name_equal(rec1->data.srv.nameTarget, 
rec2->data.srv.nameTarget);
+                       samba_dns_name_equal(rec1->data.srv.nameTarget,
+                                            rec2->data.srv.nameTarget);
 
        case DNS_TYPE_MX:
                return rec1->data.mx.wPriority == rec2->data.mx.wPriority &&
-                       dns_name_equal(rec1->data.mx.nameTarget, 
rec2->data.mx.nameTarget);
+                       samba_dns_name_equal(rec1->data.mx.nameTarget,
+                                            rec2->data.mx.nameTarget);
 
        case DNS_TYPE_SOA:
-               return dns_name_equal(rec1->data.soa.mname, 
rec2->data.soa.mname) &&
-                       dns_name_equal(rec1->data.soa.rname, 
rec2->data.soa.rname) &&
+               return samba_dns_name_equal(rec1->data.soa.mname,
+                                           rec2->data.soa.mname) &&
+                       samba_dns_name_equal(rec1->data.soa.rname,
+                                            rec2->data.soa.rname) &&
                        rec1->data.soa.serial == rec2->data.soa.serial &&
                        rec1->data.soa.refresh == rec2->data.soa.refresh &&
                        rec1->data.soa.retry == rec2->data.soa.retry &&
@@ -1485,7 +1490,7 @@ exit:
 /*
   see if two DNS names are the same
  */
-bool dns_name_equal(const char *name1, const char *name2)
+bool samba_dns_name_equal(const char *name1, const char *name2)
 {
        size_t len1 = strlen(name1);
        size_t len2 = strlen(name2);
diff --git a/source4/dns_server/dnsserver_common.h 
b/source4/dns_server/dnsserver_common.h
index c3ba369e3bf..a0c1065ae58 100644
--- a/source4/dns_server/dnsserver_common.h
+++ b/source4/dns_server/dnsserver_common.h
@@ -76,7 +76,7 @@ WERROR dns_common_name2dn(struct ldb_context *samdb,
                          TALLOC_CTX *mem_ctx,
                          const char *name,
                          struct ldb_dn **_dn);
-bool dns_name_equal(const char *name1, const char *name2);
+bool samba_dns_name_equal(const char *name1, const char *name2);
 
 bool dns_record_match(struct dnsp_DnssrvRpcRecord *rec1,
                      struct dnsp_DnssrvRpcRecord *rec2);
diff --git a/source4/rpc_server/dnsserver/dnsutils.c 
b/source4/rpc_server/dnsserver/dnsutils.c
index 56b2690aa95..2c56946b0f6 100644
--- a/source4/rpc_server/dnsserver/dnsutils.c
+++ b/source4/rpc_server/dnsserver/dnsutils.c
@@ -311,7 +311,7 @@ struct dnsserver_zone *dnsserver_find_zone(struct 
dnsserver_zone *zones, const c
        struct dnsserver_zone *z = NULL;
 
        for (z = zones; z; z = z->next) {
-               if (dns_name_equal(zone_name, z->name)) {
+               if (samba_dns_name_equal(zone_name, z->name)) {
                        break;
                }
        }
diff --git a/source4/torture/dns/dlz_bind9.c b/source4/torture/dns/dlz_bind9.c
index 1f330106a98..f15671e370c 100644
--- a/source4/torture/dns/dlz_bind9.c
+++ b/source4/torture/dns/dlz_bind9.c
@@ -414,18 +414,18 @@ static bool dlz_bind9_putnamedrr_torture_hook(struct 
test_expected_rr *expected,
                        } else if (strcmp(type, "cname") == 0 ||
                                 strcmp(type, "ptr") == 0   ||
                                 strcmp(type, "ns") == 0) {
-                               if (! dns_name_equal(data, data2)) {
+                               if (!samba_dns_name_equal(data, data2)) {
                                        continue;
                                }
                        } else if (strcmp(type, "mx") == 0) {
                                /*
-                                * dns_name_equal works for MX records because
-                                * the space in "10 example.com." is
+                                * samba_dns_name_equal works for MX records
+                                * because the space in "10 example.com." is
                                 * theoretically OK as a DNS character. And we
                                 * need it because dlz will add the trailing
                                 * dot.
                                 */
-                               if (! dns_name_equal(data, data2)) {
+                               if (!samba_dns_name_equal(data, data2)) {
                                        continue;
                                }
                        } else if (strcmp(data, data2) != 0) {


-- 
Samba Shared Repository

Reply via email to