我正在写一个为给定的用户/组设置acl权限的程序。与“ setfacl”命令非常相似。
根据给定的用户/组,我首先搜索条目是否已存在。如果得到NULL,则调用acl_create_entry。通过acl_check检查ACL时,我得到一个ACL_ENTRY_ERROR。
该功能类似于以下内容:

/*ar_pobj=Path or file name, ar_tagType=ACL_USER or ACL_GROUP, ar_ptagQual=User name or group name, ar_pperms=string with permissions "rwx-"*/
int addPermissions(char *ar_pobj, acl_tag_t ar_tagType, char *ar_ptagQual, char *ar_pperms)
{
    acl_t la_acl;
    id_t la_qual;
    acl_entry_t la_entry;
    int la_error;

    la_acl=acl_get_file(par_obj,ACL_TYPE_ACCESS);
    if (la_acl == NULL)
    {
        return -1;
    }
    switch(ar_tagType)
    {
    case ACL_USER:
        la_qual=userIdFromName(ar_ptagQual);/*This function works fine*/
        if(-1==la_qual)
        {
            acl_free(la_acl);
            return -1;
        }
        break;
    case ACL_GROUP:
        la_qual=groupIdFromName(ar_ptagQual);/*This function works fine*/
        if(-1==la_qual)
        {
            acl_free(la_acl);
            return -1;
        }
        break;
    default:
        acl_free(la_acl);
        return -1;
    }
    la_entry = findEntry(la_acl,ar_tagType,la_qual);/*This function returns NULL as the entry was not found*/

    if(NULL==la_entry)
    {
        if (acl_create_entry(&la_acl, &la_entry) == -1)/*Returns OK*/
        {
            acl_free(la_acl);
            return -1;
        }
        la_error=acl_check(la_acl,NULL);/*HERE IS WHERW I GET THE ERROR*/
        ...
    }
    ...
}


有什么线索吗?先感谢您。
编辑如果未设置标签类型和限定符,则总是会发生此错误。但这样做后我仍然得到它

最佳答案

问题解决了!问题是我忘记了重新计算ACL掩码。在调用acl_set_file之前立即调用acl_calc_mask(&la_acl)解决了该问题。

关于linux - 在Linux上的acl_create_entry之后获取ACL_ENTRY_ERROR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23867330/

10-12 00:43