|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1983 Regents of the University of California. ! 3: * All rights reserved. The Berkeley software License Agreement ! 4: * specifies the terms and conditions for redistribution. ! 5: */ ! 6: ! 7: #if defined(LIBC_SCCS) && !defined(lint) ! 8: static char sccsid[] = "@(#)getnetent.c 5.3 (Berkeley) 5/19/86"; ! 9: #endif LIBC_SCCS and not lint ! 10: ! 11: #include <stdio.h> ! 12: #include <sys/types.h> ! 13: #include <sys/socket.h> ! 14: #include <netdb.h> ! 15: #include <ctype.h> ! 16: ! 17: #define MAXALIASES 35 ! 18: ! 19: static char NETDB[] = "/etc/networks"; ! 20: static FILE *netf = NULL; ! 21: static char line[BUFSIZ+1]; ! 22: static struct netent net; ! 23: static char *net_aliases[MAXALIASES]; ! 24: int _net_stayopen; ! 25: static char *any(); ! 26: ! 27: setnetent(f) ! 28: int f; ! 29: { ! 30: if (netf == NULL) ! 31: netf = fopen(NETDB, "r" ); ! 32: else ! 33: rewind(netf); ! 34: _net_stayopen |= f; ! 35: } ! 36: ! 37: endnetent() ! 38: { ! 39: if (netf) { ! 40: fclose(netf); ! 41: netf = NULL; ! 42: } ! 43: _net_stayopen = 0; ! 44: } ! 45: ! 46: struct netent * ! 47: getnetent() ! 48: { ! 49: char *p; ! 50: register char *cp, **q; ! 51: ! 52: if (netf == NULL && (netf = fopen(NETDB, "r" )) == NULL) ! 53: return (NULL); ! 54: again: ! 55: p = fgets(line, BUFSIZ, netf); ! 56: if (p == NULL) ! 57: return (NULL); ! 58: if (*p == '#') ! 59: goto again; ! 60: cp = any(p, "#\n"); ! 61: if (cp == NULL) ! 62: goto again; ! 63: *cp = '\0'; ! 64: net.n_name = p; ! 65: cp = any(p, " \t"); ! 66: if (cp == NULL) ! 67: goto again; ! 68: *cp++ = '\0'; ! 69: while (*cp == ' ' || *cp == '\t') ! 70: cp++; ! 71: p = any(cp, " \t"); ! 72: if (p != NULL) ! 73: *p++ = '\0'; ! 74: net.n_net = inet_network(cp); ! 75: net.n_addrtype = AF_INET; ! 76: q = net.n_aliases = net_aliases; ! 77: if (p != NULL) ! 78: cp = p; ! 79: while (cp && *cp) { ! 80: if (*cp == ' ' || *cp == '\t') { ! 81: cp++; ! 82: continue; ! 83: } ! 84: if (q < &net_aliases[MAXALIASES - 1]) ! 85: *q++ = cp; ! 86: cp = any(cp, " \t"); ! 87: if (cp != NULL) ! 88: *cp++ = '\0'; ! 89: } ! 90: *q = NULL; ! 91: return (&net); ! 92: } ! 93: ! 94: static char * ! 95: any(cp, match) ! 96: register char *cp; ! 97: char *match; ! 98: { ! 99: register char *mp, c; ! 100: ! 101: while (c = *cp) { ! 102: for (mp = match; *mp; mp++) ! 103: if (*mp == c) ! 104: return (cp); ! 105: cp++; ! 106: } ! 107: return ((char *)0); ! 108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.