getpwnam(3) Library Functions Manual getpwnam(3) NUME getpwnam, getpwnam_r, getpwuid, getpwuid_r - obine intrarea din fiierul de parole BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include #include struct passwd *getpwnam(const char *name); struct passwd *getpwuid(uid_t uid); int getpwnam_r(const char *restrict name, struct passwd *restrict pwd, char buf[restrict .buflen], size_t buflen, struct passwd **restrict result); int getpwuid_r(uid_t uid, struct passwd *restrict pwd, char buf[restrict .buflen], size_t buflen, struct passwd **restrict result); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): getpwnam_r(), getpwuid_r(): _POSIX_C_SOURCE || /* glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE DESCRIERE Funcia getpwnam() returneaza un indicator catre o structura care conine campurile defalcate ale inregistrarii din baza de date de parole (de exemplu, fiierul local de parole /etc/passwd, NIS i LDAP) care corespunde numelui de utilizator name. Funcia getpwuid() returneaza un indicator catre o structura care conine campurile defalcate ale inregistrarii din baza de date a parolelor care corespunde ID-ului utilizatorului uid. Structura passwd este definita in dupa cum urmeaza: struct passwd { char *pw_name; /* numele utilizatorului */ char *pw_passwd; /* parola utilizatorului */ uid_t pw_uid; /* identificatorul utilizatorului */ gid_t pw_gid; /* identificatorul grupului */ char *pw_gecos; /* informaii despre utilizator */ char *pw_dir; /* directorul personal ,,acasa" */ char *pw_shell; /* programul shell */ }; Consultai passwd(5) pentru mai multe informaii despre aceste campuri. Funciile getpwnam_r() i getpwuid_r() obin aceleai informaii ca getpwnam() i getpwuid(), dar stocheaza structura passwd recuperata in spaiul indicat de pwd. Campurile de ir de caractere indicate de membrii structurii passwd sunt stocate in memoria tampon buf de dimensiune buflen. Un indicator catre rezultat (in caz de succes) sau NULL (in cazul in care nu a fost gasita nicio intrare sau s-a produs o eroare) este stocat in *result. Apelarea sysconf(_SC_GETPW_R_SIZE_MAX) returneaza fie -1, fara a modifica errno, fie o dimensiune iniiala sugerata pentru buf; (daca aceasta dimensiune este prea mica, apelul eueaza cu ERANGE, caz in care apelantul poate incerca din nou cu o memorie tampon mai mare). VALOAREA RETURNATA Funciile getpwnam() i getpwuid() returneaza un indicator catre o structura passwd sau NULL daca intrarea corespunzatoare nu este gasita sau daca apare o eroare. Daca apare o eroare, errno este configurata pentru a indica eroarea. Daca se dorete verificarea errno dupa apel, aceasta trebuie sa fie stabilita la zero inainte de apel. Valoarea returnata poate indica o zona statica i poate fi suprascrisa prin apeluri ulterioare la getpwent(3), getpwnam() sau getpwuid(). (Nu pasai indicatorul returnat la free(3).) In caz de succes, funciile getpwnam_r() i getpwuid_r() returneaza zero i stabilesc *result la pwd. Daca nu a fost gasita nicio inregistrare de parola corespunzatoare, aceste funcii returneaza 0 i stocheaza NULL in *result. In caz de eroare, se returneaza un numar de eroare, iar NULL este stocat in *rezultat. ERORI-IEIRE 0 sau ENOENT sau ESRCH sau EBADF sau EPERM sau EPERM sau ... Datele name sau uid specificate nu au fost gasite. EINTR A fost captat un semnal; a se vedea signal(7). EIO Eroare de In/Ie. EMFILE Limita per proces a numarului de descriptori de fiiere deschise a fost atinsa. ENFILE Limita la nivel de sistem a numarului total de fiiere deschise a fost atinsa. ENOMEM Memorie insuficienta pentru alocarea structurii passwd. ERANGE Spaiul de memorie tampon furnizat este insuficient. FIIERE /etc/passwd fiierul local al bazei de date de parole ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------+---------------------+---------------------------------+ |Interfaa | Atribut | Valoare | +--------------+---------------------+---------------------------------+ |getpwnam() | Sigurana firelor | MT-Unsafe race:pwnam locale | +--------------+---------------------+---------------------------------+ |getpwuid() | Sigurana firelor | MT-Unsafe race:pwuid locale | +--------------+---------------------+---------------------------------+ |getpwnam_r(), | Sigurana firelor | MT-Safe locale | |getpwuid_r() | | | +--------------+---------------------+---------------------------------+ VERSIUNI Campul pw_gecos nu este specificat in POSIX, dar este prezent in majoritatea implementarilor. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001, SVr4, 4.3BSD. NOTE Formularea de mai sus de la ,,RETURN VALUE" este din POSIX.1-2001. Aceasta nu numete ,,not found" o eroare i, prin urmare, nu specifica ce valoare ar putea avea errno in aceasta situaie. Dar acest lucru face imposibila recunoaterea erorilor. S-ar putea argumenta ca, in conformitate cu POSIX, errno ar trebui lasat neschimbata daca o intrare nu este gasita. Experimentele pe diferite sisteme de tip UNIX arata ca in aceasta situaie apar o mulime de valori diferite: 0, ENOENT, EBADF, ESRCH, EWOULDBLOCK, EPERM i probabil altele. Campul pw_dir conine numele directorului de lucru iniial al utilizatorului. Programele de autentificare utilizeaza valoarea acestui camp pentru a iniializa variabila de mediu HOME pentru shell-ul de autentificare. O aplicaie care dorete sa determine directorul iniial al utilizatorului sau ar trebui sa inspecteze valoarea lui HOME (mai degraba decat valoarea getpwuid(getuid())->pw_dir) deoarece aceasta permite utilizatorului sa ii modifice noiunea de ,,director personal" in timpul unei sesiuni de conectare. Pentru a determina directorul personal (iniial) al unui alt utilizator, este necesar sa se utilizeze getpwnam("username")->pw_dir sau ceva similar. EXEMPLE Programul de mai jos demonstreaza utilizarea getpwnam_r() pentru a gasi numele de utilizator complet i ID-ul de utilizator pentru numele de utilizator furnizat ca argument al liniei de comanda. #include #include #include #include #include #include int main(int argc, char *argv[]) { struct passwd pwd; struct passwd *result; char *buf; long bufsize; int s; if (argc != 2) { fprintf(stderr, "Utilizare: %s nume-utilizator\n", argv[0]); exit(EXIT_FAILURE); } bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); if (bufsize == -1) /* Valoarea a fost indeterminata */ bufsize = 16384; /* Ar trebui sa fie mai mult decat suficient */ buf = malloc(bufsize); if (buf == NULL) { perror("malloc"); exit(EXIT_FAILURE); } s = getpwnam_r(argv[1], &pwd, buf, bufsize, &result); if (result == NULL) { if (s == 0) printf("Nu s-a gasit\n"); else { errno = s; perror("getpwnam_r"); } exit(EXIT_FAILURE); } printf("Nume: %s; UID: %jd\n", pwd.pw_gecos, (intmax_t) pwd.pw_uid); exit(EXIT_SUCCESS); } CONSULTAI I endpwent(3), fgetpwent(3), getgrnam(3), getpw(3), getpwent(3), getspnam(3), putpwent(3), setpwent(3), 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.9.1 15 iunie 2024 getpwnam(3)