Explorar o código

HDFS-3654. TestJspHelper#testGetUgi fails with NPE. Contributed by Eli Collins

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1@1361464 13f79535-47bb-0310-9956-ffa450edef68
Eli Collins %!s(int64=13) %!d(string=hai) anos
pai
achega
91e98b646a

+ 2 - 0
CHANGES.txt

@@ -93,6 +93,8 @@ Release 1.2.0 - unreleased
     HADOOP-7836. TestSaslRPC#testDigestAuthMethodHostBasedToken fails
     with hostname localhost.localdomain. (daryn via eli)
  
+    HDFS-3654. TestJspHelper#testGetUgi fails with NPE. (eli)
+
 Release 1.1.0 - unreleased
 
   INCOMPATIBLE CHANGES

+ 2 - 3
src/hdfs/org/apache/hadoop/hdfs/server/namenode/JspHelper.java

@@ -471,7 +471,7 @@ public class JspHelper {
     final String usernameFromQuery = getUsernameFromQuery(request, tryUgiParameter);
     final String doAsUserFromQuery = request.getParameter(DoAsParam.NAME);
 
-    if(UserGroupInformation.isSecurityEnabled()) {
+    if (UserGroupInformation.isSecurityEnabled()) {
       final String remoteUser = request.getRemoteUser();
       String tokenString = request.getParameter(DELEGATION_PARAMETER_NAME);
       if (tokenString != null) {
@@ -487,8 +487,7 @@ public class JspHelper {
         DelegationTokenIdentifier id = new DelegationTokenIdentifier();
         id.readFields(in);
         NameNode nn = (NameNode) context.getAttribute("name.node");
-        nn.getNamesystem().getDelegationTokenSecretManager()
-          .verifyToken(id, token.getPassword());
+        nn.verifyToken(id, token.getPassword());
         ugi = id.getUser();
         if (ugi.getRealUser() == null) {
           //non-proxy case

+ 7 - 1
src/hdfs/org/apache/hadoop/hdfs/server/namenode/NameNode.java

@@ -1372,7 +1372,13 @@ public class NameNode implements ClientProtocol, DatanodeProtocol,
     NameNode namenode = new NameNode(conf);
     return namenode;
   }
-    
+
+  public synchronized void verifyToken(DelegationTokenIdentifier identifier, 
+      byte[] password) throws InvalidToken {
+    namesystem.getDelegationTokenSecretManager().verifyToken(
+        identifier, password);
+  }
+
   /**
    */
   public static void main(String argv[]) throws Exception {

+ 5 - 1
src/test/org/apache/hadoop/hdfs/server/namenode/TestJspHelper.java

@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.net.InetSocketAddress;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hdfs.DFSConfigKeys;
@@ -67,6 +68,8 @@ public class TestJspHelper {
   public void testGetUgi() throws IOException {
     conf.set(DFSConfigKeys.FS_DEFAULT_NAME_KEY, "hdfs://localhost:4321/");
     HttpServletRequest request = mock(HttpServletRequest.class);
+    ServletContext context = mock(ServletContext.class);
+    NameNode nn = mock(NameNode.class);
     String user = "TheDoctor";
     Text userText = new Text(user);
     DelegationTokenIdentifier dtId = new DelegationTokenIdentifier(userText,
@@ -77,6 +80,7 @@ public class TestJspHelper {
     when(request.getParameter(JspHelper.DELEGATION_PARAMETER_NAME)).thenReturn(
         tokenString);
     when(request.getRemoteUser()).thenReturn(user);
+    when(context.getAttribute("name.node")).thenReturn(nn);
 
     conf.set(DFSConfigKeys.HADOOP_SECURITY_AUTHENTICATION, "kerberos");
     UserGroupInformation.setConfiguration(conf);
@@ -84,7 +88,7 @@ public class TestJspHelper {
     InetSocketAddress serviceAddr = NameNode.getAddress(conf);
     Text tokenService = SecurityUtil.buildTokenService(serviceAddr);
 
-    UserGroupInformation ugi = JspHelper.getUGI(request, conf);
+    UserGroupInformation ugi = JspHelper.getUGI(context, request, conf);
     Token<? extends TokenIdentifier> tokenInUgi = ugi.getTokens().iterator()
         .next();
     Assert.assertEquals(tokenService, tokenInUgi.getService());