GETGROUPLIST

Section: Linux Programmer's Manual (3)
Updated: 2007-07-26
Index JM Home Page roff page
 

名前

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

書式

#include <grp.h>

int getgrouplist(const char *user, gid_t group,
gid_t *groups, int *ngroups);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

getgrouplist(): _BSD_SOURCE  

説明

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

返り値

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

バージョン

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

準拠

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

バグ

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

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

int
main(void)
{
    int i, ng = 0;
    char *user = "who";       /* ユーザ名をここに書く。 */
    gid_t *groups = NULL;
    struct passwd *pw = getpwnam(user);

    if (pw == NULL)
        exit(EXIT_SUCCESS);

    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]);

    exit(EXIT_SUCCESS);
}
 

関連項目

getgroups(2), setgroups(2)


 

Index

名前
書式
説明
返り値
バージョン
準拠
バグ
関連項目

This document was created by man2html, using the manual pages.
Time: 04:31:42 GMT, November 19, 2007