|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T b
Length: 4110 (0x100e)
Types: TextFile
Names: »bringdown.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
└─⟦653021b30⟧ »EurOpenD3/utils/downtime.tar.Z«
└─⟦946c717da⟧
└─⟦this⟧ »bringdown.c«
/*
* Copyright (c) 1988 Michael A. Cooper, University of Southern California.
* This program may be used, copied, modified, and redistributed freely
* for noncommercial purposes, so long as this notice remains intact.
*/
#ifndef lint
static char *RCSid = "$Header: bringdown.c,v 4.1 88/07/05 15:58:13 mcooper Exp $";
#endif
/*
*------------------------------------------------------------------
*
* $Source: /usr/skat3/src/common/usc/etc/downtime/RCS/bringdown.c,v $
* $Revision: 4.1 $
* $Date: 88/07/05 15:58:13 $
* $State: Exp $
*
*------------------------------------------------------------------
*
* Michael A. Cooper
* Research and Development Group
* University Computing Services
* University of Southern California
* (mcooper@oberon.USC.EDU)
*
*------------------------------------------------------------------
*
* $Log: bringdown.c,v $
* Revision 4.1 88/07/05 15:58:13 mcooper
* Added copyright notice.
*
* Revision 4.0 88/04/20 15:40:55 mcooper
* Version 4.
*
* Revision 3.3 88/04/19 18:39:39 mcooper
* - Do more logging (ala syslog).
* - Bring the system down with a simple
* call to kill(1, SIGTERM) instead of
* using -1. This fixes the problems
* with shutting down if someone is in
* Suntools.
* - If we are a 4.3BSD host, then pass
* the magically -l option to halt and
* reboot as 4.3BSD shutdown does.
*
* Revision 3.2 88/04/11 19:47:36 mcooper
* Converted all dt_flags to use flag
* bits.
*
* Revision 3.1 88/02/11 18:59:32 mcooper
* Fixed bug that caused cancel messages
* to be send when shutdown time arrived.
*
* Revision 3.0 87/07/24 14:11:54 mcooper
* Version 3.
*
*------------------------------------------------------------------
*/
#include <stdio.h>
#include <signal.h>
#include "defs.h"
#include <syslog.h>
/*
* bringdown - Actually bring the system down.
*/
bringdown(dt)
struct downtime *dt;
{
FILE *fastd;
char *ns = NULL;
if (dt->dt_flags & F_NOSYNC)
nosync = TRUE;
else if (dt->dt_flags & F_FASTBOOT)
fastboot = TRUE;
if (nosync)
ns = "-n";
/*
* log this downtime to the shutdown file
*/
sdlog(dt);
/*
* log to downtime log file
*/
dtlog("BRINGDOWN: %s%s%s.", mkdate(dt->dt_down, D_LOGFILE),
(strcmp(dt->dt_reason, EMPTY)) ? " for " : "",
(strcmp(dt->dt_reason, EMPTY)) ? dt->dt_reason : "");
/*
* delete the message for /etc/motd
*/
delmotd(dt);
if (fastboot) {
if ((fastd = fopen(FASTBOOT, "w")) != NULL) {
fprintf(fastd, "\n");
fclose(fastd);
}
}
delete(ttod(dt->dt_down), FORCE | QUIET);
unlink(nologin);
if (!(dt->dt_flags & F_FAKE) && !halt && !reboot && !killflg)
dt->dt_flags |= F_FAKE;
if (dt->dt_flags & F_FAKE) {
printf("\nYou'll have to bring it down yourself!\n");
finish();
/*NOTREACHED*/
}
#ifdef NEW_SYSLOG
openlog("downtime", LOG_PID, LOG_AUTH);
#else
openlog("downtime", LOG_PID);
#endif /* NEW_SYSLOG */
syslog(LOG_CRIT, "%s by %s%s%s",
(dt->dt_flags & F_REBOOT) ? "reboot" :
(dt->dt_flags & F_HALT) ? "halt" : "shutdown",
dt->dt_shutter,
(strcmp(dt->dt_reason, EMPTY) == 0) ? "" : " for ",
(strcmp(dt->dt_reason, EMPTY) == 0) ? "" : dt->dt_reason
);
closelog();
sleep (2);
unlink(nologin);
#ifndef DEBUG
if (dt->dt_flags & F_REBOOT) {
#if defined(BSD) && BSD >= 43
execle(REBOOT, "reboot", "-l", ns, 0, 0);
#else
execle(REBOOT, "reboot", ns, 0, 0);
#endif /* BSD */
perror(REBOOT);
}
if (dt->dt_flags & F_HALT) {
#if defined(BSD) && BSD >= 43
execle(HALT, "halt", "-l", ns, 0, 0);
#else
execle(HALT, "halt", ns, 0, 0);
#endif /* BSD */
perror(HALT);
}
kill(1, SIGTERM); /* terminate everyone */
#else
if (dt->dt_flags & F_HALT)
printf("HALT");
if (dt->dt_flags & F_REBOOT)
printf("REBOOT");
if (fastboot)
printf(" FASTBOOT");
if (nosync)
printf(" NOSYNC");
printf(" kill -HUP 1\n");
#endif /* DEBUG */
finish();
/*NOTREACHED*/
}
/*
* Cleanup and leave.
*/
finish()
{
signal(SIGTERM, SIG_IGN);
unlink(nologin);
exit(0);
}