|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)af.c 4.11 (Berkeley) 5/25/83"; ! 3: #endif ! 4: ! 5: #include "defs.h" ! 6: ! 7: /* ! 8: * Address family support routines ! 9: */ ! 10: int null_hash(), null_netmatch(), null_output(), ! 11: null_portmatch(), null_portcheck(), ! 12: null_checkhost(), null_canon(); ! 13: int inet_hash(), inet_netmatch(), inet_output(), ! 14: inet_portmatch(), inet_portcheck(), ! 15: inet_checkhost(), inet_canon(); ! 16: #define NIL \ ! 17: { null_hash, null_netmatch, null_output, \ ! 18: null_portmatch, null_portcheck, null_checkhost, \ ! 19: null_canon } ! 20: #define INET \ ! 21: { inet_hash, inet_netmatch, inet_output, \ ! 22: inet_portmatch, inet_portcheck, inet_checkhost, \ ! 23: inet_canon } ! 24: ! 25: struct afswitch afswitch[AF_MAX] = ! 26: { NIL, NIL, INET, INET, NIL, NIL, NIL, NIL, NIL, NIL, NIL }; ! 27: ! 28: inet_hash(sin, hp) ! 29: register struct sockaddr_in *sin; ! 30: struct afhash *hp; ! 31: { ! 32: ! 33: hp->afh_nethash = inet_netof(sin->sin_addr); ! 34: hp->afh_hosthash = ntohl(sin->sin_addr.s_addr); ! 35: hp->afh_hosthash &= 0x7fffffff; ! 36: } ! 37: ! 38: inet_netmatch(sin1, sin2) ! 39: struct sockaddr_in *sin1, *sin2; ! 40: { ! 41: ! 42: return (inet_netof(sin1->sin_addr) == inet_netof(sin2->sin_addr)); ! 43: } ! 44: ! 45: /* ! 46: * Verify the message is from the right port. ! 47: */ ! 48: inet_portmatch(sin) ! 49: register struct sockaddr_in *sin; ! 50: { ! 51: ! 52: #ifdef COMPAT ! 53: if (ntohs(sin->sin_port) == ntohs(sp->s_port) + 1) ! 54: return (1); ! 55: #endif ! 56: return (sin->sin_port == sp->s_port); ! 57: } ! 58: ! 59: /* ! 60: * Verify the message is from a "trusted" port. ! 61: */ ! 62: inet_portcheck(sin) ! 63: struct sockaddr_in *sin; ! 64: { ! 65: ! 66: return (ntohs(sin->sin_port) <= IPPORT_RESERVED); ! 67: } ! 68: ! 69: /* ! 70: * Internet output routine. ! 71: */ ! 72: inet_output(s, flags, sin, size) ! 73: int s, flags; ! 74: struct sockaddr_in *sin; ! 75: int size; ! 76: { ! 77: struct sockaddr_in dst; ! 78: ! 79: dst = *sin; ! 80: sin = &dst; ! 81: if (sin->sin_port == 0) ! 82: sin->sin_port = sp->s_port; ! 83: if (sendto(s, packet, size, flags, sin, sizeof (*sin)) < 0) ! 84: perror("sendto"); ! 85: } ! 86: ! 87: /* ! 88: * Return 1 if the address is believed ! 89: * for an Internet host -- THIS IS A KLUDGE. ! 90: */ ! 91: inet_checkhost(sin) ! 92: struct sockaddr_in *sin; ! 93: { ! 94: ! 95: return (inet_lnaof(sin->sin_addr) != 0); ! 96: } ! 97: ! 98: inet_canon(sin) ! 99: struct sockaddr_in *sin; ! 100: { ! 101: ! 102: sin->sin_port = 0; ! 103: } ! 104: ! 105: /*ARGSUSED*/ ! 106: null_hash(addr, hp) ! 107: struct sockaddr *addr; ! 108: struct afhash *hp; ! 109: { ! 110: ! 111: hp->afh_nethash = hp->afh_hosthash = 0; ! 112: } ! 113: ! 114: /*ARGSUSED*/ ! 115: null_netmatch(a1, a2) ! 116: struct sockaddr *a1, *a2; ! 117: { ! 118: ! 119: return (0); ! 120: } ! 121: ! 122: /*ARGSUSED*/ ! 123: null_output(s, f, a1, n) ! 124: int s, f; ! 125: struct sockaddr *a1; ! 126: int n; ! 127: { ! 128: ! 129: ; ! 130: } ! 131: ! 132: /*ARGSUSED*/ ! 133: null_portmatch(a1) ! 134: struct sockaddr *a1; ! 135: { ! 136: ! 137: return (0); ! 138: } ! 139: ! 140: /*ARGSUSED*/ ! 141: null_portcheck(a1) ! 142: struct sockaddr *a1; ! 143: { ! 144: ! 145: return (0); ! 146: } ! 147: ! 148: /*ARGSUSED*/ ! 149: null_checkhost(a1) ! 150: struct sockaddr *a1; ! 151: { ! 152: ! 153: return (0); ! 154: } ! 155: ! 156: /*ARGSUSED*/ ! 157: null_canon(a1) ! 158: struct sockaddr *a1; ! 159: { ! 160: ! 161: ; ! 162: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.