--- /dev/null 2018-07-26 15:28:07.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/AddInherited.dns 2018-07-26 15:28:06.000000000 +0800 @@ -0,0 +1,50 @@ +# +# Copyright (c) 2018, 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. +# + +################################################################################ +# Capture file for AddInherited.java +# +# NOTE: This hexadecimal dump of DNS protocol messages was generated by +# running the AddInherited application program against a real DNS +# server along with DNSTracer +# +################################################################################ + +# DNS Request + +0000: 09 5A 00 00 00 01 00 00 00 00 00 00 05 68 6F 73 .Z...........hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 ... + + +# DNS Response + +0000: 09 5A 84 80 00 01 00 01 00 01 00 01 05 68 6F 73 .Z...........hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 C0 0C 00 10 00 01 00 00 8C A0 00 15 14 ................ +0030: 41 20 76 65 72 79 20 70 6F 70 75 6C 61 72 20 68 A very popular h +0040: 6F 73 74 2E C0 12 00 02 00 01 00 00 8C A0 00 05 ost............. +0050: 02 6E 73 C0 12 C0 50 00 01 00 01 00 00 8C A0 00 .ns...P......... +0060: 04 7F 00 00 01 ..... + + --- /dev/null 2018-07-26 15:28:08.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/AddInherited.java 2018-07-26 15:28:07.000000000 +0800 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2000, 2018, 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 8208279 + * @summary Tests that when we add environment properties to a context, its + * changes are reflected in the environment properties of any child + * context derived from the context. + * @modules java.base/sun.security.util + * @library ../lib/ + * @run main AddInherited + */ + +import javax.naming.Context; +import java.util.Hashtable; + +public class AddInherited extends EnvTestBase { + + public static void main(String[] args) throws Exception { + new AddInherited().run(args); + } + + /* + * Tests that when we add environment properties to a context, its + * changes are reflected in the environment properties of any child + * context derived from the context. + */ + @Override public void runTest() throws Exception { + initContext(); + + addToEnvAndVerifyOldValIsNull("com.sun.jndi.dns.recursion", "false"); + addToEnvAndVerifyOldValIsNull("some.irrelevant.property", "somevalue"); + + Context child = (Context) context().lookup(getKey()); + + Hashtable envParent = context().getEnvironment(); + Hashtable envChild = child.getEnvironment(); + + DNSTestUtils.debug(child); + DNSTestUtils.debug("Parent env: " + envParent); + DNSTestUtils.debug("Child env: " + envChild); + + verifyEnvProperty(envParent, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envParent, "some.irrelevant.property", "somevalue"); + verifyEnvProperty(envChild, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envChild, "some.irrelevant.property", "somevalue"); + } +} --- /dev/null 2018-07-26 15:28:08.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/AddOps.dns 2018-07-26 15:28:08.000000000 +0800 @@ -0,0 +1,100 @@ +# +# Copyright (c) 2018, 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. +# + +################################################################################ +# Capture file for AddOps.java +# +# NOTE: This hexadecimal dump of DNS protocol messages was generated by +# running the AddOps application program against a real DNS +# server along with DNSTracer +# +################################################################################ + +# DNS Request + +0000: 38 D7 01 00 00 01 00 00 00 00 00 00 05 68 6F 73 8............hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: FF 00 01 ... + + +# DNS Response + +0000: 38 D7 85 80 00 01 00 06 00 01 00 01 05 68 6F 73 8............hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: FF 00 01 C0 0C 00 10 00 01 00 00 8C A0 00 15 14 ................ +0030: 41 20 76 65 72 79 20 70 6F 70 75 6C 61 72 20 68 A very popular h +0040: 6F 73 74 2E C0 0C 00 1D 00 01 00 00 8C A0 00 10 ost............. +0050: 00 12 16 13 88 97 1A 35 69 68 41 38 00 9B 16 58 .......5ihA8...X +0060: C0 0C 00 0D 00 01 00 00 8C A0 00 13 0C 54 68 65 .............The +0070: 20 4F 72 69 67 69 6E 61 6C 05 53 75 6E 6E 79 C0 Original.Sunny. +0080: 0C 00 0F 00 01 00 00 8C A0 00 12 00 14 05 72 65 ..............re +0090: 6C 61 79 05 74 65 78 61 73 02 75 73 00 C0 0C 00 lay.texas.us.... +00A0: 0F 00 01 00 00 8C A0 00 0F 00 0A 05 72 65 6C 61 ............rela +00B0: 79 04 6F 68 69 6F C0 99 C0 0C 00 01 00 01 00 01 y.ohio.......... +00C0: 51 80 00 04 01 02 04 01 C0 12 00 02 00 01 00 00 Q............... +00D0: 8C A0 00 05 02 6E 73 C0 12 C0 D4 00 01 00 01 00 .....ns......... +00E0: 00 8C A0 00 04 7F 00 00 01 ......... + + +# DNS Request + +0000: D8 67 01 00 00 01 00 00 00 00 00 00 06 73 75 6E .g...........sun +0010: 77 65 62 07 43 65 6E 74 72 61 6C 03 53 75 6E 03 web.Central.Sun. +0020: 43 4F 4D 00 00 FF 00 01 COM..... + + +# DNS Response + +0000: D8 67 81 80 00 01 00 01 00 06 00 0C 06 73 75 6E .g...........sun +0010: 77 65 62 07 43 65 6E 74 72 61 6C 03 53 75 6E 03 web.Central.Sun. +0020: 43 4F 4D 00 00 FF 00 01 C0 0C 00 05 00 01 00 00 COM............. +0030: 2A 30 00 0E 0B 73 75 6E 77 65 62 2D 70 73 72 76 *0...sunweb-psrv +0040: C0 13 C0 13 00 02 00 01 00 00 2A 30 00 14 0A 64 ..........*0...d +0050: 6E 73 6D 61 73 74 65 72 34 06 6F 72 61 63 6C 65 nsmaster4.oracle +0060: C0 1F C0 13 00 02 00 01 00 00 2A 30 00 0D 0A 64 ..........*0...d +0070: 6E 73 6D 61 73 74 65 72 31 C0 59 C0 13 00 02 00 nsmaster1.Y..... +0080: 01 00 00 2A 30 00 0D 0A 64 6E 73 6D 61 73 74 65 ...*0...dnsmaste +0090: 72 33 C0 59 C0 13 00 02 00 01 00 00 2A 30 00 0D r3.Y........*0.. +00A0: 0A 64 6E 73 6D 61 73 74 65 72 32 C0 59 C0 13 00 .dnsmaster2.Y... +00B0: 02 00 01 00 00 2A 30 00 0D 0A 64 6E 73 6D 61 73 .....*0...dnsmas +00C0: 74 65 72 36 C0 59 C0 13 00 02 00 01 00 00 2A 30 ter6.Y........*0 +00D0: 00 0D 0A 64 6E 73 6D 61 73 74 65 72 35 C0 59 C0 ...dnsmaster5.Y. +00E0: B9 00 01 00 01 00 00 2A 30 00 04 C0 87 52 54 C0 .......*0....RT. +00F0: B9 00 1C 00 01 00 00 2A 30 00 10 26 06 B4 00 14 .......*0..&.... +0100: 00 41 40 4F FF FF FF FF FF 9F 99 C0 D2 00 01 00 .A@O............ +0110: 01 00 00 2A 30 00 04 C0 87 52 46 C0 D2 00 1C 00 ...*0....RF..... +0120: 01 00 00 2A 30 00 10 26 06 B4 00 14 00 42 40 4F ...*0..&.....B@O +0130: FF FF FF FF FF 9F 99 C0 6E 00 01 00 01 00 00 2A ........n......* +0140: 30 00 04 C0 87 52 04 C0 6E 00 1C 00 01 00 00 2A 0....R..n......* +0150: 30 00 10 26 06 B4 00 14 00 01 80 4F FF FF FF FF 0..&.......O.... +0160: FF 9F 99 C0 A0 00 01 00 01 00 00 2A 30 00 04 C0 ...........*0... +0170: 87 52 14 C0 A0 00 1C 00 01 00 00 2A 30 00 10 26 .R.........*0..& +0180: 06 B4 00 14 00 03 12 4F FF FF FF FF FF 9F 99 C0 .......O........ +0190: 4E 00 01 00 01 00 00 2A 30 00 04 C0 87 52 34 C0 N......*0....R4. +01A0: 4E 00 1C 00 01 00 00 2A 30 00 10 26 06 B4 00 14 N......*0..&.... +01B0: 00 81 40 4F FF FF FF FF FF 9F 99 C0 87 00 01 00 ..@O............ +01C0: 01 00 00 2A 30 00 04 C0 87 52 24 C0 87 00 1C 00 ...*0....R$..... +01D0: 01 00 00 2A 30 00 10 26 06 B4 00 14 00 80 40 4F ...*0..&......@O +01E0: FF FF FF FF FF 9F 99 ....... + + --- /dev/null 2018-07-26 15:28:09.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/AddOps.java 2018-07-26 15:28:09.000000000 +0800 @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2000, 2018, 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 8208279 + * @summary Tests that when we add the authoritative property to a context, + * that it affects subsequent context operations. + * @modules java.base/sun.security.util + * @library ../lib/ + * @run main AddOps + */ + +import javax.naming.Context; +import javax.naming.NameNotFoundException; +import javax.naming.NamingException; +import javax.naming.directory.Attributes; + +public class AddOps extends EnvTestBase { + + public static void main(String[] args) throws Exception { + new AddOps().run(args); + } + + /* + * Tests that when we add the authoritative property to a context, + * that it affects subsequent context operations. + */ + @Override public void runTest() throws Exception { + initContext(); + addToEnvAndVerifyOldValIsNull(Context.AUTHORITATIVE, "true"); + retrieveAndVerifyAuthData(); + retrieveNonAuthData(); + } + + private void retrieveAndVerifyAuthData() throws NamingException { + // Ensure that auth data retrieval is OK + retrieveAndVerifyData(getFqdnUrl(), new String[] { "*" }); + } + + private void retrieveNonAuthData() throws NamingException { + try { + // Ensure that nonauth data retrieval cannot be retrieved + Attributes retAttrs = context() + .getAttributes(getForeignFqdnUrl(), new String[] { "*" }); + DNSTestUtils.debug(context().getEnvironment()); + DNSTestUtils.debug(retAttrs); + throw new RuntimeException( + "Failed: Expecting nonauth entry not found " + + getForeignFqdnUrl()); + + } catch (NameNotFoundException e) { + System.out.println("Got exception as expected : " + e); + } + } +} --- /dev/null 2018-07-26 15:28:10.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/EnvTestBase.java 2018-07-26 15:28:10.000000000 +0800 @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2018, 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. + */ + +import javax.naming.Context; +import javax.naming.NamingException; +import javax.naming.directory.Attributes; +import javax.naming.directory.InitialDirContext; +import java.util.Hashtable; + +public abstract class EnvTestBase extends DNSTestBase { + private static final String[] MANDATORY_ATTRIBUTES = { "A", "MX", "HINFO", + "TXT", "29" }; + private static final String[] OPTIONAL_ATTRIBUTES = {}; + + private String key; + private String fqdnUrl; + private String foreignFqdnUrl; + + public EnvTestBase() { + // set default test data + setKey("host1"); + } + + @Override public void setupTest() { + super.setupTest(); + String fqdn = DNSTestUtils.buildFqdn(key, env(), true); + + String foreignLeaf = (String) env().get("FOREIGN_LEAF"); + String foreignFqdn = DNSTestUtils.buildFqdn(foreignLeaf, env(), false); + + fqdnUrl = DNSTestUtils.getRootUrl(env()) + "/" + fqdn; + foreignFqdnUrl = DNSTestUtils.getRootUrl(env()) + "/" + foreignFqdn; + } + + public void initContext() throws Exception { + setContext(new InitialDirContext(env())); + } + + public void addToEnvAndVerifyOldValIsNull(String propName, Object propVal) + throws NamingException { + addToEnvAndVerifyOldValIsNull(context(), propName, propVal); + } + + public void addToEnvAndVerifyOldValIsNull(Context context, String propName, + Object propVal) throws NamingException { + Object oldValue = context.addToEnvironment(propName, propVal); + DNSTestUtils.debug("Old Value for " + propName + " : " + oldValue); + if (oldValue != null) { + throw new RuntimeException( + "Failed: old value expected to be null for " + propName + + " but actual is : " + oldValue); + } + } + + public void verifyEnvProperty(Hashtable env, String propName, + Object expectedVal) { + boolean equals = true; + Object actualVal = env.get(propName); + if (actualVal != null && expectedVal != null) { + if (!expectedVal.equals(actualVal)) { + equals = false; + } + } else { + if (actualVal != null || expectedVal != null) { + equals = false; + } + } + + if (!equals) { + throw new RuntimeException( + "Failed: value not match for " + propName + " expected: " + + expectedVal + " actual: " + actualVal); + } + } + + public void retrieveAndVerifyData(String name, String[] attrIds) + throws NamingException { + Attributes retAttrs = context().getAttributes(name, attrIds); + DNSTestUtils.verifySchema(retAttrs, MANDATORY_ATTRIBUTES, + OPTIONAL_ATTRIBUTES); + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getFqdnUrl() { + return fqdnUrl; + } + + public String getForeignFqdnUrl() { + return foreignFqdnUrl; + } +} --- /dev/null 2018-07-26 15:28:11.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/GetEnv.dns 2018-07-26 15:28:11.000000000 +0800 @@ -0,0 +1,50 @@ +# +# Copyright (c) 2018, 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. +# + +################################################################################ +# Capture file for GetEnv.java +# +# NOTE: This hexadecimal dump of DNS protocol messages was generated by +# running the GetEnv application program against a real DNS +# server along with DNSTracer +# +################################################################################ + +# DNS Request + +0000: BE 2D 00 00 00 01 00 00 00 00 00 00 05 68 6F 73 .-...........hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 ... + + +# DNS Response + +0000: BE 2D 84 80 00 01 00 01 00 01 00 01 05 68 6F 73 .-...........hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 C0 0C 00 10 00 01 00 00 8C A0 00 15 14 ................ +0030: 41 20 76 65 72 79 20 70 6F 70 75 6C 61 72 20 68 A very popular h +0040: 6F 73 74 2E C0 12 00 02 00 01 00 00 8C A0 00 05 ost............. +0050: 02 6E 73 C0 12 C0 50 00 01 00 01 00 00 8C A0 00 .ns...P......... +0060: 04 7F 00 00 01 ..... + + --- /dev/null 2018-07-26 15:28:13.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/GetEnv.java 2018-07-26 15:28:12.000000000 +0800 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2000, 2018, 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 8208279 + * @summary Tests that we can get the environment properties of a DNS context + * and its derived context, and check that they contain relevant and + * irrelevant properties. + * @modules java.base/sun.security.util + * @library ../lib/ + * @run main GetEnv + */ + +import javax.naming.Context; +import javax.naming.directory.InitialDirContext; +import java.util.Hashtable; + +public class GetEnv extends EnvTestBase { + + public static void main(String[] args) throws Exception { + new GetEnv().run(args); + } + + /* + * Tests that we can get the environment properties of a DNS context + * and its derived context, and check that they contain relevant and + * irrelevant properties. + */ + @Override public void runTest() throws Exception { + initContext(); + + Context child = (Context) context().lookup(getKey()); + + Hashtable envParent = context().getEnvironment(); + Hashtable envChild = child.getEnvironment(); + + DNSTestUtils.debug(child); + DNSTestUtils.debug("Parent env: " + envParent); + DNSTestUtils.debug("Child env: " + envChild); + + verifyEnvProperty(envParent, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envParent, "some.irrelevant.property", "somevalue"); + verifyEnvProperty(envChild, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envChild, "some.irrelevant.property", "somevalue"); + } + + @Override public void initContext() throws Exception { + env().put("com.sun.jndi.dns.recursion", "false"); + env().put("some.irrelevant.property", "somevalue"); + setContext(new InitialDirContext(env())); + } +} --- /dev/null 2018-07-26 15:28:14.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/ProviderUrlGen.java 2018-07-26 15:28:14.000000000 +0800 @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2002, 2018, 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 8208279 + * @summary If DNS name resolution is configured normally for SWAN on the local + * machine, construct a context using the configured servers and verify + * that a PROVIDER_URL property is generated for the context. + * If DNS is not configured, or if JDK version is earlier than 1.4.1, + * then this test is a no-op (it passes without doing anything). + * @modules jdk.naming.dns/com.sun.jndi.dns + * java.base/sun.security.util + * @library ../lib/ + * @run main ProviderUrlGen + */ + +import javax.naming.Context; +import javax.naming.directory.DirContext; +import javax.naming.directory.InitialDirContext; +import java.util.Hashtable; + +public class ProviderUrlGen { + + public static void main(String[] args) throws Exception { + Hashtable env; + + // initialize test + env = DNSTestUtils.initEnv(false, ProviderUrlGen.class.getName(), args); + + env.remove(Context.PROVIDER_URL); + + DirContext ctx = null; + + try { + if (!isPlatformServersAvailable()) { + System.out.println( + "DNS not configured. There's nothing to test."); + return; + } + + ctx = new InitialDirContext(env); + + String providerUrl = (String) ctx.getEnvironment() + .get(Context.PROVIDER_URL); + + if (providerUrl == null) { + throw new RuntimeException("Failed: PROVIDER_URL not set"); + } + + DNSTestUtils.debug("PROVIDER_URL = \"" + providerUrl + "\""); + + // We don't know exactly what providerUrl's value should be. + // Check that it is a space-separated list of one or more URLs + // of the form "dns://xxxxxx". + + String[] urls = providerUrl.split(" "); + if (urls.length < 1) { + throw new RuntimeException("Failed: PROVIDER_URL is empty"); + } + + for (String url : urls) { + DNSTestUtils.debug(url); + if (!checkUrl(url)) { + throw new RuntimeException( + "Failed: Unexpected DNS URL: " + url); + } + } + + } finally { + DNSTestUtils.cleanup(ctx); + } + } + + private static boolean checkUrl(String url) { + return url.startsWith("dns://") && url.length() >= 7; + } + + private static boolean isPlatformServersAvailable() { + try { + java.lang.reflect.Method psa = com.sun.jndi.dns.DnsContextFactory.class + .getMethod("platformServersAvailable", null); + return (Boolean) psa.invoke(null, null); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } +} --- /dev/null 2018-07-26 15:28:15.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/RemoveInherited.dns 2018-07-26 15:28:15.000000000 +0800 @@ -0,0 +1,50 @@ +# +# Copyright (c) 2018, 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. +# + +################################################################################ +# Capture file for RemoveInherited.java +# +# NOTE: This hexadecimal dump of DNS protocol messages was generated by +# running the RemoveInherited application program against a real DNS +# server along with DNSTracer +# +################################################################################ + +# DNS Request + +0000: AB CC 00 00 00 01 00 00 00 00 00 00 05 68 6F 73 .............hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 ... + + +# DNS Response + +0000: AB CC 84 80 00 01 00 01 00 01 00 01 05 68 6F 73 .............hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 C0 0C 00 10 00 01 00 00 8C A0 00 15 14 ................ +0030: 41 20 76 65 72 79 20 70 6F 70 75 6C 61 72 20 68 A very popular h +0040: 6F 73 74 2E C0 12 00 02 00 01 00 00 8C A0 00 05 ost............. +0050: 02 6E 73 C0 12 C0 50 00 01 00 01 00 00 8C A0 00 .ns...P......... +0060: 04 7F 00 00 01 ..... + + --- /dev/null 2018-07-26 15:28:16.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/RemoveInherited.java 2018-07-26 15:28:16.000000000 +0800 @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2000, 2018, 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 8208279 + * @summary Tests that when we remove environment properties from a context, + * its changes are reflected in the environment properties of any + * child context derived from the context. + * @modules java.base/sun.security.util + * @library ../lib/ + * @run main RemoveInherited + */ + +import javax.naming.Context; +import javax.naming.directory.InitialDirContext; +import java.util.Hashtable; + +public class RemoveInherited extends EnvTestBase { + + public static void main(String[] args) throws Exception { + new RemoveInherited().run(args); + } + + /* + * Tests that when we remove environment properties from a context, + * its changes are reflected in the environment properties of any + * child context derived from the context. + */ + @Override public void runTest() throws Exception { + initContext(); + + Object val = context() + .removeFromEnvironment("some.irrelevant.property"); + + if (!"somevalue".equals(val)) { + throw new RuntimeException( + "Failed: unexpected return value for removeFromEnvironment: " + + val); + } + + Context child = (Context) context().lookup(getKey()); + + Hashtable envParent = context().getEnvironment(); + Hashtable envChild = child.getEnvironment(); + + DNSTestUtils.debug(child); + DNSTestUtils.debug("Parent env: " + envParent); + DNSTestUtils.debug("Child env: " + envChild); + + verifyEnvProperty(envParent, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envParent, "some.irrelevant.property", null); + verifyEnvProperty(envChild, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envChild, "some.irrelevant.property", null); + } + + @Override public void initContext() throws Exception { + env().put("com.sun.jndi.dns.recursion", "false"); + env().put("some.irrelevant.property", "somevalue"); + setContext(new InitialDirContext(env())); + } +} --- /dev/null 2018-07-26 15:28:18.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/RemoveOps.dns 2018-07-26 15:28:17.000000000 +0800 @@ -0,0 +1,100 @@ +# +# Copyright (c) 2018, 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. +# + +################################################################################ +# Capture file for RemoveOps.java +# +# NOTE: This hexadecimal dump of DNS protocol messages was generated by +# running the RemoveOps application program against a real DNS +# server along with DNSTracer +# +################################################################################ + +# DNS Request + +0000: 0C 4D 01 00 00 01 00 00 00 00 00 00 05 68 6F 73 .M...........hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: FF 00 01 ... + + +# DNS Response + +0000: 0C 4D 85 80 00 01 00 06 00 01 00 01 05 68 6F 73 .M...........hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: FF 00 01 C0 0C 00 10 00 01 00 00 8C A0 00 15 14 ................ +0030: 41 20 76 65 72 79 20 70 6F 70 75 6C 61 72 20 68 A very popular h +0040: 6F 73 74 2E C0 0C 00 1D 00 01 00 00 8C A0 00 10 ost............. +0050: 00 12 16 13 88 97 1A 35 69 68 41 38 00 9B 16 58 .......5ihA8...X +0060: C0 0C 00 0D 00 01 00 00 8C A0 00 13 0C 54 68 65 .............The +0070: 20 4F 72 69 67 69 6E 61 6C 05 53 75 6E 6E 79 C0 Original.Sunny. +0080: 0C 00 0F 00 01 00 00 8C A0 00 11 00 0A 05 72 65 ..............re +0090: 6C 61 79 04 6F 68 69 6F 02 75 73 00 C0 0C 00 0F lay.ohio.us..... +00A0: 00 01 00 00 8C A0 00 10 00 14 05 72 65 6C 61 79 ...........relay +00B0: 05 74 65 78 61 73 C0 98 C0 0C 00 01 00 01 00 01 .texas.......... +00C0: 51 80 00 04 01 02 04 01 C0 12 00 02 00 01 00 00 Q............... +00D0: 8C A0 00 05 02 6E 73 C0 12 C0 D4 00 01 00 01 00 .....ns......... +00E0: 00 8C A0 00 04 7F 00 00 01 ......... + + +# DNS Request + +0000: 01 15 01 00 00 01 00 00 00 00 00 00 06 73 75 6E .............sun +0010: 77 65 62 07 43 65 6E 74 72 61 6C 03 53 75 6E 03 web.Central.Sun. +0020: 43 4F 4D 00 00 FF 00 01 COM..... + + +# DNS Response + +0000: 01 15 81 80 00 01 00 01 00 06 00 0C 06 73 75 6E .............sun +0010: 77 65 62 07 43 65 6E 74 72 61 6C 03 53 75 6E 03 web.Central.Sun. +0020: 43 4F 4D 00 00 FF 00 01 C0 0C 00 05 00 01 00 00 COM............. +0030: 2A 30 00 0E 0B 73 75 6E 77 65 62 2D 70 73 72 76 *0...sunweb-psrv +0040: C0 13 C0 13 00 02 00 01 00 00 2A 30 00 14 0A 64 ..........*0...d +0050: 6E 73 6D 61 73 74 65 72 32 06 6F 72 61 63 6C 65 nsmaster2.oracle +0060: C0 1F C0 13 00 02 00 01 00 00 2A 30 00 0D 0A 64 ..........*0...d +0070: 6E 73 6D 61 73 74 65 72 34 C0 59 C0 13 00 02 00 nsmaster4.Y..... +0080: 01 00 00 2A 30 00 0D 0A 64 6E 73 6D 61 73 74 65 ...*0...dnsmaste +0090: 72 36 C0 59 C0 13 00 02 00 01 00 00 2A 30 00 0D r6.Y........*0.. +00A0: 0A 64 6E 73 6D 61 73 74 65 72 33 C0 59 C0 13 00 .dnsmaster3.Y... +00B0: 02 00 01 00 00 2A 30 00 0D 0A 64 6E 73 6D 61 73 .....*0...dnsmas +00C0: 74 65 72 31 C0 59 C0 13 00 02 00 01 00 00 2A 30 ter1.Y........*0 +00D0: 00 0D 0A 64 6E 73 6D 61 73 74 65 72 35 C0 59 C0 ...dnsmaster5.Y. +00E0: D2 00 01 00 01 00 00 2A 30 00 04 C0 87 52 46 C0 .......*0....RF. +00F0: D2 00 1C 00 01 00 00 2A 30 00 10 26 06 B4 00 14 .......*0..&.... +0100: 00 42 40 4F FF FF FF FF FF 9F 99 C0 A0 00 01 00 .B@O............ +0110: 01 00 00 2A 30 00 04 C0 87 52 24 C0 A0 00 1C 00 ...*0....R$..... +0120: 01 00 00 2A 30 00 10 26 06 B4 00 14 00 80 40 4F ...*0..&......@O +0130: FF FF FF FF FF 9F 99 C0 87 00 01 00 01 00 00 2A ...............* +0140: 30 00 04 C0 87 52 54 C0 87 00 1C 00 01 00 00 2A 0....RT........* +0150: 30 00 10 26 06 B4 00 14 00 41 40 4F FF FF FF FF 0..&.....A@O.... +0160: FF 9F 99 C0 4E 00 01 00 01 00 00 2A 30 00 04 C0 ....N......*0... +0170: 87 52 14 C0 4E 00 1C 00 01 00 00 2A 30 00 10 26 .R..N......*0..& +0180: 06 B4 00 14 00 03 12 4F FF FF FF FF FF 9F 99 C0 .......O........ +0190: 6E 00 01 00 01 00 00 2A 30 00 04 C0 87 52 34 C0 n......*0....R4. +01A0: 6E 00 1C 00 01 00 00 2A 30 00 10 26 06 B4 00 14 n......*0..&.... +01B0: 00 81 40 4F FF FF FF FF FF 9F 99 C0 B9 00 01 00 ..@O............ +01C0: 01 00 00 2A 30 00 04 C0 87 52 04 C0 B9 00 1C 00 ...*0....R...... +01D0: 01 00 00 2A 30 00 10 26 06 B4 00 14 00 01 80 4F ...*0..&.......O +01E0: FF FF FF FF FF 9F 99 ....... + + --- /dev/null 2018-07-26 15:28:19.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/RemoveOps.java 2018-07-26 15:28:18.000000000 +0800 @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2000, 2018, 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 8208279 + * @summary Tests that when we remove the authoritative property from a context, + * that it affects subsequent context operations. + * @modules java.base/sun.security.util + * @library ../lib/ + * @run main RemoveOps + */ + +import javax.naming.Context; +import javax.naming.NameNotFoundException; +import javax.naming.NamingException; +import javax.naming.directory.Attributes; +import javax.naming.directory.InitialDirContext; + +public class RemoveOps extends EnvTestBase { + + public static void main(String[] args) throws Exception { + new RemoveOps().run(args); + } + + /* + * Tests that when we remove the authoritative property from a context, + * that it affects subsequent context operations. + */ + @Override public void runTest() throws Exception { + initContext(); + + Object val = context().removeFromEnvironment(Context.AUTHORITATIVE); + + if (!"true".equals(val)) { + throw new RuntimeException( + "Failed: unexpected return value for removeFromEnvironment: " + + val); + } + + retrieveAndVerifyAuthData(); + retrieveNonAuthData(); + } + + @Override public void initContext() throws Exception { + // Make authoritative + env().put(Context.AUTHORITATIVE, "true"); + setContext(new InitialDirContext(env())); + } + + private void retrieveAndVerifyAuthData() throws NamingException { + // Ensure that auth data retrieval is OK + retrieveAndVerifyData(getFqdnUrl(), new String[] { "*" }); + } + + private void retrieveNonAuthData() throws NamingException { + try { + // Ensure that nonauth data retrieval succeeds + Attributes retAttrs = context() + .getAttributes(getForeignFqdnUrl(), new String[] { "*" }); + DNSTestUtils.debug(context().getEnvironment()); + DNSTestUtils.debug(retAttrs); + + } catch (NameNotFoundException e) { + throw new RuntimeException( + "Failed: Expecting nonauthoritative entry found: " + + getForeignFqdnUrl(), e); + } + } +} --- /dev/null 2018-07-26 15:28:20.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/SubcontextAdd.dns 2018-07-26 15:28:20.000000000 +0800 @@ -0,0 +1,50 @@ +# +# Copyright (c) 2018, 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. +# + +################################################################################ +# Capture file for SubcontextAdd.java +# +# NOTE: This hexadecimal dump of DNS protocol messages was generated by +# running the SubcontextAdd application program against a real DNS +# server along with DNSTracer +# +################################################################################ + +# DNS Request + +0000: A4 83 01 00 00 01 00 00 00 00 00 00 05 68 6F 73 .............hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 ... + + +# DNS Response + +0000: A4 83 85 80 00 01 00 01 00 01 00 01 05 68 6F 73 .............hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 C0 0C 00 10 00 01 00 00 8C A0 00 15 14 ................ +0030: 41 20 76 65 72 79 20 70 6F 70 75 6C 61 72 20 68 A very popular h +0040: 6F 73 74 2E C0 12 00 02 00 01 00 00 8C A0 00 05 ost............. +0050: 02 6E 73 C0 12 C0 50 00 01 00 01 00 00 8C A0 00 .ns...P......... +0060: 04 7F 00 00 01 ..... + + --- /dev/null 2018-07-26 15:28:21.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/SubcontextAdd.java 2018-07-26 15:28:21.000000000 +0800 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2000, 2018, 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 8208279 + * @summary Tests that when we add environment properties to a child context, + * its changes do not affect the environment properties of the parent + * context. + * @modules java.base/sun.security.util + * @library ../lib/ + * @run main SubcontextAdd + */ + +import javax.naming.Context; +import java.util.Hashtable; + +public class SubcontextAdd extends EnvTestBase { + + public static void main(String[] args) throws Exception { + new SubcontextAdd().run(args); + } + + /* + * Tests that when we add environment properties to a child context, + * its changes do not affect the environment properties of the parent + * context. + */ + @Override public void runTest() throws Exception { + initContext(); + + Context child = (Context) context().lookup(getKey()); + + addToEnvAndVerifyOldValIsNull(child, "com.sun.jndi.dns.recursion", + "false"); + addToEnvAndVerifyOldValIsNull(child, "some.irrelevant.property", + "somevalue"); + + Hashtable envParent = context().getEnvironment(); + Hashtable envChild = child.getEnvironment(); + + DNSTestUtils.debug(child); + DNSTestUtils.debug("Parent env: " + envParent); + DNSTestUtils.debug("Child env: " + envChild); + + verifyEnvProperty(envParent, "com.sun.jndi.dns.recursion", null); + verifyEnvProperty(envParent, "some.irrelevant.property", null); + verifyEnvProperty(envChild, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envChild, "some.irrelevant.property", "somevalue"); + } +} --- /dev/null 2018-07-26 15:28:22.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/SubcontextRemove.dns 2018-07-26 15:28:22.000000000 +0800 @@ -0,0 +1,50 @@ +# +# Copyright (c) 2018, 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. +# + +################################################################################ +# Capture file for SubcontextRemove.java +# +# NOTE: This hexadecimal dump of DNS protocol messages was generated by +# running the SubcontextRemove application program against a real DNS +# server along with DNSTracer +# +################################################################################ + +# DNS Request + +0000: 75 45 00 00 00 01 00 00 00 00 00 00 05 68 6F 73 uE...........hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 ... + + +# DNS Response + +0000: 75 45 84 80 00 01 00 01 00 01 00 01 05 68 6F 73 uE...........hos +0010: 74 31 07 64 6F 6D 61 69 6E 31 03 63 6F 6D 00 00 t1.domain1.com.. +0020: 10 00 01 C0 0C 00 10 00 01 00 00 8C A0 00 15 14 ................ +0030: 41 20 76 65 72 79 20 70 6F 70 75 6C 61 72 20 68 A very popular h +0040: 6F 73 74 2E C0 12 00 02 00 01 00 00 8C A0 00 05 ost............. +0050: 02 6E 73 C0 12 C0 50 00 01 00 01 00 00 8C A0 00 .ns...P......... +0060: 04 7F 00 00 01 ..... + + --- /dev/null 2018-07-26 15:28:24.000000000 +0800 +++ new/test/jdk/com/sun/jndi/dns/EnvTests/SubcontextRemove.java 2018-07-26 15:28:23.000000000 +0800 @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2000, 2018, 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 8208279 + * @summary Tests that when we remove environment properties from a child + * context, its changes do not affect the environment properties of + * the parent context. + * @modules java.base/sun.security.util + * @library ../lib/ + * @run main SubcontextRemove + */ + +import javax.naming.Context; +import javax.naming.directory.InitialDirContext; +import java.util.Hashtable; + +public class SubcontextRemove extends EnvTestBase { + + public static void main(String[] args) throws Exception { + new SubcontextRemove().run(args); + } + + /* + * Tests that when we remove environment properties from a child + * context, its changes do not affect the environment properties of + * the parent context. + */ + @Override public void runTest() throws Exception { + initContext(); + + Context child = (Context) context().lookup(getKey()); + + Object val = child.removeFromEnvironment("some.irrelevant.property"); + + if (!"somevalue".equals(val)) { + throw new RuntimeException( + "Failed: unexpected return value for removeFromEnvironment: " + + val); + } + + Hashtable envParent = context().getEnvironment(); + Hashtable envChild = child.getEnvironment(); + + DNSTestUtils.debug(child); + DNSTestUtils.debug("Parent env: " + envParent); + DNSTestUtils.debug("Child env: " + envChild); + + verifyEnvProperty(envParent, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envParent, "some.irrelevant.property", "somevalue"); + verifyEnvProperty(envChild, "com.sun.jndi.dns.recursion", "false"); + verifyEnvProperty(envChild, "some.irrelevant.property", null); + } + + @Override public void initContext() throws Exception { + env().put("com.sun.jndi.dns.recursion", "false"); + env().put("some.irrelevant.property", "somevalue"); + setContext(new InitialDirContext(env())); + } +}