From bd9f0208d22e9f88be3b2d924755b1b4447783bf Mon Sep 17 00:00:00 2001 From: Serge Date: Fri, 27 May 2022 00:46:24 -0700 Subject: [PATCH] Fix chpass. --- include/stdio.h | 1 + include/unistd.h | 1 + src/cmd/calendar/calendar.c | 7 ++++--- src/cmd/chpass/chpass.c | 27 ++++++++++++++++++++++++--- src/cmd/chpass/chpass.h | 2 ++ src/cmd/chpass/field.c | 10 +++++++++- src/cmd/chpass/util.c | 6 +++++- sys/include/resource.h | 4 +++- 8 files changed, 49 insertions(+), 9 deletions(-) diff --git a/include/stdio.h b/include/stdio.h index f630886..3839528 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -95,6 +95,7 @@ void setbuffer (FILE *, char *, size_t); void setlinebuf (FILE *); int setvbuf (FILE *, char *, int, size_t); int fseek (FILE *, long, int); +int rename(const char *, const char *); void rewind (FILE *); int remove (const char *); int getw(FILE *stream); diff --git a/include/unistd.h b/include/unistd.h index 1c8f26d..ff9ff4e 100644 --- a/include/unistd.h +++ b/include/unistd.h @@ -105,6 +105,7 @@ int unlink (const char *pathname); int link (const char *oldpath, const char *newpath); ssize_t readlink (const char *path, char *buf, size_t bufsiz); int chown (const char *path, uid_t owner, gid_t group); +int fchown(int fd, uid_t owner, gid_t group); int nice (int inc); int setuid (uid_t uid); int setgid (gid_t gid); diff --git a/src/cmd/calendar/calendar.c b/src/cmd/calendar/calendar.c index e63cd13..26a7d53 100644 --- a/src/cmd/calendar/calendar.c +++ b/src/cmd/calendar/calendar.c @@ -56,6 +56,7 @@ static char sccsid[] = "@(#)calendar.c 8.3 (Berkeley) 3/25/94"; #include #include #include +#include #include "pathnames.h" @@ -290,7 +291,7 @@ opencal() return (NULL); errx(1, "no calendar file."); } - if (pipe(pdes) < 0) + if (pipe(pdes) < 0) return (NULL); switch (vfork()) { case -1: /* error */ @@ -339,14 +340,14 @@ closecal(fp) (void)rewind(fp); if (fstat(fileno(fp), &sbuf) || !sbuf.st_size) goto done; - if (pipe(pdes) < 0) + if (pipe(pdes) < 0) goto done; switch (vfork()) { case -1: /* error */ (void)close(pdes[0]); (void)close(pdes[1]); goto done; - case 0: + case 0: /* child -- set stdin to pipe output */ if (pdes[0] != STDIN_FILENO) { (void)dup2(pdes[0], STDIN_FILENO); diff --git a/src/cmd/chpass/chpass.c b/src/cmd/chpass/chpass.c index cfd1e3f..96c9500 100644 --- a/src/cmd/chpass/chpass.c +++ b/src/cmd/chpass/chpass.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,7 @@ #include #include #include +#include #include "chpass.h" char e1[] = ": "; @@ -57,6 +59,16 @@ struct entry list[] = { uid_t uid; +void loadpw(char *arg, struct passwd *pw); +void usage(void); +int info(struct passwd *pw); +int copy(struct passwd *pw, FILE *fp); +int makedb(char *file); +int edit(char *file); +int check(FILE *fp, struct passwd *pw); +int prompt(void); + +int main(argc, argv) int argc; char **argv; @@ -70,7 +82,6 @@ main(argc, argv) int aflag, ch, fd; char *fend, *passwd, *temp, *tend; char from[MAXPATHLEN], to[MAXPATHLEN]; - char *getusershell(); uid = getuid(); aflag = 0; @@ -220,6 +231,7 @@ bad: (void)fprintf(stderr, "%s unchanged.\n", _PATH_SHADOW); exit(0); } +int info(pw) struct passwd *pw; { @@ -268,6 +280,7 @@ info(pw) return(rval); } +int check(fp, pw) FILE *fp; struct passwd *pw; @@ -331,6 +344,7 @@ check(fp, pw) return(1); } +int copy(pw, fp) struct passwd *pw; FILE *fp; @@ -371,6 +385,7 @@ copy(pw, fp) return(1); } +int makedb(file) char *file; { @@ -384,14 +399,17 @@ makedb(file) return(w == -1 || status); } +int edit(file) char *file; { int status, pid, w; char *p, *editor, *getenv(); - if (editor = getenv("EDITOR")) { - if (p = rindex(editor, '/')) + editor = getenv("EDITOR"); + if (editor) { + p = rindex(editor, '/'); + if (p) ++p; else p = editor; @@ -408,6 +426,7 @@ edit(file) return(w == -1 || status); } +void loadpw(arg, pw) char *arg; register struct passwd *pw; @@ -432,6 +451,7 @@ bad: (void)fprintf(stderr, "chpass: bad password list.\n"); } } +int prompt() { register int c; @@ -447,6 +467,7 @@ prompt() /* NOTREACHED */ } +void usage() { (void)fprintf(stderr, "usage: chpass [-a list] [user]\n"); diff --git a/src/cmd/chpass/chpass.h b/src/cmd/chpass/chpass.h index d86c989..a74c354 100644 --- a/src/cmd/chpass/chpass.h +++ b/src/cmd/chpass/chpass.h @@ -22,3 +22,5 @@ struct entry { }; extern uid_t uid; + +void print(FILE *fp, struct passwd *pw); diff --git a/src/cmd/chpass/field.c b/src/cmd/chpass/field.c index a447c9f..6d95903 100644 --- a/src/cmd/chpass/field.c +++ b/src/cmd/chpass/field.c @@ -23,9 +23,12 @@ #include #include #include +#include +#include #include "chpass.h" /* ARGSUSED */ +int p_login(p, pw, ep) char *p; struct passwd *pw; @@ -57,6 +60,7 @@ p_login(p, pw, ep) } /* ARGSUSED */ +int p_passwd(p, pw, ep) char *p; struct passwd *pw; @@ -73,6 +77,7 @@ p_passwd(p, pw, ep) } /* ARGSUSED */ +int p_uid(p, pw, ep) register char *p; struct passwd *pw; @@ -99,6 +104,7 @@ p_uid(p, pw, ep) } /* ARGSUSED */ +int p_gid(p, pw, ep) register char *p; struct passwd *pw; @@ -131,6 +137,7 @@ p_gid(p, pw, ep) } /* ARGSUSED */ +int p_gecos(p, pw, ep) char *p; struct passwd *pw; @@ -146,6 +153,7 @@ p_gecos(p, pw, ep) } /* ARGSUSED */ +int p_hdir(p, pw, ep) char *p; struct passwd *pw; @@ -163,13 +171,13 @@ p_hdir(p, pw, ep) } /* ARGSUSED */ +int p_shell(p, pw, ep) register char *p; struct passwd *pw; struct entry *ep; { register char *sh, *t; - char *getusershell(); if (!*p) { pw->pw_shell = _PATH_BSHELL; diff --git a/src/cmd/chpass/util.c b/src/cmd/chpass/util.c index 94ed691..46e2b60 100644 --- a/src/cmd/chpass/util.c +++ b/src/cmd/chpass/util.c @@ -19,7 +19,10 @@ #include #include #include +#include #include +#include +#include #include #include "chpass.h" @@ -46,6 +49,7 @@ ttoa(tval) return(tbuf); } +int atot(p, store) char *p; time_t *store; @@ -109,13 +113,13 @@ bad: return(1); return(0); } +void print(fp, pw) register FILE *fp; struct passwd *pw; { register char *p; char *bp; - char *getusershell(), *ttoa(); fprintf(fp, "#Changing user database information for %s.\n", pw->pw_name); diff --git a/sys/include/resource.h b/sys/include/resource.h index b178692..35160fb 100644 --- a/sys/include/resource.h +++ b/sys/include/resource.h @@ -100,7 +100,9 @@ void ruadd (struct k_rusage *ru, struct k_rusage *ru2); #else -int getrusage (int who, struct rusage *usage); +int getrlimit(int resource, struct rlimit *rlim); +int getrusage(int who, struct rusage *usage); +int setrlimit(int resource, const struct rlimit *rlim); #endif