]> 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)
committerJeremy Allison <jra@samba.org>
Thu, 21 Dec 2017 18:12:08 +0000 (19:12 +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>
source3/include/smb_acls.h

index 73b67af020e75b094917b523ad9783f4b431afa4..c5a2339f1dbbf97ae8fb0435d4d5c9c122b02288 100644 (file)
@@ -27,8 +27,14 @@ struct files_struct;
 struct smb_filename;
 
 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;