summaryrefslogtreecommitdiffstats
path: root/source3/modules
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2013-11-10 11:48:17 +0100
committerIra Cooper <ira@samba.org>2013-11-11 21:04:09 +0100
commitea83ac6b0142e99b514f7c4a3a4b038c2e409a8d (patch)
treed599af43141671f79cd55071150c85a226026142 /source3/modules
parentdf8dff7dd27459dad337e66f3e2f75c47e28cc8c (diff)
downloadsamba-ea83ac6b0142e99b514f7c4a3a4b038c2e409a8d.tar.gz
samba-ea83ac6b0142e99b514f7c4a3a4b038c2e409a8d.tar.xz
samba-ea83ac6b0142e99b514f7c4a3a4b038c2e409a8d.zip
smbd: Fix CID 1035478 Negative array index read
lp_parm_enum can return -1. Add error checking. Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Ira Cooper <ira@samba.org>
Diffstat (limited to 'source3/modules')
-rw-r--r--source3/modules/nfs4_acls.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/source3/modules/nfs4_acls.c b/source3/modules/nfs4_acls.c
index 08ae141158..774c40e269 100644
--- a/source3/modules/nfs4_acls.c
+++ b/source3/modules/nfs4_acls.c
@@ -85,16 +85,29 @@ static int smbacl4_get_vfs_params(
{ e_merge, "merge" },
{ -1 , NULL }
};
+ int enumval;
memset(params, 0, sizeof(smbacl4_vfs_params));
- params->mode = (enum smbacl4_mode_enum)lp_parm_enum(
- SNUM(conn), type_name,
- "mode", enum_smbacl4_modes, e_simple);
+
+ enumval = lp_parm_enum(SNUM(conn), type_name, "mode",
+ enum_smbacl4_modes, e_simple);
+ if (enumval == -1) {
+ DEBUG(10, ("value for %s:mode unknown\n", type_name));
+ return -1;
+ }
+ params->mode = (enum smbacl4_mode_enum)enumval;
+
params->do_chown = lp_parm_bool(SNUM(conn), type_name,
"chown", true);
- params->acedup = (enum smbacl4_acedup_enum)lp_parm_enum(
- SNUM(conn), type_name,
- "acedup", enum_smbacl4_acedups, e_dontcare);
+
+ enumval = lp_parm_enum(SNUM(conn), type_name, "acedup",
+ enum_smbacl4_acedups, e_dontcare);
+ if (enumval == -1) {
+ DEBUG(10, ("value for %s:acedup unknown\n", type_name));
+ return -1;
+ }
+ params->acedup = (enum smbacl4_acedup_enum)enumval;
+
params->map_full_control = lp_acl_map_full_control(SNUM(conn));
DEBUG(10, ("mode:%s, do_chown:%s, acedup: %s map full control:%s\n",