6714845: Quotes in Kerberos configuration file are included in the values
Reviewed-by: xuelei
--- 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);
+ }
+ }
+ }
}
--- /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");
+ }
+ }
+}
--- /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"
+ }
+