summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/param/loadparm.c12
-rw-r--r--source3/utils/net_conf.c14
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;
}