version 1.194, 2006/11/08 21:00:57
|
version 1.195, 2006/11/14 18:34:59
|
|
|
#include <Pegasus/Common/PegasusVersion.h> | #include <Pegasus/Common/PegasusVersion.h> |
#include <Pegasus/Common/SSLContextManager.h> | #include <Pegasus/Common/SSLContextManager.h> |
#include <Pegasus/Common/Time.h> | #include <Pegasus/Common/Time.h> |
|
#include <Pegasus/Common/MessageLoader.h> |
| |
#include <Pegasus/Repository/CIMRepository.h> | #include <Pegasus/Repository/CIMRepository.h> |
#include <Pegasus/ExportServer/CIMExportRequestDispatcher.h> | #include <Pegasus/ExportServer/CIMExportRequestDispatcher.h> |
|
|
#include "ShutdownService.h" | #include "ShutdownService.h" |
#include "BinaryMessageHandler.h" | #include "BinaryMessageHandler.h" |
#include <Pegasus/Common/ModuleController.h> | #include <Pegasus/Common/ModuleController.h> |
#include <Pegasus/ControlProviders/ConfigSettingProvider/ConfigSettingProvider.h> |
#include \ |
|
<Pegasus/ControlProviders/ConfigSettingProvider/ConfigSettingProvider.h> |
#include <Pegasus/ControlProviders/UserAuthProvider/UserAuthProvider.h> | #include <Pegasus/ControlProviders/UserAuthProvider/UserAuthProvider.h> |
#include <Pegasus/ControlProviders/ProviderRegistrationProvider/ProviderRegistrationProvider.h> | #include <Pegasus/ControlProviders/ProviderRegistrationProvider/ProviderRegistrationProvider.h> |
#include <Pegasus/ControlProviders/NamespaceProvider/NamespaceProvider.h> | #include <Pegasus/ControlProviders/NamespaceProvider/NamespaceProvider.h> |
|
|
#include <Pegasus/ControlProviders/InteropProvider/InteropProvider.h> | #include <Pegasus/ControlProviders/InteropProvider/InteropProvider.h> |
#endif | #endif |
| |
// l10n |
|
#include <Pegasus/Common/MessageLoader.h> |
|
|
|
|
|
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
static CIMServer *_cimserver = NULL; | static CIMServer *_cimserver = NULL; |
|
|
} | } |
| |
// | // |
// |
|
// z/OS console interface waiting for operator stop command | // z/OS console interface waiting for operator stop command |
// | // |
#if defined PEGASUS_PLATFORM_ZOS_ZSERIES_IBM | #if defined PEGASUS_PLATFORM_ZOS_ZSERIES_IBM |
|
|
| |
do | do |
{ | { |
rc = __console(&cons, |
rc = __console(&cons, modstr, &concmd); |
modstr, |
|
&concmd ); |
|
| |
if (rc != 0) | if (rc != 0) |
{ | { |
|
|
{ | { |
// Just issue a console message that the command was | // Just issue a console message that the command was |
// not recognized and wait again for the stop command. | // not recognized and wait again for the stop command. |
Logger::put_l(Logger::STANDARD_LOG, "CIM Server", Logger::INFORMATION, |
Logger::put_l( |
|
Logger::STANDARD_LOG, "CIM Server", Logger::INFORMATION, |
"Server.CIMServer.CONSOLE_NO_MODIFY.PEGASUS_OS_ZOS", | "Server.CIMServer.CONSOLE_NO_MODIFY.PEGASUS_OS_ZOS", |
"MODIFY command not recognized by CIM server."); | "MODIFY command not recognized by CIM server."); |
|
} |
} else |
else |
{ | { |
Logger::put_l(Logger::STANDARD_LOG, "CIM Server", Logger::INFORMATION, |
Logger::put_l( |
|
Logger::STANDARD_LOG, "CIM Server", Logger::INFORMATION, |
"Server.CIMServer.CONSOLE_STOP.PEGASUS_OS_ZOS", | "Server.CIMServer.CONSOLE_STOP.PEGASUS_OS_ZOS", |
"STOP command received from z/OS console," | "STOP command received from z/OS console," |
" initiating shutdown."); | " initiating shutdown."); |
|
|
// keep on until we encounter an error or received a STOP | // keep on until we encounter an error or received a STOP |
} while ( (concmd != _CC_stop) && (rc == 0) ); | } while ( (concmd != _CC_stop) && (rc == 0) ); |
| |
|
|
CIMServer::shutdownSignal(); | CIMServer::shutdownSignal(); |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
pthread_exit(0); | pthread_exit(0); |
| |
return(NULL); |
return NULL; |
} | } |
#endif | #endif |
|
|
|
// |
// Signal handler for shutdown signals, currently SIGHUP and SIGTERM | // Signal handler for shutdown signals, currently SIGHUP and SIGTERM |
// | // |
Boolean handleShutdownSignal = false; | Boolean handleShutdownSignal = false; |
|
|
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
} | } |
| |
|
void CIMServer::tickle_monitor() |
void CIMServer::tickle_monitor(){ |
{ |
_monitor->tickle(); | _monitor->tickle(); |
} | } |
| |
void CIMServer::_init(void) |
void CIMServer::_init() |
{ | { |
#ifdef PEGASUS_ENABLE_SLP | #ifdef PEGASUS_ENABLE_SLP |
_runSLP = true; // Boolean cannot be set in definition. | _runSLP = true; // Boolean cannot be set in definition. |
|
|
{ | { |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
throw NoSuchDirectory(repositoryRootPath); | throw NoSuchDirectory(repositoryRootPath); |
|
|
} | } |
#endif | #endif |
| |
|
|
"ConfigSettingProvider", new ConfigSettingProvider(), 0, 0, false); | "ConfigSettingProvider", new ConfigSettingProvider(), 0, 0, false); |
| |
_controlProviders.append(configProvider); | _controlProviders.append(configProvider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
|
PEGASUS_QUEUENAME_CONTROLSERVICE, |
PEGASUS_MODULENAME_CONFIGPROVIDER, | PEGASUS_MODULENAME_CONFIGPROVIDER, |
configProvider, | configProvider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
|
|
ProviderMessageHandler* userAuthProvider = new ProviderMessageHandler( | ProviderMessageHandler* userAuthProvider = new ProviderMessageHandler( |
"UserAuthProvider", new UserAuthProvider(_repository), 0, 0, false); | "UserAuthProvider", new UserAuthProvider(_repository), 0, 0, false); |
_controlProviders.append(userAuthProvider); | _controlProviders.append(userAuthProvider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
|
PEGASUS_QUEUENAME_CONTROLSERVICE, |
PEGASUS_MODULENAME_USERAUTHPROVIDER, | PEGASUS_MODULENAME_USERAUTHPROVIDER, |
userAuthProvider, | userAuthProvider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
|
|
// Warning: The ProviderRegistrationProvider destructor deletes | // Warning: The ProviderRegistrationProvider destructor deletes |
// _providerRegistrationManager | // _providerRegistrationManager |
_controlProviders.append(provRegProvider); | _controlProviders.append(provRegProvider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
|
PEGASUS_QUEUENAME_CONTROLSERVICE, |
PEGASUS_MODULENAME_PROVREGPROVIDER, | PEGASUS_MODULENAME_PROVREGPROVIDER, |
provRegProvider, | provRegProvider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
|
|
ProviderMessageHandler* shutdownProvider = new ProviderMessageHandler( | ProviderMessageHandler* shutdownProvider = new ProviderMessageHandler( |
"ShutdownProvider", new ShutdownProvider(this), 0, 0, false); | "ShutdownProvider", new ShutdownProvider(this), 0, 0, false); |
_controlProviders.append(shutdownProvider); | _controlProviders.append(shutdownProvider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
|
PEGASUS_QUEUENAME_CONTROLSERVICE, |
PEGASUS_MODULENAME_SHUTDOWNPROVIDER, | PEGASUS_MODULENAME_SHUTDOWNPROVIDER, |
shutdownProvider, | shutdownProvider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
|
|
ProviderMessageHandler* namespaceProvider = new ProviderMessageHandler( | ProviderMessageHandler* namespaceProvider = new ProviderMessageHandler( |
"NamespaceProvider", new NamespaceProvider(_repository), 0, 0, false); | "NamespaceProvider", new NamespaceProvider(_repository), 0, 0, false); |
_controlProviders.append(namespaceProvider); | _controlProviders.append(namespaceProvider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
|
PEGASUS_QUEUENAME_CONTROLSERVICE, |
PEGASUS_MODULENAME_NAMESPACEPROVIDER, | PEGASUS_MODULENAME_NAMESPACEPROVIDER, |
namespaceProvider, | namespaceProvider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
|
|
new CertificateProvider(_repository, _sslContextMgr), | new CertificateProvider(_repository, _sslContextMgr), |
0, 0, false); | 0, 0, false); |
_controlProviders.append(certificateProvider); | _controlProviders.append(certificateProvider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
|
PEGASUS_QUEUENAME_CONTROLSERVICE, |
PEGASUS_MODULENAME_CERTIFICATEPROVIDER, | PEGASUS_MODULENAME_CERTIFICATEPROVIDER, |
certificateProvider, | certificateProvider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
|
|
ProviderMessageHandler* cimomstatdataProvider = new ProviderMessageHandler( | ProviderMessageHandler* cimomstatdataProvider = new ProviderMessageHandler( |
"CIMOMStatDataProvider", new CIMOMStatDataProvider(), 0, 0, false); | "CIMOMStatDataProvider", new CIMOMStatDataProvider(), 0, 0, false); |
_controlProviders.append(cimomstatdataProvider); | _controlProviders.append(cimomstatdataProvider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
PEGASUS_MODULENAME_CIMOMSTATDATAPROVIDER, cimomstatdataProvider, |
PEGASUS_QUEUENAME_CONTROLSERVICE, |
|
PEGASUS_MODULENAME_CIMOMSTATDATAPROVIDER, |
|
cimomstatdataProvider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
0); | 0); |
#endif | #endif |
|
|
new CIMQueryCapabilitiesProvider(), | new CIMQueryCapabilitiesProvider(), |
0, 0, false); | 0, 0, false); |
_controlProviders.append(cimquerycapprovider); | _controlProviders.append(cimquerycapprovider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
|
PEGASUS_QUEUENAME_CONTROLSERVICE, |
PEGASUS_MODULENAME_CIMQUERYCAPPROVIDER, | PEGASUS_MODULENAME_CIMQUERYCAPPROVIDER, |
cimquerycapprovider, | cimquerycapprovider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
0); | 0); |
#endif | #endif |
| |
|
|
#if !defined(PEGASUS_DISABLE_PERFINST) || defined(PEGASUS_ENABLE_SLP) | #if !defined(PEGASUS_DISABLE_PERFINST) || defined(PEGASUS_ENABLE_SLP) |
| |
// Create the interop control provider | // Create the interop control provider |
ProviderMessageHandler* interopProvider = new ProviderMessageHandler( | ProviderMessageHandler* interopProvider = new ProviderMessageHandler( |
"InteropProvider", new InteropProvider(_repository), 0, 0, false); | "InteropProvider", new InteropProvider(_repository), 0, 0, false); |
_controlProviders.append(interopProvider); | _controlProviders.append(interopProvider); |
ModuleController::register_module(PEGASUS_QUEUENAME_CONTROLSERVICE, |
ModuleController::register_module( |
|
PEGASUS_QUEUENAME_CONTROLSERVICE, |
PEGASUS_MODULENAME_INTEROPPROVIDER, | PEGASUS_MODULENAME_INTEROPPROVIDER, |
interopProvider, | interopProvider, |
controlProviderReceiveMessageCallback, | controlProviderReceiveMessageCallback, |
0); | 0); |
#endif | #endif |
| |
_cimOperationRequestDispatcher |
_cimOperationRequestDispatcher = new CIMOperationRequestDispatcher( |
= new CIMOperationRequestDispatcher(_repository, |
_repository, _providerRegistrationManager); |
_providerRegistrationManager); |
|
_binaryMessageHandler = | _binaryMessageHandler = |
new BinaryMessageHandler(_cimOperationRequestDispatcher); | new BinaryMessageHandler(_cimOperationRequestDispatcher); |
| |
_cimOperationResponseEncoder |
_cimOperationResponseEncoder = new CIMOperationResponseEncoder; |
= new CIMOperationResponseEncoder; |
|
| |
// | // |
// get the configured authentication and authorization flags | // get the configured authentication and authorization flags |
|
|
_cimOperationRequestDecoder = new CIMOperationRequestDecoder( | _cimOperationRequestDecoder = new CIMOperationRequestDecoder( |
_cimOperationRequestDispatcher, | _cimOperationRequestDispatcher, |
_cimOperationResponseEncoder->getQueueId()); | _cimOperationResponseEncoder->getQueueId()); |
|
|
} | } |
| |
_cimExportRequestDispatcher |
_cimExportRequestDispatcher = new CIMExportRequestDispatcher(); |
= new CIMExportRequestDispatcher(); |
|
| |
_cimExportResponseEncoder |
_cimExportResponseEncoder = new CIMExportResponseEncoder; |
= new CIMExportResponseEncoder; |
|
| |
_cimExportRequestDecoder = new CIMExportRequestDecoder( | _cimExportRequestDecoder = new CIMExportRequestDecoder( |
_cimExportRequestDispatcher, | _cimExportRequestDispatcher, |
|
|
if (ConfigManager::parseBooleanValue( | if (ConfigManager::parseBooleanValue( |
configManager->getCurrentValue("enableIndicationService"))) | configManager->getCurrentValue("enableIndicationService"))) |
{ | { |
_indicationService = new IndicationService |
_indicationService = new IndicationService( |
(_repository, _providerRegistrationManager); |
_repository, _providerRegistrationManager); |
} | } |
| |
// Enable the signal handler to shutdown gracefully on SIGHUP and SIGTERM | // Enable the signal handler to shutdown gracefully on SIGHUP and SIGTERM |
|
|
if (trustStore == String::EMPTY) | if (trustStore == String::EMPTY) |
{ | { |
MessageLoaderParms parms( | MessageLoaderParms parms( |
"Pegasus.Server.CIMServer.SSL_CLIENT_VERIFICATION_EMPTY_TRUSTSTORE", |
"Pegasus.Server.CIMServer." |
"The \"sslTrustStore\" configuration property must be set if \"sslClientVerificationMode\" is 'required' or 'optional'. cimserver not started."); |
"SSL_CLIENT_VERIFICATION_EMPTY_TRUSTSTORE", |
|
"The \"sslTrustStore\" configuration property must be set " |
|
"if \"sslClientVerificationMode\" is 'required' or " |
|
"'optional'. cimserver not started."); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
throw SSLException(parms); | throw SSLException(parms); |
|
|
} | } |
| |
#ifdef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET | #ifdef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET |
|
|
PROPERTY_NAME__HTTP_ENABLED))) | PROPERTY_NAME__HTTP_ENABLED))) |
{ | { |
MessageLoaderParms parms( | MessageLoaderParms parms( |
"Pegasus.Server.SSLContextManager.INVALID_CONF_HTTPS_REQUIRED", |
"Pegasus.Server.SSLContextManager." |
|
"INVALID_CONF_HTTPS_REQUIRED", |
"The \"sslClientVerificationMode\" property cannot be " | "The \"sslClientVerificationMode\" property cannot be " |
"set to \"required\" if HTTP is disabled, as the " | "set to \"required\" if HTTP is disabled, as the " |
"cimserver will be unable to properly shutdown. " | "cimserver will be unable to properly shutdown. " |
|
|
if (trustStoreUserName == String::EMPTY) | if (trustStoreUserName == String::EMPTY) |
{ | { |
MessageLoaderParms parms( | MessageLoaderParms parms( |
"Pegasus.Server.CIMServer.SSL_CLIENT_VERIFICATION_EMPTY_USERNAME", |
"Pegasus.Server.CIMServer." |
"The \"sslTrustStoreUserName\" property must specify a valid username if \"sslClientVerificationMode\" is 'required' or 'optional' and the truststore is a single CA file. To register individual certificates to users, you must use a truststore directory along with the CertificateProvider. cimserver not started."); |
"SSL_CLIENT_VERIFICATION_EMPTY_USERNAME", |
|
"The \"sslTrustStoreUserName\" property must specify a " |
|
"valid username if \"sslClientVerificationMode\" is " |
|
"'required' or 'optional' and the truststore is a " |
|
"single CA file. To register individual certificates " |
|
"to users, you must use a truststore directory along " |
|
"with the CertificateProvider. cimserver not " |
|
"started."); |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
throw SSLException(parms); | throw SSLException(parms); |
} | } |
|
|
crlStore = ConfigManager::getHomedPath(crlStore); | crlStore = ConfigManager::getHomedPath(crlStore); |
} | } |
#else | #else |
String crlStore = String::EMPTY; |
String crlStore; |
#endif | #endif |
| |
// | // |
|
|
} | } |
| |
#ifdef PEGASUS_ENABLE_SLP | #ifdef PEGASUS_ENABLE_SLP |
ThreadReturnType PEGASUS_THREAD_CDECL _callSLPProvider(void *parm); |
|
| |
|
ThreadReturnType PEGASUS_THREAD_CDECL _callSLPProvider(void* parm); |
| |
// This is a control function that starts a new thread which issues a | // This is a control function that starts a new thread which issues a |
// cim operation to start the slp provider. | // cim operation to start the slp provider. |
void CIMServer::startSLPProvider() | void CIMServer::startSLPProvider() |
{ | { |
|
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "CIMServer::startSLPProvider"); | PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "CIMServer::startSLPProvider"); |
| |
|
// This is a onetime function. If already issued, or config is not to |
// This is a onetime function. If already issued, or config is not to use simply |
// use simply return |
// return |
|
if (!_runSLP) | if (!_runSLP) |
{ | { |
return; | return; |
|
|
// function does not get called a second time. | // function does not get called a second time. |
_runSLP = false; | _runSLP = false; |
| |
// Create a separate thread, detach and call function to execute the startup. |
// Create a separate thread, detach and call function to execute the |
|
// startup. |
Thread t( _callSLPProvider, 0, true ); | Thread t( _callSLPProvider, 0, true ); |
t.run(); | t.run(); |
| |
|
|
| |
ThreadReturnType PEGASUS_THREAD_CDECL _callSLPProvider(void* parm ) | ThreadReturnType PEGASUS_THREAD_CDECL _callSLPProvider(void* parm ) |
{ | { |
// |
|
PEG_METHOD_ENTER(TRC_SERVER, "CIMServer::_callSLPProvider()"); | PEG_METHOD_ENTER(TRC_SERVER, "CIMServer::_callSLPProvider()"); |
|
|
|
// |
// Create CIMClient object | // Create CIMClient object |
// | // |
CIMClient client; | CIMClient client; |
|
|
// | // |
// open connection to CIMOM | // open connection to CIMOM |
// | // |
|
|
reference, | reference, |
CIMName("register"), | CIMName("register"), |
inParams, | inParams, |
outParams |
outParams); |
); |
|
} | } |
| |
catch(CIMException& e) | catch(CIMException& e) |
|
|
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING, | Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING, |
"SLP Registration Failed. CIMException. $0", e.getMessage()); | "SLP Registration Failed. CIMException. $0", e.getMessage()); |
} | } |
|
|
catch(Exception& e) | catch(Exception& e) |
{ | { |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING, | Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::WARNING, |
"SLP Registration Failed Startup: CIMServer exception. $0", e.getMessage()); |
"SLP Registration Failed Startup: CIMServer exception. $0", |
|
e.getMessage()); |
} | } |
| |
client.disconnect(); | client.disconnect(); |
|
|
"SLP Registration Initiated"); | "SLP Registration Initiated"); |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
return( (ThreadReturnType)32 ); |
return (ThreadReturnType)32; |
} | } |
#endif | #endif |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
|
|
|
|
|
|