Hi Harold,
harold felton wrote on Fri, Jul 05, 2019 at 11:16:01PM +0000:
> On Fri, Jul 05, 2019 at 10:39:55PM +0000, harold felton wrote:
>> boot -s
Did you mount(8) /usr between the above and the below?
>> # shutdown now
> shutdown: unveil: No such file or directory
If the answer to the above question is "no", then i suspect from
code inspection that the following patch may help (untested).
The point of the patch is tolerating unveil(2) failure if /usr/bin/
does not exist. Later, trying to execle(3) _PATH_WALL will of
course fail, too, but that's harmless because it merely results in
the child dying with a syslog message.
All that said, in single user mode, it may be more reliable to
use halt(8) directly rather than trying to fire up a bloated
monster application suite like shutdown(8).
> ps - i would rather reinstall than try to debug
If the patch below helps, reinstalling is most likely not needed.
Does it help?
Ingo
P.S.
If some crazy person deletes /etc or /sbin or runs shutdown(8)
from a directory that was deleted after changing into it,
similar failures look likely - but while that might want fixing,
too, and while printing the unveil argument in case of failure
might also make sense, the case of _PATH_WALL is probably the
most important one because not having /usr mounted wouldn't
seem all that unusual.
Index: shutdown.c
===================================================================
RCS file: /cvs/src/sbin/shutdown/shutdown.c,v
retrieving revision 1.52
diff -u -p -r1.52 shutdown.c
--- shutdown.c 3 Aug 2018 17:09:22 -0000 1.52
+++ shutdown.c 6 Jul 2019 14:32:10 -0000
@@ -169,7 +169,7 @@ main(int argc, char *argv[])
err(1, "unveil");
if (unveil(_PATH_RC, "r") == -1)
err(1, "unveil");
- if (unveil(_PATH_WALL, "x") == -1)
+ if (unveil(_PATH_WALL, "x") == -1 && errno != ENOENT)
err(1, "unveil");
if (unveil(_PATH_FASTBOOT, "wc") == -1)
err(1, "unveil");