diff options
| author | kcpoon <none@none> | 2006-07-24 23:50:09 -0700 |
|---|---|---|
| committer | kcpoon <none@none> | 2006-07-24 23:50:09 -0700 |
| commit | ae347574c7f17d33bb822cb146d7f67c88ab1f68 (patch) | |
| tree | 32acd48faeb75f69fb5f1433a4a9613b76d042ed /usr/src/lib | |
| parent | b0f490f41a437c14fba5163cca1e65686e66c84b (diff) | |
| download | illumos-joyent-ae347574c7f17d33bb822cb146d7f67c88ab1f68.tar.gz | |
PSARC 2006/407 SO_EXCLBIND, socket exclusive binding
6410719 ASSERT() panic in ipsec_in_is_secure()
6442609 TCP_EXCLBIND handling has problem with server restarting
6445396 Add SO_EXCLBIND socket option
Diffstat (limited to 'usr/src/lib')
| -rw-r--r-- | usr/src/lib/libnsl/rpc/svc_generic.c | 8 | ||||
| -rw-r--r-- | usr/src/lib/libnsl/rpc/ti_opts.c | 1 | ||||
| -rw-r--r-- | usr/src/lib/libsocket/inet/rcmd.c | 10 |
3 files changed, 9 insertions, 10 deletions
diff --git a/usr/src/lib/libnsl/rpc/svc_generic.c b/usr/src/lib/libnsl/rpc/svc_generic.c index a0673e43c8..553a6390b6 100644 --- a/usr/src/lib/libnsl/rpc/svc_generic.c +++ b/usr/src/lib/libnsl/rpc/svc_generic.c @@ -340,7 +340,7 @@ svc_tli_create_common(const int ofd, const struct netconfig *nconf, } /* - * {TCP,UDP}_EXCLBIND has the following properties + * SO_EXCLBIND has the following properties * - an fd bound to port P via IPv4 will prevent an IPv6 * bind to port P (and vice versa) * - an fd bound to a wildcard IP address for port P will @@ -355,10 +355,8 @@ svc_tli_create_common(const int ofd, const struct netconfig *nconf, (tcp || (strcmp(nconf->nc_proto, NC_UDP) == 0)) && rpc_control(__RPC_SVC_EXCLBIND_GET, &exclbind)) { if (exclbind) { - if (__rpc_tli_set_options(fd, - tcp ? IPPROTO_TCP : IPPROTO_UDP, - tcp ? TCP_EXCLBIND : UDP_EXCLBIND, - 1) < 0) { + if (__rpc_tli_set_options(fd, SOL_SOCKET, + SO_EXCLBIND, 1) < 0) { syslog(LOG_ERR, "svc_tli_create: can't set EXCLBIND [netid='%s']", nconf->nc_netid); diff --git a/usr/src/lib/libnsl/rpc/ti_opts.c b/usr/src/lib/libnsl/rpc/ti_opts.c index ae32fa9788..f01984eabc 100644 --- a/usr/src/lib/libnsl/rpc/ti_opts.c +++ b/usr/src/lib/libnsl/rpc/ti_opts.c @@ -494,6 +494,7 @@ __rpc_tli_set_options(int fd, int optlevel, int optname, int optval) case SO_RECVUCRED: case SO_ANON_MLP: case SO_MAC_EXEMPT: + case SO_EXCLBIND: case TCP_EXCLBIND: case UDP_EXCLBIND: /* LINTED */ diff --git a/usr/src/lib/libsocket/inet/rcmd.c b/usr/src/lib/libsocket/inet/rcmd.c index 0bfecc28c6..5cb0fb674f 100644 --- a/usr/src/lib/libsocket/inet/rcmd.c +++ b/usr/src/lib/libsocket/inet/rcmd.c @@ -444,10 +444,10 @@ _rresvport_addr(int *alport, struct sockaddr_storage *addr) return (-1); /* - * Set TCP_EXCLBIND to get a "unique" port, which is not bound + * Set SO_EXCLBIND to get a "unique" port, which is not bound * to any other sockets. */ - if (setsockopt(s, IPPROTO_TCP, TCP_EXCLBIND, &on, sizeof (on)) < 0) { + if (setsockopt(s, SOL_SOCKET, SO_EXCLBIND, &on, sizeof (on)) < 0) { (void) close(s); return (-1); } @@ -460,8 +460,8 @@ _rresvport_addr(int *alport, struct sockaddr_storage *addr) sin6->sin6_port = htons((ushort_t)*alport); } if (bind(s, (struct sockaddr *)addr, len) >= 0) { - /* To be safe, need to turn off TCP_EXCLBIND. */ - (void) setsockopt(s, IPPROTO_TCP, TCP_EXCLBIND, &off, + /* To be safe, need to turn off SO_EXCLBIND. */ + (void) setsockopt(s, SOL_SOCKET, SO_EXCLBIND, &off, sizeof (off)); return (s); } @@ -510,7 +510,7 @@ _rresvport_addr(int *alport, struct sockaddr_storage *addr) */ (void) setsockopt(s, IPPROTO_TCP, TCP_ANONPRIVBIND, &off, sizeof (off)); - (void) setsockopt(s, IPPROTO_TCP, TCP_EXCLBIND, &off, + (void) setsockopt(s, SOL_SOCKET, SO_EXCLBIND, &off, sizeof (off)); return (s); } |
