|
|
1.1 ! root 1: /* getnetent.c 4.8 83/05/23 */ ! 2: ! 3: #include <stdio.h> ! 4: #include <sys/types.h> ! 5: #include <sys/socket.h> ! 6: #include <netdb.h> ! 7: #include <ctype.h> ! 8: ! 9: #define MAXALIASES 35 ! 10: ! 11: static char NETDB[] = "/etc/networks"; ! 12: static FILE *netf = NULL; ! 13: static char line[BUFSIZ+1]; ! 14: static struct netent net; ! 15: static char *net_aliases[MAXALIASES]; ! 16: static int stayopen = 0; ! 17: static char *any(); ! 18: ! 19: setnetent(f) ! 20: int f; ! 21: { ! 22: if (netf == NULL) ! 23: netf = fopen(NETDB, "r" ); ! 24: else ! 25: rewind(netf); ! 26: stayopen |= f; ! 27: } ! 28: ! 29: endnetent() ! 30: { ! 31: if (netf && !stayopen) { ! 32: fclose(netf); ! 33: netf = NULL; ! 34: } ! 35: } ! 36: ! 37: struct netent * ! 38: getnetent() ! 39: { ! 40: char *p; ! 41: register char *cp, **q; ! 42: ! 43: if (netf == NULL && (netf = fopen(NETDB, "r" )) == NULL) ! 44: return (NULL); ! 45: again: ! 46: p = fgets(line, BUFSIZ, netf); ! 47: if (p == NULL) ! 48: return (NULL); ! 49: if (*p == '#') ! 50: goto again; ! 51: cp = any(p, "#\n"); ! 52: if (cp == NULL) ! 53: goto again; ! 54: *cp = '\0'; ! 55: net.n_name = p; ! 56: cp = any(p, " \t"); ! 57: if (cp == NULL) ! 58: goto again; ! 59: *cp++ = '\0'; ! 60: while (*cp == ' ' || *cp == '\t') ! 61: cp++; ! 62: p = any(cp, " \t"); ! 63: if (p != NULL) ! 64: *p++ = '\0'; ! 65: net.n_net = inet_network(cp); ! 66: net.n_addrtype = AF_INET; ! 67: q = net.n_aliases = net_aliases; ! 68: if (p != NULL) ! 69: cp = p; ! 70: while (cp && *cp) { ! 71: if (*cp == ' ' || *cp == '\t') { ! 72: cp++; ! 73: continue; ! 74: } ! 75: if (q < &net_aliases[MAXALIASES - 1]) ! 76: *q++ = cp; ! 77: cp = any(cp, " \t"); ! 78: if (cp != NULL) ! 79: *cp++ = '\0'; ! 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.