From 1e0ea27e9602efba102b2145d0240ecc9d5845a1 Mon Sep 17 00:00:00 2001 From: Chris Nauroth Date: Thu, 29 Sep 2016 13:59:09 -0700 Subject: [PATCH] Revert "HADOOP-13081. add the ability to create multiple UGIs/subjects from one kerberos login. Contributed by Sergey Shelukhin." This reverts commit 0458a2af6e925d023882714e8b7b0568eca7a775. --- .../hadoop/security/UserGroupInformation.java | 29 +------------------ .../security/TestUserGroupInformation.java | 27 ----------------- 2 files changed, 1 insertion(+), 55 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java index ed3a9d053ea..bcdfd531a56 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java @@ -38,7 +38,6 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -652,33 +651,7 @@ private UserGroupInformation(Subject subject, final boolean externalKeyTab) { } this.isKrbTkt = KerberosUtil.hasKerberosTicket(subject); } - - /** - * Copies the Subject of this UGI and creates a new UGI with the new subject. - * This can be used to add credentials (e.g. tokens) to different copies of - * the same UGI, allowing multiple users with different tokens to reuse the - * UGI without re-authenticating with Kerberos. - * @return clone of the UGI with a new subject. - */ - @InterfaceAudience.Public - @InterfaceStability.Evolving - public UserGroupInformation copySubjectAndUgi() { - Subject subj = getSubject(); - // The ctor will set other fields automatically from the principals. - return new UserGroupInformation(new Subject(false, subj.getPrincipals(), - cloneCredentials(subj.getPublicCredentials()), - cloneCredentials(subj.getPrivateCredentials()))); - } - - private static Set cloneCredentials(Set old) { - Set set = new HashSet<>(); - // Make sure Hadoop credentials objects do not reuse the maps. - for (Object o : old) { - set.add(o instanceof Credentials ? new Credentials((Credentials)o) : o); - } - return set; - } - + /** * checks if logged in using kerberos * @return true if the subject logged via keytab or has a Kerberos TGT diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java index e45d70db746..09a58070b78 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/TestUserGroupInformation.java @@ -50,7 +50,6 @@ import java.util.Collection; import java.util.ConcurrentModificationException; import java.util.LinkedHashSet; -import java.util.List; import java.util.Set; import static org.apache.hadoop.fs.CommonConfigurationKeys.HADOOP_USER_GROUP_METRICS_PERCENTILES_INTERVALS; @@ -899,32 +898,6 @@ public void testPrivateTokenExclusion() throws Exception { assertEquals(1, tokens.size()); } - @Test(timeout = 30000) - public void testCopySubjectAndUgi() throws IOException { - SecurityUtil.setAuthenticationMethod(AuthenticationMethod.SIMPLE, conf); - UserGroupInformation.setConfiguration(conf); - UserGroupInformation u1 = UserGroupInformation.getLoginUser(); - assertNotNull(u1); - @SuppressWarnings("unchecked") - Token tmpToken = mock(Token.class); - u1.addToken(tmpToken); - - UserGroupInformation u2 = u1.copySubjectAndUgi(); - assertEquals(u1.getAuthenticationMethod(), u2.getAuthenticationMethod()); - assertNotSame(u1.getSubject(), u2.getSubject()); - Credentials c1 = u1.getCredentials(), c2 = u2.getCredentials(); - List sc1 = c1.getAllSecretKeys(), sc2 = c2.getAllSecretKeys(); - assertArrayEquals(sc1.toArray(new Text[0]), sc2.toArray(new Text[0])); - Collection> ts1 = c1.getAllTokens(), - ts2 = c2.getAllTokens(); - assertArrayEquals(ts1.toArray(new Token[0]), ts2.toArray(new Token[0])); - @SuppressWarnings("unchecked") - Token token = mock(Token.class); - u2.addToken(token); - assertTrue(u2.getCredentials().getAllTokens().contains(token)); - assertFalse(u1.getCredentials().getAllTokens().contains(token)); - } - /** * This test checks a race condition between getting and adding tokens for * the current user. Calling UserGroupInformation.getCurrentUser() returns