]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib/addns: Add ServerAddress parameter to DoDNSUpdate()
authorVolker Lendecke <vl@samba.org>
Sun, 3 May 2026 10:42:46 +0000 (12:42 +0200)
committerVolker Lendecke <vl@samba.org>
Fri, 3 Jul 2026 08:08:36 +0000 (08:08 +0000)
pszServerName was used for two things: Input for getaddrinfo() to find
the name server to talk to, and also for gensec_set_target_hostname()
for finding the Kerberos target principal. Split this up to enable
using the A records from the DNS NS query directly, i.e. giving
DoDNSUpdate() an IP address to talk to.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
lib/addns/dns.h
lib/addns/dnsgss.c
source3/utils/net_ads_join_dns.c
source3/utils/net_dns.c
source3/utils/net_dns.h

index 1f1d3137165c0f7a7ef3d0b76682ae45e1528c0f..91e4568eb570255622d8ecc0cf5dce1e8fb8f279 100644 (file)
@@ -301,7 +301,7 @@ const char *dns_errstr(DNS_ERROR err);
 
 struct gensec_security;
 
-DNS_ERROR dns_negotiate_sec_ctx(const char *servername,
+DNS_ERROR dns_negotiate_sec_ctx(const char *serveraddress,
                                const char *keyname,
                                struct gensec_security *gensec,
                                enum dns_ServerType srv_type);
index 59027b34db5a94da69a14b09ac869d2e58d8baf0..71411430ce991b80811d0f6e04b1d8fa06154a7e 100644 (file)
@@ -149,7 +149,7 @@ static DNS_ERROR dns_negotiate_gss_ctx_int(struct dns_connection *conn,
        return err;
 }
 
-DNS_ERROR dns_negotiate_sec_ctx(const char *servername,
+DNS_ERROR dns_negotiate_sec_ctx(const char *serveraddress,
                                const char *keyname,
                                struct gensec_security *gensec,
                                enum dns_ServerType srv_type)
@@ -158,7 +158,7 @@ DNS_ERROR dns_negotiate_sec_ctx(const char *servername,
        DNS_ERROR err;
        struct dns_connection *conn = NULL;
 
-       err = dns_open_connection( servername, DNS_TCP, frame, &conn );
+       err = dns_open_connection(serveraddress, DNS_TCP, frame, &conn);
        if (!ERR_DNS_IS_OK(err)) goto error;
 
        err = dns_negotiate_gss_ctx_int(conn, keyname,
index 7b0bd644acd226eddf417cdec514d39213e8e797..26c2b77797c5d07583c5c871870a3ae4394cba52 100644 (file)
@@ -171,6 +171,7 @@ do_update:
                fstrcpy( dns_server, nameservers[i].hostname );
 
                dns_err = DoDNSUpdate(dns_server,
+                                     dns_server,
                                      dnsdomain,
                                      machine_name,
                                      creds,
index 3e2582f3c20f37c3e20b02dae16aa35b90b099f9..e6086d8fac6585d66f184855779ed5e344c93ad8 100644 (file)
@@ -31,7 +31,8 @@
 /*********************************************************************
 *********************************************************************/
 
-static DNS_ERROR DoDNSUpdateNegotiateGensec(const char *pszServerName,
+static DNS_ERROR DoDNSUpdateNegotiateGensec(const char *pszServerAddress,
+                                           const char *pszServerName,
                                            const char *pszDomainName,
                                            const char *keyname,
                                            enum dns_ServerType srv_type,
@@ -79,7 +80,7 @@ static DNS_ERROR DoDNSUpdateNegotiateGensec(const char *pszServerName,
                goto error;
        }
 
-       err = dns_negotiate_sec_ctx(pszServerName,
+       err = dns_negotiate_sec_ctx(pszServerAddress,
                                    keyname,
                                    ans->gensec_security,
                                    srv_type);
@@ -94,7 +95,8 @@ static DNS_ERROR DoDNSUpdateNegotiateGensec(const char *pszServerName,
        return err;
 }
 
-DNS_ERROR DoDNSUpdate(const char *pszServerName,
+DNS_ERROR DoDNSUpdate(const char *pszServerAddress,
+                     const char *pszServerName,
                      const char *pszDomainName,
                      const char *pszHostName,
                      struct cli_credentials *creds,
@@ -125,7 +127,7 @@ DNS_ERROR DoDNSUpdate(const char *pszServerName,
                return ERROR_DNS_NO_MEMORY;
        }
 
-       err = dns_open_connection( pszServerName, DNS_TCP, mem_ctx, &conn );
+       err = dns_open_connection(pszServerAddress, DNS_TCP, mem_ctx, &conn);
        if (!ERR_DNS_IS_OK(err)) {
                goto error;
        }
@@ -203,7 +205,8 @@ DNS_ERROR DoDNSUpdate(const char *pszServerName,
                        goto error;
                }
 
-               err = DoDNSUpdateNegotiateGensec(pszServerName,
+               err = DoDNSUpdateNegotiateGensec(pszServerAddress,
+                                                pszServerName,
                                                 pszDomainName,
                                                 keyname,
                                                 DNS_SRV_ANY,
@@ -213,7 +216,8 @@ DNS_ERROR DoDNSUpdate(const char *pszServerName,
 
                /* retry using the Windows 2000 DNS hack */
                if (!ERR_DNS_IS_OK(err)) {
-                       err = DoDNSUpdateNegotiateGensec(pszServerName,
+                       err = DoDNSUpdateNegotiateGensec(pszServerAddress,
+                                                        pszServerName,
                                                         pszDomainName,
                                                         keyname,
                                                         DNS_SRV_WIN2000,
index 0dd06c35323e77c633e07b400cd8126efb16f821..3c1d8c9a1316582e6e4e6c6d2d3a71b7055e4665 100644 (file)
@@ -34,7 +34,8 @@
 
 struct cli_credentials;
 
-DNS_ERROR DoDNSUpdate(const char *pszServerName,
+DNS_ERROR DoDNSUpdate(const char *pszServerAddress,
+                     const char *pszServerName,
                      const char *pszDomainName,
                      const char *pszHostName,
                      struct cli_credentials *creds,