version 1.98, 2007/11/07 09:18:05
|
version 1.117, 2010/10/29 05:29:51
|
|
|
//%2006//////////////////////////////////////////////////////////////////////// |
//%LICENSE//////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// Licensed to The Open Group (TOG) under one or more contributor license |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with |
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
// this work for additional information regarding copyright ownership. |
// IBM Corp.; EMC Corporation, The Open Group. |
// Each contributor licenses this file to you under the OpenPegasus Open |
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
// Source License; you may not use this file except in compliance with the |
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
// License. |
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
// |
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
// Permission is hereby granted, free of charge, to any person obtaining a |
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
// copy of this software and associated documentation files (the "Software"), |
// EMC Corporation; Symantec Corporation; The Open Group. |
// to deal in the Software without restriction, including without limitation |
// |
// the rights to use, copy, modify, merge, publish, distribute, sublicense, |
// Permission is hereby granted, free of charge, to any person obtaining a copy |
// and/or sell copies of the Software, and to permit persons to whom the |
// of this software and associated documentation files (the "Software"), to |
// Software is furnished to do so, subject to the following conditions: |
// deal in the Software without restriction, including without limitation the |
// |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
// The above copyright notice and this permission notice shall be included |
// sell copies of the Software, and to permit persons to whom the Software is |
// in all copies or substantial portions of the Software. |
// furnished to do so, subject to the following conditions: |
// |
// |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT |
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// 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. |
|
// | // |
//============================================================================== |
////////////////////////////////////////////////////////////////////////// |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include "ProviderRegistrationProvider.h" | #include "ProviderRegistrationProvider.h" |
|
|
#include <Pegasus/Common/System.h> | #include <Pegasus/Common/System.h> |
#include <Pegasus/Common/MessageLoader.h> //l10n | #include <Pegasus/Common/MessageLoader.h> //l10n |
#include <Pegasus/Common/Constants.h> | #include <Pegasus/Common/Constants.h> |
|
#include <Pegasus/Common/Tracer.h> |
|
#include <Pegasus/Common/CIMNameCast.h> |
|
|
|
#include <Pegasus/Server/ProviderRegistrationManager/ProviderManagerMap.h> |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
/** | /** |
The name of the CapabilityID property for provider capabilities class | The name of the CapabilityID property for provider capabilities class |
*/ | */ |
static const CIMName _PROPERTY_CAPABILITYID = CIMName ("CapabilityID"); |
static const CIMName _PROPERTY_CAPABILITYID = CIMNameCast("CapabilityID"); |
| |
/** | /** |
stopping provider method | stopping provider method |
*/ | */ |
static const CIMName _STOP_PROVIDER = CIMName ("Stop"); |
static const CIMName _STOP_PROVIDER = CIMNameCast("Stop"); |
| |
/** | /** |
starting provider method | starting provider method |
*/ | */ |
static const CIMName _START_PROVIDER = CIMName ("Start"); |
static const CIMName _START_PROVIDER = CIMNameCast("Start"); |
|
|
|
/** |
|
setting provider module group method |
|
*/ |
|
static const CIMName _SET_MODULEGROUPNAME = CIMNameCast("SetModuleGroupName"); |
|
|
|
/** |
|
input param for setModuleGroupName name method |
|
*/ |
|
static const CIMName _PARAM_MODULEGROUPNAME = CIMNameCast("ModuleGroupName"); |
|
|
| |
ProviderRegistrationProvider::ProviderRegistrationProvider( | ProviderRegistrationProvider::ProviderRegistrationProvider( |
ProviderRegistrationManager * providerRegistrationManager) | ProviderRegistrationManager * providerRegistrationManager) |
|
|
userName = String::EMPTY; | userName = String::EMPTY; |
} | } |
| |
|
#ifndef PEGASUS_OS_ZOS |
if ((userName != String::EMPTY) && !System::isPrivilegedUser(userName)) | if ((userName != String::EMPTY) && !System::isPrivilegedUser(userName)) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED,MessageLoaderParms( | throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED,MessageLoaderParms( |
|
|
"You must have superuser privilege to modify the" | "You must have superuser privilege to modify the" |
" registration.")); | " registration.")); |
} | } |
|
#endif |
| |
if(!instanceReference.getNameSpace().equal (PEGASUS_NAMESPACENAME_INTEROP)) | if(!instanceReference.getNameSpace().equal (PEGASUS_NAMESPACENAME_INTEROP)) |
{ | { |
|
|
_providerRegistrationManager->modifyInstance( | _providerRegistrationManager->modifyInstance( |
instanceReference, instanceObject, includeQualifiers, propertyArray); | instanceReference, instanceObject, includeQualifiers, propertyArray); |
| |
|
#ifdef PEGASUS_ENABLE_INTEROP_PROVIDER |
|
_sendUpdateCacheMessagetoInteropProvider(context); |
|
#endif |
|
|
// complete processing the request | // complete processing the request |
handler.complete(); | handler.complete(); |
} | } |
|
|
userName = String::EMPTY; | userName = String::EMPTY; |
} | } |
| |
|
#ifndef PEGASUS_OS_ZOS |
if ((userName != String::EMPTY) && !System::isPrivilegedUser(userName)) | if ((userName != String::EMPTY) && !System::isPrivilegedUser(userName)) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED, MessageLoaderParms( | throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED, MessageLoaderParms( |
|
|
"SUPERUSER_PRIVILEGE_REQUIRED_REGISTER_PROVIDERS", | "SUPERUSER_PRIVILEGE_REQUIRED_REGISTER_PROVIDERS", |
"You must have superuser privilege to register providers.")); | "You must have superuser privilege to register providers.")); |
} | } |
|
#endif |
| |
CIMName className = instanceReference.getClassName(); | CIMName className = instanceReference.getClassName(); |
CIMNamespaceName nameSpace = instanceReference.getNameSpace(); | CIMNamespaceName nameSpace = instanceReference.getNameSpace(); |
|
|
if (instanceObject.findProperty(_PROPERTY_PROVIDERMODULE_NAME) == | if (instanceObject.findProperty(_PROPERTY_PROVIDERMODULE_NAME) == |
PEG_NOT_FOUND) | PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_NAME_IN_PG_PROVIDERMODULE", | "MISSING_NAME_IN_PG_PROVIDERMODULE", |
"Missing Name which is required property in PG_ProviderModule" |
"Missing Name which is required property in " |
" class.")); |
"PG_ProviderModule class.")); |
} | } |
| |
if (instanceObject.findProperty(_PROPERTY_VENDOR) == PEG_NOT_FOUND) | if (instanceObject.findProperty(_PROPERTY_VENDOR) == PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_VENDOR_IN_PG_PROVIDERMODULE", | "MISSING_VENDOR_IN_PG_PROVIDERMODULE", |
|
|
" PG_ProviderModule class.")); | " PG_ProviderModule class.")); |
} | } |
| |
|
Uint32 bitnessIndx = instanceObject.findProperty( |
|
PEGASUS_PROPERTYNAME_MODULE_BITNESS); |
|
|
|
if (bitnessIndx != PEG_NOT_FOUND) |
|
{ |
|
CIMValue value = instanceObject.getProperty(bitnessIndx).getValue(); |
|
if (!value.isNull()) |
|
{ |
|
if (value.getType() != CIMTYPE_UINT16) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_TYPE_MISMATCH, |
|
PEGASUS_PROPERTYNAME_MODULE_BITNESS.getString()); |
|
} |
|
Uint16 bitness; |
|
value.get(bitness); |
|
if(bitness != PG_PROVMODULE_BITNESS_DEFAULT |
|
#ifdef PEGASUS_PLATFORM_FOR_32BIT_PROVIDER_SUPPORT |
|
&& bitness != PG_PROVMODULE_BITNESS_32 |
|
&& bitness != PG_PROVMODULE_BITNESS_64 |
|
#endif |
|
) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, |
|
PEGASUS_PROPERTYNAME_MODULE_BITNESS.getString()); |
|
} |
|
} |
|
} |
|
|
if (instanceObject.findProperty(_PROPERTY_VERSION) == PEG_NOT_FOUND) | if (instanceObject.findProperty(_PROPERTY_VERSION) == PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_VERSION_IN_PG_PROVIDERMODULE", | "MISSING_VERSION_IN_PG_PROVIDERMODULE", |
|
|
instanceObject.findProperty(_PROPERTY_INTERFACETYPE); | instanceObject.findProperty(_PROPERTY_INTERFACETYPE); |
if (ifcTypeIndex == PEG_NOT_FOUND) | if (ifcTypeIndex == PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_INTERFACETYPE_IN_PG_PROVIDERMODULE", | "MISSING_INTERFACETYPE_IN_PG_PROVIDERMODULE", |
|
|
instanceObject.getProperty(ifcTypeIndex).getValue(). | instanceObject.getProperty(ifcTypeIndex).getValue(). |
get(ifcTypeString); | get(ifcTypeString); |
| |
if (ifcTypeString != "C++Default" |
String ifcEmptyVersion; |
#ifdef PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER |
if (!ProviderManagerMap::instance(). |
&& ifcTypeString != "CMPI" |
isValidProvMgrIfc(ifcTypeString, ifcEmptyVersion)) |
#endif |
|
#ifdef PEGASUS_ENABLE_JMPI_PROVIDER_MANAGER |
|
&& (ifcTypeString != "JMPI") |
|
&& (ifcTypeString != "JMPIExperimental") |
|
#endif |
|
) |
|
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, | throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, |
MessageLoaderParms( | MessageLoaderParms( |
|
|
instanceObject.findProperty(_PROPERTY_INTERFACEVERSION); | instanceObject.findProperty(_PROPERTY_INTERFACEVERSION); |
if (ifcVersionIndex == PEG_NOT_FOUND) | if (ifcVersionIndex == PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_INTERFACEVERSION_IN_PG_PROVIDERMODULE", | "MISSING_INTERFACEVERSION_IN_PG_PROVIDERMODULE", |
|
|
String ifcVersionString; | String ifcVersionString; |
instanceObject.getProperty(ifcVersionIndex).getValue(). | instanceObject.getProperty(ifcVersionIndex).getValue(). |
get(ifcVersionString); | get(ifcVersionString); |
if ( |
|
#ifdef PEGASUS_ENABLE_CMPI_PROVIDER_MANAGER |
if (!ProviderManagerMap::instance().isValidProvMgrIfc( |
(ifcTypeString == "CMPI" && |
ifcTypeString, ifcVersionString)) |
ifcVersionString != "2.0.0") || |
|
#endif |
|
#ifdef PEGASUS_ENABLE_JMPI_PROVIDER_MANAGER |
|
(ifcTypeString == "JMPI" && |
|
ifcVersionString != "1.0.0" && |
|
ifcVersionString != "2.0.0" && |
|
ifcVersionString != "2.2.0") || |
|
(ifcTypeString == "JMPIExperimental" && |
|
ifcVersionString != "0.0.1") || |
|
#endif |
|
(ifcTypeString == "C++Default" && |
|
ifcVersionString != "2.1.0" && |
|
ifcVersionString != "2.2.0" && |
|
ifcVersionString != "2.3.0" && |
|
ifcVersionString != "2.5.0" && |
|
ifcVersionString != "2.6.0")) |
|
{ | { |
String unsupported = "InterfaceVersion"; | String unsupported = "InterfaceVersion"; |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"UNSUPPORTED_INTERFACEVERSION_VALUE", | "UNSUPPORTED_INTERFACEVERSION_VALUE", |
"Unsupported InterfaceVersion value: \"$0\"",ifcVersionString)); |
"Unsupported InterfaceVersion value: \"$0\"", |
|
ifcVersionString)); |
} | } |
| |
if (instanceObject.findProperty(_PROPERTY_LOCATION) == PEG_NOT_FOUND) | if (instanceObject.findProperty(_PROPERTY_LOCATION) == PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_LOCATION_IN_PG_PROVIDERMODULE", | "MISSING_LOCATION_IN_PG_PROVIDERMODULE", |
|
|
#ifdef PEGASUS_DISABLE_PROV_USERCTXT | #ifdef PEGASUS_DISABLE_PROV_USERCTXT |
if (userContext != PG_PROVMODULE_USERCTXT_CIMSERVER) | if (userContext != PG_PROVMODULE_USERCTXT_CIMSERVER) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, |
MessageLoaderParms( | MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
|
|
instanceObject.getProperty(designatedUserIndex).getValue() | instanceObject.getProperty(designatedUserIndex).getValue() |
.isNull()) | .isNull()) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
MessageLoaderParms( | MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
|
|
if (instanceObject.findProperty(_PROPERTY_PROVIDERMODULENAME) == | if (instanceObject.findProperty(_PROPERTY_PROVIDERMODULENAME) == |
PEG_NOT_FOUND) | PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_PROVIDERMODULENAME_IN_PG_PROVIDERCAPABILITIES", | "MISSING_PROVIDERMODULENAME_IN_PG_PROVIDERCAPABILITIES", |
|
|
PEG_NOT_FOUND) | PEG_NOT_FOUND) |
{ | { |
String missing = "ProviderName"; | String missing = "ProviderName"; |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider.MISSING_REQUIRED_PROPERTY", |
"ProviderRegistrationProvider." |
"Missing ProviderName which is required property in" |
"MISSING_PROVIDERNAME_IN_PG_PROVIDERCAPABILITIES", |
|
"Missing the required ProviderName property in " |
" PG_ProviderCapabilities class.")); | " PG_ProviderCapabilities class.")); |
} | } |
| |
if (instanceObject.findProperty(_PROPERTY_CAPABILITYID) == | if (instanceObject.findProperty(_PROPERTY_CAPABILITYID) == |
PEG_NOT_FOUND) | PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSINGCAPABILITYID_IN_PG_PROVIDERCAPABILITIES", |
"MISSING_CAPABILITYID_IN_PG_PROVIDERCAPABILITIES", |
"Missing CapabilityID which is required property in" |
"Missing the required CapabilityID property in " |
" PG_ProviderCapabilities class.")); | " PG_ProviderCapabilities class.")); |
} | } |
| |
if (instanceObject.findProperty(_PROPERTY_CLASSNAME) == PEG_NOT_FOUND) | if (instanceObject.findProperty(_PROPERTY_CLASSNAME) == PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_CLASSNAME_IN_PG_PROVIDERCAPABILITIES", | "MISSING_CLASSNAME_IN_PG_PROVIDERCAPABILITIES", |
|
|
| |
if (namespacesArray.size() == 0) | if (namespacesArray.size() == 0) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_NAMESPACES_IN_PG_PROVIDERCAPABILITIES", | "MISSING_NAMESPACES_IN_PG_PROVIDERCAPABILITIES", |
|
|
| |
if (providerTypeArray.size() == 0) | if (providerTypeArray.size() == 0) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
MessageLoaderParms( | MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
|
|
#endif | #endif |
) | ) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, |
MessageLoaderParms( | MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider.UNSUPPORTED_" | "ProviderRegistrationProvider.UNSUPPORTED_" |
|
|
"Missing ProviderModuleName which is required property in" | "Missing ProviderModuleName which is required property in" |
" PG_ConsumerCapabilities class."); | " PG_ConsumerCapabilities class."); |
| |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, parms); |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, parms); |
} | } |
| |
if (instanceObject.findProperty(_PROPERTY_PROVIDERNAME) == | if (instanceObject.findProperty(_PROPERTY_PROVIDERNAME) == |
|
|
"Missing ProviderName which is required property in" | "Missing ProviderName which is required property in" |
" PG_ConsumerCapabilities class."); | " PG_ConsumerCapabilities class."); |
| |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, parms); |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, parms); |
} | } |
| |
if (instanceObject.findProperty(_PROPERTY_CAPABILITYID) == | if (instanceObject.findProperty(_PROPERTY_CAPABILITYID) == |
|
|
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_CAPABILITY_ID_WHICH_IS_REQUIRED", | "MISSING_CAPABILITY_ID_WHICH_IS_REQUIRED", |
"Missing CapabilityID which is required property in" |
"Missing the required CapabilityID property in " |
" PG_ConsumerCapabilities class."); | " PG_ConsumerCapabilities class."); |
| |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, parms); |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, parms); |
} | } |
| |
if (instanceObject.findProperty | if (instanceObject.findProperty |
|
|
"Missing ProviderType which is required property in" | "Missing ProviderType which is required property in" |
" PG_ConsumerCapabilities class."); | " PG_ConsumerCapabilities class."); |
| |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, parms); |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, parms); |
} | } |
| |
if (instanceObject.findProperty(_PROPERTY_INDICATIONDESTINATIONS) == | if (instanceObject.findProperty(_PROPERTY_INDICATIONDESTINATIONS) == |
|
|
"Missing Destinations which is required property in" | "Missing Destinations which is required property in" |
" PG_ConsumerCapabilities class."); | " PG_ConsumerCapabilities class."); |
| |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, parms); |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, parms); |
} | } |
} | } |
else // PEGASUS_CLASSNAME_PROVIDER | else // PEGASUS_CLASSNAME_PROVIDER |
|
|
// Name and ProviderModuleName properties must be set | // Name and ProviderModuleName properties must be set |
// | // |
if (instanceObject.findProperty | if (instanceObject.findProperty |
(_PROPERTY_PROVIDER_NAME) == PEG_NOT_FOUND) |
(PEGASUS_PROPERTYNAME_NAME) == PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider.MISSING_REQUIRED_PROPERTY", |
"ProviderRegistrationProvider." |
"Missing Name which is required property in" |
"MISSING_NAME_IN_PG_PROVIDER", |
" PG_Provider class.")); |
"Missing the required Name property in PG_Provider " |
|
"class.")); |
} | } |
| |
if (instanceObject.findProperty(_PROPERTY_PROVIDERMODULENAME) == | if (instanceObject.findProperty(_PROPERTY_PROVIDERMODULENAME) == |
PEG_NOT_FOUND) | PEG_NOT_FOUND) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
"MISSING_PROVIDERMODULENAME_IN_PG_PROVIDER", | "MISSING_PROVIDERMODULENAME_IN_PG_PROVIDER", |
|
|
returnReference = _providerRegistrationManager->createInstance( | returnReference = _providerRegistrationManager->createInstance( |
instanceReference, instance); | instanceReference, instance); |
| |
|
#ifdef PEGASUS_ENABLE_INTEROP_PROVIDER |
|
if(className.equal (PEGASUS_CLASSNAME_PROVIDER) || |
|
className.equal (PEGASUS_CLASSNAME_PROVIDERCAPABILITIES)) |
|
{ |
|
_sendUpdateCacheMessagetoInteropProvider(context); |
|
} |
|
#endif |
|
|
handler.deliver(returnReference); | handler.deliver(returnReference); |
| |
// complete processing request | // complete processing request |
|
|
userName = String::EMPTY; | userName = String::EMPTY; |
} | } |
| |
|
#ifndef PEGASUS_OS_ZOS |
if ((userName != String::EMPTY) && !System::isPrivilegedUser(userName)) | if ((userName != String::EMPTY) && !System::isPrivilegedUser(userName)) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED,MessageLoaderParms( | throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED,MessageLoaderParms( |
|
|
"SUPERUSER_PRIVILEGE_REQUIRED_UNREGISTER_PROVIDERS", | "SUPERUSER_PRIVILEGE_REQUIRED_UNREGISTER_PROVIDERS", |
"You must have superuser privilege to unregister providers.")); | "You must have superuser privilege to unregister providers.")); |
} | } |
|
#endif |
| |
if(!instanceReference.getNameSpace().equal (PEGASUS_NAMESPACENAME_INTEROP)) | if(!instanceReference.getNameSpace().equal (PEGASUS_NAMESPACENAME_INTEROP)) |
{ | { |
|
|
// if _PROPERTY_PROVIDERMODULENAME key not found | // if _PROPERTY_PROVIDERMODULENAME key not found |
if( !moduleFound) | if( !moduleFound) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
MessageLoaderParms( | MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider." | "ProviderRegistrationProvider." |
|
|
// if _PROPERTY_PROVIDERMODULE_NAME key not found | // if _PROPERTY_PROVIDERMODULE_NAME key not found |
if( !moduleFound) | if( !moduleFound) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED, |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
MessageLoaderParms( | MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider.NAME_KEY_NOT_FOUND", | "ProviderRegistrationProvider.NAME_KEY_NOT_FOUND", |
|
|
| |
_providerRegistrationManager->deleteInstance(instanceReference); | _providerRegistrationManager->deleteInstance(instanceReference); |
| |
|
#ifdef PEGASUS_ENABLE_INTEROP_PROVIDER |
|
if(className.equal (PEGASUS_CLASSNAME_PROVIDER) || |
|
className.equal (PEGASUS_CLASSNAME_PROVIDERCAPABILITIES) || |
|
className.equal (PEGASUS_CLASSNAME_PROVIDERMODULE)) |
|
{ |
|
_sendUpdateCacheMessagetoInteropProvider(context); |
|
} |
|
#endif |
// complete processing the request | // complete processing the request |
handler.complete(); | handler.complete(); |
} | } |
|
|
userName = String::EMPTY; | userName = String::EMPTY; |
} | } |
| |
|
#ifndef PEGASUS_OS_ZOS |
if ((userName != String::EMPTY) && !System::isPrivilegedUser(userName)) | if ((userName != String::EMPTY) && !System::isPrivilegedUser(userName)) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED, | throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_ACCESS_DENIED, |
|
|
"You must have superuser privilege to disable or enable" | "You must have superuser privilege to disable or enable" |
" providers.")); | " providers.")); |
} | } |
|
#endif |
| |
if(!objectReference.getNameSpace().equal (PEGASUS_NAMESPACENAME_INTEROP)) | if(!objectReference.getNameSpace().equal (PEGASUS_NAMESPACENAME_INTEROP)) |
{ | { |
|
|
} | } |
} | } |
| |
|
|
// if _PROPERTY_PROVIDERMODULE_NAME key not found | // if _PROPERTY_PROVIDERMODULE_NAME key not found |
if( !moduleFound) | if( !moduleFound) |
{ | { |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_NOT_SUPPORTED,MessageLoaderParms( |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_INVALID_PARAMETER, |
|
MessageLoaderParms( |
"ControlProviders.ProviderRegistrationProvider." | "ControlProviders.ProviderRegistrationProvider." |
"ProviderRegistrationProvider.NAME_KEY_NOT_FOUND", | "ProviderRegistrationProvider.NAME_KEY_NOT_FOUND", |
"key Name was not found")); | "key Name was not found")); |
|
|
// enable module | // enable module |
ret_value = _enableModule(objectReference, moduleName, al); | ret_value = _enableModule(objectReference, moduleName, al); |
} | } |
|
else if (methodName.equal(_SET_MODULEGROUPNAME)) |
|
{ |
|
String paramName; |
|
if (!inParameters.size() || |
|
((paramName = inParameters[0].getParameterName()) |
|
!= _PARAM_MODULEGROUPNAME)) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_INVALID_PARAMETER, paramName); |
|
} |
|
// set group |
|
String moduleGroupName; |
|
inParameters[0].getValue().get(moduleGroupName); |
|
ret_value = _setModuleGroupName( |
|
objectReference, moduleName, moduleGroupName, al); |
|
} |
else | else |
{ | { |
throw PEGASUS_CIM_EXCEPTION(CIM_ERR_METHOD_NOT_AVAILABLE, | throw PEGASUS_CIM_EXCEPTION(CIM_ERR_METHOD_NOT_AVAILABLE, |
String::EMPTY); | String::EMPTY); |
} | } |
|
#ifdef PEGASUS_ENABLE_INTEROP_PROVIDER |
|
_sendUpdateCacheMessagetoInteropProvider(context); |
|
#endif |
| |
CIMValue retValue(ret_value); | CIMValue retValue(ret_value); |
handler.deliver(retValue); | handler.deliver(retValue); |
handler.complete(); | handler.complete(); |
} | } |
| |
|
Sint16 ProviderRegistrationProvider::_setModuleGroupName( |
|
const CIMObjectPath & moduleRef, |
|
const String & moduleName, |
|
const String & moduleGroupName, |
|
const AcceptLanguageList & al) |
|
{ |
|
Sint32 disableRC = _disableModule (moduleRef, moduleName, false, al); |
|
|
|
if (disableRC == -1) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ControlProviders.ProviderRegistrationProvider." |
|
"ProviderRegistrationProvider." |
|
"DISABLE_PROVIDER_FAILED", |
|
"disable the provider failed.")); |
|
} |
|
|
|
if (disableRC == -2) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ControlProviders.ProviderRegistrationProvider." |
|
"ProviderRegistrationProvider." |
|
"DISABLE_PROVIDER_FAILED_PROVIDER_BUSY", |
|
"disable the provider failed: Provider is busy.")); |
|
} |
|
|
|
String errorMsg; |
|
|
|
if (!_providerRegistrationManager->setProviderModuleGroupName( |
|
moduleName, moduleGroupName, errorMsg)) |
|
{ |
|
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ControlProviders.ProviderRegistrationProvider." |
|
"ProviderRegistrationProvider." |
|
"SET_PROVIDERMODULEGROUPNAME_FAILED", |
|
"Failed to set the ModuleGroupName: $0.", |
|
errorMsg)); |
|
} |
|
|
|
// Enable the module only if it was previously enabled. |
|
if (disableRC == 0) |
|
{ |
|
try |
|
{ |
|
_enableModule(moduleRef, moduleName, al); |
|
} |
|
catch(const Exception &e) |
|
{ |
|
PEG_TRACE((TRC_CONTROLPROVIDER,Tracer::LEVEL1, |
|
"Exception caught while enabling the provider module %s : %s", |
|
(const char*)moduleName.getCString(), |
|
(const char*)e.getMessage().getCString())); |
|
} |
|
catch(...) |
|
{ |
|
PEG_TRACE(( |
|
TRC_CONTROLPROVIDER, |
|
Tracer::LEVEL1, |
|
"Unknown error occurred while" |
|
" enabling the provider modules %s.", |
|
(const char*)moduleName.getCString())); |
|
} |
|
} |
|
|
|
return 0; |
|
} |
|
|
|
|
// get provider manager service | // get provider manager service |
MessageQueueService * ProviderRegistrationProvider::_getProviderManagerService() | MessageQueueService * ProviderRegistrationProvider::_getProviderManagerService() |
{ | { |
|
|
new AsyncLegacyOperationStart ( | new AsyncLegacyOperationStart ( |
NULL, | NULL, |
_queueId, | _queueId, |
disable_req, |
disable_req); |
_queueId); |
|
| |
AsyncReply * asyncReply = | AsyncReply * asyncReply = |
_controller->ClientSendWait(_queueId, asyncRequest); | _controller->ClientSendWait(_queueId, asyncRequest); |
|
|
new AsyncLegacyOperationStart ( | new AsyncLegacyOperationStart ( |
NULL, | NULL, |
_queueId, | _queueId, |
enable_req, |
enable_req); |
_queueId); |
|
| |
AsyncReply * asyncReply = | AsyncReply * asyncReply = |
_controller->ClientSendWait(_queueId, asyncRequest); | _controller->ClientSendWait(_queueId, asyncRequest); |
|
|
AsyncLegacyOperationStart asyncRequest( | AsyncLegacyOperationStart asyncRequest( |
NULL, | NULL, |
_queueId, | _queueId, |
termination_req, |
termination_req); |
_queueId); |
|
| |
AutoPtr <AsyncReply> asyncReply( | AutoPtr <AsyncReply> asyncReply( |
_controller->ClientSendWait(_queueId, &asyncRequest)); | _controller->ClientSendWait(_queueId, &asyncRequest)); |
|
|
CIMInstance updatedModuleInstance = | CIMInstance updatedModuleInstance = |
_providerRegistrationManager->getInstance(moduleRef); | _providerRegistrationManager->getInstance(moduleRef); |
| |
// module is enabled, initialize providers as necessary |
|
_providerRegistrationManager->initializeProviders( |
|
updatedModuleInstance); |
|
|
|
// | // |
// The module is enabled, need to send enable message to | // The module is enabled, need to send enable message to |
// subscription service if the provider is an indication provider | // subscription service if the provider is an indication provider |
|
|
// | // |
// get provider name from reference | // get provider name from reference |
// | // |
if(keys[j].getName().equal (_PROPERTY_PROVIDER_NAME)) |
if(keys[j].getName().equal (PEGASUS_PROPERTYNAME_NAME)) |
{ | { |
_providerName = keys[j].getValue(); | _providerName = keys[j].getValue(); |
} | } |
|
|
new AsyncLegacyOperationStart ( | new AsyncLegacyOperationStart ( |
NULL, | NULL, |
_queueId, | _queueId, |
enable_req, |
enable_req); |
_queueId); |
|
| |
AsyncReply * asyncReply = | AsyncReply * asyncReply = |
_controller->ClientSendWait(_queueId, asyncRequest); | _controller->ClientSendWait(_queueId, asyncRequest); |
|
|
{ | { |
// get provider name | // get provider name |
String providerName; | String providerName; |
Uint32 pos = instance.findProperty(_PROPERTY_PROVIDER_NAME); |
Uint32 pos = instance.findProperty(PEGASUS_PROPERTYNAME_NAME); |
if (pos != PEG_NOT_FOUND) | if (pos != PEG_NOT_FOUND) |
{ | { |
instance.getProperty(pos).getValue().get(providerName); | instance.getProperty(pos).getValue().get(providerName); |
|
|
{ | { |
// get provider name | // get provider name |
String providerName; | String providerName; |
Uint32 pos = instance.findProperty(CIMName (_PROPERTY_PROVIDER_NAME)); |
Uint32 pos = instance.findProperty(PEGASUS_PROPERTYNAME_NAME); |
if (pos != PEG_NOT_FOUND) | if (pos != PEG_NOT_FOUND) |
{ | { |
instance.getProperty(pos).getValue().get(providerName); | instance.getProperty(pos).getValue().get(providerName); |
|
|
capInstance = _providerRegistrationManager->getInstance | capInstance = _providerRegistrationManager->getInstance |
(instanceNames[i]); | (instanceNames[i]); |
| |
Uint32 pos = capInstance.findProperty( |
Uint32 providerTypePos = capInstance.findProperty( |
CIMName (_PROPERTY_PROVIDERTYPE)); | CIMName (_PROPERTY_PROVIDERTYPE)); |
if (pos != PEG_NOT_FOUND) |
if (providerTypePos != PEG_NOT_FOUND) |
{ | { |
capInstance.getProperty(pos).getValue().get(providerTypes); |
capInstance.getProperty(providerTypePos).getValue().get( |
|
providerTypes); |
| |
for (Uint32 k=0; k < providerTypes.size(); k++) | for (Uint32 k=0; k < providerTypes.size(); k++) |
{ | { |
|
|
return (indCapInstances); | return (indCapInstances); |
} | } |
| |
|
#ifdef PEGASUS_ENABLE_INTEROP_PROVIDER |
|
void ProviderRegistrationProvider::_sendUpdateCacheMessagetoInteropProvider( |
|
const OperationContext & context) |
|
{ |
|
String referenceStr("//", 2); |
|
referenceStr.append(System::getHostName()); |
|
referenceStr.append("/"); |
|
referenceStr.append(PEGASUS_NAMESPACENAME_INTEROP.getString()); |
|
referenceStr.append(":"); |
|
referenceStr.append( |
|
PEGASUS_CLASSNAME_PG_PROVIDERPROFILECAPABILITIES.getString()); |
|
CIMObjectPath reference(referenceStr); |
|
|
|
Array<CIMParamValue> inParams; |
|
|
|
try |
|
{ |
|
CIMInvokeMethodRequestMessage* request = |
|
new CIMInvokeMethodRequestMessage( |
|
XmlWriter::getNextMessageId(), |
|
PEGASUS_NAMESPACENAME_INTEROP, |
|
referenceStr, |
|
"updateCache", |
|
inParams, |
|
QueueIdStack(_controller->getQueueId())); |
|
|
|
request->operationContext = context; |
|
|
|
AsyncModuleOperationStart* moduleControllerRequest = |
|
new AsyncModuleOperationStart( |
|
0, |
|
_controller->getQueueId(), |
|
PEGASUS_MODULENAME_INTEROPPROVIDER, |
|
request); |
|
|
|
_controller->SendForget(moduleControllerRequest); |
|
} |
|
catch(const Exception &e) |
|
{ |
|
PEG_TRACE((TRC_CONTROLPROVIDER,Tracer::LEVEL1, |
|
"Exception caught while invoking InteropProvider 'updateCache'" |
|
" method: %s",(const char*)e.getMessage().getCString())); |
|
} |
|
catch(...) |
|
{ |
|
PEG_TRACE_CSTRING( |
|
TRC_CONTROLPROVIDER, |
|
Tracer::LEVEL1, |
|
"Unknown error occurred while" |
|
" invoking InteropProvider 'updateCache' method."); |
|
} |
|
} |
|
#endif |
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |