Repository: hadoop Updated Branches: refs/heads/branch-2 b7b5807d2 -> af581c0e2
HADOOP-12345. Pad hostname correctly in CredentialsSys.java. Contributed by Pradeep Nayak Udupi Kadbet. (cherry picked from commit 846ada2de33f9840d6e60fd7339ecc2d71f277c7) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/af581c0e Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/af581c0e Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/af581c0e Branch: refs/heads/branch-2 Commit: af581c0e2306970f4965f64cbbc2255c8bfc2191 Parents: b7b5807 Author: Andrew Wang <[email protected]> Authored: Wed Jun 29 17:32:35 2016 -0700 Committer: Andrew Wang <[email protected]> Committed: Wed Jun 29 17:32:49 2016 -0700 ---------------------------------------------------------------------- .../hadoop/oncrpc/security/Credentials.java | 6 +++ .../hadoop/oncrpc/security/CredentialsSys.java | 17 ++++++++ .../oncrpc/security/TestCredentialsSys.java | 42 ++++++++++++++++++++ 3 files changed, 65 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/af581c0e/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/Credentials.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/Credentials.java b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/Credentials.java index 29c706b..639a1e5 100644 --- a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/Credentials.java +++ b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/Credentials.java @@ -17,6 +17,7 @@ */ package org.apache.hadoop.oncrpc.security; +import com.google.common.annotations.VisibleForTesting; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.oncrpc.XDR; @@ -66,4 +67,9 @@ public abstract class Credentials extends RpcAuthInfo { protected Credentials(AuthFlavor flavor) { super(flavor); } + + @VisibleForTesting + int getCredentialLength() { + return mCredentialsLength; + } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/af581c0e/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/CredentialsSys.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/CredentialsSys.java b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/CredentialsSys.java index d13c361..4d39de3 100644 --- a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/CredentialsSys.java +++ b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/security/CredentialsSys.java @@ -20,6 +20,7 @@ package org.apache.hadoop.oncrpc.security; import java.net.InetAddress; import java.net.UnknownHostException; +import com.google.common.annotations.VisibleForTesting; import org.apache.commons.io.Charsets; import org.apache.hadoop.oncrpc.XDR; @@ -63,6 +64,11 @@ public class CredentialsSys extends Credentials { return mAuxGIDs; } + @VisibleForTesting + int getStamp() { + return mStamp; + } + public void setGID(int gid) { this.mGID = gid; } @@ -75,6 +81,11 @@ public class CredentialsSys extends Credentials { this.mStamp = stamp; } + @VisibleForTesting + void setHostName(String hostname) { + this.mHostName = hostname; + } + @Override public void read(XDR xdr) { mCredentialsLength = xdr.readInt(); @@ -93,8 +104,14 @@ public class CredentialsSys extends Credentials { @Override public void write(XDR xdr) { + int padding = 0; + // Ensure there are padding bytes if hostname is not a multiple of 4. + padding = 4 - (mHostName.getBytes(Charsets.UTF_8).length % 4); + // padding bytes is zero if hostname is already a multiple of 4. + padding = padding % 4; // mStamp + mHostName.length + mHostName + mUID + mGID + mAuxGIDs.count mCredentialsLength = 20 + mHostName.getBytes(Charsets.UTF_8).length; + mCredentialsLength = mCredentialsLength + padding; // mAuxGIDs if (mAuxGIDs != null && mAuxGIDs.length > 0) { mCredentialsLength += mAuxGIDs.length * 4; http://git-wip-us.apache.org/repos/asf/hadoop/blob/af581c0e/hadoop-common-project/hadoop-nfs/src/test/java/org/apache/hadoop/oncrpc/security/TestCredentialsSys.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-nfs/src/test/java/org/apache/hadoop/oncrpc/security/TestCredentialsSys.java b/hadoop-common-project/hadoop-nfs/src/test/java/org/apache/hadoop/oncrpc/security/TestCredentialsSys.java index 2b9e339..745ac5c 100644 --- a/hadoop-common-project/hadoop-nfs/src/test/java/org/apache/hadoop/oncrpc/security/TestCredentialsSys.java +++ b/hadoop-common-project/hadoop-nfs/src/test/java/org/apache/hadoop/oncrpc/security/TestCredentialsSys.java @@ -33,6 +33,7 @@ public class TestCredentialsSys { CredentialsSys credential = new CredentialsSys(); credential.setUID(0); credential.setGID(1); + credential.setStamp(1234); XDR xdr = new XDR(); credential.write(xdr); @@ -42,5 +43,46 @@ public class TestCredentialsSys { assertEquals(0, newCredential.getUID()); assertEquals(1, newCredential.getGID()); + assertEquals(1234, newCredential.getStamp()); + } + + @Test + public void testHostNameNotMultipleOf4() { + CredentialsSys credential = new CredentialsSys(); + credential.setUID(0); + credential.setGID(1); + credential.setStamp(1234); + credential.setHostName("hadoop-nfs"); + + XDR xdr = new XDR(); + credential.write(xdr); + + CredentialsSys newCredential = new CredentialsSys(); + newCredential.read(xdr.asReadOnlyWrap()); + + assertEquals(0, newCredential.getUID()); + assertEquals(1, newCredential.getGID()); + assertEquals(1234, newCredential.getStamp()); + assertEquals(32, newCredential.getCredentialLength()); + } + + @Test + public void testHostNameMultipleOf4() { + CredentialsSys credential = new CredentialsSys(); + credential.setUID(0); + credential.setGID(1); + credential.setStamp(1234); + credential.setHostName("apachehadoop"); + + XDR xdr = new XDR(); + credential.write(xdr); + + CredentialsSys newCredential = new CredentialsSys(); + newCredential.read(xdr.asReadOnlyWrap()); + + assertEquals(0, newCredential.getUID()); + assertEquals(1, newCredential.getGID()); + assertEquals(1234, newCredential.getStamp()); + assertEquals(32, newCredential.getCredentialLength()); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
