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

sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bookkeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 67018bd  Dont log ledgermetadata which contains password.
67018bd is described below

commit 67018bd4b1e006f4d957a1f70a1c0e01b9ebb70b
Author: cguttapalem <[email protected]>
AuthorDate: Thu Feb 1 11:19:29 2018 -0800

    Dont log ledgermetadata which contains password.
    
    Descriptions of the changes in this PR:
    
    Dont log ledgermetadata contains password used to create
    the ledger. Logs are not supposed to reveal such sensitive info.
    
    Author: cguttapalem <[email protected]>
    
    Reviewers: Ivan Kelly <[email protected]>, Jia Zhai <None>, Sijie Guo 
<[email protected]>
    
    This closes #1092 from reddycharan/fixpasswordlog
---
 .../apache/bookkeeper/client/LedgerMetadata.java   | 33 ++++++++++++++++++++--
 .../bookkeeper/client/ReadOnlyLedgerHandle.java    |  2 +-
 .../bookkeeper/client/LedgerMetadataTest.java      | 19 ++++++++++++-
 3 files changed, 49 insertions(+), 5 deletions(-)

diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java
index d37e7fc..753eebd 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/LedgerMetadata.java
@@ -327,6 +327,10 @@ public class LedgerMetadata implements 
org.apache.bookkeeper.client.api.LedgerMe
     }
 
     LedgerMetadataFormat buildProtoFormat() {
+        return buildProtoFormat(true);
+    }
+
+    LedgerMetadataFormat buildProtoFormat(boolean withPassword) {
         LedgerMetadataFormat.Builder builder = 
LedgerMetadataFormat.newBuilder();
         builder.setQuorumSize(writeQuorumSize).setAckQuorumSize(ackQuorumSize)
             .setEnsembleSize(ensembleSize).setLength(length)
@@ -337,7 +341,10 @@ public class LedgerMetadata implements 
org.apache.bookkeeper.client.api.LedgerMe
         }
 
         if (hasPassword) {
-            
builder.setDigestType(digestType).setPassword(ByteString.copyFrom(password));
+            builder.setDigestType(digestType);
+            if (withPassword) {
+                builder.setPassword(ByteString.copyFrom(password));
+            }
         }
 
         if (customMetadata != null) {
@@ -366,13 +373,17 @@ public class LedgerMetadata implements 
org.apache.bookkeeper.client.api.LedgerMe
      * @return the metadata serialized into a byte array
      */
     public byte[] serialize() {
+        return serialize(true);
+    }
+
+    public byte[] serialize(boolean withPassword) {
         if (metadataFormatVersion == 1) {
             return serializeVersion1();
         }
 
         StringBuilder s = new StringBuilder();
         
s.append(VERSION_KEY).append(tSplitter).append(CURRENT_METADATA_FORMAT_VERSION).append(lSplitter);
-        s.append(TextFormat.printToString(buildProtoFormat()));
+        s.append(TextFormat.printToString(buildProtoFormat(withPassword)));
         if (LOG.isDebugEnabled()) {
             LOG.debug("Serialized config: {}", s);
         }
@@ -671,8 +682,24 @@ public class LedgerMetadata implements 
org.apache.bookkeeper.client.api.LedgerMe
 
     @Override
     public String toString() {
+        return toStringRepresentation(true);
+    }
+
+    /**
+     * Returns a string representation of this LedgerMetadata object by
+     * filtering out the password field.
+     *
+     * @return a string representation of the object without password field in
+     *         it.
+     */
+    public String toSafeString() {
+        return toStringRepresentation(false);
+    }
+
+    private String toStringRepresentation(boolean withPassword) {
         StringBuilder sb = new StringBuilder();
-        sb.append("(meta:").append(new String(serialize(), UTF_8)).append(", 
version:").append(version).append(")");
+        sb.append("(meta:").append(new String(serialize(withPassword), 
UTF_8)).append(", version:").append(version)
+                .append(")");
         return sb.toString();
     }
 
diff --git 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadOnlyLedgerHandle.java
 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadOnlyLedgerHandle.java
index c940d27..d1ab615 100644
--- 
a/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadOnlyLedgerHandle.java
+++ 
b/bookkeeper-server/src/main/java/org/apache/bookkeeper/client/ReadOnlyLedgerHandle.java
@@ -55,7 +55,7 @@ class ReadOnlyLedgerHandle extends LedgerHandle implements 
LedgerMetadataListene
             Version.Occurred occurred =
                     
ReadOnlyLedgerHandle.this.metadata.getVersion().compare(this.m.getVersion());
             if (Version.Occurred.BEFORE == occurred) {
-                LOG.info("Updated ledger metadata for ledger {} to {}.", 
ledgerId, this.m);
+                LOG.info("Updated ledger metadata for ledger {} to {}.", 
ledgerId, this.m.toSafeString());
                 synchronized (ReadOnlyLedgerHandle.this) {
                     if (this.m.isClosed()) {
                             ReadOnlyLedgerHandle.this.lastAddConfirmed = 
this.m.getLastEntryId();
diff --git 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerMetadataTest.java
 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerMetadataTest.java
index 9570c58..dc947dd 100644
--- 
a/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerMetadataTest.java
+++ 
b/bookkeeper-server/src/test/java/org/apache/bookkeeper/client/LedgerMetadataTest.java
@@ -36,7 +36,8 @@ import org.junit.Test;
  */
 public class LedgerMetadataTest {
 
-    private static final byte[] passwd = "testPasswd".getBytes(UTF_8);
+    private static final String passwdStr = "testPasswd";
+    private static final byte[] passwd = passwdStr.getBytes(UTF_8);
 
     @Test
     public void testGetters() {
@@ -154,4 +155,20 @@ public class LedgerMetadataTest {
         assertTrue(lm1.isConflictWith(lm2));
     }
 
+    @Test
+    public void testToString() {
+        LedgerMetadata lm1 = new LedgerMetadata(
+            3,
+            3,
+            2,
+            DigestType.CRC32,
+            passwd,
+            Collections.emptyMap(),
+            true);
+
+        assertTrue("toString should contain 'password' field", 
lm1.toString().contains("password"));
+        assertTrue("toString should contain password value", 
lm1.toString().contains(passwdStr));
+        assertFalse("toSafeString should not contain 'password' field", 
lm1.toSafeString().contains("password"));
+        assertFalse("toSafeString should not contain password value", 
lm1.toSafeString().contains(passwdStr));
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to