6714845: Quotes in Kerberos configuration file are included in the values
authorweijun
Thu, 09 Apr 2009 15:32:55 +0800
changeset 2587 42fa8d578501
parent 2586 0004ccfb808f
child 2588 ec64fd74aa69
6714845: Quotes in Kerberos configuration file are included in the values Reviewed-by: xuelei
jdk/src/share/classes/sun/security/krb5/Config.java
jdk/test/sun/security/krb5/ConfigWithQuotations.java
jdk/test/sun/security/krb5/edu.mit.Kerberos
--- 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"
+	}
+