From 05d9b4165af9e7f03d3fbeb64db4fc305fcec4df Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 15 Jul 2013 13:28:34 +0200 Subject: s3-net: avoid confusing output in net_rpc_oldjoin() if NET_FLAGS_EXPECT_FALLBACK is passed "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 Reviewed-by: Andreas Schneider --- source3/utils/net.h | 1 + source3/utils/net_proto.h | 1 - source3/utils/net_rpc.c | 15 +++++++++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'source3/utils') diff --git a/source3/utils/net.h b/source3/utils/net.h index 2056d894d5..e97734ae34 100644 --- a/source3/utils/net.h +++ b/source3/utils/net.h @@ -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 diff --git a/source3/utils/net_proto.h b/source3/utils/net_proto.h index 1809ba9f12..25e9db2fdb 100644 --- a/source3/utils/net_proto.h +++ b/source3/utils/net_proto.h @@ -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, diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index ae8ebc0e72..e258ec617e 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -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); } -- cgit