On 25/10/14 01:35, Richard Saunders wrote:
> Thanks for the suggestion; it built the binary version but
> unfortunately it did not solve the 'undefined symbols' problem. The
> .deb file was installed using this command:
>
> dpkg -i ~/ws/dlz-ldap-enum/dlz-ldap-enum_1.0.2-1_amd64.deb
>
> It installed successfully but bind still fails to start and the same
> error message is in the log:
>
> dlz_dlopen failed to open library
> '/usr/lib/dlz-ldap-enum/dlz_ldap_enum.so' -
> /usr/lib/dlz-ldap-enum/dlz_ldap_enum.so: undefined symbol: ns_g_mctx
>
I've had a brief look at this now.
ns_g_mctx is defined in globals.h from the bind9 package.
globals.h is not included in the headers in the libbind-dev package
Therefore, there is a possible fault with the dlz-ldap-enum package. It
did work before, so this is a new problem, maybe the symbol was moved in
bind9 or maybe it was in a different header in the past.
Looking at it more closely:
- this symbol is being used in the memory management API from ISC, e.g.
isc_mem_get, isc_mem_free, etc
- the other main user of the dlz API is Samba - in their code, they use
their own memory management API so they don't refer to this symbol
There are at least three ways to proceed:
- the ns_g_mctx definition could be moved from globals.h to another
header file that is in the public API of bind9
- the globals.h header file could be added to the public API of bind9
- the dlz-ldap-enum code should adapted to do memory management without
the isc_mem_* functions
- the ./contrib/dlz/modules/bdbhpt/dlz_bdbhpt_dynamic.c example from
bind9 doesn't appear to use the isc_mem_* functions
There is more to it though - it appears the dlz_dlopen.h file is still
missing from the latest versions of libbind-dev in Debian. This is a
pain. It is not clear if bind is being compiled with dlz_dlopen
support. I've cc'd LaMont, the bind9 package maintainer, I'd like him
to clarify that dlz_dlopen support is compiled into the bind9 package in
Debian and Ubuntu, otherwise you need to recompile the bind9 package
with the "--with-dlopen" option to configure as well. You can probably
just add that in debian/rules somewhere in the bind9 package.
I've opened a Debian bug for part of this issue, the missing dlz_dlopen.h:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=766827