Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8151432

3 JDK regression kerberos 5 tests failed when using Hindi Locale

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 7
    • security-libs
    • 7u101b11 + Win8.1-x64/win10-x64 with Hindi Locale

      Affected Platforms: Win8.1/Win10-x64 with Cygwin
      Locale: Hindi hi_IN
      JDK version: 7u101b11
      Testsuite: Regression-jdk
      Reproducibility: always in Hindi locale, not reproducible in English locale.

      Description:
      3 kerberos 5 tests failed:
      sun/security/krb5/auto/W83.java
      sun/security/krb5/auto/ok-as-delegate-xrealm.sh
      sun/security/krb5/auto/ok-as-delegate.sh

      Error Log:
      (1) sun/security/krb5/auto/W83.java
      result: Error. Program `C:\Dora\7u101\b11\7u101build11_03012016\..\jdk1.7.0_101\bin\java' timed out (timeout set to 120000ms, elapsed time was 120031ms).

      (2)sun/security/krb5/auto/ok-as-delegate-xrealm.sh
      Exception in thread "main" javax.security.auth.login.LoginException: Receive timed out at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:767)
      at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:584)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:606)
      at javax.security.auth.login.LoginContext.invoke(LoginContext.java:762)
      at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203)
      at javax.security.auth.login.LoginContext$4.run(LoginContext.java:690)
      at javax.security.auth.login.LoginContext$4.run(LoginContext.java:688)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:687)
      at javax.security.auth.login.LoginContext.login(LoginContext.java:595)
      at Context.fromJAAS(Context.java:105)
      at OkAsDelegateXRealm.main(OkAsDelegateXRealm.java:117)
      Caused by: java.net.SocketTimeoutException: Receive timed out
      at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
      at java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:125)
      at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:145)
      at java.net.DatagramSocket.receive(DatagramSocket.java:817)
      at sun.security.krb5.internal.UDPClient.receive(NetClient.java:207)
      at sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:390)
      at sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:343)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.security.krb5.KdcComm.send(KdcComm.java:327)
      at sun.security.krb5.KdcComm.send(KdcComm.java:219)
      at sun.security.krb5.KdcComm.send(KdcComm.java:191)
      at sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:319)
      at sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:364)
      at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:725)
      ... 14 more

      (3)sun/security/krb5/auto/ok-as-delegate.sh
      Exception in thread "main" javax.security.auth.login.LoginException: Receive timed out
      at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:767)
      at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:584)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:606)
      at javax.security.auth.login.LoginContext.invoke(LoginContext.java:762)
      at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203)
      at javax.security.auth.login.LoginContext$4.run(LoginContext.java:690)
      at javax.security.auth.login.LoginContext$4.run(LoginContext.java:688)
      at java.security.AccessController.doPrivileged(Native Method)
      at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:687)
      at javax.security.auth.login.LoginContext.login(LoginContext.java:595)
      at Context.fromJAAS(Context.java:105)
      at OkAsDelegate.go(OkAsDelegate.java:67)
      at OkAsDelegate.main(OkAsDelegate.java:36)
      Caused by: java.net.SocketTimeoutException: Receive timed out
      at java.net.DualStackPlainDatagramSocketImpl.socketReceiveOrPeekData(Native Method)
      at java.net.DualStackPlainDatagramSocketImpl.receive0(DualStackPlainDatagramSocketImpl.java:125)
      at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:145)
      at java.net.DatagramSocket.receive(DatagramSocket.java:817)
      at sun.security.krb5.internal.UDPClient.receive(NetClient.java:207)
      at sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:390)
      at sun.security.krb5.KdcComm$KdcCommunication.run(KdcComm.java:343)
      at java.security.AccessController.doPrivileged(Native Method)
      at sun.security.krb5.KdcComm.send(KdcComm.java:327)
      at sun.security.krb5.KdcComm.send(KdcComm.java:219)
      at sun.security.krb5.KdcComm.send(KdcComm.java:191)
      at sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:319)
      at sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:364)
      at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:725)
      ... 15 more

      Root cause:
      When creating localkdc-krb5.conf in class sun/security/krb5/auto/KDC.java using following method:
       private static String realmLineForKDC(KDC kdc) {
             return String.format(" %s = {\n kdc = %s:%d\n }\n",
                   kdc.realm,
                   kdc.kdc,
                   kdc.port);
      }
      In localkdc-krb5.conf, the port number are displayed as question marks:
        RABBIT.HOLE = {
          kdc = kdc.rabbit.hole:?????
        }
      That is because: In Hindi locale, above String.format using default locale to format the strings, the placeholder %d will be replaced by Hindi numbers. When writing into localkdc-krb5.conf: L431, L432 in KDC.java
      FileOutputStream fos = new FileOutputStream(f);
       fos.write(sb.toString().getBytes());
      the method use platform's default charset, not UTF-8, so the Hindi numbers are displayed as question marks.

      Suggested Fix:
      1. If possible, make the test locale independent.
      or
      2. Replace String.format method with StringBuilder.

            rpatil Ramanand Patil (Inactive)
            dzhou Dora Zhou (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: