summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
9f519ca)
Using either an snum or the current service for special functions
depending where it was called is unnecessary and complicates the process
of handling them generically.
idmap parameters now call lpcfg_do_parameter_parametric and are now set
like normal.
Change-Id: I3eca89791274280f9d3c7b987fbd790c16ec7981
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Nadezhda Ivanova <nivanova@samba.org>
static bool do_section(const char *pszSectionName, void *);
static bool set_variable_helper(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
const char *pszParmName, const char *pszParmValue);
static bool do_section(const char *pszSectionName, void *);
static bool set_variable_helper(TALLOC_CTX *mem_ctx, int parmnum, void *parm_ptr,
const char *pszParmName, const char *pszParmValue);
+static bool lp_do_parameter_parametric(struct loadparm_context *lp_ctx,
+ struct loadparm_service *service,
+ const char *pszParmName,
+ const char *pszParmValue, int flags);
/* The following are helper functions for parametrical options support. */
/* It returns a pointer to parametrical option value if it exists or NULL otherwise */
/* The following are helper functions for parametrical options support. */
/* It returns a pointer to parametrical option value if it exists or NULL otherwise */
Handle the "realm" parameter
***************************************************************************/
Handle the "realm" parameter
***************************************************************************/
-bool handle_realm(struct loadparm_context *lp_ctx, int unused,
+bool handle_realm(struct loadparm_context *lp_ctx, struct loadparm_service *service,
const char *pszParmValue, char **ptr)
{
char *upper;
const char *pszParmValue, char **ptr)
{
char *upper;
Handle the include operation.
***************************************************************************/
Handle the include operation.
***************************************************************************/
-bool handle_include(struct loadparm_context *lp_ctx, int unused,
+bool handle_include(struct loadparm_context *lp_ctx, struct loadparm_service *service,
const char *pszParmValue, char **ptr)
{
char *fname;
if (lp_ctx->s3_fns) {
const char *pszParmValue, char **ptr)
{
char *fname;
if (lp_ctx->s3_fns) {
- return lp_ctx->s3_fns->lp_include(lp_ctx, unused, pszParmValue, ptr);
+ return lp_ctx->s3_fns->lp_include(lp_ctx, service, pszParmValue, ptr);
}
fname = standard_sub_basic(lp_ctx, pszParmValue);
}
fname = standard_sub_basic(lp_ctx, pszParmValue);
Handle the interpretation of the copy parameter.
***************************************************************************/
Handle the interpretation of the copy parameter.
***************************************************************************/
-bool handle_copy(struct loadparm_context *lp_ctx, int snum,
+bool handle_copy(struct loadparm_context *lp_ctx, struct loadparm_service *service,
const char *pszParmValue, char **ptr)
{
bool bRetval;
struct loadparm_service *serviceTemp = NULL;
const char *pszParmValue, char **ptr)
{
bool bRetval;
struct loadparm_service *serviceTemp = NULL;
- struct loadparm_service *current = NULL;
bRetval = false;
DEBUG(3, ("Copying service from service %s\n", pszParmValue));
serviceTemp = lpcfg_getservicebyname(lp_ctx, pszParmValue);
bRetval = false;
DEBUG(3, ("Copying service from service %s\n", pszParmValue));
serviceTemp = lpcfg_getservicebyname(lp_ctx, pszParmValue);
- if (lp_ctx->s3_fns != NULL) {
- current = lp_ctx->s3_fns->get_servicebynum(snum);
- } else {
- current = lp_ctx->currentService;
- }
DEBUG(0, ("Unable to copy service - invalid service destination"));
return false;
}
if (serviceTemp != NULL) {
DEBUG(0, ("Unable to copy service - invalid service destination"));
return false;
}
if (serviceTemp != NULL) {
- if (serviceTemp == current) {
+ if (serviceTemp == service) {
DEBUG(0, ("Can't copy service %s - unable to copy self!\n", pszParmValue));
} else {
DEBUG(0, ("Can't copy service %s - unable to copy self!\n", pszParmValue));
} else {
- current->copymap);
- lpcfg_string_set(current, ptr, pszParmValue);
+ service->copymap);
+ lpcfg_string_set(service, ptr, pszParmValue);
-bool handle_debug_list(struct loadparm_context *lp_ctx, int unused,
+bool handle_debug_list(struct loadparm_context *lp_ctx, struct loadparm_service *service,
const char *pszParmValue, char **ptr)
{
if (lp_ctx->s3_fns != NULL) {
const char *pszParmValue, char **ptr)
{
if (lp_ctx->s3_fns != NULL) {
return debug_parse_levels(pszParmValue);
}
return debug_parse_levels(pszParmValue);
}
-bool handle_logfile(struct loadparm_context *lp_ctx, int unused,
+bool handle_logfile(struct loadparm_context *lp_ctx, struct loadparm_service *service,
const char *pszParmValue, char **ptr)
{
if (lp_ctx->s3_fns != NULL) {
const char *pszParmValue, char **ptr)
{
if (lp_ctx->s3_fns != NULL) {
* These special charset handling methods only run in the source3 code.
*/
* These special charset handling methods only run in the source3 code.
*/
-bool handle_charset(struct loadparm_context *lp_ctx, int snum,
+bool handle_charset(struct loadparm_context *lp_ctx, struct loadparm_service *service,
const char *pszParmValue, char **ptr)
{
if (lp_ctx->s3_fns) {
const char *pszParmValue, char **ptr)
{
if (lp_ctx->s3_fns) {
-bool handle_dos_charset(struct loadparm_context *lp_ctx, int snum,
+bool handle_dos_charset(struct loadparm_context *lp_ctx, struct loadparm_service *service,
const char *pszParmValue, char **ptr)
{
bool is_utf8 = false;
const char *pszParmValue, char **ptr)
{
bool is_utf8 = false;
return lpcfg_string_set(lp_ctx, ptr, pszParmValue);
}
return lpcfg_string_set(lp_ctx, ptr, pszParmValue);
}
-bool handle_printing(struct loadparm_context *lp_ctx, int snum,
+bool handle_printing(struct loadparm_context *lp_ctx, struct loadparm_service *service,
const char *pszParmValue, char **ptr)
{
static int parm_num = -1;
const char *pszParmValue, char **ptr)
{
static int parm_num = -1;
s = lp_ctx->sDefault;
lp_ctx->s3_fns->init_printer_values(lp_ctx->globals->ctx, s);
} else {
s = lp_ctx->sDefault;
lp_ctx->s3_fns->init_printer_values(lp_ctx->globals->ctx, s);
} else {
- s = lp_ctx->services[snum];
lp_ctx->s3_fns->init_printer_values(s, s);
}
}
lp_ctx->s3_fns->init_printer_values(s, s);
}
}
-bool handle_ldap_debug_level(struct loadparm_context *lp_ctx, int snum, const char *pszParmValue, char **ptr)
+bool handle_ldap_debug_level(struct loadparm_context *lp_ctx, struct loadparm_service *service,
+ const char *pszParmValue, char **ptr)
{
lp_ctx->globals->ldap_debug_level = lp_int(pszParmValue);
{
lp_ctx->globals->ldap_debug_level = lp_int(pszParmValue);
-bool handle_netbios_aliases(struct loadparm_context *lp_ctx, int snum, const char *pszParmValue, char **ptr)
+bool handle_netbios_aliases(struct loadparm_context *lp_ctx, struct loadparm_service *service,
+ const char *pszParmValue, char **ptr)
{
TALLOC_FREE(lp_ctx->globals->netbios_aliases);
lp_ctx->globals->netbios_aliases = (const char **)str_list_make_v3(lp_ctx->globals->ctx,
{
TALLOC_FREE(lp_ctx->globals->netbios_aliases);
lp_ctx->globals->netbios_aliases = (const char **)str_list_make_v3(lp_ctx->globals->ctx,
* idmap related parameters
*/
* idmap related parameters
*/
-bool handle_idmap_backend(struct loadparm_context *lp_ctx, int snum, const char *pszParmValue, char **ptr)
+bool handle_idmap_backend(struct loadparm_context *lp_ctx, struct loadparm_service *service,
+ const char *pszParmValue, char **ptr)
- return lp_ctx->s3_fns->lp_do_parameter(snum, "idmap config * : backend", pszParmValue);
+ lp_do_parameter_parametric(lp_ctx, service, "idmap config * : backend",
+ pszParmValue, 0);
- return lpcfg_string_set(lp_ctx, ptr, pszParmValue);
+ return lpcfg_string_set(lp_ctx->globals->ctx, ptr, pszParmValue);
-bool handle_idmap_uid(struct loadparm_context *lp_ctx, int snum, const char *pszParmValue, char **ptr)
+bool handle_idmap_uid(struct loadparm_context *lp_ctx, struct loadparm_service *service,
+ const char *pszParmValue, char **ptr)
- return lp_ctx->s3_fns->lp_do_parameter(snum, "idmap config * : range", pszParmValue);
+ lp_do_parameter_parametric(lp_ctx, service, "idmap config * : range",
+ pszParmValue, 0);
- return lpcfg_string_set(lp_ctx, ptr, pszParmValue);
+ return lpcfg_string_set(lp_ctx->globals->ctx, ptr, pszParmValue);
-bool handle_idmap_gid(struct loadparm_context *lp_ctx, int snum, const char *pszParmValue, char **ptr)
+bool handle_idmap_gid(struct loadparm_context *lp_ctx, struct loadparm_service *service,
+ const char *pszParmValue, char **ptr)
- return lp_ctx->s3_fns->lp_do_parameter(snum, "idmap config * : range", pszParmValue);
+ lp_do_parameter_parametric(lp_ctx, service, "idmap config * : range",
+ pszParmValue, 0);
- return lpcfg_string_set(lp_ctx, ptr, pszParmValue);
+ return lpcfg_string_set(lp_ctx->globals->ctx, ptr, pszParmValue);
-bool handle_smb_ports(struct loadparm_context *lp_ctx, int snum, const char *pszParmValue, char **ptr)
+bool handle_smb_ports(struct loadparm_context *lp_ctx, struct loadparm_service *service,
+ const char *pszParmValue, char **ptr)
{
static int parm_num = -1;
int i;
{
static int parm_num = -1;
int i;
-bool set_variable(TALLOC_CTX *mem_ctx, int snum, int parmnum, void *parm_ptr,
+bool set_variable(TALLOC_CTX *mem_ctx, struct loadparm_service *service, int parmnum, void *parm_ptr,
const char *pszParmName, const char *pszParmValue,
struct loadparm_context *lp_ctx, bool on_globals)
{
const char *pszParmName, const char *pszParmValue,
struct loadparm_context *lp_ctx, bool on_globals)
{
/* if it is a special case then go ahead */
if (parm_table[parmnum].special) {
/* if it is a special case then go ahead */
if (parm_table[parmnum].special) {
- ok = parm_table[parmnum].special(lp_ctx, snum, pszParmValue,
+ ok = parm_table[parmnum].special(lp_ctx, service, pszParmValue,
(char **)parm_ptr);
if (!ok) {
return false;
(char **)parm_ptr);
if (!ok) {
return false;
parm_ptr = lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[parmnum]);
parm_ptr = lpcfg_parm_ptr(lp_ctx, NULL, &parm_table[parmnum]);
- return set_variable(lp_ctx->globals->ctx, -1, parmnum, parm_ptr,
+ return set_variable(lp_ctx->globals->ctx, NULL, parmnum, parm_ptr,
pszParmName, pszParmValue, lp_ctx, true);
}
pszParmName, pszParmValue, lp_ctx, true);
}
parm_table[i].p_class == parm_table[parmnum].p_class)
bitmap_clear(service->copymap, i);
parm_table[i].p_class == parm_table[parmnum].p_class)
bitmap_clear(service->copymap, i);
- return set_variable(service, -1, parmnum, parm_ptr, pszParmName,
+ return set_variable(service, service, parmnum, parm_ptr, pszParmName,
pszParmValue, lp_ctx, false);
}
pszParmValue, lp_ctx, false);
}
parm_class p_class;
offset_t offset;
bool (*special)(struct loadparm_context *lpcfg_ctx,
parm_class p_class;
offset_t offset;
bool (*special)(struct loadparm_context *lpcfg_ctx,
- int snum, const char *, char **);
+ struct loadparm_service *, const char *, char **);
const struct enum_list *enum_list;
unsigned flags;
union {
const struct enum_list *enum_list;
unsigned flags;
union {
char * lp_string(TALLOC_CTX *, const char *);
bool lp_string_set(char **, const char *);
int getservicebyname(const char *, struct loadparm_service *);
char * lp_string(TALLOC_CTX *, const char *);
bool lp_string_set(char **, const char *);
int getservicebyname(const char *, struct loadparm_service *);
-bool lp_include(struct loadparm_context *, int, const char *, char **);
+bool lp_include(struct loadparm_context *, struct loadparm_service *,
+ const char *, char **);
void init_printer_values(TALLOC_CTX *, struct loadparm_service *);
bool lp_do_section(const char *pszSectionName, void *userdata);
bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue);
void init_printer_values(TALLOC_CTX *, struct loadparm_service *);
bool lp_do_section(const char *pszSectionName, void *userdata);
bool store_lp_set_cmdline(const char *pszParmName, const char *pszParmValue);
void (*dump)(FILE *f, bool show_defaults, int maxtoprint);
char * (*lp_string)(TALLOC_CTX *ctx, const char *in);
bool (*lp_string_set)(char **dest, const char *src);
void (*dump)(FILE *f, bool show_defaults, int maxtoprint);
char * (*lp_string)(TALLOC_CTX *ctx, const char *in);
bool (*lp_string_set)(char **dest, const char *src);
- bool (*lp_include)(struct loadparm_context*, int, const char *, char **);
+ bool (*lp_include)(struct loadparm_context*, struct loadparm_service *,
+ const char *, char **);
void (*init_printer_values)(TALLOC_CTX *, struct loadparm_service *);
void (*init_ldap_debugging)(void);
bool (*set_netbios_aliases)(const char **);
void (*init_printer_values)(TALLOC_CTX *, struct loadparm_service *);
void (*init_ldap_debugging)(void);
bool (*set_netbios_aliases)(const char **);
***************************************************************************/
static bool bAllowIncludeRegistry = true;
***************************************************************************/
static bool bAllowIncludeRegistry = true;
-bool lp_include(struct loadparm_context *lp_ctx, int snum, const char *pszParmValue, char **ptr)
+bool lp_include(struct loadparm_context *lp_ctx, struct loadparm_service *service,
+ const char *pszParmValue, char **ptr)
add_to_file_list(NULL, &file_lists, pszParmValue, fname);
add_to_file_list(NULL, &file_lists, pszParmValue, fname);
string_set(Globals.ctx, ptr, fname);
} else {
string_set(Globals.ctx, ptr, fname);
} else {
- string_set(ServicePtrs[snum], ptr, fname);
+ string_set(service, ptr, fname);
}
if (file_exist(fname)) {
}
if (file_exist(fname)) {
TALLOC_CTX *frame = talloc_stackframe();
bool ok;
struct loadparm_context *lp_ctx;
TALLOC_CTX *frame = talloc_stackframe();
bool ok;
struct loadparm_context *lp_ctx;
+ struct loadparm_service *service = NULL;
parmnum = lpcfg_map_parameter(pszParmName);
parmnum = lpcfg_map_parameter(pszParmName);
}
mem_ctx = ServicePtrs[snum];
}
mem_ctx = ServicePtrs[snum];
+ service = ServicePtrs[snum];
}
lp_ctx = loadparm_init_s3(frame,
}
lp_ctx = loadparm_init_s3(frame,
lp_ctx->bInGlobalSection = bInGlobalSection;
lp_ctx->flags = flags_list;
lp_ctx->bInGlobalSection = bInGlobalSection;
lp_ctx->flags = flags_list;
- ok = set_variable(mem_ctx, snum, parmnum, parm_ptr, pszParmName, pszParmValue,
+ ok = set_variable(mem_ctx, service, parmnum, parm_ptr, pszParmName, pszParmValue,
lp_ctx, (snum < 0));
TALLOC_FREE(frame);
lp_ctx, (snum < 0));
TALLOC_FREE(frame);