Selaa lähdekoodia

YARN-9385. Fixed ApiServiceClient to use current UGI.
Contributed by Eric Yang

Eric Yang 6 vuotta sitten
vanhempi
commit
19b22c4385

+ 8 - 5
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/main/java/org/apache/hadoop/yarn/service/client/ApiServiceClient.java

@@ -151,7 +151,7 @@ public class ApiServiceClient extends AppAdminClient {
    * @return URI to API Service
    * @throws IOException
    */
-  private String getServicePath(String appName) throws IOException {
+  protected String getServicePath(String appName) throws IOException {
     String url = getRMWebAddress();
     StringBuilder api = new StringBuilder();
     api.append(url)
@@ -203,12 +203,15 @@ public class ApiServiceClient extends AppAdminClient {
     return api.toString();
   }
 
-  private void appendUserNameIfRequired(StringBuilder builder) {
+  private void appendUserNameIfRequired(StringBuilder builder)
+      throws IOException {
     Configuration conf = getConfig();
-    if (conf.get("hadoop.http.authentication.type").equalsIgnoreCase(
-        "simple")) {
+    if (conf.get("hadoop.http.authentication.type")
+        .equalsIgnoreCase("simple")) {
+      String username = UserGroupInformation.getCurrentUser()
+            .getShortUserName();
       builder.append("?user.name=").append(UrlEncoded
-          .encodeString(System.getProperty("user.name")));
+          .encodeString(username));
     }
   }
 

+ 9 - 0
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-services/hadoop-yarn-services-api/src/test/java/org/apache/hadoop/yarn/service/client/TestApiServiceClient.java

@@ -27,6 +27,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.google.common.collect.Lists;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.exceptions.YarnException;
 import org.eclipse.jetty.server.Server;
@@ -310,5 +311,13 @@ public class TestApiServiceClient {
     }
   }
 
+  @Test
+  public void testNoneSecureApiClient() throws IOException {
+    String url = asc.getServicePath("/foobar");
+    assertTrue("User.name flag is missing in service path.",
+        url.contains("user.name"));
+    assertTrue("User.name flag is not matching JVM user.",
+        url.contains(System.getProperty("user.name")));
+  }
 
 }