death: revoke all lines listed in /etc/ttys instead of sending HUP

to all processes
This commit is contained in:
Andrey A. Chernov 1997-07-04 22:09:07 +00:00
parent 8c1d6cc7a3
commit c3d7c52e04
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=27197

View File

@ -33,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id: init.c,v 1.19 1997/07/02 13:53:31 ache Exp $
* $Id: init.c,v 1.20 1997/07/03 11:37:43 ache Exp $
*/
#ifndef lint
@ -1393,7 +1393,10 @@ death()
register session_t *sp;
register int i;
pid_t pid;
static const int death_sigs[3] = { SIGHUP, SIGTERM, SIGKILL };
char *devname;
int tlen_cur, tlen_max;
struct ttyent *typ;
static const int death_sigs[2] = { SIGTERM, SIGKILL };
for (sp = sessions; sp; sp = sp->se_next)
sp->se_flags |= SE_SHUTDOWN;
@ -1401,7 +1404,28 @@ death()
/* NB: should send a message to the session logger to avoid blocking. */
logwtmp("~", "shutdown", "");
for (i = 0; i < 3; ++i) {
tlen_max = 0;
devname = NULL;
while (typ = getttyent()) {
if (typ->ty_name != 0) {
tlen_cur = strlen(typ->ty_name);
if (tlen_cur > 0) {
if (tlen_cur > tlen_max) {
tlen_max = tlen_cur;
devname = realloc(devname, sizeof(_PATH_DEV) + tlen_max);
}
if (devname != NULL) {
(void) sprintf(devname, "%s%s", _PATH_DEV, typ->ty_name);
(void) revoke(devname);
}
}
}
}
endttyent();
if (devname != NULL)
free(devname);
for (i = 0; i < 2; ++i) {
if (kill(-1, death_sigs[i]) == -1 && errno == ESRCH)
return (state_func_t) single_user;