[ https://issues.apache.org/jira/browse/HADOOP-13558?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Xiao Chen updated HADOOP-13558: ------------------------------- Attachment: HADOOP-13558.branch-2.7.patch Hi [~zhz], Attached a branch-2.7 patch, please feel free to check it in if looks good to you. Branch-2.8 only has the test class portion of the conflicts in the 2.7 patch, and is hopefully easy to tackle with. > UserGroupInformation created from a Subject incorrectly tries to renew the > Kerberos ticket > ------------------------------------------------------------------------------------------ > > Key: HADOOP-13558 > URL: https://issues.apache.org/jira/browse/HADOOP-13558 > Project: Hadoop Common > Issue Type: Bug > Components: security > Affects Versions: 2.7.2, 2.6.4, 3.0.0-alpha2 > Reporter: Alejandro Abdelnur > Assignee: Xiao Chen > Fix For: 2.9.0, 3.0.0-alpha2 > > Attachments: HADOOP-13558.01.patch, HADOOP-13558.02.patch, > HADOOP-13558.branch-2.7.patch > > > The UGI {{checkTGTAndReloginFromKeytab()}} method checks certain conditions > and if they are met it invokes the {{reloginFromKeytab()}}. The > {{reloginFromKeytab()}} method then fails with an {{IOException}} > "loginUserFromKeyTab must be done first" because there is no keytab > associated with the UGI. > The {{checkTGTAndReloginFromKeytab()}} method checks if there is a keytab > ({{isKeytab}} UGI instance variable) associated with the UGI, if there is one > it triggers a call to {{reloginFromKeytab()}}. The problem is that the > {{keytabFile}} UGI instance variable is NULL, and that triggers the mentioned > {{IOException}}. > The root of the problem seems to be when creating a UGI via the > {{UGI.loginUserFromSubject(Subject)}} method, this method uses the > {{UserGroupInformation(Subject)}} constructor, and this constructor does the > following to determine if there is a keytab or not. > {code} > this.isKeytab = KerberosUtil.hasKerberosKeyTab(subject); > {code} > If the {{Subject}} given had a keytab, then the UGI instance will have the > {{isKeytab}} set to TRUE. > It sets the UGI instance as it would have a keytab because the Subject has a > keytab. This has 2 problems: > First, it does not set the keytab file (and this, having the {{isKeytab}} set > to TRUE and the {{keytabFile}} set to NULL) is what triggers the > {{IOException}} in the method {{reloginFromKeytab()}}. > Second (and even if the first problem is fixed, this still is a problem), it > assumes that because the subject has a keytab it is up to UGI to do the > relogin using the keytab. This is incorrect if the UGI was created using the > {{UGI.loginUserFromSubject(Subject)}} method. In such case, the owner of the > Subject is not the UGI, but the caller, so the caller is responsible for > renewing the Kerberos tickets and the UGI should not try to do so. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org