From 929690e938e7b111e5a34763b1edb24392fd9f3e Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 16 Jul 2012 14:28:42 -0700 Subject: [PATCH] refresh --- meta | 7 ++- patches/refresh-temp | 119 ------------------------------------------ patches/transpose | 120 +++++++++++++++++++++++++++---------------- 3 files changed, 80 insertions(+), 166 deletions(-) delete mode 100644 patches/refresh-temp diff --git a/meta b/meta index d18f21ec..9d62a8ab 100644 --- a/meta +++ b/meta @@ -1,9 +1,8 @@ Version: 1 -Previous: ef06e26aea2280970341600a38bff87f8edb088b -Head: 736300c117d5dea95f293a7910a06732aae11dab +Previous: 5a57996f5283d15d247a6f258410fc9d8846e4b4 +Head: 71e126e4a152d09c6270bb38696d5cc846d00cf5 Applied: - transpose: 86a08269137ad38f2d34ab5b2b2131018986b931 - refresh-temp: 736300c117d5dea95f293a7910a06732aae11dab + transpose: 71e126e4a152d09c6270bb38696d5cc846d00cf5 Unapplied: fork: d62b389a7f30187f39e8c6ae709fbdbf8423e7e8 waitall-buggy: c49c6b56c55385774065f5aa2704078e6ae0ceb8 diff --git a/patches/refresh-temp b/patches/refresh-temp deleted file mode 100644 index a89f92cf..00000000 --- a/patches/refresh-temp +++ /dev/null @@ -1,119 +0,0 @@ -Bottom: 18cd5fab283e42099140977cad709ad19315ac7a -Top: 11bc8abd7626b80e35f4275314327e7ddf07c950 -Author: Sean Hefty -Date: 2012-07-16 14:28:41 -0700 - -Refresh of transpose - ---- - -diff --git a/src/preload.c b/src/preload.c -index 69597e0..cc0d7eb 100644 ---- a/src/preload.c -+++ b/src/preload.c -@@ -252,55 +252,6 @@ out: - } - - /* -- * Convert from an rsocket to a normal socket. The new socket should have the -- * same settings and bindings as the rsocket. We currently only handle setting -- * a few of the more common values. -- */ --static int socket_fallback(int socket, int *fd) --{ -- socklen_t len = 0; -- int new_fd, param, ret; -- -- ret = rgetsockname(*fd, NULL, &len); -- if (ret) -- return ret; -- -- param = (len == sizeof(struct sockaddr_in6)) ? PF_INET6 : PF_INET; -- new_fd = real_socket(param, SOCK_STREAM, IPPROTO_TCP); -- if (new_fd < 0) -- return new_fd; -- -- ret = rfcntl(*fd, F_GETFL); -- if (ret > 0) -- ret = real_fcntl(new_fd, F_SETFL, ret); -- if (ret) -- goto err; -- -- len = sizeof param; -- ret = rgetsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len); -- if (param && !ret) -- ret = real_setsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); -- if (ret) -- goto err; -- -- len = sizeof param; -- ret = rgetsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len); -- if (param && !ret) -- ret = real_setsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len); -- if (ret) -- goto err; -- -- rclose(*fd); -- fd_store(socket, new_fd, fd_normal); -- *fd = new_fd; -- return 0; -- --err: -- real_close(new_fd); -- return ret; --} -- --/* - * Convert between an rsocket and a normal socket. The new socket should have the - * same settings and bindings as the current socket. We currently only handle - * setting a few of the more common values. -@@ -308,8 +259,8 @@ err: - static int - transpose_socket(int index, int *fd, enum fd_type new_type, - int (*socket_new)(int domain, int type, int protocol), -- int (*shutdown_old)(int socket, int how), - int (*close_old)(int socket), -+ int (*close_new)(int socket), - int (*getsockname_old)(int socket, struct sockaddr *addr, - socklen_t *addrlen), - int (*getsockopt_old)(int socket, int level, int optname, -@@ -351,14 +302,13 @@ transpose_socket(int index, int *fd, enum fd_type new_type, - if (ret) - goto err; - -- shutdown_old(*fd, SHUT_RDWR); - close_old(*fd); - fd_store(socket, new_fd, new_type); - *fd = new_fd; - return 0; - - err: -- real_close(new_fd); -+ close_new(new_fd); - return ret; - } - -@@ -413,7 +363,10 @@ int bind(int socket, const struct sockaddr *addr, socklen_t addrlen) - if (!sin->sin_port || ntohs(sin->sin_port) > 1024) - return rbind(fd, addr, addrlen); - -- ret = socket_fallback(socket, &fd); -+ ret = transpose_socket(socket, &fd, fd_normal, real_socket, -+ rclose, real_close, rgetsockname, -+ rgetsockopt, real_setsockopt, -+ rfcntl, real_fcntl); - if (ret) - return ret; - } -@@ -463,7 +416,10 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) - return ret; - } - -- ret = socket_fallback(socket, &fd); -+ ret = transpose_socket(socket, &fd, fd_normal, real_socket, -+ rclose, real_close, rgetsockname, -+ rgetsockopt, real_setsockopt, -+ rfcntl, real_fcntl); - if (ret) - return ret; - } diff --git a/patches/transpose b/patches/transpose index b4c5a3fe..bea1048a 100644 --- a/patches/transpose +++ b/patches/transpose @@ -1,5 +1,5 @@ Bottom: 7ec243f3149e9a1ff1d5183f18e30d2458e354d6 -Top: 18cd5fab283e42099140977cad709ad19315ac7a +Top: 11bc8abd7626b80e35f4275314327e7ddf07c950 Author: Sean Hefty Date: 2012-07-16 14:17:58 -0700 @@ -17,22 +17,26 @@ Signed-off-by: Sean Hefty --- diff --git a/src/preload.c b/src/preload.c -index 2750b30..69597e0 100644 +index 2750b30..cc0d7eb 100644 --- a/src/preload.c +++ b/src/preload.c -@@ -301,6 +301,68 @@ err: +@@ -252,51 +252,63 @@ out: } /* +- * Convert from an rsocket to a normal socket. The new socket should have the +- * same settings and bindings as the rsocket. We currently only handle setting +- * a few of the more common values. + * Convert between an rsocket and a normal socket. The new socket should have the + * same settings and bindings as the current socket. We currently only handle + * setting a few of the more common values. -+ */ + */ +-static int socket_fallback(int socket, int *fd) +static int +transpose_socket(int index, int *fd, enum fd_type new_type, + int (*socket_new)(int domain, int type, int protocol), -+ int (*shutdown_old)(int socket, int how), + int (*close_old)(int socket), ++ int (*close_new)(int socket), + int (*getsockname_old)(int socket, struct sockaddr *addr, + socklen_t *addrlen), + int (*getsockopt_old)(int socket, int level, int optname, @@ -41,51 +45,81 @@ index 2750b30..69597e0 100644 + const void *optval, socklen_t optlen), + int (*fcntl_old)(int socket, int cmd, ... /* arg */), + int (*fcntl_new)(int socket, int cmd, ... /* arg */)) -+{ -+ socklen_t len = 0; -+ int new_fd, param, ret; -+ + { + socklen_t len = 0; + int new_fd, param, ret; + +- ret = rgetsockname(*fd, NULL, &len); + ret = getsockname_old(*fd, NULL, &len); -+ if (ret) -+ return ret; -+ -+ param = (len == sizeof(struct sockaddr_in6)) ? PF_INET6 : PF_INET; + if (ret) + return ret; + + param = (len == sizeof(struct sockaddr_in6)) ? PF_INET6 : PF_INET; +- new_fd = real_socket(param, SOCK_STREAM, IPPROTO_TCP); + new_fd = socket_new(param, SOCK_STREAM, 0); -+ if (new_fd < 0) -+ return new_fd; -+ + if (new_fd < 0) + return new_fd; + +- ret = rfcntl(*fd, F_GETFL); + ret = fcntl_old(*fd, F_GETFL); -+ if (ret > 0) + if (ret > 0) +- ret = real_fcntl(new_fd, F_SETFL, ret); + ret = fcntl_new(new_fd, F_SETFL, ret); -+ if (ret) -+ goto err; -+ -+ len = sizeof param; + if (ret) + goto err; + + len = sizeof param; +- ret = rgetsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len); + ret = getsockopt_old(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len); -+ if (param && !ret) + if (param && !ret) +- ret = real_setsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); + ret = setsockopt_new(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len); -+ if (ret) -+ goto err; -+ -+ len = sizeof param; + if (ret) + goto err; + + len = sizeof param; +- ret = rgetsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len); + ret = getsockopt_old(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len); -+ if (param && !ret) + if (param && !ret) +- ret = real_setsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len); + ret = setsockopt_new(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len); -+ if (ret) -+ goto err; -+ -+ shutdown_old(*fd, SHUT_RDWR); + if (ret) + goto err; + +- rclose(*fd); +- fd_store(socket, new_fd, fd_normal); + close_old(*fd); + fd_store(socket, new_fd, new_type); -+ *fd = new_fd; -+ return 0; -+ -+err: -+ real_close(new_fd); -+ return ret; -+} -+ -+/* - * Use defaults on failure. - */ - void set_rsocket_options(int rsocket) + *fd = new_fd; + return 0; + + err: +- real_close(new_fd); ++ close_new(new_fd); + return ret; + } + +@@ -351,7 +363,10 @@ int bind(int socket, const struct sockaddr *addr, socklen_t addrlen) + if (!sin->sin_port || ntohs(sin->sin_port) > 1024) + return rbind(fd, addr, addrlen); + +- ret = socket_fallback(socket, &fd); ++ ret = transpose_socket(socket, &fd, fd_normal, real_socket, ++ rclose, real_close, rgetsockname, ++ rgetsockopt, real_setsockopt, ++ rfcntl, real_fcntl); + if (ret) + return ret; + } +@@ -401,7 +416,10 @@ int connect(int socket, const struct sockaddr *addr, socklen_t addrlen) + return ret; + } + +- ret = socket_fallback(socket, &fd); ++ ret = transpose_socket(socket, &fd, fd_normal, real_socket, ++ rclose, real_close, rgetsockname, ++ rgetsockopt, real_setsockopt, ++ rfcntl, real_fcntl); + if (ret) + return ret; + } -- 2.41.0