summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2013-09-22 08:47:14 +0200
committerMichael Adam <obnox@samba.org>2013-09-24 07:44:28 +0200
commit76a008cd1827d0563c42dbef433e35ce5ee6a041 (patch)
tree1ff9d286268f2c8c7ea4a18176dcabd3629a2529
parentb7db29eb2a224068282f9dd38502a147c2df5712 (diff)
downloadsamba-76a008cd1827d0563c42dbef433e35ce5ee6a041.tar.gz
samba-76a008cd1827d0563c42dbef433e35ce5ee6a041.tar.bz2
samba-76a008cd1827d0563c42dbef433e35ce5ee6a041.zip
libsmbconf:registry: reorganize the validity check and canonicalization of the input in "setparm"
- first check that the name is an smbconf parameter - then check that the parameter is allowed in the registry config - then check that a global parameter is not to be set in a service section - then canonicalize the parameter and value name, thereby checking that the value has valid format Signed-off-by: Michael Adam <obnox@samba.org> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
-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;