s3: Fix bug 6338 -- net rpc trustdom list always display "none"
authorVolker Lendecke <vl@samba.org>
Sun, 22 Nov 2009 21:38:45 +0000 (22:38 +0100)
committerVolker Lendecke <vl@samba.org>
Sun, 22 Nov 2009 21:42:02 +0000 (22:42 +0100)
source3/utils/net_rpc.c

index 4ef86d171bf1ab2f31d909485d6e702afbeadfe4..910d782fbad356149431c670eb8a66c3aed29b78 100644 (file)
@@ -6018,6 +6018,7 @@ static int rpc_trustdom_list(struct net_context *c, int argc, const char **argv)
        int i;
        struct lsa_DomainList dom_list;
        fstring pdc_name;
+       bool found_domain;
 
        /* trusting domains listing variables */
        struct policy_handle domain_hnd;
@@ -6099,9 +6100,11 @@ static int rpc_trustdom_list(struct net_context *c, int argc, const char **argv)
         * Keep calling LsaEnumTrustdom over opened pipe until
         * the end of enumeration is reached
         */
-        
+
        d_printf(_("Trusted domains list:\n\n"));
 
+       found_domain = false;
+
        do {
                nt_status = rpccli_lsa_EnumTrustDom(pipe_hnd, mem_ctx,
                                                    &connect_hnd,
@@ -6119,16 +6122,20 @@ static int rpc_trustdom_list(struct net_context *c, int argc, const char **argv)
                for (i = 0; i < dom_list.count; i++) {
                        print_trusted_domain(dom_list.domains[i].sid,
                                             dom_list.domains[i].name.string);
+                       found_domain = true;
                };
 
-               /*
-                * in case of no trusted domains say something rather
-                * than just display blank line
-                */
-               if (!dom_list.count) d_printf(_("none\n"));
 
        } while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES));
 
+       /*
+        * in case of no trusted domains say something rather
+        * than just display blank line
+        */
+       if (!found_domain) {
+               d_printf(_("none\n"));
+       }
+
        /* close this connection before doing next one */
        nt_status = rpccli_lsa_Close(pipe_hnd, mem_ctx, &connect_hnd);
        if (NT_STATUS_IS_ERR(nt_status)) {
@@ -6191,6 +6198,8 @@ static int rpc_trustdom_list(struct net_context *c, int argc, const char **argv)
         * perform actual enumeration
         */
 
+       found_domain = false;
+
        enum_ctx = 0;   /* reset enumeration context from last enumeration */
        do {
 
@@ -6213,6 +6222,8 @@ static int rpc_trustdom_list(struct net_context *c, int argc, const char **argv)
 
                        char *str = CONST_DISCARD(char *, trusts->entries[i].name.string);
 
+                       found_domain = true;
+
                        /*
                         * get each single domain's sid (do we _really_ need this ?):
                         *  1) connect to domain's pdc
@@ -6251,13 +6262,15 @@ static int rpc_trustdom_list(struct net_context *c, int argc, const char **argv)
                                          "responding: %s\n"),
                                          nt_errstr(nt_status));
                                d_printf(_("couldn't get domain's sid\n"));
-                       };
-               };
-
-               if (!num_domains) d_printf("none\n");
+                       }
+               }
 
        } while (NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES));
 
+       if (!found_domain) {
+               d_printf("none\n");
+       }
+
        /* close opened samr and domain policy handles */
        nt_status = rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_hnd);
        if (!NT_STATUS_IS_OK(nt_status)) {