diff options
-rw-r--r-- | source3/lib/netapi/netapi.c | 46 | ||||
-rw-r--r-- | source3/lib/netapi/netapi_net.h | 24 | ||||
-rw-r--r-- | source3/lib/netapi/netapi_private.h | 2 | ||||
-rw-r--r-- | source3/utils/net_dom.c | 3 | ||||
-rw-r--r-- | source3/utils/net_rpc.c | 11 | ||||
-rw-r--r-- | source3/utils/net_rpc_shell.c | 3 |
6 files changed, 70 insertions, 19 deletions
diff --git a/source3/lib/netapi/netapi.c b/source3/lib/netapi/netapi.c index 7b3ab321af..7eb0764849 100644 --- a/source3/lib/netapi/netapi.c +++ b/source3/lib/netapi/netapi.c @@ -49,14 +49,14 @@ static NET_API_STATUS libnetapi_init_private_context(struct libnetapi_ctx *ctx) } /**************************************************************** +Create a libnetapi context, for use in non-Samba applications. This +loads the smb.conf file and sets the debug level to 0, so that +applications are not flooded with debug logs at level 10, when they +were not expecting it. ****************************************************************/ NET_API_STATUS libnetapi_init(struct libnetapi_ctx **context) { - NET_API_STATUS status; - struct libnetapi_ctx *ctx = NULL; - char *krb5_cc_env = NULL; - if (stat_ctx && libnetapi_initialized) { *context = stat_ctx; return NET_API_STATUS_SUCCESS; @@ -67,15 +67,10 @@ NET_API_STATUS libnetapi_init(struct libnetapi_ctx **context) #endif frame = talloc_stackframe(); - ctx = talloc_zero(frame, struct libnetapi_ctx); - if (!ctx) { - TALLOC_FREE(frame); - return W_ERROR_V(WERR_NOMEM); - } - + /* When libnetapi is invoked from an application, it does not + * want to be swamped with level 10 debug messages, even if + * this has been set for the server in smb.conf */ lp_set_cmdline("log level", "0"); - - /* prevent setup_logging() from closing x_stderr... */ setup_logging("libnetapi", DEBUG_STDERR); load_case_tables(); @@ -92,6 +87,33 @@ NET_API_STATUS libnetapi_init(struct libnetapi_ctx **context) BlockSignals(True, SIGPIPE); + return libnetapi_net_init(context); +} + +/**************************************************************** +Create a libnetapi context, for use inside the 'net' binary. + +As we know net has already loaded the smb.conf file, and set the debug +level etc, this avoids doing so again (which causes trouble with -d on +the command line). +****************************************************************/ + +NET_API_STATUS libnetapi_net_init(struct libnetapi_ctx **context) +{ + NET_API_STATUS status; + struct libnetapi_ctx *ctx = NULL; + char *krb5_cc_env = NULL; + + frame = talloc_stackframe(); + + ctx = talloc_zero(frame, struct libnetapi_ctx); + if (!ctx) { + TALLOC_FREE(frame); + return W_ERROR_V(WERR_NOMEM); + } + + BlockSignals(True, SIGPIPE); + krb5_cc_env = getenv(KRB5_ENV_CCNAME); if (!krb5_cc_env || (strlen(krb5_cc_env) == 0)) { ctx->krb5_cc_env = talloc_strdup(frame, "MEMORY:libnetapi"); diff --git a/source3/lib/netapi/netapi_net.h b/source3/lib/netapi/netapi_net.h new file mode 100644 index 0000000000..c1b06ade3b --- /dev/null +++ b/source3/lib/netapi/netapi_net.h @@ -0,0 +1,24 @@ +/* + * Unix SMB/CIFS implementation. + * NetApi Support + * Copyright (C) Andrew Bartlett 2010 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see <http://www.gnu.org/licenses/>. + */ + +/* This API header is private between the 'net' binary and and libnet */ + +/* This function is to init the libnetapi subsystem, without + * re-reading config files or setting debug levels etc */ +NET_API_STATUS libnetapi_net_init(struct libnetapi_ctx **ctx); diff --git a/source3/lib/netapi/netapi_private.h b/source3/lib/netapi/netapi_private.h index 859c064223..fe8d72ec0f 100644 --- a/source3/lib/netapi/netapi_private.h +++ b/source3/lib/netapi/netapi_private.h @@ -20,6 +20,8 @@ #ifndef __LIB_NETAPI_PRIVATE_H__ #define __LIB_NETAPI_PRIVATE_H__ +#include "lib/netapi/netapi_net.h" + #define LIBNETAPI_REDIRECT_TO_LOCALHOST(ctx, r, fn) \ DEBUG(10,("redirecting call %s to localhost\n", #fn)); \ if (!r->in.server_name) { \ diff --git a/source3/utils/net_dom.c b/source3/utils/net_dom.c index d07a1d4f04..d1eb9edba8 100644 --- a/source3/utils/net_dom.c +++ b/source3/utils/net_dom.c @@ -22,6 +22,7 @@ #include "../librpc/gen_ndr/cli_initshutdown.h" #include "../librpc/gen_ndr/ndr_winreg.h" #include "lib/netapi/netapi.h" +#include "lib/netapi/netapi_net.h" int net_dom_usage(struct net_context *c, int argc, const char **argv) { @@ -372,7 +373,7 @@ int net_dom(struct net_context *c, int argc, const char **argv) {NULL, NULL, 0, NULL, NULL} }; - status = libnetapi_init(&c->netapi_ctx); + status = libnetapi_net_init(&c->netapi_ctx); if (status != 0) { return -1; } diff --git a/source3/utils/net_rpc.c b/source3/utils/net_rpc.c index 1b0e469afc..228f7eb852 100644 --- a/source3/utils/net_rpc.c +++ b/source3/utils/net_rpc.c @@ -35,6 +35,7 @@ #include "../librpc/gen_ndr/cli_winreg.h" #include "secrets.h" #include "lib/netapi/netapi.h" +#include "lib/netapi/netapi_net.h" #include "rpc_client/init_lsa.h" #include "../libcli/security/security.h" @@ -1050,7 +1051,7 @@ int net_rpc_user(struct net_context *c, int argc, const char **argv) {NULL, NULL, 0, NULL, NULL} }; - status = libnetapi_init(&c->netapi_ctx); + status = libnetapi_net_init(&c->netapi_ctx); if (status != 0) { return -1; } @@ -2899,7 +2900,7 @@ int net_rpc_group(struct net_context *c, int argc, const char **argv) {NULL, NULL, 0, NULL, NULL} }; - status = libnetapi_init(&c->netapi_ctx); + status = libnetapi_net_init(&c->netapi_ctx); if (status != 0) { return -1; } @@ -4745,7 +4746,7 @@ int net_rpc_share(struct net_context *c, int argc, const char **argv) {NULL, NULL, 0, NULL, NULL} }; - status = libnetapi_init(&c->netapi_ctx); + status = libnetapi_net_init(&c->netapi_ctx); if (status != 0) { return -1; } @@ -5021,7 +5022,7 @@ int net_rpc_file(struct net_context *c, int argc, const char **argv) {NULL, NULL, 0, NULL, NULL} }; - status = libnetapi_init(&c->netapi_ctx); + status = libnetapi_net_init(&c->netapi_ctx); if (status != 0) { return -1; } @@ -7428,7 +7429,7 @@ int net_rpc(struct net_context *c, int argc, const char **argv) {NULL, NULL, 0, NULL, NULL} }; - status = libnetapi_init(&c->netapi_ctx); + status = libnetapi_net_init(&c->netapi_ctx); if (status != 0) { return -1; } diff --git a/source3/utils/net_rpc_shell.c b/source3/utils/net_rpc_shell.c index 82f9f29ced..c2384254ab 100644 --- a/source3/utils/net_rpc_shell.c +++ b/source3/utils/net_rpc_shell.c @@ -23,6 +23,7 @@ #include "utils/net.h" #include "../librpc/gen_ndr/ndr_samr.h" #include "lib/netapi/netapi.h" +#include "lib/netapi/netapi_net.h" #include "../libcli/smbreadline/smbreadline.h" static NTSTATUS rpc_sh_info(struct net_context *c, @@ -222,7 +223,7 @@ int net_rpc_shell(struct net_context *c, int argc, const char **argv) return -1; } - if (libnetapi_init(&c->netapi_ctx) != 0) { + if (libnetapi_net_init(&c->netapi_ctx) != 0) { return -1; } libnetapi_set_username(c->netapi_ctx, c->opt_user_name); |