81 lines
3.0 KiB
Diff
81 lines
3.0 KiB
Diff
# This patch resets the port of the primary address to zero when an IORInterceptor adds
|
|
# a TAG_CSI_SEC_MECH_LIST component with transport protection requirements (SSL), as it
|
|
# should be per the CSI v2 specification.
|
|
|
|
--- src/org/jacorb/orb/ORB.java 2009-05-03 18:35:55.000000000 -0300
|
|
+++ src/org/jacorb/orb/ORB.java 2009-07-28 13:53:08.390160147 -0300
|
|
@@ -61,6 +61,7 @@
|
|
import org.omg.CORBA.portable.BoxedValueHelper;
|
|
import org.omg.CORBA.portable.StreamableValue;
|
|
import org.omg.CORBA.portable.ValueFactory;
|
|
+import org.omg.CSIIOP.*;
|
|
import org.omg.ETF.Profile;
|
|
import org.omg.IOP.IOR;
|
|
import org.omg.IOP.MultipleComponentProfileHelper;
|
|
@@ -812,9 +813,19 @@
|
|
}
|
|
}
|
|
|
|
- // add GIOP 1.0 profile if necessary
|
|
-
|
|
+ // patch the primary address if SSL (or TLS) is required by the target.
|
|
IIOPProfile iiopProfile = findIIOPProfile(profiles);
|
|
+ if (iiopProfile != null)
|
|
+ {
|
|
+ TaggedComponentList components =
|
|
+ (TaggedComponentList)componentMap.get(ObjectUtil.newInteger(TAG_INTERNET_IOP.value));
|
|
+ if(this.isSSLRequiredInComponentList(components))
|
|
+ {
|
|
+ iiopProfile.patchPrimaryAddress(new IIOPAddress(null, 0));
|
|
+ }
|
|
+ }
|
|
+
|
|
+ // add GIOP 1.0 profile if necessary
|
|
if ( (iiopProfile != null)
|
|
&& ( this.giopMinorVersion == 0 || this.giopAdd_1_0_Profiles ))
|
|
{
|
|
@@ -863,6 +874,43 @@
|
|
return new IOR(repId, tps);
|
|
}
|
|
|
|
+ public boolean isSSLRequiredInComponentList(TaggedComponentList components)
|
|
+ {
|
|
+ int minimum_options = Integrity.value | Confidentiality.value |
|
|
+ DetectReplay.value | DetectMisordering.value;
|
|
+
|
|
+ if(components == null)
|
|
+ {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ CompoundSecMechList csmList =
|
|
+ (CompoundSecMechList)components.getComponent(
|
|
+ TAG_CSI_SEC_MECH_LIST.value,
|
|
+ CompoundSecMechListHelper.class);
|
|
+
|
|
+ if (csmList != null && csmList.mechanism_list.length > 0 &&
|
|
+ csmList.mechanism_list[0].transport_mech.tag ==
|
|
+ TAG_TLS_SEC_TRANS.value)
|
|
+ {
|
|
+ byte[] tlsSecTransData =
|
|
+ csmList.mechanism_list[0].transport_mech.component_data;
|
|
+ CDRInputStream in =
|
|
+ new CDRInputStream((org.omg.CORBA.ORB)null, tlsSecTransData);
|
|
+ try
|
|
+ {
|
|
+ in.openEncapsulatedArray();
|
|
+ TLS_SEC_TRANS tls = TLS_SEC_TRANSHelper.read(in);
|
|
+ return (tls.target_requires & minimum_options) != 0;
|
|
+ }
|
|
+ catch ( Exception ex )
|
|
+ {
|
|
+ throw new INTERNAL(ex.toString());
|
|
+ }
|
|
+ }
|
|
+ return false;
|
|
+ }
|
|
+
|
|
private TaggedProfile createMultipleComponentsProfile
|
|
(TaggedComponentList components)
|
|
{
|