From 73461538c2a564f3992725609929618b698e9701 Mon Sep 17 00:00:00 2001 From: Philippe Charnier Date: Sun, 18 Jan 2004 21:46:39 +0000 Subject: Remove unused includes. Make it WARNS=6 friendly. Concerning bin/2442, make a new function dup_shell() to replace ok_shell() and make it unconditionnally strdup() its result to make the caller's code simplier. Change ok_shell() to just return an integer value suitable for tests (it was used mainly for that purpose). Do not use strdup() in the caller's code but rely on dup_shell() that will do the job for us. PR: bin/2442 --- chpass/chpass.c | 8 +------- chpass/chpass.h | 4 ++-- chpass/field.c | 10 ++++------ chpass/util.c | 38 ++++++++++++++++++++++++++++++++------ 4 files changed, 39 insertions(+), 21 deletions(-) (limited to 'chpass') diff --git a/chpass/chpass.c b/chpass/chpass.c index 8b716ba..ad6b985 100644 --- a/chpass/chpass.c +++ b/chpass/chpass.c @@ -53,15 +53,9 @@ static char sccsid[] = "@(#)chpass.c 8.4 (Berkeley) 4/2/94"; __FBSDID("$FreeBSD$"); #include -#include -#include -#include -#include -#include #include #include -#include #include #include #include @@ -292,7 +286,7 @@ usage(void) { (void)fprintf(stderr, - "Usage: chpass%s %s [user]\n", + "usage: chpass%s %s [user]\n", #ifdef YP " [-d domain] [-h host]", #else diff --git a/chpass/chpass.h b/chpass/chpass.h index b78b85e..ed1a586 100644 --- a/chpass/chpass.h +++ b/chpass/chpass.h @@ -64,7 +64,8 @@ extern int master_mode; int atot(char *, time_t *); struct passwd *edit(const char *, struct passwd *); -char *ok_shell(char *); +int ok_shell(char *); +char *dup_shell(char *); int p_change(char *, struct passwd *, ENTRY *); int p_class(char *, struct passwd *, ENTRY *); int p_expire(char *, struct passwd *, ENTRY *); @@ -72,7 +73,6 @@ int p_gecos(char *, struct passwd *, ENTRY *); int p_gid(char *, struct passwd *, ENTRY *); int p_hdir(char *, struct passwd *, ENTRY *); int p_login(char *, struct passwd *, ENTRY *); -int p_login(char *, struct passwd *, ENTRY *); int p_passwd(char *, struct passwd *, ENTRY *); int p_shell(char *, struct passwd *, ENTRY *); int p_uid(char *, struct passwd *, ENTRY *); diff --git a/chpass/field.c b/chpass/field.c index fe5b30f..eac5561 100644 --- a/chpass/field.c +++ b/chpass/field.c @@ -56,10 +56,8 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include -#include #include "chpass.h" @@ -218,7 +216,6 @@ p_hdir(char *p, struct passwd *pw, ENTRY *ep __unused) int p_shell(char *p, struct passwd *pw, ENTRY *ep __unused) { - char *t; struct stat sbuf; if (!*p) { @@ -230,15 +227,16 @@ p_shell(char *p, struct passwd *pw, ENTRY *ep __unused) warnx("%s: current shell non-standard", pw->pw_shell); return (-1); } - if (!(t = ok_shell(p))) { + if (!ok_shell(p)) { if (!master_mode) { warnx("%s: non-standard shell", p); return (-1); } + pw->pw_shell = strdup(p); } else - p = t; - if (!(pw->pw_shell = strdup(p))) { + pw->pw_shell = dup_shell(p); + if (!pw->pw_shell) { warnx("can't save entry"); return (-1); } diff --git a/chpass/util.c b/chpass/util.c index ac105aa..07d96e2 100644 --- a/chpass/util.c +++ b/chpass/util.c @@ -49,7 +49,6 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include #include #include @@ -139,18 +138,45 @@ bad: return (1); return (0); } -char * +int ok_shell(char *name) { char *p, *sh; setusershell(); while ((sh = getusershell())) { - if (!strcmp(name, sh)) - return (name); + if (!strcmp(name, sh)) { + endusershell(); + return (1); + } + /* allow just shell name, but use "real" path */ + if ((p = strrchr(sh, '/')) && strcmp(name, p + 1) == 0) { + endusershell(); + return (1); + } + } + endusershell(); + return (0); +} + +char * +dup_shell(char *name) +{ + char *p, *sh, *ret; + + setusershell(); + while ((sh = getusershell())) { + if (!strcmp(name, sh)) { + endusershell(); + return (strdup(name)); + } /* allow just shell name, but use "real" path */ - if ((p = strrchr(sh, '/')) && strcmp(name, p + 1) == 0) - return (sh); + if ((p = strrchr(sh, '/')) && strcmp(name, p + 1) == 0) { + ret = strdup(sh); + endusershell(); + return (ret); + } } + endusershell(); return (NULL); } -- cgit v1.2.3-56-ge451