static bool bInGlobalSection = true;
static bool bGlobalOnly = false;
static struct file_lists *file_lists = NULL;
+static unsigned int *flags_list = NULL;
static void set_allowed_client_auth(void);
return string_set(Globals.ctx, dest, src);
}
-/***************************************************************************
- Initialise the sDefault parameter structure for the printer values.
-***************************************************************************/
-
-void init_printer_values(TALLOC_CTX *ctx, struct loadparm_service *pService)
-{
- /* choose defaults depending on the type of printing */
- switch (pService->printing) {
- case PRINT_BSD:
- case PRINT_AIX:
- case PRINT_LPRNT:
- case PRINT_LPROS2:
- lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P'%p'");
- lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P'%p' %j");
- lpcfg_string_set(ctx, &pService->print_command, "lpr -r -P'%p' %s");
- break;
-
- case PRINT_LPRNG:
- case PRINT_PLP:
- lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P'%p'");
- lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P'%p' %j");
- lpcfg_string_set(ctx, &pService->print_command, "lpr -r -P'%p' %s");
- lpcfg_string_set(ctx, &pService->queuepause_command, "lpc stop '%p'");
- lpcfg_string_set(ctx, &pService->queueresume_command, "lpc start '%p'");
- lpcfg_string_set(ctx, &pService->lppause_command, "lpc hold '%p' %j");
- lpcfg_string_set(ctx, &pService->lpresume_command, "lpc release '%p' %j");
- break;
-
- case PRINT_CUPS:
- case PRINT_IPRINT:
- /* set the lpq command to contain the destination printer
- name only. This is used by cups_queue_get() */
- lpcfg_string_set(ctx, &pService->lpq_command, "%p");
- lpcfg_string_set(ctx, &pService->lprm_command, "");
- lpcfg_string_set(ctx, &pService->print_command, "");
- lpcfg_string_set(ctx, &pService->lppause_command, "");
- lpcfg_string_set(ctx, &pService->lpresume_command, "");
- lpcfg_string_set(ctx, &pService->queuepause_command, "");
- lpcfg_string_set(ctx, &pService->queueresume_command, "");
- break;
-
- case PRINT_SYSV:
- case PRINT_HPUX:
- lpcfg_string_set(ctx, &pService->lpq_command, "lpstat -o%p");
- lpcfg_string_set(ctx, &pService->lprm_command, "cancel %p-%j");
- lpcfg_string_set(ctx, &pService->print_command, "lp -c -d%p %s; rm %s");
- lpcfg_string_set(ctx, &pService->queuepause_command, "disable %p");
- lpcfg_string_set(ctx, &pService->queueresume_command, "enable %p");
-#ifndef HPUX
- lpcfg_string_set(ctx, &pService->lppause_command, "lp -i %p-%j -H hold");
- lpcfg_string_set(ctx, &pService->lpresume_command, "lp -i %p-%j -H resume");
-#endif /* HPUX */
- break;
-
- case PRINT_QNX:
- lpcfg_string_set(ctx, &pService->lpq_command, "lpq -P%p");
- lpcfg_string_set(ctx, &pService->lprm_command, "lprm -P%p %j");
- lpcfg_string_set(ctx, &pService->print_command, "lp -r -P%p %s");
- break;
-
-#if defined(DEVELOPER) || defined(ENABLE_SELFTEST)
-
- case PRINT_TEST:
- case PRINT_VLP: {
- const char *tdbfile;
- TALLOC_CTX *tmp_ctx = talloc_new(ctx);
- char *tmp;
-
- tdbfile = talloc_asprintf(
- tmp_ctx, "tdbfile=%s",
- lp_parm_const_string(-1, "vlp", "tdbfile",
- "/tmp/vlp.tdb"));
- if (tdbfile == NULL) {
- tdbfile="tdbfile=/tmp/vlp.tdb";
- }
-
- tmp = talloc_asprintf(tmp_ctx, "vlp %s print %%p %%s",
- tdbfile);
- lpcfg_string_set(ctx, &pService->print_command,
- tmp ? tmp : "vlp print %p %s");
-
- tmp = talloc_asprintf(tmp_ctx, "vlp %s lpq %%p",
- tdbfile);
- lpcfg_string_set(ctx, &pService->lpq_command,
- tmp ? tmp : "vlp lpq %p");
-
- tmp = talloc_asprintf(tmp_ctx, "vlp %s lprm %%p %%j",
- tdbfile);
- lpcfg_string_set(ctx, &pService->lprm_command,
- tmp ? tmp : "vlp lprm %p %j");
-
- tmp = talloc_asprintf(tmp_ctx, "vlp %s lppause %%p %%j",
- tdbfile);
- lpcfg_string_set(ctx, &pService->lppause_command,
- tmp ? tmp : "vlp lppause %p %j");
-
- tmp = talloc_asprintf(tmp_ctx, "vlp %s lpresume %%p %%j",
- tdbfile);
- lpcfg_string_set(ctx, &pService->lpresume_command,
- tmp ? tmp : "vlp lpresume %p %j");
-
- tmp = talloc_asprintf(tmp_ctx, "vlp %s queuepause %%p",
- tdbfile);
- lpcfg_string_set(ctx, &pService->queuepause_command,
- tmp ? tmp : "vlp queuepause %p");
-
- tmp = talloc_asprintf(tmp_ctx, "vlp %s queueresume %%p",
- tdbfile);
- lpcfg_string_set(ctx, &pService->queueresume_command,
- tmp ? tmp : "vlp queueresume %p");
- TALLOC_FREE(tmp_ctx);
-
- break;
- }
-#endif /* DEVELOPER */
-
- }
-}
/**
* Function to return the default value for the maximum number of open
* file descriptors permitted. This function tries to consult the
re-applied when we do a globals reset, so that cmdline set options
are sticky across reloads of smb.conf
*/
-static bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue)
+bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue)
{
struct lp_stored_option *entry, *entry_next;
for (entry = stored_options; entry != NULL; entry = entry_next) {
Initialise the global parameter structure.
***************************************************************************/
-static void init_globals(bool reinit_globals)
+static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals)
{
static bool done_init = false;
char *s = NULL;
Globals.ctx = talloc_pooled_object(NULL, char, 272, 2048);
+ /* Initialize the flags list if necessary */
+ if (flags_list == NULL) {
+ get_flags();
+ }
+
for (i = 0; parm_table[i].label; i++) {
if ((parm_table[i].type == P_STRING ||
parm_table[i].type == P_USTRING))
string_set(Globals.ctx, &sDefault.fstype, FSTYPE_STRING);
string_set(Globals.ctx, &sDefault.printjob_username, "%U");
- init_printer_values(Globals.ctx, &sDefault);
+ init_printer_values(lp_ctx, Globals.ctx, &sDefault);
sDefault.ntvfs_handler = (const char **)str_list_make_v3(NULL, "unixuid default", NULL);
Globals.winbind_cache_time = 300; /* 5 minutes */
Globals.winbind_reconnect_delay = 30; /* 30 seconds */
+ Globals.winbind_request_timeout = 60; /* 60 seconds */
Globals.winbind_max_clients = 200;
Globals.winbind_enum_users = false;
Globals.winbind_enum_groups = false;
apply_lp_set_cmdline();
}
+/* Convenience routine to setup an lp_context with additional s3 variables */
+static struct loadparm_context *setup_lp_context(TALLOC_CTX *mem_ctx)
+{
+ struct loadparm_context *lp_ctx;
+
+ lp_ctx = loadparm_init_s3(mem_ctx,
+ loadparm_s3_helpers());
+ if (lp_ctx == NULL) {
+ DEBUG(0, ("loadparm_init_s3 failed\n"));
+ return NULL;
+ }
+
+ lp_ctx->sDefault = &sDefault;
+ lp_ctx->services = NULL; /* We do not want to access this directly */
+ lp_ctx->bInGlobalSection = bInGlobalSection;
+ lp_ctx->flags = flags_list;
+
+ return lp_ctx;
+}
+
/*******************************************************************
Convenience routine to grab string parameters into talloced memory
and run standard_sub_basic on them. The buffers can be written to by
static const char *get_boolean(bool bool_value);
static bool do_parameter(const char *pszParmName, const char *pszParmValue,
void *userdata);
-static bool do_section(const char *pszSectionName, void *userdata);
static bool hash_a_service(const char *name, int number);
static void free_service_byindex(int iService);
static void show_parameter(int parmIndex);
return &sDefault;
}
-/***************************************************************************
-Check a service for consistency. Return false if the service is in any way
-incomplete or faulty, else true.
-***************************************************************************/
-
-bool service_ok(int iService)
-{
- bool bRetval;
-
- bRetval = true;
- if (ServicePtrs[iService]->szService[0] == '\0') {
- DEBUG(0, ("The following message indicates an internal error:\n"));
- DEBUG(0, ("No service name in service entry.\n"));
- bRetval = false;
- }
-
- /* The [printers] entry MUST be printable. I'm all for flexibility, but */
- /* I can't see why you'd want a non-printable printer service... */
- if (strwicmp(ServicePtrs[iService]->szService, PRINTERS_NAME) == 0) {
- if (!ServicePtrs[iService]->printable) {
- DEBUG(0, ("WARNING: [%s] service MUST be printable!\n",
- ServicePtrs[iService]->szService));
- ServicePtrs[iService]->printable = true;
- }
- /* [printers] service must also be non-browsable. */
- if (ServicePtrs[iService]->browseable)
- ServicePtrs[iService]->browseable = false;
- }
-
- if (ServicePtrs[iService]->path[0] == '\0' &&
- strwicmp(ServicePtrs[iService]->szService, HOMES_NAME) != 0 &&
- ServicePtrs[iService]->msdfs_proxy[0] == '\0'
- ) {
- DEBUG(0, ("WARNING: No path in service %s - making it unavailable!\n",
- ServicePtrs[iService]->szService));
- ServicePtrs[iService]->bAvailable = false;
- }
-
- /* If a service is flagged unavailable, log the fact at level 1. */
- if (!ServicePtrs[iService]->bAvailable)
- DEBUG(1, ("NOTE: Service %s is flagged unavailable.\n",
- ServicePtrs[iService]->szService));
-
- return (bRetval);
-}
-
static struct smbconf_ctx *lp_smbconf_ctx(void)
{
sbcErr err;
return false;
}
- ret = do_section(service->name, NULL);
+ ret = lp_do_section(service->name, NULL);
if (ret != true) {
return false;
}
}
}
if (iServiceIndex >= 0) {
- return service_ok(iServiceIndex);
+ return lpcfg_service_ok(ServicePtrs[iServiceIndex]);
}
return true;
}
DEBUG(6, ("lp_file_list_changed()\n"));
while (f) {
- time_t mod_time;
-
if (strequal(f->name, INCLUDE_REGISTRY_NAME)) {
struct smbconf_ctx *conf_ctx = lp_smbconf_ctx();
return true;
}
} else {
+ time_t mod_time;
char *n2 = NULL;
+
n2 = talloc_sub_basic(talloc_tos(),
get_current_username(),
current_user_info.domain,
***************************************************************************/
static bool bAllowIncludeRegistry = true;
-bool lp_include(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
+bool lp_include(struct loadparm_context *lp_ctx, struct loadparm_service *service,
+ const char *pszParmValue, char **ptr)
{
char *fname;
if (!bAllowIncludeRegistry) {
return true;
}
- if (bInGlobalSection) {
+ if (lp_ctx->bInGlobalSection) {
bool ret;
include_depth++;
ret = process_registry_globals();
add_to_file_list(NULL, &file_lists, pszParmValue, fname);
- if (snum < 0) {
+ if (service == NULL) {
string_set(Globals.ctx, ptr, fname);
} else {
- string_set(ServicePtrs[snum], ptr, fname);
+ string_set(service, ptr, fname);
}
if (file_exist(fname)) {
bool ret;
include_depth++;
- ret = pm_process(fname, do_section, do_parameter, NULL);
+ ret = pm_process(fname, lp_do_section, do_parameter, lp_ctx);
include_depth--;
TALLOC_FREE(fname);
return ret;
bool lp_do_parameter(int snum, const char *pszParmName, const char *pszParmValue)
{
- int parmnum, i;
- void *parm_ptr = NULL; /* where we are going to store the result */
- struct parmlist_entry **opt_list;
- TALLOC_CTX *mem_ctx;
TALLOC_CTX *frame = talloc_stackframe();
+ struct loadparm_context *lp_ctx;
+ bool ok;
- parmnum = lpcfg_map_parameter(pszParmName);
-
- if (parmnum < 0) {
- if (strchr(pszParmName, ':') == NULL) {
- DEBUG(0, ("Ignoring unknown parameter \"%s\"\n",
- pszParmName));
- TALLOC_FREE(frame);
- return true;
- }
-
- /*
- * We've got a parametric option
- */
-
- if (snum < 0) {
- opt_list = &Globals.param_opt;
- set_param_opt(NULL, opt_list, pszParmName, pszParmValue, 0);
- } else {
- opt_list = &ServicePtrs[snum]->param_opt;
- set_param_opt(ServicePtrs[snum], opt_list, pszParmName, pszParmValue, 0);
- }
-
- TALLOC_FREE(frame);
- return true;
- }
-
- /* if it's already been set by the command line, then we don't
- override here */
- if (parm_table[parmnum].flags & FLAG_CMDLINE) {
+ lp_ctx = setup_lp_context(frame);
+ if (lp_ctx == NULL) {
TALLOC_FREE(frame);
- return true;
- }
-
- if (parm_table[parmnum].flags & FLAG_DEPRECATED) {
- DEBUG(1, ("WARNING: The \"%s\" option is deprecated\n",
- pszParmName));
+ return false;
}
- /* we might point at a service, the default service or a global */
if (snum < 0) {
- parm_ptr = lp_parm_ptr(NULL, &parm_table[parmnum]);
+ ok = lpcfg_do_global_parameter(lp_ctx, pszParmName, pszParmValue);
} else {
- if (parm_table[parmnum].p_class == P_GLOBAL) {
- DEBUG(0,
- ("Global parameter %s found in service section!\n",
- pszParmName));
- TALLOC_FREE(frame);
- return true;
- }
- parm_ptr = lp_parm_ptr(ServicePtrs[snum], &parm_table[parmnum]);
- }
-
- if (snum >= 0) {
- if (!ServicePtrs[snum]->copymap)
- init_copymap(ServicePtrs[snum]);
-
- /* this handles the aliases - set the copymap for other entries with
- the same data pointer */
- for (i = 0; parm_table[i].label; i++) {
- if ((parm_table[i].offset == parm_table[parmnum].offset)
- && (parm_table[i].p_class == parm_table[parmnum].p_class)) {
- bitmap_clear(ServicePtrs[snum]->copymap, i);
- }
- }
- mem_ctx = ServicePtrs[snum];
- } else {
- mem_ctx = Globals.ctx;
- }
-
- /* if it is a special case then go ahead */
- if (parm_table[parmnum].special) {
- bool ok;
- struct loadparm_context *lp_ctx = loadparm_init_s3(frame,
- loadparm_s3_helpers());
- lp_ctx->sDefault = &sDefault;
- lp_ctx->services = ServicePtrs;
- ok = parm_table[parmnum].special(lp_ctx, snum, pszParmValue,
- (char **)parm_ptr);
- TALLOC_FREE(frame);
- return ok;
+ ok = lpcfg_do_service_parameter(lp_ctx, ServicePtrs[snum],
+ pszParmName, pszParmValue);
}
TALLOC_FREE(frame);
- return set_variable_helper(mem_ctx, parmnum, parm_ptr, pszParmName, pszParmValue);
+
+ return ok;
}
/***************************************************************************
int parmnum, i;
parmnum = lpcfg_map_parameter(pszParmName);
if (parmnum >= 0) {
- parm_table[parmnum].flags &= ~FLAG_CMDLINE;
+ flags_list[parmnum] &= ~FLAG_CMDLINE;
if (!lp_do_parameter(-1, pszParmName, pszParmValue)) {
return false;
}
- parm_table[parmnum].flags |= FLAG_CMDLINE;
+ flags_list[parmnum] |= FLAG_CMDLINE;
/* we have to also set FLAG_CMDLINE on aliases. Aliases must
* be grouped in the table, so we don't have to search the
i>=0 && parm_table[i].offset == parm_table[parmnum].offset
&& parm_table[i].p_class == parm_table[parmnum].p_class;
i--) {
- parm_table[i].flags |= FLAG_CMDLINE;
+ flags_list[i] |= FLAG_CMDLINE;
}
for (i=parmnum+1;i<num_parameters() && parm_table[i].offset == parm_table[parmnum].offset
&& parm_table[i].p_class == parm_table[parmnum].p_class;i++) {
- parm_table[i].flags |= FLAG_CMDLINE;
+ flags_list[i] |= FLAG_CMDLINE;
}
return true;
{
bool ret;
TALLOC_CTX *frame = talloc_stackframe();
+ struct loadparm_context *lp_ctx;
- ret = lp_set_cmdline_helper(pszParmName, pszParmValue);
- if (ret) {
- store_lp_set_cmdline(pszParmName, pszParmValue);
+ lp_ctx = setup_lp_context(frame);
+ if (lp_ctx == NULL) {
+ TALLOC_FREE(frame);
+ return false;
}
+ ret = lpcfg_set_cmdline(lp_ctx, pszParmName, pszParmValue);
+
TALLOC_FREE(frame);
return ret;
}
DEBUGADD(4, ("doing parameter %s = %s\n", pszParmName, pszParmValue));
- return (lp_do_parameter(bInGlobalSection ? -2 : iServiceIndex,
- pszParmName, pszParmValue));
+ if (bInGlobalSection) {
+ return lpcfg_do_global_parameter(userdata, pszParmName, pszParmValue);
+ } else {
+ return lpcfg_do_service_parameter(userdata, ServicePtrs[iServiceIndex],
+ pszParmName, pszParmValue);
+ }
}
/***************************************************************************
Returns true on success, false on failure.
***************************************************************************/
-static bool do_section(const char *pszSectionName, void *userdata)
+bool lp_do_section(const char *pszSectionName, void *userdata)
{
+ struct loadparm_context *lp_ctx = (struct loadparm_context *)userdata;
bool bRetval;
bool isglobal = ((strwicmp(pszSectionName, GLOBAL_NAME) == 0) ||
(strwicmp(pszSectionName, GLOBAL_NAME2) == 0));
/* if we've just struck a global section, note the fact. */
bInGlobalSection = isglobal;
+ lp_ctx->bInGlobalSection = isglobal;
/* check for multiple global sections */
if (bInGlobalSection) {
bRetval = true;
if (iServiceIndex >= 0)
- bRetval = service_ok(iServiceIndex);
+ bRetval = lpcfg_service_ok(ServicePtrs[iServiceIndex]);
/* if all is still well, move to the next record in the services array */
if (bRetval) {
return bRetval;
}
-
-/***************************************************************************
- Determine if a partcular base parameter is currentl set to the default value.
-***************************************************************************/
-
-static bool is_default(int i)
-{
- switch (parm_table[i].type) {
- case P_LIST:
- case P_CMDLIST:
- return str_list_equal((const char * const *)parm_table[i].def.lvalue,
- *(const char ***)lp_parm_ptr(NULL,
- &parm_table[i]));
- case P_STRING:
- case P_USTRING:
- return strequal(parm_table[i].def.svalue,
- *(char **)lp_parm_ptr(NULL,
- &parm_table[i]));
- case P_BOOL:
- case P_BOOLREV:
- return parm_table[i].def.bvalue ==
- *(bool *)lp_parm_ptr(NULL,
- &parm_table[i]);
- case P_CHAR:
- return parm_table[i].def.cvalue ==
- *(char *)lp_parm_ptr(NULL,
- &parm_table[i]);
- case P_INTEGER:
- case P_OCTAL:
- case P_ENUM:
- case P_BYTES:
- return parm_table[i].def.ivalue ==
- *(int *)lp_parm_ptr(NULL,
- &parm_table[i]);
- case P_SEP:
- break;
- }
- return false;
-}
-
-/***************************************************************************
-Display the contents of the global structure.
-***************************************************************************/
-
-static void dump_globals(FILE *f, bool show_defaults)
-{
- int i;
- struct parmlist_entry *data;
-
- fprintf(f, "[global]\n");
-
- for (i = 0; parm_table[i].label; i++)
- if (parm_table[i].p_class == P_GLOBAL &&
- !(parm_table[i].flags & FLAG_META) &&
- (i == 0 || (parm_table[i].offset != parm_table[i - 1].offset))) {
- if (show_defaults && is_default(i))
- continue;
- fprintf(f, "\t%s = ", parm_table[i].label);
- lpcfg_print_parameter(&parm_table[i], lp_parm_ptr(NULL,
- &parm_table[i]),
- f);
- fprintf(f, "\n");
- }
- if (Globals.param_opt != NULL) {
- data = Globals.param_opt;
- while(data) {
- fprintf(f, "\t%s = %s\n", data->key, data->value);
- data = data->next;
- }
- }
-
-}
-
-/***************************************************************************
- Display the contents of a single services record.
-***************************************************************************/
-
-static void dump_a_service(struct loadparm_service *pService, FILE * f, bool show_defaults)
-{
- return lpcfg_dump_a_service(pService, &sDefault, f, NULL, show_defaults);
-}
-
/***************************************************************************
Display the contents of a parameter of a single services record.
***************************************************************************/
bool dump_a_parameter(int snum, char *parm_name, FILE * f, bool isGlobal)
{
bool result = false;
-
struct loadparm_context *lp_ctx;
- lp_ctx = loadparm_init_s3(talloc_tos(), loadparm_s3_helpers());
+ lp_ctx = setup_lp_context(talloc_tos());
if (lp_ctx == NULL) {
return false;
}
return result;
}
-/***************************************************************************
- Return info about the requested parameter (given as a string).
- Return NULL when the string is not a valid parameter name.
-***************************************************************************/
-
-struct parm_struct *lp_get_parameter(const char *param_name)
-{
- int num = lpcfg_map_parameter(param_name);
-
- if (num < 0) {
- return NULL;
- }
-
- return &parm_table[num];
-}
-
#if 0
/***************************************************************************
Display the contents of a single copy structure.
static void lp_save_defaults(void)
{
int i;
+ struct parmlist_entry * parm;
for (i = 0; parm_table[i].label; i++) {
+ if (!(flags_list[i] & FLAG_CMDLINE)) {
+ flags_list[i] |= FLAG_DEFAULT;
+ }
+
if (i > 0 && parm_table[i].offset == parm_table[i - 1].offset
&& parm_table[i].p_class == parm_table[i - 1].p_class)
continue;
break;
}
}
+
+ for (parm=Globals.param_opt; parm; parm=parm->next) {
+ if (!(parm->priority & FLAG_CMDLINE)) {
+ parm->priority |= FLAG_DEFAULT;
+ }
+ }
+
+ for (parm=sDefault.param_opt; parm; parm=parm->next) {
+ if (!(parm->priority & FLAG_CMDLINE)) {
+ parm->priority |= FLAG_DEFAULT;
+ }
+ }
+
defaults_saved = true;
}
char *n2 = NULL;
bool bRetval;
TALLOC_CTX *frame = talloc_stackframe();
+ struct loadparm_context *lp_ctx;
bRetval = false;
bGlobalOnly = global_only;
bAllowIncludeRegistry = allow_include_registry;
- init_globals(initialize_globals);
+ lp_ctx = setup_lp_context(talloc_tos());
+
+ init_globals(lp_ctx, initialize_globals);
free_file_list();
add_to_file_list(NULL, &file_lists, pszFname, n2);
- bRetval = pm_process(n2, do_section, do_parameter, NULL);
+ bRetval = pm_process(n2, lp_do_section, do_parameter, lp_ctx);
TALLOC_FREE(n2);
/* finish up the last section */
DEBUG(4, ("pm_process() returned %s\n", BOOLSTR(bRetval)));
if (bRetval) {
if (iServiceIndex >= 0) {
- bRetval = service_ok(iServiceIndex);
+ bRetval = lpcfg_service_ok(ServicePtrs[iServiceIndex]);
}
}
* for config_backend. Otherwise, init_globals would
* send us into an endless loop here.
*/
+
config_backend = CONFIG_BACKEND_REGISTRY;
/* start over */
DEBUG(1, ("lp_load_ex: changing to config backend "
"registry\n"));
- init_globals(true);
+ init_globals(lp_ctx, true);
+
+ TALLOC_FREE(lp_ctx);
+
lp_kill_all_services();
ok = lp_load_ex(pszFname, global_only, save_defaults,
add_ipc, initialize_globals,
void lp_dump(FILE *f, bool show_defaults, int maxtoprint)
{
int iService;
+ struct loadparm_context *lp_ctx;
if (show_defaults)
defaults_saved = false;
- dump_globals(f, defaults_saved);
+ lp_ctx = setup_lp_context(talloc_tos());
+ if (lp_ctx == NULL) {
+ return;
+ }
+
+ lpcfg_dump_globals(lp_ctx, f, !defaults_saved);
- dump_a_service(&sDefault, f, show_defaults);
+ lpcfg_dump_a_service(&sDefault, &sDefault, f, flags_list, show_defaults);
for (iService = 0; iService < maxtoprint; iService++) {
fprintf(f,"\n");
if (VALID(snum)) {
if (ServicePtrs[snum]->szService[0] == '\0')
return;
- dump_a_service(ServicePtrs[snum], f, show_defaults);
+ lpcfg_dump_a_service(ServicePtrs[snum], &sDefault, f,
+ flags_list, show_defaults);
}
}
{
return &Globals;
}
+
+unsigned int * get_flags(void)
+{
+ if (flags_list == NULL) {
+ flags_list = talloc_zero_array(NULL, unsigned int, num_parameters());
+ }
+
+ return flags_list;
+}