繁体   English   中英

如何检查用户是否具有执行权限?

[英]How can I check to see if user has execute permissions?

我想知道如何检查“用户”(运行此程序的用户除外)是否对文件具有执行权限? [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);
}

有没有人看到这个错误?

您需要调用stat(2),它返回文件所有者,所有者组和其他人的权限位。 您必须找出您感兴趣的用户的ID并且需要其组:请参阅getpwent(3)和getgrouplist(3)。 匹配的第一个将给出结果权限。

从命令行,您可以轻松地使用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获取文件stat块

fstat(fd, &bufr)

并查看bufr.st_mode

这是fstat的描述。

更新

我会注意到,当OP最初发布时,不清楚C API是否是所期望的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM