s3-net: avoid confusing output in net_rpc_oldjoin() if NET_FLAGS_EXPECT_FALLBACK...
authorStefan Metzmacher <metze@samba.org>
Mon, 15 Jul 2013 11:28:34 +0000 (13:28 +0200)
committerAndreas Schneider <asn@samba.org>
Mon, 5 Aug 2013 08:30:01 +0000 (10:30 +0200)
"net rpc join" tries net_rpc_oldjoin() first and falls back to
net_rpc_join_newstyle(). We should not print the join failed
if just net_rpc_oldjoin() failed.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/utils/net.h
source3/utils/net_proto.h
source3/utils/net_rpc.c

index 2056d894d596e4ef012a9d04ef35ddf16cf32249..e97734ae3423ff88810d396bc5c54b005d44dc63 100644 (file)
@@ -182,6 +182,7 @@ enum netdom_domain_t { ND_TYPE_NT4, ND_TYPE_AD };
 #define NET_FLAGS_SIGN                         0x00000040      /* sign RPC connection */
 #define NET_FLAGS_SEAL                         0x00000080      /* seal RPC connection */
 #define NET_FLAGS_TCP                          0x00000100      /* use ncacn_ip_tcp */
+#define NET_FLAGS_EXPECT_FALLBACK              0x00000200      /* the caller will fallback */
 
 /* net share operation modes */
 #define NET_MODE_SHARE_MIGRATE 1
index 1809ba9f125e1ae1df54a45d321c261a719eb2b3..25e9db2fdb0913eadb3338d09f3ce3713f716b2a 100644 (file)
@@ -146,7 +146,6 @@ int run_rpc_command(struct net_context *c,
                        const char **argv);
 int net_rpc_changetrustpw(struct net_context *c, int argc, const char **argv);
 int net_rpc_testjoin(struct net_context *c, int argc, const char **argv);
-int net_rpc_join_newstyle(struct net_context *c, int argc, const char **argv);
 int net_rpc_join(struct net_context *c, int argc, const char **argv);
 NTSTATUS rpc_info_internals(struct net_context *c,
                        const struct dom_sid *domain_sid,
index ae8ebc0e724658e56382066dab0c142e9515e605..e258ec617e69e6274ed7a91c59deca71e4a44eeb 100644 (file)
@@ -427,11 +427,16 @@ static int net_rpc_oldjoin(struct net_context *c, int argc, const char **argv)
        return 0;
 
 fail:
+       if (c->opt_flags & NET_FLAGS_EXPECT_FALLBACK) {
+               goto cleanup;
+       }
+
        /* issue an overall failure message at the end. */
        d_fprintf(stderr, _("Failed to join domain: %s\n"),
                r && r->out.error_string ? r->out.error_string :
                get_friendly_werror_msg(werr));
 
+cleanup:
        TALLOC_FREE(mem_ctx);
 
        return -1;
@@ -513,7 +518,7 @@ int net_rpc_testjoin(struct net_context *c, int argc, const char **argv)
  *
  **/
 
-int net_rpc_join_newstyle(struct net_context *c, int argc, const char **argv)
+static int net_rpc_join_newstyle(struct net_context *c, int argc, const char **argv)
 {
        struct libnet_JoinCtx *r = NULL;
        TALLOC_CTX *mem_ctx;
@@ -623,6 +628,8 @@ fail:
 
 int net_rpc_join(struct net_context *c, int argc, const char **argv)
 {
+       int ret;
+
        if (c->display_usage) {
                d_printf("%s\n%s",
                         _("Usage:"),
@@ -650,8 +657,12 @@ int net_rpc_join(struct net_context *c, int argc, const char **argv)
                return -1;
        }
 
-       if ((net_rpc_oldjoin(c, argc, argv) == 0))
+       c->opt_flags |= NET_FLAGS_EXPECT_FALLBACK;
+       ret = net_rpc_oldjoin(c, argc, argv);
+       c->opt_flags &= ~NET_FLAGS_EXPECT_FALLBACK;
+       if (ret == 0) {
                return 0;
+       }
 
        return net_rpc_join_newstyle(c, argc, argv);
 }