The branch, v3-4-test has been updated via ce060ae... s3:posix_acls: Fix bug 6841 - "map acl inherit = yes" not working. from 22332e0... Second part of fix for 6875 - trans2 FIND_FIRST2 response --> FIND_FIRST2 Data -> Fille Attributes are returned as 0x220 for LANMAN2.1 dialect
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test - Log ----------------------------------------------------------------- commit ce060ae48d71e8988282b16f8348ca0b0434cfde Author: Jeremy Allison <j...@samba.org> Date: Fri Dec 18 13:46:13 2009 +0100 s3:posix_acls: Fix bug 6841 - "map acl inherit = yes" not working. The code to read the new V2 SAMBA_PAI entries had two errors. Jeremy. ----------------------------------------------------------------------- Summary of changes: source3/smbd/posix_acls.c | 37 +++++++++++++++++++++++++++++-------- 1 files changed, 29 insertions(+), 8 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/smbd/posix_acls.c b/source3/smbd/posix_acls.c index 766c7b0..3b6f70b 100644 --- a/source3/smbd/posix_acls.c +++ b/source3/smbd/posix_acls.c @@ -181,6 +181,7 @@ static char *create_pai_buf_v2(canon_ace *file_ace_list, char *entry_offset = NULL; unsigned int num_entries = 0; unsigned int num_def_entries = 0; + unsigned int i; for (ace_list = file_ace_list; ace_list; ace_list = ace_list->next) { num_entries++; @@ -207,8 +208,12 @@ static char *create_pai_buf_v2(canon_ace *file_ace_list, SSVAL(pai_buf,PAI_V2_NUM_ENTRIES_OFFSET,num_entries); SSVAL(pai_buf,PAI_V2_NUM_DEFAULT_ENTRIES_OFFSET,num_def_entries); + DEBUG(10,("create_pai_buf_v2: sd_type = 0x%x\n", + (unsigned int)sd_type )); + entry_offset = pai_buf + PAI_V2_ENTRIES_BASE; + i = 0; for (ace_list = file_ace_list; ace_list; ace_list = ace_list->next) { uint8_t type_val = (uint8_t)ace_list->owner_type; uint32_t entry_val = get_entry_val(ace_list); @@ -216,6 +221,12 @@ static char *create_pai_buf_v2(canon_ace *file_ace_list, SCVAL(entry_offset,0,ace_list->ace_flags); SCVAL(entry_offset,1,type_val); SIVAL(entry_offset,2,entry_val); + DEBUG(10,("create_pai_buf_v2: entry %u [0x%x] [0x%x] [0x%x]\n", + i, + (unsigned int)ace_list->ace_flags, + (unsigned int)type_val, + (unsigned int)entry_val )); + i++; entry_offset += PAI_V2_ENTRY_LENGTH; } @@ -226,6 +237,12 @@ static char *create_pai_buf_v2(canon_ace *file_ace_list, SCVAL(entry_offset,0,ace_list->ace_flags); SCVAL(entry_offset,1,type_val); SIVAL(entry_offset,2,entry_val); + DEBUG(10,("create_pai_buf_v2: entry %u [0x%x] [0x%x] [0x%x]\n", + i, + (unsigned int)ace_list->ace_flags, + (unsigned int)type_val, + (unsigned int)entry_val )); + i++; entry_offset += PAI_V2_ENTRY_LENGTH; } @@ -399,6 +416,8 @@ static bool get_pai_owner_type(struct pai_entry *paie, const char *entry_offset) DEBUG(10,("get_pai_owner_type: world ace\n")); break; default: + DEBUG(10,("get_pai_owner_type: unknown type %u\n", + (unsigned int)paie->owner_type )); return false; } return true; @@ -485,12 +504,13 @@ static struct pai_val *create_pai_val_v1(const char *buf, size_t size) ************************************************************************/ static const char *create_pai_v2_entries(struct pai_val *paiv, + unsigned int num_entries, const char *entry_offset, bool def_entry) { - int i; + unsigned int i; - for (i = 0; i < paiv->num_entries; i++) { + for (i = 0; i < num_entries; i++) { struct pai_entry *paie = SMB_MALLOC_P(struct pai_entry); if (!paie) { return NULL; @@ -498,9 +518,7 @@ static const char *create_pai_v2_entries(struct pai_val *paiv, paie->ace_flags = CVAL(entry_offset,0); - entry_offset++; - - if (!get_pai_owner_type(paie, entry_offset)) { + if (!get_pai_owner_type(paie, entry_offset+1)) { return NULL; } if (!def_entry) { @@ -540,15 +558,18 @@ static struct pai_val *create_pai_val_v2(const char *buf, size_t size) entry_offset = buf + PAI_V2_ENTRIES_BASE; - DEBUG(10,("create_pai_val_v2: num_entries = %u, num_def_entries = %u\n", + DEBUG(10,("create_pai_val_v2: sd_type = 0x%x num_entries = %u, num_def_entries = %u\n", + (unsigned int)paiv->sd_type, paiv->num_entries, paiv->num_def_entries )); - entry_offset = create_pai_v2_entries(paiv, entry_offset, false); + entry_offset = create_pai_v2_entries(paiv, paiv->num_entries, + entry_offset, false); if (entry_offset == NULL) { free_inherited_info(paiv); return NULL; } - entry_offset = create_pai_v2_entries(paiv, entry_offset, true); + entry_offset = create_pai_v2_entries(paiv, paiv->num_def_entries, + entry_offset, true); if (entry_offset == NULL) { free_inherited_info(paiv); return NULL; -- Samba Shared Repository