diff options
-rw-r--r-- | lib/addns/dns.h | 1 | ||||
-rw-r--r-- | lib/addns/dnsrecord.c | 13 | ||||
-rw-r--r-- | source3/utils/net.c | 7 | ||||
-rw-r--r-- | source3/utils/net.h | 1 | ||||
-rw-r--r-- | source3/utils/net_ads_join_dns.c | 6 | ||||
-rw-r--r-- | source3/utils/net_dns.c | 28 | ||||
-rw-r--r-- | source3/utils/net_dns.h | 7 |
7 files changed, 52 insertions, 11 deletions
diff --git a/lib/addns/dns.h b/lib/addns/dns.h index 685cded966b..1f61d6e5bda 100644 --- a/lib/addns/dns.h +++ b/lib/addns/dns.h @@ -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 */ diff --git a/lib/addns/dnsrecord.c b/lib/addns/dnsrecord.c index e6e205e6832..c1a65956909 100644 --- a/lib/addns/dnsrecord.c +++ b/lib/addns/dnsrecord.c @@ -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: diff --git a/source3/utils/net.c b/source3/utils/net.c index 679f04db22b..8272d8c4696 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -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 diff --git a/source3/utils/net.h b/source3/utils/net.h index e092eef5fdc..b21cf410529 100644 --- a/source3/utils/net.h +++ b/source3/utils/net.h @@ -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; diff --git a/source3/utils/net_ads_join_dns.c b/source3/utils/net_ads_join_dns.c index 7c98b0ee27f..3437f96ee58 100644 --- a/source3/utils/net_ads_join_dns.c +++ b/source3/utils/net_ads_join_dns.c @@ -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; diff --git a/source3/utils/net_dns.c b/source3/utils/net_dns.c index 751a6c120e0..9850ba40299 100644 --- a/source3/utils/net_dns.c +++ b/source3/utils/net_dns.c @@ -30,9 +30,13 @@ *********************************************************************/ 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 ))) { diff --git a/source3/utils/net_dns.h b/source3/utils/net_dns.h index f53e9546e23..4569e1c3328 100644 --- a/source3/utils/net_dns.h +++ b/source3/utils/net_dns.h @@ -33,9 +33,12 @@ #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) */ |