NSS 経由でリクエストを送信して、ユーザーの補助グループのリストを取得したいと考えています。私の推測では、次のプログラムですべてのグループを列挙できるはずです (そのため、メンバーを比較できます)。
#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)
てグループのリストを取得しているように見えます (本質的に同じコードがここにあります)。上記と同じ setgrent()/getgrent() 手順を実行しているように見えるので、私の単純なプログラムはシステムのグループを列挙する必要があると感じています (代わりに、グループのみを実行しますが、このマシンには winbind があります)ユーザーがメンバーである winbind グループを取り込みます)。getugroups()
/etc/group
id -Gn