s3:popt_common: let POPT_COMMON_CREDENTIALS imply logfile and conffile loading
authorStefan Metzmacher <metze@samba.org>
Fri, 9 Dec 2016 15:04:38 +0000 (16:04 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Tue, 20 Dec 2016 00:11:25 +0000 (01:11 +0100)
All users of POPT_COMMON_CREDENTIALS basically need the same logic,
while some ignore a broken smb.conf and some complain about it.

This will allow the future usage of config options in the
credential post processing.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/client/client.c
source3/include/popt_common.h
source3/lib/popt_common.c
source3/rpcclient/rpcclient.c
source3/utils/regedit.c
source3/utils/smbcacls.c
source3/utils/smbcquotas.c
source3/utils/smbtree.c

index 82521288be985e333f0cdc850b2d9b727ad40d7f..cde9776db9a29c560508dab42e977a2fa4ff546c 100644 (file)
@@ -5765,6 +5765,7 @@ int main(int argc,char *argv[])
 
        lp_set_cmdline("log level", "1");
 
+       popt_common_credentials_set_ignore_missing_conf();
        popt_common_credentials_set_delay_post();
 
        /* skip argv(0) */
@@ -5901,16 +5902,6 @@ int main(int argc,char *argv[])
                                               poptGetArg(pc));
        }
 
