Annotation of 43BSD/lib/libc/net/res_init.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1985 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  */
                      6: 
                      7: #if defined(LIBC_SCCS) && !defined(lint)
                      8: static char sccsid[] = "@(#)res_init.c 6.5 (Berkeley) 4/11/86";
                      9: #endif LIBC_SCCS and not lint
                     10: 
                     11: #include <sys/types.h>
                     12: #include <sys/socket.h>
                     13: #include <netinet/in.h>
                     14: #include <stdio.h>
                     15: #include <arpa/nameser.h>
                     16: #include <resolv.h>
                     17: 
                     18: /*
                     19:  * Resolver configuration file. Contains the address of the
                     20:  * inital name server to query and the default domain for
                     21:  * non fully qualified domain names.
                     22:  */
                     23: 
                     24: #ifdef CONFFILE
                     25: char    *conffile = CONFFILE;
                     26: #else
                     27: char    *conffile = "/etc/resolv.conf";
                     28: #endif
                     29: 
                     30: /*
                     31:  * Resolver state default settings
                     32:  */
                     33: 
                     34: #ifndef RES_TIMEOUT
                     35: #define RES_TIMEOUT 4
                     36: #endif
                     37: 
                     38: struct state _res = {
                     39:     RES_TIMEOUT,                 /* retransmition time interval */
                     40:     4,                           /* number of times to retransmit */
                     41:     RES_RECURSE|RES_DEFNAMES,    /* options flags */
                     42:     1,                           /* number of name servers */
                     43: };
                     44: 
                     45: /*
                     46:  * Set up default settings.  If the configuration file exist, the values
                     47:  * there will have precedence.  Otherwise, the server address is set to
                     48:  * INADDR_ANY and the default domain name comes from the gethostname().
                     49:  *
                     50:  * The configuration file should only be used if you want to redefine your
                     51:  * domain or run without a server on your machine.
                     52:  *
                     53:  * Return 0 if completes successfully, -1 on error
                     54:  */
                     55: res_init()
                     56: {
                     57:     register FILE *fp;
                     58:     char buf[BUFSIZ], *cp;
                     59:     extern u_long inet_addr();
                     60:     extern char *index();
                     61:     extern char *strcpy(), *strncpy();
                     62: #ifdef DEBUG
                     63:     extern char *getenv();
                     64: #endif DEBUG
                     65:     int n = 0;    /* number of nameserver records read from file */
                     66: 
                     67:     _res.nsaddr.sin_addr.s_addr = INADDR_ANY;
                     68:     _res.nsaddr.sin_family = AF_INET;
                     69:     _res.nsaddr.sin_port = htons(NAMESERVER_PORT);
                     70:     _res.nscount = 1;
                     71:     _res.defdname[0] = '\0';
                     72: 
                     73:     if ((fp = fopen(conffile, "r")) != NULL) {
                     74:         /* read the config file */
                     75:         while (fgets(buf, sizeof(buf), fp) != NULL) {
                     76:             /* read default domain name */
                     77:             if (!strncmp(buf, "domain", sizeof("domain") - 1)) {
                     78:                 cp = buf + sizeof("domain") - 1;
                     79:                 while (*cp == ' ' || *cp == '\t')
                     80:                     cp++;
                     81:                 if (*cp == '\0')
                     82:                     continue;
                     83:                 (void)strncpy(_res.defdname, cp, sizeof(_res.defdname));
                     84:                 _res.defdname[sizeof(_res.defdname) - 1] = '\0';
                     85:                 if ((cp = index(_res.defdname, '\n')) != NULL)
                     86:                     *cp = '\0';
                     87:                 continue;
                     88:             }
                     89:             /* read nameservers to query */
                     90:             if (!strncmp(buf, "nameserver", 
                     91:                sizeof("nameserver") - 1) && (n < MAXNS)) {
                     92:                 cp = buf + sizeof("nameserver") - 1;
                     93:                 while (*cp == ' ' || *cp == '\t')
                     94:                     cp++;
                     95:                 if (*cp == '\0')
                     96:                     continue;
                     97:                 _res.nsaddr_list[n].sin_addr.s_addr = inet_addr(cp);
                     98:                 if (_res.nsaddr_list[n].sin_addr.s_addr == (unsigned)-1) 
                     99:                     _res.nsaddr_list[n].sin_addr.s_addr = INADDR_ANY;
                    100:                 _res.nsaddr_list[n].sin_family = AF_INET;
                    101:                 _res.nsaddr_list[n].sin_port = htons(NAMESERVER_PORT);
                    102:                 if ( ++n >= MAXNS) { 
                    103:                     n = MAXNS;
                    104: #ifdef DEBUG
                    105:                     if ( _res.options & RES_DEBUG )
                    106:                         printf("MAXNS reached, reading resolv.conf\n");
                    107: #endif DEBUG
                    108:                 }
                    109:                 continue;
                    110:             }
                    111:         }
                    112:         if ( n > 1 ) 
                    113:             _res.nscount = n;
                    114:         (void) fclose(fp);
                    115:     }
                    116:     if (_res.defdname[0] == 0) {
                    117:         if (gethostname(buf, sizeof(_res.defdname)) == 0 &&
                    118:            (cp = index(buf, '.')))
                    119:              (void)strcpy(_res.defdname, cp + 1);
                    120:     }
                    121: 
                    122: #ifdef DEBUG
                    123:     /* Allow user to override the local domain definition */
                    124:     if ((cp = getenv("LOCALDOMAIN")) != NULL)
                    125:         (void)strncpy(_res.defdname, cp, sizeof(_res.defdname));
                    126: #endif DEBUG
                    127:     _res.options |= RES_INIT;
                    128:     return(0);
                    129: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.