00001
00002
00003 #include "orbsvcs/Security/Security_PolicyFactory.h"
00004
00005 ACE_RCSID (Security,
00006 Security_PolicyFactory,
00007 "$Id: Security_PolicyFactory.cpp 77001 2007-02-12 07:54:49Z johnnyw $")
00008
00009 #include "orbsvcs/Security/SL2_QOPPolicy.h"
00010 #include "orbsvcs/Security/SL2_EstablishTrustPolicy.h"
00011
00012 #include "orbsvcs/Security/SL3_ContextEstablishmentPolicy.h"
00013 #include "orbsvcs/Security/SL3_ObjectCredentialsPolicy.h"
00014
00015 #include "orbsvcs/SecurityLevel2C.h"
00016 #include "orbsvcs/SecurityLevel3C.h"
00017
00018 #include "tao/ORB_Constants.h"
00019
00020 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00021
00022 CORBA::Policy_ptr
00023 TAO::Security::PolicyFactory::create_policy (
00024 CORBA::PolicyType type,
00025 const CORBA::Any &value)
00026 {
00027
00028
00029
00030
00031 if (type == ::Security::SecQOPPolicy)
00032 {
00033 ::Security::QOP qop;
00034
00035
00036
00037 if (!(value >>= qop))
00038 throw CORBA::BAD_PARAM (
00039 CORBA::SystemException::_tao_minor_code (
00040 TAO::VMCID,
00041 EINVAL),
00042 CORBA::COMPLETED_NO);
00043
00044 TAO::Security::QOPPolicy * qop_policy = 0;
00045 ACE_NEW_THROW_EX (qop_policy,
00046 TAO::Security::QOPPolicy (qop),
00047 CORBA::NO_MEMORY (
00048 CORBA::SystemException::_tao_minor_code (
00049 TAO::VMCID,
00050 ENOMEM),
00051 CORBA::COMPLETED_NO));
00052
00053 return qop_policy;
00054 }
00055
00056 else if (type == ::Security::SecEstablishTrustPolicy)
00057 {
00058 ::Security::EstablishTrust *trust = 0;
00059
00060
00061
00062 if (!(value >>= trust))
00063 throw CORBA::BAD_PARAM (
00064 CORBA::SystemException::_tao_minor_code (
00065 TAO::VMCID,
00066 EINVAL),
00067 CORBA::COMPLETED_NO);
00068
00069 TAO::Security::EstablishTrustPolicy * trust_policy = 0;
00070 ACE_NEW_THROW_EX (trust_policy,
00071 TAO::Security::EstablishTrustPolicy (*trust),
00072 CORBA::NO_MEMORY (
00073 CORBA::SystemException::_tao_minor_code (
00074 TAO::VMCID,
00075 ENOMEM),
00076 CORBA::COMPLETED_NO));
00077
00078 return trust_policy;
00079 }
00080
00081 else if (type == SecurityLevel3::ContextEstablishmentPolicyType)
00082 {
00083 SecurityLevel3::ContextEstablishmentPolicyArgument * args = 0;
00084
00085
00086
00087 if (!(value >>= args))
00088 throw CORBA::BAD_PARAM (
00089 CORBA::SystemException::_tao_minor_code (
00090 TAO::VMCID,
00091 EINVAL),
00092 CORBA::COMPLETED_NO);
00093
00094 TAO::SL3::ContextEstablishmentPolicy * policy = 0;
00095 ACE_NEW_THROW_EX (policy,
00096 TAO::SL3::ContextEstablishmentPolicy (
00097 args->creds_directive,
00098 args->creds_list,
00099 args->use_client_auth,
00100 args->use_target_auth,
00101 args->use_confidentiality,
00102 args->use_integrity),
00103 CORBA::NO_MEMORY (
00104 CORBA::SystemException::_tao_minor_code (
00105 TAO::VMCID,
00106 ENOMEM),
00107 CORBA::COMPLETED_NO));
00108
00109 return policy;
00110 }
00111
00112 else if (type == SecurityLevel3::ObjectCredentialsPolicyType)
00113 {
00114 SecurityLevel3::OwnCredentialsList * creds = 0;
00115
00116
00117
00118 if (!(value >>= creds))
00119 throw CORBA::BAD_PARAM (
00120 CORBA::SystemException::_tao_minor_code (
00121 TAO::VMCID,
00122 EINVAL),
00123 CORBA::COMPLETED_NO);
00124
00125 TAO::SL3::ObjectCredentialsPolicy * policy = 0;
00126 ACE_NEW_THROW_EX (policy,
00127 TAO::SL3::ObjectCredentialsPolicy (*creds),
00128 CORBA::NO_MEMORY (
00129 CORBA::SystemException::_tao_minor_code (
00130 TAO::VMCID,
00131 ENOMEM),
00132 CORBA::COMPLETED_NO));
00133
00134 return policy;
00135 }
00136
00137 else if (type == ::Security::SecInvocationCredentialsPolicy
00138 || type == ::Security::SecMechanismsPolicy
00139 || type == ::Security::SecFeaturePolicy
00140 || type == ::Security::SecDelegationDirectivePolicy)
00141 throw CORBA::PolicyError (CORBA::UNSUPPORTED_POLICY);
00142 else
00143 throw CORBA::PolicyError (CORBA::BAD_POLICY_TYPE);
00144 }
00145
00146 TAO_END_VERSIONED_NAMESPACE_DECL