From b65f2fb06263cb393cafc8aa5a04ddfe55851331 Mon Sep 17 00:00:00 2001 From: Pradeep Nayak Date: Wed, 22 Jun 2016 11:47:20 -0700 Subject: [PATCH] Fix for HADOOP-12345,HADOOP-11823 jira's --- .../java/org/apache/hadoop/oncrpc/RpcDeniedReply.java | 3 ++- .../apache/hadoop/oncrpc/security/CredentialsSys.java | 11 +++++++++++ .../hadoop/oncrpc/security/TestCredentialsSys.java | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcDeniedReply.java b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcDeniedReply.java index 2c4a0946c0e42..3d9cb3d034711 100644 --- a/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcDeniedReply.java +++ b/hadoop-common-project/hadoop-nfs/src/main/java/org/apache/hadoop/oncrpc/RpcDeniedReply.java @@ -18,6 +18,7 @@ package org.apache.hadoop.oncrpc; import org.apache.hadoop.oncrpc.security.Verifier; +import org.apache.hadoop.oncrpc.security.VerifierNone; /** * Represents RPC message MSG_DENIED reply body. See RFC 1831 for details. @@ -47,7 +48,7 @@ public RpcDeniedReply(int xid, ReplyState replyState, } public static RpcDeniedReply read(int xid, ReplyState replyState, XDR xdr) { - Verifier verifier = Verifier.readFlavorAndVerifier(xdr); + Verifier verifier = new VerifierNone(); RejectState rejectState = RejectState.fromValue(xdr.readInt()); return new RpcDeniedReply(xid, replyState, rejectState, verifier); } 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 d13c3615b2c98..a5b75cfbb2401 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 @@ -63,6 +63,10 @@ public int[] getAuxGIDs() { return mAuxGIDs; } + public int getStamp() { + return mStamp; + } + public void setGID(int gid) { this.mGID = gid; } @@ -93,8 +97,15 @@ public void read(XDR xdr) { @Override public void write(XDR xdr) { + int padding = 0; + // we do not need compute padding if the hostname is already a multiple of 4 + if (mHostName.getBytes(Charsets.UTF_8).length != 0) { + padding = 4 - (mHostName.getBytes(Charsets.UTF_8).length % 4); + } // mStamp + mHostName.length + mHostName + mUID + mGID + mAuxGIDs.count mCredentialsLength = 20 + mHostName.getBytes(Charsets.UTF_8).length; + // add the extra padding to the credential length where hostname is not a multiple of 4 + mCredentialsLength = mCredentialsLength + padding; // mAuxGIDs if (mAuxGIDs != null && mAuxGIDs.length > 0) { mCredentialsLength += mAuxGIDs.length * 4; 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 2b9e339d6eab8..111fb6b3a3c7f 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 void testReadWrite() { CredentialsSys credential = new CredentialsSys(); credential.setUID(0); credential.setGID(1); + credential.setStamp(1234); XDR xdr = new XDR(); credential.write(xdr); @@ -42,5 +43,6 @@ public void testReadWrite() { assertEquals(0, newCredential.getUID()); assertEquals(1, newCredential.getGID()); + assertEquals(1234, newCredential.getStamp()); } }