-       if ( override_logfile )
-               setup_logging( lp_logfile(talloc_tos()), DEBUG_FILE );
-
-       if (!lp_load_client(get_dyn_CONFIGFILE())) {
-               fprintf(stderr, "%s: Can't load %s - run testparm to debug it\n",
-                       argv[0], get_dyn_CONFIGFILE());
-       }
-
-       load_interfaces();
-
        if (service_opt && service) {
                size_t len;
 
index ec7568c9fc3622073678fdcdff0cd3a96011b140..2abfa04095c3b672899e839aa1f9eebd934687a7 100644 (file)
@@ -50,6 +50,7 @@ extern const struct poptOption popt_common_dynconfig[];
 
 extern struct user_auth_info *cmdline_auth_info;
 
+void popt_common_credentials_set_ignore_missing_conf(void);
 void popt_common_credentials_set_delay_post(void);
 void popt_common_credentials_post(void);
 void popt_burn_cmdline_password(int argc, char *argv[]);
index b2fd39c56b48b15de6f9593c7e88ee0a8c4eadd4..e229ad2ec715cc83e4ae5fa07e2451e551229fb7 100644 (file)
@@ -348,8 +348,14 @@ static void get_credentials_file(struct user_auth_info *auth_info,
  */
 
 struct user_auth_info *cmdline_auth_info;
+static bool popt_common_credentials_ignore_missing_conf;
 static bool popt_common_credentials_delay_post;
 
+void popt_common_credentials_set_ignore_missing_conf(void)
+{
+       popt_common_credentials_delay_post = true;
+}
+
 void popt_common_credentials_set_delay_post(void)
 {
        popt_common_credentials_delay_post = true;
@@ -412,6 +418,25 @@ static void popt_common_credentials_callback(poptContext con,
        }
 
        if (reason == POPT_CALLBACK_REASON_POST) {
+               bool ok;
+
+               if (override_logfile) {
+                       setup_logging(lp_logfile(talloc_tos()), DEBUG_FILE );
+               }
+
+               ok = lp_load_client(get_dyn_CONFIGFILE());
+               if (!ok) {
+                       const char *pname = poptGetInvocationName(con);
+
+                       fprintf(stderr, "%s: Can't load %s - run testparm to debug it\n",
+                               pname, get_dyn_CONFIGFILE());
+                       if (!popt_common_credentials_ignore_missing_conf) {
+                               exit(1);
+                       }
+               }
+
+               load_interfaces();
+
                if (popt_common_credentials_delay_post) {
                        return;
                }
index 138fdba0b52943757e5a8f41beaa01868db43613..9faf01b089094ad9b3d8eb60229014a53741f440 100644 (file)
@@ -949,7 +949,6 @@ out_free:
        char *user, *domain, *q;
        const char *host;
        int signing_state = SMB_SIGNING_IPC_DEFAULT;
-       bool ok;
 
        /* make sure the vars that get altered (4th field) are in
           a fixed location or certain compilers complain */
@@ -1016,17 +1015,6 @@ out_free:
        popt_burn_cmdline_password(argc, argv);
        rpcclient_auth_info = cmdline_auth_info;
 
-       /* Load smb.conf file */
-
-       ok = lp_load_global(get_dyn_CONFIGFILE());
-       if (!ok) {
-               fprintf(stderr,
-                       "Can't load %s - run testparm to debug it\n",
-                       get_dyn_CONFIGFILE());
-               result = 1;
-               goto done;
-       }
-
        nt_status = messaging_init_client(talloc_autofree_context(),
                                          samba_tevent_context_init(talloc_autofree_context()),
                                          &rpcclient_msg_ctx);
@@ -1045,9 +1033,6 @@ out_free:
                goto done;
        }
 
-       /* We must load interfaces after we load the smb.conf */
-       load_interfaces();
-
        if (!init_names()) {
                result = 1;
                goto done;
index 476897f4e780b23de3e9fc4320c7e9428ef8dd3b..14e75c25bfaafa7e72a35a1f3002828ef22d308e 100644 (file)
@@ -781,11 +781,6 @@ int main(int argc, const char **argv)
                /* TODO */
        }
 
-       if (!lp_load_global(get_dyn_CONFIGFILE())) {
-               DEBUG(0, ("ERROR loading config file...\n"));
-               exit(1);
-       }
-
        rv = reg_open_samba3(frame, &ctx);
        if (!W_ERROR_IS_OK(rv)) {
                fprintf(stderr, "Unable to open registry: %s\n",
index 7705eb4c9f2e9e4481cf3fe05239e492518bc401..255ff9729b77da352305758603ee8a954b7acf5c 100644 (file)
@@ -831,6 +831,8 @@ int main(int argc, char *argv[])
 
        setlinebuf(stdout);
 
+       popt_common_credentials_set_ignore_missing_conf();
+
        pc = poptGetContext("smbcacls", argc, argv_const, long_options, 0);
 
        poptSetOtherOptionHelp(pc, "//server1/share1 filename\nACLs look like: "
@@ -894,9 +896,6 @@ int main(int argc, char *argv[])
                return -1;
        }
 
-       lp_load_global(get_dyn_CONFIGFILE());
-       load_interfaces();
-
        filename = talloc_strdup(frame, poptGetArg(pc));
        if (!filename) {
                return -1;
index ba80926580a779e1ee3a3d8f17b272ae0d1c7280..a1cf70a1935f190db513e8049b50eecbfd6666ca 100644 (file)
@@ -575,7 +575,6 @@ int main(int argc, char *argv[])
        static bool test_args = False;
        struct cli_state *cli;
        bool fix_user = False;
-       bool ok;
        SMB_NTQUOTA_STRUCT qt;
        TALLOC_CTX *frame = talloc_stackframe();
        poptContext pc;
@@ -700,17 +699,6 @@ FSQFLAGS:QUOTA_ENABLED/DENY_DISK/LOG_SOFTLIMIT/LOG_HARD_LIMIT", "SETSTRING" },
        poptFreeContext(pc);
        popt_burn_cmdline_password(argc, argv);
 
-       ok = lp_load_global(get_dyn_CONFIGFILE());
-       if (!ok) {
-               DBG_ERR("ERROR: Loading config file %s - "
-                       "run testparm to debug it\n",
-                       get_dyn_CONFIGFILE());
-               exit(EXIT_PARSE_ERROR);
-       }
-
-       /* We must load interfaces after we load the smb.conf */
-       load_interfaces();
-
        string_replace(path, '/', '\\');
 
        server = SMB_STRDUP(path+2);
index 2f11dced12e667b8894f3136f8ffe7d9537644f5..ba7b3182b645ad9c6a6dd6fb2f99b41c978ef98d 100644 (file)
@@ -307,15 +307,14 @@ int main(int argc, char *argv[])
 
        setup_logging(argv[0], DEBUG_STDERR);
 
+       popt_common_credentials_set_ignore_missing_conf();
+
        pc = poptGetContext("smbtree", argc, argv_const, long_options,
                            POPT_CONTEXT_KEEP_FIRST);
        while(poptGetNextOpt(pc) != -1);
        poptFreeContext(pc);
        popt_burn_cmdline_password(argc, argv);
 
-       lp_load_global(get_dyn_CONFIGFILE());
-       load_interfaces();
-
        /* Now do our stuff */
 
         if (!print_tree(cmdline_auth_info)) {