X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/85bbbfa450113727532984633333175ed6d16011..6db0b3a4cd0c5a1abaf060748a769c56a9b62d12:/usr/src/sbin/routed/af.c diff --git a/usr/src/sbin/routed/af.c b/usr/src/sbin/routed/af.c index e409215690..b82e642eac 100644 --- a/usr/src/sbin/routed/af.c +++ b/usr/src/sbin/routed/af.c @@ -1,5 +1,5 @@ #ifndef lint -static char sccsid[] = "@(#)af.c 4.1 %G%"; +static char sccsid[] = "@(#)af.c 4.3 %G%"; #endif #include @@ -13,15 +13,19 @@ static char sccsid[] = "@(#)af.c 4.1 %G%"; * Address family support routines */ int null_hash(), null_netmatch(), null_output(), - null_portmatch(), null_checkhost(), null_canon(); + null_portmatch(), null_portcheck(), + null_checkhost(), null_canon(); int inet_hash(), inet_netmatch(), inet_output(), - inet_portmatch(), inet_checkhost(), inet_canon(); + inet_portmatch(), inet_portcheck(), + inet_checkhost(), inet_canon(); #define NIL \ { null_hash, null_netmatch, null_output, \ - null_portmatch, null_checkhost, null_canon } + null_portmatch, null_portcheck, null_checkhost, \ + null_canon } #define INET \ { inet_hash, inet_netmatch, inet_output, \ - inet_portmatch, inet_checkhost, inet_canon } + inet_portmatch, inet_portcheck, inet_checkhost, \ + inet_canon } struct afswitch afswitch[AF_MAX] = { NIL, NIL, INET, INET, NIL, NIL, NIL, NIL, NIL, NIL, NIL }; @@ -32,7 +36,11 @@ inet_hash(sin, hp) { hp->afh_nethash = sin->sin_addr.s_net; - hp->afh_hosthash = ntohl(sin->sin_addr.s_addr); + hp->afh_hosthash = sin->sin_addr.s_addr; +#if vax || pdp11 + hp->afh_hosthash = ntohl(hp->afh_hosthash); +#endif + hp->afh_hosthash &= 0x7fffffff; } inet_netmatch(sin1, sin2) @@ -48,26 +56,47 @@ inet_netmatch(sin1, sin2) inet_portmatch(sin) struct sockaddr_in *sin; { - int port = ntohs(sin->sin_port); - + int port = sin->sin_port; + +#if vax || pdp11 + port = ntohs(port); +#endif return (port == IPPORT_ROUTESERVER); } +/* + * Verify the message is from a "trusted" port. + */ +inet_portcheck(sin) + struct sockaddr_in *sin; +{ + int port = sin->sin_port; + +#if vax || pdp11 + port = ntohs(port); +#endif + return (port <= IPPORT_RESERVED); +} + /* * Internet output routine. */ -inet_output(sin, size) +inet_output(s, sin, size) + int s; struct sockaddr_in *sin; int size; { - extern int s; extern char packet[MAXPACKETSIZE]; struct sockaddr_in dst; dst = *sin; sin = &dst; - if (sin->sin_port == 0) - sin->sin_port = htons(IPPORT_ROUTESERVER); + if (sin->sin_port == 0) { + sin->sin_port = IPPORT_ROUTESERVER; +#if vax || pdp11 + sin->sin_port = htons(sin->sin_port); +#endif + } if (send(s, sin, packet, size) < 0) perror("send"); } @@ -110,10 +139,12 @@ null_netmatch(a1, a2) } /*ARGSUSED*/ -null_output(a1, n) +null_output(s, a1, n) + int s; struct sockaddr *a1; int n; { + ; } @@ -121,6 +152,15 @@ null_output(a1, n) null_portmatch(a1) struct sockaddr *a1; { + + return (0); +} + +/*ARGSUSED*/ +null_portcheck(a1) + struct sockaddr *a1; +{ + return (0); } @@ -128,6 +168,7 @@ null_portmatch(a1) null_checkhost(a1) struct sockaddr *a1; { + return (0); } @@ -135,5 +176,6 @@ null_checkhost(a1) null_canon(a1) struct sockaddr *a1; { + ; }