Author: amitj
Date: Tue Jul  5 11:15:15 2016
New Revision: 1751445

URL: http://svn.apache.org/viewvc?rev=1751445&view=rev
Log:
OAK-4527: [oak-blob-cloud] Access parameters configured leak out in the 
exception message

Stripping of accessKey & secretKey from the configured parameters map before 
throwing exception

Added:
    
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/TestS3DataStore.java
Removed:
    
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3TestDataStore.java
Modified:
    
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java

Modified: 
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java?rev=1751445&r1=1751444&r2=1751445&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-blob-cloud/src/main/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/S3Backend.java
 Tue Jul  5 11:15:15 2016
@@ -26,6 +26,7 @@ import java.util.Date;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.Queue;
 import java.util.Set;
@@ -39,6 +40,7 @@ import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.collect.AbstractIterator;
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import org.apache.jackrabbit.core.data.AsyncTouchCallback;
 import org.apache.jackrabbit.core.data.AsyncTouchResult;
 import org.apache.jackrabbit.core.data.AsyncUploadCallback;
@@ -205,8 +207,17 @@ public class S3Backend implements Shared
                 +(System.currentTimeMillis() - startTime.getTime()));
         } catch (Exception e) {
             LOG.debug("  error ", e);
+            Map<String, String> filteredMap = Maps.newHashMap();
+            if (prop != null) {
+                filteredMap = Maps.filterKeys(Maps.fromProperties(prop), new 
Predicate<String>() {
+                    @Override public boolean apply(String input) {
+                        return !input.equals(S3Constants.ACCESS_KEY) && 
!input.equals(S3Constants
+                            .SECRET_KEY);
+                    }
+                });
+            }
             throw new DataStoreException("Could not initialize S3 from "
-                + prop, e);
+                + filteredMap, e);
         } finally {
             if (contextClassLoader != null) {
                 
Thread.currentThread().setContextClassLoader(contextClassLoader);

Added: 
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/TestS3DataStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/TestS3DataStore.java?rev=1751445&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/TestS3DataStore.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-blob-cloud/src/test/java/org/apache/jackrabbit/oak/blob/cloud/aws/s3/TestS3DataStore.java
 Tue Jul  5 11:15:15 2016
@@ -0,0 +1,56 @@
+/*
+ * 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.jackrabbit.oak.blob.cloud.aws.s3;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.jcr.RepositoryException;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.rules.TemporaryFolder;
+
+/**
+ * Simple tests for S3DataStore.
+ */
+public class TestS3DataStore {
+    @Rule
+    public ExpectedException expectedEx = ExpectedException.none();
+
+    @Rule
+    public TemporaryFolder folder = new TemporaryFolder(new File("target"));
+
+    @Test
+    public void testAccessParamLeakOnError() throws RepositoryException, 
IOException {
+        expectedEx.expect(RepositoryException.class);
+        expectedEx.expectMessage("Could not initialize S3 from 
{s3Region=us-standard}");
+
+        Properties props = new Properties();
+        props.put(S3Constants.ACCESS_KEY, "abcd");
+        props.put(S3Constants.SECRET_KEY, "123456");
+        props.put(S3Constants.S3_REGION, "us-standard");
+
+        S3DataStore s3ds = new S3DataStore();
+        s3ds.setProperties(props);
+        s3ds.setSecret("123456");
+        s3ds.init(folder.newFolder().getAbsolutePath());
+        expectedEx.expect(RuntimeException.class);
+    }
+}


Reply via email to