mirror of
https://github.com/samba-team/samba.git
synced 2025-03-12 20:58:37 +03:00
Michael Davidson <md@sco.COM> pointed out that acl_get_qualifier can potentially
return a malloced area so added sys_acl_free_qualifier() calls to all supported ACL interfaces to code with this (only Linux needs actual free call). Jeremy.
This commit is contained in:
parent
192887fe72
commit
5870e6019b
@ -255,6 +255,7 @@ int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
|
||||
int sys_acl_set_fd( int fd, SMB_ACL_T theacl);
|
||||
int sys_acl_free_text(char *text);
|
||||
int sys_acl_free_acl(SMB_ACL_T the_acl) ;
|
||||
int sys_acl_free_qualifier(void *qual) ;
|
||||
int sys_acl_get_entry(SMB_ACL_T acl_d, int entry_id, SMB_ACL_ENTRY_T *entry_p);
|
||||
int sys_acl_get_tag_type(SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *type_p);
|
||||
int sys_acl_get_permset(SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
|
||||
@ -275,6 +276,7 @@ int sys_acl_set_file(char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
|
||||
int sys_acl_set_fd(int fd, SMB_ACL_T acl_d);
|
||||
int sys_acl_free_text(char *text);
|
||||
int sys_acl_free_acl(SMB_ACL_T acl_d) ;
|
||||
int sys_acl_free_qualifier(void *qual) ;
|
||||
int sys_acl_get_entry(SMB_ACL_T acl_d, int entry_id, SMB_ACL_ENTRY_T *entry_p);
|
||||
int sys_acl_get_tag_type(SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *type_p);
|
||||
int sys_acl_get_permset(SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
|
||||
@ -295,6 +297,7 @@ int sys_acl_set_file(char *name, SMB_ACL_TYPE_T type, SMB_ACL_T acl_d);
|
||||
int sys_acl_set_fd(int fd, SMB_ACL_T acl_d);
|
||||
int sys_acl_free_text(char *text);
|
||||
int sys_acl_free_acl(SMB_ACL_T acl_d) ;
|
||||
int sys_acl_free_qualifier(void *qual) ;
|
||||
int sys_acl_get_entry( SMB_ACL_T the_acl, int entry_id, SMB_ACL_ENTRY_T *entry_p);
|
||||
SMB_ACL_T sys_acl_get_file( const char *path_p, SMB_ACL_TYPE_T type);
|
||||
SMB_ACL_T sys_acl_get_fd(int fd);
|
||||
@ -315,6 +318,7 @@ int sys_acl_set_qualifier( SMB_ACL_ENTRY_T entry_d, void *qual_p);
|
||||
int sys_acl_set_permset( SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T permset_d);
|
||||
int sys_acl_free_text(char *text);
|
||||
int sys_acl_free_acl(SMB_ACL_T the_acl) ;
|
||||
int sys_acl_free_qualifier(void *qual) ;
|
||||
int sys_acl_get_entry( SMB_ACL_T the_acl, int entry_id, SMB_ACL_ENTRY_T *entry_p);
|
||||
int sys_acl_get_tag_type( SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p);
|
||||
int sys_acl_get_permset( SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
|
||||
@ -335,6 +339,7 @@ int sys_acl_valid( SMB_ACL_T theacl );
|
||||
int sys_acl_set_file( char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
|
||||
int sys_acl_set_fd( int fd, SMB_ACL_T theacl);
|
||||
int sys_acl_free_acl(SMB_ACL_T the_acl) ;
|
||||
int sys_acl_free_qualifier(void *qual) ;
|
||||
|
||||
/*The following definitions come from lib/system.c */
|
||||
|
||||
|
@ -63,6 +63,7 @@ extern int DEBUGLEVEL;
|
||||
|
||||
int sys_acl_free_text(char *text) - free acl_to_text
|
||||
int sys_acl_free_acl(SMB_ACL_T posix_acl)
|
||||
int sys_acl_free_qualifier(SMB_ACL_T posix_acl)
|
||||
|
||||
*/
|
||||
|
||||
@ -170,6 +171,11 @@ int sys_acl_free_acl(SMB_ACL_T the_acl)
|
||||
return acl_free(the_acl);
|
||||
}
|
||||
|
||||
int sys_acl_free_qualifier(void *qual)
|
||||
{
|
||||
return acl_free(qual);
|
||||
}
|
||||
|
||||
#elif defined(HAVE_UNIXWARE_ACLS) || defined(HAVE_SOLARIS_ACLS)
|
||||
|
||||
/*
|
||||
@ -762,6 +768,11 @@ int sys_acl_free_acl(SMB_ACL_T acl_d)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sys_acl_free_qualifier(void *qual)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif defined(HAVE_IRIX_ACLS)
|
||||
|
||||
int sys_acl_get_entry(SMB_ACL_T acl_d, int entry_id, SMB_ACL_ENTRY_T *entry_p)
|
||||
@ -1007,6 +1018,11 @@ int sys_acl_free_acl(SMB_ACL_T acl_d)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sys_acl_free_qualifier(void *qual)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#elif defined(HAVE_XFS_ACLS)
|
||||
/* For Linux SGI/XFS Filesystems
|
||||
* contributed by J Trostel, Connex
|
||||
@ -1221,6 +1237,11 @@ int sys_acl_free_acl(SMB_ACL_T the_acl)
|
||||
return acl_free(the_acl);
|
||||
}
|
||||
|
||||
int sys_acl_free_qualifier(void *qual)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* No ACLs. */
|
||||
|
||||
int sys_acl_get_entry( SMB_ACL_T the_acl, int entry_id, SMB_ACL_ENTRY_T *entry_p)
|
||||
@ -1342,4 +1363,11 @@ int sys_acl_free_acl(SMB_ACL_T the_acl)
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int sys_acl_free_qualifier(void *qual)
|
||||
{
|
||||
errno = ENOSYS;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif /* No ACLs. */
|
||||
|
@ -1319,6 +1319,7 @@ static canon_ace *canonicalise_acl( files_struct *fsp, SMB_ACL_T posix_acl, SMB_
|
||||
uid_to_sid( &sid, *puid);
|
||||
unix_ug.uid = *puid;
|
||||
owner_type = UID_ACE;
|
||||
sys_acl_free_qualifier((void *)puid);
|
||||
break;
|
||||
}
|
||||
case SMB_ACL_GROUP_OBJ:
|
||||
@ -1337,6 +1338,7 @@ static canon_ace *canonicalise_acl( files_struct *fsp, SMB_ACL_T posix_acl, SMB_
|
||||
gid_to_sid( &sid, *pgid);
|
||||
unix_ug.gid = *pgid;
|
||||
owner_type = GID_ACE;
|
||||
sys_acl_free_qualifier((void *)pgid);
|
||||
break;
|
||||
}
|
||||
case SMB_ACL_MASK:
|
||||
|
Loading…
x
Reference in New Issue
Block a user