summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorGravatar Richard Basch <probe@mit.edu>1993-09-24 17:18:14 +0000
committerGravatar Richard Basch <probe@mit.edu>1993-09-24 17:18:14 +0000
commit77a043be93791f3ce530a7f099fd3031fec2d47e (patch)
tree7025daa421e411f790fb8e8566cc93d2978f3277 /server
parent2b0141e72ae1795c8234e9dd65234f534388a3b9 (diff)
Changed bcopy/bzero to _BCOPY/_BZERO macros (defined in <zephyr/zephyr_conf.h>)
Added POSIX signal handling
Diffstat (limited to 'server')
-rw-r--r--server/client.c30
-rw-r--r--server/hostm.c168
2 files changed, 184 insertions, 14 deletions
diff --git a/server/client.c b/server/client.c
index 0e888dd..f68de28 100644
--- a/server/client.c
+++ b/server/client.c
@@ -65,7 +65,11 @@ client_register(notice, who, client, server, wantdefaults)
register ZHostList_t *hlp = server->zs_hosts;
register ZHostList_t *hlp2;
register ZClientList_t *clist;
+#ifdef POSIX
+ sigset_t mask, omask;
+#else
int omask;
+#endif
/* chain the client's host onto this server's host list */
@@ -111,10 +115,10 @@ client_register(notice, who, client, server, wantdefaults)
clist->zclt_client = *client;
/* initialize the struct */
- bzero((caddr_t) &(*client)->zct_sin,
+ _BZERO((caddr_t) &(*client)->zct_sin,
sizeof(struct sockaddr_in));
#ifdef KERBEROS
- bzero((caddr_t) &(*client)->zct_cblock,
+ _BZERO((caddr_t) &(*client)->zct_cblock,
sizeof((*client)->zct_cblock));
#endif
(*client)->zct_sin.sin_addr.s_addr = who->sin_addr.s_addr;
@@ -125,9 +129,19 @@ client_register(notice, who, client, server, wantdefaults)
/* chain him in to the clients list in the host list*/
+#ifdef POSIX
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
xinsque(clist, hlp2->zh_clients);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
if (!server->zs_dumping && wantdefaults)
/* add default subscriptions only if this is not
@@ -151,7 +165,14 @@ client_deregister(client, host, flush)
int flush;
{
ZClientList_t *clients;
+#ifdef POSIX
+ sigset_t mask, omask;
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
int omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
/* release any not-acked packets in the rexmit queue */
nack_release(client);
@@ -174,7 +195,12 @@ client_deregister(client, host, flush)
free_zstring(client->zct_principal);
xfree(client);
xfree(clients);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask,
+ (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
syslog(LOG_CRIT, "clt_dereg: clt not in host list");
diff --git a/server/hostm.c b/server/hostm.c
index 659d199..5814281 100644
--- a/server/hostm.c
+++ b/server/hostm.c
@@ -237,7 +237,14 @@ hostm_flush(host, server)
{
register ZClientList_t *clist = NULLZCLT, *clt;
losinghost *lhp, *lhp2;
+#ifdef POSIX
+ sigset_t mask, omask;
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
int omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
if (!host) {
syslog(LOG_WARNING, "null host flush");
@@ -276,7 +283,11 @@ hostm_flush(host, server)
uloc_hflush(&host->zh_addr.sin_addr);
host_detach(host, server);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -388,8 +399,14 @@ host_lost(arg)
Code_t retval;
char *buffer;
int len;
-
- int omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */
+#ifdef POSIX
+ sigset_t mask, omask;
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
+ int omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
server = hostm_find_server(&which->lh_host->zh_addr.sin_addr);
#if 1
@@ -404,13 +421,17 @@ host_lost(arg)
#endif
xremque(which);
xfree(which);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
xremque(which);
hostm_flush(which->lh_host, server);
- bzero((caddr_t)&notice, sizeof(notice));
+ _BZERO((caddr_t)&notice, sizeof(notice));
/* tell other servers to flush this host */
notice.z_kind = HMCTL;
@@ -432,7 +453,7 @@ host_lost(arg)
xfree(buffer);
/* forge a from address */
- bzero((char *) &who, sizeof(who));
+ _BZERO((char *) &who, sizeof(who));
who.sin_addr.s_addr = which->lh_host->zh_addr.sin_addr.s_addr;
who.sin_port = hm_port;
who.sin_family = AF_INET;
@@ -440,7 +461,11 @@ host_lost(arg)
server_forward(&notice, 0, &who); /* unauthentic */
xfree(which);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -453,11 +478,21 @@ host_not_losing(who)
struct sockaddr_in *who;
{
losinghost *lhp, *lhp2;
+#ifdef POSIX
+ sigset_t mask, omask;
+#else
int omask;
+#endif
if (!losing_hosts)
return;
- omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */
+#ifdef POSIX
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
+ omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
for (lhp = losing_hosts->q_forw;
lhp != losing_hosts;)
if (lhp->lh_host->zh_addr.sin_addr.s_addr == who->sin_addr.s_addr) {
@@ -485,7 +520,11 @@ host_not_losing(who)
lhp = lhp2->q_forw;
} else
lhp = lhp->q_forw;
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -499,11 +538,22 @@ hostm_lose_ignore(client)
ZClient_t *client;
{
losinghost *lhp, *lhp2;
+#ifdef POSIX
+ sigset_t mask, omask;
+#else
int omask;
+#endif
+
if (!losing_hosts)
return;
- omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */
+#ifdef POSIX
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
+ omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
for (lhp = losing_hosts->q_forw;
lhp != losing_hosts;)
/* if client matches, remove it */
@@ -523,7 +573,11 @@ hostm_lose_ignore(client)
lhp = lhp2->q_forw;
} else
lhp = lhp->q_forw;
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -537,7 +591,11 @@ hostm_transfer(host, server)
ZHostList_t *host;
ZServerDesc_t *server;
{
+#ifdef POSIX
+ sigset_t mask, omask;
+#else
int omask;
+#endif
/* we need to unlink and relink him, and change the table entry */
@@ -551,7 +609,13 @@ hostm_transfer(host, server)
if (hostm_find_server(&host->zh_addr.sin_addr) == server)
return;
- omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */
+#ifdef POSIX
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
+ omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
/* remove from old server's queue */
xremque(host);
@@ -561,7 +625,11 @@ hostm_transfer(host, server)
/* insert in our queue */
xinsque(host, server->zs_hosts);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -577,7 +645,14 @@ host_attach(who, server)
{
register ZHostList_t *hlist;
register ZClientList_t *clist;
- int omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */
+#ifdef POSIX
+ sigset_t mask, omask;
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
+ int omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
#if 0
if (zdebug)
@@ -587,13 +662,21 @@ host_attach(who, server)
/* allocate a header */
if (!(hlist = (ZHostList_t *) xmalloc(sizeof(ZHostList_t)))) {
syslog(LOG_WARNING, "hm_attach alloc");
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return(ENOMEM);
}
/* set up */
if (!(clist = (ZClientList_t *)xmalloc(sizeof(ZClientList_t)))) {
xfree(hlist);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return(ENOMEM);
}
clist->zclt_client = NULLZCNT;
@@ -609,7 +692,11 @@ host_attach(who, server)
/* chain in to the end of the list */
xinsque(hlist, server->zs_hosts->q_back);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return(ZERR_NONE);
}
@@ -624,9 +711,22 @@ host_detach(host, server)
register ZHostList_t *host;
ZServerDesc_t *server;
{
+ ZServerDesc_t *server2;
+#ifdef POSIX
+ sigset_t mask, omask;
+#else
+ int omask;
+#endif
+
/* undo what we did in host_attach */
- int omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */
- ZServerDesc_t *server2 = hostm_find_server (&host->zh_addr.sin_addr);
+#ifdef POSIX
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
+ omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
+ server2 = hostm_find_server (&host->zh_addr.sin_addr);
if (server2 != server) {
syslog(LOG_WARNING,
@@ -634,7 +734,11 @@ host_detach(host, server)
inet_ntoa (host->zh_addr.sin_addr),
server->addr,
server2->addr);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -649,7 +753,11 @@ host_detach(host, server)
remove_host(host);
xfree(host);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -874,7 +982,11 @@ insert_host(host, server)
{
struct hostlist *oldlist;
register int i = 0;
+#ifdef POSIX
+ sigset_t mask, omask;
+#else
int omask;
+#endif
#if 0
zdbug ((LOG_DEBUG,"insert_host %s %s",
@@ -883,7 +995,13 @@ insert_host(host, server)
if (hostm_find_host(&host->zh_addr.sin_addr))
return;
- omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */
+#ifdef POSIX
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
+ omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
num_hosts++;
oldlist = all_hosts;
@@ -896,7 +1014,11 @@ insert_host(host, server)
if (!oldlist) { /* this is the first */
all_hosts[0].host = host;
all_hosts[0].server_index = server - otherservers;
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -916,7 +1038,11 @@ insert_host(host, server)
i++;
}
xfree(oldlist);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
#if defined (DEBUG) && 0
if (zdebug) {
register int i = 0;
@@ -939,7 +1065,11 @@ remove_host(host)
{
struct hostlist *oldlist;
register int i = 0;
+#ifdef POSIX
+ sigset_t mask, omask;
+#else
int omask;
+#endif
#if 0
zdbug((LOG_DEBUG,"remove_host %s", inet_ntoa(host->zh_addr.sin_addr)));
@@ -947,14 +1077,24 @@ remove_host(host)
if (!hostm_find_host(&host->zh_addr.sin_addr))
return;
- omask = sigblock(sigmask(SIGFPE)); /* don't start db dumps */
+#ifdef POSIX
+ (void) sigemptyset(&mask);
+ (void) sigaddset(&mask, SIGFPE);
+ (void) sigprocmask(SIG_BLOCK, &mask, &omask);
+#else
+ omask = sigblock(sigmask(SIGFPE)); /* don't let db dumps start */
+#endif
if (--num_hosts == 0) {
#if 0
zdbug((LOG_DEBUG,"last host"));
#endif
xfree (all_hosts);
all_hosts = NULLHLT;
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}
@@ -979,7 +1119,11 @@ remove_host(host)
i++;
}
xfree (oldlist);
+#ifdef POSIX
+ (void) sigprocmask(SIG_SETMASK, &omask, (sigset_t *)0);
+#else
(void) sigsetmask(omask);
+#endif
return;
}