BSD 4_3 release
[unix-history] / usr / src / etc / reboot.c
index 3c19b81..81a8b24 100644 (file)
@@ -1,6 +1,18 @@
+/*
+ * Copyright (c) 1980,1986 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
+#ifndef lint
+char copyright[] =
+"@(#) Copyright (c) 1980,1986 Regents of the University of California.\n\
+ All rights reserved.\n";
+#endif not lint
+
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)reboot.c    4.8 (Berkeley) 7/2/83";
-#endif
+static char sccsid[] = "@(#)reboot.c   5.4 (Berkeley) 5/26/86";
+#endif not lint
 
 /*
  * Reboot
 
 /*
  * Reboot
@@ -9,10 +21,10 @@ static       char *sccsid = "@(#)reboot.c    4.8 (Berkeley) 7/2/83";
 #include <sys/reboot.h>
 #include <errno.h>
 #include <signal.h>
 #include <sys/reboot.h>
 #include <errno.h>
 #include <signal.h>
+#include <pwd.h>
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/types.h>
 #include <sys/time.h>
-
-#define SHUTDOWNLOG "/usr/adm/shutdownlog"
+#include <sys/syslog.h>
 
 main(argc, argv)
        int argc;
 
 main(argc, argv)
        int argc;
@@ -23,7 +35,11 @@ main(argc, argv)
        register i;
        register ok = 0;
        register qflag = 0;
        register i;
        register ok = 0;
        register qflag = 0;
+       int needlog = 1;
+       char *user, *getlogin();
+       struct passwd *pw, *getpwuid();
 
 
+       openlog("reboot", 0, LOG_AUTH);
        argc--, argv++;
        howto = 0;
        while (argc > 0) {
        argc--, argv++;
        howto = 0;
        while (argc > 0) {
@@ -31,6 +47,8 @@ main(argc, argv)
                        qflag++;
                else if (!strcmp(*argv, "-n"))
                        howto |= RB_NOSYNC;
                        qflag++;
                else if (!strcmp(*argv, "-n"))
                        howto |= RB_NOSYNC;
+               else if (!strcmp(*argv, "-l"))
+                       needlog = 0;
                else {
                        fprintf(stderr,
                            "usage: reboot [ -n ][ -q ]\n");
                else {
                        fprintf(stderr,
                            "usage: reboot [ -n ][ -q ]\n");
@@ -39,11 +57,23 @@ main(argc, argv)
                argc--, argv++;
        }
 
                argc--, argv++;
        }
 
+       if (needlog) {
+               user = getlogin();
+               if (user == (char *)0 && (pw = getpwuid(getuid())))
+                       user = pw->pw_name;
+               if (user == (char *)0)
+                       user = "root";
+               syslog(LOG_CRIT, "rebooted by %s", user);
+       }
+
        signal(SIGHUP, SIG_IGN);        /* for remote connections */
        if (kill(1, SIGTSTP) == -1) {
                fprintf(stderr, "reboot: can't idle init\n");
                exit(1);
        }
        signal(SIGHUP, SIG_IGN);        /* for remote connections */
        if (kill(1, SIGTSTP) == -1) {
                fprintf(stderr, "reboot: can't idle init\n");
                exit(1);
        }
+       sleep(1);
+       (void) kill(-1, SIGTERM);       /* one chance to catch it */
+       sleep(5);
 
        if (!qflag) for (i = 1; ; i++) {
                if (kill(-1, SIGKILL) == -1) {
 
        if (!qflag) for (i = 1; ; i++) {
                if (kill(-1, SIGKILL) == -1) {
@@ -57,21 +87,17 @@ main(argc, argv)
                        exit(1);
                }
                if (i > 5) {
                        exit(1);
                }
                if (i > 5) {
-       fprintf(stderr, "CAUTION: some process(es) wouldn't die\n");
+                       fprintf(stderr,
+                           "CAUTION: some process(es) wouldn't die\n");
                        break;
                }
                setalarm(2 * i);
                pause();
        }
 
                        break;
                }
                setalarm(2 * i);
                pause();
        }
 
-       if ((howto & RB_NOSYNC) == 0)
-               log_entry();
-       if (!qflag) {
-               if (!(howto & RB_NOSYNC)) {
-                       markdown();
-                       sync();
-                       sync();
-               }
+       if (!qflag && (howto & RB_NOSYNC) == 0) {
+               markdown();
+               sync();
                setalarm(5);
                pause();
        }
                setalarm(5);
                pause();
        }
@@ -110,30 +136,3 @@ markdown()
                close(f);
        }
 }
                close(f);
        }
 }
-
-char *days[] = {
-       "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
-};
-
-char *months[] = {
-       "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
-       "Oct", "Nov", "Dec"
-};
-
-log_entry()
-{
-       FILE *fp;
-       struct tm *tm, *localtime();
-       time_t now;
-
-       time(&now);
-       tm = localtime(&now);
-       fp = fopen(SHUTDOWNLOG, "a");
-       if (fp == 0)
-               return;
-       fseek(fp, 0L, 2);
-       fprintf(fp, "%02d:%02d  %s %s %2d, %4d.  Halted for reboot.\n", tm->tm_hour,
-               tm->tm_min, days[tm->tm_wday], months[tm->tm_mon],
-               tm->tm_mday, tm->tm_year + 1900);
-       fclose(fp);
-}