diff options
author | Andreas Schneider <asn@samba.org> | 2020-08-10 15:09:54 +0200 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2021-04-28 03:43:34 +0000 |
commit | e54f5f9527a9758e094187dd0dd71bc324fb63b4 (patch) | |
tree | a345cfc780c28ac0b8b368052774fb60fe96a5ae /lib/cmdline | |
parent | 6c812505658d92c8d0fbed6cedc5d6520cbed627 (diff) | |
download | samba-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.c | 7 | ||||
-rw-r--r-- | lib/cmdline/cmdline_private.h | 14 | ||||
-rw-r--r-- | lib/cmdline/cmdline_s3.c | 41 | ||||
-rw-r--r-- | lib/cmdline/cmdline_s4.c | 35 |
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; } |