diff -dru netkit-bootparamd-0.17-pre20000412/rpc.bootparamd/rpc.bootparamd.c netkit-bootparamd-0.17-pre20000412.patched/rpc.bootparamd/rpc.bootparamd.c
--- netkit-bootparamd-0.17-pre20000412/rpc.bootparamd/rpc.bootparamd.c Tue Sep 14 12:01:16 1999
+++ netkit-bootparamd-0.17-pre20000412.patched/rpc.bootparamd/rpc.bootparamd.c Mon May 10 12:17:06 2004
@@ -178,6 +178,7 @@
{
FILE *bpf;
char *where;
+ int pass;
int ch, pch, fid_len, res = 0;
int match = 0;
@@ -189,22 +190,26 @@
exit(1);
}
- while (fscanf(bpf, "%s", hostname) > 0 && !match) {
- if ( *hostname != '#' ) { /* comment */
- if (!strcmp(hostname, askname)) {
- match = 1;
- }
- else {
- he = gethostbyname(hostname);
- if (he && !strcmp(he->h_name, askname)) match = 1;
- }
- }
- /* skip to next entry */
- if (match) break;
- pch = ch = getc(bpf);
- while ( ! ( ch == '\n' && pch != '\\') && ch != EOF) {
- pch = ch; ch = getc(bpf);
- }
+ /* Two passes; avoid unnecessary DNS lookups during the first one. */
+ for (pass = 0; pass < 2; pass++) {
+ rewind (bpf);
+ while (fscanf(bpf, "%s", hostname) > 0 && !match) {
+ if ( *hostname != '#' ) { /* comment */
+ if (!strcmp(hostname, askname)) {
+ match = 1;
+ }
+ else if (pass > 0) {
+ he = gethostbyname(hostname);
+ if (he && !strcmp(he->h_name, askname)) match = 1;
+ }
+ }
+ /* skip to next entry */
+ if (match) break;
+ pch = ch = getc(bpf);
+ while ( ! ( ch == '\n' && pch != '\\') && ch != EOF) {
+ pch = ch; ch = getc(bpf);
+ }
+ }
}
/* if match is true we read the rest of the line to get the