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

mmarshall pushed a commit to branch branch-2.11
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-2.11 by this push:
     new 7083755a73a [fix][client] Fix the Windows absolute path not recognized 
in auth param string (#18403)
7083755a73a is described below

commit 7083755a73a69246d0e6b66c11b9afa7b2c26d8f
Author: Michael Marshall <[email protected]>
AuthorDate: Tue Feb 14 13:38:25 2023 -0600

    [fix][client] Fix the Windows absolute path not recognized in auth param 
string (#18403)
    
    (cherry picked from commit 177b96a78acada4888cb92f96c10ebba3eca8db7)
---
 .../broker/auth/MockedPulsarServiceBaseTest.java   | 14 ++++-----
 .../org/apache/pulsar/utils/ResourceUtils.java     | 31 +++++++++++++++++++
 .../pulsar/admin/cli/PulsarAdminToolTest.java      |  5 ++-
 .../pulsar/client/impl/AuthenticationUtil.java     | 11 +++++--
 .../pulsar/client/impl/AuthenticationUtilTest.java | 36 ++++++++++++++++++++++
 5 files changed, 84 insertions(+), 13 deletions(-)

diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java
 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java
index 52d13a97816..3b483efc33d 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/auth/MockedPulsarServiceBaseTest.java
@@ -26,7 +26,6 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 import com.google.common.collect.Sets;
-import com.google.common.io.Resources;
 import com.google.common.util.concurrent.MoreExecutors;
 import io.netty.channel.EventLoopGroup;
 import java.lang.reflect.Field;
@@ -74,6 +73,7 @@ import org.apache.pulsar.metadata.api.MetadataStoreException;
 import org.apache.pulsar.metadata.api.extended.MetadataStoreExtended;
 import org.apache.pulsar.metadata.impl.ZKMetadataStore;
 import org.apache.pulsar.tests.TestRetrySupport;
+import org.apache.pulsar.utils.ResourceUtils;
 import org.apache.zookeeper.CreateMode;
 import org.apache.zookeeper.MockZooKeeper;
 import org.apache.zookeeper.data.ACL;
@@ -88,20 +88,20 @@ import javax.ws.rs.container.TimeoutHandler;
  */
 public abstract class MockedPulsarServiceBaseTest extends TestRetrySupport {
     public final static String BROKER_KEYSTORE_FILE_PATH =
-            
Resources.getResource("certificate-authority/jks/broker.keystore.jks").getPath();
+            
ResourceUtils.getAbsolutePath("certificate-authority/jks/broker.keystore.jks");
     public final static String BROKER_TRUSTSTORE_FILE_PATH =
-            
Resources.getResource("certificate-authority/jks/broker.truststore.jks").getPath();
+            
ResourceUtils.getAbsolutePath("certificate-authority/jks/broker.truststore.jks");
     public final static String BROKER_TRUSTSTORE_NO_PASSWORD_FILE_PATH =
-            
Resources.getResource("certificate-authority/jks/broker.truststore.nopassword.jks").getPath();
+            
ResourceUtils.getAbsolutePath("certificate-authority/jks/broker.truststore.nopassword.jks");
     public final static String BROKER_KEYSTORE_PW = "111111";
     public final static String BROKER_TRUSTSTORE_PW = "111111";
 
     public final static String CLIENT_KEYSTORE_FILE_PATH =
-            
Resources.getResource("certificate-authority/jks/client.keystore.jks").getPath();
+            
ResourceUtils.getAbsolutePath("certificate-authority/jks/client.keystore.jks");
     public final static String CLIENT_TRUSTSTORE_FILE_PATH =
-            
Resources.getResource("certificate-authority/jks/client.truststore.jks").getPath();
+            
ResourceUtils.getAbsolutePath("certificate-authority/jks/client.truststore.jks");
     public final static String CLIENT_TRUSTSTORE_NO_PASSWORD_FILE_PATH =
-            
Resources.getResource("certificate-authority/jks/client.truststore.nopassword.jks").getPath();
+            
ResourceUtils.getAbsolutePath("certificate-authority/jks/client.truststore.nopassword.jks");
     public final static String CLIENT_KEYSTORE_PW = "111111";
     public final static String CLIENT_TRUSTSTORE_PW = "111111";
 
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/utils/ResourceUtils.java 
b/pulsar-broker/src/test/java/org/apache/pulsar/utils/ResourceUtils.java
new file mode 100644
index 00000000000..d0511e272f4
--- /dev/null
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/utils/ResourceUtils.java
@@ -0,0 +1,31 @@
+/**
+ * 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.
+ */
+package org.apache.pulsar.utils;
+
+import com.google.common.io.Resources;
+import java.io.File;
+
+public class ResourceUtils {
+
+    public static String getAbsolutePath(String resourceName) {
+        // On Windows, URL#getPath might return a string that starts with a 
disk name, e.g. "/C:/"
+        // It's invalid to use this path to open a file, so we need to get the 
absolute path via File.
+        return new 
File(Resources.getResource(resourceName).getPath()).getAbsolutePath();
+    }
+}
diff --git 
a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
 
b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
index 76f28bdd857..0e393c901b4 100644
--- 
a/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
+++ 
b/pulsar-client-tools-test/src/test/java/org/apache/pulsar/admin/cli/PulsarAdminToolTest.java
@@ -27,7 +27,6 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -2100,8 +2099,8 @@ public class PulsarAdminToolTest {
         conf = conf = ((PulsarAdminImpl)tool.getPulsarAdminSupplier().get())
                 .getClientConfigData();
         atuh = (AuthenticationTls) conf.getAuthentication();
-        assertNull(atuh.getCertFilePath());
-        assertNull(atuh.getKeyFilePath());
+        assertEquals(atuh.getCertFilePath(), certFilePath);
+        assertEquals(atuh.getKeyFilePath(), keyFilePath);
     }
 
     @Test
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/AuthenticationUtil.java
 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/AuthenticationUtil.java
index a3a7db02c87..ba638056872 100644
--- 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/AuthenticationUtil.java
+++ 
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/AuthenticationUtil.java
@@ -43,9 +43,14 @@ public class AuthenticationUtil {
         if (isNotBlank(authParamsString)) {
             String[] params = authParamsString.split(",");
             for (String p : params) {
-                String[] kv = p.split(":");
-                if (kv.length == 2) {
-                    authParams.put(kv[0], kv[1]);
+                // The value could be a file path, which could contain a colon 
like "C:\\path\\to\\file" on Windows.
+                int index = p.indexOf(':');
+                if (index < 0) {
+                    continue;
+                }
+                String key = p.substring(0, index);
+                if (!key.isEmpty()) {
+                    authParams.put(key, p.substring(index + 1));
                 }
             }
         }
diff --git 
a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/AuthenticationUtilTest.java
 
b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/AuthenticationUtilTest.java
new file mode 100644
index 00000000000..038ccdb66c7
--- /dev/null
+++ 
b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/AuthenticationUtilTest.java
@@ -0,0 +1,36 @@
+/**
+ * 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.
+ */
+package org.apache.pulsar.client.impl;
+
+import static org.testng.Assert.assertEquals;
+import java.util.Map;
+import org.testng.annotations.Test;
+
+public class AuthenticationUtilTest {
+
+    @Test
+    public void testConfigureAuthParamString() {
+        Map<String, String> params = 
AuthenticationUtil.configureFromPulsar1AuthParamString(
+                
"key:value,path:C:\\path\\to\\file,null-key:,:null-value,:,key:value-2");
+        assertEquals(params.size(), 3);
+        assertEquals(params.get("key"), "value-2");
+        assertEquals(params.get("path"), "C:\\path\\to\\file");
+        assertEquals(params.get("null-key"), "");
+    }
+}

Reply via email to