Ack with comment: The below line has been typed twice. One should be AmStop. > + attr_name = "saAmfCtRelPathAmStartCmd";
Thanks -Nagu > -----Original Message----- > From: Hans Feldt [mailto:osafde...@gmail.com] > Sent: 28 January 2014 19:11 > To: Nagendra Kumar > Cc: opensaf-devel@lists.sourceforge.net > Subject: [PATCH 1 of 2] amfd: require saAmfCtSwBundle when relpath in CLC- > CLI cmds [#662] > > osaf/services/saf/amf/amfd/comptype.cc | 147 > ++++++++++++++++++++++++-------- > 1 files changed, 107 insertions(+), 40 deletions(-) > > > diff --git a/osaf/services/saf/amf/amfd/comptype.cc > b/osaf/services/saf/amf/amfd/comptype.cc > --- a/osaf/services/saf/amf/amfd/comptype.cc > +++ b/osaf/services/saf/amf/amfd/comptype.cc > @@ -108,11 +108,6 @@ static AVD_COMP_TYPE *comptype_create(co > > > (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBun > dle"), attributes, 0, &compt->saAmfCtSwBundle); > > - if (!IS_COMP_PROXIED(compt->saAmfCtCompCategory) && > IS_COMP_LOCAL(compt->saAmfCtCompCategory)) { > - error = > immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBundle"), > attributes, 0, &compt->saAmfCtSwBundle); > - osafassert(error == SA_AIS_OK); > - } > - > if ((str = immutil_getStringAttr(attributes, "saAmfCtDefCmdEnv", 0)) != > NULL) > strcpy(compt->saAmfCtDefCmdEnv, str); > > (void)immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefClcC > liTimeout"), attributes, 0, &compt->saAmfCtDefClcCliTimeout); @@ -162,24 > +157,47 @@ static AVD_COMP_TYPE *comptype_create(co > return compt; > } > > -static int is_config_valid(const SaNameT *dn, const SaImmAttrValuesT_2 > **attributes, CcbUtilOperationData_t *opdata) > +/** > + * reports path validation errors > + * @param opdata > + * @param attr_name > + */ > +static inline void report_path_validation_err(CcbUtilOperationData_t *opdata, > + const char *attr_name) { > + report_ccb_validation_error(opdata, > + "%s does not contain an absolute path and " > + "attribute saAmfCtSwBundle is not configured for '%s'", > + attr_name, opdata->objectName.value); } > + > +/** > + * Validates new component type in CCB > + * @param dn > + * @param attributes > + * @param opdata > + * @return true if valid > + */ > +static bool config_is_valid(const SaNameT *dn, > + const SaImmAttrValuesT_2 **attributes, > + CcbUtilOperationData_t *opdata) > { > SaUint32T category; > SaUint32T value; > char *parent; > - SaNameT name; > SaTimeT time; > SaAisErrorT rc; > + const char *cmd; > + const char *attr_name; > > if ((parent = strchr((char*)dn->value, ',')) == NULL) { > report_ccb_validation_error(opdata, "No parent to '%s' ", dn- > >value); > - return 0; > + return false; > } > > /* Should be children to the Comp Base type */ > if (strncmp(++parent, "safCompType=", 12) != 0) { > report_ccb_validation_error(opdata, "Wrong parent '%s' to > '%s' ", parent, dn->value); > - return 0; > + return false; > } > > rc = > immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtCompCategory"), > attributes, 0, &category); @@ -189,7 +207,7 @@ static int > is_config_valid(const SaNameT > if (IS_COMP_PROXY(category) || IS_COMP_CONTAINER(category)|| > IS_COMP_CONTAINED(category)) { > report_ccb_validation_error(opdata, "Unsupported > saAmfCtCompCategory value '%u' for '%s'", > category, dn->value); > - return 0; > + return false; > } > > /* > @@ -200,7 +218,7 @@ static int is_config_valid(const SaNameT > > (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefClcCliTimeout"), > attributes, 0, &time) != SA_AIS_OK)) { > report_ccb_validation_error(opdata, "Required attribute > saAmfCtDefClcCliTimeout not configured for '%s'", > dn->value); > - return 0; > + return false; > } > > /* > @@ -211,7 +229,7 @@ static int is_config_valid(const SaNameT > > (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefCallbackTimeout" > ), attributes, 0, &time) != SA_AIS_OK)) { > report_ccb_validation_error(opdata, "Required attribute > saAmfCtDefCallbackTimeout not configured for '%s'", > dn->value); > - return 0; > + return false; > } > > /* > @@ -226,45 +244,93 @@ static int is_config_valid(const SaNameT > // this is OK for backwards compatibility reasons > } > > + SaNameT bundle_name = {0, 0}; > + bool bundle_configured = false; > + if > (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBundle"), > + attributes, 0, &bundle_name) == SA_AIS_OK) { > + bundle_configured = true; > + } > + > /* > - ** The saAmfCtSwBundle/saAmfCtRelPathInstantiateCmd "attribute is > mandatory for all > + ** The saAmfCtRelPathInstantiateCmd "attribute is mandatory for all > ** non-proxied local components". > */ > if (!(IS_COMP_PROXIED(category) || > IS_COMP_PROXIED_NPI(category)) && IS_COMP_LOCAL(category)) { > + attr_name = "saAmfCtRelPathInstantiateCmd"; > > - if > (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtSwBundle"), > attributes, 0, &name) != SA_AIS_OK) { > - report_ccb_validation_error(opdata, "Required > attribute saAmfCtSwBundle not configured for '%s'", > - dn->value); > - return 0; > + cmd = immutil_getStringAttr(attributes, attr_name, 0); > + if (cmd == NULL) { > + report_ccb_validation_error(opdata, > + "Required attribute %s not configured for > '%s'", > + attr_name, opdata->objectName.value); > + return false; > } > > - if (immutil_getStringAttr(attributes, > "saAmfCtRelPathInstantiateCmd", 0) == NULL) { > - report_ccb_validation_error(opdata, "Required > attribute saAmfCtRelPathInstantiateCmd not configured" > - " for '%s'", dn->value); > - return 0; > + if ((cmd[0] != '/') && (bundle_configured == false)) { > + report_path_validation_err(opdata, attr_name); > + return false; > } > } > > /* > - ** The saAmfCtRelPathTerminateCmd "attribute is mandatory for local > non-proxied, > - ** non-SA-aware components". > + ** The saAmfCtRelPathTerminateCmd "attribute is mandatory for local > + ** non-proxied, non-SA-aware components". > */ > - if (IS_COMP_LOCAL(category) && !(IS_COMP_PROXIED(category) || > IS_COMP_PROXIED_NPI(category)) && !IS_COMP_SAAWARE(category) && > - (immutil_getStringAttr(attributes, "saAmfCtRelPathTerminateCmd", > 0) == NULL)) { > - report_ccb_validation_error(opdata, "Required attribute > saAmfCtRelPathTerminateCmd not configured for '%s'," > - " cat=%x", dn->value, category); > - return 0; > + if (IS_COMP_LOCAL(category) && !(IS_COMP_PROXIED(category) || > + IS_COMP_PROXIED_NPI(category)) && > !IS_COMP_SAAWARE(category)) { > + attr_name = "saAmfCtRelPathTerminateCmd"; > + > + cmd = immutil_getStringAttr(attributes, attr_name, 0); > + if (cmd == NULL) { > + report_ccb_validation_error(opdata, > + "Required attribute %s not configured for > '%s'", > + attr_name, opdata->objectName.value); > + return false; > + } > + > + if ((cmd[0] != '/') && (bundle_configured == false)) { > + report_path_validation_err(opdata, attr_name); > + return false; > + } > } > > /* > - ** The saAmfCtRelPathCleanupCmd "attribute is mandatory for all local > components (proxied or > - ** non-proxied)" > + ** The saAmfCtRelPathCleanupCmd "attribute is mandatory for all local > + ** components (proxied or non-proxied)" > */ > - if (IS_COMP_LOCAL(category) && > - (immutil_getStringAttr(attributes, > "saAmfCtRelPathCleanupCmd", 0) == NULL)) { > - report_ccb_validation_error(opdata, "Required attribute > saAmfCtRelPathCleanupCmd not configured for '%s'", > - dn->value); > - return 0; > + if (IS_COMP_LOCAL(category)) { > + attr_name = "saAmfCtRelPathCleanupCmd"; > + > + cmd = immutil_getStringAttr(attributes, attr_name, 0); > + if (cmd == NULL) { > + report_ccb_validation_error(opdata, > + "Required attribute %s not configured for > '%s'", > + attr_name, opdata->objectName.value); > + return false; > + } > + > + if ((cmd[0] != '/') && (bundle_configured == false)) { > + report_path_validation_err(opdata, attr_name); > + return false; > + } > + } > + > + attr_name = "saAmfCtRelPathAmStartCmd"; > + cmd = immutil_getStringAttr(attributes, attr_name, 0); > + if (cmd != NULL) { > + if ((cmd[0] != '/') && (bundle_configured == false)) { > + report_path_validation_err(opdata, attr_name); > + return false; > + } > + } > + > + attr_name = "saAmfCtRelPathAmStartCmd"; > + cmd = immutil_getStringAttr(attributes, attr_name, 0); > + if (cmd != NULL) { > + if ((cmd[0] != '/') && (bundle_configured == false)) { > + report_path_validation_err(opdata, attr_name); > + return false; > + } > } > > rc = > immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfCtDefRecoveryOnError > "), attributes, 0, &value); @@ -273,7 +339,7 @@ static int > is_config_valid(const SaNameT > if ((value < SA_AMF_NO_RECOMMENDATION) || (value > > SA_AMF_NODE_FAILFAST)) { > report_ccb_validation_error(opdata, "Illegal/unsupported > saAmfCtDefRecoveryOnError value %u for '%s'", > value, dn->value); > - return 0; > + return false; > } > > if (value == SA_AMF_NO_RECOMMENDATION) @@ -284,10 +350,10 > @@ static int is_config_valid(const SaNameT > if ((rc == SA_AIS_OK) && (value > SA_TRUE)) { > report_ccb_validation_error(opdata, "Illegal > saAmfCtDefDisableRestart value %u for '%s'", > value, dn->value); > - return 0; > + return false; > } > > - return 1; > + return true; > } > > /** > @@ -323,7 +389,7 @@ SaAisErrorT avd_comptype_config_get(void > } > > while (immutil_saImmOmSearchNext_2(searchHandle, &dn, > (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { > - if (!is_config_valid(&dn, attributes, NULL)) > + if (config_is_valid(&dn, attributes, NULL) == false) > goto done2; > if ((comp_type = avd_comptype_get(&dn)) == NULL) { > if ((comp_type = comptype_create(&dn, attributes)) > == NULL) @@ -381,7 +447,8 @@ static SaAisErrorT comptype_ccb_complete > > switch (opdata->operationType) { > case CCBUTIL_CREATE: > - if (is_config_valid(&opdata->objectName, opdata- > >param.create.attrValues, opdata)) > + if (config_is_valid(&opdata->objectName, > + opdata->param.create.attrValues, opdata) == > true) > rc = SA_AIS_OK; > break; > case CCBUTIL_MODIFY: ------------------------------------------------------------------------------ Managing the Performance of Cloud-Based Applications Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. Read the Whitepaper. http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel