1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-12 20:58:37 +03:00

Split the one sys_acl_free call into sys_acl_free_TYPE calls, to allow

easier wrapping of non-POSIX ACL interfaces.
Jeremy.
This commit is contained in:
Jeremy Allison -
parent a83702c99f
commit 1a31b4eb08
3 changed files with 42 additions and 19 deletions

View File

@ -17,9 +17,6 @@ void cmd_tar(void);
int process_tar(void);
int tar_parseargs(int argc, char *argv[], char *Optarg, int Optind);
/*The following definitions come from groupdb/mapping.c */
/*The following definitions come from lib/access.c */
BOOL allow_access(char *deny_list,char *allow_list,
@ -250,22 +247,24 @@ int sys_acl_get_permset( SMB_ACL_ENTRY_T entry_d, SMB_ACL_PERMSET_T *permset_p);
void *sys_acl_get_qualifier( SMB_ACL_ENTRY_T entry_d);
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);
int sys_acl_free( void *obj_p);
int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset);
int sys_acl_add_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
int sys_acl_get_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
char *sys_acl_to_text( SMB_ACL_T the_acl, ssize_t *plen);
int sys_acl_free_text(char *text);
int sys_acl_free_acl(SMB_ACL_T the_acl) ;
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);
void *sys_acl_get_qualifier( SMB_ACL_ENTRY_T entry_d);
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);
int sys_acl_free( void *obj_p);
int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset);
int sys_acl_add_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
int sys_acl_get_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
char *sys_acl_to_text( SMB_ACL_T the_acl, ssize_t *plen);
int sys_acl_free_text(char *text);
int sys_acl_free_acl(SMB_ACL_T the_acl) ;
/*The following definitions come from lib/system.c */
@ -668,6 +667,9 @@ uint32 cli_lsa_lookup_sids(struct cli_state *cli, POLICY_HND *hnd,
uint32 cli_lsa_lookup_names(struct cli_state *cli, POLICY_HND *hnd,
int num_names, char **names, DOM_SID **sids,
uint32 **types, int *num_sids);
uint32 cli_lsa_query_info_policy(struct cli_state *cli, POLICY_HND *hnd,
uint16 info_class, fstring domain_name,
DOM_SID * domain_sid);
/*The following definitions come from libsmb/cliconnect.c */

View File

@ -36,7 +36,6 @@ extern int DEBUGLEVEL;
void *sys_acl_get_qualifier( SMB_ACL_ENTRY_T entry_d)
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)
int sys_acl_free( void *obj_p)
int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset);
int sys_acl_add_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm);
char *sys_acl_to_text( SMB_ACL_T acl, ssize_t *plen)
@ -45,6 +44,18 @@ extern int DEBUGLEVEL;
More POSIX braindamage.
int sys_acl_get_perm( SMB_ACL_PERMSET_T permset, SMB_ACL_PERM_T perm)
The generic POSIX free is the following call. We split this into
several different free functions as we may need to add tag info
to structures when emulating the POSIX interface.
int sys_acl_free( void *obj_p)
The calls we actually use are :
int sys_acl_free_text(char *text) - free acl_to_text
int sys_acl_free_acl(SMB_ACL_T posix_acl)
*/
#if defined(HAVE_POSIX_ACLS)
@ -81,11 +92,6 @@ SMB_ACL_T sys_acl_get_fd(int fd)
return acl_get_fd(fd);
}
int sys_acl_free( void *obj_p)
{
return acl_free(obj_p);
}
int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset)
{
return acl_clear_perms(permset);
@ -106,6 +112,16 @@ char *sys_acl_to_text( SMB_ACL_T the_acl, ssize_t *plen)
return acl_to_text( the_acl, plen);
}
int sys_acl_free_text(char *text)
{
return acl_free(text);
}
int sys_acl_free_acl(SMB_ACL_T the_acl)
{
return acl_free(the_acl);
}
#elif defined(HAVE_SOLARIS_ACLS)
#elif defined(HAVE_IRIX_ACLS)
@ -142,11 +158,6 @@ SMB_ACL_T sys_acl_get_fd(int fd)
return (SMB_ACL_T)NULL;
}
int sys_acl_free( void *obj_p)
{
return -1;
}
int sys_acl_clear_perms(SMB_ACL_PERMSET_T permset)
{
return -1;
@ -166,4 +177,14 @@ char *sys_acl_to_text( SMB_ACL_T the_acl, ssize_t *plen)
{
return NULL;
}
int sys_acl_free_text(char *text)
{
return -1;
}
int sys_acl_free_acl(SMB_ACL_T the_acl)
{
return -1;
}
#endif /* No ACLs. */

View File

@ -544,7 +544,7 @@ static canon_ace *canonicalise_acl( SMB_ACL_T posix_acl, SMB_STRUCT_STAT *psbuf)
dbgtext("canonicalize_acl: processed acl %s\n", acl_text == NULL ? "NULL" : acl_text );
if (acl_text)
sys_acl_free(acl_text);
sys_acl_free_text(acl_text);
}
return list_head;
@ -688,9 +688,9 @@ size_t get_nt_acl(files_struct *fsp, SEC_DESC **ppdesc)
done:
if (posix_acl)
sys_acl_free(posix_acl);
sys_acl_free_acl(posix_acl);
if (dir_acl)
sys_acl_free(dir_acl);
sys_acl_free_acl(dir_acl);
if (file_ace)
free_canon_ace_list(file_ace);
if (dir_ace)