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