8054817: File ccache only recognizes Linux and Solaris defaults

Reviewed-by: mullan
This commit is contained in:
Weijun Wang 2014-08-19 14:30:12 +08:00
parent 0613e548bb
commit 391a556d14
2 changed files with 66 additions and 36 deletions
jdk
src/java.security.jgss/share/classes/sun/security/krb5/internal/ccache
test/sun/security/krb5/ccache

@ -43,7 +43,6 @@ import java.io.FileInputStream;
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 @@ public class FileCredentialsCache extends CredentialsCache
/*
* 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"));

@ -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);
}
}
}