blob: 092d7f3a700d3cf3c952a1fff33e977eb86ba6b8 (
plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include <sys/types.h>
#include <errno.h>
#include <nss.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int
main(int argc, char **argv)
{
char *buf;
size_t size = 2;
int result;
struct passwd passwd, *pwd = NULL;
__nss_configure_lookup ("passwd", "directories");
buf = malloc(size);
setpwent();
do {
pwd = NULL;
result = getpwent_r(&passwd, buf, size, &pwd);
printf("%d: ", result);
switch (result) {
case 0:
printf("%s\n", pwd->pw_name);
break;
case ERANGE:
printf("%d is not enough, error = %s\n", size,
strerror(errno));
size++;
free(buf);
buf = malloc(size);
result = 0;
break;
default:
printf("failed (%s)\n", strerror(result));
_exit(1);
break;
}
} while (result == 0);
endpwent();
return 0;
}
|