- if ((fp = fopen(conffile, "r")) != NULL) {
- /* read the config file */
- while (fgets(buf, sizeof(buf), fp) != NULL) {
- /* read default domain name */
- if (!strncmp(buf, "domain", sizeof("domain") - 1)) {
- cp = buf + sizeof("domain") - 1;
- while (*cp == ' ' || *cp == '\t')
- cp++;
- if (*cp == '\0')
- continue;
- (void)strncpy(_res.defdname, cp, sizeof(_res.defdname));
- _res.defdname[sizeof(_res.defdname) - 1] = '\0';
- if ((cp = index(_res.defdname, '\n')) != NULL)
- *cp = '\0';
- continue;
- }
- /* read nameservers to query */
- if (!strncmp(buf, "nameserver",
- sizeof("nameserver") - 1) && (n < MAXNS)) {
- cp = buf + sizeof("nameserver") - 1;
- while (*cp == ' ' || *cp == '\t')
- cp++;
- if (*cp == '\0')
- continue;
- _res.nsaddr_list[n].sin_addr.s_addr = inet_addr(cp);
- if (_res.nsaddr_list[n].sin_addr.s_addr == (unsigned)-1)
- _res.nsaddr_list[n].sin_addr.s_addr = INADDR_ANY;
- _res.nsaddr_list[n].sin_family = AF_INET;
- _res.nsaddr_list[n].sin_port = htons(NAMESERVER_PORT);
-#ifdef DEBUG
- if ( _res.options & RES_DEBUG )
- printf("Server #%d address = %s\n", n+1,
- inet_ntoa(_res.nsaddr_list[n].sin_addr.s_addr));
-#endif DEBUG
- if ( ++n >= MAXNS) {
- n = MAXNS;
-#ifdef DEBUG
- if ( _res.options & RES_DEBUG )
- printf("MAXNS reached\n");
-#endif DEBUG
- }
- continue;
- }
- }
- if ( n > 1 )
- _res.nscount = n;
- (void) fclose(fp);
- }
- if (_res.defdname[0] == 0) {
- if (gethostname(buf, sizeof(_res.defdname)) == 0 &&
- (cp = index(buf, '.')))
- (void)strcpy(_res.defdname, cp + 1);
- }
+ cp = buf + sizeof("nameserver") - 1;
+ while (*cp == ' ' || *cp == '\t')
+ cp++;
+ if ((*cp != '\0') && (*cp != '\n') && inet_aton(cp, &a)) {
+ _res.nsaddr_list[nserv].sin_addr = a;
+ _res.nsaddr_list[nserv].sin_family = AF_INET;
+ _res.nsaddr_list[nserv].sin_port =
+ htons(NAMESERVER_PORT);
+ nserv++;
+ }
+ continue;
+ }
+ }
+ if (nserv > 1)
+ _res.nscount = nserv;
+ (void) fclose(fp);
+ }
+ if (_res.defdname[0] == 0) {
+ if (gethostname(buf, sizeof(_res.defdname)) == 0 &&
+ (cp = index(buf, '.')))
+ (void)strcpy(_res.defdname, cp + 1);
+ }