Suponha que eu esteja criando um arquivo ou diretório com algum argumento de nome e modo usando uma chamada de sistema e que as operações falhem com EEXIST
.
Supondo que eu conheça meu umask
, euid
e egid
, como posso saber se esse arquivo/diretório existente tem permissões equivalentes ao que a chamada do sistema teria criado se a operação fosse bem-sucedida.
AFAIK, para permissões clássicas, a resposta seria true iff
.st_gid == egid && .st_uid == euid && (.st_mode & 07777) == (RequestedMode & 07777 & ~CurrentUmask)
e os tipos de arquivo encontrados/esperados correspondem.
Como isso poderia ser estendido a um sistema com listas de controle de acesso?
Para estender isso para as ACLs, você chamaria
acl_get_file
com o caminho no qual está criando o arquivo eACL_TYPE_DEFAULT
solicitaria a ACL padrão no diretório. Se houver uma, essa é a ACL que seria aplicada por padrão ao arquivo que você tentou criar.Você usaria
acl_get_file
no arquivo existente, comACL_TYPE_ACCESS
, para recuperar a ACL real no arquivo.Eu não acho que exista uma função ACL para comparar ACLs, então isso fica como um exercício para o leitor.