1 /* getnetent.c 4.5 82/11/14 */ 2 3 #include <stdio.h> 4 #include <sys/socket.h> 5 #include <netdb.h> 6 #include <ctype.h> 7 8 #define MAXALIASES 35 9 10 static char *NETDB = "/usr/lib/networks"; 11 static FILE *netf = NULL; 12 static char line[BUFSIZ+1]; 13 static struct netent net; 14 static char *net_aliases[MAXALIASES]; 15 static int stayopen = 0; 16 static char *any(); 17 18 setnetent(f) 19 int f; 20 { 21 if (netf == NULL) 22 netf = fopen(NETDB, "r" ); 23 else 24 rewind(netf); 25 stayopen |= f; 26 } 27 28 endnetent() 29 { 30 if (netf && !stayopen) { 31 fclose(netf); 32 netf = NULL; 33 } 34 } 35 36 struct netent * 37 getnetent() 38 { 39 char *p; 40 register char *cp, **q; 41 42 if (netf == NULL && (netf = fopen(NETDB, "r" )) == NULL) 43 return (NULL); 44 again: 45 p = fgets(line, BUFSIZ, netf); 46 if (p == NULL) 47 return (NULL); 48 if (*p == '#') 49 goto again; 50 cp = any(p, "#\n"); 51 if (cp == NULL) 52 goto again; 53 *cp = '\0'; 54 net.n_name = p; 55 cp = any(p, " \t"); 56 if (cp == NULL) 57 goto again; 58 *cp++ = '\0'; 59 while (*cp == ' ' || *cp == '\t') 60 cp++; 61 p = any(cp, " \t"); 62 if (p != NULL) 63 *p++ = '\0'; 64 net.n_net = inet_network(cp); 65 net.n_addrtype = AF_INET; 66 q = net.n_aliases = net_aliases; 67 if (p != NULL) { 68 cp = p; 69 while (*cp) { 70 if (*cp == ' ' || *cp == '\t') { 71 cp++; 72 continue; 73 } 74 if (q < &net_aliases[MAXALIASES - 1]) 75 *q++ = cp; 76 cp = any(cp, " \t"); 77 if (*cp != NULL) 78 *cp++ = '\0'; 79 } 80 } 81 *q = NULL; 82 return (&net); 83 } 84 85 static char * 86 any(cp, match) 87 register char *cp; 88 char *match; 89 { 90 register char *mp, c; 91 92 while (c = *cp) { 93 for (mp = match; *mp; mp++) 94 if (*mp == c) 95 return (cp); 96 cp++; 97 } 98 return ((char *)0); 99 } 100