| /* |
| * Copyright (c) 2003, 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 4635618 |
| * @summary Support for manipulating LDAP Names |
| */ |
| |
| import javax.naming.ldap.*; |
| import java.util.ArrayList; |
| import java.util.List; |
| import javax.naming.InvalidNameException; |
| |
| /** |
| * Tests for LDAP name parsing |
| */ |
| |
| public class LdapParserTests { |
| public static void main(String args[]) |
| throws Exception { |
| Rdn rdn = null; |
| |
| /** |
| * Presence of any of these characters in an attribute value |
| * without a preceeding escape is considered Illegal by |
| * the LDAP parser. |
| */ |
| String[] mustEscSpecials = new String[] |
| {";", ",", "\\", "+"}; |
| |
| /** |
| * The special characters that should be preceeded by an escape |
| */ |
| String[] specials = new String[] |
| {";", ",", "\\", "<", ">", "#", "\"", "+"}; |
| |
| /** |
| * Test with unescaped speicial characters in the Rdn |
| */ |
| System.out.println(); |
| System.out.print("*****Tests with unescaped special "); |
| System.out.println("characters in the Rdn*****"); |
| |
| for (int i = 0; i < mustEscSpecials.length; i++) { |
| String rdnStr = "cn=Juicy" + mustEscSpecials[i] + "Fruit"; |
| testInvalids(rdnStr); |
| } |
| |
| /* |
| * special characters with a preceeding backslash must be accepted. |
| */ |
| System.out.println(); |
| System.out.println("******Special character escaping tests ******"); |
| for (int i = 0; i < specials.length; i++) { |
| rdn = new Rdn("cn=Juicy\\" + specials[i] + "Fruit"); |
| } |
| System.out.println("Escape leading space:" + |
| new Rdn("cn=\\ Juicy Fruit")); // escaped leading space |
| System.out.println("Escaped leading #:" + |
| new Rdn("cn=\\#Juicy Fruit")); // escaped leading # in string |
| System.out.println("Escaped trailing space:" + |
| new Rdn("cn=Juicy Fruit\\ ")); // escaped trailing space |
| |
| // Unescaped special characters at the beginning of a value |
| System.out.println(); |
| System.out.println( |
| "******Other unescaped special character tests ******"); |
| rdn = new Rdn("cn= Juicy Fruit"); |
| System.out.println( |
| "Accepted Rdn with value containing leading spaces:" + |
| rdn.toString()); |
| rdn = new Rdn("cn=Juicy Fruit "); |
| System.out.println( |
| "Accepted Rdn with value containing trailing spaces:" + |
| rdn.toString()); |
| |
| String[] invalids = new String[] |
| {"cn=#xabc", "cn=#axcd", "cn=#abcx", "cn=#abcdex"}; |
| |
| for (int i = 0; i < invalids.length; i++) { |
| testInvalids(invalids[i]); |
| } |
| |
| /** |
| * Other special cases |
| */ |
| System.out.println(); |
| System.out.println( |
| "***************Other special cases****************"); |
| |
| LdapName name = new LdapName(""); |
| System.out.println("Empty LDAP name:" + name.toString()); |
| |
| // Rdn with quoted value |
| rdn = new Rdn("cn=\"Juicy ,=+<>#; Fruit\""); |
| System.out.println("Quoted Rdn string:" + rdn.toString()); |
| |
| // Rdn with unicode value |
| rdn = new Rdn("SN=Lu\\C4\\8Di\\C4\\87"); |
| System.out.println("Unicode Rdn string:" + rdn.toString()); |
| |
| /* |
| * oid type and binary value |
| */ |
| name = new LdapName( |
| "1.3.6.1.4.1.466.0=#04024869,O=Test,C=GB"); |
| System.out.println("binary valued LDAP name:" + name.toString()); |
| |
| // ';' seperated name- RFC 1779 style |
| name = new LdapName("CN=Steve Kille;O=Isode;C=GB"); |
| System.out.println("';' seperated LDAP name:" + name.toString()); |
| } |
| |
| static void testInvalids(String rdnStr) throws Exception { |
| boolean isExcepThrown = false; |
| Rdn rdn = null; |
| try { |
| rdn = new Rdn(rdnStr); |
| } catch (InvalidNameException e) { |
| System.out.println("Caught the right exception: " + e); |
| isExcepThrown = true; |
| } catch (IllegalArgumentException e) { |
| System.out.println("Caught the right exception: " + e); |
| isExcepThrown = true; |
| } |
| if (!isExcepThrown) { |
| throw new Exception( |
| "Accepted an invalid Rdn string:" + |
| rdnStr + " as Rdn: " + rdn); |
| } |
| } |
| } |