1*8324Ssam /* getnetent.c 4.2 82/10/05 */ 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'; 64*8324Ssam net.n_net = inet_addr(cp); 657896Ssam net.n_aliases = net_aliases; 667896Ssam q = net_aliases, cp = p; 677896Ssam while (*cp) { 687896Ssam if (*cp == ' ' || *cp == '\t') { 697896Ssam cp++; 707896Ssam continue; 717896Ssam } 727896Ssam if (q < &net_aliases[MAXALIASES - 1]) 737896Ssam *q++ = cp; 747896Ssam cp = any(cp, " \t"); 757896Ssam if (*cp != NULL) 767896Ssam *cp++ = '\0'; 777896Ssam } 787896Ssam *q = NULL; 797896Ssam return (&net); 807896Ssam } 817896Ssam 827896Ssam static char * 837896Ssam any(cp, match) 847896Ssam register char *cp; 857896Ssam char *match; 867896Ssam { 877896Ssam register char *mp, c; 887896Ssam 897896Ssam while (c = *cp) { 907896Ssam for (mp = match; *mp; mp++) 917896Ssam if (*mp == c) 927896Ssam return (cp); 937896Ssam cp++; 947896Ssam } 957896Ssam return ((char *)0); 967896Ssam } 97