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