summaryrefslogtreecommitdiff
path: root/server/realm.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/realm.c')
-rw-r--r--server/realm.c74
1 files changed, 25 insertions, 49 deletions
diff --git a/server/realm.c b/server/realm.c
index 431893e..2b906a9 100644
--- a/server/realm.c
+++ b/server/realm.c
@@ -213,16 +213,16 @@ get_realm_lists(char *file)
rlm = &rlm_list[ii];
if (rlm->nused +1 >= rlm->nservers) {
/* make more space */
- rlm->servers = (char **)realloc((char *)rlm->servers,
- (unsigned)rlm->nservers * 2 *
- sizeof(char *));
+ rlm->servers = (struct _ZRealm_server *)
+ realloc((char *)rlm->servers,
+ (unsigned)rlm->nservers * 2 *
+ sizeof(struct _ZRealm_server));
if (!rlm->servers) {
syslog(LOG_CRIT, "get_realm_lists realloc");
abort();
}
rlm->nservers *= 2;
}
- rlm->servers[rlm->nused++] = strsave(server);
} else {
/* new realm */
if (nused + 1 >= ntotal) {
@@ -240,13 +240,21 @@ get_realm_lists(char *file)
strcpy(rlm->name, realm);
rlm->nused = 0;
rlm->nservers = 16;
- rlm->servers = (char **)malloc(rlm->nservers * sizeof(char *));
+ rlm->servers = (struct _ZRealm_server *)
+ malloc(rlm->nservers * sizeof(struct _ZRealm_server));
if (!rlm->servers) {
syslog(LOG_CRIT, "get_realm_lists malloc");
abort();
}
- rlm->servers[rlm->nused++] = strsave(server);
}
+ memset(&rlm->servers[rlm->nused], 0, sizeof(struct _ZRealm_server));
+ if (*server == '/') {
+ rlm->servers[rlm->nused].name = strsave(server + 1);
+ rlm->servers[rlm->nused].dontsend = 1;
+ } else {
+ rlm->servers[rlm->nused].name = strsave(server);
+ }
+ rlm->nused++;
}
if (nused + 1 >= ntotal) {
rlm_list = (ZRealmname *)realloc((char *)rlm_list,
@@ -494,9 +502,7 @@ realm_init(void)
ZRealm_server *srvr;
ZRealmname *rlmnames;
ZRealm *rlm;
- int ii, jj, found;
- struct in_addr *addresses;
- char *nosend;
+ int ii, jj;
struct hostent *hp;
char realm_list_file[128];
char rlmprinc[MAX_PRINCIPAL_SIZE];
@@ -521,50 +527,23 @@ realm_init(void)
for (ii = 0; ii < nrealms; ii++) {
rlm = &otherrealms[ii];
strcpy(rlm->name, rlmnames[ii].name);
- nosend = malloc(rlmnames[ii].nused * sizeof(char));
-
- addresses = (struct in_addr *)malloc(rlmnames[ii].nused *
- sizeof(struct in_addr));
- if (!addresses || !nosend) {
- syslog(LOG_CRIT, "malloc failed in realm_init");
- abort();
- }
/* convert names to addresses */
- found = 0;
- for (jj = 0; jj < rlmnames[ii].nused; jj++) {
- if (*rlmnames[ii].servers[jj] == '/')
- nosend[found] = 1;
- else
- nosend[found] = 0;
-
- hp = gethostbyname((rlmnames[ii].servers[jj])+nosend[found]);
+ rlm->count = rlmnames[ii].nused;
+ rlm->srvrs = rlmnames[ii].servers;
+ for (srvr = rlm->srvrs, jj = 0; jj < rlm->count; jj++, srvr++) {
+ hp = gethostbyname(srvr->name);
if (hp) {
- memmove(&addresses[found], hp->h_addr,
+ memmove(&srvr->addr.sin_addr, hp->h_addr,
sizeof(struct in_addr));
- found++;
+ /* use the server port */
+ srvr->addr.sin_port = srv_addr.sin_port;
+ srvr->addr.sin_family = AF_INET;
+ srvr->usable = 1;
} else
- syslog(LOG_WARNING, "hostname failed, %s",
- rlmnames[ii].servers[jj]);
- /* free the hostname */
- free(rlmnames[ii].servers[jj]);
- }
- rlm->count = found;
- rlm->srvrs = (ZRealm_server *)malloc(found * sizeof(ZRealm_server));
- if (!rlm->srvrs) {
- syslog(LOG_CRIT, "malloc failed in realm_init");
- abort();
+ syslog(LOG_WARNING, "hostname failed, %s", srvr->name);
}
- memset(rlm->srvrs, 0, (found * sizeof(ZRealm_server)));
- for (srvr = rlm->srvrs, jj = 0; jj < rlm->count; jj++, srvr++) {
- srvr->addr.sin_addr = addresses[jj];
- /* use the server port */
- srvr->addr.sin_port = srv_addr.sin_port;
- srvr->addr.sin_family = AF_INET;
- srvr->usable = 1;
- srvr->dontsend = nosend[jj];
- }
client = (Client *) malloc(sizeof(Client));
if (!client) {
syslog(LOG_CRIT, "malloc failed in realm_init");
@@ -598,9 +577,6 @@ realm_init(void)
/* Assume the best */
rlm->state = REALM_TARDY;
rlm->have_tkt = 1;
- free(rlmnames[ii].servers);
- free(addresses);
- free(nosend);
}
free(rlmnames);
}