]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
sysacls: change datatypes to 32 bits
authorUri Simchoni <uri@samba.org>
Tue, 5 Dec 2017 18:56:49 +0000 (20:56 +0200)
committerKarolin Seeger <kseeger@samba.org>
Tue, 2 Jan 2018 09:01:10 +0000 (10:01 +0100)
The SMB_ACL_PERMSET_T and SMB_ACL_PERM_T were defined as
mode_t, which is 16-bits on some (non-Linux) systems. However,
pidl *always* encodes mode_t as uint32_t. That created a bug on
big-endian systems as sys_acl_get_permset() returns a SMB_ACL_PERMSET_T
pointer to an internal a_perm structure member defined in IDL as a mode_t,
which pidl turns into a uin32_t in the emitted header file.

Changing to 32 bits fixes that.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13176

Signed-off-by: Uri Simchoni <uri@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(back-ported from commit 75e7da9741c529f96fa409655ac5b326a6c071c5)

source3/include/smb_acls.h

index 3ac23dbbfd35f8a84d824070f7eeb32b0365f479..cd2452b4f78cc387d1529f1d6ab9c4100869296a 100644 (file)
@@ -26,8 +26,14 @@ struct vfs_handle_struct;
 struct files_struct;
 
 typedef int                    SMB_ACL_TYPE_T;
-typedef mode_t                 *SMB_ACL_PERMSET_T;
-typedef mode_t                 SMB_ACL_PERM_T;
+/*
+ * struct smb_acl_entry is defined in IDL as
+ * using mode_t values, pidl always converts these
+ * to uint32_t. Ensure the external type definitions
+ * match.
+ */
+typedef uint32_t               *SMB_ACL_PERMSET_T;
+typedef uint32_t               SMB_ACL_PERM_T;
 
 typedef enum smb_acl_tag_t SMB_ACL_TAG_T;
 typedef struct smb_acl_t *SMB_ACL_T;