|
@@ -22,193 +22,61 @@ import java.io.DataOutput;
|
|
|
import java.io.DataOutputStream;
|
|
|
import java.io.IOException;
|
|
|
|
|
|
+import org.apache.hadoop.classification.InterfaceAudience.Private;
|
|
|
import org.apache.hadoop.io.Text;
|
|
|
-import org.apache.hadoop.security.HadoopKerberosName;
|
|
|
-import org.apache.hadoop.security.UserGroupInformation;
|
|
|
-import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
|
|
|
import org.apache.hadoop.security.token.delegation.AbstractDelegationTokenIdentifier;
|
|
|
import org.apache.hadoop.yarn.proto.YarnSecurityTokenProtos.YARNDelegationTokenIdentifierProto;
|
|
|
|
|
|
+@Private
|
|
|
public abstract class YARNDelegationTokenIdentifier extends
|
|
|
AbstractDelegationTokenIdentifier {
|
|
|
-
|
|
|
- YARNDelegationTokenIdentifierProto.Builder builder =
|
|
|
+
|
|
|
+ YARNDelegationTokenIdentifierProto.Builder builder =
|
|
|
YARNDelegationTokenIdentifierProto.newBuilder();
|
|
|
|
|
|
- public YARNDelegationTokenIdentifier() {}
|
|
|
+ public YARNDelegationTokenIdentifier() {
|
|
|
+ }
|
|
|
|
|
|
public YARNDelegationTokenIdentifier(Text owner, Text renewer, Text realUser) {
|
|
|
- setOwner(owner);
|
|
|
- setRenewer(renewer);
|
|
|
- setRealUser(realUser);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Get the username encoded in the token identifier
|
|
|
- *
|
|
|
- * @return the username or owner
|
|
|
- */
|
|
|
- @Override
|
|
|
- public UserGroupInformation getUser() {
|
|
|
- String owner = getOwner() == null ? null : getOwner().toString();
|
|
|
- String realUser = getRealUser() == null ? null: getRealUser().toString();
|
|
|
- if ( (owner == null) || (owner.toString().isEmpty())) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- final UserGroupInformation realUgi;
|
|
|
- final UserGroupInformation ugi;
|
|
|
- if ((realUser == null) || (realUser.toString().isEmpty())
|
|
|
- || realUser.equals(owner)) {
|
|
|
- ugi = realUgi = UserGroupInformation.createRemoteUser(owner.toString());
|
|
|
- } else {
|
|
|
- realUgi = UserGroupInformation.createRemoteUser(realUser.toString());
|
|
|
- ugi = UserGroupInformation.createProxyUser(owner.toString(), realUgi);
|
|
|
- }
|
|
|
- realUgi.setAuthenticationMethod(AuthenticationMethod.TOKEN);
|
|
|
- return ugi;
|
|
|
+ super(owner, renewer, realUser);
|
|
|
}
|
|
|
|
|
|
- public Text getOwner() {
|
|
|
- String owner = builder.getOwner();
|
|
|
- if (owner == null) {
|
|
|
- return null;
|
|
|
- } else {
|
|
|
- return new Text(owner);
|
|
|
- }
|
|
|
+ public YARNDelegationTokenIdentifier(
|
|
|
+ YARNDelegationTokenIdentifierProto.Builder builder) {
|
|
|
+ this.builder = builder;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void setOwner(Text owner) {
|
|
|
- if (builder != null && owner != null) {
|
|
|
- builder.setOwner(owner.toString());
|
|
|
+ public synchronized void readFields(DataInput in) throws IOException {
|
|
|
+ builder.mergeFrom((DataInputStream) in);
|
|
|
+ if (builder.getOwner() != null) {
|
|
|
+ setOwner(new Text(builder.getOwner()));
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- public Text getRenewer() {
|
|
|
- String renewer = builder.getRenewer();
|
|
|
- if (renewer == null) {
|
|
|
- return null;
|
|
|
- } else {
|
|
|
- return new Text(renewer);
|
|
|
+ if (builder.getRenewer() != null) {
|
|
|
+ setRenewer(new Text(builder.getRenewer()));
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void setRenewer(Text renewer) {
|
|
|
- if (builder != null && renewer != null) {
|
|
|
- HadoopKerberosName renewerKrbName = new HadoopKerberosName(renewer.toString());
|
|
|
- try {
|
|
|
- builder.setRenewer(renewerKrbName.getShortName());
|
|
|
- } catch (IOException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public Text getRealUser() {
|
|
|
- String realUser = builder.getRealUser();
|
|
|
- if (realUser == null) {
|
|
|
- return null;
|
|
|
- } else {
|
|
|
- return new Text(realUser);
|
|
|
+ if (builder.getRealUser() != null) {
|
|
|
+ setRealUser(new Text(builder.getRealUser()));
|
|
|
}
|
|
|
+ setIssueDate(builder.getIssueDate());
|
|
|
+ setMaxDate(builder.getMaxDate());
|
|
|
+ setSequenceNumber(builder.getSequenceNumber());
|
|
|
+ setMasterKeyId(builder.getMasterKeyId());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void setRealUser(Text realUser) {
|
|
|
- if (builder != null && realUser != null) {
|
|
|
- builder.setRealUser(realUser.toString());
|
|
|
- }
|
|
|
+ public synchronized void write(DataOutput out) throws IOException {
|
|
|
+ builder.setOwner(getOwner().toString());
|
|
|
+ builder.setRenewer(getRenewer().toString());
|
|
|
+ builder.setRealUser(getRealUser().toString());
|
|
|
+ builder.setIssueDate(getIssueDate());
|
|
|
+ builder.setMaxDate(getMaxDate());
|
|
|
+ builder.setSequenceNumber(getSequenceNumber());
|
|
|
+ builder.setMasterKeyId(getMasterKeyId());
|
|
|
+ builder.build().writeTo((DataOutputStream) out);
|
|
|
}
|
|
|
|
|
|
- public void setIssueDate(long issueDate) {
|
|
|
- builder.setIssueDate(issueDate);
|
|
|
- }
|
|
|
-
|
|
|
- public long getIssueDate() {
|
|
|
- return builder.getIssueDate();
|
|
|
+ public YARNDelegationTokenIdentifierProto getProto() {
|
|
|
+ return builder.build();
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- public void setRenewDate(long renewDate) {
|
|
|
- builder.setRenewDate(renewDate);
|
|
|
- }
|
|
|
-
|
|
|
- public long getRenewDate() {
|
|
|
- return builder.getRenewDate();
|
|
|
- }
|
|
|
-
|
|
|
- public void setMaxDate(long maxDate) {
|
|
|
- builder.setMaxDate(maxDate);
|
|
|
- }
|
|
|
-
|
|
|
- public long getMaxDate() {
|
|
|
- return builder.getMaxDate();
|
|
|
- }
|
|
|
-
|
|
|
- public void setSequenceNumber(int seqNum) {
|
|
|
- builder.setSequenceNumber(seqNum);
|
|
|
- }
|
|
|
-
|
|
|
- public int getSequenceNumber() {
|
|
|
- return builder.getSequenceNumber();
|
|
|
- }
|
|
|
-
|
|
|
- public void setMasterKeyId(int newId) {
|
|
|
- builder.setMasterKeyId(newId);
|
|
|
- }
|
|
|
-
|
|
|
- public int getMasterKeyId() {
|
|
|
- return builder.getMasterKeyId();
|
|
|
- }
|
|
|
-
|
|
|
- protected static boolean isEqual(Object a, Object b) {
|
|
|
- return a == null ? b == null : a.equals(b);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean equals(Object obj) {
|
|
|
- if (obj == this) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- if (obj instanceof YARNDelegationTokenIdentifier) {
|
|
|
- YARNDelegationTokenIdentifier that = (YARNDelegationTokenIdentifier) obj;
|
|
|
- return this.getSequenceNumber() == that.getSequenceNumber()
|
|
|
- && this.getIssueDate() == that.getIssueDate()
|
|
|
- && this.getMaxDate() == that.getMaxDate()
|
|
|
- && this.getMasterKeyId() == that.getMasterKeyId()
|
|
|
- && isEqual(this.getOwner(), that.getOwner())
|
|
|
- && isEqual(this.getRenewer(), that.getRenewer())
|
|
|
- && isEqual(this.getRealUser(), that.getRealUser());
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public int hashCode() {
|
|
|
- return this.getSequenceNumber();
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void readFields(DataInput in) throws IOException {
|
|
|
- builder.mergeFrom((DataInputStream) in);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void write(DataOutput out) throws IOException {
|
|
|
- builder.build().writeTo((DataOutputStream)out);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public String toString() {
|
|
|
- StringBuilder buffer = new StringBuilder();
|
|
|
- buffer
|
|
|
- .append("owner=" + getOwner() + ", renewer=" + getRenewer() + ", realUser="
|
|
|
- + getRealUser() + ", issueDate=" + getIssueDate()
|
|
|
- + ", maxDate=" + getMaxDate() + ", sequenceNumber="
|
|
|
- + getSequenceNumber() + ", masterKeyId="
|
|
|
- + getMasterKeyId());
|
|
|
- return buffer.toString();
|
|
|
- }
|
|
|
-
|
|
|
}
|