]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
net: add new --dns-ttl option to specify the ttl of dns records
authorBjörn Baumbach <bb@sernet.de>
Thu, 16 Feb 2023 17:36:37 +0000 (18:36 +0100)
committerBjörn Baumbach <bb@sernet.de>
Fri, 3 Mar 2023 11:58:34 +0000 (11:58 +0000)
Signed-off-by: Björn Baumbach <bb@sernet.de>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/addns/dns.h
lib/addns/dnsrecord.c
source3/utils/net.c
source3/utils/net.h
source3/utils/net_ads_join_dns.c
source3/utils/net_dns.c
source3/utils/net_dns.h

index 685cded966bcd783cf9dc075694706e36aba38bf..1f61d6e5bda8a8bd87ea06e68baec9e0de1d80bf 100644 (file)
@@ -290,6 +290,7 @@ DNS_ERROR dns_create_update_request(TALLOC_CTX *mem_ctx,
                                    const char *hostname,
                                    const struct sockaddr_storage *ip_addr,
                                    size_t num_adds,
+                                   uint32_t ttl,
                                    struct dns_update_request **preq);
 
 /* from dnssock.c */
index e6e205e6832cc9349c73e11b1f04980ee9e67542..c1a6595690912118a91c7ed732f5905850c523b2 100644 (file)
@@ -408,6 +408,7 @@ DNS_ERROR dns_create_update_request(TALLOC_CTX *mem_ctx,
                                    const char *hostname,
                                    const struct sockaddr_storage *ss_addrs,
                                    size_t num_addrs,
+                                   uint32_t ttl,
                                    struct dns_update_request **preq)
 {
        struct dns_update_request *req = NULL;
@@ -448,11 +449,19 @@ DNS_ERROR dns_create_update_request(TALLOC_CTX *mem_ctx,
 
                switch(ss_addrs[i].ss_family) {
                case AF_INET:
-                       err = dns_create_a_record(req, hostname, 3600, &ss_addrs[i], &rec);
+                       err = dns_create_a_record(req,
+                                                 hostname,
+                                                 ttl,
+                                                 &ss_addrs[i],
+                                                 &rec);
                        break;
 #ifdef HAVE_IPV6
                case AF_INET6:
-                       err = dns_create_aaaa_record(req, hostname, 3600, &ss_addrs[i], &rec);
+                       err = dns_create_aaaa_record(req,
+                                                    hostname,
+                                                    ttl,
+                                                    &ss_addrs[i],
+                                                    &rec);
                        break;
 #endif
                default:
index 679f04db22b93f97c9b4399bd54cde1f66e04ffc..8272d8c4696178fb9851b32e284af6372640644d 100644 (file)
@@ -1225,6 +1225,13 @@ static struct functable net_func[] = {
                        .arg        = &c->opt_follow_symlink,
                        .descrip    = "follow symlinks",
                },
+               /* Options for 'net ads dns register' */
+               {
+                       .longName   = "dns-ttl",
+                       .argInfo    = POPT_ARG_INT,
+                       .arg        = &c->opt_dns_ttl,
+                       .descrip    = "TTL in seconds of DNS records",
+               },
                POPT_COMMON_SAMBA
                POPT_COMMON_CONNECTION
                POPT_COMMON_CREDENTIALS
index e092eef5fdc56697074492ab8d40434c39780e77..b21cf410529adbe0287f7febf6ff4d1f7a5af7f8 100644 (file)
@@ -90,6 +90,7 @@ struct net_context {
        int opt_continue_on_error;
        int opt_recursive;
        int opt_follow_symlink;
+       int opt_dns_ttl;
 
        int opt_have_ip;
        struct sockaddr_storage opt_dest_ip;
index 7c98b0ee27f82d00a3b4b296bf92350d7bc30b2b..3437f96ee589758de06187a0164cf24ad1770353 100644 (file)
@@ -56,6 +56,11 @@ static NTSTATUS net_update_dns_internal(struct net_context *c,
        fstring dns_server;
        const char *dnsdomain = NULL;
        char *root_domain = NULL;
+       uint32_t ttl = 3600;
+
+       if (c->opt_dns_ttl > 0) {
+               ttl = MIN(c->opt_dns_ttl, UINT32_MAX);
+       }
 
        if ( (dnsdomain = strchr_m( machine_name, '.')) == NULL ) {
                d_printf(_("No DNS domain configured for %s. "
@@ -158,6 +163,7 @@ static NTSTATUS net_update_dns_internal(struct net_context *c,
                                      addrs,
                                      num_addrs,
                                      flags,
+                                     ttl,
                                      remove_host);
                if (ERR_DNS_IS_OK(dns_err)) {
                        status = NT_STATUS_OK;
index 751a6c120e050a5a8b54d06feb4e3d9459a392a6..9850ba40299086859571c4cf0dff4469fa0ee992 100644 (file)
 *********************************************************************/
 
 DNS_ERROR DoDNSUpdate(char *pszServerName,
-                     const char *pszDomainName, const char *pszHostName,
-                     const struct sockaddr_storage *sslist, size_t num_addrs,
-                     uint32_t flags, bool remove_host)
+                     const char *pszDomainName,
+                     const char *pszHostName,
+                     const struct sockaddr_storage *sslist,
+                     size_t num_addrs,
+                     uint32_t flags,
+                     uint32_t ttl,
+                     bool remove_host)
 {
        DNS_ERROR err;
        struct dns_connection *conn;
@@ -91,8 +95,13 @@ DNS_ERROR DoDNSUpdate(char *pszServerName,
                 * First try without signing
                 */
 
-               err = dns_create_update_request(mem_ctx, pszDomainName, pszHostName,
-                                               sslist, num_addrs, &req);
+               err = dns_create_update_request(mem_ctx,
+                                               pszDomainName,
+                                               pszHostName,
+                                               sslist,
+                                               num_addrs,
+                                               ttl,
+                                               &req);
                if (!ERR_DNS_IS_OK(err)) goto error;
 
                err = dns_update_transaction(mem_ctx, conn, req, &resp);
@@ -115,8 +124,13 @@ DNS_ERROR DoDNSUpdate(char *pszServerName,
                gss_ctx_id_t gss_context;
                char *keyname;
 
-               err = dns_create_update_request(mem_ctx, pszDomainName, pszHostName,
-                                               sslist, num_addrs, &req);
+               err = dns_create_update_request(mem_ctx,
+                                               pszDomainName,
+                                               pszHostName,
+                                               sslist,
+                                               num_addrs,
+                                               ttl,
+                                               &req);
                if (!ERR_DNS_IS_OK(err)) goto error;
 
                if (!(keyname = dns_generate_keyname( mem_ctx ))) {
index f53e9546e23bebb33e7c349d11c28cf26f382640..4569e1c3328bd32f5121c051c468322826b6786e 100644 (file)
 #include "../lib/addns/dns.h"
 
 DNS_ERROR DoDNSUpdate(char *pszServerName,
-                     const char *pszDomainName, const char *pszHostName,
+                     const char *pszDomainName,
+                     const char *pszHostName,
                      const struct sockaddr_storage *sslist,
                      size_t num_addrs,
-                     uint32_t flags, bool remove_host);
+                     uint32_t flags,
+                     uint32_t ttl,
+                     bool remove_host);
 
 #endif /* defined(HAVE_KRB5) */