struct passwd * interpret(struct passwd *pwent, char *line, int secure) { char *p = line; pwent->pw_passwd = "*"; pwent->pw_uid = 0; pwent->pw_gid = 0; pwent->pw_gecos = ""; pwent->pw_dir = ""; pwent->pw_shell = ""; pwent->pw_change = 0; pwent->pw_expire = 0; pwent->pw_class = ""; /* line without colon separators is no good, so ignore it */ if (!strchr(p, ':')) return (NULL); pwent->pw_name = p; p = pwskip(p); pwent->pw_passwd = p; p = pwskip(p); pwent->pw_uid = (uid_t)strtoul(p, NULL, 10); p = pwskip(p); pwent->pw_gid = (gid_t)strtoul(p, NULL, 10); p = pwskip(p); if ( secure == 1 ) { pwent->pw_class = p; p = pwskip(p); pwent->pw_change = (time_t)strtoul(p, NULL, 10); p = pwskip(p); pwent->pw_expire = (time_t)strtoul(p, NULL, 10); p = pwskip(p); } pwent->pw_gecos = p; p = pwskip(p); pwent->pw_dir = p; p = pwskip(p); pwent->pw_shell = p; while (*p && *p != '\n') p++; *p = '\0'; return (pwent); }
struct passwd * pwdecode(char *p) { passwd.pw_name = p; p = pwskip(p); p = pwskip(p); /* passwd */ passwd.pw_uid = atoi(p); p = pwskip(p); passwd.pw_gid = atoi(p); p = pwskip(p); /* comment */ p = pwskip(p); /* gecos */ passwd.pw_dir = p; p = pwskip(p); passwd.pw_shell = p; pwskip(p); return(&passwd); }