Bladeren bron

Merging change 31ece92453115259ad3a5666d8e90d2540ff1b64 from bimota-1.1.2
HDFS-4108. Fix dfsnodelist to work in secure mode. Contributed by Benoy Antony.

Conflicts:
LONGWING-CHANGES.txt

Conflicts:

HDP-CHANGES.txt

Arun C. Murthy 12 jaren geleden
bovenliggende
commit
6e5a33d195
4 gewijzigde bestanden met toevoegingen van 63 en 11 verwijderingen
  1. 3 0
      HDP-CHANGES.txt
  2. 32 0
      LONGWING-CHANGES.txt
  3. 18 8
      src/webapps/hdfs/dfsnodelist.jsp
  4. 10 3
      src/webapps/hdfs/nn_browsedfscontent.jsp

+ 3 - 0
HDP-CHANGES.txt

@@ -39,3 +39,6 @@ Condor release branched from Apache @ https://svn.apache.org/repos/asf/hadoop/co
 
 
     HADOOP-8923. Do not show intermediate web-ui page when authentication
     HADOOP-8923. Do not show intermediate web-ui page when authentication
     cookie (SPENGO/custom) expires.
     cookie (SPENGO/custom) expires.
+
+    HDFS-4108. Fix dfsnodelist to work in secure mode. Contributed by Benoy
+    Antony.

+ 32 - 0
LONGWING-CHANGES.txt

@@ -0,0 +1,32 @@
+LONGWING changes
+
+  Merged from bimota-1.1.2
+    HDFS-4108. Fix dfsnodelist to work in secure mode. (Benoy Antony via
+    acmurthy) 
+
+    HADOOP-8923. Do not show intermediate web-ui page when authentication cookie
+    (SPENGO/custom) expires. (Benoy Antony via acmurthy)
+
+  Changes now available from Apache
+
+    HADOOP-8878. Uppercase namenode hostname causes issues with security turned
+    on. (Arpit Gupta via acmurthy)
+
+    HADOOP-7621. Alfredo config should not be readable by users. (atm)
+
+    HADOOP-7665. Include SPENGO configs in core-default.xml. (atm) 
+
+    HADOOP-7666. Backport TestAuthenticationFilter to branch-1. (atm)
+
+  Unknown?
+
+    LWHADOOP-6. eBay specific patch for authenticating users from different
+    realm without a trust relationship. (Benoy Antony via acmurthy)
+
+    HADOOP-3482. Fix hdfs scripts for secure datanodes. (Benoy Antony via
+    acmurthy)
+
+  No longer in the code based
+    LWHDFS-1. Add support for downgrade tool to downgrade from Release 0.22 to
+    HDP. (suresh)
+

+ 18 - 8
src/webapps/hdfs/dfsnodelist.jsp

@@ -30,6 +30,7 @@
 	import="java.text.DateFormat"
 	import="java.text.DateFormat"
 	import="java.lang.Math"
 	import="java.lang.Math"
 	import="java.net.URLEncoder"
 	import="java.net.URLEncoder"
+	import="org.apache.hadoop.security.UserGroupInformation"
 %>
 %>
 <%!
 <%!
 	JspHelper jspHelper = new JspHelper();
 	JspHelper jspHelper = new JspHelper();
@@ -65,11 +66,24 @@ String NodeHeaderStr(String name) {
 	return ret;
 	return ret;
 }
 }
 
 
