2 a replacement for getpwent() on AIX that enumerates
3 all user databases, not just /etc/passwd
5 Andrew Tridgell tridge@au.ibm.com
14 #include <sys/types.h>
24 free up any resources associated with getpwent()
28 if (getpwent_state.all_users) {
29 free(getpwent_state.all_users);
31 getpwent_state.all_users = NULL;
32 getpwent_state.next = NULL;
37 reset the state to the start of the user database
43 /* getuserattr returns a null separated list of users,
44 with each user being of the form REGISTRY:USERNAME */
45 if (getuserattr("ALL", "users", &s, SEC_CHAR) == 0) {
46 getpwent_state.all_users = s;
47 getpwent_state.next = getpwent_state.all_users;
55 struct passwd *getpwent(void)
59 if (!getpwent_state.all_users) {
61 if (!getpwent_state.all_users) {
66 user = getpwent_state.next;
71 user = strchr(user, ':');
76 pwd = getpwnam(user+1);
77 getpwent_state.next += strlen(getpwent_state.next)+1;
91 while ((pwd = getpwent())) {
92 printf("%s\n", pwd->pw_name);