我想知道如何检查“用户”(除了运行此程序的人) 对文件有执行权限? [C api]
我查看了“访问”,它提供了与来电者有关的信息。
我正在寻找类似的东西: -
"<cmd> <user_name> <file_name>"
这里我想知道<user_name>
是否具有<file_name>
的执行权限?
我正在寻找C api?
可能的解决方案: - 我使用以下算法获取此信息
boolean_t
is_user_has_execute_permissions(char *run_as_user)
{
/* Check world execute permission */
if ((cmd_stat.st_mode & S_IXOTH) == S_IXOTH) {
return (TRUE);
}
/* group id for run_as_user */
getpwnam_r(run_as_user, &pw, buf, passwd_len);
/* Check group execute permission */
if ((cmd_stat.st_mode & S_IXGRP) == S_IXGRP) {
if (pw->pw_gid == cmd_stat.st_gid)
return (TRUE);
}
return (FALSE);
}
有没有人在这个中看到任何错误?
答案 0 :(得分:2)
您需要调用stat(2),它返回文件所有者,所有者组和其他人的权限位。您必须找出您感兴趣的用户的ID并且需要其组:请参阅getpwent(3)和getgrouplist(3)。匹配的第一个将给出结果权限。
答案 1 :(得分:-1)
从命令行,您可以轻松地使用Awk程序。像
这样的东西ls -l filename | awk -F '{ if (substring($1,3,1) == "x" exit(0); exit(1)}'
如果找到则将返回代码设置为0,如果不是则将其设置为1。
从C程序中,您想使用fstat
。基本上你打开文件
int fd = fopen("filename", "r");
然后使用fstat
fstat(fd, &bufr)
并查看bufr.st_mode
。
以下是fstat的说明。
<强>更新强>
我会注意到,当OP最初发布时,不清楚C API是否是所期望的。