当没有人调用时,函数getgrgid()返回NULL

时间:2018-07-20 06:39:47

标签: c linux embedded-linux

我在嵌入式设备上使用LTP(Linux测试项目)。设备卡在测试用例setfsgid03中的while循环中,因为getgrgid()在被NULL调用时总是返回nobody。 当root在嵌入式设备上调用时,它可以正常工作。当nobody调用x86 linux主机时,它可以正常工作。

这是由设备上的linux的任何配置引起的吗?

相关代码段如下:

gid = 1;
while (!getgrgid(gid))
    gid++;

1 个答案:

答案 0 :(得分:0)

getgrgid将从/etc/group或Glibc更广泛地从/etc/nsswitch.conf中指定的源中读取条目。如果/etc/group不存在或除gid外没有其他组,则此代码将至少循环直到gid的环绕/有符号溢出为止。如果在nobody上只有{em> 个-2条目,那么找到该pid也会花费很多时间。

总而言之,代码很糟糕。我只是确保/etc/group中有一个条目,其GID为2;找到已定义的非root用户的正确方法是依次使用getgrent_r直到返回的记录具有gr_gid!= 0为止,如果在此之前返回NULL则失败。找到一条记录。