OpenJDK / jdk / jdk10
changeset 25995:6267b0694e45
8054817: File ccache only recognizes Linux and Solaris defaults
Reviewed-by: mullan
author | weijun |
---|---|
date | Tue, 19 Aug 2014 14:30:12 +0800 |
parents | 01dbe01af8e5 |
children | 4aa9eb909760 |
files | jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java jdk/test/sun/security/krb5/ccache/DefaultFile.java |
diffstat | 2 files changed, 66 insertions(+), 36 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java Mon Aug 18 21:06:45 2014 -0700 +++ b/jdk/src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache/FileCredentialsCache.java Tue Aug 19 14:30:12 2014 +0800 @@ -43,7 +43,6 @@ import java.io.FileOutputStream; import java.io.BufferedReader; import java.io.InputStreamReader; -import java.lang.reflect.*; /** * CredentialsCache stores credentials(tickets, session keys, etc) in a @@ -388,52 +387,36 @@ /* * For Unix platforms we use the default cache name to be - * /tmp/krbcc_uid ; for all other platforms we use - * {user_home}/krb5_cc{user_name} - * Please note that for Windows 2K we will use LSA to get + * /tmp/krb5cc_uid ; for all other platforms we use + * {user_home}/krb5cc_{user_name} + * Please note that for Windows we will use LSA to get * the TGT from the the default cache even before we come here; * however when we create cache we will create a cache under - * {user_home}/krb5_cc{user_name} for non-Unix platforms including - * Windows 2K. + * {user_home}/krb5cc_{user_name} for non-Unix platforms including + * Windows. */ - if (osname != null) { - String cmd = null; - String uidStr = null; - long uid = 0; - - if (osname.startsWith("SunOS") || - (osname.startsWith("Linux"))) { - try { - Class<?> c = Class.forName - ("com.sun.security.auth.module.UnixSystem"); - Constructor<?> constructor = c.getConstructor(); - Object obj = constructor.newInstance(); - Method method = c.getMethod("getUid"); - uid = ((Long)method.invoke(obj)).longValue(); - name = File.separator + "tmp" + + if (osname != null && !osname.startsWith("Windows")) { + long uid = sun.misc.VM.getuid(); + if (uid != -1) { + name = File.separator + "tmp" + File.separator + stdCacheNameComponent + "_" + uid; - if (DEBUG) { - System.out.println(">>>KinitOptions cache name is " + - name); - } - return name; - } catch (Exception e) { - if (DEBUG) { - System.out.println("Exception in obtaining uid " + - "for Unix platforms " + - "Using user's home directory"); - - - e.printStackTrace(); - } + if (DEBUG) { + System.out.println(">>>KinitOptions cache name is " + + name); + } + return name; + } else { + if (DEBUG) { + System.out.println("Error in obtaining uid " + + "for Unix platforms " + + "Using user's home directory"); } } } // we did not get the uid; - String user_name = java.security.AccessController.doPrivileged( new sun.security.action.GetPropertyAction("user.name"));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/ccache/DefaultFile.java Tue Aug 19 14:30:12 2014 +0800 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8054817 + * @summary File ccache only recognizes Linux and Solaris defaults + */ + +import sun.security.krb5.internal.ccache.FileCredentialsCache; + +public class DefaultFile { + public static void main(String[] args) throws Exception { + // There are 2 cases where default ccache name is not + // /tmp/krb5cc_uid. + if (System.getenv("KRB5CCNAME") != null) { + return; + } + if (System.getProperty("os.name").startsWith("Windows")) { + return; + } + String name = FileCredentialsCache.getDefaultCacheName(); + if (!name.startsWith("/tmp/krb5cc_")) { + throw new Exception("default name is " + name); + } + } +}