|
|
1.1 ! root 1: #ifndef lint ! 2: static char *sccsid = "@(#)access_inet.c 1.2 (Berkeley) 10/15/87"; ! 3: #endif ! 4: ! 5: #include <stdio.h> ! 6: #include <strings.h> ! 7: #include <netdb.h> ! 8: #include <syslog.h> ! 9: #include <sys/types.h> ! 10: #include <sys/socket.h> ! 11: #include <netinet/in.h> ! 12: #include <arpa/inet.h> ! 13: ! 14: #include "../common/conf.h" ! 15: ! 16: /* ! 17: * inet_netnames -- return the network, subnet, and host names of ! 18: * our peer process for the Internet domain. ! 19: * ! 20: * Parameters: "sock" is our socket, which we don't need. ! 21: * "sin" is a pointer to the result of ! 22: * a getpeername() call. ! 23: * "net_name", "subnet_name", and "host_name" ! 24: * are filled in by this routine with the ! 25: * corresponding ASCII names of our peer. ! 26: * Returns: Nothing. ! 27: * Side effects: None. ! 28: */ ! 29: ! 30: inet_netnames(sock, sin, net_name, subnet_name, host_name) ! 31: int sock; ! 32: struct sockaddr_in *sin; ! 33: char *net_name; ! 34: char *subnet_name; ! 35: char *host_name; ! 36: { ! 37: static int gotsubnetconf; ! 38: u_long net_addr; ! 39: u_long subnet_addr; ! 40: struct hostent *hp; ! 41: struct netent *np; ! 42: ! 43: #ifdef SUBNET ! 44: if (!gotsubnetconf) { ! 45: if (getifconf() < 0) { ! 46: #ifdef SYSLOG ! 47: syslog(LOG_ERR, "host_access: getifconf: %m"); ! 48: #endif ! 49: return; ! 50: } ! 51: gotsubnetconf = 1; ! 52: } ! 53: #endif ! 54: ! 55: net_addr = inet_netof(sin->sin_addr); /* net_addr in host order */ ! 56: np = getnetbyaddr(net_addr, AF_INET); ! 57: if (np != NULL) ! 58: (void) strcpy(net_name, np->n_name); ! 59: else ! 60: (void) strcpy(net_name,inet_ntoa(*(struct in_addr *)&net_addr)); ! 61: ! 62: #ifdef SUBNET ! 63: subnet_addr = inet_snetof(sin->sin_addr.s_addr); ! 64: if (subnet_addr == 0) ! 65: subnet_name[0] = '\0'; ! 66: else { ! 67: np = getnetbyaddr(subnet_addr, AF_INET); ! 68: if (np != NULL) ! 69: (void) strcpy(subnet_name, np->n_name); ! 70: else ! 71: (void) strcpy(subnet_name, ! 72: inet_ntoa(*(struct in_addr *)&subnet_addr)); ! 73: } ! 74: #else ! 75: subnet_name[0] = '\0'; ! 76: #endif SUBNET ! 77: ! 78: hp = gethostbyaddr((char *) &sin->sin_addr.s_addr, ! 79: sizeof (sin->sin_addr.s_addr), AF_INET); ! 80: if (hp != NULL) ! 81: (void) strcpy(host_name, hp->h_name); ! 82: else ! 83: (void) strcpy(host_name, inet_ntoa(sin->sin_addr)); ! 84: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.