[Git][java-team/httpcomponents-client][upstream] New upstream version 4.5.11
Emmanuel Bourg
gitlab at salsa.debian.org
Sat Jan 25 22:45:14 GMT 2020
Emmanuel Bourg pushed to branch upstream at Debian Java Maintainers / httpcomponents-client
Commits:
2a587bfa by Emmanuel Bourg at 2020-01-25T23:36:12+01:00
New upstream version 4.5.11
- - - - -
28 changed files:
- NOTICE.txt
- RELEASE_NOTES.txt
- fluent-hc/pom.xml
- httpclient-cache/pom.xml
- httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntrySerializationException.java
- httpclient-cache/src/main/java/org/apache/http/impl/client/cache/DefaultHttpCacheEntrySerializer.java
- httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpCacheEntrySerializers.java
- httpclient-osgi/pom.xml
- httpclient-win/pom.xml
- httpclient/pom.xml
- httpclient/src/main/java/org/apache/http/client/utils/URIBuilder.java
- httpclient/src/main/java/org/apache/http/conn/ssl/DefaultHostnameVerifier.java
- + httpclient/src/main/java/org/apache/http/conn/util/DnsUtils.java
- httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcher.java
- httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java
- httpclient/src/main/java/org/apache/http/impl/client/DefaultBackoffStrategy.java
- httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
- httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
- httpclient/src/main/resources/mozilla/public-suffix-list.txt
- httpclient/src/test/java/org/apache/http/client/utils/TestURIBuilder.java
- httpclient/src/test/java/org/apache/http/conn/ssl/TestDefaultHostnameVerifier.java
- + httpclient/src/test/java/org/apache/http/conn/util/TesDnsUtils.java
- httpclient/src/test/java/org/apache/http/conn/util/TestPublicSuffixMatcher.java
- httpclient/src/test/java/org/apache/http/impl/client/TestDefaultBackoffStrategy.java
- httpclient/src/test/java/org/apache/http/impl/conn/TestBasicHttpClientConnectionManager.java
- + httpclient/src/test/resources/suffixlistmatcher.txt
- httpmime/pom.xml
- pom.xml
Changes:
=====================================
NOTICE.txt
=====================================
@@ -1,5 +1,5 @@
Apache HttpComponents Client
-Copyright 1999-2019 The Apache Software Foundation
+Copyright 1999-2020 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
=====================================
RELEASE_NOTES.txt
=====================================
@@ -1,3 +1,44 @@
+Release 4.5.11
+-------------------
+
+This is a maintenance release that fixes a number defects discovered since 4.5.10
+and upgrades HttpCore dependency to version 4.4.13.
+
+
+Changelog:
+-------------------
+
+* Improved domain name normalization by DefaultHostnameVerifier.
+ Contributed by Oleg Kalnichevski <olegk at apache.org>
+
+* HTTPCLIENT-2033: Connection managers to immediately shut down all leased connection upon shutdown.
+ Contributed by Oleg Kalnichevski <olegk at apache.org>
+
+* HTTPCLIENT-2020: DefaultBackoffStrategy to support TOO_MANY_REQUESTS (429).
+ Contributed by Michael Osipov <michaelo at apache.org>
+
+* HTTPCLIENT-2030: Fixed PublicSuffixMatcher#getDomainRoot behavior with invalid hostnames.
+ Contributed by Niels Basjes <niels at basjes.nl>
+
+* HTTPCLIENT-2029: URIBuilder to support parsing of non-UTF8 URIs.
+ Contributed by Oleg Kalnichevski <olegk at apache.org>
+
+* HTTPCLIENT-2026: Fixed URIBuilder#isOpaque() logic.
+ Contributed by Oleg Kalnichevski <olegk at apache.org>
+
+* Updated text in pool stats description
+ Contributed by chao chang <chang-chao at users.noreply.github.com>
+
+* HTTPCLIENT-2023: Allow nested arrays and all primitive types in DefaultHttpCacheEntrySerializer.
+ Contributed by Olof Larsson <olof at sylt.nu>
+
+* Fixed fallback PublicSuffixMatcher instance.
+ Contributed by Ryan Schmitt <rschmitt at apache.org>
+
+* Added family property #145.
+ Contributed by behrangsa
+
+
Release 4.5.10
-------------------
=====================================
fluent-hc/pom.xml
=====================================
@@ -28,7 +28,7 @@
<parent>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcomponents-client</artifactId>
- <version>4.5.10</version>
+ <version>4.5.11</version>
</parent>
<artifactId>fluent-hc</artifactId>
<name>Apache HttpClient Fluent API</name>
=====================================
httpclient-cache/pom.xml
=====================================
@@ -28,7 +28,7 @@
<parent>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcomponents-client</artifactId>
- <version>4.5.10</version>
+ <version>4.5.11</version>
</parent>
<artifactId>httpclient-cache</artifactId>
<name>Apache HttpClient Cache</name>
=====================================
httpclient-cache/src/main/java/org/apache/http/client/cache/HttpCacheEntrySerializationException.java
=====================================
@@ -37,7 +37,7 @@ public class HttpCacheEntrySerializationException extends IOException {
private static final long serialVersionUID = 9219188365878433519L;
public HttpCacheEntrySerializationException(final String message) {
- super();
+ super(message);
}
public HttpCacheEntrySerializationException(final String message, final Throwable cause) {
=====================================
httpclient-cache/src/main/java/org/apache/http/impl/client/cache/DefaultHttpCacheEntrySerializer.java
=====================================
@@ -54,22 +54,6 @@ import org.apache.http.client.cache.HttpCacheEntrySerializer;
@Contract(threading = ThreadingBehavior.IMMUTABLE)
public class DefaultHttpCacheEntrySerializer implements HttpCacheEntrySerializer {
- private static final List<Pattern> ALLOWED_CLASS_PATTERNS = Collections.unmodifiableList(Arrays.asList(
- Pattern.compile("^(\\[L)?org\\.apache\\.http\\.(.*)"),
- Pattern.compile("^(\\[L)?java\\.util\\.(.*)"),
- Pattern.compile("^(\\[L)?java\\.lang\\.(.*)$"),
- Pattern.compile("^\\[B$")));
-
- private final List<Pattern> allowedClassPatterns;
-
- DefaultHttpCacheEntrySerializer(final Pattern... allowedClassPatterns) {
- this.allowedClassPatterns = Collections.unmodifiableList(Arrays.asList(allowedClassPatterns));
- }
-
- public DefaultHttpCacheEntrySerializer() {
- this.allowedClassPatterns = ALLOWED_CLASS_PATTERNS;
- }
-
@Override
public void writeTo(final HttpCacheEntry cacheEntry, final OutputStream os) throws IOException {
final ObjectOutputStream oos = new ObjectOutputStream(os);
@@ -82,7 +66,7 @@ public class DefaultHttpCacheEntrySerializer implements HttpCacheEntrySerializer
@Override
public HttpCacheEntry readFrom(final InputStream is) throws IOException {
- final ObjectInputStream ois = new RestrictedObjectInputStream(is, allowedClassPatterns);
+ final ObjectInputStream ois = new RestrictedObjectInputStream(is);
try {
return (HttpCacheEntry) ois.readObject();
} catch (final ClassNotFoundException ex) {
@@ -92,32 +76,47 @@ public class DefaultHttpCacheEntrySerializer implements HttpCacheEntrySerializer
}
}
- private static class RestrictedObjectInputStream extends ObjectInputStream {
+ // visible for testing
+ static class RestrictedObjectInputStream extends ObjectInputStream {
- private final List<Pattern> allowedClassPatterns;
+ private static final List<Pattern> ALLOWED_CLASS_PATTERNS = Collections.unmodifiableList(Arrays.asList(
+ Pattern.compile("^(?:\\[+L)?org\\.apache\\.http\\..*$"),
+ Pattern.compile("^(?:\\[+L)?java\\.util\\..*$"),
+ Pattern.compile("^(?:\\[+L)?java\\.lang\\..*$"),
+ Pattern.compile("^\\[+Z$"), // boolean
+ Pattern.compile("^\\[+B$"), // byte
+ Pattern.compile("^\\[+C$"), // char
+ Pattern.compile("^\\[+D$"), // double
+ Pattern.compile("^\\[+F$"), // float
+ Pattern.compile("^\\[+I$"), // int
+ Pattern.compile("^\\[+J$"), // long
+ Pattern.compile("^\\[+S$") // short
+ ));
- private RestrictedObjectInputStream(final InputStream in, final List<Pattern> patterns) throws IOException {
+ private RestrictedObjectInputStream(final InputStream in) throws IOException {
super(in);
- this.allowedClassPatterns = patterns;
}
@Override
- protected Class<?> resolveClass(final ObjectStreamClass desc) throws IOException, ClassNotFoundException {
- if (isProhibited(desc)) {
- throw new HttpCacheEntrySerializationException(String.format(
- "Class %s is not allowed for deserialization", desc.getName()));
+ protected Class<?> resolveClass(final ObjectStreamClass objectStreamClass) throws IOException, ClassNotFoundException {
+ final String className = objectStreamClass.getName();
+ if (!isAllowedClassName(className)) {
+ final String message = String.format("Class %s is not allowed for deserialization", className);
+ throw new HttpCacheEntrySerializationException(message);
}
- return super.resolveClass(desc);
+ return super.resolveClass(objectStreamClass);
}
- private boolean isProhibited(final ObjectStreamClass desc) {
- for (final Pattern pattern : allowedClassPatterns) {
- if (pattern.matcher(desc.getName()).matches()) {
- return false;
+ // visible for testing
+ static boolean isAllowedClassName(final String className) {
+ for (final Pattern allowedClassPattern : ALLOWED_CLASS_PATTERNS) {
+ if (allowedClassPattern.matcher(className).matches()) {
+ return true;
}
}
- return true;
+ return false;
}
+
}
}
=====================================
httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpCacheEntrySerializers.java
=====================================
@@ -26,6 +26,7 @@
*/
package org.apache.http.impl.client.cache;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
@@ -38,7 +39,6 @@ import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
-import java.util.regex.Pattern;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.Header;
@@ -72,25 +72,182 @@ public class TestHttpCacheEntrySerializers {
readWriteVerify(makeCacheEntryWithVariantMap());
}
- @Test(expected = HttpCacheEntrySerializationException.class)
- public void throwExceptionIfUnsafeDeserialization() throws IOException {
- impl.readFrom(new ByteArrayInputStream(serializeProhibitedObject()));
+ @Test
+ public void isAllowedClassNameStringTrue() {
+ assertIsAllowedClassNameTrue(String.class.getName());
}
- @Test(expected = HttpCacheEntrySerializationException.class)
- public void allowClassesToBeDeserialized() throws IOException {
- impl = new DefaultHttpCacheEntrySerializer(
- Pattern.compile("javax.sql.rowset.BaseRowSet"),
- Pattern.compile("com.sun.rowset.JdbcRowSetImpl"));
- readVerify(serializeProhibitedObject());
+ @Test
+ public void isAllowedClassNameStringArrayTrue() {
+ assertIsAllowedClassNameTrue("[L" + String.class.getName());
+ }
+
+ @Test
+ public void isAllowedClassNameStringArrayArrayTrue() {
+ assertIsAllowedClassNameTrue("[[L" + String.class.getName());
+ }
+
+ @Test
+ public void isAllowedClassNameDataTrue() {
+ assertIsAllowedClassNameTrue(Date.class.getName());
+ }
+
+ @Test
+ public void isAllowedClassNameStatusLineTrue() {
+ assertIsAllowedClassNameTrue(StatusLine.class.getName());
+ }
+
+ @Test
+ public void isAllowedClassNameResourceTrue() {
+ assertIsAllowedClassNameTrue(Resource.class.getName());
+ }
+
+ @Test
+ public void isAllowedClassNameByteArrayTrue() {
+ assertIsAllowedClassNameTrue("[B");
+ }
+
+ @Test
+ public void isAllowedClassNameByteArrayArrayTrue() {
+ assertIsAllowedClassNameTrue("[[B");
+ }
+
+ @Test
+ public void isAllowedClassNameCharArrayTrue() {
+ assertIsAllowedClassNameTrue("[C");
+ }
+
+ @Test
+ public void isAllowedClassNameCharArrayArrayTrue() {
+ assertIsAllowedClassNameTrue("[[C");
+ }
+
+ @Test
+ public void isAllowedClassNameDoubleArrayTrue() {
+ assertIsAllowedClassNameTrue("[D");
+ }
+
+ @Test
+ public void isAllowedClassNameDoubleArrayArrayTrue() {
+ assertIsAllowedClassNameTrue("[[D");
+ }
+
+ @Test
+ public void isAllowedClassNameFloatArrayTrue() {
+ assertIsAllowedClassNameTrue("[F");
+ }
+
+ @Test
+ public void isAllowedClassNameFloatArrayArrayTrue() {
+ assertIsAllowedClassNameTrue("[[F");
+ }
+
+ @Test
+ public void isAllowedClassNameIntArrayTrue() {
+ assertIsAllowedClassNameTrue("[I");
+ }
+
+ @Test
+ public void isAllowedClassNameIntArrayArrayTrue() {
+ assertIsAllowedClassNameTrue("[[I");
+ }
+
+ @Test
+ public void isAllowedClassNameLongArrayTrue() {
+ assertIsAllowedClassNameTrue("[J");
+ }
+
+ @Test
+ public void isAllowedClassNameLongArrayArrayTrue() {
+ assertIsAllowedClassNameTrue("[[J");
+ }
+
+ @Test
+ public void isAllowedClassNameShortArrayTrue() {
+ assertIsAllowedClassNameTrue("[S");
+ }
+
+ @Test
+ public void isAllowedClassNameShortArrayArrayTrue() {
+ assertIsAllowedClassNameTrue("[[S");
+ }
+
+ @Test
+ public void isAllowedClassNameCollectionsInvokerTransformerFalse() {
+ assertIsAllowedClassNameFalse("org.apache.commons.collections.functors.InvokerTransformer");
+ }
+
+ @Test
+ public void isAllowedClassNameCollections4InvokerTransformerFalse() {
+ assertIsAllowedClassNameFalse("org.apache.commons.collections4.functors.InvokerTransformer");
+ }
+
+ @Test
+ public void isAllowedClassNameCollectionsInstantiateTransformerFalse() {
+ assertIsAllowedClassNameFalse("org.apache.commons.collections.functors.InstantiateTransformer");
+ }
+
+ @Test
+ public void isAllowedClassNameCollections4InstantiateTransformerFalse() {
+ assertIsAllowedClassNameFalse("org.apache.commons.collections4.functors.InstantiateTransformer");
+ }
+
+ @Test
+ public void isAllowedClassNameGroovyConvertedClosureFalse() {
+ assertIsAllowedClassNameFalse("org.codehaus.groovy.runtime.ConvertedClosure");
+ }
+
+ @Test
+ public void isAllowedClassNameGroovyMethodClosureFalse() {
+ assertIsAllowedClassNameFalse("org.codehaus.groovy.runtime.MethodClosure");
+ }
+
+ @Test
+ public void isAllowedClassNameSpringObjectFactoryFalse() {
+ assertIsAllowedClassNameFalse("org.springframework.beans.factory.ObjectFactory");
+ }
+
+ @Test
+ public void isAllowedClassNameCalanTemplatesImplFalse() {
+ assertIsAllowedClassNameFalse("com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl");
+ }
+
+ @Test
+ public void isAllowedClassNameCalanTemplatesImplArrayFalse() {
+ assertIsAllowedClassNameFalse("[Lcom.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl");
+ }
+
+ @Test
+ public void isAllowedClassNameJavaRmiRegistryFalse() {
+ assertIsAllowedClassNameFalse("java.rmi.registry.Registry");
+ }
+
+ @Test
+ public void isAllowedClassNameJavaRmiServerRemoteObjectInvocationHandlerFalse() {
+ assertIsAllowedClassNameFalse("java.rmi.server.RemoteObjectInvocationHandler");
+ }
+
+ @Test
+ public void isAllowedClassNameJavaxXmlTransformTemplatesFalse() {
+ assertIsAllowedClassNameFalse("javax.xml.transform.Templates");
+ }
+
+ @Test
+ public void isAllowedClassNameJavaxManagementMBeanServerInvocationHandlerFalse() {
+ assertIsAllowedClassNameFalse("javax.management.MBeanServerInvocationHandler");
+ }
+
+ private static void assertIsAllowedClassNameTrue(final String className) {
+ assertTrue(DefaultHttpCacheEntrySerializer.RestrictedObjectInputStream.isAllowedClassName(className));
+ }
+
+ private static void assertIsAllowedClassNameFalse(final String className) {
+ assertFalse(DefaultHttpCacheEntrySerializer.RestrictedObjectInputStream.isAllowedClassName(className));
}
@Test(expected = HttpCacheEntrySerializationException.class)
- public void allowClassesToBeDeserializedByRegex() throws IOException {
- impl = new DefaultHttpCacheEntrySerializer(
- Pattern.compile(("^com\\.sun\\.rowset\\.(.*)")),
- Pattern.compile("^javax\\.sql\\.rowset\\.BaseRowSet$"));
- readVerify(serializeProhibitedObject());
+ public void throwExceptionIfUnsafeDeserialization() throws IOException {
+ impl.readFrom(new ByteArrayInputStream(serializeProhibitedObject()));
}
private byte[] serializeProhibitedObject() throws IOException {
@@ -105,11 +262,7 @@ public class TestHttpCacheEntrySerializers {
return baos.toByteArray();
}
- private void readVerify(final byte[] data) throws IOException {
- impl.readFrom(new ByteArrayInputStream(data));
- }
-
- public void readWriteVerify(final HttpCacheEntry writeEntry) throws IOException {
+ private void readWriteVerify(final HttpCacheEntry writeEntry) throws IOException {
// write the entry
final ByteArrayOutputStream out = new ByteArrayOutputStream();
impl.writeTo(writeEntry, out);
=====================================
httpclient-osgi/pom.xml
=====================================
@@ -28,7 +28,7 @@
<parent>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcomponents-client</artifactId>
- <version>4.5.10</version>
+ <version>4.5.11</version>
</parent>
<artifactId>httpclient-osgi</artifactId>
<name>Apache HttpClient OSGi bundle</name>
=====================================
httpclient-win/pom.xml
=====================================
@@ -28,7 +28,7 @@
<parent>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcomponents-client</artifactId>
- <version>4.5.10</version>
+ <version>4.5.11</version>
</parent>
<artifactId>httpclient-win</artifactId>
<name>Apache HttpClient Windows features</name>
=====================================
httpclient/pom.xml
=====================================
@@ -28,7 +28,7 @@
<parent>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcomponents-client</artifactId>
- <version>4.5.10</version>
+ <version>4.5.11</version>
</parent>
<artifactId>httpclient</artifactId>
<name>Apache HttpClient</name>
=====================================
httpclient/src/main/java/org/apache/http/client/utils/URIBuilder.java
=====================================
@@ -34,6 +34,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+
import org.apache.http.Consts;
import org.apache.http.NameValuePair;
import org.apache.http.conn.util.InetAddressUtils;
@@ -78,8 +79,7 @@ public class URIBuilder {
* @throws URISyntaxException if the input is not a valid URI
*/
public URIBuilder(final String string) throws URISyntaxException {
- super();
- digestURI(new URI(string));
+ this(new URI(string), null);
}
/**
@@ -87,7 +87,26 @@ public class URIBuilder {
* @param uri
*/
public URIBuilder(final URI uri) {
+ this(uri, null);
+ }
+
+ /**
+ * Construct an instance from the string which must be a valid URI.
+ *
+ * @param string a valid URI in string form
+ * @throws URISyntaxException if the input is not a valid URI
+ */
+ public URIBuilder(final String string, final Charset charset) throws URISyntaxException {
+ this(new URI(string), charset);
+ }
+
+ /**
+ * Construct an instance from the provided URI.
+ * @param uri
+ */
+ public URIBuilder(final URI uri, final Charset charset) {
super();
+ setCharset(charset);
digestURI(uri);
}
@@ -497,7 +516,7 @@ public class URIBuilder {
* @since 4.3
*/
public boolean isOpaque() {
- return isPathEmpty();
+ return this.pathSegments == null && this.encodedPath == null;
}
public String getScheme() {
=====================================
httpclient/src/main/java/org/apache/http/conn/ssl/DefaultHostnameVerifier.java
=====================================
@@ -36,7 +36,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
-import java.util.Locale;
import java.util.NoSuchElementException;
import javax.naming.InvalidNameException;
@@ -55,6 +54,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.annotation.Contract;
import org.apache.http.annotation.ThreadingBehavior;
+import org.apache.http.conn.util.DnsUtils;
import org.apache.http.conn.util.DomainType;
import org.apache.http.conn.util.InetAddressUtils;
import org.apache.http.conn.util.PublicSuffixMatcher;
@@ -164,12 +164,12 @@ public final class DefaultHostnameVerifier implements HostnameVerifier {
static void matchDNSName(final String host, final List<SubjectName> subjectAlts,
final PublicSuffixMatcher publicSuffixMatcher) throws SSLException {
- final String normalizedHost = host.toLowerCase(Locale.ROOT);
+ final String normalizedHost = DnsUtils.normalize(host);
for (int i = 0; i < subjectAlts.size(); i++) {
final SubjectName subjectAlt = subjectAlts.get(i);
if (subjectAlt.getType() == SubjectName.DNS) {
- final String normalizedSubjectAlt = subjectAlt.getValue().toLowerCase(Locale.ROOT);
- if (matchIdentityStrict(normalizedHost, normalizedSubjectAlt, publicSuffixMatcher)) {
+ final String normalizedSubjectAlt = DnsUtils.normalize(subjectAlt.getValue());
+ if (matchIdentityStrict(normalizedHost, normalizedSubjectAlt, publicSuffixMatcher, DomainType.ICANN)) {
return;
}
}
@@ -180,9 +180,9 @@ public final class DefaultHostnameVerifier implements HostnameVerifier {
static void matchCN(final String host, final String cn,
final PublicSuffixMatcher publicSuffixMatcher) throws SSLException {
- final String normalizedHost = host.toLowerCase(Locale.ROOT);
- final String normalizedCn = cn.toLowerCase(Locale.ROOT);
- if (!matchIdentityStrict(normalizedHost, normalizedCn, publicSuffixMatcher)) {
+ final String normalizedHost = DnsUtils.normalize(host);
+ final String normalizedCn = DnsUtils.normalize(cn);
+ if (!matchIdentityStrict(normalizedHost, normalizedCn, publicSuffixMatcher, DomainType.ICANN)) {
throw new SSLPeerUnverifiedException("Certificate for <" + host + "> doesn't match " +
"common name of the certificate subject: " + cn);
}
@@ -198,9 +198,10 @@ public final class DefaultHostnameVerifier implements HostnameVerifier {
private static boolean matchIdentity(final String host, final String identity,
final PublicSuffixMatcher publicSuffixMatcher,
+ final DomainType domainType,
final boolean strict) {
if (publicSuffixMatcher != null && host.contains(".")) {
- if (!matchDomainRoot(host, publicSuffixMatcher.getDomainRoot(identity, DomainType.ICANN))) {
+ if (!matchDomainRoot(host, publicSuffixMatcher.getDomainRoot(identity, domainType))) {
return false;
}
}
@@ -235,20 +236,32 @@ public final class DefaultHostnameVerifier implements HostnameVerifier {
static boolean matchIdentity(final String host, final String identity,
final PublicSuffixMatcher publicSuffixMatcher) {
- return matchIdentity(host, identity, publicSuffixMatcher, false);
+ return matchIdentity(host, identity, publicSuffixMatcher, null, false);
}
static boolean matchIdentity(final String host, final String identity) {
- return matchIdentity(host, identity, null, false);
+ return matchIdentity(host, identity, null, null, false);
}
static boolean matchIdentityStrict(final String host, final String identity,
final PublicSuffixMatcher publicSuffixMatcher) {
- return matchIdentity(host, identity, publicSuffixMatcher, true);
+ return matchIdentity(host, identity, publicSuffixMatcher, null, true);
}
static boolean matchIdentityStrict(final String host, final String identity) {
- return matchIdentity(host, identity, null, true);
+ return matchIdentity(host, identity, null, null, true);
+ }
+
+ static boolean matchIdentity(final String host, final String identity,
+ final PublicSuffixMatcher publicSuffixMatcher,
+ final DomainType domainType) {
+ return matchIdentity(host, identity, publicSuffixMatcher, domainType, false);
+ }
+
+ static boolean matchIdentityStrict(final String host, final String identity,
+ final PublicSuffixMatcher publicSuffixMatcher,
+ final DomainType domainType) {
+ return matchIdentity(host, identity, publicSuffixMatcher, domainType, true);
}
static String extractCN(final String subjectPrincipal) throws SSLException {
=====================================
httpclient/src/main/java/org/apache/http/conn/util/DnsUtils.java
=====================================
@@ -0,0 +1,76 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.conn.util;
+
+/**
+ * A collection of utilities relating to Domain Name System.
+ *
+ * @since 4.5
+ */
+public class DnsUtils {
+
+ private DnsUtils() {
+ }
+
+ private static boolean isUpper(final char c) {
+ return c >= 'A' && c <= 'Z';
+ }
+
+ public static String normalize(final String s) {
+ if (s == null) {
+ return null;
+ }
+ int pos = 0;
+ int remaining = s.length();
+ while (remaining > 0) {
+ if (isUpper(s.charAt(pos))) {
+ break;
+ }
+ pos++;
+ remaining--;
+ }
+ if (remaining > 0) {
+ final StringBuilder buf = new StringBuilder(s.length());
+ buf.append(s, 0, pos);
+ while (remaining > 0) {
+ final char c = s.charAt(pos);
+ if (isUpper(c)) {
+ buf.append((char) (c + ('a' - 'A')));
+ } else {
+ buf.append(c);
+ }
+ pos++;
+ remaining--;
+ }
+ return buf.toString();
+ } else {
+ return s;
+ }
+ }
+
+}
=====================================
httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcher.java
=====================================
@@ -29,7 +29,6 @@ package org.apache.http.conn.util;
import java.net.IDN;
import java.util.Collection;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -142,7 +141,7 @@ public final class PublicSuffixMatcher {
if (domain.startsWith(".")) {
return null;
}
- final String normalized = domain.toLowerCase(Locale.ROOT);
+ final String normalized = DnsUtils.normalize(domain);
String segment = normalized;
String result = null;
while (segment != null) {
@@ -166,9 +165,15 @@ public final class PublicSuffixMatcher {
result = segment;
segment = nextSegment;
}
- return result;
- }
+ // If no expectations then this result is good.
+ if (expectedType == null || expectedType == DomainType.UNKNOWN) {
+ return result;
+ }
+
+ // If we did have expectations apparently there was no match
+ return null;
+ }
/**
* Tests whether the given domain matches any of entry from the public suffix list.
*/
=====================================
httpclient/src/main/java/org/apache/http/conn/util/PublicSuffixMatcherLoader.java
=====================================
@@ -95,7 +95,7 @@ public final class PublicSuffixMatcherLoader {
}
}
} else {
- DEFAULT_INSTANCE = new PublicSuffixMatcher(Arrays.asList("com"), null);
+ DEFAULT_INSTANCE = new PublicSuffixMatcher(DomainType.ICANN, Arrays.asList("com"), null);
}
}
}
=====================================
httpclient/src/main/java/org/apache/http/impl/client/DefaultBackoffStrategy.java
=====================================
@@ -49,7 +49,8 @@ public class DefaultBackoffStrategy implements ConnectionBackoffStrategy {
@Override
public boolean shouldBackoff(final HttpResponse resp) {
- return resp.getStatusLine().getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE;
+ return resp.getStatusLine().getStatusCode() == 429 ||
+ resp.getStatusLine().getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE;
}
}
=====================================
httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
=====================================
@@ -362,7 +362,19 @@ public class BasicHttpClientConnectionManager implements HttpClientConnectionMan
@Override
public void shutdown() {
- close();
+ if (this.isShutdown.compareAndSet(false, true)) {
+ if (this.conn != null) {
+ this.log.debug("Shutting down connection");
+ try {
+ this.conn.shutdown();
+ } catch (final IOException iox) {
+ if (this.log.isDebugEnabled()) {
+ this.log.debug("I/O exception shutting down connection", iox);
+ }
+ }
+ this.conn = null;
+ }
+ }
}
}
=====================================
httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
=====================================
@@ -63,6 +63,7 @@ import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.pool.ConnFactory;
import org.apache.http.pool.ConnPoolControl;
+import org.apache.http.pool.PoolEntry;
import org.apache.http.pool.PoolEntryCallback;
import org.apache.http.pool.PoolStats;
import org.apache.http.protocol.HttpContext;
@@ -227,7 +228,7 @@ public class PoolingHttpClientConnectionManager
final StringBuilder buf = new StringBuilder();
final PoolStats totals = this.pool.getTotalStats();
final PoolStats stats = this.pool.getStats(route);
- buf.append("[total kept alive: ").append(totals.getAvailable()).append("; ");
+ buf.append("[total available: ").append(totals.getAvailable()).append("; ");
buf.append("route allocated: ").append(stats.getLeased() + stats.getAvailable());
buf.append(" of ").append(stats.getMax()).append("; ");
buf.append("total allocated: ").append(totals.getLeased() + totals.getAvailable());
@@ -265,6 +266,7 @@ public class PoolingHttpClientConnectionManager
if (this.log.isDebugEnabled()) {
this.log.debug("Connection request: " + format(route, state) + formatStats(route));
}
+ Asserts.check(!this.isShutDown.get(), "Connection pool shut down");
final Future<CPoolEntry> future = this.pool.lease(route, state, null);
return new ConnectionRequest() {
@@ -408,6 +410,23 @@ public class PoolingHttpClientConnectionManager
if (this.isShutDown.compareAndSet(false, true)) {
this.log.debug("Connection manager is shutting down");
try {
+ this.pool.enumLeased(new PoolEntryCallback<HttpRoute, ManagedHttpClientConnection>() {
+
+ @Override
+ public void process(final PoolEntry<HttpRoute, ManagedHttpClientConnection> entry) {
+ final ManagedHttpClientConnection connection = entry.getConnection();
+ if (connection != null) {
+ try {
+ connection.shutdown();
+ } catch (final IOException iox) {
+ if (log.isDebugEnabled()) {
+ log.debug("I/O exception shutting down connection", iox);
+ }
+ }
+ }
+ }
+
+ });
this.pool.shutdown();
} catch (final IOException ex) {
this.log.debug("I/O exception shutting down connection manager", ex);
=====================================
httpclient/src/main/resources/mozilla/public-suffix-list.txt
=====================================
@@ -241,7 +241,7 @@ wa.au
// 3LDs
act.edu.au
catholic.edu.au
-eq.edu.au
+// eq.edu.au - Removed at the request of the Queensland Department of Education
nsw.edu.au
nt.edu.au
qld.edu.au
@@ -1368,7 +1368,7 @@ it
gov.it
edu.it
// Reserved geo-names (regions and provinces):
-// http://www.nic.it/sites/default/files/docs/Regulation_assignation_v7.1.pdf
+// https://www.nic.it/sites/default/files/archivio/docs/Regulation_assignation_v7.1.pdf
// Regions
abr.it
abruzzo.it
@@ -5886,14 +5886,9 @@ gov.rs
in.rs
org.rs
-// ru : https://cctld.ru/en/domains/domens_ru/reserved/
+// ru : https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf
+// Submitted by George Georgievsky <gug at cctld.ru>
ru
-ac.ru
-edu.ru
-gov.ru
-int.ru
-mil.ru
-test.ru
// rw : https://www.ricta.org.rw/sites/default/files/resources/registry_registrar_contract_0.pdf
rw
@@ -6038,9 +6033,12 @@ org.sn
perso.sn
univ.sn
-// so : http://www.soregistry.com/
+// so : http://sonic.so/policies/
so
com.so
+edu.so
+gov.so
+me.so
net.so
org.so
@@ -6955,7 +6953,8 @@ yt
ак.срб
// xn--p1ai ("rf", Russian-Cyrillic) : RU
-// http://www.cctld.ru/en/docs/rulesrf.php
+// https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf
+// Submitted by George Georgievsky <gug at cctld.ru>
рф
// xn--wgbl6a ("Qatar", Arabic) : QA
@@ -7075,7 +7074,7 @@ org.zw
// newGTLDs
-// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2019-09-26T16:43:02Z
+// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2020-01-06T17:33:31Z
// This list is auto-generated, don't edit it manually.
// aaa : 2015-02-26 American Automobile Association, Inc.
aaa
@@ -7197,6 +7196,9 @@ alsace
// alstom : 2015-07-30 ALSTOM
alstom
+// amazon : 2019-12-19 Amazon EU S.à r.l.
+amazon
+
// americanexpress : 2015-07-31 American Express Travel Related Services Company, Inc.
americanexpress
@@ -7296,7 +7298,7 @@ auto
// autos : 2014-01-09 DERAutos, LLC
autos
-// avianca : 2015-01-08 Aerovias del Continente Americano S.A. Avianca
+// avianca : 2015-01-08 Avianca Holdings S.A.
avianca
// aws : 2015-06-25 Amazon Registry Services, Inc.
@@ -7587,9 +7589,6 @@ careers
// cars : 2014-11-13 Cars Registry Limited
cars
-// cartier : 2014-06-23 Richemont DNS Inc.
-cartier
-
// casa : 2013-11-21 Minds + Machines Group Limited
casa
@@ -7668,9 +7667,6 @@ christmas
// chrome : 2014-07-24 Charleston Road Registry Inc.
chrome
-// chrysler : 2015-07-30 FCA US LLC.
-chrysler
-
// church : 2014-02-06 Binky Moon, LLC
church
@@ -7950,9 +7946,6 @@ docs
// doctor : 2016-06-02 Binky Moon, LLC
doctor
-// dodge : 2015-07-30 FCA US LLC.
-dodge
-
// dog : 2014-12-04 Binky Moon, LLC
dog
@@ -8058,9 +8051,6 @@ eus
// events : 2013-12-05 Binky Moon, LLC
events
-// everbank : 2014-05-15 EverBank
-everbank
-
// exchange : 2014-03-06 Binky Moon, LLC
exchange
@@ -8334,7 +8324,7 @@ gmail
// gmbh : 2016-01-29 Binky Moon, LLC
gmbh
-// gmo : 2014-01-09 GMO Internet Pte. Ltd.
+// gmo : 2014-01-09 GMO Internet, Inc.
gmo
// gmx : 2014-04-24 1&1 Mail & Media GmbH
@@ -8745,9 +8735,6 @@ kyoto
// lacaixa : 2014-01-09 Fundación Bancaria Caixa d’Estalvis i Pensions de Barcelona, “la Caixa”
lacaixa
-// ladbrokes : 2015-08-06 LADBROKES INTERNATIONAL PLC
-ladbrokes
-
// lamborghini : 2015-06-04 Automobili Lamborghini S.p.A.
lamborghini
@@ -8760,9 +8747,6 @@ lancaster
// lancia : 2015-07-31 Fiat Chrysler Automobiles N.V.
lancia
-// lancome : 2015-07-23 L'Oréal
-lancome
-
// land : 2013-09-10 Binky Moon, LLC
land
@@ -8814,9 +8798,6 @@ lexus
// lgbt : 2014-05-08 Afilias Limited
lgbt
-// liaison : 2014-10-02 Liaison Technologies, Incorporated
-liaison
-
// lidl : 2014-09-18 Schwarz Domains und Services GmbH & Co. KG
lidl
@@ -9060,9 +9041,6 @@ money
// monster : 2015-09-11 XYZ.COM LLC
monster
-// mopar : 2015-07-30 FCA US LLC.
-mopar
-
// mormon : 2013-12-05 IRI Domain Management, LLC ("Applicant")
mormon
@@ -9084,9 +9062,6 @@ mov
// movie : 2015-02-05 Binky Moon, LLC
movie
-// movistar : 2014-10-16 Telefónica S.A.
-movistar
-
// msd : 2015-07-23 MSD Registry Holdings, Inc.
msd
@@ -9345,9 +9320,6 @@ photos
// physio : 2014-05-01 PhysBiz Pty Ltd
physio
-// piaget : 2014-10-16 Richemont DNS Inc.
-piaget
-
// pics : 2013-11-14 Uniregistry, Corp.
pics
@@ -9459,7 +9431,7 @@ qpon
// quebec : 2013-12-19 PointQuébec Inc
quebec
-// quest : 2015-03-26 Quest ION Limited
+// quest : 2015-03-26 XYZ.COM LLC
quest
// qvc : 2015-07-30 QVC, Inc.
@@ -9858,9 +9830,6 @@ spreadbetting
// srl : 2015-05-07 InterNetX, Corp
srl
-// srt : 2015-07-30 FCA US LLC.
-srt
-
// stada : 2014-11-13 STADA Arzneimittel AG
stada
@@ -9987,9 +9956,6 @@ tech
// technology : 2013-09-13 Binky Moon, LLC
technology
-// telefonica : 2014-10-16 Telefónica S.A.
-telefonica
-
// temasek : 2014-08-07 Temasek Holdings (Private) Limited
temasek
@@ -10122,9 +10088,6 @@ ubank
// ubs : 2014-12-11 UBS AG
ubs
-// uconnect : 2015-07-30 FCA US LLC.
-uconnect
-
// unicom : 2015-10-15 China United Network Communications Corporation Limited
unicom
@@ -10245,9 +10208,6 @@ wang
// wanggou : 2014-12-18 Amazon Registry Services, Inc.
wanggou
-// warman : 2015-06-18 Weir Group IP Limited
-warman
-
// watch : 2013-11-14 Binky Moon, LLC
watch
@@ -10362,7 +10322,7 @@ xin
// xn--3bst00m : 2013-09-13 Eagle Horizon Limited
集团
-// xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED
+// xn--3ds443g : 2013-09-08 TLD REGISTRY LIMITED OY
在线
// xn--3oq18vl8pn36a : 2015-07-02 Volkswagen (China) Investment Co., Ltd.
@@ -10437,10 +10397,13 @@ xin
// xn--cck2b3b : 2015-02-26 Amazon Registry Services, Inc.
ストア
+// xn--cckwcxetd : 2019-12-19 Amazon EU S.à r.l.
+アマゾン
+
// xn--cg4bki : 2013-09-27 SAMSUNG SDS CO., LTD
삼성
-// xn--czr694b : 2014-01-16 Dot Trademark TLD Holding Company Limited
+// xn--czr694b : 2014-01-16 Internet DotTrademark Organisation Limited
商标
// xn--czrs0t : 2013-12-19 Binky Moon, LLC
@@ -10467,7 +10430,7 @@ xin
// xn--fhbei : 2015-01-15 VeriSign Sarl
كوم
-// xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED
+// xn--fiq228c5hs : 2013-09-08 TLD REGISTRY LIMITED OY
中文网
// xn--fiq64b : 2013-10-14 CITIC Group Corporation
@@ -10497,7 +10460,7 @@ xin
// xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry
संगठन
-// xn--imr513n : 2014-12-11 Dot Trademark TLD Holding Company Limited
+// xn--imr513n : 2014-12-11 Internet DotTrademark Organisation Limited
餐厅
// xn--io0a7i : 2013-11-14 China Internet Network Information Center (CNNIC)
@@ -10506,6 +10469,9 @@ xin
// xn--j1aef : 2015-01-15 VeriSign Sarl
ком
+// xn--jlq480n2rg : 2019-12-19 Amazon EU S.à r.l.
+亚马逊
+
// xn--jlq61u9w7b : 2015-01-08 Nokia Corporation
诺基亚
@@ -10566,7 +10532,7 @@ xin
// xn--nyqy26a : 2014-11-07 Stable Tone Limited
健康
-// xn--otu796d : 2017-08-06 Dot Trademark TLD Holding Company Limited
+// xn--otu796d : 2017-08-06 Internet DotTrademark Organisation Limited
招聘
// xn--p1acf : 2013-12-12 Rusnames Limited
@@ -10641,7 +10607,7 @@ yahoo
// yamaxun : 2014-12-18 Amazon Registry Services, Inc.
yamaxun
-// yandex : 2014-04-10 YANDEX, LLC
+// yandex : 2014-04-10 Yandex Europe B.V.
yandex
// yodobashi : 2014-11-20 YODOBASHI CAMERA CO.,LTD.
@@ -10691,6 +10657,12 @@ cc.ua
inf.ua
ltd.ua
+// Adobe : https://www.adobe.com/
+// Submitted by Ian Boston <boston at adobe.com>
+adobeaemcloud.com
+adobeaemcloud.net
+*.dev.adobeaemcloud.com
+
// Agnat sp. z o.o. : https://domena.pl
// Submitted by Przemyslaw Plewa <it-admin at domena.pl>
beep.pl
@@ -10808,6 +10780,10 @@ s3-website.eu-west-2.amazonaws.com
s3-website.eu-west-3.amazonaws.com
s3-website.us-east-2.amazonaws.com
+// Amsterdam Wireless: https://www.amsterdamwireless.nl/
+// Submitted by Imre Jonk <hostmaster at amsterdamwireless.nl>
+amsw.nl
+
// Amune : https://amune.org/
// Submitted by Team Amune <cert at amune.org>
t3l3p0rt.net
@@ -10842,12 +10818,6 @@ sweetpepper.org
// Submitted by Vincent Tseng <vincenttseng at asustor.com>
myasustor.com
-// Automattic Inc. : https://automattic.com/
-// Submitted by Alex Concha <alex.concha at automattic.com>
-go-vip.co
-go-vip.net
-wpcomstaging.com
-
// AVM : https://avm.de
// Submitted by Andreas Weise <a.weise at avm.de>
myfritz.net
@@ -11082,6 +11052,15 @@ co.no
webhosting.be
hosting-cluster.nl
+// Coordination Center for TLD RU and XN--P1AI : https://cctld.ru/en/domains/domens_ru/reserved/
+// Submitted by George Georgievsky <gug at cctld.ru>
+ac.ru
+edu.ru
+gov.ru
+int.ru
+mil.ru
+test.ru
+
// COSIMO GmbH : http://www.cosimo.de
// Submitted by Rene Marticke <rmarticke at cosimo.de>
dyn.cosidns.de
@@ -11106,6 +11085,14 @@ realm.cz
// Submitted by Jonathan Rudenberg <jonathan at cupcake.io>
cupcake.is
+// Customer OCI - Oracle Dyn https://cloud.oracle.com/home https://dyn.com/dns/
+// Submitted by Gregory Drake <support at dyn.com>
+// Note: This is intended to also include customer-oci.com due to wildcards implicitly including the current label
+*.customer-oci.com
+*.oci.customer-oci.com
+*.ocp.customer-oci.com
+*.ocs.customer-oci.com
+
// cyon GmbH : https://www.cyon.ch/
// Submitted by Dominic Luechinger <dol at cyon.ch>
cyon.link
@@ -11138,6 +11125,14 @@ store.dk
*.dapps.earth
*.bzz.dapps.earth
+// Dark, Inc. : https://darklang.com
+// Submitted by Paul Biggar <ops at darklang.com>
+builtwithdark.com
+
+// Datawire, Inc : https://www.datawire.io
+// Submitted by Richard Li <secalert at datawire.io>
+edgestack.me
+
// Debian : https://www.debian.org/
// Submitted by Peter Palfrader / Debian Sysadmin Team <dsa-publicsuffixlist at debian.org>
debian.net
@@ -11511,6 +11506,10 @@ dynv6.net
// Submitted by Vladimir Dudr <info at e4you.cz>
e4.cz
+// En root‽ : https://en-root.org
+// Submitted by Emmanuel Raviart <emmanuel at raviart.com>
+en-root.fr
+
// Enalean SAS: https://www.enalean.com
// Submitted by Thomas Cottier <thomas.cottier at enalean.com>
mytuleap.com
@@ -11740,6 +11739,10 @@ firebaseapp.com
flynnhub.com
flynnhosting.net
+// Frederik Braun https://frederik-braun.com
+// Submitted by Frederik Braun <fb at frederik-braun.com>
+0e.vc
+
// Freebox : http://www.freebox.fr
// Submitted by Romain Fliedel <rfliedel at freebox.fr>
freebox-os.com
@@ -11773,8 +11776,9 @@ service.gov.uk
gehirn.ne.jp
usercontent.jp
-// Gentlent, Limited : https://www.gentlent.com
-// Submitted by Tom Klein <tklein at gentlent.com>
+// Gentlent, Inc. : https://www.gentlent.com
+// Submitted by Tom Klein <tom at gentlent.com>
+gentapps.com
lab.ms
// GitHub, Inc.
@@ -11819,6 +11823,7 @@ a.run.app
web.app
*.0emm.com
appspot.com
+*.r.appspot.com
blogspot.ae
blogspot.al
blogspot.am
@@ -11903,6 +11908,10 @@ publishproxy.com
withgoogle.com
withyoutube.com
+// Group 53, LLC : https://www.group53.com
+// Submitted by Tyler Todd <noc at nova53.net>
+awsmppl.com
+
// Hakaran group: http://hakaran.cz
// Submited by Arseniy Sokolov <security at hakaran.cz>
fin.ci
@@ -11952,6 +11961,7 @@ col.ng
firm.ng
gen.ng
ltd.ng
+ngo.ng
ng.school
sch.so
@@ -12072,6 +12082,10 @@ uni5.net
// Submitted by Roy Keene <rkeene at knightpoint.com>
knightpoint.systems
+// KUROKU LTD : https://kuroku.ltd/
+// Submitted by DisposaBoy <security at oya.to>
+oya.to
+
// .KRD : http://nic.krd/data/krd/Registration%20Policy.pdf
co.krd
edu.krd
@@ -12466,6 +12480,10 @@ nom.uy
nom.vc
nom.vg
+// Observable, Inc. : https://observablehq.com
+// Submitted by Mike Bostock <dns at observablehq.com>
+static.observableusercontent.com
+
// Octopodal Solutions, LLC. : https://ulterius.io/
// Submitted by Andrew Sampson <andrew at ulterius.io>
cya.gg
@@ -12486,6 +12504,10 @@ opencraft.hosting
// Submitted by Yngve Pettersen <yngve at opera.com>
operaunite.com
+// Oursky Limited : https://skygear.io/
+// Submited by Skygear Developer <hello at skygear.io>
+skygearapp.com
+
// OutSystems
// Submitted by Duarte Santos <domain-admin at outsystemscloud.com>
outsystemscloud.com
@@ -12528,6 +12550,10 @@ gotpantheon.com
// Submitted by Steve Leung <steveleung at peplink.com>
mypep.link
+// Perspecta : https://perspecta.com/
+// Submitted by Kenneth Van Alstyne <kvanalstyne at perspecta.com>
+perspecta.cloud
+
// Planet-Work : https://www.planet-work.com/
// Submitted by Frédéric VANNIÈRE <f.vanniere at planet-work.com>
on-web.fr
@@ -12590,6 +12616,11 @@ ras.ru
// Submitted by Daniel Dent (https://www.danieldent.com/)
qa2.com
+// QCX
+// Submitted by Cassandra Beelen <cassandra at beelen.one>
+qcx.io
+*.sys.qcx.io
+
// QNAP System Inc : https://www.qnap.com
// Submitted by Nick Chang <nickchang at qnap.com>
dev-myqnapcloud.com
@@ -12612,6 +12643,7 @@ rackmaze.net
// Rancher Labs, Inc : https://rancher.com
// Submitted by Vincent Fiduccia <domains at rancher.com>
+*.on-k3s.io
*.on-rancher.cloud
*.on-rio.io
@@ -12665,6 +12697,10 @@ logoip.com
// Submitted by Hanno Böck <hanno at schokokeks.org>
schokokeks.net
+// Scottish Government: https://www.gov.scot
+// Submitted by Martin Ellis <martin.ellis at gov.scot>
+gov.scot
+
// Scry Security : http://www.scrysec.com
// Submitted by Shante Adam <shante at skyhat.io>
scrysec.com
@@ -12926,6 +12962,10 @@ v-info.info
// Submitted by Nathan van Bakel <info at voorloper.com>
voorloper.cloud
+// V.UA Domain Administrator : https://domain.v.ua/
+// Submitted by Serhii Rostilo <sergey at rostilo.kiev.ua>
+v.ua
+
// Waffle Computer Inc., Ltd. : https://docs.waffleinfo.com
// Submitted by Masayuki Note <masa at blade.wafflecell.com>
wafflecell.com
=====================================
httpclient/src/test/java/org/apache/http/client/utils/TestURIBuilder.java
=====================================
@@ -348,4 +348,11 @@ public class TestURIBuilder {
Assert.assertThat(uri, CoreMatchers.equalTo(URI.create("ftp:/blah")));
}
+ @Test
+ public void testOpaque() throws Exception {
+ final URIBuilder uriBuilder = new URIBuilder("http://host.com");
+ final URI uri = uriBuilder.build();
+ Assert.assertThat(uriBuilder.isOpaque(), CoreMatchers.equalTo(uri.isOpaque()));
+ }
+
}
=====================================
httpclient/src/test/java/org/apache/http/conn/ssl/TestDefaultHostnameVerifier.java
=====================================
@@ -28,14 +28,20 @@
package org.apache.http.conn.ssl;
import java.io.ByteArrayInputStream;
+import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Arrays;
+import java.util.List;
import javax.net.ssl.SSLException;
import org.apache.http.conn.util.DomainType;
+import org.apache.http.conn.util.PublicSuffixList;
+import org.apache.http.conn.util.PublicSuffixListParser;
import org.apache.http.conn.util.PublicSuffixMatcher;
import org.junit.Assert;
import org.junit.Before;
@@ -50,10 +56,22 @@ public class TestDefaultHostnameVerifier {
private PublicSuffixMatcher publicSuffixMatcher;
private DefaultHostnameVerifier implWithPublicSuffixCheck;
+ private static final String PUBLIC_SUFFIX_MATCHER_SOURCE_FILE = "suffixlistmatcher.txt";
+
+ private static final Charset UTF_8 = Charset.forName("UTF-8");
+
@Before
- public void setup() {
+ public void setup() throws IOException {
impl = new DefaultHostnameVerifier();
- publicSuffixMatcher = new PublicSuffixMatcher(DomainType.ICANN, Arrays.asList("com", "co.jp", "gov.uk"), null);
+
+ // Load the test PublicSuffixMatcher
+ final ClassLoader classLoader = getClass().getClassLoader();
+ final InputStream in = classLoader.getResourceAsStream(PUBLIC_SUFFIX_MATCHER_SOURCE_FILE);
+ Assert.assertNotNull(in);
+ final List<PublicSuffixList> lists = new PublicSuffixListParser().parseByType(
+ new InputStreamReader(in, UTF_8));
+ publicSuffixMatcher = new PublicSuffixMatcher(lists);
+
implWithPublicSuffixCheck = new DefaultHostnameVerifier(publicSuffixMatcher);
}
@@ -275,18 +293,88 @@ public class TestDefaultHostnameVerifier {
Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict("mail.a.b.c.com", "m*.a.b.c.com"));
}
+
@Test
- public void testHTTPCLIENT_1997() {
- Assert.assertTrue(DefaultHostnameVerifier.matchIdentity(
- "service.apps.dev.b.cloud.a", "*.apps.dev.b.cloud.a"));
- Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict(
- "service.apps.dev.b.cloud.a", "*.apps.dev.b.cloud.a"));
- Assert.assertTrue(DefaultHostnameVerifier.matchIdentity(
- "service.apps.dev.b.cloud.a", "*.apps.dev.b.cloud.a", publicSuffixMatcher));
- Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict(
- "service.apps.dev.b.cloud.a", "*.apps.dev.b.cloud.a", publicSuffixMatcher));
+ public void testHTTPCLIENT_1997_ANY() { // Only True on all domains
+ String domain;
+ // Unknown
+ domain = "dev.b.cloud.a";
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher));
+
+ // ICANN
+ domain = "dev.b.cloud.com";
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher));
+
+ // PRIVATE
+ domain = "dev.b.cloud.lan";
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher));
}
+ @Test
+ public void testHTTPCLIENT_1997_ICANN() { // Only True on ICANN domains
+ String domain;
+ // Unknown
+ domain = "dev.b.cloud.a";
+ Assert.assertFalse(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.ICANN));
+ Assert.assertFalse(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.ICANN));
+
+ // ICANN
+ domain = "dev.b.cloud.com";
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.ICANN));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.ICANN));
+
+ // PRIVATE
+ domain = "dev.b.cloud.lan";
+ Assert.assertFalse(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.ICANN));
+ Assert.assertFalse(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.ICANN));
+ }
+
+ @Test
+ public void testHTTPCLIENT_1997_PRIVATE() { // Only True on PRIVATE domains
+ String domain;
+ // Unknown
+ domain = "dev.b.cloud.a";
+ Assert.assertFalse(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.PRIVATE));
+ Assert.assertFalse(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.PRIVATE));
+
+ // ICANN
+ domain = "dev.b.cloud.com";
+ Assert.assertFalse(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.PRIVATE));
+ Assert.assertFalse(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.PRIVATE));
+
+ // PRIVATE
+ domain = "dev.b.cloud.lan";
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.PRIVATE));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.PRIVATE));
+ }
+
+ @Test
+ public void testHTTPCLIENT_1997_UNKNOWN() { // Only True on all domains (same as ANY)
+ String domain;
+ // Unknown
+ domain = "dev.b.cloud.a";
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.UNKNOWN));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.UNKNOWN));
+
+ // ICANN
+ domain = "dev.b.cloud.com";
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.UNKNOWN));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.UNKNOWN));
+
+ // PRIVATE
+ domain = "dev.b.cloud.lan";
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentity( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.UNKNOWN));
+ Assert.assertTrue(DefaultHostnameVerifier.matchIdentityStrict( "service.apps." + domain, "*.apps." + domain, publicSuffixMatcher, DomainType.UNKNOWN));
+ }
@Test // Check compressed IPv6 hostname matching
public void testHTTPCLIENT_1316() throws Exception{
final String host1 = "2001:0db8:aaaa:bbbb:cccc:0:0:0001";
=====================================
httpclient/src/test/java/org/apache/http/conn/util/TesDnsUtils.java
=====================================
@@ -0,0 +1,51 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.conn.util;
+
+import org.hamcrest.CoreMatchers;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit tests for DnsUtils.
+ */
+public class TesDnsUtils {
+
+ @Test
+ public void testNormalize() {
+ Assert.assertThat(DnsUtils.normalize(null), CoreMatchers.equalTo(null));
+ Assert.assertThat(DnsUtils.normalize(""), CoreMatchers.equalTo(""));
+ Assert.assertThat(DnsUtils.normalize("blah"), CoreMatchers.equalTo("blah"));
+ Assert.assertThat(DnsUtils.normalize("BLAH"), CoreMatchers.equalTo("blah"));
+ Assert.assertThat(DnsUtils.normalize("blAh"), CoreMatchers.equalTo("blah"));
+ Assert.assertThat(DnsUtils.normalize("blaH"), CoreMatchers.equalTo("blah"));
+ Assert.assertThat(DnsUtils.normalize("blaH"), CoreMatchers.equalTo("blah"));
+ Assert.assertThat(DnsUtils.normalize("hac\u212A!!!"), CoreMatchers.equalTo("hac\u212A!!!"));
+ }
+
+}
=====================================
httpclient/src/test/java/org/apache/http/conn/util/TestPublicSuffixMatcher.java
=====================================
@@ -29,45 +29,47 @@ package org.apache.http.conn.util;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.List;
-import org.apache.http.Consts;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class TestPublicSuffixMatcher {
- private static final String SOURCE_FILE = "suffixlist.txt";
+ private static final String SOURCE_FILE = "suffixlistmatcher.txt";
private PublicSuffixMatcher matcher;
+ private static final Charset UTF_8 = Charset.forName("UTF-8");
+
@Before
public void setUp() throws Exception {
final ClassLoader classLoader = getClass().getClassLoader();
final InputStream in = classLoader.getResourceAsStream(SOURCE_FILE);
Assert.assertNotNull(in);
- final PublicSuffixList suffixList;
- try {
- final PublicSuffixListParser parser = new PublicSuffixListParser();
- suffixList = parser.parse(new InputStreamReader(in, Consts.UTF_8));
- } finally {
- in.close();
- }
- matcher = new PublicSuffixMatcher(suffixList.getRules(), suffixList.getExceptions());
+ final List<PublicSuffixList> lists = new PublicSuffixListParser().parseByType(
+ new InputStreamReader(in, UTF_8));
+ matcher = new PublicSuffixMatcher(lists);
}
@Test
- public void testGetDomainRoot() throws Exception {
+ public void testGetDomainRootAnyType() {
+ // Private
Assert.assertEquals("example.xx", matcher.getDomainRoot("example.XX"));
Assert.assertEquals("example.xx", matcher.getDomainRoot("www.example.XX"));
Assert.assertEquals("example.xx", matcher.getDomainRoot("www.blah.blah.example.XX"));
+ // Too short
Assert.assertEquals(null, matcher.getDomainRoot("xx"));
Assert.assertEquals(null, matcher.getDomainRoot("jp"));
Assert.assertEquals(null, matcher.getDomainRoot("ac.jp"));
Assert.assertEquals(null, matcher.getDomainRoot("any.tokyo.jp"));
+ // ICANN
Assert.assertEquals("metro.tokyo.jp", matcher.getDomainRoot("metro.tokyo.jp"));
Assert.assertEquals("blah.blah.tokyo.jp", matcher.getDomainRoot("blah.blah.tokyo.jp"));
Assert.assertEquals("blah.ac.jp", matcher.getDomainRoot("blah.blah.ac.jp"));
+ // Unknown
Assert.assertEquals("garbage", matcher.getDomainRoot("garbage"));
Assert.assertEquals("garbage", matcher.getDomainRoot("garbage.garbage"));
Assert.assertEquals("garbage", matcher.getDomainRoot("*.garbage.garbage"));
@@ -75,7 +77,52 @@ public class TestPublicSuffixMatcher {
}
@Test
- public void testMatch() throws Exception {
+ public void testGetDomainRootOnlyPRIVATE() {
+ // Private
+ Assert.assertEquals("example.xx", matcher.getDomainRoot("example.XX", DomainType.PRIVATE));
+ Assert.assertEquals("example.xx", matcher.getDomainRoot("www.example.XX", DomainType.PRIVATE));
+ Assert.assertEquals("example.xx", matcher.getDomainRoot("www.blah.blah.example.XX", DomainType.PRIVATE));
+ // Too short
+ Assert.assertEquals(null, matcher.getDomainRoot("xx", DomainType.PRIVATE));
+ Assert.assertEquals(null, matcher.getDomainRoot("jp", DomainType.PRIVATE));
+ Assert.assertEquals(null, matcher.getDomainRoot("ac.jp", DomainType.PRIVATE));
+ Assert.assertEquals(null, matcher.getDomainRoot("any.tokyo.jp", DomainType.PRIVATE));
+ // ICANN
+ Assert.assertEquals(null, matcher.getDomainRoot("metro.tokyo.jp", DomainType.PRIVATE));
+ Assert.assertEquals(null, matcher.getDomainRoot("blah.blah.tokyo.jp", DomainType.PRIVATE));
+ Assert.assertEquals(null, matcher.getDomainRoot("blah.blah.ac.jp", DomainType.PRIVATE));
+ // Unknown
+ Assert.assertEquals(null, matcher.getDomainRoot("garbage", DomainType.PRIVATE));
+ Assert.assertEquals(null, matcher.getDomainRoot("garbage.garbage", DomainType.PRIVATE));
+ Assert.assertEquals(null, matcher.getDomainRoot("*.garbage.garbage", DomainType.PRIVATE));
+ Assert.assertEquals(null, matcher.getDomainRoot("*.garbage.garbage.garbage", DomainType.PRIVATE));
+ }
+
+ @Test
+ public void testGetDomainRootOnlyICANN() {
+ // Private
+ Assert.assertEquals(null, matcher.getDomainRoot("example.XX", DomainType.ICANN));
+ Assert.assertEquals(null, matcher.getDomainRoot("www.example.XX", DomainType.ICANN));
+ Assert.assertEquals(null, matcher.getDomainRoot("www.blah.blah.example.XX", DomainType.ICANN));
+ // Too short
+ Assert.assertEquals(null, matcher.getDomainRoot("xx", DomainType.ICANN));
+ Assert.assertEquals(null, matcher.getDomainRoot("jp", DomainType.ICANN));
+ Assert.assertEquals(null, matcher.getDomainRoot("ac.jp", DomainType.ICANN));
+ Assert.assertEquals(null, matcher.getDomainRoot("any.tokyo.jp", DomainType.ICANN));
+ // ICANN
+ Assert.assertEquals("metro.tokyo.jp", matcher.getDomainRoot("metro.tokyo.jp", DomainType.ICANN));
+ Assert.assertEquals("blah.blah.tokyo.jp", matcher.getDomainRoot("blah.blah.tokyo.jp", DomainType.ICANN));
+ Assert.assertEquals("blah.ac.jp", matcher.getDomainRoot("blah.blah.ac.jp", DomainType.ICANN));
+ // Unknown
+ Assert.assertEquals(null, matcher.getDomainRoot("garbage", DomainType.ICANN));
+ Assert.assertEquals(null, matcher.getDomainRoot("garbage.garbage", DomainType.ICANN));
+ Assert.assertEquals(null, matcher.getDomainRoot("*.garbage.garbage", DomainType.ICANN));
+ Assert.assertEquals(null, matcher.getDomainRoot("*.garbage.garbage.garbage", DomainType.ICANN));
+ }
+
+
+ @Test
+ public void testMatch() {
Assert.assertTrue(matcher.matches(".jp"));
Assert.assertTrue(matcher.matches(".ac.jp"));
Assert.assertTrue(matcher.matches(".any.tokyo.jp"));
@@ -84,7 +131,7 @@ public class TestPublicSuffixMatcher {
}
@Test
- public void testMatchUnicode() throws Exception {
+ public void testMatchUnicode() {
Assert.assertTrue(matcher.matches(".h\u00E5.no")); // \u00E5 is <aring>
Assert.assertTrue(matcher.matches(".xn--h-2fa.no"));
Assert.assertTrue(matcher.matches(".h\u00E5.no"));
=====================================
httpclient/src/test/java/org/apache/http/impl/client/TestDefaultBackoffStrategy.java
=====================================
@@ -79,9 +79,16 @@ public class TestDefaultBackoffStrategy {
}
@Test
- public void doesNotBackOffForNon503StatusCodes() {
+ public void backsOffForTooManyRequests() {
+ final HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1,
+ 429, "Too Many Requests");
+ assertTrue(impl.shouldBackoff(resp));
+ }
+
+ @Test
+ public void doesNotBackOffForNon429And503StatusCodes() {
for(int i = 100; i <= 599; i++) {
- if (i == HttpStatus.SC_SERVICE_UNAVAILABLE) {
+ if (i== 429|| i == HttpStatus.SC_SERVICE_UNAVAILABLE) {
continue;
}
final HttpResponse resp = new BasicHttpResponse(HttpVersion.HTTP_1_1,
=====================================
httpclient/src/test/java/org/apache/http/impl/conn/TestBasicHttpClientConnectionManager.java
=====================================
@@ -278,7 +278,7 @@ public class TestBasicHttpClientConnectionManager {
mgr.shutdown();
- Mockito.verify(conn, Mockito.times(1)).close();
+ Mockito.verify(conn, Mockito.times(1)).shutdown();
try {
final ConnectionRequest connRequest2 = mgr.requestConnection(route, null);
@@ -292,7 +292,7 @@ public class TestBasicHttpClientConnectionManager {
mgr.closeIdleConnections(0L, TimeUnit.MILLISECONDS);
mgr.shutdown();
- Mockito.verify(conn, Mockito.times(1)).close();
+ Mockito.verify(conn, Mockito.times(1)).shutdown();
}
@Test
=====================================
httpclient/src/test/resources/suffixlistmatcher.txt
=====================================
@@ -0,0 +1,46 @@
+// ====================================================================
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+// ====================================================================
+//
+// This software consists of voluntary contributions made by many
+// individuals on behalf of the Apache Software Foundation. For more
+// information on the Apache Software Foundation, please see
+// <http://www.apache.org/>.
+//
+
+// ===BEGIN PRIVATE DOMAINS===
+xx
+lan
+// ===END PRIVATE DOMAINS===
+
+// ===BEGIN ICANN DOMAINS===
+
+jp
+ac.jp
+*.tokyo.jp
+!metro.tokyo.jp
+
+com
+co.jp
+gov.uk
+
+// unicode
+no
+hå.no
+
+// ===END ICANN DOMAINS===
=====================================
httpmime/pom.xml
=====================================
@@ -28,7 +28,7 @@
<parent>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcomponents-client</artifactId>
- <version>4.5.10</version>
+ <version>4.5.11</version>
</parent>
<artifactId>httpmime</artifactId>
<name>Apache HttpClient Mime</name>
=====================================
pom.xml
=====================================
@@ -32,7 +32,7 @@
<modelVersion>4.0.0</modelVersion>
<artifactId>httpcomponents-client</artifactId>
<name>Apache HttpComponents Client</name>
- <version>4.5.10</version>
+ <version>4.5.11</version>
<description>Apache HttpComponents Client is a library of components for building client side HTTP services</description>
<url>http://hc.apache.org/httpcomponents-client-ga/</url>
<inceptionYear>1999</inceptionYear>
@@ -60,13 +60,13 @@
<connection>scm:git:https://git-wip-us.apache.org/repos/asf/httpcomponents-client.git</connection>
<developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/httpcomponents-client.git</developerConnection>
<url>https://github.com/apache/httpcomponents-client/tree/${project.scm.tag}</url>
- <tag>4.5.10</tag>
+ <tag>4.5.11</tag>
</scm>
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
- <httpcore.version>4.4.12</httpcore.version>
+ <httpcore.version>4.4.13</httpcore.version>
<commons-logging.version>1.2</commons-logging.version>
<commons-codec.version>1.11</commons-codec.version>
<ehcache.version>2.6.11</ehcache.version>
View it on GitLab: https://salsa.debian.org/java-team/httpcomponents-client/commit/2a587bfa767a797e308ab543f612b396c97b7271
--
View it on GitLab: https://salsa.debian.org/java-team/httpcomponents-client/commit/2a587bfa767a797e308ab543f612b396c97b7271
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-java-commits/attachments/20200125/efc1d5b2/attachment.html>
More information about the pkg-java-commits
mailing list