[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: multi-mechanism gssapi

Here are the issues that I ran into trying to run our gssd and svcgssd 
programs with the heimdal gssapi library.  Some of this may be 
addressed by Luke's changes.

1) My main concern is Linux, which has no RTLD_LOCAL or RTLD_GROUP 
option in dlopen().  It doesn't matter if I link our mechglue library 
with "-Bsymbolic -Bgroup --allow-shlib-undefined", the heimdal gssapi 
library needs to be linked with "-Bsymbolic -Bgroup 
--allow-shlib-undefined" to stop it from calling into our glue routine 
when calling, for instance, gss_duplicate_name().  I first noticed 
these problem when we starting building our mechglue library separately 
and as a shared library instead of linking it statically into our 

2) After building the heimdal library with the above options, I am 
running into a different problem when calling gss_release_oid_set().

The heimdal version of gss_add_oid_set_member() uses realloc() to 
allocate new array space for an additional element to be added.  The 
sun/MIT mechglue code (and the MIT K5 library version) assume that each 
array element pointer is a separately allocated unit.  The glue code 
for gss_release_oid_set() doesn't know which mechanism this set was 
allocated by, and therefore attempts to free it itself.  This causes 
problems because it assumes it needs to separately free each element 
pointer and the oid space for each element in the set.  When dealing 
with a set allocated by the heimdal library, the first free frees the 
entire oid element array and the next one causes a segfault.