1
0
mirror of https://github.com/samba-team/samba.git synced 2025-12-21 20:23:50 +03:00

Add more options to popt_common and use them. Current ones are:

-V Version information
 -n Set netbios name
 -l Set directory to store log files in
 -d Set debuglevel
 -s Load specified configuration file
 -O Set socket options
This commit is contained in:
Jelmer Vernooij
-
parent 5c6041f713
commit 1602d58949
3 changed files with 62 additions and 28 deletions

View File

@@ -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);

View File

@@ -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 }
};

View File

@@ -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();