diff options
Diffstat (limited to 'source3/modules/vfs_aixacl_util.c')
-rw-r--r-- | source3/modules/vfs_aixacl_util.c | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/source3/modules/vfs_aixacl_util.c b/source3/modules/vfs_aixacl_util.c index d867f9d92f..1194d27df2 100644 --- a/source3/modules/vfs_aixacl_util.c +++ b/source3/modules/vfs_aixacl_util.c @@ -20,20 +20,20 @@ #include "includes.h" #include "system/filesys.h" #include "smbd/smbd.h" +#include "vfs_aixacl_util.h" -SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl) +SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl, TALLOC_CTX *mem_ctx) { struct acl_entry *acl_entry; struct ace_id *idp; - struct smb_acl_t *result = SMB_MALLOC_P(struct smb_acl_t); + struct smb_acl_t *result = sys_acl_init(mem_ctx); struct smb_acl_entry *ace; int i; if (result == NULL) { return NULL; } - ZERO_STRUCTP(result); /* Point to the first acl entry in the acl */ acl_entry = file_acl->acl_ext; @@ -63,11 +63,9 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl) idp = acl_entry->ace_id; DEBUG(10,("idp->id_data is %d\n",idp->id_data[0])); - result = SMB_REALLOC(result, sizeof(struct smb_acl_t) + - (sizeof(struct smb_acl_entry) * - (result->count+1))); + result->acl = talloc_realloc(result, result->acl, struct smb_acl_entry, result->count+1); if (result == NULL) { - DEBUG(0, ("SMB_REALLOC failed\n")); + DEBUG(0, ("talloc_realloc failed\n")); errno = ENOMEM; return NULL; } @@ -80,15 +78,15 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl) switch(ace->a_type) { case ACEID_USER: { - ace->uid = idp->id_data[0]; - DEBUG(10,("case ACEID_USER ace->uid is %d\n",ace->uid)); + ace->info.user.uid = idp->id_data[0]; + DEBUG(10,("case ACEID_USER ace->info.user.uid is %d\n",ace->info.user.uid)); ace->a_type = SMB_ACL_USER; break; } case ACEID_GROUP: { - ace->gid = idp->id_data[0]; - DEBUG(10,("case ACEID_GROUP ace->gid is %d\n",ace->gid)); + ace->info.group.gid = idp->id_data[0]; + DEBUG(10,("case ACEID_GROUP ace->info.group.gid is %d\n",ace->info.group.gid)); ace->a_type = SMB_ACL_GROUP; break; } @@ -116,7 +114,7 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl) break; default: DEBUG(0, ("unknown ace->type\n")); - SAFE_FREE(result); + TALLOC_FREE(result); return(0); } @@ -140,21 +138,20 @@ SMB_ACL_T aixacl_to_smbacl(struct acl *file_acl) for( i = 1; i < 4; i++) { DEBUG(10,("i is %d\n",i)); - result = SMB_REALLOC(result, sizeof(struct smb_acl_t) + - (sizeof(struct smb_acl_entry) * - (result->count+1))); - if (result == NULL) { - DEBUG(0, ("SMB_REALLOC failed\n")); - errno = ENOMEM; - DEBUG(0,("Error in AIX sys_acl_get_file is %d\n",errno)); - return NULL; - } + result->acl = talloc_realloc(result, result->acl, struct smb_acl_entry, result->count+1); + if (result->acl == NULL) { + TALLOC_FREE(result); + DEBUG(0, ("talloc_realloc failed\n")); + errno = ENOMEM; + DEBUG(0,("Error in AIX sys_acl_get_file is %d\n",errno)); + return NULL; + } ace = &result->acl[result->count]; - ace->uid = 0; - ace->gid = 0; - DEBUG(10,("ace->uid = %d\n",ace->uid)); + ace->info.user.uid = 0; + ace->info.group.gid = 0; + DEBUG(10,("ace->info.user.uid = %d\n",ace->info.user.uid)); switch(i) { case 2: @@ -290,7 +287,7 @@ struct acl *aixacl_smb_to_aixacl(SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl) ace_id->id_type = (smb_entry->a_type==SMB_ACL_GROUP) ? ACEID_GROUP : ACEID_USER; DEBUG(10,("The id type is %d\n",ace_id->id_type)); ace_id->id_len = sizeof(struct ace_id); /* contains 1 id_data */ - ace_id->id_data[0] = (smb_entry->a_type==SMB_ACL_GROUP) ? smb_entry->gid : smb_entry->uid; + ace_id->id_data[0] = (smb_entry->a_type==SMB_ACL_GROUP) ? smb_entry->info.group.gid : smb_entry->info.user.uid; } return file_acl; |