|
From: Mathivanan N. P. <mat...@or...> - 2016-08-09 06:25:06
|
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)
|