summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalph Wuerthner <ralph.wuerthner@de.ibm.com>2012-07-03 11:39:24 +0200
committerChristian Ambach <ambi@samba.org>2012-07-11 21:28:23 +0200
commit73ede3241e3d8c26f50fbc7bd0762c742dfb3348 (patch)
tree1157e4879e1ce2df54b67b80e6a8b3989a6bf8f7
parent35ab9bea0f15d66a6b0e827804e1fc66192d0068 (diff)
downloadsamba-73ede3241e3d8c26f50fbc7bd0762c742dfb3348.tar.gz
samba-73ede3241e3d8c26f50fbc7bd0762c742dfb3348.tar.bz2
samba-73ede3241e3d8c26f50fbc7bd0762c742dfb3348.zip
s3:vfs_gpfs: fix ACL length calculation
GPFS 3.5 introduces ACL enhancements which are breaking our ACL length calculations. Signed-off-by: Ralph Wuerthner <ralph.wuerthner@de.ibm.com> Autobuild-User(master): Christian Ambach <ambi@samba.org> Autobuild-Date(master): Wed Jul 11 21:28:23 CEST 2012 on sn-devel-104
-rw-r--r--source3/modules/vfs_gpfs.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
index ddd048acc0..4e4df22ebe 100644
--- a/source3/modules/vfs_gpfs.c
+++ b/source3/modules/vfs_gpfs.c
@@ -417,8 +417,8 @@ static bool gpfsacl_process_smbacl(files_struct *fsp, SMB4ACL_T *smbacl)
struct gpfs_acl *gacl;
TALLOC_CTX *mem_ctx = talloc_tos();
- gacl_len = sizeof(struct gpfs_acl) +
- (smb_get_naces(smbacl)-1)*sizeof(gpfs_ace_v4_t);
+ gacl_len = offsetof(gpfs_acl_t, ace_v4) + smb_get_naces(smbacl) *
+ sizeof(gpfs_ace_v4_t);
gacl = (struct gpfs_acl *)TALLOC_SIZE(mem_ctx, gacl_len);
if (gacl == NULL) {
@@ -706,16 +706,11 @@ static struct gpfs_acl *smb2gpfs_acl(const SMB_ACL_T pacl,
gpfs_aclLen_t len;
struct gpfs_acl *result;
int i;
- union gpfs_ace_union
- {
- gpfs_ace_v1_t ace_v1[1]; /* when GPFS_ACL_VERSION_POSIX */
- gpfs_ace_v4_t ace_v4[1]; /* when GPFS_ACL_VERSION_NFS4 */
- };
DEBUG(10, ("smb2gpfs_acl: Got ACL with %d entries\n", pacl->count));
- len = sizeof(struct gpfs_acl) - sizeof(union gpfs_ace_union) +
- (pacl->count)*sizeof(gpfs_ace_v1_t);
+ len = offsetof(gpfs_acl_t, ace_v1) + (pacl->count) *
+ sizeof(gpfs_ace_v1_t);
result = (struct gpfs_acl *)SMB_MALLOC(len);
if (result == NULL) {