You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by we...@apache.org on 2026/10/23 21:35:00 UTC

(hadoop) branch trunk updated: HADOOP-20028. SecurityUtil.getByName rejects bracketed IPv6 literals when token service use_ip is false. (#8855)

This is an automated email from the ASF dual-hosted git repository.

jojochuang pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 55263a72089 HADOOP-20028. SecurityUtil.getByName rejects bracketed IPv6 literals when token service use_ip is false. (#8855)
55263a72089 is described below

commit 55263a72089db66e8749989ce122066acce7d290
Author: Siyao Meng <50...@users.noreply.github.com>
AuthorDate: Fri Oct 23 14:34:53 2026 -0700

    HADOOP-20028. SecurityUtil.getByName rejects bracketed IPv6 literals when token service use_ip is false. (#8855)
    
    Generated-by: Claude Opus 5.5 <no...@anthropic.com>
---
 .../java/org/apache/hadoop/security/SecurityUtil.java     |  5 +++++
 .../java/org/apache/hadoop/security/TestSecurityUtil.java | 15 +++++++++++++++
 2 files changed, 20 insertions(+)

diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java
index 724e26c7335..bdcb5b93f25 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/SecurityUtil.java
@@ -721,6 +721,11 @@ protected static class QualifiedHostResolver extends CacheableHostResolver {
     public InetAddress resolve(String host) throws UnknownHostException {
       InetAddress addr = null;
 
+      // URI.getHost() returns IPv6 literals in brackets, ex. "[::1]"
+      if (host.startsWith("[") && InetAddresses.isUriInetAddress(host)) {
+        host = host.substring(1, host.length() - 1);
+      }
+
       if (InetAddresses.isInetAddress(host)) {
         // valid ip address. use it as-is
         addr = InetAddresses.forString(host);
diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestSecurityUtil.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestSecurityUtil.java
index bbea8285a5b..7007e84c6de 100644
--- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestSecurityUtil.java
+++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestSecurityUtil.java
@@ -385,6 +385,21 @@ public void testSocketAddrWithIPv6() throws Exception {
     verifyAddress(addr, host, InetAddress.getByName(host).getHostAddress(), 123);
   }
 
+  @Test
+  public void testGetByNameWithBracketedIPv6() throws Exception {
+    Configuration conf = new Configuration(false);
+    for (boolean useIp : new boolean[] {false, true}) {
+      conf.setBoolean(CommonConfigurationKeys.HADOOP_SECURITY_TOKEN_SERVICE_USE_IP, useIp);
+      SecurityUtil.setConfiguration(conf);
+      String msg = "use_ip=" + useIp;
+      for (String ip : new String[] {"::1", "2001:db8::1"}) {
+        assertEquals(InetAddress.getByName(ip), SecurityUtil.getByName("[" + ip + "]"), msg);
+      }
+      // the JDK does not accept an IPv4 literal in brackets either
+      assertThrows(UnknownHostException.class, () -> SecurityUtil.getByName("[127.0.0.1]"), msg);
+    }
+  }
+
   @Test
   public void testSocketAddrWithNameToStaticName() {
     String staticHost = "host1";


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org