On (07/08/18 15:48), Andreas Hasenack wrote:
On Tue, Aug 7, 2018 at 10:19 AM Sumit Bose <sbose(a)redhat.com>
wrote:
>
> > But something is still unexplained: the same test works just fine in
> > debian, and doesn't try to connect to that socket.
>
> This is just linker magic. Due to my fault
> sss_nss_make_request_timeout() is defined twice and which symbol is
> picked might depend on specific linker options used.
I just found out what option that was. Ubuntu, since many years, uses
-Wl,-Bsymbolic-functions in its default linker flags. Debian doesn't.
The moment I strip this flag from the build, the test passes. I can't
do that for the official package build, but it's good to know what
option was causing the test to fail.
That would need to be disabled just for make check.
Because libsss_nss_idmap_tests.so which is used for testing is not the same
as libsss_nss_idmap.so which is used in reality.
libsss_nss_idmap_tests.so also export function sss_nss_make_request_timeout
which is not exported in libsss_nss_idmap.so
sh-4.4$ nm --defined-only --dynamic .libs/libsss_nss_idmap.so | grep request
sh-4.4$ nm --defined-only --dynamic .libs/libsss_nss_idmap_tests.so | grep
request
0000000000004290 T sss_nss_make_request_timeout
It was done to make testing possible and avoid copy&paste mistakes
libsss_nss_idmap_tests_la_SOURCES = $(libsss_nss_idmap_la_SOURCES)
libsss_nss_idmap_tests_la_LIBADD = $(libsss_nss_idmap_la_LIBADD)
libsss_nss_idmap_tests_la_LDFLAGS = \
$(libsss_nss_idmap_la_LDFLAGS) \
-shared \
-rpath $(libdir) \
-Wl,--version-script,$(srcdir)/src/sss_client/idmap/sss_nss_idmap.unit_tests
Other option would be to "include" all sources from library to test.
+ use -Wl,-wrap,sss_nss_make_request_timeout
Or another hacky way to use weak symbols
diff --git a/Makefile.am b/Makefile.am
index ea7648bcd..7216561fb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2600,12 +2600,13 @@ test_authtok_LDADD = \
$(NULL)
sss_nss_idmap_tests_SOURCES = \
- src/tests/cmocka/sss_nss_idmap-tests.c
+ src/tests/cmocka/sss_nss_idmap-tests.c \
+ $(libsss_nss_idmap_la_SOURCES)
sss_nss_idmap_tests_CFLAGS = \
$(AM_CFLAGS)
sss_nss_idmap_tests_LDADD = \
$(CMOCKA_LIBS) \
- libsss_nss_idmap_tests.la \
+ $(libsss_nss_idmap_la_LIBADD) \
$(NULL)
deskprofile_utils_tests_SOURCES = \
diff --git a/src/sss_client/common.c b/src/sss_client/common.c
index 67a460705..a93aaff16 100644
--- a/src/sss_client/common.c
+++ b/src/sss_client/common.c
@@ -718,6 +718,7 @@ static enum sss_status sss_cli_check_socket(int *errnop,
/* this function will check command codes match and returned length is ok */
/* repbuf and replen report only the data section not the header */
+__attribute((weak))
enum nss_status sss_nss_make_request_timeout(enum sss_cli_command cmd,
struct sss_cli_req_data *rd,
int timeout,
LS