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

Reply via email to