|
From: Mathivanan N. P. <mat...@or...> - 2016-08-15 04:34:31
|
Hi Zoran,
I pushed both the patches and updated the ticket with the following comments:
- testing backward compatibility
- evaluate changes to CLMNA
Mathi.
> -----Original Message-----
> From: Mathivanan Naickan Palanivelu
> Sent: Tuesday, August 09, 2016 11:55 AM
> To: Zoran Milinkovic
> Cc: ope...@li...
> Subject: Re: [devel] [PATCH 2 of 2] clm: add support for long RDN for clm
> service [#1906]
>
> Ack,
> Mathi.
>
>
> > -----Original Message-----
> > From: Zoran Milinkovic [mailto:zor...@er...]
> > Sent: Saturday, July 16, 2016 3:27 AM
> > To: Mathivanan Naickan Palanivelu
> > Cc: ope...@li...
> > Subject: [PATCH 2 of 2] clm: add support for long RDN for clm service
> > [#1906]
> >
> > osaf/services/saf/clmsv/clms/clms_imm.c | 73
> > +++++++++++++++++++++++++++----
> > osaf/services/saf/clmsv/clms/clms_main.c | 5 ++
> > osaf/services/saf/clmsv/clms/clms_util.c | 7 +++
> > 3 files changed, 75 insertions(+), 10 deletions(-)
> >
> >
> > Add support for long RDN to support RDN values longer than 64 bytes
> >
> > diff --git a/osaf/services/saf/clmsv/clms/clms_imm.c
> > b/osaf/services/saf/clmsv/clms/clms_imm.c
> > --- a/osaf/services/saf/clmsv/clms/clms_imm.c
> > +++ b/osaf/services/saf/clmsv/clms/clms_imm.c
> > @@ -18,6 +18,7 @@
> > #include <saImmOi.h>
> >
> > #include "clms.h"
> > +#include "osaf_extended_name.h"
> >
> > extern struct ImmutilWrapperProfile immutilWrapperProfile;
> >
> > @@ -222,9 +223,17 @@ CLMS_CLUSTER_NODE
> *clms_node_new(SaNameT
> >
> > } else if (!strcmp(attr->attrName, "saClmNodeEE")) {
> > SaNameT *name = (SaNameT *)value;
> > - TRACE("saClmNodeEE attribute name's length %d",
> > name->length);
> > -
> > - if (name->length != 0) {
> > + size_t nameLen =
> > osaf_extended_name_length(name);
> > +
> > + TRACE("saClmNodeEE attribute name's length %lu",
> > nameLen);
> > +
> > + if (nameLen != 0) {
> > + if (nameLen >= SA_MAX_NAME_LENGTH) {
> > + LOG_ER("saClmNodeEE attribute
> > name length is longer than 255");
> > + free(node);
> > + node = NULL;
> > + goto done;
> > + }
> > if (strncmp((const char *)name-
> > >value,"safEE=",6)){
> > LOG_ER("Please provide the saf
> > compliant ee name");
> > free(node);
> > @@ -1383,8 +1392,19 @@ static SaAisErrorT clms_imm_ccb_obj_crea
> > uint32_t rt;
> > CcbUtilCcbData_t *ccb_util_ccb_data;
> > CcbUtilOperationData_t *operation = NULL;
> > -
> > - TRACE_ENTER2("CCB ID %llu, class %s, parent %s", ccbId, className,
> > parentName->value);
> > + size_t parentNameLen = 0;
> > +
> > + TRACE_ENTER2("CCB ID %llu, class %s, parent %s", ccbId, className,
> > + parentName ?
> > osaf_extended_name_borrow(parentName) : "(null)");
> > +
> > + if(parentName) {
> > + parentNameLen =
> > osaf_extended_name_length(parentName);
> > + if(parentNameLen >= SA_MAX_NAME_LENGTH) {
> > + LOG_ER("Parent name is longer than 255");
> > + rc = SA_AIS_ERR_BAD_OPERATION;
> > + goto done;
> > + }
> > + }
> >
> > if ((ccb_util_ccb_data = ccbutil_getCcbData(ccbId)) != NULL) {
> > int i = 0;
> > @@ -1406,17 +1426,30 @@ static SaAisErrorT clms_imm_ccb_obj_crea
> > } else if (!strncmp(attrValue->attrName, "safNode",
> > 7)) {
> > if (attrValue->attrValueType ==
> > SA_IMM_ATTR_SASTRINGT) {
> > SaStringT rdnVal = *((SaStringT
> > *)attrValue->attrValues[0]);
> > - if ((parentName != NULL) &&
> > (parentName->length > 0)) {
> > + if ((parentName != NULL) &&
> > (parentNameLen > 0)
> > + && (strlen(rdnVal) +
> > parentNameLen + 1) < SA_MAX_NAME_LENGTH) {
> > operation-
> > >objectName.length =
> > - (SaUint16T)sprintf((char
> > *)operation->objectName.value, "%s,%s",
> > - rdnVal,
> > parentName->value);
> > +
> > (SaUint16T)sprintf((char *)operation->objectName.value, "%s,%s",
> > +
> > rdnVal, parentName->value);
> > } else {
> > + if(!parentName ||
> > parentNameLen == 0) {
> > + LOG_ER("Node DN
> > name is incorrect. Parent is NULL or empty");
> > + } else {
> > + LOG_ER("Node DN
> > name is incorrect. DN is longer than 255");
> > + }
> > rc =
> > SA_AIS_ERR_BAD_OPERATION;
> > + goto done;
> > }
> > }
> >
> > TRACE("Operation's object Name %s",
> > operation->objectName.value);
> > -
> > + } else if (!strncmp(attrValue->attrName,
> > "saClmNodeEE", 11) && attrValue->attrValuesNumber == 1) {
> > + SaNameT *name = (SaNameT *)attrValue-
> > >attrValues[0];
> > + if(osaf_extended_name_length(name) >=
> > SA_MAX_NAME_LENGTH) {
> > + LOG_ER("saClmNodeEE is longer than
> > 255");
> > + rc = SA_AIS_ERR_BAD_OPERATION;
> > + goto done;
> > + }
> > }
> > }
> > }
> > @@ -1471,17 +1504,37 @@ static SaAisErrorT clms_imm_ccb_obj_modi {
> > SaAisErrorT rc = SA_AIS_OK;
> > struct CcbUtilCcbData *ccbUtilCcbData;
> > + int i = 0;
> > + SaImmAttrModificationT_2 *attrMod;
> > + SaNameT *name;
> >
> > TRACE_ENTER2("CCB ID %llu for object-name:%s ", ccbId,
> > objectName->value);
> >
> > if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) != NULL) {
> > + /* saClmNodeEE cannot be longer than 255 */
> > + while ((attrMod = (SaImmAttrModificationT_2
> > *)attrMods[i++]) != NULL) {
> > + if (strncmp(attrMod->modAttr.attrName,
> > "saClmNodeEE", 11) != 0)
> > + continue;
> > +
> > + if(attrMod->modAttr.attrValuesNumber == 0) {
> > + break;
> > + }
> > +
> > + name = (SaNameT *)attrMod-
> > >modAttr.attrValues[0];
> > + if(osaf_extended_name_length(name) >=
> > SA_MAX_NAME_LENGTH) {
> > + LOG_ER("saClmNodeEE is longer than 255");
> > + rc = SA_AIS_ERR_BAD_OPERATION;
> > + break;
> > + }
> > + }
> > +
> > /*memorize the modification request */
> > if (ccbutil_ccbAddModifyOperation(ccbUtilCcbData,
> > objectName, attrMods) != 0) {
> > LOG_ER("Failed ccb object modify %s", objectName-
> > >value);
> > rc = SA_AIS_ERR_BAD_OPERATION;
> > }
> > } else {
> > - LOG_ER("Failed to get CCB objectfor %llu", ccbId);
> > + LOG_ER("Failed to get CCB object for %llu", ccbId);
> > rc = SA_AIS_ERR_NO_MEMORY;
> > }
> >
> > diff --git a/osaf/services/saf/clmsv/clms/clms_main.c
> > b/osaf/services/saf/clmsv/clms/clms_main.c
> > --- a/osaf/services/saf/clmsv/clms/clms_main.c
> > +++ b/osaf/services/saf/clmsv/clms/clms_main.c
> > @@ -446,6 +446,11 @@ int main(int argc, char *argv[])
> >
> > daemonize(argc, argv);
> >
> > + if(setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1)) {
> > + LOG_ER("Failed to set SA_ENABLE_EXTENDED_NAMES");
> > + goto done;
> > + }
> > +
> > if (clms_init() != NCSCC_RC_SUCCESS) {
> > LOG_ER("clms_init failed");
> > goto done;
> > diff --git a/osaf/services/saf/clmsv/clms/clms_util.c
> > b/osaf/services/saf/clmsv/clms/clms_util.c
> > --- a/osaf/services/saf/clmsv/clms/clms_util.c
> > +++ b/osaf/services/saf/clmsv/clms/clms_util.c
> > @@ -17,6 +17,7 @@
> >
> > #include "clms.h"
> > #include "osaf_time.h"
> > +#include "osaf_extended_name.h"
> >
> > static const SaNameT _clmSvcUsrName = {
> > .value = "safApp=safClmService",
> > @@ -292,6 +293,12 @@ uint32_t clms_node_dn_chk(SaNameT *objNa
> > char *tmpstr;
> > TRACE_ENTER();
> >
> > + if(osaf_extended_name_length(objName) >=
> > SA_MAX_NAME_LENGTH) {
> > + LOG_ER("Object name is longer than 255: %s",
> > osaf_extended_name_borrow(objName));
> > + TRACE_LEAVE();
> > + return NCSCC_RC_FAILURE;
> > + }
> > +
> > if (!strncmp((char *)objName->value, "safNode=", 8)) {
> > tmpstr = strchr((char *)objName->value, ',');
> > if (tmpstr != NULL)
>
> ------------------------------------------------------------------------------
> What NetFlow Analyzer can do for you? Monitors network bandwidth and
> traffic patterns at an interface-level. Reveals which users, apps, and
> protocols are consuming the most bandwidth. Provides multi-vendor support
> for NetFlow, J-Flow, sFlow and other flows. Make informed decisions using
> capacity planning reports. http://sdm.link/zohodev2dev
> _______________________________________________
> Opensaf-devel mailing list
> Ope...@li...
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
|