Add more options to popt_common and use them. Current ones are:
authorJelmer Vernooij <jelmer@samba.org>
Sat, 2 Nov 2002 16:16:15 +0000 (16:16 +0000)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 2 Nov 2002 16:16:15 +0000 (16:16 +0000)
 -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

source/include/smb.h
source/lib/popt_common.c
source/nmbd/nmbd.c

index eb5bd34378ebb5e4e4f66f032b01c3975840fedd..6bf462d8a269f4676c8da8af78467b6c80b80f63 100644 (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);
index 21ee94d2e6cb6eabb1c2a0be8fcbcbe70fe804b0..0fb8874f955548786f3abcadc553a641696b61d5 100644 (file)
 #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 }
+};
index 7aa4479c0f8e5863150ad2d7a58c8ab447d4cd22..29caa64abc4453a06a6e805eb09cda044482f2b8 100644 (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();