[23149] in Source-Commits

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

/svn/athena r22810 - trunk/athena/lib/zephyr/server

daemon@ATHENA.MIT.EDU (ghudson@MIT.EDU)
Thu Apr 3 13:04:45 2008

Date: Thu, 3 Apr 2008 13:04:13 -0400 (EDT)
From: ghudson@MIT.EDU
Message-Id: <200804031704.NAA06138@drugstore.mit.edu>
To: source-commits@MIT.EDU
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Author: ghudson
Date: 2008-04-03 13:04:12 -0400 (Thu, 03 Apr 2008)
New Revision: 22810

Modified:
   trunk/athena/lib/zephyr/server/main.c
   trunk/athena/lib/zephyr/server/server.c
   trunk/athena/lib/zephyr/server/zserver.h
   trunk/athena/lib/zephyr/server/zsrv_conf.h
Log:
From Karl Ramm: When the Zephyr server is compiled with Hesiod support,
allow a server.list file to override the Hesiod server list if present.


Modified: trunk/athena/lib/zephyr/server/main.c
===================================================================
--- trunk/athena/lib/zephyr/server/main.c	2008-04-03 16:26:25 UTC (rev 22809)
+++ trunk/athena/lib/zephyr/server/main.c	2008-04-03 17:04:12 UTC (rev 22810)
@@ -91,9 +91,7 @@
 char *programname;			/* set to the basename of argv[0] */
 char myname[MAXHOSTNAMELEN];		/* my host name */
 
-#ifndef HAVE_HESIOD
 char list_file[128];
-#endif
 #ifdef HAVE_KRB4
 char srvtab_file[128];
 char my_realm[REALM_SZ];
@@ -139,9 +137,7 @@
     extern char *optarg;
     extern int optind;
 
-#ifndef HAVE_HESIOD
     sprintf(list_file, "%s/zephyr/%s", SYSCONFDIR, SERVER_LIST_FILE);
-#endif
 #ifdef HAVE_KRB4
     sprintf(srvtab_file, "%s/zephyr/%s", SYSCONFDIR, ZEPHYR_SRVTAB);
     sprintf(tkt_file, "%s/zephyr/%s", SYSCONFDIR, ZEPHYR_TKFILE);

Modified: trunk/athena/lib/zephyr/server/server.c
===================================================================
--- trunk/athena/lib/zephyr/server/server.c	2008-04-03 16:26:25 UTC (rev 22809)
+++ trunk/athena/lib/zephyr/server/server.c	2008-04-03 17:04:12 UTC (rev 22810)
@@ -92,10 +92,9 @@
 #endif
 
 static struct in_addr *get_server_addrs __P((int *number));
-#ifndef HAVE_HESIOD
 static char **get_server_list __P((char *file));
+static char **get_single_server __P((void));
 static void free_server_list __P((char **list));
-#endif
 
 static Unacked *srv_nacktab[SRV_NACKTAB_HASHSIZE];
 Server *otherservers;		/* points to an array of the known
@@ -981,22 +980,25 @@
     int *number; /* RETURN */
 {
     int i;
-    char **server_hosts;
+    char **server_hosts = NULL;
+    char **server_hosts_free = NULL;
     char **cpp;
     struct in_addr *addrs;
     struct in_addr *addr;
     struct hostent *hp;
 
+    server_hosts = get_server_list(list_file);
+    server_hosts_free = server_hosts;
 #ifdef HAVE_HESIOD
-    /* get the names from Hesiod */
-    server_hosts = hes_resolve("zephyr","sloc");
     if (!server_hosts)
-	return NULL;
-#else
-    server_hosts = get_server_list(list_file);
+	server_hosts = hes_resolve("zephyr","sloc");
+#endif
+    if (!server_hosts) {
+	server_hosts = get_single_server();
+	server_hosts_free = server_hosts;
+    }
     if (!server_hosts)
 	return NULL;
-#endif
     /* count up */
     i = 0;
     for (cpp = server_hosts; *cpp; cpp++)
@@ -1015,14 +1017,11 @@
 	}
     }
     *number = i;
-#ifndef HAVE_HESIOD
-    free_server_list(server_hosts);
-#endif
+    if (server_hosts_free)
+      free_server_list(server_hosts_free);
     return addrs;
 }
 
