On Sat, Jan 18, 2014 at 10:09:31PM -0500, Eric Radman wrote:
> On Sat, Jan 18, 2014 at 09:59:13PM +0100, Landry Breuil wrote:
> > On Fri, Jan 17, 2014 at 11:21:13AM -0500, Eric Radman wrote:
> > > Resubmitting a patch for firefox that includes all of the symbols
> > > required to load gssapi. From moz.log:
> > > 
> > > 784166112[83e29180]:   service = inout.deshaw.com
> > > 784166112[83e29180]:   using negotiate-gss
> > > 784166112[83e29180]: entering nsAuthGSSAPI::nsAuthGSSAPI()
> > > 784166112[83e29180]: Attempting to load gss functions
> > > 784166112[83e29180]: entering nsAuthGSSAPI::Init()
> > > 784166112[83e29180]: nsHttpNegotiateAuth::GenerateCredentials() 
> > > [challenge=Negotiate]
> > > 784166112[83e29180]: entering nsAuthGSSAPI::GetNextToken()
> > > 784166112[83e29180]:   leaving nsAuthGSSAPI::GetNextToken [rv=0]
> > > 784166112[83e29180]:   Sending a token of length 1730
> > > 
> > > Notes on the patch:
> > > 
> > > - Remove `&& !lib` from the module load loop because it would stop
> > >   loading modules the first time dlopen succeeded
> > > 
> > > - Had to replace PR_LoadLibrary with PR_LoadLibraryWithFlags so I
> > >   could use the PR_LD_GLOBAL option
> > 
> > So, after having had some time to actually look at your patch - i
> > suppose that we need to dlopen all the libs one by one in the right
> > order, because they're not inter-dependent in our case?
> 
> libgssapi.so doesn't appear to reference any of it's dependencies. On
> many other platforms they are; this is Debian 7.0:
> 
> $ readelf -d /usr/lib/i386-linux-gnu/libgssapi_krb5.so.2 | grep NEEDED
>  0x00000001 (NEEDED)                     Shared library: [libkrb5.so.3]
>  0x00000001 (NEEDED)                     Shared library: [libk5crypto.so.3]
>  0x00000001 (NEEDED)                     Shared library: [libcom_err.so.2]
>  0x00000001 (NEEDED)                     Shared library: [libkrb5support.so.0]
>  0x00000001 (NEEDED)                     Shared library: [libdl.so.2]
>  0x00000001 (NEEDED)                     Shared library: [libkeyutils.so.1]
>  0x00000001 (NEEDED)                     Shared library: [libresolv.so.2]
>  0x00000001 (NEEDED)                     Shared library: [libc.so.6]
> 
> > Why do you need RTLD_GLOBAL ? It fails if you use the default symbol
> > visibility flag ?
> 
> RTLD_GLOBAL seems to be required, although I don't understand why. This
> is how I'm testing:
> 
> #include <dlfcn.h>                                                            
>                          
> main()                                                                        
>                              
> {                                                                             
>                           
>       dlopen("libasn1.so", RTLD_GLOBAL);
>       dlopen("libcrypto.so", RTLD_GLOBAL);
>       dlopen("libroken.so", RTLD_GLOBAL);
>       dlopen("libheimbase.so", RTLD_GLOBAL);
>       dlopen("libcom_err.so", RTLD_GLOBAL);
>       dlopen("libkrb5.so", RTLD_GLOBAL);
>       dlopen("libgssapi.so", RTLD_GLOBAL|RTLD_NOW);
> }
> 
> Instead of patching Firefox, would it be better to change the way
> OpenBSD links the Heimdal libraries to make the interdependent libraries
> implicit?

I think there was a reason for having it done this way when kerberos was
updated, and iirc it lead to having quite a bunch of patches around.
Robert, Antoine ?

Landry 

Reply via email to