在Linux上的acl_create_entry之后获取ACL_ENTRY_ERROR

时间:2014-05-26 09:47:06

标签: linux acl

我正在编写一个为给定用户/组设置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*/
        ...
    }
    ...
}

任何线索?先感谢您。 编辑如果您未设置标记类型和限定符,则始终会发生此错误。但是这样做之后我仍然会得到它

1 个答案:

答案 0 :(得分:0)

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