diff options
| author | Stefan Metzmacher <metze@samba.org> | 2021-02-24 12:45:26 +0100 |
|---|---|---|
| committer | Andreas Schneider <asn@samba.org> | 2021-03-15 08:04:58 +0100 |
| commit | efd2967e060a3a7ca3de589a23511bb38151ed8b (patch) | |
| tree | 1d26874505b7c381f16f0f5bcf59dcd392d3742e /src | |
| parent | 4ad5a5af0bdf94497f068f10d6c09520702fd50f (diff) | |
| download | socket_wrapper-efd2967e060a3a7ca3de589a23511bb38151ed8b.tar.gz socket_wrapper-efd2967e060a3a7ca3de589a23511bb38151ed8b.tar.xz socket_wrapper-efd2967e060a3a7ca3de589a23511bb38151ed8b.zip | |
swrap: introduce a socket_wrapper_noop.so and socket_wrapper.h to provide noop stubs
Applications with the need to call socket_wrapper_enabled() should link
against -lsocket_wrapper_noop in order to resolve the symbol at
link time.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14640
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 32 | ||||
| -rw-r--r-- | src/socket_wrapper.c | 8 | ||||
| -rw-r--r-- | src/socket_wrapper.h | 64 | ||||
| -rw-r--r-- | src/socket_wrapper_noop.c | 57 |
4 files changed, 157 insertions, 4 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 73f8cd0..ac56c86 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,3 +27,35 @@ install(TARGETS socket_wrapper ) set(SOCKET_WRAPPER_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}socket_wrapper${CMAKE_SHARED_LIBRARY_SUFFIX}" PARENT_SCOPE) + +add_library(socket_wrapper_noop SHARED socket_wrapper_noop.c) +target_include_directories(socket_wrapper_noop + PRIVATE + ${CMAKE_BINARY_DIR}) +target_compile_options(socket_wrapper_noop + PRIVATE + ${DEFAULT_C_COMPILE_FLAGS} + -D_GNU_SOURCE) +target_link_libraries(socket_wrapper_noop ${SWRAP_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) +set_target_properties(socket_wrapper_noop + PROPERTIES + VERSION ${LIBRARY_VERSION} + SOVERSION ${LIBRARY_SOVERSION}) +if (DEFINED DEFAULT_LINK_FLAGS) + set_target_properties(socket_wrapper_noop + PROPERTIES + LINK_FLAGS ${DEFAULT_LINK_FLAGS}) +endif() + +install(TARGETS socket_wrapper_noop + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +install( + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/socket_wrapper.h + DESTINATION + ${CMAKE_INSTALL_INCLUDEDIR} +) diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c index 22e0246..63de148 100644 --- a/src/socket_wrapper.c +++ b/src/socket_wrapper.c @@ -2,8 +2,8 @@ * BSD 3-Clause License * * Copyright (c) 2005-2008, Jelmer Vernooij <jelmer@samba.org> - * Copyright (c) 2006-2018, Stefan Metzmacher <metze@samba.org> - * Copyright (c) 2013-2018, Andreas Schneider <asn@samba.org> + * Copyright (c) 2006-2021, Stefan Metzmacher <metze@samba.org> + * Copyright (c) 2013-2021, Andreas Schneider <asn@samba.org> * Copyright (c) 2014-2017, Michael Adam <obnox@samba.org> * Copyright (c) 2016-2018, Anoop C S <anoopcs@redhat.com> * All rights reserved. @@ -86,6 +86,8 @@ #endif #include <pthread.h> +#include "socket_wrapper.h" + enum swrap_dbglvl_e { SWRAP_LOG_ERROR = 0, SWRAP_LOG_WARN, @@ -392,8 +394,6 @@ static pthread_mutex_t mtu_update_mutex = PTHREAD_MUTEX_INITIALIZER; /* Function prototypes */ -bool socket_wrapper_enabled(void); - #if ! defined(HAVE_CONSTRUCTOR_ATTRIBUTE) && defined(HAVE_PRAGMA_INIT) /* xlC and other oldschool compilers support (only) this */ #pragma init (swrap_constructor) diff --git a/src/socket_wrapper.h b/src/socket_wrapper.h new file mode 100644 index 0000000..f1a97e8 --- /dev/null +++ b/src/socket_wrapper.h @@ -0,0 +1,64 @@ +/* + * BSD 3-Clause License + * + * Copyright (c) 2005-2008, Jelmer Vernooij <jelmer@samba.org> + * Copyright (c) 2006-2021, Stefan Metzmacher <metze@samba.org> + * Copyright (c) 2013-2021, Andreas Schneider <asn@samba.org> + * Copyright (c) 2014-2017, Michael Adam <obnox@samba.org> + * Copyright (c) 2016-2018, Anoop C S <anoopcs@redhat.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the author nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef __SOCKET_WRAPPER_H__ +#define __SOCKET_WRAPPER_H__ 1 + +#include <stdbool.h> + +/* + Socket wrapper advanced helpers. + + Applications with the need to alter their behaviour when + socket wrapper is active, can link use these functions. + + By default it's required for applications to use any of these + functions as libsocket_wrapper.so is injected at runtime via + LD_PRELOAD. + + Applications using these functions should link against + libsocket_wrapper_noop.so by using -lsocket_wrapper_noop, + or implement their own noop stubs. +*/ + +/* + * This returns true when socket wrapper is actively in use. + */ +bool socket_wrapper_enabled(void); + +#endif /* __SOCKET_WRAPPER_H__ */ diff --git a/src/socket_wrapper_noop.c b/src/socket_wrapper_noop.c new file mode 100644 index 0000000..45aff8f --- /dev/null +++ b/src/socket_wrapper_noop.c @@ -0,0 +1,57 @@ +/* + * BSD 3-Clause License + * + * Copyright (c) 2005-2008, Jelmer Vernooij <jelmer@samba.org> + * Copyright (c) 2006-2021, Stefan Metzmacher <metze@samba.org> + * Copyright (c) 2013-2021, Andreas Schneider <asn@samba.org> + * Copyright (c) 2014-2017, Michael Adam <obnox@samba.org> + * Copyright (c) 2016-2018, Anoop C S <anoopcs@redhat.com> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the author nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + Socket wrapper noop library. + + Applications with the need to alter their behaviour when + socket wrapper is active, can link to this with -lsocket_wrapper_noop + in order to call get the required public functions at link time. + + During runtime these are overloaded with LD_PRELOAD by the real + libsocket_wrapper.so. +*/ + +#include "config.h" +#include "stdbool.h" +#include "socket_wrapper.h" + +bool socket_wrapper_enabled(void) +{ + return false; +} |
