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

Reply via email to