table of contents
- bookworm-backports 4.24.0-2~bpo12+1
- testing 4.24.0-2
- unstable 4.24.0-2
getgrouplist(3) | Library Functions Manual | getgrouplist(3) |
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);
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ță | Atribut | Valoare |
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, "no such user\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.
2 mai 2024 | Pagini de manual de Linux 6.8 |