From: Sam Leffler Date: Sun, 23 Jan 1983 15:41:29 +0000 (-0800) Subject: hack to allow FTP to rebind local addresses X-Git-Tag: BSD-4_1c_2-Snapshot-Development~803 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/b4a3d4a786dfe3a0855f94815f3388549da78fa8?ds=inline;hp=f623dfa41e461ebaab84605ea4129ff0e68b3485 hack to allow FTP to rebind local addresses SCCS-vsn: sys/netinet/in_pcb.c 4.40 SCCS-vsn: sys/kern/uipc_socket.c 4.71 --- diff --git a/usr/src/sys/kern/uipc_socket.c b/usr/src/sys/kern/uipc_socket.c index 99a3503e15..a0dc797687 100644 --- a/usr/src/sys/kern/uipc_socket.c +++ b/usr/src/sys/kern/uipc_socket.c @@ -570,11 +570,11 @@ sosetopt(so, level, optname, m) switch (optname) { case SO_DEBUG: - so->so_options |= SO_DEBUG; - break; - case SO_KEEPALIVE: - so->so_options |= SO_KEEPALIVE; + case SO_DONTROUTE: + case SO_USELOOPBACK: + case SO_REUSEADDR: + so->so_options |= optname; break; case SO_LINGER: @@ -589,14 +589,6 @@ sosetopt(so, level, optname, m) so->so_linger = 0; break; - case SO_DONTROUTE: - so->so_options |= SO_DONTROUTE; - break; - - case SO_USELOOPBACK: - so->so_options |= SO_USELOOPBACK; - break; - default: return (EINVAL); } @@ -618,6 +610,7 @@ sogetopt(so, level, optname, m) case SO_DEBUG: case SO_KEEPALIVE: case SO_LINGER: + case SO_REUSEADDR: if ((so->so_options & optname) == 0) return (ENOPROTOOPT); if (optname == SO_LINGER && m != NULL) { diff --git a/usr/src/sys/netinet/in_pcb.c b/usr/src/sys/netinet/in_pcb.c index df3962d369..3bdd1a014f 100644 --- a/usr/src/sys/netinet/in_pcb.c +++ b/usr/src/sys/netinet/in_pcb.c @@ -68,8 +68,10 @@ in_pcbbind(inp, nam) /* GROSS */ if (aport < IPPORT_RESERVED && u.u_uid != 0) return (EACCES); - if ((so->so_proto->pr_flags & PR_CONNREQUIRED) == 0 || - (so->so_options & SO_ACCEPTCONN) == 0) + /* even GROSSER, but this is the Internet */ + if ((so->so_options & SO_REUSEADDR) == 0 && + ((so->so_proto->pr_flags & PR_CONNREQUIRED) == 0 || + (so->so_options & SO_ACCEPTCONN) == 0)) wild = INPLOOKUP_WILDCARD; if (in_pcblookup(head, zeroin_addr, 0, sin->sin_addr, lport, wild))