The branch main has been updated by kib:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=94c1c907f8c78d8c8ad34b6a7d374384f8fb71b6

commit 94c1c907f8c78d8c8ad34b6a7d374384f8fb71b6
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2025-07-10 23:58:46 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2025-07-22 09:22:06 +0000

    reboot(8): add support for noshutdown
    
    Similar to shutdown(8), refuse to reboot if /var/run/noshutdown is
    present.  The -f option can be used to force operation.
    
    Reviewed by:    imp
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D51241
---
 sbin/reboot/reboot.8 | 9 +++++++++
 sbin/reboot/reboot.c | 7 +++++++
 2 files changed, 16 insertions(+)

diff --git a/sbin/reboot/reboot.8 b/sbin/reboot/reboot.8
index 0ddcee643244..1bbc39d52be4 100644
--- a/sbin/reboot/reboot.8
+++ b/sbin/reboot/reboot.8
@@ -110,6 +110,15 @@ Care should be taken if
 .Va value
 contains any characters that are special to the shell or loader's configuration
 parsing code.
+.It Fl f
+Force reboot.
+Normally,
+.Nm
+checks for the presence of the next kernel,
+and absence of the
+.Pa /var/run/noshutdown
+file.
+Without this flag, reboot is denied if one of the conditions failed.
 .It Fl k Ar kname
 Boot the specified kernel
 .Ar kname
diff --git a/sbin/reboot/reboot.c b/sbin/reboot/reboot.c
index 9825d4f96319..f6065e80fb66 100644
--- a/sbin/reboot/reboot.c
+++ b/sbin/reboot/reboot.c
@@ -40,6 +40,7 @@
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <paths.h>
 #include <pwd.h>
 #include <signal.h>
 #include <spawn.h>
@@ -222,6 +223,7 @@ main(int argc, char *argv[])
 {
        struct utmpx utx;
        const struct passwd *pw;
+       struct stat st;
        int ch, howto = 0, i, sverrno;
        bool Dflag, fflag, lflag, Nflag, nflag, qflag;
        uint64_t pageins;
@@ -294,6 +296,11 @@ main(int argc, char *argv[])
        if (argc != 0)
                usage();
 
+       if (!donextboot && !fflag && stat(_PATH_NOSHUTDOWN, &st) == 0) {
+               errx(1, "Reboot cannot be done, " _PATH_NOSHUTDOWN
+                   " is present");
+       }
+
        if (Dflag && ((howto & ~RB_HALT) != 0  || kernel != NULL))
                errx(1, "cannot delete existing nextboot config and do anything 
else");
        if ((howto & (RB_DUMP | RB_HALT)) == (RB_DUMP | RB_HALT))

Reply via email to