我在嵌入式设备上使用LTP(Linux测试项目)。设备卡在测试用例setfsgid03中的while循环中,因为getgrgid()
在被NULL
调用时总是返回nobody
。
当root
在嵌入式设备上调用时,它可以正常工作。当nobody
调用x86 linux主机时,它可以正常工作。
这是由设备上的linux的任何配置引起的吗?
相关代码段如下:
gid = 1;
while (!getgrgid(gid))
gid++;
答案 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则失败。找到一条记录。