假设我正在使用系统调用创建具有某些名称和模式参数的文件或目录,并且操作失败并显示EEXIST
.
假设我知道我当前umask
的euid
、 和egid
,如何判断现有文件/目录是否具有与操作成功时系统调用所创建的权限等效的权限。
AFAIK,对于经典权限,如果
.st_gid == egid && .st_uid == euid && (.st_mode & 07777) == (RequestedMode & 07777 & ~CurrentUmask)
发现/预期的文件类型匹配,答案将是真实的。
如何将其扩展到具有访问控制列表的系统?
要将其扩展到 ACL,您将
acl_get_file
使用创建文件的路径进行调用,并ACL_TYPE_DEFAULT
请求目录上的默认 ACL。如果有,那就是默认情况下将应用于您尝试创建的文件的 ACL。然后,您将
acl_get_file
在现有文件上使用ACL_TYPE_ACCESS
, 来检索文件上的实际 ACL。我认为没有用于比较 ACL 的 ACL 函数,因此留给读者作为练习。