我在嵌入式设备上使用了 LTP(Linux 测试项目)。设备卡在测试用例setfsgid03中的while循环中,因为getgrgid()
在被nobody
调用时总是返回NULL
。
它在嵌入式设备上被 root
调用时工作正常。当它被 nobody
调用时,它在 x86 linux 主机上工作正常。
是否是设备上的linux配置导致的?
相关代码片段如下:
gid = 1;
while (!getgrgid(gid))
gid++;
最佳答案
getgrgid
将从 /etc/group
中读取条目或者更普遍地使用 Glibc 来自 /etc/nsswitch.conf
中指定的来源.如果/etc/group
不存在或除 gid
外没有其他组那么此代码将至少循环直到 gid
的环绕/签名溢出.如果只有 nobody
的条目在 pid -2
也需要很长时间才能找到 pid
.
总而言之,代码非常糟糕。我只是确保 /etc/group
中有一个条目用 GID 2 说; 正确的 找到定义的非 root gid 的方法是使用 getgrent_r
依次直到返回的记录有gr_gid
!= 0,如果在找到这样一条记录之前返回 NULL,则失败。
关于c - 函数 getgrgid() 在无人调用时返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51436489/