diff options
author | Philippe Charnier <charnier@FreeBSD.org> | 2004-01-18 21:46:39 +0000 |
---|---|---|
committer | Philippe Charnier <charnier@FreeBSD.org> | 2004-01-18 21:46:39 +0000 |
commit | 73461538c2a564f3992725609929618b698e9701 (patch) | |
tree | aec4e4cec78802852b4e042295d2c69dc8a9384d /chpass/util.c | |
parent | cae6d992ea1343a8e952c86544cb57eb32a1788d (diff) | |
download | pw-darwin-73461538c2a564f3992725609929618b698e9701.tar.gz pw-darwin-73461538c2a564f3992725609929618b698e9701.tar.zst pw-darwin-73461538c2a564f3992725609929618b698e9701.zip |
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
Diffstat (limited to 'chpass/util.c')
-rw-r--r-- | chpass/util.c | 38 |
1 files changed, 32 insertions, 6 deletions
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 <sys/types.h> #include <ctype.h> -#include <pwd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -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); } |