mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
s4-loadparm: added loadparm_init_global()
This ensures we use the same loadparm_context in all our command line tools. Pair-Programmed-With: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
parent
6982a00ded
commit
b20ce4392e
@ -531,6 +531,8 @@ struct loadparm_context {
|
|||||||
time_t modtime;
|
time_t modtime;
|
||||||
} *file_lists;
|
} *file_lists;
|
||||||
unsigned int flags[NUMPARAMETERS];
|
unsigned int flags[NUMPARAMETERS];
|
||||||
|
bool loaded;
|
||||||
|
bool refuse_free;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -2263,6 +2265,13 @@ static int lp_destructor(struct loadparm_context *lp_ctx)
|
|||||||
{
|
{
|
||||||
struct parmlist_entry *data;
|
struct parmlist_entry *data;
|
||||||
|
|
||||||
|
if (lp_ctx->refuse_free) {
|
||||||
|
/* someone is trying to free the
|
||||||
|
global_loadparm_context.
|
||||||
|
We can't allow that. */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (lp_ctx->globals->param_opt != NULL) {
|
if (lp_ctx->globals->param_opt != NULL) {
|
||||||
struct parmlist_entry *next;
|
struct parmlist_entry *next;
|
||||||
for (data = lp_ctx->globals->param_opt; data; data=next) {
|
for (data = lp_ctx->globals->param_opt; data; data=next) {
|
||||||
@ -2278,6 +2287,8 @@ static int lp_destructor(struct loadparm_context *lp_ctx)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialise the global parameter structure.
|
* Initialise the global parameter structure.
|
||||||
|
*
|
||||||
|
* Note that most callers should use loadparm_init_global() instead
|
||||||
*/
|
*/
|
||||||
struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
|
struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
|
||||||
{
|
{
|
||||||
@ -2481,6 +2492,21 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx)
|
|||||||
return lp_ctx;
|
return lp_ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise the global parameter structure.
|
||||||
|
*/
|
||||||
|
struct loadparm_context *loadparm_init_global(bool load_default)
|
||||||
|
{
|
||||||
|
if (global_loadparm_context == NULL) {
|
||||||
|
global_loadparm_context = loadparm_init(NULL);
|
||||||
|
}
|
||||||
|
if (load_default && !global_loadparm_context->loaded) {
|
||||||
|
lpcfg_load_default(global_loadparm_context);
|
||||||
|
}
|
||||||
|
global_loadparm_context->refuse_free = true;
|
||||||
|
return global_loadparm_context;
|
||||||
|
}
|
||||||
|
|
||||||
const char *lpcfg_configfile(struct loadparm_context *lp_ctx)
|
const char *lpcfg_configfile(struct loadparm_context *lp_ctx)
|
||||||
{
|
{
|
||||||
return lp_ctx->szConfigFile;
|
return lp_ctx->szConfigFile;
|
||||||
@ -2588,6 +2614,7 @@ bool lpcfg_load(struct loadparm_context *lp_ctx, const char *filename)
|
|||||||
/* set the context used by the lp_*() function
|
/* set the context used by the lp_*() function
|
||||||
varients */
|
varients */
|
||||||
global_loadparm_context = lp_ctx;
|
global_loadparm_context = lp_ctx;
|
||||||
|
lp_ctx->loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return bRetval;
|
return bRetval;
|
||||||
|
@ -175,6 +175,7 @@ void lpcfg_killunused(struct loadparm_context *lp_ctx,
|
|||||||
* Initialise the global parameter structure.
|
* Initialise the global parameter structure.
|
||||||
*/
|
*/
|
||||||
struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx);
|
struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx);
|
||||||
|
struct loadparm_context *loadparm_init_global(bool load_default);
|
||||||
const char *lpcfg_configfile(struct loadparm_context *lp_ctx);
|
const char *lpcfg_configfile(struct loadparm_context *lp_ctx);
|
||||||
bool lpcfg_load_default(struct loadparm_context *lp_ctx);
|
bool lpcfg_load_default(struct loadparm_context *lp_ctx);
|
||||||
const char *lp_default_path(void);
|
const char *lp_default_path(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user