diff options
-rw-r--r-- | source3/param/loadparm.c | 12 | ||||
-rw-r--r-- | source3/utils/net_conf.c | 14 |
2 files changed, 26 insertions, 0 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index c43a032560..58ea751fa5 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -2776,6 +2776,18 @@ BOOL lp_add_printer(const char *pszPrintername, int iDefaultService) return (True); } + +/*************************************************************************** + Check whether the given parameter name is valid. + Parametric options (names containing a colon) are considered valid. +***************************************************************************/ + +BOOL lp_parameter_valid(const char *pszParmName) +{ + return ((map_parameter(pszParmName) != -1) || + (strchr(pszParmName, ':') != NULL)); +} + /*************************************************************************** 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 021ac0005d..5af2d6ccc5 100644 --- a/source3/utils/net_conf.c +++ b/source3/utils/net_conf.c @@ -167,6 +167,20 @@ static WERROR reg_setvalue_internal(struct registry_key *key, else { d_fprintf(stderr, "Only value types DWORD and SZ are" "currently implemented for setting values.\n"); + werr = WERR_INVALID_PARAM; + goto done; + } + + if (!lp_parameter_valid(valname)) { + d_fprintf(stderr, "Invalid parameter '%s' given.\n", valname); + werr = WERR_INVALID_PARAM; + goto done; + } + + if (registry_smbconf_valname_forbidden(valname)) { + d_fprintf(stderr, "Parameter '%s' not allowed in registry.\n", + valname); + werr = WERR_INVALID_PARAM; goto done; } |