summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/smb.h3
-rw-r--r--source3/lib/popt_common.c59
-rw-r--r--source3/nmbd/nmbd.c28
3 files changed, 62 insertions, 28 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h
index eb5bd34378..6bf462d8a2 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -1697,6 +1697,9 @@ typedef struct {
extern struct poptOption popt_common_debug[];
extern struct poptOption popt_common_configfile[];
extern struct poptOption popt_common_socket_options[];
+extern struct poptOption popt_common_version[];
+extern struct poptOption popt_common_netbios_name[];
+extern struct poptOption popt_common_log_base[];
/* Module support */
typedef NTSTATUS (init_module_function) (void);
diff --git a/source3/lib/popt_common.c b/source3/lib/popt_common.c
index 21ee94d2e6..0fb8874f95 100644
--- a/source3/lib/popt_common.c
+++ b/source3/lib/popt_common.c
@@ -23,9 +23,12 @@
#include "includes.h"
/* Handle command line options:
- * -d,--debuglevel
- * -s,--configfile
- * -O,--socket-options
+ * d,--debuglevel
+ * s,--configfile
+ * O,--socket-options
+ * V,--version
+ * l,--log-base
+ * n,--netbios-name
*/
extern pstring user_socket_options;
@@ -37,6 +40,22 @@ static void popt_common_callback(poptContext con,
const struct poptOption *opt,
const char *arg, const void *data)
{
+ pstring logfile;
+ char *pname;
+
+ /* Find out basename of current program */
+ pname = strrchr_m(poptGetInvocationName(con),'/');
+
+ if(!pname)pname = poptGetInvocationName(con);
+ else pname++;
+
+ if (reason == POPT_CALLBACK_REASON_PRE) {
+ pstring logfile;
+ pstr_sprintf(logfile, "%s/log.%s", dyn_LOGFILEBASE, pname);
+ lp_set_logfile(logfile);
+ return;
+ }
+
switch(opt->val) {
case 'd':
if (arg) {
@@ -51,20 +70,40 @@ static void popt_common_callback(poptContext con,
break;
case 'O':
- pstrcpy(user_socket_options,arg);
+ if (arg) {
+ pstrcpy(user_socket_options,arg);
+ }
break;
case 's':
- pstrcpy(dyn_CONFIGFILE, arg);
+ if (arg) {
+ pstrcpy(dyn_CONFIGFILE, arg);
+ }
break;
case 'n':
- pstrcpy(global_myname,arg);
- strupper(global_myname);
+ if (arg) {
+ pstrcpy(global_myname,arg);
+ strupper(global_myname);
+ }
+ break;
+
+ case 'l':
+ if (arg) {
+ pstr_sprintf(logfile, "%s/log.%s", arg, pname);
+ lp_set_logfile(logfile);
+ }
break;
}
}
+static void popt_common_init_log(poptContext con,
+ enum poptCallbackReason reason,
+ const struct poptOption *opt,
+ const char *arg, const void *data)
+{
+}
+
struct poptOption popt_common_debug[] = {
{ NULL, 0, POPT_ARG_CALLBACK, popt_common_callback },
{ "debuglevel", 'd', POPT_ARG_STRING, NULL, 'd', "Set debug level",
@@ -95,3 +134,9 @@ struct poptOption popt_common_netbios_name[] = {
{"netbiosname", 'n', POPT_ARG_STRING, NULL, 'n', "Primary netbios name"},
{ 0 }
};
+
+struct poptOption popt_common_log_base[] = {
+ { NULL, 0, POPT_ARG_CALLBACK|POPT_CBFLAG_PRE, popt_common_callback },
+ { "log-basename", 'l', POPT_ARG_STRING, NULL, 'l', "Basename for log/debug files"},
+ { 0 }
+};
diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c
index 7aa4479c0f..29caa64abc 100644
--- a/source3/nmbd/nmbd.c
+++ b/source3/nmbd/nmbd.c
@@ -675,15 +675,12 @@ static BOOL init_structs(void)
{"port", 'p', POPT_ARG_INT, &global_nmb_port, NMB_PORT, "Listen on the specified port" },
{NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_debug },
{NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_configfile },
- /* Various obsolete options */
- {NULL, 'N', POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN },
- {NULL, 'B', POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN },
- {NULL, 'I', POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN },
- {NULL, 'C', POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN },
- {NULL, 'G', POPT_ARG_NONE | POPT_ARGFLAG_DOC_HIDDEN },
+ {NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_socket_options },
+ {NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_version },
+ {NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_netbios_name },
+ {NULL, 0, POPT_ARG_INCLUDE_TABLE, popt_common_log_base },
{ NULL }
};
- extern BOOL append_log;
int opt;
pstring logfile;
@@ -719,24 +716,13 @@ static BOOL init_structs(void)
#if defined(SIGUSR2)
BlockSignals(True, SIGUSR2);
#endif
- pc = poptGetContext(argv[0], argc, argv, long_options, 0);
+ pc = poptGetContext("nmbd", argc, argv, long_options, 0);
while((opt = poptGetNextOpt(pc)) != -1)
- {
- switch (opt)
- {
- case 'N':
- case 'B':
- case 'I':
- case 'C':
- case 'G':
- DEBUG(0,("Obsolete option '%c' used\n",opt));
- break;
- }
- }
+ { }
poptFreeContext(pc);
-
+
setup_logging( argv[0], opt_interactive );
reopen_logs();