static bool bGlobalOnly = false;
static struct file_lists *file_lists = NULL;
-#define NUMPARAMETERS (sizeof(parm_table) / sizeof(struct parm_struct))
-
-/* prototypes for the special type handlers */
-static bool handle_idmap_backend(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr);
-static bool handle_idmap_uid(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr);
-static bool handle_idmap_gid(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr);
-static bool handle_netbios_aliases(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr );
-static bool handle_printing(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr);
-static bool handle_ldap_debug_level(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr);
+#define NUMPARAMETERS (num_parameters())
static void set_allowed_client_auth(void);
static bool lp_set_cmdline_helper(const char *pszParmName, const char *pszParmValue, bool store_values);
static void free_param_opts(struct parmlist_entry **popts);
-#include "lib/param/param_table.c"
-
/* this is used to prevent lots of mallocs of size 1 */
static const char null_string[] = "";
Initialise the sDefault parameter structure for the printer values.
***************************************************************************/
-static void init_printer_values(TALLOC_CTX *ctx, struct loadparm_service *pService)
+void init_printer_values(TALLOC_CTX *ctx, struct loadparm_service *pService)
{
/* choose defaults depending on the type of printing */
switch (pService->printing) {
case PRINT_AIX:
case PRINT_LPRNT:
case PRINT_LPROS2:
- string_set(ctx, &pService->lpq_command, "lpq -P'%p'");
- string_set(ctx, &pService->lprm_command, "lprm -P'%p' %j");
- string_set(ctx, &pService->print_command, "lpr -r -P'%p' %s");
+ 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:
- string_set(ctx, &pService->lpq_command, "lpq -P'%p'");
- string_set(ctx, &pService->lprm_command, "lprm -P'%p' %j");
- string_set(ctx, &pService->print_command, "lpr -r -P'%p' %s");
- string_set(ctx, &pService->queuepause_command, "lpc stop '%p'");
- string_set(ctx, &pService->queueresume_command, "lpc start '%p'");
- string_set(ctx, &pService->lppause_command, "lpc hold '%p' %j");
- string_set(ctx, &pService->lpresume_command, "lpc release '%p' %j");
+ 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() */
- string_set(ctx, &pService->lpq_command, "%p");
- string_set(ctx, &pService->lprm_command, "");
- string_set(ctx, &pService->print_command, "");
- string_set(ctx, &pService->lppause_command, "");
- string_set(ctx, &pService->lpresume_command, "");
- string_set(ctx, &pService->queuepause_command, "");
- string_set(ctx, &pService->queueresume_command, "");
+ 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:
- string_set(ctx, &pService->lpq_command, "lpstat -o%p");
- string_set(ctx, &pService->lprm_command, "cancel %p-%j");
- string_set(ctx, &pService->print_command, "lp -c -d%p %s; rm %s");
- string_set(ctx, &pService->queuepause_command, "disable %p");
- string_set(ctx, &pService->queueresume_command, "enable %p");
+ 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
- string_set(ctx, &pService->lppause_command, "lp -i %p-%j -H hold");
- string_set(ctx, &pService->lpresume_command, "lp -i %p-%j -H resume");
+ 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:
- string_set(ctx, &pService->lpq_command, "lpq -P%p");
- string_set(ctx, &pService->lprm_command, "lprm -P%p %j");
- string_set(ctx, &pService->print_command, "lp -r -P%p %s");
+ 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_stackframe();
+ TALLOC_CTX *tmp_ctx = talloc_new(ctx);
char *tmp;
tdbfile = talloc_asprintf(
tmp = talloc_asprintf(tmp_ctx, "vlp %s print %%p %%s",
tdbfile);
- string_set(ctx, &pService->print_command,
+ lpcfg_string_set(ctx, &pService->print_command,
tmp ? tmp : "vlp print %p %s");
tmp = talloc_asprintf(tmp_ctx, "vlp %s lpq %%p",
tdbfile);
- string_set(ctx, &pService->lpq_command,
+ lpcfg_string_set(ctx, &pService->lpq_command,
tmp ? tmp : "vlp lpq %p");
tmp = talloc_asprintf(tmp_ctx, "vlp %s lprm %%p %%j",
tdbfile);
- string_set(ctx, &pService->lprm_command,
+ lpcfg_string_set(ctx, &pService->lprm_command,
tmp ? tmp : "vlp lprm %p %j");
tmp = talloc_asprintf(tmp_ctx, "vlp %s lppause %%p %%j",
tdbfile);
- string_set(ctx, &pService->lppause_command,
+ lpcfg_string_set(ctx, &pService->lppause_command,
tmp ? tmp : "vlp lppause %p %j");
tmp = talloc_asprintf(tmp_ctx, "vlp %s lpresume %%p %%j",
tdbfile);
- string_set(ctx, &pService->lpresume_command,
+ lpcfg_string_set(ctx, &pService->lpresume_command,
tmp ? tmp : "vlp lpresume %p %j");
tmp = talloc_asprintf(tmp_ctx, "vlp %s queuepause %%p",
tdbfile);
- string_set(ctx, &pService->queuepause_command,
+ lpcfg_string_set(ctx, &pService->queuepause_command,
tmp ? tmp : "vlp queuepause %p");
tmp = talloc_asprintf(tmp_ctx, "vlp %s queueresume %%p",
tdbfile);
- string_set(ctx, &pService->queueresume_command,
+ lpcfg_string_set(ctx, &pService->queueresume_command,
tmp ? tmp : "vlp queueresume %p");
TALLOC_FREE(tmp_ctx);
#define MISSING_PARAMETER(name) \
DEBUG(0, ("%s(): value is NULL or empty!\n", #name))
-/*******************************************************************
-convenience routine to return boolean parameters.
-********************************************************************/
-static bool lp_bool(const char *s)
-{
- bool ret = false;
-
- if (!s || !*s) {
- MISSING_PARAMETER(lp_bool);
- return false;
- }
-
- if (!set_boolean(s, &ret)) {
- DEBUG(0,("lp_bool(%s): value is not boolean!\n",s));
- return false;
- }
-
- return ret;
-}
-
/*******************************************************************
convenience routine to return enum parameters.
********************************************************************/
return data->value;
}
-const char *lp_parm_const_string_service(struct loadparm_service *service, const char *type, const char *option)
+const char *lp_parm_const_string_service(struct loadparm_service *service,
+ const char *type, const char *option,
+ const char *def)
{
struct parmlist_entry *data = get_parametrics_by_service(service, type, option);
if (data == NULL||data->value==NULL)
- return NULL;
+ return def;
return data->value;
}
true, global_iconv_handle);
}
-static bool handle_netbios_aliases(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
-{
- TALLOC_FREE(Globals.netbios_aliases);
- Globals.netbios_aliases = (const char **)str_list_make_v3(NULL, pszParmValue, NULL);
- return set_netbios_aliases(Globals.netbios_aliases);
-}
-
/***************************************************************************
Handle the include operation.
***************************************************************************/
return true;
}
-static bool handle_ldap_debug_level(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
-{
- Globals.ldap_debug_level = lp_int(pszParmValue);
- init_ldap_debugging();
- return true;
-}
-
-/*
- * idmap related parameters
- */
-
-static bool handle_idmap_backend(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
-{
- lp_do_parameter(snum, "idmap config * : backend", pszParmValue);
-
- return true;
-}
-
-static bool handle_idmap_uid(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
-{
- lp_do_parameter(snum, "idmap config * : range", pszParmValue);
-
- return true;
-}
-
-static bool handle_idmap_gid(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
-{
- lp_do_parameter(snum, "idmap config * : range", pszParmValue);
-
- return true;
-}
-
bool lp_idmap_range(const char *domain_name, uint32_t *low, uint32_t *high)
{
char *config_option = NULL;
return lp_string(ctx, Globals.ldap_suffix);
}
-/****************************************************************************
- set the value for a P_ENUM
- ***************************************************************************/
-
-static void lp_set_enum_parm( struct parm_struct *parm, const char *pszParmValue,
- int *ptr )
-{
- int i;
-
- for (i = 0; parm->enum_list[i].name; i++) {
- if ( strequal(pszParmValue, parm->enum_list[i].name)) {
- *ptr = parm->enum_list[i].value;
- return;
- }
- }
- DEBUG(0, ("WARNING: Ignoring invalid value '%s' for parameter '%s'\n",
- pszParmValue, parm->label));
-}
-
-/***************************************************************************
-***************************************************************************/
-
-static bool handle_printing(struct loadparm_context *unused, int snum, const char *pszParmValue, char **ptr)
-{
- static int parm_num = -1;
- struct loadparm_service *s;
-
- if ( parm_num == -1 )
- parm_num = lpcfg_map_parameter( "printing" );
-
- lp_set_enum_parm( &parm_table[parm_num], pszParmValue, (int*)ptr );
-
- if ( snum < 0 ) {
- s = &sDefault;
- init_printer_values(Globals.ctx, s);
- } else {
- s = ServicePtrs[snum];
- init_printer_values(s, s);
- }
-
- return true;
-}
-
/**
return the parameter pointer for a parameter
*/
bool ok;
struct loadparm_context *lp_ctx = loadparm_init_s3(talloc_tos(),
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(lp_ctx);
break;
}
case P_ENUM:
- lp_set_enum_parm( &parm_table[parmnum], pszParmValue, (int*)parm_ptr );
+ if (!lp_set_enum_parm(&parm_table[parmnum], pszParmValue, (int*)parm_ptr)) {
+ return false;
+ }
break;
case P_SEP:
break;