-#ifndef HAVE_HESIOD
-
 static int nhosts = 0;
 
 /*
@@ -1040,40 +1039,59 @@
     int nused = 0;
     char *newline;
 
+    fp = fopen(file, "r");
+    if (!fp)
+    	return NULL;
     /* start with 16, realloc if necessary */
     nhosts = 16;
     ret_list = (char **) malloc(nhosts * sizeof(char *));
+    if (!ret_list)
+    	return NULL;
 
-    fp = fopen(file, "r");
-    if (fp) {
-	while (fgets(buf, MAXHOSTNAMELEN, fp)) {
-	    /* nuke the newline, being careful not to overrun
-	       the buffer searching for it with strlen() */
-	    buf[MAXHOSTNAMELEN - 1] = '\0';
-	    newline = strchr(buf, '\n');
-	    if (newline)
-		*newline = '\0';
+    while (fgets(buf, MAXHOSTNAMELEN, fp)) {
+	/* nuke the newline, being careful not to overrun
+	   the buffer searching for it with strlen() */
+	buf[MAXHOSTNAMELEN - 1] = '\0';
+	newline = strchr(buf, '\n');
+	if (newline)
+	    *newline = '\0';
 
-	    if (nused + 1 >= nhosts) {
-		/* get more pointer space if necessary */
-		/* +1 to leave room for null pointer */
-		ret_list = (char **) realloc(ret_list, nhosts * 2);
-		nhosts = nhosts * 2;
-	    }
-	    ret_list[nused++] = strsave(buf);
+	if (nused + 1 >= nhosts) {
+	    /* get more pointer space if necessary */
+	    /* +1 to leave room for null pointer */
+	    ret_list = (char **) realloc(ret_list, nhosts * 2);
+	    nhosts = nhosts * 2;
 	}
-	fclose(fp);
-    } else {
-	if (gethostname(buf, sizeof(buf)) < 0) {
-	    free(ret_list);
-	    return NULL;
-	}
 	ret_list[nused++] = strsave(buf);
     }
+    fclose(fp);
+    if (!nused) {
+    	free(ret_list);
+	return NULL;
+    }
     ret_list[nused] = NULL;
     return ret_list;
 }
 
+static char **
+get_single_server()
+{
+    char buf[MAXHOSTNAMELEN];
+    char **ret_list;
+    int nused = 0;
+    nhosts = 2;
+    ret_list = (char **) malloc(nhosts * sizeof(char *));
+    if (!ret_list)
+    	return NULL;
+    if (gethostname(buf, sizeof(buf)) < 0) {
+	free(ret_list);
+	return NULL;
+    }
+    ret_list[nused++] = strsave(buf);
+    ret_list[nused] = NULL;
+    return ret_list;
+}
+
 /* 
  * free storage allocated by get_server_list
  */
@@ -1090,7 +1108,6 @@
     free(orig_list);
     return;
 }
-#endif
 
 /*
  * initialize the server structure for address addr, and set a timer

Modified: trunk/athena/lib/zephyr/server/zserver.h
===================================================================
--- trunk/athena/lib/zephyr/server/zserver.h	2008-04-03 16:26:25 UTC (rev 22809)
+++ trunk/athena/lib/zephyr/server/zserver.h	2008-04-03 17:04:12 UTC (rev 22810)
@@ -354,9 +354,7 @@
 extern int nfds;			/* number to look at in select() */
 extern int zdebug;
 extern char myname[];			/* domain name of this host */
-#ifndef HAVE_HESIOD
 extern char list_file[];
-#endif
 #ifdef HAVE_KRB4
 extern char srvtab_file[];
 extern char my_realm[];

Modified: trunk/athena/lib/zephyr/server/zsrv_conf.h
===================================================================
--- trunk/athena/lib/zephyr/server/zsrv_conf.h	2008-04-03 16:26:25 UTC (rev 22809)
+++ trunk/athena/lib/zephyr/server/zsrv_conf.h	2008-04-03 17:04:12 UTC (rev 22810)
@@ -16,9 +16,7 @@
 
 /* Path names are relative to CONFDIR, except for the class registry. */
 
-#ifndef HAVE_HESIOD
 #define SERVER_LIST_FILE	"server.list"
-#endif
 #define REALM_LIST_FILE		"realm.list"
 #ifdef HAVE_KRB4
 #define ZEPHYR_SRVTAB		"srvtab"


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