00001
00002
00003 #include "orbsvcs/Security/SL3_PolicyFactory.h"
00004 #include "orbsvcs/Security/SL3_ContextEstablishmentPolicy.h"
00005 #include "orbsvcs/Security/SL3_ObjectCredentialsPolicy.h"
00006
00007
00008 ACE_RCSID (Security,
00009 SL3_PolicyFactory,
00010 "SL3_PolicyFactory.cpp,v 1.4 2006/03/14 06:14:35 jtc Exp")
00011
00012
00013 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00014
00015 CORBA::Policy_ptr
00016 TAO::SL3::PolicyFactory::create_policy (CORBA::PolicyType type,
00017 const CORBA::Any & value
00018 ACE_ENV_ARG_DECL)
00019 ACE_THROW_SPEC ((CORBA::SystemException,
00020 CORBA::PolicyError))
00021 {
00022 CORBA::Policy_ptr policy = CORBA::Policy::_nil ();
00023
00024 if (type == SecurityLevel3::ContextEstablishmentPolicyType)
00025 {
00026 SecurityLevel3::ContextEstablishmentPolicyArgument * arg = 0;
00027 if (!(value >>= arg))
00028 ACE_THROW_RETURN (CORBA::INTERNAL (),
00029 policy);
00030
00031 ACE_NEW_THROW_EX (policy,
00032 TAO::SL3::ContextEstablishmentPolicy (
00033 arg->creds_directive,
00034 arg->creds_list,
00035 arg->use_client_auth,
00036 arg->use_target_auth,
00037 arg->use_confidentiality,
00038 arg->use_integrity),
00039 CORBA::NO_MEMORY ());
00040 ACE_CHECK_RETURN (policy);
00041 }
00042 else if (type == SecurityLevel3::ObjectCredentialsPolicyType)
00043 {
00044 SecurityLevel3::ObjectCredentialsPolicyArgument * creds = 0;
00045 if (!(value >>= creds))
00046 ACE_THROW_RETURN (CORBA::INTERNAL (),
00047 policy);
00048
00049 ACE_NEW_THROW_EX (policy,
00050 TAO::SL3::ObjectCredentialsPolicy (*creds),
00051 CORBA::NO_MEMORY ());
00052 ACE_CHECK_RETURN (policy);
00053 }
00054 else
00055 {
00056 ACE_THROW_RETURN (CORBA::PolicyError (CORBA::BAD_POLICY_TYPE),
00057 policy);
00058 }
00059
00060 return policy;
00061 }
00062
00063 TAO_END_VERSIONED_NAMESPACE_DECL