summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/client/client.c12
-rw-r--r--source4/include/debug.h2
-rw-r--r--source4/lib/cmdline/popt_common.c22
-rw-r--r--source4/lib/debug.c22
-rw-r--r--source4/lib/registry/tools/regdiff.c10
-rw-r--r--source4/lib/registry/tools/regpatch.c10
-rw-r--r--source4/lib/registry/tools/regshell.c11
-rw-r--r--source4/lib/registry/tools/regtree.c10
-rw-r--r--source4/smbd/server.c11
-rw-r--r--source4/torture/smbiconv.c4
-rw-r--r--source4/torture/torture.c5
-rw-r--r--source4/utils/ndrdump.c2
-rw-r--r--source4/utils/net/net.c7
-rw-r--r--source4/utils/nmblookup.c5
-rw-r--r--source4/utils/ntlm_auth.c8
15 files changed, 48 insertions, 93 deletions
diff --git a/source4/client/client.c b/source4/client/client.c
index 34d0fc20f1..afdab5928c 100644
--- a/source4/client/client.c
+++ b/source4/client/client.c
@@ -3361,18 +3361,12 @@ static void remember_query_host(const char *arg,
*query_host = 0;
*base_directory = 0;
- setup_logging(argv[0],DEBUG_STDOUT);
mem_ctx = talloc_init("client.c/main");
if (!mem_ctx) {
d_printf("\nclient.c: Not enough memory\n");
exit(1);
}
- if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
- fprintf(stderr, "%s: Can't load %s - run testparm to debug it\n",
- argv[0], dyn_CONFIGFILE);
- }
-
pc = poptGetContext("smbclient", argc, (const char **) argv, long_options, 0);
poptSetOtherOptionHelp(pc, "[OPTIONS] service <password>");
@@ -3393,10 +3387,6 @@ static void remember_query_host(const char *arg,
case 'I':
dest_ip = poptGetOptArg(pc);
break;
- case 'E':
- setup_logging("client", DEBUG_STDERR);
- break;
-
case 'L':
remember_query_host(poptGetOptArg(pc), query_host);
break;
@@ -3412,8 +3402,6 @@ static void remember_query_host(const char *arg,
}
}
- load_interfaces();
-
smbclient_init_subsystems;
if(poptPeekArg(pc)) {
diff --git a/source4/include/debug.h b/source4/include/debug.h
index 166b7c26f5..ccd1c90040 100644
--- a/source4/include/debug.h
+++ b/source4/include/debug.h
@@ -46,7 +46,7 @@ extern int DEBUGLEVEL;
#define DEBUGADDC(class, level, body) DEBUG(level, body)
#define DEBUGTAB(n) do_debug_tab(n)
-enum debug_logtype {DEBUG_FILE, DEBUG_STDOUT, DEBUG_STDERR};
+enum debug_logtype {DEBUG_STDOUT = 0, DEBUG_FILE = 1, DEBUG_STDERR = 2};
/* keep some debug class defines for now to avoid changing old code too much */
#define DBGC_AUTH 0
diff --git a/source4/lib/cmdline/popt_common.c b/source4/lib/cmdline/popt_common.c
index 94b72c520d..fec85281ef 100644
--- a/source4/lib/cmdline/popt_common.c
+++ b/source4/lib/cmdline/popt_common.c
@@ -38,7 +38,7 @@
* -i,--scope
*/
-enum {OPT_OPTION=1,OPT_LEAK_REPORT,OPT_LEAK_REPORT_FULL};
+enum {OPT_OPTION=1,OPT_LEAK_REPORT,OPT_LEAK_REPORT_FULL, OPT_DEBUG_STDERR};
struct cli_credentials *cmdline_credentials = NULL;
@@ -49,6 +49,14 @@ static void popt_common_callback(poptContext con,
{
const char *pname;
+ if (reason == POPT_CALLBACK_REASON_POST) {
+ /* Hook any 'every Samba program must do this, after
+ * the smb.conf is setup' functions here */
+ lp_load(dyn_CONFIGFILE,True,False,False);
+ load_interfaces();
+ return;
+ }
+
/* Find out basename of current program */
pname = strrchr_m(poptGetInvocationName(con),'/');
@@ -58,9 +66,7 @@ static void popt_common_callback(poptContext con,
pname++;
if (reason == POPT_CALLBACK_REASON_PRE) {
- char *logfile = talloc_asprintf(NULL, "%s/log.%s", dyn_LOGFILEBASE, pname);
- lp_set_cmdline("log file", logfile);
- talloc_free(logfile);
+ setup_logging(pname, DEBUG_STDOUT);
return;
}
@@ -69,6 +75,10 @@ static void popt_common_callback(poptContext con,
lp_set_cmdline("log level", arg);
break;
+ case OPT_DEBUG_STDERR:
+ setup_logging(pname, DEBUG_STDERR);
+ break;
+
case 'V':
printf( "Version %s\n", SAMBA_VERSION_STRING );
exit(0);
@@ -128,6 +138,7 @@ static void popt_common_callback(poptContext con,
case OPT_LEAK_REPORT_FULL:
talloc_enable_leak_report_full();
break;
+
}
}
@@ -143,8 +154,9 @@ struct poptOption popt_common_connection[] = {
};
struct poptOption popt_common_samba[] = {
- { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, popt_common_callback },
+ { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE|POPT_CBFLAG_POST, popt_common_callback },
{ "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Set debug level", "DEBUGLEVEL" },
+ { "debug-stderr", 0, POPT_ARG_NONE, NULL, OPT_DEBUG_STDERR, "Send debug output to STDERR", NULL },
{ "configfile", 's', POPT_ARG_STRING, NULL, 's', "Use alternative configuration file", "CONFIGFILE" },
{ "option", 0, POPT_ARG_STRING, NULL, OPT_OPTION, "Set smb.conf option from command line", "name=value" },
{ "log-basename", 'l', POPT_ARG_STRING, NULL, 'l', "Basename for log/debug files", "LOGFILEBASE" },
diff --git a/source4/lib/debug.c b/source4/lib/debug.c
index ab012a98aa..a775c46854 100644
--- a/source4/lib/debug.c
+++ b/source4/lib/debug.c
@@ -74,8 +74,6 @@ void reopen_logs(void)
char *fname = NULL;
int old_fd = state.fd;
- state.fd = 0;
-
switch (state.logtype) {
case DEBUG_STDOUT:
state.fd = 1;
@@ -89,12 +87,20 @@ void reopen_logs(void)
if ((*logfile) == '/') {
fname = strdup(logfile);
} else {
- asprintf(&fname, "%s/%s.log", dyn_LOGFILEBASE, logfile);
+ asprintf(&fname, "%s/%s.log", dyn_LOGFILEBASE, state.prog_name);
}
if (fname) {
- state.fd = open(fname, O_CREAT|O_APPEND|O_WRONLY, 0644);
+ int newfd = open(fname, O_CREAT|O_APPEND|O_WRONLY, 0600);
+ if (newfd == -1) {
+ DEBUG(1, ("Failed to open new logfile: %s\n", fname));
+ } else {
+ state.fd = newfd;
+ }
free(fname);
+ } else {
+ DEBUG(1, ("Failed to find name for file-based logfile!\n"));
}
+
break;
}
@@ -109,8 +115,12 @@ void reopen_logs(void)
*/
void setup_logging(const char *prog_name, enum debug_logtype new_logtype)
{
- state.logtype = new_logtype;
- state.prog_name = prog_name;
+ if (state.logtype < new_logtype) {
+ state.logtype = new_logtype;
+ }
+ if (prog_name) {
+ state.prog_name = prog_name;
+ }
reopen_logs();
}
diff --git a/source4/lib/registry/tools/regdiff.c b/source4/lib/registry/tools/regdiff.c
index 4260a56142..f86c0ae383 100644
--- a/source4/lib/registry/tools/regdiff.c
+++ b/source4/lib/registry/tools/regdiff.c
@@ -121,21 +121,18 @@ static void writediff(struct registry_key *oldkey, struct registry_key *newkey,
WERROR error, error2;
struct poptOption long_options[] = {
POPT_AUTOHELP
- POPT_COMMON_CREDENTIALS
{"output", 'o', POPT_ARG_STRING, &outputfile, 'o', "output file to use", NULL },
{"null", 'n', POPT_ARG_NONE, &from_null, 'n', "Diff from NULL", NULL },
{"remote", 'R', POPT_ARG_STRING, NULL, 0, "Connect to remote server" , NULL },
{"local", 'L', POPT_ARG_NONE, NULL, 0, "Open local registry", NULL },
+ POPT_COMMON_SAMBA
+ POPT_COMMON_CREDENTIALS
+ POPT_COMMON_VERSION
POPT_TABLEEND
};
regdiff_init_subsystems;
- if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
- fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
- }
-
-
pc = poptGetContext(argv[0], argc, (const char **) argv, long_options,0);
while((opt = poptGetNextOpt(pc)) != -1) {
@@ -157,7 +154,6 @@ static void writediff(struct registry_key *oldkey, struct registry_key *newkey,
return 1;
}
}
- setup_logging(argv[0], DEBUG_STDOUT);
poptFreeContext(pc);
diff --git a/source4/lib/registry/tools/regpatch.c b/source4/lib/registry/tools/regpatch.c
index 5c9851b71b..02ef4d4655 100644
--- a/source4/lib/registry/tools/regpatch.c
+++ b/source4/lib/registry/tools/regpatch.c
@@ -749,25 +749,19 @@ static int nt_apply_reg_command_file(struct registry_context *r, const char *cmd
WERROR error;
struct poptOption long_options[] = {
POPT_AUTOHELP
- POPT_COMMON_CREDENTIALS
{"remote", 'R', POPT_ARG_STRING, &remote, 0, "connect to specified remote server", NULL},
+ POPT_COMMON_SAMBA
+ POPT_COMMON_CREDENTIALS
POPT_TABLEEND
};
regpatch_init_subsystems;
- if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
- fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
- }
-
-
pc = poptGetContext(argv[0], argc, (const char **) argv, long_options,0);
while((opt = poptGetNextOpt(pc)) != -1) {
}
- setup_logging(argv[0], DEBUG_STDOUT);
-
if (remote) {
error = reg_open_remote (&h, cmdline_credentials, remote);
} else {
diff --git a/source4/lib/registry/tools/regshell.c b/source4/lib/registry/tools/regshell.c
index 03cb09c443..0c53f737b8 100644
--- a/source4/lib/registry/tools/regshell.c
+++ b/source4/lib/registry/tools/regshell.c
@@ -374,26 +374,21 @@ static char **reg_completion(const char *text, int start, int end)
struct registry_context *h = NULL;
struct poptOption long_options[] = {
POPT_AUTOHELP
- POPT_COMMON_CREDENTIALS
{"backend", 'b', POPT_ARG_STRING, &backend, 0, "backend to use", NULL},
{"remote", 'R', POPT_ARG_STRING, &remote, 0, "connect to specified remote server", NULL},
+ POPT_COMMON_SAMBA
+ POPT_COMMON_CREDENTIALS
+ POPT_COMMON_VERSION
POPT_TABLEEND
};
regshell_init_subsystems;
- if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
- fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
- }
-
-
pc = poptGetContext(argv[0], argc, (const char **) argv, long_options,0);
while((opt = poptGetNextOpt(pc)) != -1) {
}
- setup_logging("regtree", DEBUG_STDOUT);
-
if (remote) {
error = reg_open_remote (&h, cmdline_credentials, remote);
} else if (backend) {
diff --git a/source4/lib/registry/tools/regtree.c b/source4/lib/registry/tools/regtree.c
index 2cf5f6ab96..f18467b523 100644
--- a/source4/lib/registry/tools/regtree.c
+++ b/source4/lib/registry/tools/regtree.c
@@ -82,28 +82,22 @@ static void print_tree(int l, struct registry_key *p, int fullpath, int novals)
int fullpath = 0, no_values = 0;
struct poptOption long_options[] = {
POPT_AUTOHELP
- POPT_COMMON_CREDENTIALS
{"backend", 'b', POPT_ARG_STRING, &backend, 0, "backend to use", NULL},
{"fullpath", 'f', POPT_ARG_NONE, &fullpath, 0, "show full paths", NULL},
{"remote", 'R', POPT_ARG_STRING, &remote, 0, "connect to specified remote server", NULL },
{"no-values", 'V', POPT_ARG_NONE, &no_values, 0, "don't show values", NULL},
+ POPT_COMMON_SAMBA
+ POPT_COMMON_CREDENTIALS
POPT_TABLEEND
};
regtree_init_subsystems;
- if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
- fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
- }
-
-
pc = poptGetContext(argv[0], argc, (const char **) argv, long_options,0);
while((opt = poptGetNextOpt(pc)) != -1) {
}
- setup_logging("regtree", DEBUG_STDOUT);
-
if (remote) {
error = reg_open_remote(&h, cmdline_credentials, remote);
} else if (backend) {
diff --git a/source4/smbd/server.c b/source4/smbd/server.c
index a08202baab..717de0c523 100644
--- a/source4/smbd/server.c
+++ b/source4/smbd/server.c
@@ -163,13 +163,13 @@ static int binary_smbd_main(int argc, const char *argv[])
int max_runtime = 0;
struct poptOption long_options[] = {
POPT_AUTOHELP
- POPT_COMMON_SAMBA
{"interactive", 'i', POPT_ARG_VAL, &interactive, True,
"Run interactive (not a daemon)", NULL},
{"model", 'M', POPT_ARG_STRING, &model, True,
"Select process model", "MODEL"},
{"maximum-runtime", 0, POPT_ARG_INT, &max_runtime, True,
"set maximum time for smbd to live", "seconds"},
+ POPT_COMMON_SAMBA
POPT_COMMON_VERSION
POPT_TABLEEND
};
@@ -180,15 +180,13 @@ static int binary_smbd_main(int argc, const char *argv[])
poptFreeContext(pc);
- setup_logging(argv[0], interactive?DEBUG_STDOUT:DEBUG_FILE);
+ setup_logging(NULL, interactive?DEBUG_STDOUT:DEBUG_FILE);
setup_signals();
/* we want total control over the permissions on created files,
so set our umask to 0 */
umask(0);
- reopen_logs();
-
DEBUG(0,("smbd version %s started.\n", SAMBA_VERSION_STRING));
DEBUGADD(0,("Copyright Andrew Tridgell and the Samba Team 1992-2005\n"));
@@ -197,11 +195,6 @@ static int binary_smbd_main(int argc, const char *argv[])
exit(1);
}
- lp_load(dyn_CONFIGFILE, False, False, True);
-
- reopen_logs();
- load_interfaces();
-
if (!interactive) {
DEBUG(3,("Becoming a daemon.\n"));
become_daemon(True);
diff --git a/source4/torture/smbiconv.c b/source4/torture/smbiconv.c
index 7ca6bb1c12..0cd16278ee 100644
--- a/source4/torture/smbiconv.c
+++ b/source4/torture/smbiconv.c
@@ -195,10 +195,6 @@ int main(int argc, char *argv[])
while(poptGetNextOpt(pc) != -1);
- /* the following functions are part of the Samba debugging
- facilities. See lib/debug.c */
- setup_logging("smbiconv", DEBUG_STDOUT);
-
if (preload_modules[0]) smb_load_modules(preload_modules);
if(output) {
diff --git a/source4/torture/torture.c b/source4/torture/torture.c
index 98519a3797..a2ca9fc72f 100644
--- a/source4/torture/torture.c
+++ b/source4/torture/torture.c
@@ -2558,8 +2558,6 @@ static void max_runtime_handler(int sig)
POPT_TABLEEND
};
- setup_logging("smbtorture", DEBUG_STDOUT);
-
#ifdef HAVE_SETBUFFER
setbuffer(stdout, NULL, 0);
#endif
@@ -2604,9 +2602,6 @@ static void max_runtime_handler(int sig)
alarm(max_runtime);
}
- lp_load(dyn_CONFIGFILE,True,False,False);
- load_interfaces();
-
smbtorture_init_subsystems;
diff --git a/source4/utils/ndrdump.c b/source4/utils/ndrdump.c
index eabeaad537..58cdeb13c3 100644
--- a/source4/utils/ndrdump.c
+++ b/source4/utils/ndrdump.c
@@ -121,8 +121,6 @@ static char *stdin_load(TALLOC_CTX *mem_ctx, size_t *size)
POPT_TABLEEND
};
- setup_logging("ndrdump", DEBUG_STDOUT);
-
ndrdump_init_subsystems;
pc = poptGetContext("ndrdump", argc, argv, long_options, 0);
diff --git a/source4/utils/net/net.c b/source4/utils/net/net.c
index c7c6f7dec9..51b860234d 100644
--- a/source4/utils/net/net.c
+++ b/source4/utils/net/net.c
@@ -154,14 +154,12 @@ static int binary_net(int argc, const char **argv)
POPT_TABLEEND
};
- setup_logging("net", DEBUG_STDOUT);
-
#ifdef HAVE_SETBUFFER
setbuffer(stdout, NULL, 0);
#endif
pc = poptGetContext("net", argc, (const char **) argv, long_options,
- POPT_CONTEXT_KEEP_FIRST);
+ POPT_CONTEXT_KEEP_FIRST);
while((opt = poptGetNextOpt(pc)) != -1) {
switch (opt) {
@@ -173,9 +171,6 @@ static int binary_net(int argc, const char **argv)
}
}
- lp_load(dyn_CONFIGFILE,True,False,False);
- load_interfaces();
-
argv_new = (const char **)poptGetArgs(pc);
argc_new = argc;
diff --git a/source4/utils/nmblookup.c b/source4/utils/nmblookup.c
index fb21cb5529..900d55d6df 100644
--- a/source4/utils/nmblookup.c
+++ b/source4/utils/nmblookup.c
@@ -271,8 +271,6 @@ int main(int argc,char *argv[])
{ 0, 0, 0, 0 }
};
- setup_logging(argv[0], DEBUG_STDOUT);
-
pc = poptGetContext("nmblookup", argc, (const char **)argv, long_options,
POPT_CONTEXT_KEEP_FIRST);
@@ -288,9 +286,6 @@ int main(int argc,char *argv[])
exit(1);
}
- lp_load(dyn_CONFIGFILE,True,False,False);
- load_interfaces();
-
while (poptPeekArg(pc)) {
const char *name = poptGetArg(pc);
diff --git a/source4/utils/ntlm_auth.c b/source4/utils/ntlm_auth.c
index 4c7286a4c1..8e858e2970 100644
--- a/source4/utils/ntlm_auth.c
+++ b/source4/utils/ntlm_auth.c
@@ -865,13 +865,7 @@ enum {
/* Samba client initialisation */
- setup_logging("ntlm_auth", DEBUG_STDERR);
-
- if (!lp_load(dyn_CONFIGFILE, True, False, False)) {
- d_fprintf(stderr, "wbinfo: error opening config file %s. Error was %s\n",
- dyn_CONFIGFILE, strerror(errno));
- exit(1);
- }
+ setup_logging(NULL, DEBUG_STDERR);
/* Parse options */