kazmax - Linux で自宅サーバー

getgrouplist - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. バグ
  6. 準拠
  7. バージョン
  8. 関連項目

名前

getgrouplist - ユーザが所属するグループのリスト

書式


#include <grp.h>
int getgrouplist (const char * user , gid_t group ,
gid_t * groups , int * ngroups );

説明

getgrouplist ()関数は user が所属する全てのグループをグループデータベースで調べる。 グループ ID * ngroups までに対応するグループが、配列 groups に格納される; この関数からの返り値は、実際に格納されたグループ ID の数である。 グループ groupgetgrouplist ()で返されるグループのリストに自動的に含められる。

返り値

見つかった全てのグループの数より * ngroups が小さい場合、 getgrouplist ()は値 `-1' を返す。 成功した場合も、失敗した場合も、実際のグループの数が * ngroups に格納される。

バグ

この関数の glibc 2.3.2 での実装は間違えている: 実際のグループの数が * ngroups より大きい場合、メモリを上書きしてしまう。

準拠

この関数は非標準である。ほとんどの BSD に存在する。

バージョン

この関数は glibc 2.2.4 から存在する。

/* これは glibc 2.3.2 ではクラッシュする。*/
#include <stdio.h>
#include <stdlib.h>
#include <grp.h>
#include <pwd.h>


int main() { int i, ng = 0; char *user = "who"; /* ユーザ名をここに書く。*/ gid_t *groups = NULL; struct passwd *pw = getpwnam(user); if (pw == NULL) return 0;
if (getgrouplist(user, pw->pw_gid, NULL, &ng) < 0) { groups = (gid_t *) malloc(ng * sizeof (gid_t)); getgrouplist(user, pw->pw_gid, groups, &ng); }
for(i = 0; i < ng; i++) printf("%d\n", groups[i]);
return 0; }

関連項目

getgroups (3), setgroups (3)