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 =
¶m;
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