summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
authorkcpoon <none@none>2006-07-24 23:50:09 -0700
committerkcpoon <none@none>2006-07-24 23:50:09 -0700
commitae347574c7f17d33bb822cb146d7f67c88ab1f68 (patch)
tree32acd48faeb75f69fb5f1433a4a9613b76d042ed /usr/src/lib
parentb0f490f41a437c14fba5163cca1e65686e66c84b (diff)
downloadillumos-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.c8
-rw-r--r--usr/src/lib/libnsl/rpc/ti_opts.c1
-rw-r--r--usr/src/lib/libsocket/inet/rcmd.c10
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);
}