djencks 2005/11/22 23:04:14
Modified: modules/core/src/java/org/openejb/corba/security/config/tss
TSSITTDistinguishedName.java
TSSITTPrincipalNameGSSUP.java TSSSASMechConfig.java
Log:
GERONIMO-1122 Support 3 levels of principal wrapping. I did not change the
schema version.
Revision Changes Path
1.5 +8 -14
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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TSSITTDistinguishedName.java 27 Oct 2005 19:10:12 -0000 1.4
+++ TSSITTDistinguishedName.java 23 Nov 2005 04:04:14 -0000 1.5
@@ -101,23 +101,17 @@
}
byte[] principalNameBytes = X501DistinguishedNameHelper.extract(any);
+ Subject subject = new Subject();
X500Principal x500Principal = new X500Principal(principalNameBytes);
- Principal principal = null;
- Principal primaryPrincipal = null;
+ subject.getPrincipals().add(x500Principal);
if (realmName != null && domainName != null) {
- principal = new RealmPrincipal(realmName, domainName,
x500Principal);
- primaryPrincipal = new PrimaryRealmPrincipal(realmName,
domainName, x500Principal);
- } else if (domainName != null) {
- principal = new DomainPrincipal(domainName, x500Principal);
- primaryPrincipal = new PrimaryDomainPrincipal(domainName,
x500Principal);
+ subject.getPrincipals().add(new RealmPrincipal(realmName,
domainName, x500Principal));
+ subject.getPrincipals().add(new PrimaryRealmPrincipal(realmName,
domainName, x500Principal));
}
-
- Subject subject = new Subject();
- subject.getPrincipals().add(x500Principal);
- if (principal != null) {
- subject.getPrincipals().add(principal);
- subject.getPrincipals().add(primaryPrincipal);
+ if (domainName != null) {
+ subject.getPrincipals().add(new DomainPrincipal(domainName,
x500Principal));
+ subject.getPrincipals().add(new
PrimaryDomainPrincipal(domainName, x500Principal));
}
return subject;
1.4 +38 -22
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.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TSSITTPrincipalNameGSSUP.java 27 Oct 2005 19:10:12 -0000 1.3
+++ TSSITTPrincipalNameGSSUP.java 23 Nov 2005 04:04:14 -0000 1.4
@@ -47,9 +47,15 @@
*/
package org.openejb.corba.security.config.tss;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.security.Principal;
import javax.security.auth.Subject;
+import org.apache.geronimo.security.DomainPrincipal;
+import org.apache.geronimo.security.PrimaryDomainPrincipal;
+import org.apache.geronimo.security.PrimaryRealmPrincipal;
+import org.apache.geronimo.security.RealmPrincipal;
import org.omg.CORBA.Any;
import org.omg.CSI.GSS_NT_ExportedNameHelper;
import org.omg.CSI.ITTPrincipalName;
@@ -57,13 +63,6 @@
import org.omg.GSSUP.GSSUPMechOID;
import org.omg.IOP.CodecPackage.FormatMismatch;
import org.omg.IOP.CodecPackage.TypeMismatch;
-
-import org.apache.geronimo.security.DomainPrincipal;
-import org.apache.geronimo.security.PrimaryDomainPrincipal;
-import org.apache.geronimo.security.PrimaryRealmPrincipal;
-import org.apache.geronimo.security.RealmPrincipal;
-import org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal;
-
import org.openejb.corba.security.SASException;
import org.openejb.corba.util.Util;
@@ -74,12 +73,22 @@
public class TSSITTPrincipalNameGSSUP extends TSSSASIdentityToken {
public static final String OID = GSSUPMechOID.value.substring(4);
+ private final Class principalClass;
+ private transient Constructor constructor;
private final String realmName;
private final String domainName;
- public TSSITTPrincipalNameGSSUP(String realmName, String domainName) {
+ public TSSITTPrincipalNameGSSUP(Class principalClass, String realmName,
String domainName) throws NoSuchMethodException {
+ this.principalClass = principalClass;
this.realmName = realmName;
this.domainName = domainName;
+ getConstructor();
+ }
+
+ private void getConstructor() throws NoSuchMethodException {
+ if (constructor == null && principalClass != null) {
+ constructor = principalClass.getConstructor(new
Class[]{String.class});
+ }
}
public short getType() {
@@ -91,6 +100,7 @@
}
public Subject check(IdentityToken identityToken) throws SASException {
+ assert principalClass != null;
byte[] principalNameToken = identityToken.principal_name();
Any any = null;
try {
@@ -102,23 +112,29 @@
}
byte[] principalNameBytes = GSS_NT_ExportedNameHelper.extract(any);
String principalName = Util.decodeGSSExportName(principalNameBytes);
- Principal basePrincipal = new GeronimoUserPrincipal(principalName);
- Principal principal = null;
- Principal primaryPrincipal = null;
-
- if (realmName != null && domainName != null) {
- principal = new RealmPrincipal(realmName, domainName,
basePrincipal);
- primaryPrincipal = new PrimaryRealmPrincipal(realmName,
domainName, basePrincipal);
- } else if (domainName != null) {
- principal = new DomainPrincipal(domainName, basePrincipal);
- primaryPrincipal = new PrimaryDomainPrincipal(domainName,
basePrincipal);
+ Principal basePrincipal = null;
+ try {
+ getConstructor();
+ basePrincipal = (Principal) constructor.newInstance(new
Object[]{principalName});
+ } catch (InstantiationException e) {
+ throw new SASException(1, e);
+ } catch (IllegalAccessException e) {
+ throw new SASException(1, e);
+ } catch (InvocationTargetException e) {
+ throw new SASException(1, e);
+ } catch (NoSuchMethodException e) {
+ throw new SASException(1, e);
}
Subject subject = new Subject();
subject.getPrincipals().add(basePrincipal);
- if (principal != null) {
- subject.getPrincipals().add(principal);
- subject.getPrincipals().add(primaryPrincipal);
+ if (realmName != null && domainName != null) {
+ subject.getPrincipals().add(new RealmPrincipal(realmName,
domainName, basePrincipal));
+ subject.getPrincipals().add(new PrimaryRealmPrincipal(realmName,
domainName, basePrincipal));
+ }
+ if (domainName != null) {
+ subject.getPrincipals().add(new DomainPrincipal(domainName,
basePrincipal));
+ subject.getPrincipals().add(new
PrimaryDomainPrincipal(domainName, basePrincipal));
}
return subject;
1.7 +2 -2
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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- TSSSASMechConfig.java 27 Oct 2005 19:10:12 -0000 1.6
+++ TSSSASMechConfig.java 23 Nov 2005 04:04:14 -0000 1.7
@@ -97,7 +97,7 @@
//TODO is this needed?
if (TSSITTPrincipalNameGSSUP.OID.equals(oid)) {
//TODO this doesn't make sense if we plan to use this for
identity check.
- addIdentityToken(new TSSITTPrincipalNameGSSUP(null, null));
+ addIdentityToken(new TSSITTPrincipalNameGSSUP(null, null,
null));
}
}