Love Hörnquist Åstrand a écrit :
26 maj 2008 kl. 08.27 skrev Guillaume Rousse:
Hello list(s).
I'm having a crash as soon as I attempt to change my password when smbk5pwd is activating. strace shows an unresolved symbol in smbk5pwd.so: _kadm5_free_keys
Heimdal source code shows this function is defined in libkadm5srv.so (/usr/lib/libkadm5srv.so.8.0.1) for heimdal 1.1. But this seems to be a private symbol, as objdump -T doesn't list it. Looking at heimdal Makefile.am, it seems a special configuration file is used (lib/krb5/version-script.map) to filter exported symbols, if linker support the use of -Wl,--version-script option. I couldn't find any description of this option.
Is this possible smbk5pwd author would have by mistake used a private function, only working because he build heimdal on a host whose linker doesn't support --version-script option ?
I'm using heimdal 1.1 and openldap 2.4.8 on mandriva linux.
I unexported the function since there was no function that returned key set-data.
Same goes for _kadm5_set_keys() that also is an internal function.
Since 1.0 you can use hdb_generate_key_set_password and hdb_free_keys to generate the key data.
I tried this approach (patch attached).
Converting _kadm5_free_keys to hdb_free_keys is trivial, as the former is just a wrapper over the second.
However, converting _kadm5_set_keys to hdb_generate_key_set_password is much more difficult. I first tried to inline all code from _kadm5_set_keys in smbk5pwd.c. However, gcc complains about "request for member ‘context’ in something not a structure or union" because it doesn't have any clue about the nature of kadm_context, which is a void ponter for smbk5pwd. Trying to cast it as a kadm5_server_context pointer fails, as this seems also to be a private heimdal structure...
Given my lack of C knowledge, I'm a bit stuck there.