[177] in Zephyr_Bugs

home help back first fref pref prev next nref lref last post

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);
  }

home help back first fref pref prev next nref lref last post