[23149] in Source-Commits
/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"