+String getBrowseUrl ( DatanodeDescriptor d, int nnHttpPort ) throws IOException{
+    String url = null;
+    if (UserGroupInformation.isSecurityEnabled()) {
+      url = "/nn_browsedfscontent.jsp?datanode="+
+        URLEncoder.encode(d.getHostName() + ":" + d.getInfoPort());
+    }
+    else {
+      url = "http://" + d.getHostName() + ":" + d.getInfoPort()
+        + "/browseDirectory.jsp?namenodeInfoPort=" + nnHttpPort + "&dir="
+        + URLEncoder.encode("/", "UTF-8");
+    }
+    return url;
+}
+
 void generateDecommissioningNodeData(JspWriter out, DatanodeDescriptor d,
 void generateDecommissioningNodeData(JspWriter out, DatanodeDescriptor d,
       String suffix, boolean alive, int nnHttpPort) throws IOException {
       String suffix, boolean alive, int nnHttpPort) throws IOException {
-    String url = "http://" + d.getHostName() + ":" + d.getInfoPort()
-      + "/browseDirectory.jsp?namenodeInfoPort=" + nnHttpPort + "&dir="
-      + URLEncoder.encode("/", "UTF-8");
+
+    String url = getBrowseUrl(d, nnHttpPort);
 
 
     String name = d.getHostName() + ":" + d.getPort();
     String name = d.getHostName() + ":" + d.getPort();
     if (!name.matches("\\d+\\.\\d+.\\d+\\.\\d+.*"))
     if (!name.matches("\\d+\\.\\d+.\\d+\\.\\d+.*"))
@@ -121,11 +135,7 @@ i.e. "http://dn1.hadoop.apache.org:50075/..."
 Note that "d.getHost():d.getPort()" is what DFS clients use
 Note that "d.getHost():d.getPort()" is what DFS clients use
 to interact with datanodes.
 to interact with datanodes.
 	 */
 	 */
-	// from nn_browsedfscontent.jsp:
-	String url = "http://" + d.getHostName() + ":" + d.getInfoPort() +
-	"/browseDirectory.jsp?namenodeInfoPort=" +
-	nnHttpPort + "&dir=" +
-	URLEncoder.encode("/", "UTF-8");
+  String url = getBrowseUrl(d, nnHttpPort);
 
 
 	String name = d.getHostName() + ":" + d.getPort();
 	String name = d.getHostName() + ":" + d.getPort();
 	if ( !name.matches( "\\d+\\.\\d+.\\d+\\.\\d+.*" ) ) 
 	if ( !name.matches( "\\d+\\.\\d+.\\d+\\.\\d+.*" ) ) 

+ 10 - 3
src/webapps/hdfs/nn_browsedfscontent.jsp

@@ -33,6 +33,7 @@
   import="java.text.DateFormat"
   import="java.text.DateFormat"
   import="java.net.InetAddress"
   import="java.net.InetAddress"
   import="java.net.URLEncoder"
   import="java.net.URLEncoder"
+  import="java.net.URLDecoder"
 %>
 %>
 <%!
 <%!
   static String getDelegationToken(final NameNode nn,
   static String getDelegationToken(final NameNode nn,
@@ -50,7 +51,7 @@
     return token.encodeToUrlString();
     return token.encodeToUrlString();
   }
   }
 
 
-  public void redirectToRandomDataNode(
+  public void redirectToDataNode(
                             ServletContext context, 
                             ServletContext context, 
                             HttpServletRequest request,
                             HttpServletRequest request,
                             HttpServletResponse resp
                             HttpServletResponse resp
@@ -63,7 +64,13 @@
       tokenString = getDelegationToken(nn, ugi, request, conf);
       tokenString = getDelegationToken(nn, ugi, request, conf);
     }
     }
     FSNamesystem fsn = nn.getNamesystem();
     FSNamesystem fsn = nn.getNamesystem();
-    String datanode = fsn.randomDataNode();
+    String datanode = request.getParameter ("datanode");
+    if (datanode != null) {
+       datanode = URLDecoder.decode (datanode);
+    }
+    else  {
+       datanode = fsn.randomDataNode();
+    }
     String redirectLocation;
     String redirectLocation;
     String nodeToRedirect;
     String nodeToRedirect;
     int redirectPort;
     int redirectPort;
@@ -94,7 +101,7 @@
 
 
 <body>
 <body>
 <% 
 <% 
-  redirectToRandomDataNode(application, request, response); 
+  redirectToDataNode(application, request, response); 
 %>
 %>
 <hr>
 <hr>