gpt4 book ai didi

linux - 在 Linux 上 acl_create_entry 后获取 ACL_ENTRY_ERROR

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:33 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com