diff options
-rw-r--r-- | source3/include/smb.h | 3 | ||||
-rw-r--r-- | source3/lib/popt_common.c | 59 | ||||
-rw-r--r-- | source3/nmbd/nmbd.c | 28 |
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(); |