summaryrefslogtreecommitdiffstats
path: root/usr.bin/chpass/util.c
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>2009-03-05 20:53:13 +0000
committermillert <millert@openbsd.org>2009-03-05 20:53:13 +0000
commita0bffbc09a0fa49c771e89883ec0e8829c2b45c5 (patch)
tree2e02c6a8d54ab14975c743dcd580de209d19e2a7 /usr.bin/chpass/util.c
parentMake ELF platforms generate ELF core dumps. Somewhat based on code from (diff)
downloadwireguard-openbsd-a0bffbc09a0fa49c771e89883ec0e8829c2b45c5.tar.xz
wireguard-openbsd-a0bffbc09a0fa49c771e89883ec0e8829c2b45c5.zip
Call endusershell() at the end of ok_shell(), making a copy of the
(possibly) expanded shell as needed. OK deraadt@
Diffstat (limited to 'usr.bin/chpass/util.c')
-rw-r--r--usr.bin/chpass/util.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/usr.bin/chpass/util.c b/usr.bin/chpass/util.c
index bd7006510e4..64c13d1d848 100644
--- a/usr.bin/chpass/util.c
+++ b/usr.bin/chpass/util.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: util.c,v 1.10 2008/12/16 05:25:55 guenther Exp $ */
+/* $OpenBSD: util.c,v 1.11 2009/03/05 20:53:13 millert Exp $ */
/* $NetBSD: util.c,v 1.4 1995/03/26 04:55:35 glass Exp $ */
/*-
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)util.c 8.4 (Berkeley) 4/2/94";
#else
-static char rcsid[] = "$OpenBSD: util.c,v 1.10 2008/12/16 05:25:55 guenther Exp $";
+static char rcsid[] = "$OpenBSD: util.c,v 1.11 2009/03/05 20:53:13 millert Exp $";
#endif
#endif /* not lint */
@@ -87,18 +87,21 @@ atot(char *p, time_t *store)
return (0);
}
-char *
-ok_shell(char *name)
+int
+ok_shell(char *name, char **out)
{
char *p, *sh;
setusershell();
while ((sh = getusershell()) != NULL) {
if (!strcmp(name, sh))
- return (name);
+ break;
/* allow just shell name, but use "real" path */
if ((p = strrchr(sh, '/')) && strcmp(name, p + 1) == 0)
- return (sh);
+ break;
}
- return (NULL);
+ if (sh && out)
+ *out = strdup(sh);
+ endusershell();
+ return (sh != NULL);
}