opendoas

A portable version of the OpenBSD `doas` command
git clone https://pi.duncano.de/git/opendoas.git
Log | Files | Refs | README | LICENSE

commit 24c98415f578823a1132be03279f18189d41c241
parent 6ec218cb321404af01a1bec505f782e98c5ec7a3
Author: zhuk <zhuk>
Date:   Mon, 18 Jul 2016 16:46:30 +0000

The string with path to shell could be taken directly from struct passwd. At some point later the data it points to is overridden by getpwuid() call, resulting in garbage. The problem could be easily demonstreated by double doas call:

  $ doas doas -su _sndio
  doas: mpty: command not found

The fix is easy: just strdup() the pw_shell field value.

okay tedu@, tweaks from & okay natano@

Diffstat:
doas.c | 8+++++---
1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/doas.c b/doas.c @@ -311,9 +311,11 @@ main(int argc, char **argv) if (sflag) { sh = getenv("SHELL"); - if (sh == NULL || *sh == '\0') - shargv[0] = pw->pw_shell; - else + if (sh == NULL || *sh == '\0') { + shargv[0] = strdup(pw->pw_shell); + if (shargv[0] == NULL) + err(1, NULL); + } else shargv[0] = sh; argv = shargv; argc = 1;