Attaching patch, which fixes described issue for me.

On Thu, Dec 14, 2017 at 4:03 PM, Jan Kalina <jkal...@redhat.com> wrote:

> I has found bug in SunNativeProvider:
>
> When debug messages are enabled, JDK confirms GSS library was loaded with
> mechs:
>
> [GSSLibStub_init] libName=/usr/lib64/libgssapi_krb5.so.2.2
> SunNativeGSS: Loaded GSS library: /usr/lib64/libgssapi_krb5.so.2.2
> SunNativeGSS: Native MF for 1.2.840.113554.1.2.2
> SunNativeGSS: Native MF for 1.3.6.1.5.2.5
> SunNativeGSS: Native MF for 1.3.6.1.5.5.2
>
> But when I try to use it, it claims mechanism with given OID are not
> supported:
>
> GSSException: Provider SunNativeGSS does not support mechanism
> 1.2.840.113554.1.2.2
>     at java.security.jgss/sun.security.jgss.ProviderList.
> getMechFactory(ProviderList.java:253)
>     at java.security.jgss/sun.security.jgss.ProviderList.
> getMechFactory(ProviderList.java:209)
>     at java.security.jgss/sun.security.jgss.GSSManagerImpl.
> getMechanismContext(GSSManagerImpl.java:234)
>     at java.security.jgss/sun.security.jgss.GSSContextImpl.
> acceptSecContext(GSSContextImpl.java:337)
>     at java.security.jgss/sun.security.jgss.GSSContextImpl.
> acceptSecContext(GSSContextImpl.java:302)
>
> *When I has try to debug it, I has found the SunNativeProvider is created
> in two instances:*
>
> First instance is created on initialization of SunNativeProvider.INSTANCE,
> but it is BEFORE
> the mechs are passed into SunNativeProvider.MECH_MAP. The second instance
> is created
> correctly in ProviderList constructor.
>
> The problem is, in some situations is used the too soon created
> SunNativeProvider.INSTANCE,
> so the to call throws exception above.
>
> *I think sufficient fix would be to move SunNativeProvider.INSTANCE
> declaration after*
> *the static constructor (filling the **MECH_MAP) in SunNativeProvider
> file.*
>
> Would be possible to fix this?
> Should I send a patch?
>
> Thanks
> Jan Kalina
>
diff --git a/src/java.security.jgss/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java b/src/java.security.jgss/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java
--- a/src/java.security.jgss/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java
+++ b/src/java.security.jgss/share/classes/sun/security/jgss/wrapper/SunNativeProvider.java
@@ -54,7 +54,7 @@
     private static final String LIB_PROP = "sun.security.jgss.lib";
     private static final String DEBUG_PROP = "sun.security.nativegss.debug";
     private static HashMap<String, String> MECH_MAP;
-    static final Provider INSTANCE = new SunNativeProvider();
+
     static boolean DEBUG;
     static void debug(String message) {
         if (DEBUG) {
@@ -119,6 +119,8 @@
                 });
     }
 
+    static final Provider INSTANCE = new SunNativeProvider();
+
     public SunNativeProvider() {
         /* We are the Sun NativeGSS provider */
         super(NAME, PROVIDER_VER, INFO);

Reply via email to