1*9190Ssam /* getnetent.c 4.5 82/11/14 */ 27896Ssam 37896Ssam #include <stdio.h> 47896Ssam #include <sys/socket.h> 57896Ssam #include <netdb.h> 67896Ssam #include <ctype.h> 77896Ssam 87896Ssam #define MAXALIASES 35 97896Ssam 107896Ssam static char *NETDB = "/usr/lib/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; 66*9190Ssam q = net.n_aliases = net_aliases; 67*9190Ssam if (p != NULL) { 68*9190Ssam cp = p; 69*9190Ssam while (*cp) { 70*9190Ssam if (*cp == ' ' || *cp == '\t') { 71*9190Ssam cp++; 72*9190Ssam continue; 73*9190Ssam } 74*9190Ssam if (q < &net_aliases[MAXALIASES - 1]) 75*9190Ssam *q++ = cp; 76*9190Ssam cp = any(cp, " \t"); 77*9190Ssam if (*cp != NULL) 78*9190Ssam *cp++ = '\0'; 797896Ssam } 807896Ssam } 817896Ssam *q = NULL; 827896Ssam return (&net); 837896Ssam } 847896Ssam 857896Ssam static char * 867896Ssam any(cp, match) 877896Ssam register char *cp; 887896Ssam char *match; 897896Ssam { 907896Ssam register char *mp, c; 917896Ssam 927896Ssam while (c = *cp) { 937896Ssam for (mp = match; *mp; mp++) 947896Ssam if (*mp == c) 957896Ssam return (cp); 967896Ssam cp++; 977896Ssam } 987896Ssam return ((char *)0); 997896Ssam } 100