osaf/libs/common/immsv/Makefile.am               |    1 +
 osaf/libs/common/immsv/immpbe_dump.cc            |   30 +-
 osaf/libs/common/immsv/immsv_evt.c               |  134 +++++++++---
 osaf/libs/common/immsv/include/immsv_api.h       |    5 +
 osaf/services/saf/immsv/config/immnd.conf        |    3 +
 osaf/services/saf/immsv/immd/Makefile.am         |    2 +-
 osaf/services/saf/immsv/immd/immd_amf.c          |    3 +-
 osaf/services/saf/immsv/immd/immd_evt.c          |    3 +-
 osaf/services/saf/immsv/immloadd/Makefile.am     |    1 +
 osaf/services/saf/immsv/immloadd/imm_loader.cc   |   54 ++--
 osaf/services/saf/immsv/immnd/ImmModel.cc        |  245 ++++++++++++++++++----
 osaf/services/saf/immsv/immnd/Makefile.am        |    2 +-
 osaf/services/saf/immsv/immnd/immnd_amf.c        |    3 +-
 osaf/services/saf/immsv/immnd/immnd_evt.c        |   36 +-
 osaf/services/saf/immsv/immnd/immnd_proc.c       |    6 +-
 osaf/services/saf/immsv/immpbed/Makefile.am      |    1 +
 osaf/services/saf/immsv/immpbed/immpbe_daemon.cc |  130 ++++++------
 17 files changed, 444 insertions(+), 215 deletions(-)


The patch contains a code for the support long DNs in IMM service

diff --git a/osaf/libs/common/immsv/Makefile.am 
b/osaf/libs/common/immsv/Makefile.am
--- a/osaf/libs/common/immsv/Makefile.am
+++ b/osaf/libs/common/immsv/Makefile.am
@@ -23,6 +23,7 @@ SUBDIRS = include
 noinst_LTLIBRARIES = libimmsv_common.la libimmpbe_dump.la
 
 libimmsv_common_la_CPPFLAGS = \
+       -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/libs/common/immsv/include
 
diff --git a/osaf/libs/common/immsv/immpbe_dump.cc 
b/osaf/libs/common/immsv/immpbe_dump.cc
--- a/osaf/libs/common/immsv/immpbe_dump.cc
+++ b/osaf/libs/common/immsv/immpbe_dump.cc
@@ -29,6 +29,8 @@
 #include <stdint.h>
 #include <sys/stat.h>
 
