From: Uri Simchoni Date: Tue, 5 Dec 2017 18:56:49 +0000 (+0200) Subject: sysacls: change datatypes to 32 bits X-Git-Tag: samba-4.6.13~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3dc640c9d5978f3746c570ca9e34c1c57fa83bc;p=thirdparty%2Fsamba.git sysacls: change datatypes to 32 bits 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 Reviewed-by: Jeremy Allison (back-ported from commit 75e7da9741c529f96fa409655ac5b326a6c071c5) --- diff --git a/source3/include/smb_acls.h b/source3/include/smb_acls.h index 3ac23dbbfd3..cd2452b4f78 100644 --- a/source3/include/smb_acls.h +++ b/source3/include/smb_acls.h @@ -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;