00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #include "OW_config.h"
00037 #include "OW_AuthManager.hpp"
00038 #include "OW_Format.hpp"
00039 #include "OW_ConfigOpts.hpp"
00040 #include "OW_SafeLibCreate.hpp"
00041 #include "OW_ThreadCancelledException.hpp"
00042 #include "OW_ExceptionIds.hpp"
00043 #include "OW_AuthenticatorIFC.hpp"
00044 #include "OW_ServiceIFCNames.hpp"
00045
00046 #include "OW_Array.hpp"
00047
00048 namespace OW_NAMESPACE
00049 {
00050
00051 OW_DEFINE_EXCEPTION_WITH_ID(AuthManager)
00052
00053 namespace
00054 {
00055 const String COMPONENT_NAME("ow.owcimomd.AuthManager");
00056 }
00057
00059 AuthManager::AuthManager()
00060 : m_authenticator()
00061 {
00062 }
00064 AuthManager::~AuthManager()
00065 {
00066 }
00068 String
00069 AuthManager::getName() const
00070 {
00071 return ServiceIFCNames::AuthManager;
00072 }
00074 void
00075 AuthManager::init(const ServiceEnvironmentIFCRef& env)
00076 {
00077 m_authenticator.setNull();
00078 String authLib = env->getConfigItem(ConfigOpts::AUTHENTICATION_MODULE_opt, OW_DEFAULT_AUTHENTICATION_MODULE);
00079 LoggerRef logger(env->getLogger(COMPONENT_NAME));
00080 OW_LOG_INFO(logger, Format("Authentication Manager: Loading"
00081 " authentication module %1", authLib));
00082 m_authenticator =
00083 SafeLibCreate<AuthenticatorIFC>::loadAndCreateObject(authLib,
00084 "createAuthenticator", logger);
00085 if (m_authenticator)
00086 {
00087 try
00088 {
00089 m_authenticator->init(env);
00090 OW_LOG_INFO(logger, Format("Authentication module %1"
00091 " is now being used for authentication to the CIMOM",
00092 authLib));
00093 }
00094 catch(Exception& e)
00095 {
00096 OW_LOG_FATAL_ERROR(logger, Format("Authentication Module %1 failed"
00097 " to initialize: %2 - %3"
00098 " [No Authentication Mechanism Available!]", authLib, e.type(),
00099 e.getMessage()));
00100 OW_THROW(AuthManagerException, "No Authentication Mechanism Available");
00101 }
00102 catch (ThreadCancelledException&)
00103 {
00104 throw;
00105 }
00106 catch(...)
00107 {
00108 OW_LOG_FATAL_ERROR(logger, Format("Authentication Module %1 failed"
00109 " to initialize: Unknown Exception Caught"
00110 " [No Authentication Mechanism Available!]", authLib));
00111 OW_THROW(AuthManagerException, "No Authentication Mechanism Available");
00112 }
00113 }
00114 else
00115 {
00116 OW_LOG_FATAL_ERROR(logger, Format("Authentication Module %1 failed"
00117 " to produce authentication module"
00118 " [No Authentication Mechanism Available!]", authLib));
00119 OW_THROW(AuthManagerException, "No Authentication Mechanism Available");
00120 }
00121 }
00123 bool
00124 AuthManager::authenticate(String& userName,
00125 const String& info, String& details, OperationContext& context)
00126 {
00127 if (m_authenticator)
00128 {
00129 return m_authenticator->authenticate(userName, info, details, context);
00130 }
00131 details = "CIMOM has no available authentication mechanism";
00132 return false;
00133 }
00134
00136 void
00137 AuthManager::shutdown()
00138 {
00139 m_authenticator.setNull();
00140 }
00141
00142 }
00143