OW_AuthManager.cpp

Go to the documentation of this file.
00001 /*******************************************************************************
00002 * Copyright (C) 2001-2004 Vintela, Inc. All rights reserved.
00003 *
00004 * Redistribution and use in source and binary forms, with or without
00005 * modification, are permitted provided that the following conditions are met:
00006 *
00007 *  - Redistributions of source code must retain the above copyright notice,
00008 *    this list of conditions and the following disclaimer.
00009 *
00010 *  - Redistributions in binary form must reproduce the above copyright notice,
00011 *    this list of conditions and the following disclaimer in the documentation
00012 *    and/or other materials provided with the distribution.
00013 *
00014 *  - Neither the name of Vintela, Inc. nor the names of its
00015 *    contributors may be used to endorse or promote products derived from this
00016 *    software without specific prior written permission.
00017 *
00018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc. OR THE CONTRIBUTORS
00022 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00028 * POSSIBILITY OF SUCH DAMAGE.
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 // dumb aCC requires these to build
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 } // end namespace OW_NAMESPACE
00143 

Generated on Thu Feb 9 08:47:52 2006 for openwbem by  doxygen 1.4.6