s3:net ads dns register: use "cluster addresses" option if configured (bug #7871)
authorStefan Metzmacher <metze@samba.org>
Thu, 16 Dec 2010 11:07:24 +0000 (12:07 +0100)
committerKarolin Seeger <kseeger@samba.org>
Sat, 5 Mar 2011 13:34:45 +0000 (14:34 +0100)
metze

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User: Stefan Metzmacher <metze@samba.org>
Autobuild-Date: Fri Dec 17 16:49:14 CET 2010 on sn-devel-104
(cherry picked from commit 1dc2fa7616207a2d3a9f1cbe69b2ec1fc61634fd)
(cherry picked from commit 9a40e5f6a500571cc752383ca7fa27347e4efa45)
(cherry picked from commit 53f163bbc2e5722a46eeb55d15cca2c23994e71b)

source3/utils/net_ads.c

index a432570cc014db6c5515c2e95b5ba484ac81b894..83aef18cef1293272f79657a36d355186fff98e3 100644 (file)
@@ -1466,6 +1466,7 @@ static int net_ads_dns_register(struct net_context *c, int argc, const char **ar
        NTSTATUS ntstatus;
        TALLOC_CTX *ctx;
        const char *hostname = NULL;
+       const char **addrs_list = NULL;
        struct sockaddr_storage *addrs = NULL;
        int num_addrs = 0;
        int count;
@@ -1474,7 +1475,7 @@ static int net_ads_dns_register(struct net_context *c, int argc, const char **ar
        talloc_enable_leak_report();
 #endif
 
-       if (argc <= 1 && lp_clustering()) {
+       if (argc <= 1 && lp_clustering() && lp_cluster_addresses() == NULL) {
                d_fprintf(stderr, _("Refusing DNS updates with automatic "
                                    "detection of addresses in a clustered "
                                    "setup.\n"));
@@ -1501,6 +1502,13 @@ static int net_ads_dns_register(struct net_context *c, int argc, const char **ar
 
        if (argc > 1) {
                num_addrs = argc - 1;
+               addrs_list = &argv[1];
+       } else if (lp_clustering()) {
+               addrs_list = lp_cluster_addresses();
+               num_addrs = str_list_length(addrs_list);
+       }
+
+       if (num_addrs > 0) {
                addrs = talloc_zero_array(ctx, struct sockaddr_storage, num_addrs);
                if (addrs == NULL) {
                        d_fprintf(stderr, _("Error allocating memory!\n"));
@@ -1510,10 +1518,10 @@ static int net_ads_dns_register(struct net_context *c, int argc, const char **ar
        }
 
        for (count = 0; count < num_addrs; count++) {
-               if (!interpret_string_addr(&addrs[count], argv[count+1], 0)) {
+               if (!interpret_string_addr(&addrs[count], addrs_list[count], 0)) {
                        d_fprintf(stderr, "%s '%s'.\n",
                                          _("Cannot interpret address"),
-                                         argv[count+1]);
+                                         addrs_list[count]);
                        talloc_free(ctx);
                        return -1;
                }