blob: 21efc5cacc89c1c7d48a75eb74f4fb4ac8f6f43e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#include "pwf.h"
#include <pthread.h>
int __getpw_a(const char *name, uid_t uid, struct passwd *pw, char **buf, size_t *size, struct passwd **res)
{
FILE *f;
int cs;
int rv = 0;
*res = 0;
pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &cs);
f = fopen("/etc/passwd", "rbe");
if (!f) {
rv = errno;
goto done;
}
while (!(rv = __getpwent_a(f, pw, buf, size, res)) && *res) {
if (name && !strcmp(name, (*res)->pw_name)
|| !name && (*res)->pw_uid == uid)
break;
}
fclose(f);
done:
pthread_setcancelstate(cs, 0);
if (rv) errno = rv;
return rv;
}
|