我正在编写一个为给定用户/组设置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*/
...
}
...
}
任何线索?先感谢您。 编辑如果您未设置标记类型和限定符,则始终会发生此错误。但是这样做之后我仍然会得到它
答案 0 :(得分:0)
¡问题解决了!问题是我忘了重新计算ACL掩码。在调用acl_set_file之前调用acl_calc_mask(& la_acl)解决了这个问题。