我想通过NSS发送请求来获取用户的补充组列表。我的心目当中,下面的程序应该让我列举所有组(这样我就可以再比较成员):枚举C程序中的补充组
#include <stdio.h>
#include <grp.h>
#include <stdlib.h>
struct group *groupStruct;
int main(){
setgrent();
while (groupStruct=getgrent())
printf("%s\n", groupStruct->gr_name);
endgrent();
return 0;
}
我立足的源代码,这部分这一假设为id
的是它和id -Gn
执行(因为这是我想要复制的功能)。看看它看起来像通过getugroups (0, NULL, username, gid)
得到的组列表getugroups()
被定义在另一个文件(基本上相同的代码发现here)。它看起来像正在经历与上面相同的setgrent()/ getgrent()过程,所以我的感觉是我的简单程序应该枚举系统组(相反,它只对/etc/group
有效,但我对此有winbind机器和id -Gn
拉在winbind组中的用户是成员)。
您的称谓说“gentent”;你的意思是“getent”吗? –
是的,它甚至不是我的问题的准确标题。更新到更接近标记的地方。尽管如此,仍然有兴趣知道不同之处。 – Bratchley
我设法在问题发生时错过了这个问题,但是您的解决方案或多或少是需要的。我可以给你一个关于具有相同组号但不同组名称的多个条目如何工作,以及具有不同组号的同名名称如何工作的长篇论文,但是这可能不值得。 'getgroups()'函数返回辅助组ID号;您可以使用'getgrgid()'来查找与每个这样的组相对应的名称。 –