PASS_R_RETURN fgetpwent_r(FILE *f, struct passwd *pwptr, PASS_R_COPY_ARGS) { struct passwd *pw = fgetpwent(f); int res; if (pw == NULL) return (PASS_R_BAD); res = copy_passwd(pw, pwptr, PASS_R_COPY); return (res ? PASS_R_BAD : PASS_R_OK); }
/** * \brief Return struct passwd of current user of the user database. * * When called the first time returns the struct passwd of the first user listed * in the user database. Each successive call returns the next user in the * user database. */ struct passwd *getpwent(void) { struct passwd *ret = NULL; if (db_cursor < ARRAY_LENGTH(userdb)) { copy_passwd(&user, &userdb[db_cursor++]); ret = &user; POSIXCOMPAT_DEBUG("getpwent(): returning user \"%s\"\n", ret->pw_name); } else { ret = NULL; POSIXCOMPAT_DEBUG("getpwent(): no more users\n"); } return ret; }
int __posix_getpwnam_r(const char *login, struct passwd *pwptr, char *buf, size_t buflen, struct passwd **result) { #else int getpwnam_r(const char *login, struct passwd *pwptr, char *buf, size_t buflen, struct passwd **result) { #endif struct passwd *pw = getpwnam(login); int res; if (pw == NULL) { *result = NULL; return (0); } res = copy_passwd(pw, pwptr, buf, buflen); *result = res ? NULL : pwptr; return (res); } #ifdef POSIX_GETPWNAM_R struct passwd * getpwnam_r(const char *login, struct passwd *pwptr, char *buf, int buflen) { struct passwd *pw = getpwnam(login); int res; if (pw == NULL) return (NULL); res = copy_passwd(pw, pwptr, buf, buflen); return (res ? NULL : pwptr); } #endif /* POSIX 1003.1c */ #ifdef POSIX_GETPWUID_R int __posix_getpwuid_r(uid_t uid, struct passwd *pwptr, char *buf, size_t buflen, struct passwd **result) { #else int getpwuid_r(uid_t uid, struct passwd *pwptr, char *buf, size_t buflen, struct passwd **result) { #endif struct passwd *pw = getpwuid(uid); int res; if (pw == NULL) { *result = NULL; return (0); } res = copy_passwd(pw, pwptr, buf, buflen); *result = res ? NULL : pwptr; return (res); } #ifdef POSIX_GETPWUID_R struct passwd * getpwuid_r(uid_t uid, struct passwd *pwptr, char *buf, int buflen) { struct passwd *pw = getpwuid(uid); int res; if (pw == NULL) return (NULL); res = copy_passwd(pw, pwptr, buf, buflen); return (res ? NULL : pwptr); } #endif /* * These assume a single context is in operation per thread. * If this is not the case we will need to call irs directly * rather than through the base functions. */ PASS_R_RETURN getpwent_r(struct passwd *pwptr, PASS_R_ARGS) { struct passwd *pw = getpwent(); int res; if (pw == NULL) return (PASS_R_BAD); res = copy_passwd(pw, pwptr, buf, buflen); return (res ? PASS_R_BAD : PASS_R_OK); } PASS_R_SET_RETURN #ifdef PASS_R_ENT_ARGS setpassent_r(int stayopen, PASS_R_ENT_ARGS) #else setpassent_r(int stayopen) #endif { setpassent(stayopen); #ifdef PASS_R_SET_RESULT return (PASS_R_SET_RESULT); #endif }