summaryrefslogtreecommitdiffstats
path: root/chpass/util.c
diff options
context:
space:
mode:
authorPhilippe Charnier <charnier@FreeBSD.org>2004-01-18 21:46:39 +0000
committerPhilippe Charnier <charnier@FreeBSD.org>2004-01-18 21:46:39 +0000
commit73461538c2a564f3992725609929618b698e9701 (patch)
treeaec4e4cec78802852b4e042295d2c69dc8a9384d /chpass/util.c
parentcae6d992ea1343a8e952c86544cb57eb32a1788d (diff)
downloadpw-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.c38
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);
}