The string with path to shell could be taken directly from struct passwd.
authorzhuk <zhuk@openbsd.org>
Mon, 18 Jul 2016 16:46:30 +0000 (16:46 +0000)
committerzhuk <zhuk@openbsd.org>
Mon, 18 Jul 2016 16:46:30 +0000 (16:46 +0000)
commitff37429cbb768e4b590baee210183e74324d4ffd
tree0d9b5bde4b73a478180dc21fb77f45e6819143bf
parentefd1e2a029b5078812edc45720f3e465f9e93172
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@
usr.bin/doas/doas.c