On Tue, 2013-11-12 at 11:03 -0500, Simo Sorce wrote:
On Tue, 2013-11-12 at 16:23 +0100, Lukas Slebodnik wrote:
> Updated patches are attached.
This is not the right way to fix the failure.
That library *knowingly* has missing symbols because it is an internal
library.
You need to build or link to an outer program that have only the
necessary symbols you know are going to be available.
In this case those symbols are in libsss_krb5.so, so all you should nee
to do is to have this in tests:
+ { "libsss_krb5_common.so", {
LIBPFX"libdlopen_test_providers.so",
+ LIBPFX"libsss_krb5_common.so",
+ LIBPFX"libsss_krb5.so",
+ NULL } },
Adding c files to librraies to "make them pass" the dl-open test is
wrong in 99% of the cases. you are just making the test pass not testing
that the libraries have the right dependencies. In particular for
internal modules you really need to understand the hierarchy of the
modules and link in the test all the necessary dependencies before
thinking of adding any file to the module itself.
In this case what you did was to duplicate symblos in the resulting Text
file, and that can potentially cause very serious consequencies if any
of those symbols is a static symbols that is meant to have a share de
value all code rely on.
Oh let me add.
I did my check very quickly so it is possible that my version is not the
final correct approach, I was just describing how you should pass in
multiple libs for dependency.
It is possible that you need those symbols directly in
libsss_krb5_common.so, but if that is actually the case, then it means
you have to remove those symbols from libsss_krb5.so and add them
libsss_krb5_common.so as dependency for libsss_krb5.so in makefile and
tests. This may even require moving functions from one file to another
in the extreme case.
HTH,
Simo.
--
Simo Sorce * Red Hat, Inc * New York