Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       getgrouplist - obține lista de grupuri din care face parte un utilizator

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <grp.h>

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

   Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

       getgrouplist():
           Începând cu glibc 2.19:
               _DEFAULT_SOURCE
           glibc 2.19 și versiunile anterioare:
               _BSD_SOURCE

DESCRIERE

       Funcția  getgrouplist()  analizează baza de date a grupurilor (a se vedea group(5)) pentru a obține lista
       grupurilor din care face parte user. Până la *ngroups din  aceste  grupuri  sunt  returnate  în  matricea
       groups.

       Dacă  nu  se  află printre grupurile definite pentru user în baza de date a grupurilor, atunci group este
       inclus în lista de grupuri returnată de getgrouplist(); de obicei,  acest  argument  este  specificat  ca
       fiind ID-ul grupului din înregistrarea parolei pentru user.

       Argumentul ngroups este un argument valoare-rezultat: la returnare conține întotdeauna numărul de grupuri
       găsite pentru user, inclusiv group; această valoare poate fi mai mare decât numărul de grupuri stocate în
       groups.

VALOAREA RETURNATĂ

       Dacă  numărul de grupuri din care face parte user este mai mic sau egal cu *ngroups, atunci se returnează
       valoarea *ngroups.

       Dacă utilizatorul este membru a mai mult de *ngroups grupuri, atunci  getgrouplist()  returnează  -1.  În
       acest  caz, valoarea returnată în *ngroups poate fi utilizată pentru a redimensiona memoria tampon pasată
       la un apel ulterior la getgrouplist().

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
       ┌──────────────────────────────────────────────────────────────────┬───────────────────┬────────────────┐
       │ InterfațăAtributValoare        │
       ├──────────────────────────────────────────────────────────────────┼───────────────────┼────────────────┤
       │ getgrouplist()                                                   │ Siguranța firelor │ MT-Safe locale │
       └──────────────────────────────────────────────────────────────────┴───────────────────┴────────────────┘

STANDARDE

       Niciunul.

ISTORIC

       glibc 2.2.4.

ERORI

       Înainte de glibc 2.3.3, implementarea acestei funcții conține o eroare de  depășire  a  memoriei  tampon:
       aceasta  returnează  lista  completă  a  grupurilor pentru utilizatorul user în matricea groups, chiar și
       atunci când numărul de grupuri depășește *ngroups.

EXEMPLE

       Programul de mai jos afișează lista de grupuri pentru utilizatorul menționat în primul  său  argument  de
       linie  de  comandă.  Al  doilea argument din linia de comandă specifică valoarea lui ngroups care trebuie
       furnizată lui getgrouplist(). Următoarea sesiune shell prezintă 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 <errno.h>
       #include <grp.h>
       #include <pwd.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(int argc, char *argv[])
       {
            int            ngroups;
           gid_t          *groups;
           struct group   *gr;
           struct passwd  *pw;

           if (argc != 3) {
               fprintf(stderr, "Utilizare: %s <user> <ngroups>\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           ngroups = atoi(argv[2]);

           groups = malloc(sizeof(*groups) * ngroups);
           if (groups == NULL) {
               perror("malloc");
               exit(EXIT_FAILURE);
           }

           /* Obține structura passwd (conține primul ID de grup pentru utilizator). */

           errno = 0
           pw = getpwnam(argv[1]);
           if (pw == NULL) {
               if (errno)
                   perror("getpwnam");
               else
                   fprintf(stderr, "nu există 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);
           }

           /* Afișează lista grupurilor recuperate, împreună 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);
       }

CONSULTAȚI ȘI

       getgroups(2), setgroups(2), getgrent(3), group_member(3), group(5), passwd(5)

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                   15 iunie 2024                                  getgrouplist(3)