summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Baumbach <bb@sernet.de>2023-02-16 18:36:37 +0100
committerBjörn Baumbach <bb@sernet.de>2023-03-03 11:58:34 +0000
commit36ed126f4c3d91ba3154bd78c8becff9a15a4769 (patch)
tree2e6d890cf4616f8bf005b05964f2f090ee97c2b5
parenta320089a248fe307fb29d92436c72e24917e9f90 (diff)
downloadsamba-36ed126f4c3d91ba3154bd78c8becff9a15a4769.tar.gz
net: add new --dns-ttl option to specify the ttl of dns records
Signed-off-by: Björn Baumbach <bb@sernet.de> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
-rw-r--r--lib/addns/dns.h1
-rw-r--r--lib/addns/dnsrecord.c13
-rw-r--r--source3/utils/net.c7
-rw-r--r--source3/utils/net.h1
-rw-r--r--source3/utils/net_ads_join_dns.c6
-rw-r--r--source3/utils/net_dns.c28
-rw-r--r--source3/utils/net_dns.h7
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) */