ack, code review only./Thanks HansN

On 11/25/2015 07:20 AM, [email protected] wrote:
>   osaf/services/saf/amf/amfd/comp.cc |  64 
> ++++++++++++++++++++++++++++++++++---
>   1 files changed, 58 insertions(+), 6 deletions(-)
>
>
> Following three commands causes assert in amfd:
> immcfg -a saAmfCompNumMaxAmStopAttempts= 
> safComp=AmfDemo,safSu=SU1,safSg=AmfDemo,safApp=AmfDemo1
> immcfg -a saAmfCompNumMaxAmStartAttempts= 
> safComp=AmfDemo,safSu=SU1,safSg=AmfDemo,safApp=AmfDemo1
> immcfg -a osafAmfCompHcCmdArgv= 
> safComp=AmfDemo,safSu=SU1,safSg=AmfDemo,safApp=AmfDemo1
>
> Patch rejects CCB modification on unsupported attributes and avoids amfd 
> assert.
>
> diff --git a/osaf/services/saf/amf/amfd/comp.cc 
> b/osaf/services/saf/amf/amfd/comp.cc
> --- a/osaf/services/saf/amf/amfd/comp.cc
> +++ b/osaf/services/saf/amf/amfd/comp.cc
> @@ -886,6 +886,7 @@ static SaAisErrorT ccb_completed_modify_
>       int i = 0;
>       AVD_COMP *comp;
>       SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
> +     bool value_is_deleted;
>   
>       TRACE_ENTER();
>   
> @@ -893,15 +894,20 @@ static SaAisErrorT ccb_completed_modify_
>   
>       while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) {
>               const SaImmAttrValuesT_2 *attribute = &attr_mod->modAttr;
> -             void *value;
> +             void *value = nullptr;
>   
> -             /* Attribute value removed */
> -             if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) || 
> (attribute->attrValues == nullptr))
> -                     continue;
> -
> -             value = attribute->attrValues[0];
> +              if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) || 
> (attribute->attrValues == nullptr)) {
> +                        /* Attribute value is deleted, revert to default 
> value */
> +                        value_is_deleted = true;
> +                } else {
> +                        /* Attribute value is modified */
> +                        value_is_deleted = false;
> +                        value = attribute->attrValues[0];
> +                }
>   
>               if (!strcmp(attribute->attrName, "saAmfCompType")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaNameT dn = *((SaNameT*)value);
>                       if (nullptr == comptype_db->find(Amf::to_string(&dn))) {
>                               report_ccb_validation_error(opdata, 
> "saAmfCompType '%s' not found", dn.value);
> @@ -941,6 +947,8 @@ static SaAisErrorT ccb_completed_modify_
>                               }
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompInstantiateCmdArgv")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       char *param_val = *((char **)value);
>                       if (nullptr == param_val) {
>                               report_ccb_validation_error(opdata,
> @@ -948,6 +956,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompInstantiateTimeout")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
>                       if (timeout == 0) {
> @@ -956,6 +966,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompInstantiationLevel")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       uint32_t num_inst = *((SaUint32T *)value);
>                       if (num_inst == 0) {
>                               report_ccb_validation_error(opdata, 
> "Modification of saAmfCompInstantiationLevel Fail,"
> @@ -963,6 +975,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompNumMaxInstantiateWithoutDelay")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       uint32_t num_inst = *((SaUint32T *)value);
>                       if (num_inst == 0) {
>                               report_ccb_validation_error(opdata, 
> "Modification of saAmfCompNumMaxInstantiateWithoutDelay"
> @@ -970,6 +984,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompNumMaxInstantiateWithDelay")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       uint32_t num_inst = *((SaUint32T *)value);
>                       if (num_inst == 0) {
>                               report_ccb_validation_error(opdata, 
> "Modification of saAmfCompNumMaxInstantiateWithDelay"
> @@ -977,6 +993,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompDelayBetweenInstantiateAttempts")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
>                       if (timeout == 0) {
> @@ -985,6 +1003,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompTerminateCmdArgv")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       char *param_val = *((char **)value);
>                       if (nullptr == param_val) {
>                               report_ccb_validation_error(opdata,
> @@ -992,6 +1012,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompTerminateTimeout")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
>                       if (timeout == 0) {
> @@ -1000,6 +1022,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompCleanupCmdArgv")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       char *param_val = *((char **)value);
>                       if (nullptr == param_val) {
>                               report_ccb_validation_error(opdata,
> @@ -1007,6 +1031,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompCleanupTimeout")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
>                       if (timeout == 0) {
> @@ -1015,6 +1041,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompAmStartCmdArgv")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       char *param_val = *((char **)value);
>                       if (nullptr == param_val) {
>                               report_ccb_validation_error(opdata,
> @@ -1027,6 +1055,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompAmStartTimeout")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
>                       if (timeout == 0) {
> @@ -1040,6 +1070,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompNumMaxAmStartAttempt")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       uint32_t num_am_start = *((SaUint32T *)value);
>                       if (true == comp->su->su_is_external) {
>                               report_ccb_validation_error(opdata, 
> "Modification of saAmfCompNumMaxAmStartAttempt Fail,"
> @@ -1052,6 +1084,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompAmStopCmdArgv")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       char *param_val = *((char **)value);
>                       if (true == comp->su->su_is_external) {
>                               report_ccb_validation_error(opdata,
> @@ -1063,6 +1097,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompAmStopTimeout")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       if (true == comp->su->su_is_external) {
>                               report_ccb_validation_error(opdata,
> @@ -1076,6 +1112,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }               
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompNumMaxAmStopAttempt")) {      
> +                     if (value_is_deleted == true)
> +                             continue;
>                       uint32_t num_am_stop = *((SaUint32T *)value);
>                       if (true == comp->su->su_is_external) {
>                               report_ccb_validation_error(opdata, 
> "Modification of saAmfCompNumMaxAmStopAttempt Fail,"
> @@ -1088,6 +1126,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }               
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompCSISetCallbackTimeout")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
>                       if (timeout == 0) {
> @@ -1096,6 +1136,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }               
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompCSIRmvCallbackTimeout")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
>                       if (timeout == 0) {
> @@ -1104,6 +1146,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompQuiescingCompleteTimeout")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaTimeT timeout;
>                       m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
>                       if (timeout == 0) {
> @@ -1112,6 +1156,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompRecoveryOnError")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       uint32_t recovery = *((SaUint32T *)value);
>                       if ((recovery < SA_AMF_NO_RECOMMENDATION) || (recovery 
> > SA_AMF_CONTAINER_RESTART )) {
>                               report_ccb_validation_error(opdata, 
> "Modification of saAmfCompRecoveryOnError Fail,"
> @@ -1119,6 +1165,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompDisableRestart")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaBoolT val = *((SaBoolT *)value);
>                       if ((val != SA_TRUE) && (val != SA_FALSE)) {
>                               report_ccb_validation_error(opdata,
> @@ -1126,6 +1174,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, "saAmfCompProxyCsi")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaNameT name;
>                       name = *((SaNameT *)value);
>                       if (name.length == 0) {
> @@ -1133,6 +1183,8 @@ static SaAisErrorT ccb_completed_modify_
>                               goto done;
>                       }
>               } else if (!strcmp(attribute->attrName, 
> "saAmfCompContainerCsi")) {
> +                     if (value_is_deleted == true)
> +                             continue;
>                       SaNameT name;
>                       name = *((SaNameT *)value);
>                       if (name.length == 0) {


------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to