summaryrefslogtreecommitdiffstats
path: root/src/socket_wrapper.c
Commit message (Collapse)AuthorAgeFilesLines
* swrap: add basic support for fd-passing via SCM_RIGHTSStefan Metzmacher2021-02-021-4/+755
| | | | | | | | | | | | | | | | | | | | | | We only allow passing up to 6 fds in a single sendmsg call, in order to keep the logic simple. That's more than enough for Samba's use of fd-passing, there we only pass a single fd and the fd will be closed in the sender on success. It means it's ok to keep the socket_info.io.pck_{snd,rcv} fields per process and the PCAP generation will still work as expected. If these constraints turn out to be a problem for other applications, we need to change to a more complex design and move the socket_info array into a shared memory file and use shared robust mutexes. But for now we just want to support multi-channel testing in Samba. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11899 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: always check new fd's against socket_fds_max and use libc_close() for ↵Stefan Metzmacher2021-02-021-7/+46
| | | | | | | cleanup Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: add const to swrap_add_socket_info()Stefan Metzmacher2021-02-021-1/+1
| | | | | Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: let swrap_sendmsg_before_unix() create a copy of msg_tmp.msg_controlStefan Metzmacher2021-02-021-0/+43
| | | | | | | With fd-passing we'll have to modify the content of it. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: add stubs for swrap_{sendmsg,recvmsg}_{before,after}_unix()Stefan Metzmacher2021-02-021-2/+40
| | | | | | | | In order to implement fd-passing of socket_wrapper simulated sockets we need to modify the msghdr structures from the callers. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: filter out SCM_{RIGHTS,CREDENTIALS} on inet socketStefan Metzmacher2021-02-021-9/+47
| | | | | | | | These are only valid on unix domain sockets and ignored otherwise (at least on Linux). Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: add error checking/cleanup to swrap_sendmsg_filter_cmsghdr()Stefan Metzmacher2021-02-021-0/+7
| | | | | Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: Fix MSGHDR check in sendmsg()Anoop C S2021-02-021-38/+48
| | | | | | | | | Check for msg_controllen and msg_control data members from msghdr structure needs to be validated on the received omsg pointer rather than on newly created msghdr struture inside the wrapper. Signed-off-by: Anoop C S <anoopcs@redhat.com> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: print out SOCKET_WRAPPER_PACKAGE and SOCKET_WRAPPER_VERSION on first useStefan Metzmacher2021-02-021-0/+4
| | | | | Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Anoop C S <anoopcs@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* src/socket_wrapper.c: Improve checks and debug output of socket_wrapper_dir()Andreas Schneider2021-01-291-2/+3
| | | | Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
* src/socket_wrapper.c: fix mutex fork handlingStefan Metzmacher2021-01-291-75/+89
| | | | | | | | | | | | | | We need to use pthread_mutex_init in the child handler... See https://sourceware.org/bugzilla/show_bug.cgi?id=2745 Valgrind tools like helgrind and drd don't understand this (at least in 3.15.0), they require a pthread_mutex_unlock() in the child in order work. Pair-Programmed-With: Andreas Schneider <asn@samba.org> Signed-off-by: Stefan Metzmacher <metze@samba.org> Signed-off-by: Andreas Schneider <asn@samba.org>
* src/socket_wrapper.c: always go through swrap_bind_symbol_all() protected by ↵Stefan Metzmacher2021-01-281-52/+55
| | | | | | pthread_once() Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* src/socket_wrapper.c: split out _swrap_bind_symbol_generic()Stefan Metzmacher2021-01-281-10/+6
| | | | Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* src/socket_wrapper.c: remove unused swrap_bind_symbol_libnsl()Stefan Metzmacher2021-01-281-14/+0
| | | | Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* socket_wrapper.c/tests: fall back to pragma init/fini for ↵Björn Jacke2020-11-041-0/+7
| | | | | | constructor/destructor if possible Signed-off-by: Bjoern Jacke <bjacke@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* socket_wrapper.c: let swrap_vioctl() handle SIOCOUTQ/TIOCOUTQ/FIONWRITE ↵Stefan Metzmacher2020-06-221-0/+18
| | | | | | | | | | | | | | | explicitly They are used to ask for the number of unacked bytes in the send queue, with AF_UNIX sockets get strange result, on linux 5.3 I get more bytes reported than I sent into the socket. All bytes reach the destination directly, so we can just always report 0 unacked bytes. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11897 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org> (cherry picked from commit f317ebcdcdd626ed9e06de2eb60031306994c803)
* socket_wrapper.c: make FIONREAD handling more robust in swrap_vioctl()Stefan Metzmacher2020-06-221-3/+5
| | | | | | | | | | | We should only dereference the va args when the kernel already checked they are valid. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11897 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org> (cherry picked from commit c95b7cb1d7b9348472276edceff71889aa676d25)
* socket_wrapper.c: implement getsockopt(TCP_INFO) if the platform supports itStefan Metzmacher2020-06-221-0/+57
| | | | | | | | | | This just implements a few basics, which are required by Samba. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11897 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org> (cherry picked from commit 300de6e099ea82ee5361918de8c3abb389e0782d)
* swrap: Add SOCKET_WRAPPER_DIR_ALLOW_ORIG to allow fall backMartin Schwenke2020-06-221-2/+25
| | | | | | | | | | | Instead of failing when the path returned by realpath(3) is too long, if SOCKET_WRAPPER_DIR_ALLOW_ORIG is set then fall back to the original value. If this original path is too long or something else fails then abort. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
* swrap: Abort if socket wrapper directory is too long to be usableMartin Schwenke2020-06-221-0/+31
| | | | | | | | | | | | | | | | | If the socket wrapper directory path is too long to allow reliable construction of the required Unix domain socket paths then convert_in_un_alloc() can return ENFILE if paths are truncated in unfortunate ways. This can be very hard to debug since, for example, bind(2) should never return ENFILE. Instead, abort if the path returned by realpath(3) is unusable. The code structure is slightly weird but this accommodates an additional change. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
* swrap: Add abstractions to construct Unix domain socket pathsMartin Schwenke2020-06-221-16/+54
| | | | | | | | | These include overflow checks but the results of the checks are not yet used. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
* swrap: Abort on failure to use SOCKET_WRAPPER_DIRMartin Schwenke2020-06-221-1/+1
| | | | | | | | | | If SOCKET_WRAPPER_DIR is set the intention is to use socket wrapper. Returning NULL means socket wrapper is disabled. The only sure way to avoid running without socket wrapper is to abort. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
* Revert "socket_wrapper.c: implement getsockopt(TCP_INFO) if the platform ↵Stefan Metzmacher2020-06-191-57/+0
| | | | | | | | | | supports it" This reverts commit 300de6e099ea82ee5361918de8c3abb389e0782d. This got merged automatically by gitlab without review. Signed-off-by: Stefan Metzmacher <metze@samba.org>
* Revert "socket_wrapper.c: make FIONREAD handling more robust in swrap_vioctl()"Stefan Metzmacher2020-06-191-5/+3
| | | | | | | | This reverts commit c95b7cb1d7b9348472276edceff71889aa676d25. This got merged automatically by gitlab without review. Signed-off-by: Stefan Metzmacher <metze@samba.org>
* Revert "socket_wrapper.c: let swrap_vioctl() handle ↵Stefan Metzmacher2020-06-191-18/+0
| | | | | | | | | | SIOCOUTQ/TIOCOUTQ/FIONWRITE explicitly" This reverts commit f317ebcdcdd626ed9e06de2eb60031306994c803. This got merged automatically by gitlab without review. Signed-off-by: Stefan Metzmacher <metze@samba.org>
* socket_wrapper.c: let swrap_vioctl() handle SIOCOUTQ/TIOCOUTQ/FIONWRITE ↵Stefan Metzmacher2020-06-191-0/+18
| | | | | | | | | | | | | explicitly They are used to ask for the number of unacked bytes in the send queue, with AF_UNIX sockets get strange result, on linux 5.3 I get more bytes reported than I sent into the socket. All bytes reach the destination directly, so we can just always report 0 unacked bytes. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11897 Signed-off-by: Stefan Metzmacher <metze@samba.org>
* socket_wrapper.c: make FIONREAD handling more robust in swrap_vioctl()Stefan Metzmacher2020-06-191-3/+5
| | | | | | | | | We should only dereference the va args when the kernel already checked they are valid. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11897 Signed-off-by: Stefan Metzmacher <metze@samba.org>
* socket_wrapper.c: implement getsockopt(TCP_INFO) if the platform supports itStefan Metzmacher2020-06-191-0/+57
| | | | | | | | This just implements a few basics, which are required by Samba. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11897 Signed-off-by: Stefan Metzmacher <metze@samba.org>
* swrap: Remove extra new line towards end of SWRAP_LOG()Anoop C S2020-05-141-20/+20
| | | | | Signed-off-by: Anoop C S <anoopcs@redhat.com> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: add support for SOCKET_WRAPPER_IPV4_NETWORK=10.53.57.0Stefan Metzmacher2020-03-211-6/+21
| | | | | | | | | | | | | | With this 10.53.57.XX/8 addresses are used instead of 127.0.0.XX/8. Note the broadcast address is 127.255.255.255 or 10.255.255.255 (and not 10.53.57.255!). Some applications, e.g. Samba have some special behavior for loopback addresses. This allows more realistic tests and triggers the more common code paths. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: implement swrap_ipv4_{net,bcast,iface}() helper functionsStefan Metzmacher2020-03-211-9/+96
| | | | | | | This makes it easier to implement SOCKET_WRAPPER_IPV4_NETWORK in the next step. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: provide _{socket,close,connect,...} symbols on FreeBSDStefan Metzmacher2020-03-191-0/+51
| | | | | | | Maybe that's not FreeBSD only, but at least this fixes the interaction of resolv_wrapper and socket_wrapper on FreeBSD 12. Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: detect stale fd for socket(PF_UNIX) and accept()Stefan Metzmacher2020-03-191-1/+22
| | | | Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: trace the SOCKET_WRAPPER_PCAP_FILE locationStefan Metzmacher2020-03-191-0/+1
| | | | Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: Do not leak buf in swrap_sendmsg()socket_wrapper-1.2.3Andreas Schneider2019-03-211-0/+1
| | | | | Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Add missing NULL checks to socket_wrapper_dir()Andreas Schneider2019-03-211-0/+19
| | | | | | | | This return either malloc'ed memory or NULL. Make sure there is no problem. Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Print a warning if SOCKET_WRAPPER_DIR is not setAndreas Schneider2019-03-211-0/+1
| | | | | Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Add paranoia NULL checksAndreas Schneider2019-03-211-0/+10
| | | | | | | csbuild complains about missing NULL checks here. Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Fix strict aliasing issues in swrap_pcap_packet_init()Andreas Schneider2019-03-211-51/+61
| | | | | Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Fix "Value stored never used" warningAnoop C S2019-03-211-1/+0
| | | | | | Signed-off-by: Anoop C S <anoopcs@redhat.com> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Do not use FALL_THROUGH for empty case statementsAmitay Isaacs2019-03-061-2/+0
| | | | | Signed-off-by: Amitay Isaacs <amitay@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: Fix a TODOAnoop C S2019-02-121-19/+54
| | | | | | | | Use realpath(3) instead of strncmp(3) Signed-off-by: Anoop C S <anoopcs@redhat.com> Reviewed-by: Ralph Boehme <slow@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: Add env variable to disable deep bindingAndreas Schneider2019-02-121-5/+15
| | | | | Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Use #ifdef instead of #if for config.h definitionsAndreas Schneider2019-01-111-6/+6
| | | | | Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Volker Lendecke <vl@samba.org>
* swrap: Add an overflow checkVolker Lendecke2019-01-111-0/+5
| | | | | Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org>
* swrap: Do not log if we are over the limit in find_socket_info_index()Andreas Schneider2018-11-131-4/+16
| | | | | | | | | | | | | There are applications which do: for (fd = 0; fd <= getdtablesize(); fd++) { close(fd) }; This produced millions of error messsages. Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Also log the fd in swrap_socket()Andreas Schneider2018-11-131-2/+3
| | | | | Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Fix comparison of different signednessAndreas Schneider2018-11-131-2/+2
| | | | | | | Found by csbuild. Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Also log the process nameAndreas Schneider2018-11-131-2/+24
| | | | | Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
* swrap: Better handling for default values in socket_wrapper_max_sockets()Andreas Schneider2018-11-131-5/+15
| | | | | | | Pair-Programmed-With: Anoop C S <anoopcs@redhat.com> Signed-off-by: Andreas Schneider <asn@samba.org> Signed-off-by: Anoop C S <anoopcs@redhat.com> Reviewed-by: Ralph Boehme <slow@samba.org>