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: opensaf-devel@lists.sourceforge.net
> 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:zoran.milinko...@ericsson.com]
> > Sent: Saturday, July 16, 2016 3:27 AM
> > To: Mathivanan Naickan Palanivelu
> > Cc: opensaf-devel@lists.sourceforge.net
> > 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
> Opensaf-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/opensaf-devel

------------------------------------------------------------------------------
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
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to