HADOOP-15143. NPE due to Invalid KerberosTicket in UGI. Contributed by Mukul Kumar Singh.
(cherry picked from commit cb60c05c3aff762c39d7d81df9a7b6e071acb181)
(cherry picked from commit dd1de1ea373a2afa9bd475cccd655b9d74710f42)
Conflicts:
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java
(cherry picked from commit 7ca1d96b4facf5a9d8700e8e1879abfbb0716cb7)
Conflicts:
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java
(cherry picked from commit 995e059077ef843400281e08054d8740cf38a970)
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 fb7f769..e171c11 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
@@ -1030,10 +1030,14 @@
Object cred = iter.next();
if (cred instanceof KerberosTicket) {
KerberosTicket ticket = (KerberosTicket) cred;
- if (!ticket.getServer().getName().startsWith("krbtgt")) {
- LOG.warn("The first kerberos ticket is not TGT(the server" +
- " principal is " + ticket.getServer() + "), remove" +
- " and destroy it.");
+ if (ticket.isDestroyed() || ticket.getServer() == null) {
+ LOG.warn("Ticket is already destroyed, remove it.");
+ iter.remove();
+ } else if (!ticket.getServer().getName().startsWith("krbtgt")) {
+ LOG.warn(
+ "The first kerberos ticket is not TGT"
+ + "(the server principal is " + ticket.getServer() +
+ ")), remove and destroy it.");
iter.remove();
try {
ticket.destroy();