osaf/libs/agents/saf/imma/Makefile.am | 4 +-
osaf/libs/agents/saf/imma/imma_cb.h | 1 +
osaf/libs/agents/saf/imma/imma_db.c | 3 +
osaf/libs/agents/saf/imma/imma_init.c | 28 ++-
osaf/libs/agents/saf/imma/imma_oi_api.c | 139 +++++++++----------
osaf/libs/agents/saf/imma/imma_om_api.c | 228 +++++++++++++++----------------
osaf/libs/agents/saf/imma/imma_proc.c | 134 +++++++++++-------
7 files changed, 282 insertions(+), 255 deletions(-)
The patch contains a code for the support long DNs in IMM library
diff --git a/osaf/libs/agents/saf/imma/Makefile.am
b/osaf/libs/agents/saf/imma/Makefile.am
--- a/osaf/libs/agents/saf/imma/Makefile.am
+++ b/osaf/libs/agents/saf/imma/Makefile.am
@@ -28,7 +28,7 @@ noinst_HEADERS = \
noinst_LTLIBRARIES = libimmaOm.la libimmaOi.la
libimmaOm_la_CPPFLAGS = \
- -DIMMA_OM \
+ -DIMMA_OM -DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
-I$(top_srcdir)/osaf/libs/common/immsv/include
@@ -42,7 +42,7 @@ libimmaOm_la_SOURCES = \
imma_proc.c
libimmaOi_la_CPPFLAGS = \
- -DIMMA_OI \
+ -DIMMA_OI -DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
-I$(top_srcdir)/osaf/libs/common/immsv/include
diff --git a/osaf/libs/agents/saf/imma/imma_cb.h
b/osaf/libs/agents/saf/imma/imma_cb.h
--- a/osaf/libs/agents/saf/imma/imma_cb.h
+++ b/osaf/libs/agents/saf/imma/imma_cb.h
@@ -110,6 +110,7 @@ typedef struct imma_search_node {
SaImmHandleT mImmHandle; /* The immOm handle */
SaUint32T mSearchId;
void *mLastAttributes; /* From previous searchNext */
+ void *mLastObjectName; /* From previous searchNext */
SaUint32T searchIndex;
IMMSV_OM_RSP_SEARCH_BUNDLE_NEXT *searchBundle;
} IMMA_SEARCH_NODE;
diff --git a/osaf/libs/agents/saf/imma/imma_db.c
b/osaf/libs/agents/saf/imma/imma_db.c
--- a/osaf/libs/agents/saf/imma/imma_db.c
+++ b/osaf/libs/agents/saf/imma/imma_db.c
@@ -1200,6 +1200,9 @@ uint32_t imma_search_node_delete(IMMA_CB
search_node->mLastAttributes = NULL;
}
+ free(search_node->mLastObjectName);
+ search_node->mLastObjectName = NULL;
+
/* Remove the Node from the tree */
if (ncs_patricia_tree_del(&cb->search_tree, &search_node->patnode) !=
NCSCC_RC_SUCCESS) {
rc = NCSCC_RC_FAILURE;
diff --git a/osaf/libs/agents/saf/imma/imma_init.c
b/osaf/libs/agents/saf/imma/imma_init.c
--- a/osaf/libs/agents/saf/imma/imma_init.c
+++ b/osaf/libs/agents/saf/imma/imma_init.c
@@ -28,6 +28,8 @@
#include "imma.h"
#include "osaf_poll.h"
+#include "osaf_extended_name.h"
+#include "saAis.h"
/*****************************************************************************
global data used by IMMA
@@ -354,7 +356,10 @@ void imma_freeAttrValue3(SaImmAttrValueT
case SA_IMM_ATTR_SATIMET:
case SA_IMM_ATTR_SAFLOATT:
case SA_IMM_ATTR_SADOUBLET:
+ break;
+
case SA_IMM_ATTR_SANAMET:
+ osaf_extended_name_free((SaNameT*) p);
break;
case SA_IMM_ATTR_SASTRINGT:
@@ -413,15 +418,7 @@ void imma_copyAttrValue(IMMSV_EDU_ATTR_V
case SA_IMM_ATTR_SANAMET:
saNameTp = (SaNameT *)attrValue;
- if (saNameTp) {
- osafassert(saNameTp->length <
SA_MAX_NAME_LENGTH);
- valueSize = strnlen((char *)saNameTp->value,
SA_MAX_NAME_LENGTH) + 1;
- if (saNameTp->length + 1 < valueSize) {
- valueSize = saNameTp->length + 1;
- }
- } else {
- valueSize = 0;
- }
+ valueSize = saNameTp ?
osaf_extended_name_length(saNameTp) + 1 : 0;
break;
case SA_IMM_ATTR_SASTRINGT:
@@ -454,7 +451,7 @@ void imma_copyAttrValue(IMMSV_EDU_ATTR_V
(void)memcpy(p->val.x.buf, *saStringTp,
valueSize);
break;
case SA_IMM_ATTR_SANAMET:
- (void)memcpy(p->val.x.buf, saNameTp->value,
valueSize);
+ (void)memcpy(p->val.x.buf,
osaf_extended_name_borrow(saNameTp), valueSize - 1);
break;
case SA_IMM_ATTR_SAANYT:
(void)memcpy(p->val.x.buf, saAnyTp->bufferAddr,
valueSize - 1);
@@ -548,9 +545,14 @@ SaImmAttrValueT imma_copyAttrValue3(cons
case SA_IMM_ATTR_SANAMET:
saNameTp = (SaNameT *)retVal;
- saNameTp->length = strnlen(attrValue->val.x.buf,
attrValue->val.x.size);
- osafassert(saNameTp->length <= SA_MAX_NAME_LENGTH);
- memcpy(saNameTp->value, attrValue->val.x.buf,
saNameTp->length);
+ /* Steal the buffer. */
+ if (attrValue->val.x.size) {
+ osaf_extended_name_steal(attrValue->val.x.buf,
saNameTp);
+ attrValue->val.x.buf = NULL;
+ attrValue->val.x.size = 0;
+ } else {
+ osaf_extended_name_clear(saNameTp);
+ }
break;
case SA_IMM_ATTR_SASTRINGT:
diff --git a/osaf/libs/agents/saf/imma/imma_oi_api.c
b/osaf/libs/agents/saf/imma/imma_oi_api.c
--- a/osaf/libs/agents/saf/imma/imma_oi_api.c
+++ b/osaf/libs/agents/saf/imma/imma_oi_api.c
@@ -38,6 +38,7 @@ TRACE GUIDE:
#include "imma.h"
#include "immsv_api.h"
+#include "osaf_extended_name.h"
static const char *sysaClName = SA_IMM_ATTR_CLASS_NAME;
static const char *sysaAdmName = SA_IMM_ATTR_ADMIN_OWNER_NAME;
@@ -994,7 +995,7 @@ static SaAisErrorT admin_op_result_commo
}
p->paramName.size = strlen(param->paramName) + 1;
- if (p->paramName.size >= SA_MAX_NAME_LENGTH) {
+ if (p->paramName.size >= IMMSV_MAX_PARAM_NAME_LENGTH) {
/* Log this error instead of trace, to simplify
troubleshooting
for the OI maintainer. */
LOG_IN("ERR_INVALID_PARAM: Param name too
long");
@@ -1126,9 +1127,9 @@ SaAisErrorT saImmOiImplementerSet(SaImmO
}
++nameLen; /*Add 1 for the null. */
- if (nameLen >= SA_MAX_NAME_LENGTH) {
+ if (nameLen >= IMMSV_MAX_IMPL_NAME_LENGTH) {
TRACE_4("ERR_LIBRARY: Implementer name too long, size: %u
max:%u",
- nameLen, SA_MAX_NAME_LENGTH);
+ nameLen, IMMSV_MAX_IMPL_NAME_LENGTH - 1);
return SA_AIS_ERR_LIBRARY;
}
@@ -1556,9 +1557,9 @@ SaAisErrorT saImmOiClassImplementerSet(S
}
++nameLen; /*Add 1 for the null. */
- if (nameLen >= SA_MAX_NAME_LENGTH) {
+ if (nameLen >= IMMSV_MAX_CLASS_NAME_LENGTH) {
TRACE_4("ERR_LIBRARY: ClassName too long, size: %u max:%u",
- nameLen, SA_MAX_NAME_LENGTH);
+ nameLen, IMMSV_MAX_CLASS_NAME_LENGTH - 1);
return SA_AIS_ERR_LIBRARY;
}
@@ -1736,9 +1737,9 @@ SaAisErrorT saImmOiClassImplementerRelea
}
++nameLen; /*Add 1 for the null. */
- if (nameLen >= SA_MAX_NAME_LENGTH) {
+ if (nameLen >= IMMSV_MAX_CLASS_NAME_LENGTH) {
TRACE_4("ERR_LIBRARY: ClassName too long, size: %u max:%u",
- nameLen, SA_MAX_NAME_LENGTH);
+ nameLen, IMMSV_MAX_CLASS_NAME_LENGTH - 1);
return SA_AIS_ERR_LIBRARY;
}
@@ -1900,18 +1901,15 @@ SaAisErrorT saImmOiObjectImplementerSet(
return SA_AIS_ERR_BAD_HANDLE;
}
- if ((objectName == NULL) || (objectName->length >= SA_MAX_NAME_LENGTH)
||
- (objectName->length == 0)) {
- TRACE_2("ERR_INVALID_PARAM: Parameter 'objectName' is NULL or
too long "
- "or zero length");
+ if ((objectName == NULL) || !osaf_is_extended_name_valid(objectName) ||
+ osaf_is_extended_name_empty(objectName)) {
+ TRACE_2("ERR_INVALID_PARAM: Parameter 'objectName' is NULL, "
+ "invalid or zero length");
return SA_AIS_ERR_INVALID_PARAM;
}
- TRACE_1("value:'%s' len:%u", objectName->value, objectName->length);
- nameLen = strlen((char *) objectName->value);
- if(objectName->length < nameLen) {
- nameLen = objectName->length;
- }
+ nameLen = osaf_extended_name_length(objectName);
+ TRACE_1("value:'%s' len:%u", osaf_extended_name_borrow(objectName),
(unsigned) nameLen);
++nameLen; /* Add 1 for the null */
switch (scope) {
@@ -1991,8 +1989,8 @@ SaAisErrorT saImmOiObjectImplementerSet(
evt.info.immnd.info.implSet.client_hdl = cl_node->handle;
evt.info.immnd.info.implSet.impl_name.size = nameLen;
evt.info.immnd.info.implSet.impl_name.buf = malloc(nameLen);
- strncpy(evt.info.immnd.info.implSet.impl_name.buf,
- (char *)objectName->value, nameLen - 1);
+ memcpy(evt.info.immnd.info.implSet.impl_name.buf,
+ osaf_extended_name_borrow(objectName), nameLen - 1);
evt.info.immnd.info.implSet.impl_name.buf[nameLen - 1] = 0;
TRACE("Sending size:%u val:'%s'", nameLen - 1,
evt.info.immnd.info.implSet.impl_name.buf);
@@ -2089,17 +2087,13 @@ SaAisErrorT saImmOiObjectImplementerRele
return SA_AIS_ERR_BAD_HANDLE;
}
- if ((objectName == NULL) || (objectName->length == 0) ||
- (objectName->length >= SA_MAX_NAME_LENGTH)) {
- TRACE_2("ERR_INVALID_PARAM: Parameter 'objectName' is NULL or
too long "
+ if ((objectName == NULL) || osaf_is_extended_name_empty(objectName) ||
+ !osaf_is_extended_name_valid(objectName)) {
+ TRACE_2("ERR_INVALID_PARAM: Parameter 'objectName' is NULL "
"or zero length");
return SA_AIS_ERR_INVALID_PARAM;
}
- nameLen = strlen((char *)objectName->value);
-
- if (objectName->length < nameLen) {
- nameLen = objectName->length;
- }
+ nameLen = osaf_extended_name_length(objectName);
++nameLen; /*Add 1 for the null. */
switch (scope) {
@@ -2179,8 +2173,9 @@ SaAisErrorT saImmOiObjectImplementerRele
evt.info.immnd.type = IMMND_EVT_A2ND_OI_OBJ_IMPL_REL;
evt.info.immnd.info.implSet.client_hdl = cl_node->handle;
evt.info.immnd.info.implSet.impl_name.size = nameLen;
- evt.info.immnd.info.implSet.impl_name.buf = calloc(1, nameLen);
- strncpy(evt.info.immnd.info.implSet.impl_name.buf, (char
*)objectName->value, nameLen);
+ evt.info.immnd.info.implSet.impl_name.buf = malloc(nameLen);
+ memcpy(evt.info.immnd.info.implSet.impl_name.buf,
osaf_extended_name_borrow(objectName), nameLen - 1);
+ evt.info.immnd.info.implSet.impl_name.buf[nameLen - 1] = '\0';
evt.info.immnd.info.implSet.impl_id = cl_node->mImplementerId;
evt.info.immnd.info.implSet.scope = scope;
@@ -2263,10 +2258,10 @@ SaAisErrorT saImmOiRtObjectUpdate_2(SaIm
TRACE_ENTER();
- if ((objectName == NULL) || (objectName->length >= SA_MAX_NAME_LENGTH)
||
- (objectName->length == 0)) {
- TRACE_2("ERR_INVALID_PARAM: objectName is NULL or length is 0
or "
- "length is greater than %u", SA_MAX_NAME_LENGTH);
+ if ((objectName == NULL) || !osaf_is_extended_name_valid(objectName) ||
+ osaf_is_extended_name_empty(objectName)) {
+ TRACE_2("ERR_INVALID_PARAM: objectName is NULL, "
+ "invalid or length is 0");
TRACE_LEAVE();
return SA_AIS_ERR_INVALID_PARAM;
}
@@ -2349,22 +2344,13 @@ SaAisErrorT saImmOiRtObjectUpdate_2(SaIm
/*NOTE: should rename member adminOwnerId !!! */
evt.info.immnd.info.objModify.adminOwnerId = cl_node->mImplementerId;
- if (objectName->length) {
- evt.info.immnd.info.objModify.objectName.size = strlen((char
*)objectName->value) + 1;
-
- if (objectName->length + 1 <
evt.info.immnd.info.objModify.objectName.size) {
- evt.info.immnd.info.objModify.objectName.size =
objectName->length + 1;
- }
-
- /*alloc-1 */
- evt.info.immnd.info.objModify.objectName.buf = calloc(1,
evt.info.immnd.info.objModify.objectName.size);
- strncpy(evt.info.immnd.info.objModify.objectName.buf,
- (char *)objectName->value,
evt.info.immnd.info.objModify.objectName.size);
-
evt.info.immnd.info.objModify.objectName.buf[evt.info.immnd.info.objModify.objectName.size
- 1] = '\0';
- } else {
- evt.info.immnd.info.objModify.objectName.size = 0;
- evt.info.immnd.info.objModify.objectName.buf = NULL;
- }
+ evt.info.immnd.info.objModify.objectName.size =
osaf_extended_name_length(objectName) + 1;
+
+ /*alloc-1 */
+ evt.info.immnd.info.objModify.objectName.buf =
malloc(evt.info.immnd.info.objModify.objectName.size);
+ memcpy(evt.info.immnd.info.objModify.objectName.buf,
+ osaf_extended_name_borrow(objectName),
evt.info.immnd.info.objModify.objectName.size - 1);
+
evt.info.immnd.info.objModify.objectName.buf[evt.info.immnd.info.objModify.objectName.size
- 1] = '\0';
osafassert(evt.info.immnd.info.objModify.attrMods == NULL);
@@ -2575,8 +2561,9 @@ extern SaAisErrorT saImmOiRtObjectCreate
return SA_AIS_ERR_INVALID_PARAM;
}
- if (parentName && parentName->length >= SA_MAX_NAME_LENGTH) {
- return SA_AIS_ERR_NAME_TOO_LONG;
+ if (parentName && !osaf_is_extended_name_valid(parentName)) {
+ TRACE_2("ERR_INVALID_PARAM: parentName is invalid");
+ return SA_AIS_ERR_INVALID_PARAM;
}
if (cb->is_immnd_up == false) {
@@ -2653,17 +2640,13 @@ extern SaAisErrorT saImmOiRtObjectCreate
evt.info.immnd.info.objCreate.className.buf =
malloc(evt.info.immnd.info.objCreate.className.size);
strncpy(evt.info.immnd.info.objCreate.className.buf, className,
evt.info.immnd.info.objCreate.className.size);
- if (parentName && parentName->length) {
- evt.info.immnd.info.objCreate.parentName.size = strlen((char
*)parentName->value) + 1;
-
- if (parentName->length + 1 <
evt.info.immnd.info.objCreate.parentName.size) {
- evt.info.immnd.info.objCreate.parentName.size =
parentName->length + 1;
- }
+ if (parentName && !osaf_is_extended_name_empty(parentName)) {
+ evt.info.immnd.info.objCreate.parentName.size =
osaf_extended_name_length(parentName) + 1;
/*alloc-2 */
- evt.info.immnd.info.objCreate.parentName.buf = calloc(1,
evt.info.immnd.info.objCreate.parentName.size);
+ evt.info.immnd.info.objCreate.parentName.buf =
malloc(evt.info.immnd.info.objCreate.parentName.size);
strncpy(evt.info.immnd.info.objCreate.parentName.buf,
- (char *)parentName->value,
evt.info.immnd.info.objCreate.parentName.size);
+ osaf_extended_name_borrow(parentName),
evt.info.immnd.info.objCreate.parentName.size - 1);
evt.info.immnd.info.objCreate.parentName.buf[evt.info.immnd.info.objCreate.parentName.size
- 1] = '\0';
} else {
evt.info.immnd.info.objCreate.parentName.size = 0;
@@ -2707,13 +2690,22 @@ extern SaAisErrorT saImmOiRtObjectCreate
} else if (attr->attrValuesNumber == 0) {
TRACE("RtObjectCreate ignoring attribute %s with no
values", attr->attrName);
continue;
+ } else if(attr->attrValueType == SA_IMM_ATTR_SANAMET) {
+ int n;
+ for(n=0; n<attr->attrValuesNumber; n++) {
+
if(!osaf_is_extended_name_valid(attr->attrValues[n])) {
+ rc = SA_AIS_ERR_INVALID_PARAM;
+ TRACE_2("ERR_INVALID_PARAM: Attribute
'%s' value is not valid", attr->attrName);
+ goto mds_send_fail;
+ }
+ }
}
/*alloc-3 */
p = calloc(1, sizeof(IMMSV_ATTR_VALUES_LIST));
p->n.attrName.size = strlen(attr->attrName) + 1;
- if (p->n.attrName.size >= SA_MAX_NAME_LENGTH) {
+ if (p->n.attrName.size >= IMMSV_MAX_ATTR_NAME_LENGTH) {
TRACE_2("ERR_INVALID_PARAM: Attribute name too long");
rc = SA_AIS_ERR_INVALID_PARAM;
free(p);
@@ -2855,13 +2847,13 @@ SaAisErrorT saImmOiRtObjectDelete(SaImmO
return SA_AIS_ERR_BAD_HANDLE;
}
- if (!objectName || (objectName->length == 0)) {
+ if (!objectName || osaf_is_extended_name_empty(objectName)) {
TRACE_2("ERR_INVALID_PARAM: Empty object-name");
return SA_AIS_ERR_INVALID_PARAM;
}
- if (objectName->length >= SA_MAX_NAME_LENGTH) {
- TRACE_2("ERR_INVALID_PARAM: Object name too long");
+ if (!osaf_is_extended_name_valid(objectName)) {
+ TRACE_2("ERR_INVALID_PARAM: Object name invalid");
return SA_AIS_ERR_INVALID_PARAM;
}
@@ -2938,16 +2930,12 @@ SaAisErrorT saImmOiRtObjectDelete(SaImmO
/* NOTE: should rename member adminOwnerId !!! */
evt.info.immnd.info.objDelete.adminOwnerId = cl_node->mImplementerId;
- evt.info.immnd.info.objDelete.objectName.size = strlen((char
*)objectName->value) + 1;
-
- if (objectName->length + 1 <
evt.info.immnd.info.objDelete.objectName.size) {
- evt.info.immnd.info.objDelete.objectName.size =
objectName->length + 1;
- }
+ evt.info.immnd.info.objDelete.objectName.size =
osaf_extended_name_length(objectName) + 1;
/*alloc-1 */
- evt.info.immnd.info.objDelete.objectName.buf = calloc(1,
evt.info.immnd.info.objDelete.objectName.size);
- strncpy(evt.info.immnd.info.objDelete.objectName.buf,
- (char *)objectName->value,
evt.info.immnd.info.objDelete.objectName.size);
+ evt.info.immnd.info.objDelete.objectName.buf =
malloc(evt.info.immnd.info.objDelete.objectName.size);
+ memcpy(evt.info.immnd.info.objDelete.objectName.buf,
+ osaf_extended_name_borrow(objectName),
evt.info.immnd.info.objDelete.objectName.size - 1);
evt.info.immnd.info.objDelete.objectName.buf[evt.info.immnd.info.objDelete.objectName.size
- 1] = '\0';
rc = imma_evt_fake_evs(cb, &evt, &out_evt, cl_node->syncr_timeout,
cl_node->handle, &locked, true);
@@ -3339,7 +3327,7 @@ getAdmoName(SaImmHandleT privateOmHandle
abort();
}
- strncpy((char *)admoNameOut->value, *(SaStringT*)
attrVal->attrValues[0], SA_MAX_NAME_LENGTH);
+ osaf_extended_name_alloc(*(SaStringT*) attrVal->attrValues[0],
admoNameOut);
} else {
/* modify or delete => fetch admo attribute for object from server.
*/
@@ -3359,7 +3347,7 @@ getAdmoName(SaImmHandleT privateOmHandle
/* attrVal found either in create callback, or fetched from server. */
if(rc == SA_AIS_OK) {
- TRACE("Obtained AdmoName:%s",admoNameOut->value);
+ TRACE("Obtained AdmoName:%s",
osaf_extended_name_borrow(admoNameOut));
}
TRACE_LEAVE();
return rc;
@@ -3605,21 +3593,24 @@ SaAisErrorT saImmOiAugmentCcbInitialize(
if(rc != SA_AIS_ERR_TRY_AGAIN) {
rc = SA_AIS_ERR_TRY_AGAIN;
}
+ osaf_extended_name_free(&admName);
goto done;
}
- TRACE("Obtaned AdminOwnerName:%s", admName.value);
+ TRACE("Obtaned AdminOwnerName:%s",
osaf_extended_name_borrow(&admName));
/* Allocate private admowner with ReleaseOnFinalize as
TRUE */
osafassert(immsv_om_admo_handle_initialize);
rc = immsv_om_admo_handle_initialize(privateOmHandle,
- (SaImmAdminOwnerNameT) admName.value,
&privateAoHandle);
+ (SaImmAdminOwnerNameT)
osaf_extended_name_borrow(&admName), &privateAoHandle);
if(rc != SA_AIS_OK) {
TRACE("ERR_TRY_AGAIN: failed to obtain internal
admo handle rc:%u", rc);
if(rc != SA_AIS_ERR_TRY_AGAIN) {
rc = SA_AIS_ERR_TRY_AGAIN;
}
+ osaf_extended_name_free(&admName);
goto done;
}
+ osaf_extended_name_free(&admName);
}
} else {TRACE("AugCcbinit: Admo has ROF == TRUE");}
diff --git a/osaf/libs/agents/saf/imma/imma_om_api.c
b/osaf/libs/agents/saf/imma/imma_om_api.c
--- a/osaf/libs/agents/saf/imma/imma_om_api.c
+++ b/osaf/libs/agents/saf/imma/imma_om_api.c
@@ -38,9 +38,12 @@
#define _GNU_SOURCE
#include <string.h>
+#include <stdlib.h>
#include "imma.h"
#include "immsv_api.h"
+#include "saAis.h"
+#include "osaf_extended_name.h"
static const char *immLoaderName = IMMSV_LOADERNAME; /*Defined in
immsv_evt.h */
@@ -926,8 +929,8 @@ SaAisErrorT saImmOmAdminOwnerInitialize(
return SA_AIS_ERR_INVALID_PARAM;
}
- if (nameLen >= SA_MAX_NAME_LENGTH) {
- TRACE_2("ERR_INVALID_PARAM: Admin owner name too long, size: %u
max:%u", nameLen, SA_MAX_NAME_LENGTH - 1);
+ if (nameLen >= IMMSV_MAX_ADMO_NAME_LENGTH) {
+ TRACE_2("ERR_INVALID_PARAM: Admin owner name too long, size: %u
max:%u", nameLen, IMMSV_MAX_ADMO_NAME_LENGTH - 1);
return SA_AIS_ERR_INVALID_PARAM;
}
@@ -997,8 +1000,8 @@ SaAisErrorT saImmOmAdminOwnerInitialize(
evt.type = IMMSV_EVT_TYPE_IMMND;
evt.info.immnd.type = IMMND_EVT_A2ND_IMM_ADMINIT;
evt.info.immnd.info.adminitReq.client_hdl = immHandle;
- evt.info.immnd.info.adminitReq.i.adminOwnerName.length = nameLen;
- memcpy(evt.info.immnd.info.adminitReq.i.adminOwnerName.value,
adminOwnerName, nameLen + 1);
+ osaf_extended_name_alloc(adminOwnerName,
+ &evt.info.immnd.info.adminitReq.i.adminOwnerName);
if (releaseOwnershipOnFinalize) {
evt.info.immnd.info.adminitReq.i.releaseOwnershipOnFinalize =
true;
/* Release on finalize can not be undone in case of IMMND crash.
@@ -1777,20 +1780,15 @@ SaAisErrorT saImmOmCcbObjectCreate_2(SaI
}
strncpy(evt.info.immnd.info.objCreate.className.buf, className,
evt.info.immnd.info.objCreate.className.size);
- if (parentName && parentName->length) {
- evt.info.immnd.info.objCreate.parentName.size = strlen((char
*)parentName->value) + 1;
-
- if (parentName->length + 1 <
evt.info.immnd.info.objCreate.parentName.size) {
- evt.info.immnd.info.objCreate.parentName.size =
parentName->length + 1;
- }
-
- if (evt.info.immnd.info.objCreate.parentName.size >
SA_MAX_NAME_LENGTH) {
+ if (parentName && !osaf_is_extended_name_empty(parentName)) {
+ if (!osaf_is_extended_name_valid(parentName)) {
rc = SA_AIS_ERR_INVALID_PARAM;
- TRACE_2("ERR_INVALID_PARAM: Parent name too long for
SaNameT: %u",
- evt.info.immnd.info.objCreate.parentName.size);
+ TRACE_2("ERR_INVALID_PARAM: Parent name invalid");
goto mds_send_fail;
-
- }
+ }
+
+ evt.info.immnd.info.objCreate.parentName.size =
+ osaf_extended_name_length(parentName) + 1;
/*alloc-2 */
evt.info.immnd.info.objCreate.parentName.buf =
malloc(evt.info.immnd.info.objCreate.parentName.size);
@@ -1798,8 +1796,9 @@ SaAisErrorT saImmOmCcbObjectCreate_2(SaI
rc = SA_AIS_ERR_NO_MEMORY;
goto mds_send_fail;
}
- strncpy(evt.info.immnd.info.objCreate.parentName.buf,
- (char *)parentName->value,
evt.info.immnd.info.objCreate.parentName.size);
+ memcpy(evt.info.immnd.info.objCreate.parentName.buf,
+ osaf_extended_name_borrow(parentName),
+ evt.info.immnd.info.objCreate.parentName.size - 1);
evt.info.immnd.info.objCreate.parentName.buf[evt.info.immnd.info.objCreate.parentName.size
- 1] = '\0';
} else {
evt.info.immnd.info.objCreate.parentName.size = 0;
@@ -1866,7 +1865,7 @@ SaAisErrorT saImmOmCcbObjectCreate_2(SaI
p = calloc(1, sizeof(IMMSV_ATTR_VALUES_LIST));
p->n.attrName.size = strlen(attr->attrName) + 1;
- if (p->n.attrName.size >= SA_MAX_NAME_LENGTH) {
+ if (p->n.attrName.size >= IMMSV_MAX_ATTR_NAME_LENGTH) {
TRACE_2("ERR_INVALID_PARAM: Attribute name too long");
rc = SA_AIS_ERR_INVALID_PARAM;
free(p);
@@ -2088,6 +2087,12 @@ SaAisErrorT saImmOmCcbObjectModify_2(SaI
return SA_AIS_ERR_INVALID_PARAM;
}
+ if (osaf_is_extended_name_empty(objectName)) {
+ TRACE_2("ERR_INVALID_PARAM: objectName is empty");
+ TRACE_LEAVE();
+ return SA_AIS_ERR_INVALID_PARAM;
+ }
+
if (attrMods == NULL) {
TRACE_2("ERR_INVALID_PARAM: attrMods is NULL");
TRACE_LEAVE();
@@ -2287,21 +2292,17 @@ SaAisErrorT saImmOmCcbObjectModify_2(SaI
evt.info.immnd.info.objModify.adminOwnerId = adminOwnerId;
evt.info.immnd.info.objModify.ccbId = ccb_node->mCcbId;
- if (objectName->length) {
- evt.info.immnd.info.objModify.objectName.size = strlen((char
*)objectName->value) + 1;
-
- if (objectName->length + 1 <
evt.info.immnd.info.objModify.objectName.size) {
- evt.info.immnd.info.objModify.objectName.size =
objectName->length + 1;
- }
-
+ evt.info.immnd.info.objModify.objectName.size =
osaf_extended_name_length(objectName) + 1;
+ if (evt.info.immnd.info.objModify.objectName.size != 1) {
/*alloc-1 */
evt.info.immnd.info.objModify.objectName.buf =
malloc(evt.info.immnd.info.objModify.objectName.size);
if (evt.info.immnd.info.objModify.objectName.buf == NULL) {
rc = SA_AIS_ERR_NO_MEMORY;
goto mds_send_fail;
}
- strncpy(evt.info.immnd.info.objModify.objectName.buf,
- (char *)objectName->value,
evt.info.immnd.info.objModify.objectName.size);
+ memcpy(evt.info.immnd.info.objModify.objectName.buf,
+ osaf_extended_name_borrow(objectName),
+ evt.info.immnd.info.objModify.objectName.size - 1);
evt.info.immnd.info.objModify.objectName.buf[evt.info.immnd.info.objModify.objectName.size
- 1] = '\0';
} else {
evt.info.immnd.info.objModify.objectName.size = 0;
@@ -2537,7 +2538,7 @@ SaAisErrorT saImmOmCcbObjectDelete(SaImm
return SA_AIS_ERR_BAD_HANDLE;
}
- if (!objectName || (objectName->length == 0)) {
+ if (!objectName || osaf_is_extended_name_empty(objectName)) {
TRACE_2("ERR_INVALID_PARAM: Empty object-name");
return SA_AIS_ERR_INVALID_PARAM;
}
@@ -2735,11 +2736,7 @@ SaAisErrorT saImmOmCcbObjectDelete(SaImm
evt.info.immnd.info.objDelete.adminOwnerId = adminOwnerId;
evt.info.immnd.info.objDelete.ccbId = ccb_node->mCcbId;
- evt.info.immnd.info.objDelete.objectName.size = strlen((char
*)objectName->value) + 1;
-
- if (objectName->length + 1 <
evt.info.immnd.info.objDelete.objectName.size) {
- evt.info.immnd.info.objDelete.objectName.size =
objectName->length + 1;
- }
+ evt.info.immnd.info.objDelete.objectName.size =
osaf_extended_name_length(objectName) + 1;
/*alloc-1 */
evt.info.immnd.info.objDelete.objectName.buf =
malloc(evt.info.immnd.info.objDelete.objectName.size);
@@ -2747,8 +2744,9 @@ SaAisErrorT saImmOmCcbObjectDelete(SaImm
rc = SA_AIS_ERR_NO_MEMORY;
goto mds_send_fail;
}
- strncpy(evt.info.immnd.info.objDelete.objectName.buf,
- (char *)objectName->value,
evt.info.immnd.info.objDelete.objectName.size);
+ memcpy(evt.info.immnd.info.objDelete.objectName.buf,
+ osaf_extended_name_borrow(objectName),
+ evt.info.immnd.info.objDelete.objectName.size - 1);
evt.info.immnd.info.objDelete.objectName.buf[evt.info.immnd.info.objDelete.objectName.size
- 1] = '\0';
rc = imma_evt_fake_evs(cb, &evt, &out_evt, cl_node->syncr_timeout,
cl_node->handle, &locked, false);
@@ -3468,7 +3466,7 @@ static SaAisErrorT admin_op_invoke_commo
}
if ((objectName == NULL) || (operationReturnValue == NULL) ||
- (objectName->length == 0) || (objectName->length >=
SA_MAX_NAME_LENGTH)
+ osaf_is_extended_name_empty(objectName) ||
!osaf_is_extended_name_valid(objectName)
|| (params == NULL)) {
rc = SA_AIS_ERR_INVALID_PARAM;
goto done;
@@ -3595,16 +3593,14 @@ static SaAisErrorT admin_op_invoke_commo
TRACE("immInvocations:%i", immInvocations);
evt.info.immnd.info.admOpReq.invocation = ++immInvocations;
- evt.info.immnd.info.admOpReq.objectName.size = strnlen((char
*)objectName->value, objectName->length) + 1;
- if (objectName->length + 1 <
evt.info.immnd.info.admOpReq.objectName.size) {
- evt.info.immnd.info.admOpReq.objectName.size =
objectName->length + 1;
- }
+ evt.info.immnd.info.admOpReq.objectName.size =
osaf_extended_name_length(objectName) + 1;
/*alloc-1 */
evt.info.immnd.info.admOpReq.objectName.buf =
malloc(evt.info.immnd.info.admOpReq.objectName.size);
- strncpy(evt.info.immnd.info.admOpReq.objectName.buf,
- (char *)objectName->value,
evt.info.immnd.info.admOpReq.objectName.size);
+ memcpy(evt.info.immnd.info.admOpReq.objectName.buf,
+ osaf_extended_name_borrow(objectName),
+ evt.info.immnd.info.admOpReq.objectName.size - 1);
evt.info.immnd.info.admOpReq.objectName.buf[evt.info.immnd.info.admOpReq.objectName.size
- 1] = '\0';
osafassert(evt.info.immnd.info.admOpReq.params == NULL);
@@ -3630,7 +3626,7 @@ static SaAisErrorT admin_op_invoke_commo
}
p->paramName.size = strlen(param->paramName) + 1;
- if (p->paramName.size >= SA_MAX_NAME_LENGTH) {
+ if (p->paramName.size >= IMMSV_MAX_PARAM_NAME_LENGTH) {
TRACE_2("ERR_INVALID_PARAM: Param name too long");
rc = SA_AIS_ERR_INVALID_PARAM;
free(p);
@@ -3692,6 +3688,25 @@ static SaAisErrorT admin_op_invoke_commo
if(returnParams) {
*returnParams =
imma_proc_get_params(out_evt->info.imma.info.admOpRsp.parms);
//imma_proc_free_pointers(cb,
&(out_evt->info.imma)); ABT: Crashes, figure out why!
+
+ /* Check SaNameT values if the client
side does not support extended names.
+ * In this case if everything is ok,
but the client does not support extended names,
+ * operationReturnValue should be set
to SA_AIS_ERR_NAME_TOO_LONG,
+ * and SaNameT values should be cleared
*/
+ if(!osaf_is_extended_names_enabled()) {
+ i = 0;
+ while((*returnParams)[i]) {
+
if((*returnParams)[i]->paramType == SA_IMM_ATTR_SANAMET
+ &&
osaf_is_extended_name_valid((SaNameT *)(*returnParams)[i]->paramBuffer)) {
+
if(*operationReturnValue == SA_AIS_OK) {
+
*operationReturnValue = SA_AIS_ERR_NAME_TOO_LONG;
+ }
+
osaf_extended_name_free((SaNameT *)(*returnParams)[i]->paramBuffer);
+
osaf_extended_name_clear((SaNameT *)(*returnParams)[i]->paramBuffer);
+ }
+ i++;
+ }
+ }
} else {
imma_proc_free_pointers(cb,
&(out_evt->info.imma));
}
@@ -3951,8 +3966,8 @@ SaAisErrorT saImmOmAdminOperationInvokeA
return SA_AIS_ERR_BAD_HANDLE;
}
- if ((objectName == NULL) || (objectName->length == 0) ||
- (objectName->length >= SA_MAX_NAME_LENGTH) || (params == NULL)) {
+ if ((objectName == NULL) || osaf_is_extended_name_empty(objectName) ||
+ !osaf_is_extended_name_valid(objectName) || (params == NULL)) {
rc = SA_AIS_ERR_INVALID_PARAM;
goto done;
}
@@ -4064,17 +4079,15 @@ SaAisErrorT saImmOmAdminOperationInvokeA
evt.info.immnd.info.admOpReq.invocation = -(++immInvocations);
/*Negate invoc to encode async */
- evt.info.immnd.info.admOpReq.objectName.size = strnlen((char
*)objectName->value, objectName->length) + 1;
- if (objectName->length + 1 <
evt.info.immnd.info.admOpReq.objectName.size) {
- evt.info.immnd.info.admOpReq.objectName.size =
objectName->length + 1;
- }
+ evt.info.immnd.info.admOpReq.objectName.size =
osaf_extended_name_length(objectName) + 1;
/*alloc-1 */
- evt.info.immnd.info.admOpReq.objectName.buf = calloc(1,
evt.info.immnd.info.admOpReq.objectName.size);
-
- strncpy(evt.info.immnd.info.admOpReq.objectName.buf,
- (char *)objectName->value,
evt.info.immnd.info.admOpReq.objectName.size);
- /* evt.info.immnd.info.admOpReq.objectName.buf[objectName->length] =
'\0'; */
+ evt.info.immnd.info.admOpReq.objectName.buf =
malloc(evt.info.immnd.info.admOpReq.objectName.size);
+
+ memcpy(evt.info.immnd.info.admOpReq.objectName.buf,
+ osaf_extended_name_borrow(objectName),
+ evt.info.immnd.info.admOpReq.objectName.size - 1);
+
evt.info.immnd.info.admOpReq.objectName.buf[evt.info.immnd.info.admOpReq.objectName.size
- 1] = '\0';
osafassert(evt.info.immnd.info.admOpReq.params == NULL);
@@ -4100,7 +4113,7 @@ SaAisErrorT saImmOmAdminOperationInvokeA
}
p->paramName.size = strlen(param->paramName) + 1;
- if (p->paramName.size >= SA_MAX_NAME_LENGTH) {
+ if (p->paramName.size >= IMMSV_MAX_PARAM_NAME_LENGTH) {
TRACE_2("ERR_INVALID_PARAM: Param name too long");
rc = SA_AIS_ERR_INVALID_PARAM;
free(p);
@@ -4819,7 +4832,6 @@ SaAisErrorT saImmOmClassDescriptionGet_2
break;
case SA_IMM_ATTR_SANAMET:
-
osafassert(q->attrDefaultValue->val.x.size <= SA_MAX_NAME_LENGTH);
size = sizeof(SaNameT);
break;
@@ -4871,11 +4883,7 @@ SaAisErrorT saImmOmClassDescriptionGet_2
case SA_IMM_ATTR_SANAMET:
namep = (SaNameT
*)copyv;
- memset(namep, 0,
sizeof(SaNameT));
- namep->length =
strnlen(q->attrDefaultValue->val.x.buf,
-
q->attrDefaultValue->val.x.size);
-
osafassert(namep->length <= SA_MAX_NAME_LENGTH);
- memcpy(namep->value,
q->attrDefaultValue->val.x.buf, namep->length);
+
osaf_extended_name_alloc(q->attrDefaultValue->val.x.buf, namep); /*alloc-5 */
break;
case SA_IMM_ATTR_SAANYT:
@@ -5319,6 +5327,8 @@ SaAisErrorT saImmOmAccessorFinalize(SaIm
imma_freeSearchAttrs((SaImmAttrValuesT_2
**)search_node->mLastAttributes);
search_node->mLastAttributes = NULL;
}
+ free(search_node->mLastObjectName);
+ search_node->mLastObjectName = NULL;
immHandle = search_node->mImmHandle;
proc_rc = imma_search_node_delete(cb, search_node);
@@ -5376,7 +5386,8 @@ SaAisErrorT saImmOmAccessorGet_2(SaImmAc
return SA_AIS_ERR_TRY_AGAIN;
}
- if ((objectName == NULL) || (objectName->length == 0) ||
(objectName->length >= SA_MAX_NAME_LENGTH)) {
+ if ((objectName == NULL) || osaf_is_extended_name_empty(objectName) ||
+ !osaf_is_extended_name_valid(objectName)) {
TRACE_2("ERR_INVALID_PARAM: Incorrect parameter contents:
objectName");
TRACE_LEAVE();
return SA_AIS_ERR_INVALID_PARAM;
@@ -5454,11 +5465,9 @@ SaAisErrorT saImmOmAccessorGet_2(SaImmAc
evt.info.immnd.type = IMMND_EVT_A2ND_ACCESSOR_GET;
IMMSV_OM_SEARCH_INIT *req = &(evt.info.immnd.info.searchInit);
req->client_hdl = immHandle;
- req->rootName.size = strlen((char *)objectName->value) + 1;
- if(objectName->length + 1 < req->rootName.size)
- req->rootName.size = objectName->length + 1;
+ req->rootName.size = osaf_extended_name_length(objectName) + 1;
req->rootName.buf = malloc(req->rootName.size); /* alloc-1 */
- strncpy(req->rootName.buf, (char *)objectName->value,
(size_t)req->rootName.size);
+ memcpy(req->rootName.buf, osaf_extended_name_borrow(objectName),
(size_t)req->rootName.size - 1);
req->rootName.buf[req->rootName.size - 1] = 0;
req->scope = SA_IMM_ONE;
@@ -5551,6 +5560,8 @@ SaAisErrorT saImmOmAccessorGet_2(SaImmAc
imma_freeSearchAttrs((SaImmAttrValuesT_2
**)search_node->mLastAttributes);
search_node->mLastAttributes = NULL;
}
+ free(search_node->mLastObjectName);
+ search_node->mLastObjectName = NULL;
if(out_evt) {
osafassert(out_evt->type == IMMSV_EVT_TYPE_IMMA);
@@ -5821,7 +5832,7 @@ SaAisErrorT immsv_sync(SaImmHandleT immH
/* (attrValues != NULL) Case B or C */
- osafassert((objectName->length != 0) && (objectName->length <
SA_MAX_NAME_LENGTH));
+ osafassert(!osaf_is_extended_name_empty(objectName) &&
osaf_is_extended_name_valid(objectName));
evt.info.immnd.info.obj_sync.className.size = strlen(className) + 1;
@@ -5829,16 +5840,13 @@ SaAisErrorT immsv_sync(SaImmHandleT immH
evt.info.immnd.info.obj_sync.className.buf =
malloc(evt.info.immnd.info.obj_sync.className.size);
strncpy(evt.info.immnd.info.obj_sync.className.buf, className,
evt.info.immnd.info.obj_sync.className.size);
- evt.info.immnd.info.obj_sync.objectName.size = strlen((char
*)objectName->value) + 1;
-
- if (objectName->length + 1 <
evt.info.immnd.info.obj_sync.objectName.size) {
- evt.info.immnd.info.obj_sync.objectName.size =
objectName->length + 1;
- }
+ evt.info.immnd.info.obj_sync.objectName.size =
osaf_extended_name_length(objectName) + 1;
/*alloc-2 */
evt.info.immnd.info.obj_sync.objectName.buf =
malloc(evt.info.immnd.info.obj_sync.objectName.size);
- strncpy(evt.info.immnd.info.obj_sync.objectName.buf,
- (char *)objectName->value,
evt.info.immnd.info.obj_sync.objectName.size);
+ memcpy(evt.info.immnd.info.obj_sync.objectName.buf,
+ osaf_extended_name_borrow(objectName),
+ evt.info.immnd.info.obj_sync.objectName.size - 1);
evt.info.immnd.info.obj_sync.objectName.buf[evt.info.immnd.info.obj_sync.objectName.size
- 1] = '\0';
osafassert(evt.info.immnd.info.obj_sync.attrValues == NULL);
@@ -5857,7 +5865,7 @@ SaAisErrorT immsv_sync(SaImmHandleT immH
IMMSV_ATTR_VALUES_LIST *p = calloc(1,
sizeof(IMMSV_ATTR_VALUES_LIST));
p->n.attrName.size = strlen(attr->attrName) + 1;
- if (p->n.attrName.size >= SA_MAX_NAME_LENGTH) {
+ if (p->n.attrName.size >= IMMSV_MAX_ATTR_NAME_LENGTH) {
TRACE_2("ERR_INVALID_PARAM: Attribute name too long:
%u", p->n.attrName.size);
rc = SA_AIS_ERR_INVALID_PARAM;
free(p);
@@ -6327,12 +6335,12 @@ SaAisErrorT saImmOmSearchInitialize_2(Sa
evt.info.immnd.type = IMMND_EVT_A2ND_SEARCHINIT;
IMMSV_OM_SEARCH_INIT *req = &(evt.info.immnd.info.searchInit);
req->client_hdl = immHandle;
- if (rootName && rootName->length && (rootName->length <
SA_MAX_NAME_LENGTH)) {
- req->rootName.size = strlen((char *)rootName->value) + 1;
- if (rootName->length + 1 < req->rootName.size)
- req->rootName.size = rootName->length + 1;
+ if (rootName && !osaf_is_extended_name_empty(rootName) &&
+ osaf_is_extended_name_valid(rootName)) {
+ req->rootName.size = osaf_extended_name_length(rootName) + 1;
req->rootName.buf = malloc(req->rootName.size); /* alloc-1 */
- strncpy(req->rootName.buf, (char *)rootName->value,
(size_t)req->rootName.size);
+ memcpy(req->rootName.buf, osaf_extended_name_borrow(rootName),
+ (size_t) req->rootName.size - 1);
req->rootName.buf[req->rootName.size - 1] = 0;
} else {
req->rootName.size = 0;
@@ -6388,8 +6396,8 @@ SaAisErrorT saImmOmSearchInitialize_2(Sa
}
}
- if (rootName && rootName->length) {
- TRACE("root: %s param:%p", rootName->value, searchParam);
+ if (rootName && !osaf_is_extended_name_empty(rootName)) {
+ TRACE("root: %s param:%p", osaf_extended_name_borrow(rootName),
searchParam);
}
tmpSearchHandle = search_node->search_hdl;
@@ -6593,8 +6601,10 @@ SaAisErrorT saImmOmSearchNext_2(SaImmSea
if (search_node->mLastAttributes) {
imma_freeSearchAttrs((SaImmAttrValuesT_2
**)search_node->mLastAttributes);
- search_node->mLastAttributes = 0;
- }
+ search_node->mLastAttributes = NULL;
+ }
+ free(search_node->mLastObjectName);
+ search_node->mLastObjectName = NULL;
/* Check if there is any result in the buffer */
if (search_node->searchBundle) {
@@ -6760,11 +6770,9 @@ searchresult:
size_t attrDataSize = 0;
SaImmAttrValuesT_2 **attr = NULL;
- objectName->length = 0;
- m_IMMSV_SET_SANAMET(objectName);
- objectName->length = strnlen(res_body->objectName.buf,
res_body->objectName.size);
- osafassert(objectName->length <= SA_MAX_NAME_LENGTH);
- memcpy(objectName->value, res_body->objectName.buf,
objectName->length);
+ memset(objectName, 0, sizeof(*objectName));
+ search_node->mLastObjectName = strdup(res_body->objectName.buf);
+ osaf_extended_name_lend(search_node->mLastObjectName,
objectName);
IMMSV_ATTR_VALUES_LIST *p = res_body->attrValuesList;
while (p) {
@@ -6905,6 +6913,8 @@ SaAisErrorT saImmOmSearchFinalize(SaImmS
imma_freeSearchAttrs((SaImmAttrValuesT_2
**)search_node->mLastAttributes);
search_node->mLastAttributes = NULL;
}
+ free(search_node->mLastObjectName);
+ search_node->mLastObjectName = NULL;
if (search_node->searchBundle) {
uint32_t i;
@@ -7180,14 +7190,11 @@ SaAisErrorT saImmOmAdminOwnerSet(SaImmAd
int i;
for (i = 0; objectNames[i]; ++i) {
objectName = objectNames[i];
- osafassert(objectName->length < SA_MAX_NAME_LENGTH);
IMMSV_OBJ_NAME_LIST *ol = calloc(1,
sizeof(IMMSV_OBJ_NAME_LIST)); /*a */
- ol->name.size = strnlen((char *)objectName->value,
SA_MAX_NAME_LENGTH) + 1;
- if (ol->name.size > objectName->length) {
- ol->name.size = objectName->length;
- }
+ ol->name.size = osaf_extended_name_length(objectName) + 1;
ol->name.buf = malloc(ol->name.size); /*b */
- memcpy(ol->name.buf, objectName->value, ol->name.size);
+ memcpy(ol->name.buf, osaf_extended_name_borrow(objectName),
ol->name.size - 1);
+ ol->name.buf[ol->name.size - 1] = '\0';
ol->next = admo_set_evt.info.immnd.info.admReq.objectNames;
/*null initially */
admo_set_evt.info.immnd.info.admReq.objectNames = ol;
}
@@ -7376,14 +7383,11 @@ SaAisErrorT saImmOmAdminOwnerRelease(SaI
int i;
for (i = 0; objectNames[i]; ++i) {
objectName = objectNames[i];
- osafassert(objectName->length < SA_MAX_NAME_LENGTH);
IMMSV_OBJ_NAME_LIST *ol = calloc(1,
sizeof(IMMSV_OBJ_NAME_LIST)); /*a */
- ol->name.size = strnlen((char *)objectName->value,
SA_MAX_NAME_LENGTH) + 1;
- if (ol->name.size > objectName->length) {
- ol->name.size = objectName->length;
- }
+ ol->name.size = osaf_extended_name_length(objectName) + 1;
ol->name.buf = malloc(ol->name.size); /*b */
- memcpy(ol->name.buf, objectName->value, ol->name.size);
+ memcpy(ol->name.buf, osaf_extended_name_borrow(objectName),
ol->name.size - 1);
+ ol->name.buf[ol->name.size - 1] = '\0';
ol->next = admo_set_evt.info.immnd.info.admReq.objectNames;
/*null initially */
admo_set_evt.info.immnd.info.admReq.objectNames = ol;
}
@@ -7537,14 +7541,11 @@ SaAisErrorT saImmOmAdminOwnerClear(SaImm
int i;
for (i = 0; objectNames[i]; ++i) {
objectName = objectNames[i];
- osafassert(objectName->length < SA_MAX_NAME_LENGTH);
IMMSV_OBJ_NAME_LIST *ol = calloc(1,
sizeof(IMMSV_OBJ_NAME_LIST)); /*a */
- ol->name.size = strnlen((char *)objectName->value,
SA_MAX_NAME_LENGTH) + 1;
- if (ol->name.size > objectName->length) {
- ol->name.size = objectName->length;
- }
+ ol->name.size = osaf_extended_name_length(objectName) + 1;
ol->name.buf = malloc(ol->name.size); /*b */
- memcpy(ol->name.buf, objectName->value, ol->name.size);
+ memcpy(ol->name.buf, osaf_extended_name_borrow(objectName),
ol->name.size - 1);
+ ol->name.buf[ol->name.size - 1] = '\0';
ol->next = admo_set_evt.info.immnd.info.admReq.objectNames;
/*null initially */
admo_set_evt.info.immnd.info.admReq.objectNames = ol;
}
@@ -8014,7 +8015,6 @@ static SaBoolT imma_re_initialize_admin_
IMMA_ADMIN_OWNER_NODE *adm_found_node = NULL;
IMMSV_EVT evt;
IMMSV_EVT *out_evt = NULL;
- SaUint32T nameLen = 0;
IMMA_CLIENT_NODE *cl_node = NULL;
bool locked = false;
SaUint32T timeout = 0;
@@ -8069,16 +8069,13 @@ static SaBoolT imma_re_initialize_admin_
goto fail;
}
- nameLen = strlen(adm_found_node->mAdminOwnerName);
-
/* Populate & Send the Event to IMMND */
memset(&evt, 0, sizeof(IMMSV_EVT));
evt.type = IMMSV_EVT_TYPE_IMMND;
evt.info.immnd.type = IMMND_EVT_A2ND_IMM_ADMINIT;
evt.info.immnd.info.adminitReq.client_hdl = immHandle;
- evt.info.immnd.info.adminitReq.i.adminOwnerName.length = nameLen;
- memcpy(evt.info.immnd.info.adminitReq.i.adminOwnerName.value,
- adm_found_node->mAdminOwnerName, nameLen + 1);
+ osaf_extended_name_alloc(adm_found_node->mAdminOwnerName,
+ &evt.info.immnd.info.adminitReq.i.adminOwnerName);
evt.info.immnd.info.adminitReq.i.releaseOwnershipOnFinalize = false;
temp_hdl = adm_found_node->admin_owner_hdl;
@@ -8625,6 +8622,7 @@ SaAisErrorT immsv_om_augment_ccb_get_adm
SaImmAttrValuesT_2 *attrVal = NULL;
SaImmAccessorHandleT acHdl=0LL;
TRACE_ENTER();
+ osaf_extended_name_clear(admoNameOut);
rc = saImmOmAccessorInitialize(privateOmHandle, &acHdl);
if(rc != SA_AIS_OK) {goto done;}
@@ -8638,7 +8636,7 @@ SaAisErrorT immsv_om_augment_ccb_get_adm
goto finalize;
}
- strncpy((char *)admoNameOut->value, *(SaStringT*)
attrVal->attrValues[0], SA_MAX_NAME_LENGTH);
+ osaf_extended_name_alloc(*(SaStringT*) attrVal->attrValues[0],
admoNameOut);
finalize:
if(acHdl) {
diff --git a/osaf/libs/agents/saf/imma/imma_proc.c
b/osaf/libs/agents/saf/imma/imma_proc.c
--- a/osaf/libs/agents/saf/imma/imma_proc.c
+++ b/osaf/libs/agents/saf/imma/imma_proc.c
@@ -25,6 +25,8 @@
#include "imma.h"
#include "immsv_api.h"
#include "ncssysf_mem.h"
+#include "osaf_extended_name.h"
+#include "saAis.h"
#include <string.h>
@@ -379,10 +381,7 @@ static void imma_proc_admop(IMMA_CB *cb,
callback->invocation = saInv;
- callback->name.length =
strnlen(evt->info.admOpReq.objectName.buf, evt->info.admOpReq.objectName.size);
- osafassert(callback->name.length <= SA_MAX_NAME_LENGTH);
- memcpy((char *)callback->name.value,
evt->info.admOpReq.objectName.buf, callback->name.length);
- free(evt->info.admOpReq.objectName.buf);
+ osaf_extended_name_steal(evt->info.admOpReq.objectName.buf,
&callback->name);
evt->info.admOpReq.objectName.buf = NULL;
evt->info.admOpReq.objectName.size = 0;
callback->operationId = evt->info.admOpReq.operationId;
@@ -775,11 +774,7 @@ static void imma_proc_rt_attr_update(IMM
callback->type = IMMA_CALLBACK_OI_RT_ATTR_UPDATE;
callback->lcl_imm_hdl = implHandle;
- callback->name.length =
strnlen(evt->info.searchRemote.objectName.buf,
-
evt->info.searchRemote.objectName.size);
- osafassert(callback->name.length <= SA_MAX_NAME_LENGTH);
- memcpy((char *)callback->name.value,
evt->info.searchRemote.objectName.buf, callback->name.length);
- free(evt->info.searchRemote.objectName.buf);
+ osaf_extended_name_steal(evt->info.searchRemote.objectName.buf,
&callback->name);
evt->info.searchRemote.objectName.buf = NULL;
evt->info.searchRemote.objectName.size = 0;
@@ -1022,11 +1017,7 @@ static void imma_proc_obj_delete(IMMA_CB
callback->lcl_imm_hdl = implHandle;
callback->ccbID = evt->info.objDelete.ccbId;
callback->inv = evt->info.objDelete.adminOwnerId; /*ugly
*/
- callback->name.length =
strnlen(evt->info.objDelete.objectName.buf,
-
evt->info.objDelete.objectName.size);
- osafassert(callback->name.length <= SA_MAX_NAME_LENGTH);
- memcpy((char *)callback->name.value,
evt->info.objDelete.objectName.buf, callback->name.length);
- free(evt->info.objDelete.objectName.buf);
+ osaf_extended_name_steal(evt->info.objDelete.objectName.buf,
&callback->name);
evt->info.objDelete.objectName.buf = NULL;
evt->info.objDelete.objectName.size = 0;
@@ -1051,7 +1042,7 @@ static void imma_proc_obj_delete(IMMA_CB
} else if(cl_node->isPbe) { /* PBE. */
TRACE("PBe case inv:%u", callback->inv);
if((callback->inv != 0) &&
- (strcmp((char *)callback->name.value,
OPENSAF_IMM_OBJECT_DN))) {
+
strcmp(osaf_extended_name_borrow(&callback->name), OPENSAF_IMM_OBJECT_DN) != 0)
{
/* callback->inv must be zero, except
for operations on
OPENSAF_IMM_OBJECT_DN */
LOG_ER("PBE: callback->inv != 0,
LINE:%u", __LINE__);
@@ -1124,11 +1115,7 @@ static void imma_proc_obj_create(IMMA_CB
callback->ccbID = evt->info.objCreate.ccbId;
callback->inv = evt->info.objCreate.adminOwnerId;
/*Actually continuationId */
- callback->name.length =
strnlen(evt->info.objCreate.parentName.buf,
-
evt->info.objCreate.parentName.size);
- osafassert(callback->name.length <= SA_MAX_NAME_LENGTH);
- memcpy((char *)callback->name.value,
evt->info.objCreate.parentName.buf, callback->name.length);
- free(evt->info.objCreate.parentName.buf);
+ osaf_extended_name_steal(evt->info.objCreate.parentName.buf,
&callback->name);
evt->info.objCreate.parentName.buf = NULL;
evt->info.objCreate.parentName.size = 0;
@@ -1212,11 +1199,7 @@ static void imma_proc_obj_modify(IMMA_CB
callback->inv = evt->info.objModify.adminOwnerId;
/*Actually continuationId */
- callback->name.length =
strnlen(evt->info.objModify.objectName.buf,
-
evt->info.objModify.objectName.size);
- osafassert(callback->name.length <= SA_MAX_NAME_LENGTH);
- memcpy((char *)callback->name.value,
evt->info.objModify.objectName.buf, callback->name.length);
- free(evt->info.objModify.objectName.buf);
+ osaf_extended_name_steal(evt->info.objModify.objectName.buf,
&callback->name);
evt->info.objModify.objectName.buf = NULL;
evt->info.objModify.objectName.size = 0;
@@ -1891,13 +1874,15 @@ static void imma_process_callback_info(I
#ifdef IMMA_OI
bool isPbeOp = false;
+ bool isExtendedNameValid = false;
switch (callback->type) {
case IMMA_CALLBACK_PBE_ADMIN_OP:
isPbeOp = true;
osafassert(cl_node->isPbe);
TRACE("PBE Admin OP callback");
case IMMA_CALLBACK_OM_ADMIN_OP:
- if (cl_node->o.iCallbk.saImmOiAdminOperationCallback) {
+ isExtendedNameValid =
osaf_is_extended_name_valid(&(callback->name));
+ if (cl_node->o.iCallbk.saImmOiAdminOperationCallback &&
isExtendedNameValid) {
cl_node->o.iCallbk.saImmOiAdminOperationCallback(callback->lcl_imm_hdl,
callback->invocation,
&(callback->name),
@@ -1905,17 +1890,28 @@ static void imma_process_callback_info(I
(const SaImmAdminOperationParamsT_2 **)
callback->params);
} else {
+ SaAisErrorT error = IMMSV_IMPOSSIBLE_ERROR;
+ if(!isExtendedNameValid) {
+ if (osaf_is_extended_names_enabled()) {
+ TRACE_3("Object name is too
long: %s", osaf_extended_name_borrow(&callback->name));
+ } else {
+ TRACE_3("Extended name feature
is disabled. Object name is too long: %s",
osaf_extended_name_borrow(&callback->name));
+ }
+ error = SA_AIS_ERR_BAD_OPERATION;
+ }
/*No callback registered for admin-op!! */
SaAisErrorT localErr =
saImmOiAdminOperationResult(callback->lcl_imm_hdl,
callback->invocation,
- IMMSV_IMPOSSIBLE_ERROR);
+ error);
if (localErr == SA_AIS_OK) {
TRACE_3("Object %s has implementer but "
- "saImmOiAdminOperationCallback
is set to NULL", callback->name.value);
+ "saImmOiAdminOperationCallback
is set to NULL",
+
osaf_extended_name_borrow(&callback->name));
} else {
TRACE_3("Object %s has implementer but "
"saImmOiAdminOperationCallback
is set to NULL "
- "and could not send error
result, error: %u", callback->name.value, localErr);
+ "and could not send error
result, error: %u",
+
osaf_extended_name_borrow(&callback->name), localErr);
}
}
break;
@@ -1942,7 +1938,7 @@ static void imma_process_callback_info(I
/* PRTO delete reply only on
completed*/
//callback->inv = 0;
TRACE("Pseudo ccb %llx for PRTO
deletes completed upcall on %s",
- ccbid,
callback->name.value);
+ ccbid,
osaf_extended_name_borrow(&callback->name));
if(!imma_oi_ccb_record_ok_for_critical(cl_node, ccbid, callback->implId)) {
TRACE("ERROR:
RtObjectDelete record for pseudo-ccb %llx does not have"
"correct
op-count", ccbid); /* Already logged in ok_for_critical */
@@ -2131,7 +2127,6 @@ static void imma_process_callback_info(I
}
}
- SaNameT parentName = callback->name;
const SaImmClassNameT className =
callback->className; /*0 */
callback->className = NULL;
int noOfAttributes = 0;
@@ -2193,11 +2188,20 @@ static void imma_process_callback_info(I
*/
callback->attrValsForCreateUc = (const
SaImmAttrValuesT_2 **)attr;
- localEr =
cl_node->o.iCallbk.saImmOiCcbObjectCreateCallback(callback->lcl_imm_hdl,
- ccbid,
- className,
- &parentName,
- callback->attrValsForCreateUc);
+ if
(osaf_is_extended_name_valid(&(callback->name))) {
+ localEr =
cl_node->o.iCallbk.saImmOiCcbObjectCreateCallback(callback->lcl_imm_hdl,
+ ccbid,
+ className,
+ &(callback->name),
+
callback->attrValsForCreateUc);
+ } else {
+ if
(osaf_is_extended_names_enabled()) {
+ TRACE_3("Object name is
too long: %s", osaf_extended_name_borrow(&(callback->name)));
+ } else {
+ TRACE_3("Extended name
feature is disabled. Object name is too long: %s",
osaf_extended_name_borrow(&(callback->name)));
+ }
+ localEr =
SA_AIS_ERR_BAD_OPERATION;
+ }
TRACE("ccb-object-create callback
returned RC:%u", localEr);
if (!(localEr == SA_AIS_OK ||
@@ -2342,14 +2346,23 @@ static void imma_process_callback_info(I
/* PRTO delete reply only on
completed*/
callback->inv = 0;
TRACE("Pseudo ccb %llx for PRTO
delete upcall on %s",
- ccbid,
callback->name.value);
+ ccbid,
osaf_extended_name_borrow(&callback->name));
} else {
ccbid = callback->ccbID;
if(!(cl_node->isApplier))
{imma_oi_ccb_allow_error_string(cl_node, ccbid);}
}
- localEr =
cl_node->o.iCallbk.saImmOiCcbObjectDeleteCallback(callback->lcl_imm_hdl,
- ccbid, &(callback->name));
+ if
(osaf_is_extended_name_valid(&(callback->name))) {
+ localEr =
cl_node->o.iCallbk.saImmOiCcbObjectDeleteCallback(callback->lcl_imm_hdl,
+ ccbid,
&(callback->name));
+ } else {
+ if
(osaf_is_extended_names_enabled()) {
+ TRACE_3("Object name is
too long: %s", osaf_extended_name_borrow(&(callback->name)));
+ } else {
+ TRACE_3("Extended name
feature is disabled. Object name is too long: %s",
osaf_extended_name_borrow(&(callback->name)));
+ }
+ localEr =
SA_AIS_ERR_BAD_OPERATION;
+ }
TRACE("ccb-object-delete callback
returned RC:%u", localEr);
if (!(localEr == SA_AIS_OK ||
@@ -2385,7 +2398,7 @@ static void imma_process_callback_info(I
ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.oi_client_hdl = callback->lcl_imm_hdl;
ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.ccbId = callback->ccbID;
ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.inv = callback->inv;
-
ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.name = callback->name;
+
osaf_extended_name_lend(osaf_extended_name_borrow(&(callback->name)),
&(ccbObjDelRpl.info.immnd.info.ccbUpcallRsp.name));
osafassert(m_NCS_LOCK(&cb->cb_lock,
NCS_LOCK_WRITE) == NCSCC_RC_SUCCESS);
locked = true;
@@ -2470,9 +2483,8 @@ static void imma_process_callback_info(I
/* Error strings are
not relevant for PRT ops. */
imma_oi_ccb_allow_error_string(cl_node, callback->ccbID);
}
- }
-
- SaNameT objectName = callback->name;
+ }
+
int noOfAttrMods = 0;
IMMSV_ATTR_MODS_LIST *p =
callback->attrMods;
@@ -2527,8 +2539,17 @@ static void imma_process_callback_info(I
const SaImmAttrModificationT_2
**constPtrForStupidCompiler =
(const SaImmAttrModificationT_2
**)attr;
- localEr =
cl_node->o.iCallbk.saImmOiCcbObjectModifyCallback(callback->lcl_imm_hdl, ccbid,
&objectName,
- constPtrForStupidCompiler);
+ if
(osaf_is_extended_name_valid(&(callback->name))) {
+ localEr =
cl_node->o.iCallbk.saImmOiCcbObjectModifyCallback(callback->lcl_imm_hdl,
+ ccbid,
&(callback->name), constPtrForStupidCompiler);
+ } else {
+ if
(osaf_is_extended_names_enabled()) {
+ TRACE_3("Object name is
too long: %s", osaf_extended_name_borrow(&(callback->name)));
+ } else {
+ TRACE_3("Extended name
feature is disabled. Object name is too long: %s",
osaf_extended_name_borrow(&(callback->name)));
+ }
+ localEr =
SA_AIS_ERR_BAD_OPERATION;
+ }
TRACE("ccb-object-modify callback
returned RC:%u", localEr);
if (!(localEr == SA_AIS_OK ||
@@ -2707,10 +2728,20 @@ static void imma_process_callback_info(I
/*attributeNames[noOfAttrNames] = NULL;
calloc=> redundant */
- TRACE("Invoking
saImmOiRtAttrUpdateCallback");
- localEr =
cl_node->o.iCallbk.saImmOiRtAttrUpdateCallback(callback->lcl_imm_hdl,
- &callback->name,
- attributeNames);
+ if
(osaf_is_extended_name_valid(&(callback->name))) {
+ TRACE("Invoking
saImmOiRtAttrUpdateCallback");
+ localEr =
cl_node->o.iCallbk.saImmOiRtAttrUpdateCallback(callback->lcl_imm_hdl,
+ &callback->name,
+ attributeNames);
+ } else {
+ if
(osaf_is_extended_names_enabled()) {
+ TRACE_3("Object name is
too long: %s", osaf_extended_name_borrow(&(callback->name)));
+ } else {
+ TRACE_3("Extended name
feature is disabled. Object name is too long: %s",
osaf_extended_name_borrow(&(callback->name)));
+ }
+ localEr =
SA_AIS_ERR_BAD_OPERATION;
+ }
+
TRACE("saImmOiRtAttrUpdateCallback
returned RC:%u", localEr);
if (!(localEr == SA_AIS_OK ||
@@ -2752,9 +2783,9 @@ static void imma_process_callback_info(I
rtAttrUpdRpl.info.immnd.info.rtAttUpdRpl.sr.remoteNodeId = owner;
/*Adding one to get the terminating null sent */
-
rtAttrUpdRpl.info.immnd.info.rtAttUpdRpl.sr.objectName.size =
callback->name.length + 1;
+
rtAttrUpdRpl.info.immnd.info.rtAttUpdRpl.sr.objectName.size =
osaf_extended_name_length(&callback->name) + 1;
/* Only borowing the name string from the
SaName in the callback */
-
rtAttrUpdRpl.info.immnd.info.rtAttUpdRpl.sr.objectName.buf = (char
*)callback->name.value;
+
rtAttrUpdRpl.info.immnd.info.rtAttUpdRpl.sr.objectName.buf = (char*)
osaf_extended_name_borrow(&callback->name);
/* Only borowing the attributeNames list from
callback. */
rtAttrUpdRpl.info.immnd.info.rtAttUpdRpl.sr.attributeNames =
callback->attrNames;
rtAttrUpdRpl.info.immnd.info.rtAttUpdRpl.sr.requestNodeId =
callback->requestNodeId;
@@ -2827,6 +2858,7 @@ static void imma_proc_free_callback(IMMA
callback->attrNames = NULL;
}
+ osaf_extended_name_free(&callback->name);
free(callback);
}
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel