From: Volker Lendecke Date: Sun, 3 May 2026 10:42:46 +0000 (+0200) Subject: lib/addns: Add ServerAddress parameter to DoDNSUpdate() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0eb58b4f094401e0f7f8da50c97bbe009c2c97f4;p=thirdparty%2Fsamba.git lib/addns: Add ServerAddress parameter to DoDNSUpdate() 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 Reviewed-by: Stefan Metzmacher --- diff --git a/lib/addns/dns.h b/lib/addns/dns.h index 1f1d3137165..91e4568eb57 100644 --- a/lib/addns/dns.h +++ b/lib/addns/dns.h @@ -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); diff --git a/lib/addns/dnsgss.c b/lib/addns/dnsgss.c index 59027b34db5..71411430ce9 100644 --- a/lib/addns/dnsgss.c +++ b/lib/addns/dnsgss.c @@ -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, diff --git a/source3/utils/net_ads_join_dns.c b/source3/utils/net_ads_join_dns.c index 7b0bd644acd..26c2b77797c 100644 --- a/source3/utils/net_ads_join_dns.c +++ b/source3/utils/net_ads_join_dns.c @@ -171,6 +171,7 @@ do_update: fstrcpy( dns_server, nameservers[i].hostname ); dns_err = DoDNSUpdate(dns_server, + dns_server, dnsdomain, machine_name, creds, diff --git a/source3/utils/net_dns.c b/source3/utils/net_dns.c index 3e2582f3c20..e6086d8fac6 100644 --- a/source3/utils/net_dns.c +++ b/source3/utils/net_dns.c @@ -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, diff --git a/source3/utils/net_dns.h b/source3/utils/net_dns.h index 0dd06c35323..3c1d8c9a131 100644 --- a/source3/utils/net_dns.h +++ b/source3/utils/net_dns.h @@ -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,