int afsconf_GetAfsdbInfo(char *acellName, char *aservice, struct afsconf_cell *acellInfo) { afs_int32 cellHostAddrs[AFSMAXCELLHOSTS]; char cellHostNames[AFSMAXCELLHOSTS][MAXHOSTCHARS]; unsigned short ipRanks[AFSMAXCELLHOSTS]; unsigned short ports[AFSMAXCELLHOSTS]; char *realCellName = NULL; int ttl, numServers, i; char *service = aservice; int code; unsigned short afsdbport; if (!service) { service = "afs3-vlserver"; afsdbport = htons(7003); } else { service = aservice; afsdbport = afsconf_FindService(service); } code = afsconf_LookupServer((const char *)service, "udp", (const char *)acellName, afsdbport, cellHostAddrs, cellHostNames, ports, ipRanks, &numServers, &ttl, &realCellName); if (code == 0) { acellInfo->timeout = ttl; acellInfo->numServers = numServers; for (i = 0; i < numServers; i++) { memcpy(&acellInfo->hostAddr[i].sin_addr.s_addr, &cellHostAddrs[i], sizeof(afs_int32)); memcpy(acellInfo->hostName[i], cellHostNames[i], MAXHOSTCHARS); acellInfo->hostAddr[i].sin_family = AF_INET; acellInfo->hostAddr[i].sin_port = ports[i]; if (realCellName) { strlcpy(acellInfo->name, realCellName, sizeof(acellInfo->name)); free(realCellName); realCellName = NULL; } } acellInfo->linkedCell = NULL; /* no linked cell */ acellInfo->flags = 0; } return code; }
int afsconf_GetAfsdbInfo(char *acellName, char *aservice, struct afsconf_cell *acellInfo) { afs_uint32 cellHostAddrs[AFSMAXCELLHOSTS]; char cellHostNames[AFSMAXCELLHOSTS][MAXHOSTCHARS]; unsigned short ipRanks[AFSMAXCELLHOSTS]; unsigned short ports[AFSMAXCELLHOSTS]; char *realCellName = NULL; int ttl, numServers, i; char *service = aservice; int code; unsigned short afsdbport; if (!service) { service = "afs3-vlserver"; afsdbport = htons(7003); } else { service = aservice; afsdbport = afsconf_FindService(service); } code = afsconf_LookupServer((const char *)service, "udp", (const char *)acellName, afsdbport, cellHostAddrs, cellHostNames, ports, ipRanks, &numServers, &ttl, &realCellName); /* If we couldn't find an entry for the requested service * and that service happens to be the prservice or kaservice * then fallback to searching for afs3-vlserver and assigning * the port number here. */ if (code < 0 && (afsdbport == htons(7002) || afsdbport == htons(7004))) { code = afsconf_LookupServer("afs3-vlserver", "udp", (const char *)acellName, afsdbport, cellHostAddrs, cellHostNames, ports, ipRanks, &numServers, &ttl, &realCellName); if (code >= 0) { for (i = 0; i < numServers; i++) ports[i] = afsdbport; } } if (code == 0) { acellInfo->timeout = ttl; acellInfo->numServers = numServers; for (i = 0; i < numServers; i++) { memcpy(&acellInfo->hostAddr[i].sin_addr.s_addr, &cellHostAddrs[i], sizeof(afs_int32)); memcpy(acellInfo->hostName[i], cellHostNames[i], MAXHOSTCHARS); acellInfo->hostAddr[i].sin_family = AF_INET; acellInfo->hostAddr[i].sin_port = ports[i]; if (realCellName) { strlcpy(acellInfo->name, realCellName, sizeof(acellInfo->name)); free(realCellName); realCellName = NULL; } } acellInfo->linkedCell = NULL; /* no linked cell */ acellInfo->flags = 0; } return code; }