summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/smbconf/smbconf_reg.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/source3/lib/smbconf/smbconf_reg.c b/source3/lib/smbconf/smbconf_reg.c
index 696dd1f823..9bdcbfd903 100644
--- a/source3/lib/smbconf/smbconf_reg.c
+++ b/source3/lib/smbconf/smbconf_reg.c
@@ -174,24 +174,15 @@ static sbcErr smbconf_reg_set_value(struct registry_key *key,
const char *canon_valname;
const char *canon_valstr;
- if (!lp_canonicalize_parameter_with_value(valname, valstr,
- &canon_valname,
- &canon_valstr))
- {
- if (canon_valname == NULL) {
- DEBUG(5, ("invalid parameter '%s' given\n",
- valname));
- } else {
- DEBUG(5, ("invalid value '%s' given for "
- "parameter '%s'\n", valstr, valname));
- }
+ if (!lp_parameter_is_valid(valname)) {
+ DEBUG(5, ("Invalid parameter '%s' given.\n", valname));
err = SBC_ERR_INVALID_PARAM;
goto done;
}
- if (!smbconf_reg_parameter_is_valid(canon_valname)) {
+ if (!smbconf_reg_parameter_is_valid(valname)) {
DEBUG(5, ("Parameter '%s' not allowed in registry.\n",
- canon_valname));
+ valname));
err = SBC_ERR_INVALID_PARAM;
goto done;
}
@@ -208,12 +199,26 @@ static sbcErr smbconf_reg_set_value(struct registry_key *key,
lp_parameter_is_global(valname))
{
DEBUG(5, ("Global parameter '%s' not allowed in "
- "service definition ('%s').\n", canon_valname,
+ "service definition ('%s').\n", valname,
subkeyname));
err = SBC_ERR_INVALID_PARAM;
goto done;
}
+ if (!lp_canonicalize_parameter_with_value(valname, valstr,
+ &canon_valname,
+ &canon_valstr))
+ {
+ /*
+ * We already know the parameter name is valid.
+ * So the value must be invalid.
+ */
+ DEBUG(5, ("invalid value '%s' given for parameter '%s'\n",
+ valstr, valname));
+ err = SBC_ERR_INVALID_PARAM;
+ goto done;
+ }
+
ZERO_STRUCT(val);
val.type = REG_SZ;