2

这是 MacOS 上的一个已知问题,提供的命令行工具 (chmod) 无法从符号链接中删除 ACL:https ://discussions.apple.com/thread/1440377?start=0&tstart=0

所以我想我应该打破 C 编译器并完成它.. 在我意识到上次在 Unix 上使用 C 时还没有发明 ACL 之前。

谁能说出什么系统调用(首选 MacOS,如果这还不是 Unix 范围的标准)我可以利用它来实现这一点吗?

M。

4

1 回答 1

0

该函数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);
}
于 2022-01-19T17:08:48.747 回答