Module Name: src
Committed By: martin
Date: Sat Dec 7 14:08:54 UTC 2024
Modified Files:
src/sbin/shutdown: shutdown.c
Log Message:
As discussed on tech-userlevel: pass a "what" argument to /etc/rc.shutdown
describing why we are shutting down. This allows e.g. for UPS actions
if we are powering down.
To generate a diff of this commit:
cvs rdiff -u -r1.58 -r1.59 src/sbin/shutdown/shutdown.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sbin/shutdown/shutdown.c
diff -u src/sbin/shutdown/shutdown.c:1.58 src/sbin/shutdown/shutdown.c:1.59
--- src/sbin/shutdown/shutdown.c:1.58 Fri Jul 1 16:45:12 2022
+++ src/sbin/shutdown/shutdown.c Sat Dec 7 14:08:54 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: shutdown.c,v 1.58 2022/07/01 16:45:12 kre Exp $ */
+/* $NetBSD: shutdown.c,v 1.59 2024/12/07 14:08:54 martin Exp $ */
/*
* Copyright (c) 1988, 1990, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 19
#if 0
static char sccsid[] = "@(#)shutdown.c 8.4 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: shutdown.c,v 1.58 2022/07/01 16:45:12 kre Exp $");
+__RCSID("$NetBSD: shutdown.c,v 1.59 2024/12/07 14:08:54 martin Exp $");
#endif
#endif /* not lint */
@@ -99,7 +99,7 @@ static char *bootstr;
static void badtime(void) __dead;
static void die_you_gravy_sucking_pig_dog(void) __dead;
static void doitfast(void);
-static void dorcshutdown(void);
+static void dorcshutdown(const char *what);
static void finish(int) __dead;
static void getoffset(char *);
static void loop(void) __dead;
@@ -378,7 +378,7 @@ die_you_gravy_sucking_pig_dog(void)
}
if (dofast)
doitfast();
- dorcshutdown();
+ dorcshutdown(what);
if (doreboot || dohalt) {
const char *args[20];
const char **arg, *path;
@@ -516,12 +516,23 @@ getoffset(char *timearg)
}
static void
-dorcshutdown(void)
+dorcshutdown(const char *arg)
{
+ static char cmd[sizeof(_PATH_RCSHUTDOWN) + 64];
+
+ if (arg) {
+ snprintf(cmd, sizeof(cmd), "set -- %s && . " _PATH_RCSHUTDOWN,
+ arg);
+ cmd[sizeof(cmd)-1] = 0;
+ arg = cmd;
+ } else {
+ arg = ". " _PATH_RCSHUTDOWN;
+ }
+
(void)printf("\r\nAbout to run shutdown hooks...\r\n");
#ifndef DEBUG
(void)setuid(0);
- (void)system(". " _PATH_RCSHUTDOWN);
+ (void)system(arg);
#endif
(void)sleep(5); /* Give operator a chance to abort this. */
(void)printf("\r\nDone running shutdown hooks.\r\n");