version 1.2, 2001/12/13 14:54:33
|
version 1.8, 2002/06/01 00:57:28
|
|
|
//%//////////////////////////////////////////////////////////////////////////// |
//%///////////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001 BMC Software, Hewlett-Packard Company, IBM, |
// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM, |
// The Open Group, Tivoli Systems | // The Open Group, Tivoli Systems |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
|
|
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// | // |
//============================================================================= |
//============================================================================== |
// | // |
// Author: Sushma Fernandes, Hewlett Packard Company (sushma_fernandes@hp.com) | // Author: Sushma Fernandes, Hewlett Packard Company (sushma_fernandes@hp.com) |
// | // |
|
|
#include <Pegasus/Common/Destroyer.h> | #include <Pegasus/Common/Destroyer.h> |
#include <Pegasus/Common/System.h> | #include <Pegasus/Common/System.h> |
#include <Pegasus/Common/Tracer.h> | #include <Pegasus/Common/Tracer.h> |
|
#include <Pegasus/Common/PegasusVersion.h> |
|
|
#include <Pegasus/Security/UserManager/UserManager.h> | #include <Pegasus/Security/UserManager/UserManager.h> |
#include <Pegasus/Security/UserManager/UserExceptions.h> | #include <Pegasus/Security/UserManager/UserExceptions.h> |
| |
|
|
// | // |
UserManager::UserManager(CIMRepository* repository) | UserManager::UserManager(CIMRepository* repository) |
{ | { |
const char METHOD_NAME[] = "UserManager::UserManager"; |
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::UserManager"); |
|
|
PEG_FUNC_ENTER(TRC_USER_MANAGER, METHOD_NAME); |
|
| |
try | try |
{ | { |
_userFileHandler = 0; | _userFileHandler = 0; |
_userFileHandler = new UserFileHandler(); |
|
| |
|
#ifndef PEGASUS_NO_PASSWORDFILE |
|
_userFileHandler = new UserFileHandler(); |
|
#endif |
_authHandler = 0; | _authHandler = 0; |
_authHandler = new AuthorizationHandler(repository); | _authHandler = new AuthorizationHandler(repository); |
} | } |
|
|
delete _authHandler; | delete _authHandler; |
} | } |
| |
PEG_FUNC_EXIT(TRC_USER_MANAGER, METHOD_NAME); |
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
| |
PEG_FUNC_EXIT(TRC_USER_MANAGER, METHOD_NAME); |
PEG_METHOD_EXIT(); |
} | } |
| |
// | // |
|
|
// | // |
UserManager::~UserManager() | UserManager::~UserManager() |
{ | { |
const char METHOD_NAME[] = "UserManager::~UserManager"; |
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::~UserManager"); |
|
|
PEG_FUNC_ENTER(TRC_USER_MANAGER, METHOD_NAME); |
|
| |
|
if (_userFileHandler) |
|
{ |
delete _userFileHandler; | delete _userFileHandler; |
|
} |
|
if (_authHandler) |
|
{ |
delete _authHandler; | delete _authHandler; |
|
} |
| |
PEG_FUNC_EXIT(TRC_USER_MANAGER, METHOD_NAME); |
PEG_METHOD_EXIT(); |
} | } |
| |
// | // |
|
|
// | // |
UserManager* UserManager::getInstance(CIMRepository* repository) | UserManager* UserManager::getInstance(CIMRepository* repository) |
{ | { |
const char METHOD_NAME[] = "UserManager::getInstance"; |
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::getInstance"); |
| |
PEG_FUNC_ENTER(TRC_USER_MANAGER, METHOD_NAME); |
if (!_instance && !repository) |
|
{ |
|
PEG_METHOD_EXIT(); |
|
throw CannotCreateUserManagerInstance(); |
|
} |
| |
if (!_instance && repository) |
if (!_instance) |
{ | { |
_instance = new UserManager(repository); | _instance = new UserManager(repository); |
} | } |
| |
PEG_FUNC_EXIT(TRC_USER_MANAGER, METHOD_NAME); |
PEG_METHOD_EXIT(); |
| |
return _instance; | return _instance; |
} | } |
|
|
// | // |
void UserManager::addUser(const String& userName, const String& password) | void UserManager::addUser(const String& userName, const String& password) |
{ | { |
|
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::addUser"); |
| |
const char METHOD_NAME[] = "UserManager::addUser"; |
#ifndef PEGASUS_NO_PASSWORDFILE |
|
|
PEG_FUNC_ENTER( TRC_USER_MANAGER, METHOD_NAME ); |
|
|
|
// | // |
// Check if the user is a valid system user | // Check if the user is a valid system user |
// | // |
ArrayDestroyer<char> un(userName.allocateCString()); | ArrayDestroyer<char> un(userName.allocateCString()); |
if ( !System::isSystemUser( un.getPointer() ) ) | if ( !System::isSystemUser( un.getPointer() ) ) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
throw InvalidSystemUser(userName); | throw InvalidSystemUser(userName); |
} | } |
| |
|
|
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
|
#endif |
| |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
} | } |
| |
// | // |
|
|
const String& password, | const String& password, |
const String& newPassword ) | const String& newPassword ) |
{ | { |
const char METHOD_NAME[] = "UserManager::modifyUser"; |
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::modifyUser"); |
|
|
PEG_FUNC_ENTER( TRC_USER_MANAGER, METHOD_NAME ); |
|
| |
|
#ifndef PEGASUS_NO_PASSWORDFILE |
try | try |
{ | { |
_userFileHandler->modifyUserEntry(userName, password, newPassword); | _userFileHandler->modifyUserEntry(userName, password, newPassword); |
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
#endif |
|
|
|
PEG_METHOD_EXIT(); |
} | } |
| |
// | // |
|
|
// | // |
void UserManager::removeUser(const String& userName) | void UserManager::removeUser(const String& userName) |
{ | { |
const char METHOD_NAME[] = "UserManager::removeUser"; |
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::removeUser"); |
PEG_FUNC_ENTER( TRC_USER_MANAGER, METHOD_NAME ); |
|
|
#ifndef PEGASUS_NO_PASSWORDFILE |
try | try |
{ | { |
_userFileHandler->removeUserEntry(userName); | _userFileHandler->removeUserEntry(userName); |
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
|
#endif |
| |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
} | } |
| |
| |
|
|
// | // |
void UserManager::getAllUserNames(Array<String>& userNames) | void UserManager::getAllUserNames(Array<String>& userNames) |
{ | { |
const char METHOD_NAME[] = "UserManager::getAllUserNames"; |
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::getAllUserNames"); |
PEG_FUNC_ENTER( TRC_USER_MANAGER, METHOD_NAME ); |
|
| |
|
#ifndef PEGASUS_NO_PASSWORDFILE |
try | try |
{ | { |
_userFileHandler->getAllUserNames( userNames ); | _userFileHandler->getAllUserNames( userNames ); |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
throw e; | throw e; |
} | } |
|
#endif |
| |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
} | } |
| |
// | // |
|
|
// | // |
Boolean UserManager::verifyCIMUser (const String& userName) | Boolean UserManager::verifyCIMUser (const String& userName) |
{ | { |
const char METHOD_NAME[] = "UserManager::verifyCIMUser"; |
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::verifyCIMUser"); |
PEG_FUNC_ENTER( TRC_USER_MANAGER, METHOD_NAME ); |
|
| |
|
#ifndef PEGASUS_NO_PASSWORDFILE |
try | try |
{ | { |
if ( _userFileHandler->verifyCIMUser( userName )) | if ( _userFileHandler->verifyCIMUser( userName )) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
return true; | return true; |
} | } |
else | else |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
return false; | return false; |
} | } |
} | } |
|
catch (InvalidUser& iu) |
|
{ |
|
PEG_METHOD_EXIT(); |
|
throw iu; |
|
} |
catch (Exception& e) | catch (Exception& e) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
|
#else |
|
PEG_METHOD_EXIT(); |
|
return false; |
|
#endif |
} | } |
| |
// | // |
|
|
const String& userName, | const String& userName, |
const String& password) | const String& password) |
{ | { |
const char METHOD_NAME[] = "UserManager::verifyCIMUserPassword"; |
PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::verifyCIMUserPassword"); |
PEG_FUNC_ENTER( TRC_USER_MANAGER, METHOD_NAME ); |
|
| |
|
#ifndef PEGASUS_NO_PASSWORDFILE |
try | try |
{ | { |
if ( _userFileHandler->verifyCIMUserPassword( userName, password )) | if ( _userFileHandler->verifyCIMUserPassword( userName, password )) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
return true; | return true; |
} | } |
else | else |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
return false; | return false; |
} | } |
} | } |
|
catch (InvalidUser& iu) |
|
{ |
|
PEG_METHOD_EXIT(); |
|
throw iu; |
|
} |
catch (Exception& e) | catch (Exception& e) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
|
#else |
|
PEG_METHOD_EXIT(); |
|
return false; |
|
#endif |
} | } |
| |
// | // |
|
|
// | // |
Boolean UserManager::verifyNamespace( const String& myNamespace ) | Boolean UserManager::verifyNamespace( const String& myNamespace ) |
{ | { |
const char METHOD_NAME[] = "UserManager::verifyNamespace"; |
PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::verifyNamespace"); |
PEG_FUNC_ENTER( TRC_USER_MANAGER, METHOD_NAME ); |
|
| |
try | try |
{ | { |
if ( _authHandler->verifyNamespace( myNamespace )) | if ( _authHandler->verifyNamespace( myNamespace )) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
return true; | return true; |
} | } |
else | else |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
return false; | return false; |
} | } |
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
} | } |
|
|
const String& nameSpace, | const String& nameSpace, |
const String& cimMethodName) | const String& cimMethodName) |
{ | { |
const char METHOD_NAME[] = "UserManager::verifyAuthorization"; |
PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::verifyAuthorization"); |
PEG_FUNC_ENTER( TRC_USER_MANAGER, METHOD_NAME ); |
|
| |
try | try |
{ | { |
if ( _authHandler->verifyAuthorization( | if ( _authHandler->verifyAuthorization( |
userName, nameSpace, cimMethodName ) ) | userName, nameSpace, cimMethodName ) ) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
return true; | return true; |
} | } |
else | else |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
return false; | return false; |
} | } |
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
PEG_FUNC_EXIT( TRC_USER_MANAGER, METHOD_NAME ); |
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
} | } |
|
|
const String& myNamespace, | const String& myNamespace, |
const String& auth) | const String& auth) |
{ | { |
|
PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::setAuthorization"); |
|
|
try | try |
{ | { |
_authHandler->setAuthorization( userName, myNamespace, auth ); | _authHandler->setAuthorization( userName, myNamespace, auth ); |
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
|
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
|
|
|
PEG_METHOD_EXIT(); |
} | } |
| |
// | // |
|
|
const String& userName, | const String& userName, |
const String& myNamespace) | const String& myNamespace) |
{ | { |
|
PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::removeAuthorization"); |
|
|
try | try |
{ | { |
_authHandler->removeAuthorization( userName, myNamespace); | _authHandler->removeAuthorization( userName, myNamespace); |
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
|
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
|
|
|
PEG_METHOD_EXIT(); |
} | } |
| |
| |
|
|
const String& userName, | const String& userName, |
const String& myNamespace) | const String& myNamespace) |
{ | { |
|
PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::getAuthorization"); |
|
|
String auth = String::EMPTY; | String auth = String::EMPTY; |
| |
try | try |
|
|
} | } |
catch (Exception& e) | catch (Exception& e) |
{ | { |
|
PEG_METHOD_EXIT(); |
throw e; | throw e; |
} | } |
| |
|
PEG_METHOD_EXIT(); |
|
|
return auth; | return auth; |
} | } |
| |