+#include "saAis.h"
+#include "osaf_extended_name.h"
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -214,7 +216,7 @@ static int bindValue(sqlite3_stmt *stmt,
                return sqlite3_bind_double(stmt, position, *((double *) value));
         case SA_IMM_ATTR_SANAMET:
             name = (SaNameT *)value;
-               return sqlite3_bind_text(stmt, position, (char *)name->value, 
name->length, NULL);
+               return sqlite3_bind_text(stmt, position, 
osaf_extended_name_borrow(name), osaf_extended_name_length(name), NULL);
         case SA_IMM_ATTR_SASTRINGT:
             str = *((SaStringT *) value);
                return sqlite3_bind_text(stmt, position, str, -1, NULL);
@@ -1975,7 +1977,7 @@ unsigned int purgeInstancesOfClassToPBE(
 
                //assert(attrs[0] == NULL);
 
-               objectDeleteToPBE(std::string((const char *) objectName.value), 
db_handle);
+               
objectDeleteToPBE(std::string(osaf_extended_name_borrow(&objectName)), 
db_handle);
                ++nrofDeletes;
        } while (true);
 
@@ -2052,7 +2054,7 @@ int dumpInstancesOfClassToPBE(SaImmHandl
 
                assert(attrs[0] != NULL);
 
-               if(!objectToPBE(std::string((const char*)objectName.value),
+               
if(!objectToPBE(std::string(osaf_extended_name_borrow(&objectName)),
                        (const SaImmAttrValuesT_2**) attrs, classIdMap, 
dbHandle,
                        ++(*objIdCount), (SaImmClassNameT) className.c_str(), 
0)) 
                {goto bailout;}
@@ -2533,8 +2535,7 @@ int dumpObjectsToPbe(SaImmHandleT immHan
        sqlite3* dbHandle = (sqlite3 *) db_handle;
        TRACE_ENTER();
        unsigned int object_id=0;
-       root.length = 0;
-       strncpy((char*)root.value, "", 3);
+       osaf_extended_name_clear(&root);
 
        /* Initialize immOmSearch */
 
@@ -2587,11 +2588,11 @@ int dumpObjectsToPbe(SaImmHandleT immHan
                if (attrs[0] == NULL)
                {
                        TRACE_2("Skipping object %s because no attributes from 
searchNext",
-                               (char *) objectName.value);
+                               osaf_extended_name_borrow(&objectName));
                        continue;
                }
 
-               if(!objectToPBE(std::string((char*)objectName.value, 
objectName.length),
+               
if(!objectToPBE(std::string(osaf_extended_name_borrow(&objectName)),
                        (const SaImmAttrValuesT_2**) attrs, classIdMap, 
dbHandle, ++object_id, 
                        NULL, 0)) {
                        goto bailout;
@@ -3134,9 +3135,7 @@ std::string getClassName(const SaImmAttr
                        if (attrs[i]->attrValueType == SA_IMM_ATTR_SANAMET)
                        {
                                className =
-                                       std::string((char*)
-                                                               
((SaNameT*)*attrs[i]->attrValues)->value,
-                                                               (size_t) 
((SaNameT*)*attrs[i]->attrValues)->length);
+                                       
std::string(osaf_extended_name_borrow((SaNameT*) *attrs[i]->attrValues));
                                TRACE_LEAVE();
                                return className;
                        }
@@ -3196,10 +3195,9 @@ std::string valueToString(SaImmAttrValue
                case SA_IMM_ATTR_SANAMET:
                        namep = (SaNameT *) value;
 
-                       if (namep->length > 0)
+                       if (!osaf_is_extended_name_empty(namep))
                        {
-                               namep->value[namep->length] = 0;
-                               ost << (char*) namep->value;
+                               ost << osaf_extended_name_borrow(namep);
                        }
                        break;
                case SA_IMM_ATTR_SASTRINGT:
@@ -3235,8 +3233,7 @@ std::list<std::string> getClassNames(SaI
        std::list<std::string> classNamesList;
        TRACE_ENTER();
 
-       strcpy((char*)opensafObjectName.value, OPENSAF_IMM_OBJECT_DN);
-       opensafObjectName.length = strlen(OPENSAF_IMM_OBJECT_DN);
+       osaf_extended_name_lend(OPENSAF_IMM_OBJECT_DN, &opensafObjectName);
 
        /* Initialize immOmSearch */
        errorCode = saImmOmAccessorInitialize(immHandle,
@@ -3295,8 +3292,7 @@ std::list<std::string> getClassNames(SaI
                {
                //std::cout << "SANAMET" << std::endl;
                        std::string classNameString =
-                               
std::string((char*)((SaNameT*)(*attributes)->attrValues + i)->value,
-                                                       
((SaNameT*)(*attributes)->attrValues + i)->length);
+                               
std::string(osaf_extended_name_borrow(((SaNameT*) (*attributes)->attrValues + 
i)));
 
                        classNamesList.push_front(classNameString);
                }
diff --git a/osaf/libs/common/immsv/immsv_evt.c 
b/osaf/libs/common/immsv/immsv_evt.c
--- a/osaf/libs/common/immsv/immsv_evt.c
+++ b/osaf/libs/common/immsv/immsv_evt.c
@@ -24,8 +24,11 @@
 
 #define _GNU_SOURCE
 #include <string.h>
+#include <stdlib.h>
 #include "immsv.h"
 #include "immsv_api.h"
+#include "osaf_extended_name.h"
+#include "saAis.h"
 
 #define IMMSV_MAX_CLASSES 1000
 #define IMMSV_MAX_IMPLEMENTERS 3000
@@ -236,7 +239,6 @@ static void immsv_evt_enc_att_val(NCS_UB
 
        switch (t) {
        case SA_IMM_ATTR_SANAMET:
-               osafassert(v->val.x.size <= SA_MAX_NAME_LENGTH);
                /* Intentional fall through */
        case SA_IMM_ATTR_SASTRINGT:
                os = &(v->val.x);
@@ -2887,18 +2889,27 @@ static uint32_t immsv_evt_enc_toplevel(I
                        break;
 
                case IMMD_EVT_ND2D_ADMINIT_REQ: /* AdminOwnerInitialize */
+               {
                        IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 8);
                        ncs_encode_64bit(&p8, 
immdevt->info.admown_init.client_hdl);
                        ncs_enc_claim_space(o_ub, 8);
 
                        IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 2);
-                       ncs_encode_16bit(&p8, 
immdevt->info.admown_init.i.adminOwnerName.length);
+                       const char* value = 
osaf_extended_name_borrow(&immdevt->info.admown_init.i.adminOwnerName);
+                       size_t length = strlen(value);
+                       if(length >= IMMSV_MAX_ADMO_NAME_LENGTH) {
+                               // With this check we don't need to check for 
extended names
+                               LOG_WA("Admin owner name is too long (max. 255 
characters)");
+                               rc = NCSCC_RC_FAILURE;
+                               break;
+                       }
+                       ncs_encode_16bit(&p8, length);
                        ncs_enc_claim_space(o_ub, 2);
 
                        /* adminOwnerName.value is top level because type is 
SaNameT */
                        if(ncs_encode_n_octets_in_uba(o_ub,
-                                  
immdevt->info.admown_init.i.adminOwnerName.value,
-                                  
immdevt->info.admown_init.i.adminOwnerName.length)
+                                  (uint8_t*) value,
+                                  length)
                                != NCSCC_RC_SUCCESS) {
                                LOG_WA("Failure inside 
ncs_encode_n_octets_in_uba");
                                rc = NCSCC_RC_FAILURE;
@@ -2909,6 +2920,7 @@ static uint32_t immsv_evt_enc_toplevel(I
                        ncs_encode_8bit(&p8, 
immdevt->info.admown_init.i.releaseOwnershipOnFinalize);
                        ncs_enc_claim_space(o_ub, 1);
                        break;
+               }
 
                case IMMD_EVT_ND2D_FEVS_REQ:    /*Fake EVS over Director. */
                case IMMD_EVT_ND2D_FEVS_REQ_2:
@@ -3085,18 +3097,27 @@ static uint32_t immsv_evt_enc_toplevel(I
                        break;
 
                case IMMND_EVT_A2ND_IMM_ADMINIT:        /* AdminOwnerInitialize 
*/
+               {
                        IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 8);
                        ncs_encode_64bit(&p8, 
immndevt->info.adminitReq.client_hdl);
                        ncs_enc_claim_space(o_ub, 8);
 
                        IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 2);
-                       ncs_encode_16bit(&p8, 
immndevt->info.adminitReq.i.adminOwnerName.length);
+                       const char* value = 
osaf_extended_name_borrow(&immndevt->info.adminitReq.i.adminOwnerName);
+                       size_t length = strlen(value);
+                       if(length >= IMMSV_MAX_ADMO_NAME_LENGTH) {
+                               // With this check we don't need to check for 
extended names
+                               LOG_WA("Admin owner name is too long (max. 255 
characters)");
+                               rc = NCSCC_RC_FAILURE;
+                               break;
+                       }
+                       ncs_encode_16bit(&p8, length);
                        ncs_enc_claim_space(o_ub, 2);
 
                        /* adminOwnerName.value is top level because type is 
SaNameT */
                        if(ncs_encode_n_octets_in_uba(o_ub,
-                                  
immndevt->info.adminitReq.i.adminOwnerName.value,
-                                  
immndevt->info.adminitReq.i.adminOwnerName.length)
+                                  (uint8_t*) value,
+                                  length)
                                != NCSCC_RC_SUCCESS) {
                                LOG_WA("Failure inside 
ncs_encode_n_octets_in_uba");
                                rc = NCSCC_RC_FAILURE;
@@ -3107,6 +3128,7 @@ static uint32_t immsv_evt_enc_toplevel(I
                        ncs_encode_8bit(&p8, 
immndevt->info.adminitReq.i.releaseOwnershipOnFinalize);
                        ncs_enc_claim_space(o_ub, 1);
                        break;
+               }
 
                case IMMND_EVT_A2ND_IMM_FEVS:   /*Fake EVS msg from Agent 
(forward) */
                case IMMND_EVT_A2ND_IMM_FEVS_2:
@@ -3500,7 +3522,7 @@ static uint32_t immsv_evt_enc_toplevel(I
                case IMMND_EVT_A2ND_PBE_PRTO_DELETES_COMPLETED_RSP:/*Pbe PRTO 
deletes done */
                case IMMND_EVT_A2ND_PBE_PRT_ATTR_UPDATE_RSP:/* Pbe OI rt attr 
update response*/
                case IMMND_EVT_A2ND_OI_CCB_AUG_INIT:/*OI augments CCB inside 
ccb upcall. #1963 */
-
+               {
                        IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 8);
                        ncs_encode_64bit(&p8, 
immndevt->info.ccbUpcallRsp.oi_client_hdl);
                        ncs_enc_claim_space(o_ub, 8);
@@ -3522,17 +3544,20 @@ static uint32_t immsv_evt_enc_toplevel(I
                        ncs_enc_claim_space(o_ub, 4);
 
                        IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 2);
-                       ncs_encode_16bit(&p8, 
immndevt->info.ccbUpcallRsp.name.length);
+                       const char* value = 
osaf_extended_name_borrow(&immndevt->info.ccbUpcallRsp.name);
+                       size_t length = strlen(value);
+                       osafassert(length <= 0xffff);
+                       ncs_encode_16bit(&p8, length);
                        ncs_enc_claim_space(o_ub, 2);
 
                        /* name.value is top level because type is SaNameT */
                        if((immndevt->type == 
IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP) ||
                                (immndevt->type == 
IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_2) ||
                                (immndevt->type == 
IMMND_EVT_A2ND_OI_CCB_AUG_INIT)) {
-                               if(immndevt->info.ccbUpcallRsp.name.length) {
+                               if (length) {
                                        if(ncs_encode_n_octets_in_uba(o_ub,
-                                                  
immndevt->info.ccbUpcallRsp.name.value,
-                                                  
immndevt->info.ccbUpcallRsp.name.length)
+                                                  (uint8_t*) value,
+                                                  length)
                                                != NCSCC_RC_SUCCESS) {
                                                LOG_WA("Failure inside 
ncs_encode_n_octets_in_uba");
                                                rc = NCSCC_RC_FAILURE;
@@ -3552,6 +3577,7 @@ static uint32_t immsv_evt_enc_toplevel(I
                        }
 
                        break;
+               }
 
                        /* Events IMMND->IMMND (asyncronous) type); */
                case IMMND_EVT_ND2ND_ADMOP_RSP: /* AdminOperation sync fevs 
Reply */
@@ -3723,13 +3749,21 @@ static uint32_t immsv_evt_enc_toplevel(I
                        ncs_enc_claim_space(o_ub, 4);
 
                        IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 2);
-                       ncs_encode_16bit(&p8, 
immndevt->info.adminitGlobal.i.adminOwnerName.length);
+                       const char* value = 
osaf_extended_name_borrow(&immndevt->info.adminitGlobal.i.adminOwnerName);
+                       size_t length = strlen(value);
+                       if(length >= IMMSV_MAX_ADMO_NAME_LENGTH) {
+                               // With this check we don't need to check for 
extended names
+                               LOG_WA("Admin owner name is too long (max. 255 
characters)");
+                               rc = NCSCC_RC_FAILURE;
+                               break;
+                       }
+                       ncs_encode_16bit(&p8, length);
                        ncs_enc_claim_space(o_ub, 2);
 
                        /* adminOwnerName.value is top level because type is 
SaNameT */
                        if(ncs_encode_n_octets_in_uba(o_ub,
-                                  
immndevt->info.adminitGlobal.i.adminOwnerName.value,
-                                  
immndevt->info.adminitGlobal.i.adminOwnerName.length)
+                                  (uint8_t*) value,
+                                  length)
                                != NCSCC_RC_SUCCESS) {
                                LOG_WA("Failure inside 
ncs_encode_n_octets_in_uba");
                                rc = NCSCC_RC_FAILURE;
@@ -4203,28 +4237,39 @@ static uint32_t immsv_evt_dec_toplevel(N
                        break;
 
                case IMMD_EVT_ND2D_ADMINIT_REQ: /* AdminOwnerInitialize */
+               {
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 8);
                        immdevt->info.admown_init.client_hdl = 
ncs_decode_64bit(&p8);
                        ncs_dec_skip_space(i_ub, 8);
 
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 2);
-                       immdevt->info.admown_init.i.adminOwnerName.length = 
ncs_decode_16bit(&p8);
+                       size_t length = ncs_decode_16bit(&p8);
                        ncs_dec_skip_space(i_ub, 2);
+                       if(length >= IMMSV_MAX_ADMO_NAME_LENGTH) {
+                               LOG_WA("Admin owner name is too long (max. 255 
characters)");
+                               rc = NCSCC_RC_FAILURE;
+                               break;
+                       }
 
                        /* adminOwnerName.value is top level because type is 
SaNameT */
-                       if(ncs_decode_n_octets_from_uba(i_ub,
-                                  
immdevt->info.admown_init.i.adminOwnerName.value,
-                                  
immdevt->info.admown_init.i.adminOwnerName.length) !=
+                       char* value = (char*) malloc(length + 1);
+                       if (value == NULL || ncs_decode_n_octets_from_uba(i_ub,
+                                  (uint8_t*) value,
+                                  length) !=
                                NCSCC_RC_SUCCESS) {
+                               free(value);
                                LOG_WA("Failure inside 
ncs_decode_n_octets_from_uba");
                                rc = NCSCC_RC_FAILURE;
                                break;
                        }
+                       value[length] = '\0';
+                       osaf_extended_name_steal(value, 
&immdevt->info.admown_init.i.adminOwnerName);
 
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 1);
                        immdevt->info.admown_init.i.releaseOwnershipOnFinalize 
= ncs_decode_8bit(&p8);
                        ncs_dec_skip_space(i_ub, 1);
                        break;
+               }
 
                case IMMD_EVT_ND2D_FEVS_REQ:    /*Fake EVS over Director. */
                case IMMD_EVT_ND2D_FEVS_REQ_2:
@@ -4404,28 +4449,39 @@ static uint32_t immsv_evt_dec_toplevel(N
                        break;
 
                case IMMND_EVT_A2ND_IMM_ADMINIT:        /* AdminOwnerInitialize 
*/
+               {
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 8);
                        immndevt->info.adminitReq.client_hdl = 
ncs_decode_64bit(&p8);
                        ncs_dec_skip_space(i_ub, 8);
 
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 2);
-                       immndevt->info.adminitReq.i.adminOwnerName.length = 
ncs_decode_16bit(&p8);
+                       size_t length = ncs_decode_16bit(&p8);
                        ncs_dec_skip_space(i_ub, 2);
+                       if(length >= IMMSV_MAX_ADMO_NAME_LENGTH) {
+                               LOG_WA("Admin owner name is too long (max. 255 
characters)");
+                               rc = NCSCC_RC_FAILURE;
+                               break;
+                       }
 
                        /* adminOwnerName.value is top level because type is 
SaNameT */
-                       if(ncs_decode_n_octets_from_uba(i_ub,
-                                  
immndevt->info.adminitReq.i.adminOwnerName.value,
-                                  
immndevt->info.adminitReq.i.adminOwnerName.length) !=
+                       char* value = (char*) malloc(length + 1);
+                       if (value == NULL || ncs_decode_n_octets_from_uba(i_ub,
+                                  (uint8_t*) value,
+                                  length) !=
                                NCSCC_RC_SUCCESS) {
+                               free(value);
                                LOG_WA("Failure inside 
ncs_decode_n_octets_from_uba");
                                rc = NCSCC_RC_FAILURE;
                                break;
                        }
+                       value[length] = '\0';
+                       osaf_extended_name_steal(value, 
&immndevt->info.adminitReq.i.adminOwnerName);
 
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 1);
                        immndevt->info.adminitReq.i.releaseOwnershipOnFinalize 
= ncs_decode_8bit(&p8);
                        ncs_dec_skip_space(i_ub, 1);
                        break;
+               }
 
                case IMMND_EVT_A2ND_IMM_FEVS:     /* Fake EVS msg from Agent 
(forward) */
                case IMMND_EVT_A2ND_IMM_FEVS_2:
@@ -4844,7 +4900,7 @@ static uint32_t immsv_evt_dec_toplevel(N
                case IMMND_EVT_A2ND_PBE_PRTO_DELETES_COMPLETED_RSP:/*Pbe PRTO 
deletes done */
                case IMMND_EVT_A2ND_PBE_PRT_ATTR_UPDATE_RSP:/* Pbe OI rt attr 
update response*/
                case IMMND_EVT_A2ND_OI_CCB_AUG_INIT:/*OI augments CCB inside 
ccb upcall. #1963 */
-
+               {
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 8);
                        immndevt->info.ccbUpcallRsp.oi_client_hdl = 
ncs_decode_64bit(&p8);
                        ncs_dec_skip_space(i_ub, 8);
@@ -4866,22 +4922,27 @@ static uint32_t immsv_evt_dec_toplevel(N
                        ncs_dec_skip_space(i_ub, 4);
 
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 2);
-                       immndevt->info.ccbUpcallRsp.name.length = 
ncs_decode_16bit(&p8);
+                       size_t length = ncs_decode_16bit(&p8);
                        ncs_dec_skip_space(i_ub, 2);
 
+                       
osaf_extended_name_clear(&immndevt->info.ccbUpcallRsp.name);
                        if((immndevt->type == 
IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP) ||
                                (immndevt->type == 
IMMND_EVT_A2ND_CCB_OBJ_DELETE_RSP_2) ||
                                (immndevt->type == 
IMMND_EVT_A2ND_OI_CCB_AUG_INIT)) {
                                /* name.value is top level because type is 
SaNameT */
-                               if(immndevt->info.ccbUpcallRsp.name.length) {
-                                       if(ncs_decode_n_octets_from_uba(i_ub,
-                                                  
immndevt->info.ccbUpcallRsp.name.value,
-                                                  
immndevt->info.ccbUpcallRsp.name.length) !=
+                               if (length) {
+                                       char* value = (char*) malloc(length + 
1);
+                                       if (value == NULL || 
ncs_decode_n_octets_from_uba(i_ub,
+                                                  (uint8_t*) value,
+                                                  length) !=
                                                NCSCC_RC_SUCCESS) {
+                                               free(value);
                                                LOG_WA("Failure inside 
ncs_decode_n_octets_from_uba");
                                                rc = NCSCC_RC_FAILURE;
                                                break;
                                        }
+                                       value[length] = '\0';
+                                       osaf_extended_name_steal(value, 
&immndevt->info.ccbUpcallRsp.name);
                                }
                        }
 
@@ -4896,6 +4957,7 @@ static uint32_t immsv_evt_dec_toplevel(N
                        }
 
                        break;
+               }
 
                        /* Events IMMND->IMMND (asyncronous) */
                case IMMND_EVT_ND2ND_ADMOP_RSP: /* AdminOperation sync fevs 
Reply */
@@ -5090,28 +5152,34 @@ static uint32_t immsv_evt_dec_toplevel(N
                        break;
 
                case IMMND_EVT_D2ND_ADMINIT:    /* Admin Owner init reply */
+               {
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 4);
                        immndevt->info.adminitGlobal.globalOwnerId = 
ncs_decode_32bit(&p8);
                        ncs_dec_skip_space(i_ub, 4);
 
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 2);
-                       immndevt->info.adminitGlobal.i.adminOwnerName.length = 
ncs_decode_16bit(&p8);
+                       size_t length = ncs_decode_16bit(&p8);
                        ncs_dec_skip_space(i_ub, 2);
 
                        /* adminOwnerName.value is top level because type is 
SaNameT */
-                       if(ncs_decode_n_octets_from_uba(i_ub,
-                                  
immndevt->info.adminitGlobal.i.adminOwnerName.value,
-                                  
immndevt->info.adminitGlobal.i.adminOwnerName.length) !=
+                       char* value = (char*) malloc(length + 1);
+                       if (value == NULL || ncs_decode_n_octets_from_uba(i_ub,
+                                  (uint8_t*) value,
+                                  length) !=
                                NCSCC_RC_SUCCESS) {
+                               free(value);
                                LOG_ER("Failure inside 
ncs_decode_n_octets_from_uba");
                                rc = NCSCC_RC_FAILURE;
                                break;
                        }
+                       value[length] = '\0';
+                       osaf_extended_name_steal(value, 
&immndevt->info.adminitGlobal.i.adminOwnerName);
 
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 1);
                        
immndevt->info.adminitGlobal.i.releaseOwnershipOnFinalize = 
ncs_decode_8bit(&p8);
                        ncs_dec_skip_space(i_ub, 1);
                        break;
+               }
 
                case IMMND_EVT_D2ND_CCBINIT:    /* Ccb init reply */
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 4);
diff --git a/osaf/libs/common/immsv/include/immsv_api.h 
b/osaf/libs/common/immsv/include/immsv_api.h
--- a/osaf/libs/common/immsv/include/immsv_api.h
+++ b/osaf/libs/common/immsv/include/immsv_api.h
@@ -66,6 +66,11 @@ extern "C" {
 
 #define IMMSV_MAX_OBJECTS 10000
 #define IMMSV_MAX_ATTRIBUTES 128
+#define IMMSV_MAX_ADMO_NAME_LENGTH 256
+#define IMMSV_MAX_ATTR_NAME_LENGTH 256
+#define IMMSV_MAX_PARAM_NAME_LENGTH 256
+#define IMMSV_MAX_IMPL_NAME_LENGTH 256
+#define IMMSV_MAX_CLASS_NAME_LENGTH 256
 
 /* The pair of magic names for special appliers (#2873)
    If such an appliers are attached, then the immsv will generate
diff --git a/osaf/services/saf/immsv/config/immnd.conf 
b/osaf/services/saf/immsv/config/immnd.conf
--- a/osaf/services/saf/immsv/config/immnd.conf
+++ b/osaf/services/saf/immsv/config/immnd.conf
@@ -69,5 +69,8 @@ export IMMSV_MAX_WAIT=3
 # Healthcheck keys
 export IMMSV_ENV_HEALTHCHECK_KEY="Default"
 
+# Uncomment the next line to enable support for extended names
+#export SA_ENABLE_EXTENDED_NAMES=1
+
 # Uncomment the next line to enable info level logging
 #args="--loglevel=info"
diff --git a/osaf/services/saf/immsv/immd/Makefile.am 
b/osaf/services/saf/immsv/immd/Makefile.am
--- a/osaf/services/saf/immsv/immd/Makefile.am
+++ b/osaf/services/saf/immsv/immd/Makefile.am
@@ -32,7 +32,7 @@ osaf_execbindir = $(pkglibdir)
 osaf_execbin_PROGRAMS = osafimmd
 
 osafimmd_CPPFLAGS = \
-       -DSA_CLM_B01=1 \
+       -DSA_CLM_B01=1 -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/libs/common/immsv/include
 
diff --git a/osaf/services/saf/immsv/immd/immd_amf.c 
b/osaf/services/saf/immsv/immd/immd_amf.c
--- a/osaf/services/saf/immsv/immd/immd_amf.c
+++ b/osaf/services/saf/immsv/immd/immd_amf.c
@@ -19,6 +19,7 @@
 #include <nid_start_util.h>
 #include "immd.h"
 #include "immsv.h"
+#include "osaf_extended_name.h"
 
 /**
  * Return string describing HA state
@@ -439,6 +440,6 @@ uint32_t immd_amf_init(IMMD_CB *immd_cb)
        res = NCSCC_RC_SUCCESS;
 
  done:
-       TRACE_LEAVE2("%u, %s", res, immd_cb->comp_name.value);
+       TRACE_LEAVE2("%u, %s", res, 
osaf_extended_name_borrow(&immd_cb->comp_name));
        return res;
 }
diff --git a/osaf/services/saf/immsv/immd/immd_evt.c 
b/osaf/services/saf/immsv/immd/immd_evt.c
--- a/osaf/services/saf/immsv/immd/immd_evt.c
+++ b/osaf/services/saf/immsv/immd/immd_evt.c
@@ -28,6 +28,7 @@
 #include "immsv_evt.h"
 #include "immd.h"
 #include "ncssysf_mem.h"
+#include "osaf_extended_name.h"
 
 uint32_t immd_evt_proc_cb_dump(IMMD_CB *cb);
 
@@ -1626,7 +1627,7 @@ static uint32_t immd_evt_proc_adminit_re
        uba.start = NULL;
        TRACE_ENTER();
 
-       TRACE_5("Admin owner name:%s", adminit_req->i.adminOwnerName.value);
+       TRACE_5("Admin owner name:%s", 
osaf_extended_name_borrow(&adminit_req->i.adminOwnerName));
 
        globalId = ++(cb->admo_id_count);
        if (cb->admo_id_count == 0xffffffff) {
diff --git a/osaf/services/saf/immsv/immloadd/Makefile.am 
b/osaf/services/saf/immsv/immloadd/Makefile.am
--- a/osaf/services/saf/immsv/immloadd/Makefile.am
+++ b/osaf/services/saf/immsv/immloadd/Makefile.am
@@ -29,6 +29,7 @@ osafimmloadd_CXXFLAGS = $(AM_CXXFLAGS) @
 osafimmloadd_SOURCES = imm_loader.cc imm_pbe_load.cc
 
 osafimmloadd_CPPFLAGS = \
+       -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/libs/common/immsv/include
 
diff --git a/osaf/services/saf/immsv/immloadd/imm_loader.cc 
b/osaf/services/saf/immsv/immloadd/imm_loader.cc
--- a/osaf/services/saf/immsv/immloadd/imm_loader.cc
+++ b/osaf/services/saf/immsv/immloadd/imm_loader.cc
@@ -32,6 +32,9 @@
 #include <errno.h>
 #include <ncsgl_defs.h>
 
+#include "saAis.h"
+#include "osaf_extended_name.h"
+
 #define MAX_DEPTH 10
 #define MAX_CHAR_BUFFER_SIZE 8192  //8k
 
@@ -404,13 +407,11 @@ static void opensafObjectCreate(SaImmCcb
     int retries=0;
     SaNameT rdn;
     SaNameT parent;
-    rdn.length = strlen(OPENSAF_IMM_OBJECT_RDN);
-    strcpy((char *) rdn.value, OPENSAF_IMM_OBJECT_RDN);
+    osaf_extended_name_lend(OPENSAF_IMM_OBJECT_RDN, &rdn);
     void*     nameValues[1];
     nameValues[0] = &rdn;
 
-    parent.length = strlen(OPENSAF_IMM_OBJECT_PARENT);
-    strcpy((char *) parent.value, OPENSAF_IMM_OBJECT_PARENT);
+    osaf_extended_name_lend(OPENSAF_IMM_OBJECT_PARENT, &parent);
 
     SaUint32T epochValue=1;
     void* intValues[1];
@@ -477,7 +478,7 @@ bool createImmObject(SaImmClassNameT cla
         classRDNMap?classRDNMap->size():0);
 
     /* Set the parent name */
-    parentName.length = 0;
+    osaf_extended_name_lend("", &parentName);
     if (objectName != NULL)
     {
         char* parent;
@@ -497,8 +498,7 @@ bool createImmObject(SaImmClassNameT cla
 
         if (parent != NULL)
         {
-            parentName.length = (SaUint16T)strlen(parent);
-            strncpy((char*)parentName.value, parent, parentName.length);
+            osaf_extended_name_lend(parent, &parentName);
         }
     } else {
         LOG_ER("Empty DN for object");
@@ -507,9 +507,9 @@ bool createImmObject(SaImmClassNameT cla
     }
 
     /* Get the length of the RDN and truncate objectName */
-    if (parentName.length > 0)
+    if (!osaf_is_extended_name_empty(&parentName))
     {
-        RDNlen = strlen(objectName) - (parentName.length + 1);
+        RDNlen = strlen(objectName) - 
(strlen(osaf_extended_name_borrow(&parentName)) + 1);
         objectName[RDNlen] = '\0';
     }
     else
@@ -1367,7 +1367,6 @@ static void charactersHandler(void* user
             break;
         case DN:
             /* Copy the distinguished name */
-            assert(len < SA_MAX_NAME_LENGTH);
             state->objectName = (char*)malloc((size_t)len + 1);
 
             strncpy(state->objectName, (const char*)chars, (size_t)len);
@@ -2052,12 +2051,8 @@ static void charsToValueHelper(SaImmAttr
             *((SaTimeT*)*value) = (SaTimeT)strtoll(str, NULL, 0);
             break;
         case SA_IMM_ATTR_SANAMET:
-            len = strlen(str);
-            assert(len < SA_MAX_NAME_LENGTH);
             *value = malloc(sizeof(SaNameT));
-            ((SaNameT*)*value)->length = (SaUint16T)len;
-            strncpy((char*)((SaNameT*)*value)->value, str, len);
-            ((SaNameT*)*value)->value[len] = '\0';
+            osaf_extended_name_alloc(str, (SaNameT*) *value);
             break;
         case SA_IMM_ATTR_SAFLOATT:
             *value = malloc(sizeof(SaFloatT));
@@ -2227,8 +2222,7 @@ int getClassNames(SaImmHandleT& immHandl
         exit(1);
     }
 
-    strcpy((char*)tspSaObjectName.value, OPENSAF_IMM_OBJECT_DN);
-    tspSaObjectName.length = strlen(OPENSAF_IMM_OBJECT_DN);
+    osaf_extended_name_lend(OPENSAF_IMM_OBJECT_DN, &tspSaObjectName);
 
     SaImmAttrNameT attNames[2] = {(char *) OPENSAF_IMM_ATTR_CLASSES,0};
 
@@ -2281,9 +2275,8 @@ int getClassNames(SaImmHandleT& immHandl
         }
         else if ((*attributes)->attrValueType == SA_IMM_ATTR_SANAMET)
         {
-            std::string 
classNameString((char*)((SaNameT*)(*attributes)->attrValues
-                                                + i)->value,
-                                        ((SaNameT*)(*attributes)->attrValues + 
i)->length);
+            std::string 
classNameString(osaf_extended_name_borrow((SaNameT*)(*attributes)->attrValues
+                                                + i));
 
             classNamesList.push_front(classNameString);
         }
@@ -2444,8 +2437,7 @@ int syncObjectsOfClass(std::string class
 
     //Iterate over objects
     SaNameT objectName;
-    objectName.value[0] = 0;
-    objectName.length = 0;
+    osaf_extended_name_clear(&objectName);
     SaImmAttrValuesT_2 **attributes=NULL;
     bool message_buffered=false;
     void* batch=NULL;
@@ -2482,15 +2474,15 @@ int syncObjectsOfClass(std::string class
                exit(1);
        }
 
-
-       if(objectName.length <= 1) {
+        size_t objectNameLength = 
strlen(osaf_extended_name_borrow(&objectName));
+       if (objectNameLength <= 1) {
                LOG_ER("syncObjectsOfClass: objectName.length <= 1");
                exit(1);
        }
 
-       if(objectName.length >= SA_MAX_NAME_LENGTH) {
-               LOG_ER("syncObjectsOfClass: objectName.length(%u) >= 
SA_MAX_NAME_LENGTH",
-                       objectName.length);
+       if (objectNameLength > kMaxDnLength) {
+               LOG_ER("syncObjectsOfClass: objectName.length(%zu) > %zu",
+                       objectNameLength, static_cast<size_t>(kMaxDnLength));
                exit(1);
        }
 
@@ -2515,11 +2507,10 @@ int syncObjectsOfClass(std::string class
             exit(1);
        }
 
-        TRACE("Synced object: %s", objectName.value);
+        TRACE("Synced object: %s", osaf_extended_name_borrow(&objectName));
 
        attributes=NULL;
-        objectName.value[0] = 0;
-        objectName.length = 0;
+        osaf_extended_name_clear(&objectName);
     }
 
  done:
@@ -2792,7 +2783,8 @@ void sendPreloadParams(SaImmHandleT immH
        SaStringT ccb_id_string = (SaStringT) "ccb_id";
        SaStringT weak_commit_time_string = (SaStringT)"weak_commit_time";
        SaStringT weak_ccb_id_string = (SaStringT) "weak_ccb_id";
-       const SaNameT objectName = {sizeof(OPENSAF_IMM_OBJECT_DN), 
OPENSAF_IMM_OBJECT_DN};
+       SaNameT objectName;
+       osaf_extended_name_lend(OPENSAF_IMM_OBJECT_DN, &objectName);
        SaAisErrorT operationReturnValue = SA_AIS_OK;
        SaAisErrorT            errorCode = SA_AIS_OK;
 
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc 
b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -27,6 +27,7 @@
 #include "immnd.h"
 #include "immsv_api.h"
 #include "osaf_unicode.h"
+#include "osaf_extended_name.h"
 
 // Local types
 #define DEFAULT_TIMEOUT_SEC 6 /* Should be saImmOiTimeout in SaImmMngt */
@@ -607,8 +608,7 @@ immModel_ccbObjectCreate(IMMND_CB *cb,
             pbeConn, pbeNodeId, objectName);
 
     if(err == SA_AIS_OK) {
-        objName->length = (SaUint16T) objectName.size();
-        strncpy((char *)objName->value, objectName.c_str(), objName->length+1);
+        osaf_extended_name_alloc(objectName.c_str(), objName);
     }
 
     return err;
@@ -730,8 +730,7 @@ immModel_ccbObjectModify(IMMND_CB *cb,
             pbeConn, pbeNodeId, objectName);
 
     if(err == SA_AIS_OK) {
-        objName->length = (SaUint16T) objectName.size();
-        strncpy((char *)objName->value, objectName.c_str(), objName->length+1);
+        osaf_extended_name_alloc(objectName.c_str(), objName);
     }
 
     return err;
@@ -2964,14 +2963,21 @@ ImmModel::classCreate(const ImmsvOmClass
 
             if(attr->attrValueType == SA_IMM_ATTR_SANAMET) {
                 immsv_edu_attr_val* v = attr->attrDefaultValue;
-                if(v->val.x.size >= SA_MAX_NAME_LENGTH) {
-                    LOG_NO("ERR_LIBRARY: attr '%s' of type SaNameT is too 
long:%u",
-                        attNm, v->val.x.size);
+                if(!osaf_is_extended_names_enabled()
+                        && v->val.x.size >= SA_MAX_UNEXTENDED_NAME_LENGTH) {
+                    LOG_NO("ERR_LIBRARY: attr '%s' of type SaNameT is too 
long:%u. "
+                        "Extended names is not enabled",
+                        attNm, v->val.x.size - 1);
                     err = SA_AIS_ERR_LIBRARY;
                     illegal = 1;
+                } else if (v->val.x.size > kMaxDnLength) {
+                    LOG_NO("ERR_LIBRARY: attr '%s' of type SaNameT is too 
long:%u",
+                        attNm, v->val.x.size - 1);
+                    err = SA_AIS_ERR_LIBRARY;
+                    illegal = 1;
                 }
                 else {
-                    std::string tmpName(v->val.x.buf, v->val.x.size);
+                    std::string tmpName(v->val.x.buf, v->val.x.size ? 
v->val.x.size - 1 : 0);
                     if(!(nameCheck(tmpName) || nameToInternal(tmpName))) {
                         LOG_NO("ERR_INVALID_PARAM: attr '%s' of type SaNameT 
contains non "
                             "printable characters", attNm);
@@ -4021,8 +4027,7 @@ ImmModel::adminOwnerCreate(const ImmsvOm
         return SA_AIS_ERR_TRY_AGAIN;
     }
     
-    if(strncmp("IMMLOADER", (const char *) req->adminOwnerName.value,
-        (size_t) req->adminOwnerName.length) == 0) {
+    if (strcmp("IMMLOADER", osaf_extended_name_borrow(&req->adminOwnerName)) 
== 0) {
         if(sImmNodeState != IMM_NODE_LOADING) {
             LOG_NO("ERR_INVALID_PARAM: Admin Owner 'IMMLOADER' only allowed 
for loading");
             TRACE_LEAVE();
@@ -4034,8 +4039,7 @@ ImmModel::adminOwnerCreate(const ImmsvOm
     
     info->mId = ownerId;
     
-    info->mAdminOwnerName.append((const char*)req->adminOwnerName.value,
-        (size_t)req->adminOwnerName.length);
+    
info->mAdminOwnerName.append(osaf_extended_name_borrow(&req->adminOwnerName));
     if(info->mAdminOwnerName.empty() || !nameCheck(info->mAdminOwnerName)) {
         LOG_NO("ERR_INVALID_PARAM: Not a valid Admin Owner Name");
         delete info;
@@ -5634,10 +5638,8 @@ ImmModel::ccbAugmentInit(immsv_oi_ccb_up
     ObjectMap::iterator oi;
 
     TRACE_ENTER();
-    size_t sz = strnlen((char *) rsp->name.value, 
-        (size_t)rsp->name.length);
     /*Note: objectName is parent-name for the create case! */
-    std::string objectName((const char*)rsp->name.value, sz);
+    std::string objectName(osaf_extended_name_borrow(&rsp->name));
     osafassert(nameCheck(objectName)||nameToInternal(objectName));
 
     i = std::find_if(sCcbVector.begin(), sCcbVector.end(), CcbIdIs(ccbId));
@@ -5896,7 +5898,7 @@ void ImmModel::getLocalAppliersForObj(co
     CcbVector::iterator i1;
     cv.clear(); 
 
-    std::string objectName((const char *)objName->value);
+    std::string objectName(osaf_extended_name_borrow(objName));
     if(externalRep && !(nameCheck(objectName)||nameToInternal(objectName))) {
         LOG_ER("Not a proper object name");
         abort();
@@ -5904,7 +5906,7 @@ void ImmModel::getLocalAppliersForObj(co
 
     ObjectMap::iterator i5 = sObjectMap.find(objectName);
     if(i5 == sObjectMap.end()) {
-        LOG_ER("Could not find expected object:%s", objName->value);
+        LOG_ER("Could not find expected object:%s", objectName.c_str());
         abort();
     }
 
@@ -6426,12 +6428,21 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
     bool rdnAttFound=false;
     bool isAugAdmo=false;
     bool isSpecialApplForClass=false;
+    bool longDnsPermitted = osaf_is_extended_names_enabled() && 
getLongDnsAllowed();
 
     ObjectSet refObjectSet;
 
     //int isLoading = this->getLoader() > 0;
     int isLoading = (sImmNodeState == IMM_NODE_LOADING);
     
+    if(!longDnsPermitted && sz >= SA_MAX_UNEXTENDED_NAME_LENGTH) {
+        LOG_NO("ERR_NOT_EXIST: Parent name '%s' has a long DN. "
+            "Not allowed by IMM service or extended names are disabled",
+            parentName.c_str());
+        err = SA_AIS_ERR_NOT_EXIST;
+        goto ccbObjectCreateExit;
+    }
+
     if(!nameCheck(parentName)) {
         if(nameToInternal(parentName)) {
             nameCorrected = true;
@@ -6601,7 +6612,7 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
         err = SA_AIS_ERR_FAILED_OPERATION;     //Should never happen!
         goto ccbObjectCreateExit;
     }
-    
+
     attrValues = req->attrValues;
     
     while(attrValues) {
@@ -6626,10 +6637,10 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
                 err = SA_AIS_ERR_INVALID_PARAM;
                 goto ccbObjectCreateExit;
             }
-            
+
             /* size includes null termination byte. */
             if(((size_t)attrValues->n.attrValue.val.x.size > 65) &&  
-                (i4->second->mValueType == SA_IMM_ATTR_SASTRINGT) && 
!getLongDnsAllowed())
+                (i4->second->mValueType == SA_IMM_ATTR_SASTRINGT) && 
!longDnsPermitted)
             {
                 LOG_NO("ERR_INVALID_PARAM: RDN attribute value %s is too 
large: %u. Max length is 64 "
                     "for SaStringT", attrValues->n.attrValue.val.x.buf, 
(attrValues->n.attrValue.val.x.size -1));
@@ -6637,6 +6648,14 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
                 goto ccbObjectCreateExit;
             }
 
+            if(!longDnsPermitted &&
+                    attrValues->n.attrValue.val.x.size > 
SA_MAX_UNEXTENDED_NAME_LENGTH) {
+                LOG_NO("ERR_NAME_TOO_LONG: RDN attribute has long name. "
+                    "Not allowed by IMM service or extended names are 
disabled");
+                err = SA_AIS_ERR_NAME_TOO_LONG;
+                goto ccbObjectCreateExit;
+            }
+
             if(attrValues->n.attrValueType != (int) i4->second->mValueType) {
                 if(isLoading) {
                     //Be lenient on the loader. It assumes RDN is always 
SaNameT.
@@ -6648,11 +6667,57 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
                 }
             }
             
-            
             objectName.append((const char*)attrValues->n.attrValue.val.x.buf, 
                 strnlen((const char*)attrValues->n.attrValue.val.x.buf,
                     (size_t)attrValues->n.attrValue.val.x.size));
-        }
+        } else if (attrValues->n.attrValueType == SA_IMM_ATTR_SANAMET
+                && !longDnsPermitted) {
+            AttrMap::iterator it = classInfo->mAttrMap.find(attrName);
+            if(it == classInfo->mAttrMap.end()) {
+                LOG_ER("ERR_INVALID_PARAM: Cannot find attribute '%s'",
+                    attrName.c_str());
+                err = SA_AIS_ERR_INVALID_PARAM;     //Should never happen!
+                goto ccbObjectCreateExit;
+            }
+            if(attrValues->n.attrValue.val.x.size > 
SA_MAX_UNEXTENDED_NAME_LENGTH) {
+                if(!osaf_is_extended_names_enabled()) {
+                    LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long name. "
+                        "Support for extended names is disabled",
+                        attrName.c_str());
+                    err = SA_AIS_ERR_NAME_TOO_LONG;
+                    goto ccbObjectCreateExit;
+                }
+                if(!(it->second->mFlags & SA_IMM_ATTR_NO_DANGLING)) {
+                    LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. "
+                        "IMM service does not allow long DNs",
+                        attrName.c_str());
+                    err = SA_AIS_ERR_NAME_TOO_LONG;
+                    goto ccbObjectCreateExit;
+               }
+            }
+
+            IMMSV_EDU_ATTR_VAL_LIST *value = attrValues->n.attrMoreValues;
+            while(value) {
+                if(value->n.val.x.size > SA_MAX_UNEXTENDED_NAME_LENGTH) {
+                    if(!osaf_is_extended_names_enabled()) {
+                        LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. 
"
+                            "Support for extended names is not enabled",
+                            attrName.c_str());
+                        err = SA_AIS_ERR_NAME_TOO_LONG;
+                        goto ccbObjectCreateExit;
+                    }
+                    if(!(it->second->mFlags & SA_IMM_ATTR_NO_DANGLING)) {
+                        LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. 
"
+                            "IMM service does not allow long DNs",
+                            attrName.c_str());
+                        err = SA_AIS_ERR_NAME_TOO_LONG;
+                        goto ccbObjectCreateExit;
+                    }
+                }
+                value = value->next;
+            }
+        }
+
         attrValues = attrValues->next;
     }
     
@@ -6684,9 +6749,9 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
         objectName.append(parentName);
     }
     
-    if (objectName.size() >= SA_MAX_NAME_LENGTH) {
+    if (objectName.size() > ((longDnsPermitted) ? kMaxDnLength : 
(SA_MAX_UNEXTENDED_NAME_LENGTH - 1))) {
         TRACE_7("ERR_NAME_TOO_LONG: DN is too long, size:%u, max size is:%u",
-            (unsigned int) objectName.size(), SA_MAX_NAME_LENGTH);
+            (unsigned int) objectName.size(), kMaxDnLength);
         err = SA_AIS_ERR_NAME_TOO_LONG;
         goto ccbObjectCreateExit;
     }
@@ -6799,14 +6864,15 @@ SaAisErrorT ImmModel::ccbObjectCreate(Im
             }
 
             if(attr->mValueType == SA_IMM_ATTR_SANAMET) {
-                if(p->n.attrValue.val.x.size >= SA_MAX_NAME_LENGTH) {
+                if(p->n.attrValue.val.x.size > kMaxDnLength) {
                     LOG_NO("ERR_LIBRARY: attr '%s' of type SaNameT is too 
long:%u",
-                        attrName.c_str(), p->n.attrValue.val.x.size);
+                        attrName.c_str(), p->n.attrValue.val.x.size - 1);
                     err = SA_AIS_ERR_LIBRARY;
                     break; //out of for-loop
                 }
 
-                std::string tmpName(p->n.attrValue.val.x.buf, 
p->n.attrValue.val.x.size);
+                std::string tmpName(p->n.attrValue.val.x.buf,
+                                    p->n.attrValue.val.x.size ? 
p->n.attrValue.val.x.size - 1 : 0);
                 if(!(nameCheck(tmpName) || nameToInternal(tmpName))) {
                     LOG_NO("ERR_INVALID_PARAM: attr '%s' of type SaNameT 
contains non "
                         "printable characters", attrName.c_str());
@@ -7423,6 +7489,7 @@ ImmModel::ccbObjectModify(const ImmsvOmC
     bool chainedOp = false;
     immsv_attr_mods_list* p = req->attrMods;
     bool modifiedNotifyAttr=false;
+    bool isLongDnAllowed = getLongDnsAllowed();
 
     ObjectNameSet afimPreOpNDRefs;  // Set of NO_DANGLING references from 
after image before CCB operation
     bool hasNoDanglingRefs = false;
@@ -7660,14 +7727,25 @@ ImmModel::ccbObjectModify(const ImmsvOmC
         if(attr->mFlags & SA_IMM_ATTR_NOTIFY) {modifiedNotifyAttr=true;}
 
         if(attr->mValueType == SA_IMM_ATTR_SANAMET) {
-            if(p->attrValue.attrValue.val.x.size >= SA_MAX_NAME_LENGTH) {
+            if(!isLongDnAllowed
+                    && p->attrValue.attrValue.val.x.size >= 
SA_MAX_UNEXTENDED_NAME_LENGTH
+                    && !(attr->mFlags & SA_IMM_ATTR_NO_DANGLING)) {
+                LOG_NO("ERR_BAD_OPERATION: Attribute '%s' has long DN. "
+                    "IMM service does not allow long DNs",
+                    attrName.c_str());
+                err = SA_AIS_ERR_BAD_OPERATION;
+                break;
+            }
+
+            if(p->attrValue.attrValue.val.x.size > kMaxDnLength) {
                 LOG_NO("ERR_LIBRARY: attr '%s' of type SaNameT is too long:%u",
-                    attrName.c_str(), p->attrValue.attrValue.val.x.size);
+                    attrName.c_str(), p->attrValue.attrValue.val.x.size - 1);
                 err = SA_AIS_ERR_LIBRARY;
                 break; //out of for-loop
             }
 
-            std::string tmpName(p->attrValue.attrValue.val.x.buf, 
p->attrValue.attrValue.val.x.size);
+            std::string tmpName(p->attrValue.attrValue.val.x.buf,
+                                p->attrValue.attrValue.val.x.size ? 
p->attrValue.attrValue.val.x.size - 1 : 0);
             if(!(nameCheck(tmpName) || nameToInternal(tmpName))) {
                  LOG_NO("ERR_INVALID_PARAM: attr '%s' of type SaNameT contains 
non "
                      "printable characters", attrName.c_str());
@@ -7778,7 +7856,7 @@ ImmModel::ccbObjectModify(const ImmsvOmC
                             attrName.c_str(), objectName.c_str(), newRim);
                         err = SA_AIS_ERR_BAD_OPERATION;
                         break;
-                   }
+            }
                 }
 
 
@@ -8978,9 +9056,7 @@ ImmModel::ccbObjDelContinuation(immsv_oi
     SaUint32T* reqConn, bool* augDelete)
 {
     TRACE_ENTER();
-    size_t sz = strnlen((char *) rsp->name.value, 
-        (size_t)rsp->name.length);
-    std::string objectName((const char*)rsp->name.value, sz);
+    std::string objectName(osaf_extended_name_borrow(&rsp->name));
 
     SaUint32T ccbId = rsp->ccbId;
     CcbInfo* ccb = 0;
@@ -9446,7 +9522,7 @@ ImmModel::accessorGet(const ImmsvOmSearc
                 "or PRTO PBE, not yet applied", objectName.c_str());  
         err = SA_AIS_ERR_NOT_EXIST;
         goto accessorExit;
-    } 
+    }
     
     // Validate scope
     if (scope != SA_IMM_ONE) {
@@ -12972,6 +13048,7 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
     bool nameCorrected = false;
     bool rdnAttFound=false;
     bool isSpecialApplForClass=false;
+    bool longDnsPermitted = osaf_is_extended_names_enabled() && 
getLongDnsAllowed();
     
     /*Should rename member adminOwnerId. Used to store implid here.*/
     ImplementerInfo* info = findImplementer(req->adminOwnerId);
@@ -12995,6 +13072,14 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
     //We rely on FEVS to guarantee that the same handleId is produced at
     //all nodes for the same implementer. 
     
+    if(!longDnsPermitted && sz >= SA_MAX_UNEXTENDED_NAME_LENGTH) {
+        LOG_NO("ERR_NOT_EXIST: Parent name '%s' has a long DN. "
+            "Not allowed by IMM service or extended names are disabled",
+            parentName.c_str());
+        err = SA_AIS_ERR_NOT_EXIST;
+        goto rtObjectCreateExit;
+    }
+
     if(!nameCheck(parentName)) {
         if(nameToInternal(parentName)) {
             nameCorrected = true;
@@ -13088,7 +13173,7 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
             
             /* size includes null termination byte. */
             if(((size_t)attrValues->n.attrValue.val.x.size > 65) &&
-                (attrValues->n.attrValueType == SA_IMM_ATTR_SASTRINGT) && 
!getLongDnsAllowed())
+                (attrValues->n.attrValueType == SA_IMM_ATTR_SASTRINGT) && 
!longDnsPermitted)
             {
                 LOG_NO("ERR_INVALID_PARAM: RDN attribute value %s is too 
large: %u. Max length is 64 "
                     "for SaStringT", attrValues->n.attrValue.val.x.buf, 
(attrValues->n.attrValue.val.x.size-1));
@@ -13096,6 +13181,14 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
                 goto rtObjectCreateExit;
             }
 
+            if(!longDnsPermitted &&
+                    attrValues->n.attrValue.val.x.size > 
SA_MAX_UNEXTENDED_NAME_LENGTH) {
+                LOG_NO("ERR_NAME_TOO_LONG: RDN attribute has long name. "
+                    "Not allowed by IMM service or extended names are 
disabled");
+                err = SA_AIS_ERR_NAME_TOO_LONG;
+                goto rtObjectCreateExit;
+            }
+
             if(i4->second->mFlags & SA_IMM_ATTR_PERSISTENT) {
                 isPersistent = true;
 
@@ -13130,6 +13223,52 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
             objectName.append((const char*)attrValues->n.attrValue.val.x.buf, 
                 strnlen((const char*)attrValues->n.attrValue.val.x.buf,
                     (size_t)attrValues->n.attrValue.val.x.size));
+        } else if (attrValues->n.attrValueType == SA_IMM_ATTR_SANAMET
+                && !longDnsPermitted) {
+            AttrMap::iterator it = classInfo->mAttrMap.find(attrName);
+            if(it == classInfo->mAttrMap.end()) {
+                LOG_ER("ERR_INVALID_PARAM: Cannot find attribute '%s'",
+                    attrName.c_str());
+                err = SA_AIS_ERR_INVALID_PARAM;
+                goto rtObjectCreateExit;
+            }
+            if(attrValues->n.attrValue.val.x.size > 
SA_MAX_UNEXTENDED_NAME_LENGTH) {
+                if(!osaf_is_extended_names_enabled()) {
+                    LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. "
+                        "Support for extended names is not enabled",
+                        attrName.c_str());
+                    err = SA_AIS_ERR_NAME_TOO_LONG;
+                    goto rtObjectCreateExit;
+                }
+                if(!(it->second->mFlags & SA_IMM_ATTR_NO_DANGLING)) {
+                    LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. "
+                        "IMM service does not allow long DNs",
+                        attrName.c_str());
+                    err = SA_AIS_ERR_NAME_TOO_LONG;
+                    goto rtObjectCreateExit;
+                }
+            }
+
+            IMMSV_EDU_ATTR_VAL_LIST *value = attrValues->n.attrMoreValues;
+            while(value) {
+                if(value->n.val.x.size > SA_MAX_UNEXTENDED_NAME_LENGTH) {
+                    if(!osaf_is_extended_names_enabled()) {
+                        LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. 
"
+                            "Support for extended names is not enabled",
+                            attrName.c_str());
+                        err = SA_AIS_ERR_NAME_TOO_LONG;
+                        goto rtObjectCreateExit;
+                    }
+                    if(!(it->second->mFlags & SA_IMM_ATTR_NO_DANGLING)) {
+                        LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. 
"
+                            "IMM service does not allow long DNs",
+                            attrName.c_str());
+                        err = SA_AIS_ERR_NAME_TOO_LONG;
+                        goto rtObjectCreateExit;
+                    }
+                }
+                value = value->next;
+            }
         }
         attrValues = attrValues->next;
     }
@@ -13163,9 +13302,9 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
         objectName.append(parentName);
     }
     
-    if (objectName.size() >= SA_MAX_NAME_LENGTH) {
+    if (objectName.size() > ((longDnsPermitted) ? kMaxDnLength : 
(SA_MAX_UNEXTENDED_NAME_LENGTH -1))) {
         TRACE_7("ERR_NAME_TOO_LONG: DN is too long, size:%u, max size is:%u", 
-            (unsigned int) objectName.size(), SA_MAX_NAME_LENGTH);
+            (unsigned int) objectName.size(), kMaxDnLength);
         err = SA_AIS_ERR_NAME_TOO_LONG;     
         goto rtObjectCreateExit;
     }
@@ -13272,14 +13411,15 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
                 break; //out of for-loop
             }
             if(attr->mValueType == SA_IMM_ATTR_SANAMET) {
-                if(p->n.attrValue.val.x.size >= SA_MAX_NAME_LENGTH) {
+                if(p->n.attrValue.val.x.size > kMaxDnLength) {
                     LOG_NO("ERR_LIBRARY: attr '%s' of type SaNameT is too 
long:%u",
-                        attrName.c_str(), p->n.attrValue.val.x.size);
+                        attrName.c_str(), p->n.attrValue.val.x.size - 1);
                     err = SA_AIS_ERR_LIBRARY;
                     break; //out of for-loop
                 }
 
-                std::string tmpName(p->n.attrValue.val.x.buf, 
p->n.attrValue.val.x.size);
+                std::string tmpName(p->n.attrValue.val.x.buf,
+                                    p->n.attrValue.val.x.size ? 
p->n.attrValue.val.x.size - 1 : 0);
                 if(!(nameCheck(tmpName) || nameToInternal(tmpName))) {
                     LOG_NO("ERR_INVALID_PARAM: attr '%s' of type SaNameT 
contains non "
                         "printable characters", attrName.c_str());
@@ -14199,6 +14339,14 @@ ImmModel::rtObjectUpdate(const ImmsvOmCc
     bool isSyncClient = (sImmNodeState == IMM_NODE_W_AVAILABLE);
     if(wasLocal) {osafassert(conn);} 
     
+    if(!osaf_is_extended_names_enabled()
+            && objectName.size() >= SA_MAX_UNEXTENDED_NAME_LENGTH) {
+        LOG_NO("ERR_NAME_TOO_LONG: Object name is too long. "
+            "Support for extended names is not enabled");
+        err = SA_AIS_ERR_NAME_TOO_LONG;
+        goto rtObjectUpdateExit;
+    }
+
     if (objectName.empty()) {
         LOG_NO("ERR_INVALID_PARAM: Empty DN value");
         err = SA_AIS_ERR_INVALID_PARAM;     
@@ -14445,14 +14593,15 @@ ImmModel::rtObjectUpdate(const ImmsvOmCc
             }
 
             if(attr->mValueType == SA_IMM_ATTR_SANAMET) {
-                if(p->attrValue.attrValue.val.x.size >= SA_MAX_NAME_LENGTH) {
+                if (p->attrValue.attrValue.val.x.size > kMaxDnLength) {
                     LOG_NO("ERR_LIBRARY: attr '%s' of type SaNameT is too 
long:%u",
-                        attrName.c_str(), p->attrValue.attrValue.val.x.size);
+                        attrName.c_str(), p->attrValue.attrValue.val.x.size - 
1);
                     err = SA_AIS_ERR_LIBRARY;
                     break; //out of for-loop
                 }
 
-                std::string tmpName(p->attrValue.attrValue.val.x.buf, 
p->attrValue.attrValue.val.x.size);
+                std::string tmpName(p->attrValue.attrValue.val.x.buf,
+                                    p->attrValue.attrValue.val.x.size ? 
p->attrValue.attrValue.val.x.size - 1 : 0);
                 if(!(nameCheck(tmpName) || nameToInternal(tmpName))) {
                      LOG_NO("ERR_INVALID_PARAM: attr '%s' of type SaNameT 
contains non "
                          "printable characters", attrName.c_str());
@@ -14759,6 +14908,14 @@ ImmModel::rtObjectDelete(const ImmsvOmCc
     
     ObjectMap::iterator oi, oi2;
     
+    if(!osaf_is_extended_names_enabled()
+            && objectName.size() >= SA_MAX_UNEXTENDED_NAME_LENGTH) {
+        LOG_NO("ERR_NAME_TOO_LONG: Object name is too long. "
+            "Support for extended names is not enabled");
+        err = SA_AIS_ERR_NAME_TOO_LONG;
+        goto rtObjectDeleteExit;
+    }
+
     if(! (nameCheck(objectName)||nameToInternal(objectName)) ) {
         LOG_NO("ERR_INVALID_PARAM: Not a proper object name");
         err = SA_AIS_ERR_INVALID_PARAM;
diff --git a/osaf/services/saf/immsv/immnd/Makefile.am 
b/osaf/services/saf/immsv/immnd/Makefile.am
--- a/osaf/services/saf/immsv/immnd/Makefile.am
+++ b/osaf/services/saf/immsv/immnd/Makefile.am
@@ -32,7 +32,7 @@ osaf_execbindir = $(pkglibdir)
 osaf_execbin_PROGRAMS = osafimmnd
 
 osafimmnd_CPPFLAGS = \
-       -DSA_CLM_B01 \
+       -DSA_CLM_B01 -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/libs/common/immsv/include
 
diff --git a/osaf/services/saf/immsv/immnd/immnd_amf.c 
b/osaf/services/saf/immsv/immnd/immnd_amf.c
--- a/osaf/services/saf/immsv/immnd/immnd_amf.c
+++ b/osaf/services/saf/immsv/immnd/immnd_amf.c
@@ -17,6 +17,7 @@
 
 #include "immnd.h"
 #include <nid_start_util.h>
+#include "osaf_extended_name.h"
 
 /****************************************************************************
  * Name          : immnd_saf_health_chk_callback
@@ -265,6 +266,6 @@ uint32_t immnd_amf_init(IMMND_CB *cb)
        res = NCSCC_RC_SUCCESS;
 
  done:
-       TRACE_LEAVE2("%u, %s", res, cb->comp_name.value);
+       TRACE_LEAVE2("%u, %s", res, osaf_extended_name_borrow(&cb->comp_name));
        return (res);
 }
diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c 
b/osaf/services/saf/immsv/immnd/immnd_evt.c
--- a/osaf/services/saf/immsv/immnd/immnd_evt.c
+++ b/osaf/services/saf/immsv/immnd/immnd_evt.c
@@ -29,6 +29,7 @@
 #include "immsv_api.h"
 #include "ncssysf_mem.h"
 #include "mds_papi.h"
+#include "osaf_extended_name.h"
 
 /* Adjust to 90% of MDS_DIRECT_BUF_MAXSIZE  */
 #define IMMND_SEARCH_BUNDLE_SIZE ((MDS_DIRECT_BUF_MAXSIZE / 100) * 90)   
@@ -4257,7 +4258,7 @@ static void immnd_evt_pbe_rt_obj_deletes
 
                for (; ix < arrSize ; ++ix) {
                        send_evt.info.imma.info.objDelete.objectName.size = 
-                               (SaUint32T) strlen(objNameArr[ix]);
+                               (SaUint32T) strlen(objNameArr[ix]) + 1;
                        send_evt.info.imma.info.objDelete.objectName.buf = 
objNameArr[ix];
 
                        TRACE_2("MAKING PBE-IMPLEMENTER PERSISTENT RT-OBJ 
DELETE upcalls");
@@ -4945,7 +4946,7 @@ static void immnd_evt_proc_class_create(
                                send_evt.info.imma.info.admOpReq.continuationId 
= implHandle;
                                send_evt.info.imma.info.admOpReq.invocation = 
continuationId;
                                send_evt.info.imma.info.admOpReq.timeout = 0;
-                               
send_evt.info.imma.info.admOpReq.objectName.size = (SaUint32T) 
strlen(osafImmDn);
+                               
send_evt.info.imma.info.admOpReq.objectName.size = (SaUint32T) 
strlen(osafImmDn) + 1;
                                send_evt.info.imma.info.admOpReq.objectName.buf 
=
                                        (char *) osafImmDn;
                                send_evt.info.imma.info.admOpReq.params =
@@ -5091,7 +5092,7 @@ static void immnd_evt_proc_class_delete(
                                send_evt.info.imma.info.admOpReq.continuationId 
= implHandle;
                                send_evt.info.imma.info.admOpReq.invocation = 
continuationId;
                                send_evt.info.imma.info.admOpReq.timeout = 0;
-                               
send_evt.info.imma.info.admOpReq.objectName.size = (SaUint32T) 
strlen(osafImmDn);
+                               
send_evt.info.imma.info.admOpReq.objectName.size = (SaUint32T) 
strlen(osafImmDn) + 1;
                                send_evt.info.imma.info.admOpReq.objectName.buf 
=
                                        (char *) osafImmDn;
                                send_evt.info.imma.info.admOpReq.params =
@@ -5577,7 +5578,7 @@ static void immnd_evt_proc_object_create
        NCS_NODE_ID pbeNodeId = 0;
        NCS_NODE_ID *pbeNodeIdPtr = NULL;
        SaNameT objName;
-       objName.length=0;
+       osaf_extended_name_clear(&objName);
        TRACE_ENTER();
 
 #if 0                          /*ABT DEBUG PRINTOUTS START */
@@ -5690,7 +5691,7 @@ static void immnd_evt_proc_object_create
                }
        }
 
-       if((objName.length) && (err == SA_AIS_OK)) {
+       if (!osaf_is_extended_name_empty(&objName) && (err == SA_AIS_OK)) {
                /* Generate applier upcalls for the object create */
                SaUint32T *applConnArr = NULL;
                int ix = 0;
@@ -5743,6 +5744,7 @@ static void immnd_evt_proc_object_create
                immnd_client_node_get(cb, clnt_hdl, &cl_node);
                if (cl_node == NULL || cl_node->mIsStale) {
                        LOG_WA("IMMND - Client went down so no response");
+                       osaf_extended_name_free(&objName);
                        return;
                }
 
@@ -5763,6 +5765,7 @@ static void immnd_evt_proc_object_create
                }
                
immsv_evt_free_attrNames(send_evt.info.imma.info.errRsp.errStrings);
        }
+       osaf_extended_name_free(&objName);
        TRACE_LEAVE();
 }
 
@@ -5802,7 +5805,7 @@ static void immnd_evt_proc_object_modify
        NCS_NODE_ID pbeNodeId = 0;
        NCS_NODE_ID *pbeNodeIdPtr = NULL;
        SaNameT objName;
-       objName.length=0;
+       osaf_extended_name_clear(&objName);
 
        TRACE_ENTER();
 #if 0                          /*ABT DEBUG PRINTOUTS START */
@@ -5921,7 +5924,7 @@ static void immnd_evt_proc_object_modify
                }
        }
 
-       if((objName.length) && (err == SA_AIS_OK)) {
+       if (!osaf_is_extended_name_empty(&objName) && (err == SA_AIS_OK)) {
                /* Generate applier upcalls for the object modify */
                SaUint32T *applConnArr = NULL;
                int ix = 0;
@@ -6003,6 +6006,7 @@ static void immnd_evt_proc_object_modify
        evt->info.objModify.objectName.size = 0;
        immsv_free_attrmods(evt->info.objModify.attrMods);
        evt->info.objModify.attrMods = NULL;
+       osaf_extended_name_free(&objName);
        TRACE_LEAVE();
 }
 
@@ -6545,7 +6549,7 @@ static void immnd_evt_proc_object_delete
                        int ix = 0;
                        for (; ix < arrSize && err == SA_AIS_OK; ++ix) {
                                
send_evt.info.imma.info.objDelete.objectName.size = 
-                                       (SaUint32T) strlen(objNameArr[ix]);
+                                       (SaUint32T) strlen(objNameArr[ix]) + 1;
                                
send_evt.info.imma.info.objDelete.objectName.buf = 
                                        objNameArr[ix];
 
@@ -6596,7 +6600,7 @@ static void immnd_evt_proc_object_delete
                                           No implementer upcalls are generated 
for any runtime objects
                                           (persistent or not) that are deleted 
as a side effect.
                                         */
-                                       
send_evt.info.imma.info.objDelete.objectName.size = (SaUint32T) 
strlen(objNameArr[ix]);
+                                       
send_evt.info.imma.info.objDelete.objectName.size = (SaUint32T) 
strlen(objNameArr[ix]) + 1;
                                        
send_evt.info.imma.info.objDelete.objectName.buf = objNameArr[ix];
                                        
send_evt.info.imma.info.objDelete.adminOwnerId = invocArr[ix];
                                        
send_evt.info.imma.info.objDelete.immHandle = implHandle;
@@ -6641,10 +6645,8 @@ static void immnd_evt_proc_object_delete
                for (; ix < arrSize && err == SA_AIS_OK; ++ix) { /* Iterate 
over deleted objects */
                        SaUint32T *applConnArr = NULL;
                        SaNameT objName;
-                       objName.length = (SaUint32T) strlen(objNameArr[ix]);
-                       send_evt.info.imma.info.objDelete.objectName.size = 
objName.length;
-                       osafassert(objName.length < SA_MAX_NAME_LENGTH);
-                       strncpy((char *) objName.value, objNameArr[ix], 
SA_MAX_NAME_LENGTH);
+                       osaf_extended_name_lend(objNameArr[ix], &objName);
+                       send_evt.info.imma.info.objDelete.objectName.size = 
strlen(objNameArr[ix]) + 1;
                        send_evt.info.imma.info.objDelete.objectName.buf = 
objNameArr[ix];
                        
                        SaUint32T arrSize2 = 
immModel_getLocalAppliersForObj(cb, &objName,
@@ -6855,7 +6857,7 @@ static void immnd_evt_proc_rt_object_del
                                int ix = 0;
                                for (; ix < arrSize && err == SA_AIS_OK; ++ix) {
                                        
send_evt.info.imma.info.objDelete.objectName.size = 
-                                               (SaUint32T) 
strlen(objNameArr[ix]);
+                                               (SaUint32T) 
strlen(objNameArr[ix]) + 1;
                                        
send_evt.info.imma.info.objDelete.objectName.buf = 
                                                objNameArr[ix];
 
@@ -6930,7 +6932,7 @@ static void immnd_evt_proc_rt_object_del
                                int ix = 0;
                                for (; ix < arrSize && err == SA_AIS_OK; ++ix) {
                                        
send_evt.info.imma.info.objDelete.objectName.size = 
-                                               (SaUint32T) 
strlen(objNameArr[ix]);
+                                               (SaUint32T) 
strlen(objNameArr[ix]) + 1;
                                        
send_evt.info.imma.info.objDelete.objectName.buf = 
                                                objNameArr[ix];
 
@@ -6981,7 +6983,7 @@ static void immnd_evt_proc_rt_object_del
 
                for (; ix < arrSize && err == SA_AIS_OK; ++ix) {
                        send_evt.info.imma.info.objDelete.objectName.size = 
-                               (SaUint32T) strlen(objNameArr[ix]);
+                               (SaUint32T) strlen(objNameArr[ix]) + 1;
                        send_evt.info.imma.info.objDelete.objectName.buf = 
objNameArr[ix];
 
                        TRACE_2("MAKING PBE-IMPLEMENTER RT-OBJ DELETE upcalls");
@@ -8291,7 +8293,7 @@ static uint32_t immnd_evt_proc_intro_rsp
                                
fake_evt.info.immnd.info.admOpReq.objectName.size = strlen(opensafImmObj)+1;
                                fake_evt.info.immnd.info.admOpReq.params = 
&param;
                                
fake_evt.info.immnd.info.admOpReq.params->paramName.buf = nostParam;
-                               
fake_evt.info.immnd.info.admOpReq.params->paramName.size = strlen(nostParam);
+                               
fake_evt.info.immnd.info.admOpReq.params->paramName.size = strlen(nostParam) + 
1;
                                
fake_evt.info.immnd.info.admOpReq.params->paramType = SA_IMM_ATTR_SAUINT32T;
                                
fake_evt.info.immnd.info.admOpReq.params->paramBuffer.val.sauint32 = 
                                        OPENSAF_IMM_FLAG_2PBE1_ALLOW;
diff --git a/osaf/services/saf/immsv/immnd/immnd_proc.c 
b/osaf/services/saf/immsv/immnd/immnd_proc.c
--- a/osaf/services/saf/immsv/immnd/immnd_proc.c
+++ b/osaf/services/saf/immsv/immnd/immnd_proc.c
@@ -637,7 +637,7 @@ immnd_getOsafImmPbeAdmopParam(SaImmAdmin
                case OPENSAF_IMM_PBE_CLASS_CREATE:
                case OPENSAF_IMM_PBE_CLASS_DELETE:
                        classDescr = (IMMSV_OM_CLASS_DESCR *) evt;
-                       param->paramName.size = (SaUint32T) 
strlen(classNameParamName);
+                       param->paramName.size = (SaUint32T) 
strlen(classNameParamName) + 1;
                        param->paramName.buf = (char *) classNameParamName;
                        param->paramType = SA_IMM_ATTR_SASTRINGT;
                        param->paramBuffer.val.x = classDescr->className;
@@ -646,7 +646,7 @@ immnd_getOsafImmPbeAdmopParam(SaImmAdmin
 
                case OPENSAF_IMM_PBE_UPDATE_EPOCH:
                        cb = (IMMND_CB *) evt;
-                       param->paramName.size = (SaUint32T) strlen(epochStr);
+                       param->paramName.size = (SaUint32T) strlen(epochStr) + 
1;
                        param->paramName.buf = (char *) epochStr;
                        param->paramType = SA_IMM_ATTR_SAUINT32T;
                        param->paramBuffer.val.sauint32 = cb->mMyEpoch;
@@ -727,7 +727,7 @@ void immnd_adjustEpoch(IMMND_CB *cb, SaB
                        send_evt.info.imma.info.admOpReq.continuationId = 
implHandle;
                        send_evt.info.imma.info.admOpReq.invocation = 
continuationId;
                        send_evt.info.imma.info.admOpReq.timeout = 0;
-                       send_evt.info.imma.info.admOpReq.objectName.size = 
(SaUint32T) strlen(osafImmDn);
+                       send_evt.info.imma.info.admOpReq.objectName.size = 
(SaUint32T) strlen(osafImmDn) + 1;
                        send_evt.info.imma.info.admOpReq.objectName.buf = (char 
*) osafImmDn;
                        send_evt.info.imma.info.admOpReq.params =
                                
immnd_getOsafImmPbeAdmopParam(OPENSAF_IMM_PBE_UPDATE_EPOCH,
diff --git a/osaf/services/saf/immsv/immpbed/Makefile.am 
b/osaf/services/saf/immsv/immpbed/Makefile.am
--- a/osaf/services/saf/immsv/immpbed/Makefile.am
+++ b/osaf/services/saf/immsv/immpbed/Makefile.am
@@ -31,6 +31,7 @@ osafimmpbed_SOURCES = \
        immpbe_daemon.cc
 
 osafimmpbed_CPPFLAGS = \
+       -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/libs/common/immsv/include
 
diff --git a/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc 
b/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc
--- a/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc
+++ b/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc
@@ -26,6 +26,8 @@
 #include <nid_api.h> /* To define NCS_SEL_OBJ */
 #include <immsv_evt_model.h>
 
+#include "saAis.h"
+#include "osaf_extended_name.h"
 
 #define FD_IMM_PBE_OI 0
 #define FD_IMM_PBE_OM 1
@@ -100,8 +102,8 @@ static SaAisErrorT sqlite_prepare_ccb(Sa
                        case CCBUTIL_CREATE:
                                do {
                                        TRACE("Create of object with DN: %s",
-                                               
ccbUtilOperationData->objectName.value);
-                                       if(!objectToPBE(std::string((const char 
*) ccbUtilOperationData->objectName.value), 
+                                               
osaf_extended_name_borrow(&ccbUtilOperationData->objectName));
+                                       
if(!objectToPBE(std::string(osaf_extended_name_borrow(&ccbUtilOperationData->objectName)),
 
                                                
ccbUtilOperationData->param.create.attrValues,
                                                sClassIdMap, sDbHandle, 
++sObjCount,
                                                
ccbUtilOperationData->param.create.className, ccbId))
@@ -114,9 +116,8 @@ static SaAisErrorT sqlite_prepare_ccb(Sa
 
                        case CCBUTIL_DELETE:
                                TRACE("Delete of object with DN: %s",
-                                       
ccbUtilOperationData->param.deleteOp.objectName->value);
-                               objectDeleteToPBE(std::string((const char *) 
-                                       
ccbUtilOperationData->param.deleteOp.objectName->value),
+                                       
osaf_extended_name_borrow(ccbUtilOperationData->param.deleteOp.objectName));
+                               
objectDeleteToPBE(std::string(osaf_extended_name_borrow(ccbUtilOperationData->param.deleteOp.objectName)),
                                        sDbHandle);
                                        
                                break;
@@ -133,10 +134,10 @@ static SaAisErrorT sqlite_prepare_ccb(Sa
                                   unmodified ccbObjectModify upcall.
                                 */
                                TRACE("Modify of object with DN: %s",
-                                       
ccbUtilOperationData->param.modify.objectName->value);
+                                       
osaf_extended_name_borrow(ccbUtilOperationData->param.modify.objectName));
 
-                               objName.append((const char *) 
ccbUtilOperationData->
-                                       param.modify.objectName->value);
+                               
objName.append(osaf_extended_name_borrow(ccbUtilOperationData->
+                                       param.modify.objectName));
                                attrMods = 
ccbUtilOperationData->param.modify.attrMods;
                                while((attMod = attrMods[ix++]) != NULL) {
                                        switch(attMod->modType) {
@@ -224,7 +225,8 @@ static bool pbe2_start_prepare_ccb_A_to_
        unsigned int msecs_waited = 0;
        SaAisErrorT rc2B = SA_AIS_OK;
        SaAisErrorT slavePbeRtReply = SA_AIS_OK;
-       SaNameT slavePbeRtObjName = {sizeof(OPENSAF_IMM_PBE_RT_OBJECT_DN_B), 
OPENSAF_IMM_PBE_RT_OBJECT_DN_B};
+       SaNameT slavePbeRtObjName;
+       osaf_extended_name_lend(OPENSAF_IMM_PBE_RT_OBJECT_DN_B, 
&slavePbeRtObjName);
        
        const SaImmAdminOperationParamsT_2 param0 = {
                ccb_id_string,
@@ -384,7 +386,7 @@ static void saImmOiAdminOperationCallbac
        if(sPbe2B) {
                opensafObj.append(OPENSAF_IMM_OBJECT_DN);
        } else {
-               opensafObj.append((const char *) objectName->value);
+               opensafObj.append(osaf_extended_name_borrow(objectName));
                /* Weak ccb-id assigned at primary PBE (1PBE or 2PBE) 
                   Slave PBE will get same ccbId as a parameter appended to the 
admin-op
                   forwarded and "replicated" from primary. 
@@ -428,7 +430,8 @@ static void saImmOiAdminOperationCallbac
                if(sPbe2 && !sPbe2B) {
                        /* Primary PBE forwards class create to slave PBE. */
                        SaAisErrorT rc2B = SA_AIS_OK;
-                       SaNameT slavePbeRtObjName = 
{sizeof(OPENSAF_IMM_PBE_RT_OBJECT_DN_B), OPENSAF_IMM_PBE_RT_OBJECT_DN_B};
+                       SaNameT slavePbeRtObjName;
+                       osaf_extended_name_lend(OPENSAF_IMM_PBE_RT_OBJECT_DN_B, 
&slavePbeRtObjName);
                        SaAisErrorT slavePbeRtReply = SA_AIS_OK;
                        const SaImmAdminOperationParamsT_2 *paramsToSlave[] = 
                                {params[0], &ccbIdParam, NULL};
@@ -637,7 +640,8 @@ static void saImmOiAdminOperationCallbac
                if(sPbe2 && !sPbe2B) {
                        /* Primary PBE forwards class delete to slave PBE. */
                        SaAisErrorT rc2B = SA_AIS_OK;
-                       SaNameT slavePbeRtObjName = 
{sizeof(OPENSAF_IMM_PBE_RT_OBJECT_DN_B), OPENSAF_IMM_PBE_RT_OBJECT_DN_B};
+                       SaNameT slavePbeRtObjName;
+                       osaf_extended_name_lend(OPENSAF_IMM_PBE_RT_OBJECT_DN_B, 
&slavePbeRtObjName);
                        SaAisErrorT slavePbeRtReply = SA_AIS_OK;
                        const SaImmAdminOperationParamsT_2 *paramsToSlave[] = 
                                {params[0], &ccbIdParam, NULL};
@@ -761,7 +765,8 @@ static void saImmOiAdminOperationCallbac
                if(sPbe2 && !sPbe2B) {
                        /* Primary PBE forward update epoch to slave PBE. */
                        SaAisErrorT rc2B = SA_AIS_OK;
-                       SaNameT slavePbeRtObjName = 
{sizeof(OPENSAF_IMM_PBE_RT_OBJECT_DN_B), OPENSAF_IMM_PBE_RT_OBJECT_DN_B};
+                       SaNameT slavePbeRtObjName;
+                       osaf_extended_name_lend(OPENSAF_IMM_PBE_RT_OBJECT_DN_B, 
&slavePbeRtObjName);
                        SaAisErrorT slavePbeRtReply = SA_AIS_OK;
                        const SaImmAdminOperationParamsT_2 *paramsToSlave[] = 
                                {params[0], &ccbIdParam, NULL};
@@ -844,9 +849,6 @@ static void saImmOiAdminOperationCallbac
        reply_ok:
                rc = immutil_saImmOiAdminOperationResult(immOiHandle, 
invocation, SA_AIS_ERR_QUEUE_NOT_AVAILABLE);
        } else if(opId == OPENSAF_IMM_NOST_FLAG_ON) {
-               SaNameT myObj;
-               strcpy((char *) myObj.value, OPENSAF_IMM_OBJECT_DN);
-               myObj.length = strlen((const char *) myObj.value);
                SaImmAttrValueT val = &sNoStdFlags;
                SaImmAttrModificationT_2 attMod = {SA_IMM_ATTR_VALUES_REPLACE,
                                                   {(char *) 
OPENSAF_IMM_ATTR_NOSTD_FLAGS, SA_IMM_ATTR_SAUINT32T, 1, &val}};
@@ -865,7 +867,8 @@ static void saImmOiAdminOperationCallbac
                if(sPbe2 && !sPbe2B) {
                        /* Forward nost flag ON to slave PBE. */
                        SaAisErrorT rc2B = SA_AIS_OK;
-                       SaNameT slavePbeRtObjName = 
{sizeof(OPENSAF_IMM_PBE_RT_OBJECT_DN_B), OPENSAF_IMM_PBE_RT_OBJECT_DN_B};
+                       SaNameT slavePbeRtObjName;
+                       osaf_extended_name_lend(OPENSAF_IMM_PBE_RT_OBJECT_DN_B, 
&slavePbeRtObjName);
                        SaAisErrorT slavePbeRtReply = SA_AIS_OK;
                        rc2B = saImmOmAdminOperationInvoke_2(sOwnerHandle, 
&slavePbeRtObjName, 0, OPENSAF_IMM_NOST_FLAG_ON,
                                params, &slavePbeRtReply, SA_TIME_ONE_SECOND * 
10);
@@ -896,6 +899,9 @@ static void saImmOiAdminOperationCallbac
                        sNoStdFlags |= flagsToSet;
                        LOG_NO("NOSTD FLAGS value 0x%x switched ON 
result:0x%x", flagsToSet, sNoStdFlags);
                        if(!sPbe2B) { /* Only primary PBE updates the cached 
RTA. */
+                               SaNameT myObj;
+                               osaf_extended_name_lend(OPENSAF_IMM_OBJECT_DN, 
&myObj);
+
                                rc = saImmOiRtObjectUpdate_2(immOiHandle, 
&myObj, attrMods);
                                if(rc != SA_AIS_OK) { 
                                        /* Should never get TRY_AGAIN here. RTA 
update is always accepted,
@@ -903,7 +909,7 @@ static void saImmOiAdminOperationCallbac
                                         */
                                        sNoStdFlags &= ~flagsToSet; /* restore 
the flag value */
                                        LOG_WA("Update of cached attr %s in %s 
failed, rc=%u",
-                                               attMod.modAttr.attrName, (char 
*) myObj.value, rc);
+                                               attMod.modAttr.attrName, 
OPENSAF_IMM_OBJECT_DN, rc);
                                        /* ABT shoot down or undo for slave ?
                                           The flags value in the slave is not 
really used.
                                           Slave only "becomes" primary by 
process restart,
@@ -916,9 +922,6 @@ static void saImmOiAdminOperationCallbac
 
                rc = immutil_saImmOiAdminOperationResult(immOiHandle, 
invocation, rc);
        } else if(opId == OPENSAF_IMM_NOST_FLAG_OFF) {
-               SaNameT myObj;
-               strcpy((char *) myObj.value, OPENSAF_IMM_OBJECT_DN);
-               myObj.length = strlen((const char *) myObj.value);
                SaImmAttrValueT val = &sNoStdFlags;
                SaImmAttrModificationT_2 attMod = {SA_IMM_ATTR_VALUES_REPLACE,
                                                   {(char *) 
OPENSAF_IMM_ATTR_NOSTD_FLAGS, SA_IMM_ATTR_SAUINT32T, 1, &val}};
@@ -937,7 +940,8 @@ static void saImmOiAdminOperationCallbac
                if(sPbe2 && !sPbe2B) {
                        /* Forward nost flag OFF to slave PBE. */
                        SaAisErrorT rc2B = SA_AIS_OK;
-                       SaNameT slavePbeRtObjName = 
{sizeof(OPENSAF_IMM_PBE_RT_OBJECT_DN_B), OPENSAF_IMM_PBE_RT_OBJECT_DN_B};
+                       SaNameT slavePbeRtObjName;
+                       osaf_extended_name_lend(OPENSAF_IMM_PBE_RT_OBJECT_DN_B, 
&slavePbeRtObjName);
                        SaAisErrorT slavePbeRtReply = SA_AIS_OK;
                        rc2B = saImmOmAdminOperationInvoke_2(sOwnerHandle, 
&slavePbeRtObjName, 0, OPENSAF_IMM_NOST_FLAG_OFF,
                                params, &slavePbeRtReply, SA_TIME_ONE_SECOND * 
10);
@@ -968,11 +972,14 @@ static void saImmOiAdminOperationCallbac
                        sNoStdFlags &= ~flagsToUnSet;
                        LOG_NO("NOSTD FLAGS value 0x%x switched OFF 
result:0x%x", flagsToUnSet, sNoStdFlags);
                        if(!sPbe2B) { /* Only primary PBE updates the cached 
RTA. */
+                               SaNameT myObj;
+                               osaf_extended_name_lend(OPENSAF_IMM_OBJECT_DN, 
&myObj);
+
                                rc = saImmOiRtObjectUpdate_2(immOiHandle, 
&myObj, attrMods);
                                if(rc != SA_AIS_OK) {
                                        sNoStdFlags |= flagsToUnSet; /* restore 
the flag value */
                                        LOG_WA("Update of cached attribute attr 
%s in %s failed, rc=%u",
-                                               attMod.modAttr.attrName, (char 
*) myObj.value, rc);
+                                               attMod.modAttr.attrName, 
OPENSAF_IMM_OBJECT_DN, rc);
                                        /* ABT shoot down or undo for slave ?
                                           The flags value in the slave is not 
really used.
                                           Slave only "becomes" primary by 
process restart,
@@ -1087,7 +1094,7 @@ static SaAisErrorT saImmOiCcbObjectModif
        SaUint64T numOps=0LL;
        unsigned int msecs_waited = 0;
 
-       TRACE_ENTER2("Modify callback for CCB:%llu object:%s", ccbId, 
objectName->value);
+       TRACE_ENTER2("Modify callback for CCB:%llu object:%s", ccbId, 
osaf_extended_name_borrow(objectName));
        if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
                if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
                        LOG_ER("Failed to get CCB objectfor %llx/%llu", ccbId, 
ccbId);
@@ -1098,7 +1105,9 @@ static SaAisErrorT saImmOiCcbObjectModif
 
        numOps = (SaUint64T) ccbUtilCcbData->userData;
 
-       if(strncmp((char *) objectName->value, (char *) OPENSAF_IMM_OBJECT_DN, 
objectName->length) ==0) {                       
+       if(strncmp(osaf_extended_name_borrow(objectName),
+                       (char *) OPENSAF_IMM_OBJECT_DN,
+                       osaf_extended_name_length(objectName)) ==0) {
                LOG_NO("PBE allowing modification to object %s", (char *) 
OPENSAF_IMM_OBJECT_DN);
        }
 
@@ -1134,7 +1143,7 @@ static SaAisErrorT saImmOiCcbObjectModif
                        (s2PbeBCcbOpCountNowAtB == 0) ||
                        (!pbeTransIsPrepared())) {
                        LOG_NO("Slave PBE time-out in waiting on porepare for 
PRTA update ccb:%llx dn:%s", ccbId,
-                               (const char *) objectName->value);
+                               osaf_extended_name_borrow(objectName));
                        rc = SA_AIS_ERR_FAILED_OPERATION;
                        goto abort_prta_trans;
                }
@@ -1156,7 +1165,7 @@ static SaAisErrorT saImmOiCcbObjectModif
        osafassert((numOps == 1) && (!sPbe2B));
 
        TRACE("Update of PERSISTENT runtime attributes in object with DN: %s",
-               (const char *) objectName->value);
+               osaf_extended_name_borrow(objectName));
 
        rc = pbeBeginTrans(sDbHandle);
        if(rc != SA_AIS_OK) {
@@ -1423,10 +1432,10 @@ static SaAisErrorT saImmOiCcbObjectCreat
        ClassInfo* classInfo = (*sClassIdMap)[classNameString];
        SaUint64T numOps=0LL;
        unsigned int msecs_waited = 0;
-       
+        std::string objectDn;
 
-       if(parentName && parentName->length) {
-               TRACE_ENTER2("CREATE CALLBACK CCB:%llu class:%s parent:%s", 
ccbId, className, parentName->value);
+       if(parentName != NULL && !osaf_is_extended_name_empty(parentName)) {
+               TRACE_ENTER2("CREATE CALLBACK CCB:%llu class:%s parent:%s", 
ccbId, className, osaf_extended_name_borrow(parentName));
        } else {
                TRACE_ENTER2("CREATE CALLBACK CCB:%llu class:%s ROOT OBJECT (no 
parent)", ccbId, className);
        }
@@ -1484,28 +1493,11 @@ static SaAisErrorT saImmOiCcbObjectCreat
                                goto done;                              
                        }
                        rdnFound = true;
+                        const char* rdnVal;
                        if(attrValue->attrValueType == SA_IMM_ATTR_SASTRINGT) {
-                               SaStringT rdnVal = *((SaStringT *) 
attrValue->attrValues[0]);
-                               if((parentName==NULL) || (parentName->length == 
0)) {
-                                       operation->objectName.length =
-                                               sprintf((char *) 
operation->objectName.value,
-                                                       "%s", rdnVal);
-                               } else {
-                                       operation->objectName.length = 
-                                               sprintf((char *) 
operation->objectName.value,
-                                                       "%s,%s", rdnVal, 
parentName->value);
-                               }
+                               rdnVal = *((SaStringT *) 
attrValue->attrValues[0]);
                        } else if(attrValue->attrValueType == 
SA_IMM_ATTR_SANAMET) {
-                               SaNameT *rdnVal = ((SaNameT *) 
attrValue->attrValues[0]);
-                               if((parentName==NULL) || (parentName->length == 
0)) {
-                                       operation->objectName.length =
-                                               sprintf((char *) 
operation->objectName.value,
-                                                       "%s", rdnVal->value);
-                               } else {
-                                       operation->objectName.length = 
-                                               sprintf((char *) 
operation->objectName.value,
-                                                       "%s,%s", rdnVal->value, 
parentName->value);
-                               }
+                               rdnVal = osaf_extended_name_borrow((SaNameT*) 
attrValue->attrValues[0]);
                        } else {
                                snprintf(buf, sBufsize,
                                        "PBE: Rdn attribute %s for class '%s' 
is neither SaStringT nor SaNameT!", 
@@ -1515,7 +1507,12 @@ static SaAisErrorT saImmOiCcbObjectCreat
                                rc = SA_AIS_ERR_BAD_OPERATION;
                                goto done;
                        }
-                       TRACE("Extracted DN: %s(%u)", 
operation->objectName.value,  operation->objectName.length);
+                        objectDn = rdnVal;
+                        if (parentName != NULL && 
!osaf_is_extended_name_empty(parentName)) {
+                                objectDn.append(",");
+                                
objectDn.append(osaf_extended_name_borrow(parentName));
+                       }
+                       TRACE("Extracted DN: %s(%zu)", objectDn.c_str(), 
static_cast<size_t>(objectDn.size()));
                }
        }
 
@@ -1527,12 +1524,13 @@ static SaAisErrorT saImmOiCcbObjectCreat
                goto done;
        }
 
-       if(operation->objectName.length <= 0) {
+       if(objectDn.empty()) {
                LOG_ER("operation->objectName.length can not be zero or 
negative");
                rc = SA_AIS_ERR_BAD_OPERATION;
                goto done;              
        }
 
+       osaf_extended_name_alloc(objectDn.c_str(), &operation->objectName);
        ccbUtilCcbData->userData = (void *) ++numOps;
 
        if(ccbId < 0x100000000LL) {
@@ -1559,7 +1557,7 @@ static SaAisErrorT saImmOiCcbObjectCreat
                        (!pbeTransIsPrepared()))
                {
                        LOG_NO("Slave PBE time-out in waiting on porepare for 
PRTO create ccb:%llx dn:%s", ccbId,
-                               (const char *) operation->objectName.value);
+                               
osaf_extended_name_borrow(&operation->objectName));
                        rc = SA_AIS_ERR_FAILED_OPERATION;
                        goto abort_prto_trans;
                }
@@ -1581,7 +1579,7 @@ static SaAisErrorT saImmOiCcbObjectCreat
        osafassert((numOps == 1) && (!sPbe2B));
 
        TRACE("Create of PERSISTENT runtime object with DN: %s",
-               (const char *) operation->objectName.value);
+               objectDn.c_str());
 
        rc = pbeBeginTrans(sDbHandle);
        if(rc != SA_AIS_OK) {
@@ -1651,7 +1649,7 @@ static SaAisErrorT saImmOiCcbObjectDelet
        struct CcbUtilCcbData *ccbUtilCcbData;
        char buf[sBufsize];
        long long unsigned int opCount=0;
-       TRACE_ENTER2("DELETE CALLBACK CCB:%llu object:%s", ccbId, 
objectName->value);
+       TRACE_ENTER2("DELETE CALLBACK CCB:%llu object:%s", ccbId, 
osaf_extended_name_borrow(objectName));
 
        if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
                if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -1665,8 +1663,8 @@ static SaAisErrorT saImmOiCcbObjectDelet
 
        opCount = (long long unsigned int) ccbUtilCcbData->userData;
 
-       if(strncmp((char *) objectName->value, (char *) OPENSAF_IMM_OBJECT_DN, 
objectName->length) ==0) {
-               snprintf(buf, sBufsize, "PBE: will not allow delete of object 
%s", (char *) OPENSAF_IMM_OBJECT_DN);
+       if (strcmp(osaf_extended_name_borrow(objectName), 
OPENSAF_IMM_OBJECT_DN) == 0) {
+               snprintf(buf, sBufsize, "PBE: will not allow delete of object 
%s", OPENSAF_IMM_OBJECT_DN);
                LOG_NO("%s", buf);
                saImmOiCcbSetErrorString(immOiHandle, ccbId, buf);
                rc = SA_AIS_ERR_BAD_OPERATION;
@@ -1697,10 +1695,10 @@ static SaAisErrorT saImmOiRtAttrUpdateCa
 {
        SaAisErrorT rc = SA_AIS_ERR_FAILED_OPERATION;
        TRACE_ENTER2("RT ATTR UPDATE CALLBACK PBE2B:%u DN:%s A:%s", sPbe2B, 
-               (const char *) objectName->value, 
OPENSAF_IMM_PBE_RT_OBJECT_DN_A);
+               osaf_extended_name_borrow(objectName), 
OPENSAF_IMM_PBE_RT_OBJECT_DN_A);
 
-       if((sPbe2B && strcmp((const char *) objectName->value, 
OPENSAF_IMM_PBE_RT_OBJECT_DN_B)==0) ||
-          (!sPbe2B && strcmp((const char *) objectName->value, 
OPENSAF_IMM_PBE_RT_OBJECT_DN_A)==0))
+       if ((sPbe2B && strcmp(osaf_extended_name_borrow(objectName), 
OPENSAF_IMM_PBE_RT_OBJECT_DN_B) == 0) ||
+          (!sPbe2B && strcmp(osaf_extended_name_borrow(objectName), 
OPENSAF_IMM_PBE_RT_OBJECT_DN_A) == 0))
        {
                SaImmAttrValueT attrUpdateValues1[] = {&sEpoch};
                SaImmAttrValueT attrUpdateValues2[] = {&sLastCcbCommit};
@@ -1817,7 +1815,8 @@ SaAisErrorT pbe_daemon_imm_init(SaImmHan
         SaImmAccessorHandleT accessorHandle;
        std::string pbeImplName; /* Used for PBE-OI and PBE-applier */
        std::string pbeRtImplName; /* Used for handling PBE runtime data */
-       const SaNameT myParent = {sizeof(OPENSAF_IMM_OBJECT_DN), 
OPENSAF_IMM_OBJECT_DN};
+       SaNameT myParent;
+       osaf_extended_name_lend(OPENSAF_IMM_OBJECT_DN, &myParent);
        const SaStringT rdnStr=(SaStringT) 
((sPbe2B)?"osafImmPbeRt=B":"osafImmPbeRt=A");
        const SaImmAttrValueT nameValues[] = {(SaImmAttrValueT) &rdnStr};
        const SaImmAttrValuesT_2 v1 = {(SaImmAttrNameT) 
OPENSAF_IMM_ATTR_PBE_RT_RDN, SA_IMM_ATTR_SASTRINGT, 1, 
@@ -1828,8 +1827,10 @@ SaAisErrorT pbe_daemon_imm_init(SaImmHan
        SaImmClassCategoryT classCategory;
        SaImmAttrDefinitionT_2 **attrDefinitions;
 
-       SaNameT pbeRtObjNameA = 
{sizeof(OPENSAF_IMM_PBE_RT_OBJECT_DN_A),OPENSAF_IMM_PBE_RT_OBJECT_DN_A};
-       SaNameT pbeRtObjNameB = 
{sizeof(OPENSAF_IMM_PBE_RT_OBJECT_DN_B),OPENSAF_IMM_PBE_RT_OBJECT_DN_B};
+       SaNameT pbeRtObjNameA;
+       osaf_extended_name_lend(OPENSAF_IMM_PBE_RT_OBJECT_DN_A, &pbeRtObjNameA);
+       SaNameT pbeRtObjNameB;
+       osaf_extended_name_lend(OPENSAF_IMM_PBE_RT_OBJECT_DN_B, &pbeRtObjNameB);
 
        const SaNameT* admOwnNames[] = 
{(sPbe2B)?(&pbeRtObjNameB):(&pbeRtObjNameA), &myParent, NULL};
 
@@ -1999,8 +2000,7 @@ SaAisErrorT pbe_daemon_imm_init(SaImmHan
        if(rc == SA_AIS_OK) {
                const SaImmAttrNameT attName = (char *) 
OPENSAF_IMM_ATTR_NOSTD_FLAGS;
                SaNameT myObj;
-               strcpy((char *) myObj.value, OPENSAF_IMM_OBJECT_DN);
-               myObj.length = strlen((const char *) myObj.value);
+               osaf_extended_name_lend(OPENSAF_IMM_OBJECT_DN, &myObj);
                SaImmAttrNameT attNames[] = {attName, NULL};
                SaImmAttrValuesT_2 ** resultAttrs;
                rc = saImmOmAccessorGet_2(accessorHandle, &myObj, attNames, 
&resultAttrs);

------------------------------------------------------------------------------
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