From eb137b9e42bc16ab92b4d4be52b27c97ec090096 Mon Sep 17 00:00:00 2001 From: FRIGN Date: Mon, 2 Mar 2015 17:41:58 +0100 Subject: [PATCH] Audit chroot(1) 1) Fix usage() 2) Rename *p to *cmd 3) _exit trick with 126 + (savederrno == ENOENT) 4) return-style-fix --- README | 2 +- chroot.c | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/README b/README index a73d8b7..0375e1b 100644 --- a/README +++ b/README @@ -15,7 +15,7 @@ The following tools are implemented ('*' == finished, '#' == UTF-8 support, =* chgrp yes none =* chmod yes none =* chown yes none -=* chroot non-posix none +=*| chroot non-posix none =* cksum yes none =* cmp yes none #* cols non-posix none diff --git a/chroot.c b/chroot.c index 8cf764d..5048c78 100644 --- a/chroot.c +++ b/chroot.c @@ -8,13 +8,13 @@ static void usage(void) { - eprintf("usage: chroot dir [cmd [arg ...]]\n"); + eprintf("usage: %s dir [cmd [arg ...]]\n", argv0); } int main(int argc, char *argv[]) { - char *shell[] = { "/bin/sh", "-i", NULL }, *aux, *p; + char *shell[] = { "/bin/sh", "-i", NULL }, *aux, *cmd; int savederrno; ARGBEGIN { @@ -22,7 +22,7 @@ main(int argc, char *argv[]) usage(); } ARGEND; - if (argc < 1) + if (!argc) usage(); if ((aux = getenv("SHELL"))) @@ -35,16 +35,16 @@ main(int argc, char *argv[]) eprintf("chdir:"); if (argc == 1) { - p = *shell; + cmd = *shell; execvp(*shell, shell); } else { - p = argv[1]; - execvp(argv[1], argv+1); + cmd = argv[1]; + execvp(argv[1], argv + 1); } savederrno = errno; - weprintf("execvp %s:", p); - _exit(savederrno == ENOENT ? 127 : 126); - /* unreachable */ - return 0; + weprintf("execvp %s:", cmd); + _exit(126 + (savederrno == ENOENT)); + + return 0; /* not reached */ }