1*10087Ssam /* getnetent.c 4.7 83/01/02 */ 27896Ssam 37896Ssam #include <stdio.h> 47896Ssam #include <sys/socket.h> 57896Ssam #include <netdb.h> 67896Ssam #include <ctype.h> 77896Ssam 87896Ssam #define MAXALIASES 35 97896Ssam 109808Ssam static char NETDB[] = "/etc/networks"; 117896Ssam static FILE *netf = NULL; 127896Ssam static char line[BUFSIZ+1]; 137896Ssam static struct netent net; 147896Ssam static char *net_aliases[MAXALIASES]; 157896Ssam static int stayopen = 0; 167896Ssam static char *any(); 177896Ssam 187896Ssam setnetent(f) 197896Ssam int f; 207896Ssam { 217896Ssam if (netf == NULL) 227896Ssam netf = fopen(NETDB, "r" ); 237896Ssam else 247896Ssam rewind(netf); 257896Ssam stayopen |= f; 267896Ssam } 277896Ssam 287896Ssam endnetent() 297896Ssam { 307896Ssam if (netf && !stayopen) { 317896Ssam fclose(netf); 327896Ssam netf = NULL; 337896Ssam } 347896Ssam } 357896Ssam 367896Ssam struct netent * 377896Ssam getnetent() 387896Ssam { 397896Ssam char *p; 407896Ssam register char *cp, **q; 417896Ssam 427896Ssam if (netf == NULL && (netf = fopen(NETDB, "r" )) == NULL) 437896Ssam return (NULL); 447896Ssam again: 457896Ssam p = fgets(line, BUFSIZ, netf); 467896Ssam if (p == NULL) 477896Ssam return (NULL); 487896Ssam if (*p == '#') 497896Ssam goto again; 507896Ssam cp = any(p, "#\n"); 517896Ssam if (cp == NULL) 527896Ssam goto again; 537896Ssam *cp = '\0'; 547896Ssam net.n_name = p; 557896Ssam cp = any(p, " \t"); 567896Ssam if (cp == NULL) 577896Ssam goto again; 587896Ssam *cp++ = '\0'; 597896Ssam while (*cp == ' ' || *cp == '\t') 607896Ssam cp++; 617896Ssam p = any(cp, " \t"); 627896Ssam if (p != NULL) 637896Ssam *p++ = '\0'; 648364Ssam net.n_net = inet_network(cp); 658342Ssam net.n_addrtype = AF_INET; 669190Ssam q = net.n_aliases = net_aliases; 67*10087Ssam if (p != NULL) 689190Ssam cp = p; 69*10087Ssam while (cp && *cp) { 70*10087Ssam if (*cp == ' ' || *cp == '\t') { 71*10087Ssam cp++; 72*10087Ssam continue; 737896Ssam } 74*10087Ssam if (q < &net_aliases[MAXALIASES - 1]) 75*10087Ssam *q++ = cp; 76*10087Ssam cp = any(cp, " \t"); 77*10087Ssam if (cp != NULL) 78*10087Ssam *cp++ = '\0'; 797896Ssam } 807896Ssam *q = NULL; 817896Ssam return (&net); 827896Ssam } 837896Ssam 847896Ssam static char * 857896Ssam any(cp, match) 867896Ssam register char *cp; 877896Ssam char *match; 887896Ssam { 897896Ssam register char *mp, c; 907896Ssam 917896Ssam while (c = *cp) { 927896Ssam for (mp = match; *mp; mp++) 937896Ssam if (*mp == c) 947896Ssam return (cp); 957896Ssam cp++; 967896Ssam } 977896Ssam return ((char *)0); 987896Ssam } 99