MacOS上的一个已知问题是,提供的命令行工具(chmod)无法从符号链接中删除ACL:https://discussions.apple.com/thread/1440377?start=0&tstart=0
所以我想我应该破解C编译器并完成它。。在我意识到ACL还没有发明之前,我上次在Unix上使用C。
有人能说出我可以利用什么系统来实现这一点吗?
M。
函数acl_get_link_np(path, ACL_TYPE_EXTENDED)
应该可以让您在没有以下符号链接的情况下获得路径的ACL。
此外,我认为如果您首先使用open(path, O_NOFOLLOW)
打开符号链接,acl_get_link_np(fd, ACL_TYPE_EXTENDED)
应该可以工作。
要从文件中删除所有ACL,您需要使用以下代码:
acl_t acl = acl_get_link_np (path, ACL_TYPE_EXTENDED);
if (acl) {
acl_entry_t entry;
int res = acl_get_entry (acl, ACL_FIRST_ENTRY, &entry);
bool didModify = false;
while (res == 0) {
res = acl_delete_entry (acl, entry);
if (res) break;
didModify = true;
res = acl_get_entry (acl, ACL_NEXT_ENTRY, &entry);
}
if (didModify) {
int res = acl_set_link_np (path, ACL_TYPE_EXTENDED, acl);
if (res) {
NSLog(@"%s – Write ACL: %s", path, strerror(errno));
}
}
acl_free (acl);
}