djencks 2005/06/17 03:25:10
Modified: modules/core/src/java/org/openejb/corba/security/config/tss
TSSITTAbsent.java TSSITTAnonymous.java
TSSITTDistinguishedName.java
TSSITTPrincipalNameGSSUP.java
TSSITTX509CertChain.java TSSSASIdentityToken.java
TSSSASMechConfig.java
Log:
Make CSS ITT principal get subject from ContextManager. Implement SAS layer
principal identity propagation
Revision Changes Path
1.2 +9 -1
openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTAbsent.java
Index: TSSITTAbsent.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTAbsent.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TSSITTAbsent.java 23 Apr 2005 18:44:30 -0000 1.1
+++ TSSITTAbsent.java 17 Jun 2005 07:25:10 -0000 1.2
@@ -47,7 +47,11 @@
*/
package org.openejb.corba.security.config.tss;
+import javax.security.auth.Subject;
+
import org.omg.CSI.ITTAbsent;
+import org.omg.CSI.IdentityToken;
+import org.openejb.corba.security.SASException;
/**
@@ -63,5 +67,9 @@
public String getOID() {
return OID;
+ }
+
+ public Subject check(IdentityToken identityToken) throws SASException {
+ return null;
}
}
1.2 +10 -1
openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTAnonymous.java
Index: TSSITTAnonymous.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTAnonymous.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TSSITTAnonymous.java 23 Apr 2005 18:43:49 -0000 1.1
+++ TSSITTAnonymous.java 17 Jun 2005 07:25:10 -0000 1.2
@@ -47,7 +47,11 @@
*/
package org.openejb.corba.security.config.tss;
+import javax.security.auth.Subject;
+
import org.omg.CSI.ITTAnonymous;
+import org.omg.CSI.IdentityToken;
+import org.openejb.corba.security.SASException;
/**
@@ -63,5 +67,10 @@
public String getOID() {
return OID;
+ }
+
+ public Subject check(IdentityToken identityToken) throws SASException {
+ //TODO figure out if this is correct
+ return null;
}
}
1.2 +9 -1
openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTDistinguishedName.java
Index: TSSITTDistinguishedName.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTDistinguishedName.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TSSITTDistinguishedName.java 24 Apr 2005 04:37:12 -0000 1.1
+++ TSSITTDistinguishedName.java 17 Jun 2005 07:25:10 -0000 1.2
@@ -47,7 +47,11 @@
*/
package org.openejb.corba.security.config.tss;
+import javax.security.auth.Subject;
+
import org.omg.CSI.ITTDistinguishedName;
+import org.omg.CSI.IdentityToken;
+import org.openejb.corba.security.SASException;
/**
@@ -63,5 +67,9 @@
public String getOID() {
return OID;
+ }
+
+ public Subject check(IdentityToken identityToken) throws SASException {
+ throw new SASException(1, new Exception("NYI -- distinguished name
identity token"));
}
}
1.2 +41 -1
openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTPrincipalNameGSSUP.java
Index: TSSITTPrincipalNameGSSUP.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTPrincipalNameGSSUP.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TSSITTPrincipalNameGSSUP.java 23 Apr 2005 18:43:49 -0000 1.1
+++ TSSITTPrincipalNameGSSUP.java 17 Jun 2005 07:25:10 -0000 1.2
@@ -47,8 +47,21 @@
*/
package org.openejb.corba.security.config.tss;
+import java.security.Principal;
+import javax.security.auth.Subject;
+
import org.omg.CSI.ITTPrincipalName;
+import org.omg.CSI.IdentityToken;
+import org.omg.CSI.GSS_NT_ExportedNameHelper;
import org.omg.GSSUP.GSSUPMechOID;
+import org.omg.CORBA.Any;
+import org.omg.IOP.CodecPackage.FormatMismatch;
+import org.omg.IOP.CodecPackage.TypeMismatch;
+import org.openejb.corba.security.SASException;
+import org.openejb.corba.util.Util;
+import org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal;
+import org.apache.geronimo.security.RealmPrincipal;
+import org.apache.geronimo.security.PrimaryRealmPrincipal;
/**
@@ -57,6 +70,11 @@
public class TSSITTPrincipalNameGSSUP extends TSSSASIdentityToken {
public static final String OID = GSSUPMechOID.value.substring(4);
+ private final String realmName;
+
+ public TSSITTPrincipalNameGSSUP(String realmName) {
+ this.realmName = realmName;
+ }
public short getType() {
return ITTPrincipalName.value;
@@ -64,5 +82,27 @@
public String getOID() {
return OID;
+ }
+
+ public Subject check(IdentityToken identityToken) throws SASException {
+ byte[] principalNameToken = identityToken.principal_name();
+ Any any = null;
+ try {
+ any = Util.getCodec().decode_value(principalNameToken,
GSS_NT_ExportedNameHelper.type());
+ } catch (FormatMismatch formatMismatch) {
+ throw new SASException(1, formatMismatch);
+ } catch (TypeMismatch typeMismatch) {
+ throw new SASException(1, typeMismatch);
+ }
+ byte[] principalNameBytes = GSS_NT_ExportedNameHelper.extract(any);
+ String principalName = Util.decodeGSSExportName(principalNameBytes);
+ Principal basePrincipal = new GeronimoUserPrincipal(principalName);
+ Principal realmPrincipal = new RealmPrincipal(realmName,
basePrincipal);
+ Principal primaryRealmPrincipal = new
PrimaryRealmPrincipal(realmName, basePrincipal);
+ Subject subject = new Subject();
+ subject.getPrincipals().add(basePrincipal);
+ subject.getPrincipals().add(realmPrincipal);
+ subject.getPrincipals().add(primaryRealmPrincipal);
+ return subject;
}
}
1.2 +10 -2
openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTX509CertChain.java
Index: TSSITTX509CertChain.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSITTX509CertChain.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TSSITTX509CertChain.java 24 Apr 2005 04:37:12 -0000 1.1
+++ TSSITTX509CertChain.java 17 Jun 2005 07:25:10 -0000 1.2
@@ -47,7 +47,11 @@
*/
package org.openejb.corba.security.config.tss;
+import javax.security.auth.Subject;
+
import org.omg.CSI.ITTX509CertChain;
+import org.omg.CSI.IdentityToken;
+import org.openejb.corba.security.SASException;
/**
@@ -56,12 +60,16 @@
public class TSSITTX509CertChain extends TSSSASIdentityToken {
public static final String OID = "";
-
+
public short getType() {
return ITTX509CertChain.value;
}
public String getOID() {
return OID;
+ }
+
+ public Subject check(IdentityToken identityToken) throws SASException {
+ throw new SASException(1, new Exception("NYI -- cert chain identity
token"));
}
}
1.3 +8 -1
openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSSASIdentityToken.java
Index: TSSSASIdentityToken.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSSASIdentityToken.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TSSSASIdentityToken.java 24 Apr 2005 03:25:59 -0000 1.2
+++ TSSSASIdentityToken.java 17 Jun 2005 07:25:10 -0000 1.3
@@ -48,6 +48,10 @@
package org.openejb.corba.security.config.tss;
import java.io.Serializable;
+import javax.security.auth.Subject;
+
+import org.omg.CSI.IdentityToken;
+import org.openejb.corba.security.SASException;
/**
@@ -59,6 +63,8 @@
public abstract String getOID();
+ public abstract Subject check(IdentityToken identityToken) throws
SASException;
+
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof TSSSASIdentityToken)) return false;
@@ -76,4 +82,5 @@
result = 29 * result + (int) getType();
return result;
}
+
}
1.5 +63 -10
openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSSASMechConfig.java
Index: TSSSASMechConfig.java
===================================================================
RCS file:
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/corba/security/config/tss/TSSSASMechConfig.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TSSSASMechConfig.java 23 Apr 2005 18:44:30 -0000 1.4
+++ TSSSASMechConfig.java 17 Jun 2005 07:25:10 -0000 1.5
@@ -49,20 +49,20 @@
import java.io.Serializable;
import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.HashMap;
import java.util.Iterator;
-import java.util.Set;
+import java.util.Map;
import javax.security.auth.Subject;
import org.omg.CORBA.ORB;
import org.omg.CSI.EstablishContext;
import org.omg.CSI.ITTPrincipalName;
+import org.omg.CSI.IdentityToken;
import org.omg.CSIIOP.DelegationByClient;
import org.omg.CSIIOP.IdentityAssertion;
import org.omg.CSIIOP.SAS_ContextSec;
import org.omg.CSIIOP.ServiceConfiguration;
import org.omg.IOP.Codec;
-
import org.openejb.corba.security.SASException;
import org.openejb.corba.util.Util;
@@ -76,7 +76,7 @@
private short requires;
private boolean required;
private final ArrayList privilegeAuthorities = new ArrayList();
- private final Set idTokens = new HashSet();
+ private final Map idTokens = new HashMap();
public TSSSASMechConfig() {
}
@@ -94,8 +94,10 @@
for (int i = 0; i < n.length; i++) {
String oid = Util.decodeOID(n[i]);
+ //TODO is this needed?
if (TSSITTPrincipalNameGSSUP.OID.equals(oid)) {
- addIdentityToken(new TSSITTPrincipalNameGSSUP());
+ //TODO this doesn't make sense if we plan to use this for
identity check.
+ addIdentityToken(new TSSITTPrincipalNameGSSUP(null));
}
}
@@ -119,7 +121,7 @@
}
public void addIdentityToken(TSSSASIdentityToken token) {
- idTokens.add(token);
+ idTokens.put(new Integer(token.getType()), token);
if (token.getType() > 0) supports |= IdentityAssertion.value;
}
@@ -152,7 +154,7 @@
}
ArrayList list = new ArrayList();
- for (Iterator iter = idTokens.iterator(); iter.hasNext();) {
+ for (Iterator iter = idTokens.values().iterator(); iter.hasNext();) {
TSSSASIdentityToken token = (TSSSASIdentityToken) iter.next();
if (token.getType() == ITTPrincipalName.value) {
@@ -176,8 +178,59 @@
}
public Subject check(EstablishContext msg) throws SASException {
- Subject result = null;
+// Subject result = null;
- return result;
+// try {
+ if (msg.identity_token != null) {
+ IdentityToken identityToken = msg.identity_token;
+ int discriminator = identityToken.discriminator();
+ TSSSASIdentityToken tssIdentityToken = (TSSSASIdentityToken)
idTokens.get(new Integer(discriminator));
+ if (tssIdentityToken == null) {
+ throw new SASException(1, new Exception("Unsupported
IdentityTokenType: " + discriminator));
+ } else {
+ return tssIdentityToken.check(identityToken);
+ }
+ } else {
+ return null;
+ }
+// switch (discriminator) {
+// case org.omg.CSI.ITTAbsent.value:
+// break;
+// case org.omg.CSI.ITTAnonymous.value:
+// //TODO implement this one or figure out if this is
correct???
+// break;
+// case ITTPrincipalName.value:
+// byte[] principalNameToken =
identityToken.principal_name();
+// Any any =
Util.getCodec().decode_value(principalNameToken,
GSS_NT_ExportedNameHelper.type());
+// byte[] principalNameBytes =
GSS_NT_ExportedNameHelper.extract(any);
+// String principalName =
Util.decodeGSSExportName(principalNameBytes);
+// Principal basePrincipal = new
GeronimoUserPrincipal(principalName);
+// //TODO parameterize or otherwise select realm name
+// Principal wrappedPrincipal = new
RealmPrincipal("cts-properties-realm", basePrincipal);
+// result = new Subject();
+// result.getPrincipals().add(basePrincipal);
+// result.getPrincipals().add(wrappedPrincipal);
+// break;
+// case org.omg.CSI.ITTX509CertChain.value:
+// byte[] ccChainBytes =
identityToken.certificate_chain();
+// //TODO implement this one
+// throw new SASException(1, new Exception("NYI --
cert chain identity token"));
+// case org.omg.CSI.ITTDistinguishedName.value:
+// //TODO implement this one
+// throw new SASException(1, new Exception("NYI --
distinguished name identity token"));
+// default:
+// throw new SASException(1);
+// }
+//
+// }
+// } catch (TypeMismatch typeMismatch) {
+// throw new SASException(1, typeMismatch);
+// } catch (FormatMismatch formatMismatch) {
+// throw new SASException(1, formatMismatch);
+//// } catch (UnsupportedEncodingException e) {
+//// throw new SASException(1, e);
+// }
+//
+// return result;
}
}