summaryrefslogtreecommitdiff
path: root/lib/cmdline
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2020-08-10 15:09:54 +0200
committerAndrew Bartlett <abartlet@samba.org>2021-04-28 03:43:34 +0000
commite54f5f9527a9758e094187dd0dd71bc324fb63b4 (patch)
treea345cfc780c28ac0b8b368052774fb60fe96a5ae /lib/cmdline
parent6c812505658d92c8d0fbed6cedc5d6520cbed627 (diff)
downloadsamba-e54f5f9527a9758e094187dd0dd71bc324fb63b4.tar.gz
lib:cmdline: Add callback for loading the config file
Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'lib/cmdline')
-rw-r--r--lib/cmdline/cmdline.c7
-rw-r--r--lib/cmdline/cmdline_private.h14
-rw-r--r--lib/cmdline/cmdline_s3.c41
-rw-r--r--lib/cmdline/cmdline_s4.c35
4 files changed, 97 insertions, 0 deletions
diff --git a/lib/cmdline/cmdline.c b/lib/cmdline/cmdline.c
index 9623a9c10b7..8ca43571f5e 100644
--- a/lib/cmdline/cmdline.c
+++ b/lib/cmdline/cmdline.c
@@ -22,6 +22,7 @@
static TALLOC_CTX *cmdline_mem_ctx;
static struct loadparm_context *cmdline_lp_ctx;
static struct cli_credentials *cmdline_creds;
+static samba_cmdline_load_config cmdline_load_config_fn;
/* PRIVATE */
bool samba_cmdline_set_talloc_ctx(TALLOC_CTX *mem_ctx)
@@ -67,6 +68,12 @@ bool samba_cmdline_init_common(TALLOC_CTX *mem_ctx)
return true;
}
+bool samba_cmdline_set_load_config_fn(samba_cmdline_load_config fn)
+{
+ cmdline_load_config_fn = fn;
+ return true;
+}
+
/* PUBLIC */
bool samba_cmdline_set_lp_ctx(struct loadparm_context *lp_ctx)
{
diff --git a/lib/cmdline/cmdline_private.h b/lib/cmdline/cmdline_private.h
index 7a1f5824b5e..57816359777 100644
--- a/lib/cmdline/cmdline_private.h
+++ b/lib/cmdline/cmdline_private.h
@@ -20,6 +20,8 @@
#include "lib/cmdline/cmdline.h"
+typedef bool (*samba_cmdline_load_config)(void);
+
/**
* @internal
*
@@ -41,6 +43,18 @@
bool samba_cmdline_init_common(TALLOC_CTX *mem_ctx);
/**
+ * @brief Set the callback for loading the smb.conf file.
+ *
+ * This is needed as sourc3 and source4 have different code for loading the
+ * smb.conf file.
+ *
+ * @param[in] fn The callback to load the smb.conf file.
+ *
+ * @return true on success, false if an error occured.
+ */
+bool samba_cmdline_set_load_config_fn(samba_cmdline_load_config fn);
+
+/**
* @internal
*
* @brief Set the talloc context for the command line interface.
diff --git a/lib/cmdline/cmdline_s3.c b/lib/cmdline/cmdline_s3.c
index 5dcf1ef8e12..77d2818f453 100644
--- a/lib/cmdline/cmdline_s3.c
+++ b/lib/cmdline/cmdline_s3.c
@@ -21,11 +21,50 @@
#include "lib/util/debug.h"
#include "lib/util/fault.h"
#include "source3/param/loadparm.h"
+#include "source3/lib/interface.h"
#include "auth/credentials/credentials.h"
+#include "dynconfig/dynconfig.h"
#include "cmdline_private.h"
static bool _require_smbconf;
+static bool _samba_cmdline_load_config_s3(void)
+{
+ struct loadparm_context *lp_ctx = samba_cmdline_get_lp_ctx();
+ const char *config_file = NULL;
+ bool ok;
+
+ /* Load smb conf */
+ config_file = lpcfg_configfile(lp_ctx);
+ if (config_file == NULL) {
+ if (is_default_dyn_CONFIGFILE()) {
+ const char *env = getenv("SMB_CONF_PATH");
+ if (env != NULL && strlen(env) > 0) {
+ set_dyn_CONFIGFILE(env);
+ }
+ }
+ }
+
+ /*
+ * Load load smb.conf from getenv("SMB_CONF_PATH") default
+ * location.
+ */
+ ok = lp_load_client(lp_default_path());
+ if (!ok) {
+ fprintf(stderr,
+ "Can't load %s - run testparm to debug it\n",
+ lp_default_path());
+
+ if (_require_smbconf) {
+ return false;
+ }
+ }
+
+ load_interfaces();
+
+ return true;
+}
+
bool samba_cmdline_init(TALLOC_CTX *mem_ctx, bool require_smbconf)
{
struct loadparm_context *lp_ctx = NULL;
@@ -57,5 +96,7 @@ bool samba_cmdline_init(TALLOC_CTX *mem_ctx, bool require_smbconf)
return false;
}
+ samba_cmdline_set_load_config_fn(_samba_cmdline_load_config_s3);
+
return true;
}
diff --git a/lib/cmdline/cmdline_s4.c b/lib/cmdline/cmdline_s4.c
index 938a83bca58..cf55cce1904 100644
--- a/lib/cmdline/cmdline_s4.c
+++ b/lib/cmdline/cmdline_s4.c
@@ -21,10 +21,43 @@
#include "lib/util/debug.h"
#include "lib/util/fault.h"
#include "auth/credentials/credentials.h"
+#include "dynconfig/dynconfig.h"
#include "cmdline_private.h"
static bool _require_smbconf;
+static bool _samba_cmdline_load_config_s4(void)
+{
+ struct loadparm_context *lp_ctx = samba_cmdline_get_lp_ctx();
+ const char *config_file = NULL;
+ bool ok;
+
+ /* Load smb conf */
+ config_file = lpcfg_configfile(lp_ctx);
+ if (config_file == NULL) {
+ if (is_default_dyn_CONFIGFILE()) {
+ const char *env = getenv("SMB_CONF_PATH");
+ if (env != NULL && strlen(env) > 0) {
+ set_dyn_CONFIGFILE(env);
+ }
+ }
+ }
+
+ config_file = get_dyn_CONFIGFILE();
+ ok = lpcfg_load(lp_ctx, config_file);
+ if (!ok) {
+ fprintf(stderr,
+ "Can't load %s - run testparm to debug it\n",
+ config_file);
+
+ if (_require_smbconf) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
bool samba_cmdline_init(TALLOC_CTX *mem_ctx, bool require_smbconf)
{
struct loadparm_context *lp_ctx = NULL;
@@ -56,5 +89,7 @@ bool samba_cmdline_init(TALLOC_CTX *mem_ctx, bool require_smbconf)
return false;
}
+ samba_cmdline_set_load_config_fn(_samba_cmdline_load_config_s4);
+
return true;
}