summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/netapi/netapi.c46
-rw-r--r--source3/lib/netapi/netapi_net.h24
-rw-r--r--source3/lib/netapi/netapi_private.h2
-rw-r--r--source3/utils/net_dom.c3
-rw-r--r--source3/utils/net_rpc.c11
-rw-r--r--source3/utils/net_rpc_shell.c3
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);