[177] in Zephyr_Bugs
zhm/zhm.c
daemon@ATHENA.MIT.EDU (John Carr)
Sun Dec 2 20:59:07 1990
To: bug-zephyr@ATHENA.MIT.EDU
Date: Sun, 02 Dec 90 20:58:52 EST
From: John Carr <jfc@ATHENA.MIT.EDU>
Assorted hostmanager code cleanup.
*** /afs/athena.mit.edu/astaff/project/zephyr/src/zhm/zhm.c Tue Nov 6 14:03:59 1990
--- zhm.c Sun Dec 2 20:29:53 1990
***************
*** 17,22 ****
--- 17,23 ----
#include <ctype.h>
#include <signal.h>
+ #include <strings.h>
#include <sys/ioctl.h>
#include <sys/file.h>
/*
***************
*** 45,55 ****
int sig_type = 0;
struct hostent *hp;
char **clust_info;
! char hostname[MAXHOSTNAMELEN], loopback[4];
char *PidFile = PIDFILE;
extern int errno;
! extern char *index(), *strcpy(), *sbrk();
extern long time();
void init_hm(), detach(), handle_timeout(), resend_notices(), die_gracefully();
--- 46,57 ----
int sig_type = 0;
struct hostent *hp;
char **clust_info;
! char hostname[MAXHOSTNAMELEN];
! const char loopback[4] = {127, 0, 0, 1};
char *PidFile = PIDFILE;
extern int errno;
! extern char *sbrk();
extern long time();
void init_hm(), detach(), handle_timeout(), resend_notices(), die_gracefully();
***************
*** 67,74 ****
register int i, j = 0;
if (gethostname(hostname, MAXHOSTNAMELEN) < 0) {
! printf("Can't find my hostname?!\n");
! exit(-1);
}
prim_serv[0] = '\0';
while ((opt = getopt(argc, argv, "drhi")) != EOF)
--- 69,76 ----
register int i, j = 0;
if (gethostname(hostname, MAXHOSTNAMELEN) < 0) {
! perror("zhm: hostname");
! exit(-1);
}
prim_serv[0] = '\0';
while ((opt = getopt(argc, argv, "drhi")) != EOF)
***************
*** 103,109 ****
/* Override server argument? */
if (optind < argc) {
if ((hp = gethostbyname(argv[optind++])) == NULL) {
! printf("Unknown server name: %s\n", argv[optind-1]);
} else
(void) strcpy(prim_serv, hp->h_name);
/* argc-optind is the # of other servers on the command line */
--- 105,111 ----
/* Override server argument? */
if (optind < argc) {
if ((hp = gethostbyname(argv[optind++])) == NULL) {
! fprintf(stderr, "zhm: Unknown server name: %s\n", argv[optind-1]);
} else
(void) strcpy(prim_serv, hp->h_name);
/* argc-optind is the # of other servers on the command line */
***************
*** 111,117 ****
serv_list[0] = prim_serv;
for (i = 1; optind < argc; optind++) {
if ((hp = gethostbyname(argv[optind])) == NULL) {
! printf("Unknown server name '%s', ignoring\n", argv[optind]);
continue;
}
serv_list[i] = strsave(hp->h_name);
--- 113,119 ----
serv_list[0] = prim_serv;
for (i = 1; optind < argc; optind++) {
if ((hp = gethostbyname(argv[optind])) == NULL) {
! fprintf(stderr, "zhm: Unknown server name '%s', ignoring\n", argv[optind]);
continue;
}
serv_list[i] = strsave(hp->h_name);
***************
*** 134,140 ****
register char *c;
if ((c = index(*clust_info, ' ')) == 0) {
! printf("Hesiod error getting primary server info.\n");
} else
(void)strcpy(prim_serv, c+1);
break;
--- 136,143 ----
register char *c;
if ((c = index(*clust_info, ' ')) == 0) {
! fprintf(stderr,
! "Hesiod error getting primary server info.\n");
} else
(void)strcpy(prim_serv, c+1);
break;
***************
*** 143,155 ****
register char *c;
if ((c = index(*clust_info, ' ')) == 0) {
! printf("Hesiod error getting zcluster info.\n");
} else {
if ((zcluster = malloc((unsigned)(strlen(c+1)+1)))
!= NULL) {
(void)strcpy(zcluster, c+1);
} else {
! printf("Out of memory.\n");
exit(-5);
}
}
--- 146,159 ----
register char *c;
if ((c = index(*clust_info, ' ')) == 0) {
! fprintf(stderr, "Hesiod error %d getting zcluster info.\n",
! hes_error());
} else {
if ((zcluster = malloc((unsigned)(strlen(c+1)+1)))
!= NULL) {
(void)strcpy(zcluster, c+1);
} else {
! fprintf(stderr, "zhm: Out of memory.\n");
exit(-5);
}
}
***************
*** 188,195 ****
(void) strcpy(prim_serv, serv_list[random() % j]);
}
#endif /* HESIOD */
! if (*prim_serv == NULL) {
! printf("No valid primary server found, exiting.\n");
exit(ZERR_SERVNAK);
}
init_hm();
--- 192,199 ----
(void) strcpy(prim_serv, serv_list[random() % j]);
}
#endif /* HESIOD */
! if (*prim_serv == '\0') {
! fprintf(stderr, "No valid primary server found, exiting.\n");
exit(ZERR_SERVNAK);
}
init_hm();
***************
*** 299,319 ****
init_queue();
cur_serv_list = serv_list;
! if (*prim_serv == NULL)
(void)strcpy(prim_serv, *cur_serv_list);
- loopback[0] = 127;
- loopback[1] = 0;
- loopback[2] = 0;
- loopback[3] = 1;
-
/* kill old hm if it exists */
fp = fopen(PidFile, "r");
if (fp != NULL) {
! (void)fscanf(fp, "%d\n", &oldpid);
! while (!kill(oldpid, SIGTERM))
! sleep(1);
! syslog(LOG_INFO, "Killed old image.");
(void) fclose(fp);
}
--- 303,325 ----
init_queue();
cur_serv_list = serv_list;
! if (*prim_serv == '\0')
(void)strcpy(prim_serv, *cur_serv_list);
/* kill old hm if it exists */
fp = fopen(PidFile, "r");
if (fp != NULL) {
! if(fscanf(fp, "%d\n", &oldpid) == 1) {
! int i;
! for(i = 0;i < 10;i++)
! if(kill(oldpid, SIGTERM) == -1)
! break;
! else
! sleep(1);
! syslog(LOG_INFO, "Killed old image.");
! } else {
! syslog(LOG_INFO, "Can't read old PID from %s.", PidFile);
! }
(void) fclose(fp);
}
***************
*** 323,329 ****
} else {
/* Open client socket, for receiving client and server notices */
if ((sp = getservbyname(HM_SVCNAME, "udp")) == NULL) {
! printf("No %s entry in /etc/services.\n", HM_SVCNAME);
exit(1);
}
cli_port = sp->s_port;
--- 329,335 ----
} else {
/* Open client socket, for receiving client and server notices */
if ((sp = getservbyname(HM_SVCNAME, "udp")) == NULL) {
! fprintf(stderr, "No %s entry in /etc/services.\n", HM_SVCNAME);
exit(1);
}
cli_port = sp->s_port;
***************
*** 339,345 ****
/* Open the server socket */
if ((sp = getservbyname(SERVER_SVCNAME, "udp")) == NULL) {
! printf("No %s entry in /etc/services.\n", SERVER_SVCNAME);
exit(1);
}
--- 345,351 ----
/* Open the server socket */
if ((sp = getservbyname(SERVER_SVCNAME, "udp")) == NULL) {
! fprintf(stderr, "No %s entry in /etc/services.\n", SERVER_SVCNAME);
exit(1);
}
***************
*** 519,524 ****
--- 525,541 ----
exit(0);
}
+ void die_ungracefully(message, retcode)
+ char *message;
+ int retcode;
+ {
+ syslog(LOG_ERR, message);
+ send_flush_notice(HM_FLUSH);
+ (void)unlink(PidFile);
+ closelog();
+ exit(retcode);
+ }
+
char *
strsave(sp)
char *sp;
***************
*** 525,533 ****
{
register char *ret;
! if((ret = malloc((unsigned) strlen(sp)+1)) == NULL) {
! abort();
! }
! (void) strcpy(ret,sp);
! return(ret);
}
--- 542,548 ----
{
register char *ret;
! if((ret = malloc((unsigned) strlen(sp)+1)) == NULL)
! die_ungracefully("Out of memory", 2);
! return strcpy(ret,sp);
}