diff options
author | Andrew Bartlett <abartlet@samba.org> | 2010-11-21 20:40:50 +1100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2010-11-24 08:37:04 +0100 |
commit | 88d020ade07bfe5cd7570b8c9b80a162adb39891 (patch) | |
tree | c37d970b1061b74655d19725c754e15c71816a53 /source3/lib | |
parent | 58920aab0237aaa9f4a81577800bddba97e279a5 (diff) | |
download | samba-88d020ade07bfe5cd7570b8c9b80a162adb39891.tar.gz samba-88d020ade07bfe5cd7570b8c9b80a162adb39891.tar.bz2 samba-88d020ade07bfe5cd7570b8c9b80a162adb39891.zip |
s3-netapi Add libnetapi_net_init(), don't double-init common Samba subsystems
The issue here is that libnet and net were both trying to load the
smb.conf files, the case tables and set the debug levels. The set of
the debug levels caused problems, because it would force the level to
0, not (say) 10 as requested on the command line.
This regression was apparently introduced in
cf4de8ec2c8df2ceabbe3d836d296b058e7b19fb when eliminating
AllowDebugChange.
Andrew Bartlett
Diffstat (limited to 'source3/lib')
-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 |
3 files changed, 60 insertions, 12 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) { \ |