|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
package sun.security.jgss.wrapper; |
|
|
|
import org.ietf.jgss.*; |
|
import java.security.Provider; |
|
import sun.security.jgss.GSSUtil; |
|
import sun.security.jgss.spi.GSSCredentialSpi; |
|
import sun.security.jgss.spi.GSSNameSpi; |
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public class GSSCredElement implements GSSCredentialSpi { |
|
|
|
private int usage; |
|
long pCred; |
|
private GSSNameElement name = null; |
|
private GSSLibStub cStub; |
|
|
|
|
|
void doServicePermCheck() throws GSSException { |
|
if (GSSUtil.isKerberosMech(cStub.getMech())) { |
|
if (System.getSecurityManager() != null) { |
|
if (isInitiatorCredential()) { |
|
String tgsName = Krb5Util.getTGSName(name); |
|
Krb5Util.checkServicePermission(tgsName, "initiate"); |
|
} |
|
if (isAcceptorCredential() && |
|
name != GSSNameElement.DEF_ACCEPTOR) { |
|
String krbName = name.getKrbName(); |
|
Krb5Util.checkServicePermission(krbName, "accept"); |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
GSSCredElement(long pCredentials, GSSNameElement srcName, Oid mech) |
|
throws GSSException { |
|
pCred = pCredentials; |
|
cStub = GSSLibStub.getInstance(mech); |
|
usage = GSSCredential.INITIATE_ONLY; |
|
name = srcName; |
|
} |
|
|
|
GSSCredElement(GSSNameElement name, int lifetime, int usage, |
|
GSSLibStub stub) throws GSSException { |
|
cStub = stub; |
|
this.usage = usage; |
|
|
|
if (name != null) { |
|
this.name = name; |
|
doServicePermCheck(); |
|
pCred = cStub.acquireCred(this.name.pName, lifetime, usage); |
|
} else { |
|
pCred = cStub.acquireCred(0, lifetime, usage); |
|
this.name = new GSSNameElement(cStub.getCredName(pCred), cStub); |
|
doServicePermCheck(); |
|
} |
|
} |
|
|
|
public Provider getProvider() { |
|
return SunNativeProvider.INSTANCE; |
|
} |
|
|
|
public void dispose() throws GSSException { |
|
name = null; |
|
if (pCred != 0) { |
|
pCred = cStub.releaseCred(pCred); |
|
} |
|
} |
|
|
|
public GSSNameElement getName() throws GSSException { |
|
return (name == GSSNameElement.DEF_ACCEPTOR ? |
|
null : name); |
|
} |
|
|
|
public int getInitLifetime() throws GSSException { |
|
if (isInitiatorCredential()) { |
|
return cStub.getCredTime(pCred); |
|
} else return 0; |
|
} |
|
|
|
public int getAcceptLifetime() throws GSSException { |
|
if (isAcceptorCredential()) { |
|
return cStub.getCredTime(pCred); |
|
} else return 0; |
|
} |
|
|
|
public boolean isInitiatorCredential() { |
|
return (usage != GSSCredential.ACCEPT_ONLY); |
|
} |
|
|
|
public boolean isAcceptorCredential() { |
|
return (usage != GSSCredential.INITIATE_ONLY); |
|
} |
|
|
|
public Oid getMechanism() { |
|
return cStub.getMech(); |
|
} |
|
|
|
public String toString() { |
|
|
|
return "N/A"; |
|
} |
|
|
|
protected void finalize() throws Throwable { |
|
dispose(); |
|
} |
|
|
|
@Override |
|
public GSSCredentialSpi impersonate(GSSNameSpi name) throws GSSException { |
|
throw new GSSException(GSSException.FAILURE, -1, |
|
"Not supported yet"); |
|
} |
|
} |