这是 MacOS 上的一个已知问题,提供的命令行工具 (chmod) 无法从符号链接中删除 ACL:https ://discussions.apple.com/thread/1440377?start=0&tstart=0
所以我想我应该打破 C 编译器并完成它.. 在我意识到上次在 Unix 上使用 C 时还没有发明 ACL 之前。
谁能说出什么系统调用(首选 MacOS,如果这还不是 Unix 范围的标准)我可以利用它来实现这一点吗?
M。
这是 MacOS 上的一个已知问题,提供的命令行工具 (chmod) 无法从符号链接中删除 ACL:https ://discussions.apple.com/thread/1440377?start=0&tstart=0
所以我想我应该打破 C 编译器并完成它.. 在我意识到上次在 Unix 上使用 C 时还没有发明 ACL 之前。
谁能说出什么系统调用(首选 MacOS,如果这还不是 Unix 范围的标准)我可以利用它来实现这一点吗?
M。
该函数acl_get_link_np(path, ACL_TYPE_EXTENDED)
应该允许您在不遵循符号链接的情况下获取路径的 ACL。
另外,我认为acl_get_link_np(fd, ACL_TYPE_EXTENDED)
如果您首先使用open(path, O_NOFOLLOW)
.
要从文件中删除所有 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);
}