# HG changeset patch # User weijun # Date 1239262375 -28800 # Node ID 42fa8d5785017bdaa4077a6ea1818e8c9ab9893e # Parent 0004ccfb808f0d478492077dd6de08a76b8a0499 6714845: Quotes in Kerberos configuration file are included in the values Reviewed-by: xuelei diff -r 0004ccfb808f -r 42fa8d578501 jdk/src/share/classes/sun/security/krb5/Config.java --- a/jdk/src/share/classes/sun/security/krb5/Config.java Wed Apr 08 10:40:56 2009 -0700 +++ b/jdk/src/share/classes/sun/security/krb5/Config.java Thu Apr 09 15:32:55 2009 +0800 @@ -736,6 +736,14 @@ return name; } + private static String trimmed(String s) { + s = s.trim(); + if (s.charAt(0) == '"' && s.charAt(s.length()-1) == '"' || + s.charAt(0) == '\'' && s.charAt(s.length()-1) == '\'') { + s = s.substring(1, s.length()-1).trim(); + } + return s; + } /** * Parses key-value pairs under a stanza name. */ @@ -747,7 +755,7 @@ for (int j = 0; j < line.length(); j++) { if (line.charAt(j) == '=') { String key = (line.substring(0, j)).trim(); - String value = (line.substring(j + 1)).trim(); + String value = trimmed(line.substring(j + 1)); table.put(key, value); break; } @@ -820,7 +828,7 @@ } else { nameVector = table.get(key); } - nameVector.addElement((line.substring(j + 1)).trim()); + nameVector.addElement(trimmed(line.substring(j + 1))); table.put(key, nameVector); break; } @@ -1263,4 +1271,32 @@ } } + @Override + public String toString() { + StringBuffer sb = new StringBuffer(); + toStringIndented("", stanzaTable, sb); + return sb.toString(); + } + private static void toStringIndented(String prefix, Object obj, + StringBuffer sb) { + if (obj instanceof String) { + sb.append(prefix); + sb.append(obj); + sb.append('\n'); + } else if (obj instanceof Hashtable) { + Hashtable tab = (Hashtable)obj; + for (Object o: tab.keySet()) { + sb.append(prefix); + sb.append(o); + sb.append(" = {\n"); + toStringIndented(prefix + " ", tab.get(o), sb); + sb.append(prefix + "}\n"); + } + } else if (obj instanceof Vector) { + Vector v = (Vector)obj; + for (Object o: v.toArray()) { + toStringIndented(prefix + " ", o, sb); + } + } + } } diff -r 0004ccfb808f -r 42fa8d578501 jdk/test/sun/security/krb5/ConfigWithQuotations.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/ConfigWithQuotations.java Thu Apr 09 15:32:55 2009 +0800 @@ -0,0 +1,47 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +/* + * @test + * @bug 6714845 + * @summary Quotes in Kerberos configuration file are included in the values + */ + +import sun.security.krb5.Config; + +public class ConfigWithQuotations { + public static void main(String[] args) throws Exception { + // This config file is generated using Kerberos.app on a Mac + System.setProperty("java.security.krb5.conf", + System.getProperty("test.src", ".") +"/edu.mit.Kerberos"); + Config config = Config.getInstance(); + + System.out.println(config); + + if (!config.getDefaultRealm().equals("MAC.LOCAL")) { + throw new Exception("Realm error"); + } + if (!config.getKDCList("MAC.LOCAL").equals("kdc.mac.local:88")) { + throw new Exception("KDC error"); + } + } +} diff -r 0004ccfb808f -r 42fa8d578501 jdk/test/sun/security/krb5/edu.mit.Kerberos --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/edu.mit.Kerberos Thu Apr 09 15:32:55 2009 +0800 @@ -0,0 +1,15 @@ +[domain_realm] + +[libdefaults] + default_realm = "MAC.LOCAL" + dns_fallback = "no" + +[logging] + admin_server = "FILE:/var/log/krb5kdc/kadmin.log" + kdc = "FILE:/var/log/krb5kdc/kdc.log" + +[realms] + MAC.LOCAL = { + kdc = "kdc.mac.local:88" + } +