in src/adapters/mc/OsConfigResource.c [1245:1449]
void MI_CALL OsConfigResource_Invoke_SetTargetResource(
OsConfigResource_Self* self,
MI_Context* context,
const MI_Char* nameSpace,
const MI_Char* className,
const MI_Char* methodName,
const OsConfigResource* instanceName,
const OsConfigResource_SetTargetResource* in)
{
MI_UNREFERENCED_PARAMETER(self);
MI_UNREFERENCED_PARAMETER(nameSpace);
MI_UNREFERENCED_PARAMETER(className);
MI_UNREFERENCED_PARAMETER(methodName);
MI_UNREFERENCED_PARAMETER(instanceName);
MI_Result miResult = MI_RESULT_OK;
MI_Result miCleanup = MI_RESULT_OK;
OsConfigResource_SetTargetResource set_result_object = {{0},{0},{0},{0},{0}};
if ((NULL == in) || (MI_FALSE == in->InputResource.exists) || (NULL == in->InputResource.value))
{
miResult = MI_RESULT_FAILED;
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] Invalid argument");
goto Exit;
}
if (MI_RESULT_OK != (miResult =OsConfigResource_SetTargetResource_Construct(&set_result_object, context)))
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] SetTargetResource_Construct failed with %d", miResult);
goto Exit;
}
if (MI_RESULT_OK != (miResult = OsConfigResource_SetTargetResource_Set_MIReturn(&set_result_object, 0)))
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] SetTargetResource_Set_MIReturn failed with %d", miResult);
goto Exit;
}
MI_Context_PostInstance(context, &(set_result_object.__instance));
// Read the rule id from the input resource values
if ((MI_TRUE == in->InputResource.value->RuleId.exists) && (NULL != in->InputResource.value->RuleId.value))
{
FREE_MEMORY(g_ruleId);
if (NULL == (g_ruleId = DuplicateString(in->InputResource.value->RuleId.value)))
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] DuplicateString(%s) failed", in->InputResource.value->RuleId.value);
g_ruleId = DuplicateString(g_defaultValue);
miResult = MI_RESULT_FAILED;
goto Exit;
}
}
else
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] No RuleId");
miResult = MI_RESULT_FAILED;
goto Exit;
}
// Read the payload key from the input resource values
if ((MI_TRUE == in->InputResource.value->PayloadKey.exists) && (NULL != in->InputResource.value->PayloadKey.value))
{
FREE_MEMORY(g_payloadKey);
if (NULL == (g_payloadKey = DuplicateString(in->InputResource.value->PayloadKey.value)))
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] DuplicateString(%s) failed", in->InputResource.value->PayloadKey.value);
g_payloadKey = DuplicateString(g_defaultValue);
miResult = MI_RESULT_FAILED;
goto Exit;
}
}
else
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] No PayloadKey");
miResult = MI_RESULT_FAILED;
goto Exit;
}
// Read the MIM component name from the input resource values
if ((MI_TRUE == in->InputResource.value->ComponentName.exists) && (NULL != in->InputResource.value->ComponentName.value))
{
FREE_MEMORY(g_componentName);
if (NULL == (g_componentName = DuplicateString(in->InputResource.value->ComponentName.value)))
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] DuplicateString(%s) failed", in->InputResource.value->ComponentName.value);
g_componentName = DuplicateString(g_defaultValue);
miResult = MI_RESULT_FAILED;
goto Exit;
}
}
else
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] No ComponentName");
miResult = MI_RESULT_FAILED;
goto Exit;
}
// Read the MIM desired object name from the input resource values
if ((MI_TRUE == in->InputResource.value->DesiredObjectName.exists) && (NULL != in->InputResource.value->DesiredObjectName.value))
{
FREE_MEMORY(g_desiredObjectName);
if (NULL == (g_desiredObjectName = DuplicateString(in->InputResource.value->DesiredObjectName.value)))
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] DuplicateString(%s) failed", in->InputResource.value->DesiredObjectName.value);
g_desiredObjectName = DuplicateString(g_defaultValue);
miResult = MI_RESULT_FAILED;
goto Exit;
}
}
else
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] No DesiredObjectName");
miResult = MI_RESULT_FAILED;
goto Exit;
}
// Read the MIM desired object value from the input resource values
if ((MI_TRUE == in->InputResource.value->DesiredObjectValue.exists) && (NULL != in->InputResource.value->DesiredObjectValue.value))
{
FREE_MEMORY(g_desiredObjectValue);
if (NULL == (g_desiredObjectValue = DuplicateString(in->InputResource.value->DesiredObjectValue.value)))
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] DuplicateString(%s) failed", in->InputResource.value->DesiredObjectValue.value);
g_desiredObjectValue = DuplicateString(g_failValue);
miResult = MI_RESULT_FAILED;
goto Exit;
}
}
else
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] No DesiredObjectValue");
miResult = MI_RESULT_FAILED;
goto Exit;
}
// Check if we have the optional MIM procedure object name in the input resource value
if ((MI_TRUE == in->InputResource.value->ProcedureObjectName.exists) && (NULL != in->InputResource.value->ProcedureObjectName.value))
{
FREE_MEMORY(g_procedureObjectName);
if (NULL == (g_procedureObjectName = DuplicateString(in->InputResource.value->ProcedureObjectName.value)))
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] DuplicateString(%s) failed", in->InputResource.value->ProcedureObjectName.value);
g_procedureObjectName = DuplicateString(g_defaultValue);
miResult = MI_RESULT_FAILED;
goto Exit;
}
else
{
// We have a procedure object name, next see if we also have a procedure object value (also optional)
if ((MI_TRUE == in->InputResource.value->ProcedureObjectValue.exists) && (NULL != in->InputResource.value->ProcedureObjectValue.value))
{
FREE_MEMORY(g_procedureObjectValue);
if (NULL == (g_procedureObjectValue = DuplicateString(in->InputResource.value->ProcedureObjectValue.value)))
{
miResult = MI_RESULT_FAILED;
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] DuplicateString(%s) failed", in->InputResource.value->ProcedureObjectValue.value);
g_procedureObjectValue = DuplicateString(g_defaultValue);
goto Exit;
}
else
{
// We have both a procedure object name and value, we need to set then now to apply context for compliance
SetDesiredObjectValueToDevice("OsConfigResource.Set", g_componentName, g_procedureObjectName, g_procedureObjectValue, context);
}
}
else
{
// Cannot have a procedure object name without a procedure object value
miResult = MI_RESULT_FAILED;
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] No ProcedureObjectValue");
FREE_MEMORY(g_procedureObjectValue);
goto Exit;
}
}
}
else
{
// Not an error
LogInfo(context, GetLog(), "[OsConfigResource.Test] No ProcedureObjectName");
FREE_MEMORY(g_procedureObjectName);
}
SetDesiredObjectValueToDevice("OsConfigResource.Set", g_componentName, g_desiredObjectName, g_desiredObjectValue, context);
miResult = MI_RESULT_OK;
Exit:
if (MI_RESULT_OK != miResult)
{
g_reportedMpiResult = miResult;
}
if (MI_RESULT_OK != (miCleanup = OsConfigResource_SetTargetResource_Destruct(&set_result_object)))
{
LogInfo(context, GetLog(), "[OsConfigResource.Set] SetTargetResource_Destruct failed with %d", miCleanup);
}
if (MI_RESULT_OK != miResult)
{
LogError(context, miResult, GetLog(), "[OsConfigResource.Set] Set complete with miResult %d", miResult);
}
MI_Context_PostResult(context, miResult);
}