diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/param/loadparm.c | 18 | ||||
-rw-r--r-- | source3/utils/net_conf.c | 11 |
2 files changed, 28 insertions, 1 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 58ea751fa5..8c6c0f1afe 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -2789,6 +2789,24 @@ BOOL lp_parameter_valid(const char *pszParmName) } /*************************************************************************** + Check whether the given name is the name of a global parameter. + Returns True for strings belonging to parameters of class + P_GLOBAL, False for all other strings, also for parametric options + and strings not belonging to any option. +***************************************************************************/ + +BOOL lp_parameter_is_global(const char *pszParmName) +{ + int num = map_parameter(pszParmName); + + if (num >= 0) { + return (parm_table[num].p_class == P_GLOBAL); + } + + return False; +} + +/*************************************************************************** Map a parameter's string representation to something we can use. Returns False if the parameter string is not recognised, else TRUE. ***************************************************************************/ diff --git a/source3/utils/net_conf.c b/source3/utils/net_conf.c index 5af2d6ccc5..1c61a25ee9 100644 --- a/source3/utils/net_conf.c +++ b/source3/utils/net_conf.c @@ -178,12 +178,21 @@ static WERROR reg_setvalue_internal(struct registry_key *key, } if (registry_smbconf_valname_forbidden(valname)) { - d_fprintf(stderr, "Parameter '%s' not allowed in registry.\n", + d_fprintf(stderr, "Parameter '%s' not allowed in registry.\n", valname); werr = WERR_INVALID_PARAM; goto done; } + if (!strequal(key->key->name, GLOBAL_NAME) && + lp_parameter_is_global(valname)) + { + d_fprintf(stderr, "Global paramter '%s' not allowed in " + "service definition.\n", valname); + werr = WERR_INVALID_PARAM; + goto done; + } + werr = reg_setvalue(key, valname, &val); if (!W_ERROR_IS_OK(werr)) { d_fprintf(stderr, |