getgrouplist(3) Library Functions Manual getgrouplist(3) NUME getgrouplist - obine lista de grupuri din care face parte un utilizator BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int getgrouplist(const char *user, gid_t group, gid_t *groups, int *ngroups); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): getgrouplist(): Incepand cu glibc 2.19: _DEFAULT_SOURCE glibc 2.19 i versiunile anterioare: _BSD_SOURCE DESCRIERE Funcia getgrouplist() analizeaza baza de date a grupurilor (a se vedea group(5)) pentru a obine lista grupurilor din care face parte user. Pana la *ngroups din aceste grupuri sunt returnate in matricea groups. Daca nu se afla printre grupurile definite pentru user in baza de date a grupurilor, atunci group este inclus in lista de grupuri returnata de getgrouplist(); de obicei, acest argument este specificat ca fiind ID-ul grupului din inregistrarea parolei pentru user. Argumentul ngroups este un argument valoare-rezultat: la returnare conine intotdeauna numarul de grupuri gasite pentru user, inclusiv group; aceasta valoare poate fi mai mare decat numarul de grupuri stocate in groups. VALOAREA RETURNATA Daca numarul de grupuri din care face parte user este mai mic sau egal cu *ngroups, atunci se returneaza valoarea *ngroups. Daca utilizatorul este membru a mai mult de *ngroups grupuri, atunci getgrouplist() returneaza -1. In acest caz, valoarea returnata in *ngroups poate fi utilizata pentru a redimensiona memoria tampon pasata la un apel ulterior la getgrouplist(). ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +-------------------------------+---------------------+----------------+ |Interfaa | Atribut | Valoare | +-------------------------------+---------------------+----------------+ |getgrouplist() | Sigurana firelor | MT-Safe locale | +-------------------------------+---------------------+----------------+ STANDARDE Niciunul. ISTORIC glibc 2.2.4. ERORI Inainte de glibc 2.3.3, implementarea acestei funcii conine o eroare de depaire a memoriei tampon: aceasta returneaza lista completa a grupurilor pentru utilizatorul user in matricea groups, chiar i atunci cand numarul de grupuri depaete *ngroups. EXEMPLE Programul de mai jos afieaza lista de grupuri pentru utilizatorul menionat in primul sau argument de linie de comanda. Al doilea argument din linia de comanda specifica valoarea lui ngroups care trebuie furnizata lui getgrouplist(). Urmatoarea sesiune shell prezinta exemple de utilizare a acestui program: $ ./a.out cecilia 0 getgrouplist() returned -1; ngroups = 3 $ ./a.out cecilia 3 ngroups = 3 16 (dialout) 33 (video) 100 (users) Sursa programului #include #include #include #include #include int main(int argc, char *argv[]) { int ngroups; gid_t *groups; struct group *gr; struct passwd *pw; if (argc != 3) { fprintf(stderr, "Utilizare: %s \n", argv[0]); exit(EXIT_FAILURE); } ngroups = atoi(argv[2]); groups = malloc(sizeof(*groups) * ngroups); if (groups == NULL) { perror("malloc"); exit(EXIT_FAILURE); } /* Obine structura passwd (conine primul ID de grup pentru utilizator). */ errno = 0 pw = getpwnam(argv[1]); if (pw == NULL) { if (errno) perror("getpwnam"); else fprintf(stderr, "nu exista un astfel de utilizator\n"); exit(EXIT_FAILURE); } /* Preluarea listei de grupuri. */ if (getgrouplist(argv[1], pw->pw_gid, groups, &ngroups) == -1) { fprintf(stderr, "getgrouplist() returned -1; ngroups = %d\n", ngroups); exit(EXIT_FAILURE); } /* Afieaza lista grupurilor recuperate, impreuna cu numele grupurilor. */ fprintf(stderr, "ngroups = %d\n", ngroups); for (size_t j = 0; j < ngroups; j++) { printf("%d", groups[j]); gr = getgrgid(groups[j]); if (gr != NULL) printf(" (%s)", gr->gr_name); printf("\n"); } exit(EXIT_SUCCESS); } CONSULTAI I getgroups(2), setgroups(2), getgrent(3), group_member(3), group(5), passwd(5) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.12 23 iulie 2024 getgrouplist(3)