*/
int
-parseNetRestrictFile(afs_uint32 outAddrs[], afs_uint32 * mask,
- afs_uint32 * mtu, afs_uint32 maxAddrs,
- afs_uint32 * nAddrs, char reason[], const char *fileName)
+parseNetRestrictFile_int(afs_uint32 outAddrs[], afs_uint32 * mask,
+ afs_uint32 * mtu, afs_uint32 maxAddrs,
+ afs_uint32 * nAddrs, char reason[],
+ const char *fileName, const char *fileName_ni)
{
FILE *fp;
char line[MAX_NETFILE_LINE];
sprintf(reason, "No existing IP interfaces found");
return -1;
}
+ i = 0;
+ if ((neaddrs < MAXIPADDRS) && fileName_ni)
+ i = ParseNetInfoFile_int(&(eAddrs[neaddrs]), &(eMask[neaddrs]),
+ &(eMtu[neaddrs]), MAXIPADDRS-neaddrs, reason,
+ fileName_ni, 1);
+
+ if (i > 0)
+ neaddrs += i;
if ((fp = fopen(fileName, "r")) == 0) {
sprintf(reason, "Could not open file %s for reading:%s", fileName,
return (usedfile ? 0 : 1); /* 0=>used the file. 1=>didn't use file */
}
-
+int
+parseNetRestrictFile(afs_uint32 outAddrs[], afs_uint32 * mask,
+ afs_uint32 * mtu, afs_uint32 maxAddrs,
+ afs_uint32 * nAddrs, char reason[],
+ const char *fileName)
+{
+ return parseNetRestrictFile_int(outAddrs, mask, mtu, maxAddrs, nAddrs, reason, fileName, NULL);
+}
/*
* this function reads in stuff from InterfaceAddr file in
* interface addresses. Pulled out from afsd.c
*/
int
-ParseNetInfoFile(afs_uint32 * final, afs_uint32 * mask, afs_uint32 * mtu,
- int max, char reason[], const char *fileName)
+ParseNetInfoFile_int(afs_uint32 * final, afs_uint32 * mask, afs_uint32 * mtu,
+ int max, char reason[], const char *fileName,
+ int fakeonly)
{
afs_uint32 existingAddr[MAXIPADDRS], existingMask[MAXIPADDRS],
"afs:Too many interfaces. The current kernel configuration supports a maximum of %d interfaces\n",
max);
} else if (fake) {
- fprintf(stderr, "Client (2) also has address %s\n", line);
+ if (!fake)
+ fprintf(stderr, "Client (2) also has address %s\n", line);
final[count] = addr;
mask[count] = 0xffffffff;
mtu[count] = htonl(1500);
count++;
- } else {
+ } else if (!fakeonly) {
final[count] = existingAddr[i];
mask[count] = existingMask[i];
mtu[count] = existingMtu[i];
return count;
}
-
+int
+ParseNetInfoFile(afs_uint32 * final, afs_uint32 * mask, afs_uint32 * mtu,
+ int max, char reason[], const char *fileName)
+{
+ return ParseNetInfoFile_int(final, mask, mtu, max, reason, fileName, 0);
+}
/*
* Given two arrays of addresses, masks and mtus find the common ones
ParseNetInfoFile(addrbuf1, maskbuf1, mtubuf1, MAXIPADDRS, reason,
niFileName);
code =
- parseNetRestrictFile(addrbuf2, maskbuf2, mtubuf2, MAXIPADDRS,
- &nAddrs2, reason, nrFileName);
+ parseNetRestrictFile_int(addrbuf2, maskbuf2, mtubuf2, MAXIPADDRS,
+ &nAddrs2, reason, nrFileName, niFileName);
if ((nAddrs1 < 0) && (code)) {
/* both failed */
return -1;
AFSDIR_SERVER_SYSID_FILEPATH, nentries));
return EIO;
}
- FS_HostAddr_cnt = nentries;
- for (i = 0; i < nentries; i++) {
- if (read(fd, (char *)&FS_HostAddrs[i], sizeof(afs_int32)) !=
- sizeof(afs_int32)) {
- ViceLog(0,
- ("%s: Read of addresses failed (%d)\n",
- AFSDIR_SERVER_SYSID_FILEPATH, errno));
- FS_HostAddr_cnt = 0; /* reset it */
- return EIO;
+ if (FS_HostAddr_cnt == 0) {
+ FS_HostAddr_cnt = nentries;
+ for (i = 0; i < nentries; i++) {
+ if (read(fd, (char *)&FS_HostAddrs[i], sizeof(afs_int32)) !=
+ sizeof(afs_int32)) {
+ ViceLog(0,
+ ("%s: Read of addresses failed (%d)\n",
+ AFSDIR_SERVER_SYSID_FILEPATH, errno));
+ FS_HostAddr_cnt = 0; /* reset it */
+ return EIO;
+ }
}
+ } else {
+ ViceLog(1,
+ ("%s: address list ignored (NetInfo/NetRestrict override)\n",
+ AFSDIR_SERVER_SYSID_FILEPATH));
}
close(fd);
return 0;