diff --git a/source3/utils/net.c b/source3/utils/net.c index 44119dc..13eed2f 100644 --- a/source3/utils/net.c +++ b/source3/utils/net.c @@ -924,11 +924,11 @@ static struct functable net_func[] = { c->opt_password = getenv("PASSWD"); } + /* Failing to init the msg_ctx isn't a fatal error. Only + root-level things (joining/leaving domains etc.) will be denied. */ + c->msg_ctx = messaging_init(c, procid_self(), event_context_init(c)); - if (c->msg_ctx == NULL) { - exit(1); - } rc = net_run_function(c, argc_new-1, argv_new+1, "net", net_func); diff --git a/source3/utils/net_ads.c b/source3/utils/net_ads.c index 858830f..0b2165d 100644 --- a/source3/utils/net_ads.c +++ b/source3/utils/net_ads.c @@ -968,6 +968,12 @@ static int net_ads_leave(struct net_context *c, int argc, const char **argv) use_in_memory_ccache(); } + if (!c->msg_ctx) { + d_fprintf(stderr, _("Could not initialise message context. " + "Try running as root\n")); + return -1; + } + werr = libnet_init_UnjoinCtx(ctx, &r); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, _("Could not initialise unjoin context.\n")); @@ -1348,6 +1354,13 @@ int net_ads_join(struct net_context *c, int argc, const char **argv) goto fail; } + if (!c->msg_ctx) { + d_fprintf(stderr, _("Could not initialise message context. " + "Try running as root\n")); + werr = WERR_ACCESS_DENIED; + goto fail; + } + /* Do the domain join here */ r->in.domain_name = domain; diff --git a/source3/utils/net_lookup.c b/source3/utils/net_lookup.c index 0a85da3..2afa75c 100644 --- a/source3/utils/net_lookup.c +++ b/source3/utils/net_lookup.c @@ -410,6 +410,12 @@ static int net_lookup_dsgetdcname(struct net_context *c, int argc, const char ** site_name = argv[2]; } + if (!c->msg_ctx) { + d_fprintf(stderr, _("Could not initialise message context. " + "Try running as root\n")); + return -1; + } + status = dsgetdcname(mem_ctx, c->msg_ctx, domain_name, NULL, site_name, flags, &info); if (!NT_STATUS_IS_OK(status)) {