diff options
author | Garry Zacheiss <zacheiss@mit.edu> | 2001-02-26 23:50:08 +0000 |
---|---|---|
committer | Garry Zacheiss <zacheiss@mit.edu> | 2001-02-26 23:50:08 +0000 |
commit | efc5e21f47f24b78fb31285fe9a75eecb1f6b354 (patch) | |
tree | 1e0379b815a8fad4269b46bd992f83f6f60a402d /server/main.c | |
parent | 83e73e1e12c9cabfc7af77113d4588b926acca3a (diff) |
Changes from CMU:
* Better interrealm support: Let other realms know we booted, set realm
correctly we so can override from the command line, and kill any
children that are trying to get tickets.
Diffstat (limited to 'server/main.c')
-rw-r--r-- | server/main.c | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/server/main.c b/server/main.c index bd3e138..37b8efb 100644 --- a/server/main.c +++ b/server/main.c @@ -3,7 +3,8 @@ * * Created by: John T. Kohl * - * $Id$ + * $Source$ + * $Author$ * * Copyright (c) 1987,1988,1991 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file @@ -300,6 +301,7 @@ main(argc, argv) timer_set_rel(SWEEP_INTERVAL, sweep_ticket_hash_table, NULL); #endif + realm_wakeup(); #ifdef DEBUG_MALLOC malloc_inuse(&m_size); #endif @@ -380,9 +382,14 @@ initialize() krb_set_tkt_string(tkt_file); #endif realm_init(); - + ZSetServerState(1); ZInitialize(); /* set up the library */ +#ifdef HAVE_KRB4 + /* Override what Zinitialize set for ZGetRealm() */ + if (*my_realm) + strcpy(__Zephyr_realm, my_realm); +#endif init_zsrv_err_tbl(); /* set up err table */ ZSetFD(srv_socket); /* set up the socket as the input fildes */ @@ -502,7 +509,11 @@ bye(sig) int sig; { server_shutdown(); /* tell other servers */ +#ifdef REALM_MGMT + realm_shutdown(); /* tell other realms */ +#endif hostm_shutdown(); /* tell our hosts */ + kill_realm_pids(); #ifdef HAVE_KRB4 dest_tkt(); #endif @@ -624,17 +635,43 @@ static RETSIGTYPE reap(sig) int sig; { + int pid, i = 0; int oerrno = errno; - + Realm *rlm; #ifdef _POSIX_VERSION int waitb; - while (waitpid(-1, &waitb, WNOHANG) == 0) ; #else union wait waitb; - while (wait3 (&waitb, WNOHANG, (struct rusage*) 0) == 0) ; +#endif +#if 1 + zdbug((LOG_DEBUG,"reap()")); +#endif +#ifdef _POSIX_VERSION + while ((pid = waitpid(-1, &waitb, WNOHANG)) == 0) + { i++; if (i > 10) break; } +#else + while ((pid = wait3 (&waitb, WNOHANG, (struct rusage*) 0)) == 0) + { i++; if (i > 10) break; } #endif errno = oerrno; + + if (pid) { + if (WIFSIGNALED(waitb) == 0) { + if (WIFEXITED(waitb) != 0) { + rlm = realm_get_realm_by_pid(pid); + if (rlm) { + rlm->child_pid = 0; + rlm->have_tkt = 1; + } + } + } else { + rlm = realm_get_realm_by_pid(pid); + if (rlm) { + rlm->child_pid = 0; + } + } + } } static void |