Hi Hoan, On 6/23/2016 4:23 PM, Hoang Vo wrote: > + buf = m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH); > + memset(buf, '\0', CPND_MAX_REPLICA_NAME_LENGTH); > + strncpy(buf, cp_node->ckpt_name, CPND_REP_NAME_MAX_CKPT_NAME_LENGTH); > + > + sprintf(buf + strlen(buf) - 1, "_%d_%llu", > (uint32_t)m_NCS_NODE_ID_FROM_MDS_DEST(cb->cpnd_mdest_id), cp_node->ckpt_id);
Dose REP_NAME Including node_id will go up to Filename length limits on linux (255) ? -AVM On 6/23/2016 4:23 PM, Hoang Vo wrote: > osaf/libs/common/cpsv/include/cpnd.h | 1 + > osaf/libs/common/cpsv/include/cpnd_cb.h | 5 +- > osaf/libs/common/cpsv/include/cpnd_init.h | 3 +- > osaf/libs/common/cpsv/include/cpsv_shm.h | 6 +- > osaf/services/saf/cpsv/cpnd/Makefile.am | 1 + > osaf/services/saf/cpsv/cpnd/cpnd_db.c | 6 +- > osaf/services/saf/cpsv/cpnd/cpnd_evt.c | 71 ++++++++++++++++++-------- > osaf/services/saf/cpsv/cpnd/cpnd_main.c | 7 ++ > osaf/services/saf/cpsv/cpnd/cpnd_proc.c | 83 > ++++++++++++++++++++++-------- > osaf/services/saf/cpsv/cpnd/cpnd_res.c | 20 +++--- > 10 files changed, 143 insertions(+), 60 deletions(-) > > > diff --git a/osaf/libs/common/cpsv/include/cpnd.h > b/osaf/libs/common/cpsv/include/cpnd.h > --- a/osaf/libs/common/cpsv/include/cpnd.h > +++ b/osaf/libs/common/cpsv/include/cpnd.h > @@ -34,6 +34,7 @@ > #define CPND_H > > #include <stdint.h> > +#include "osaf_extended_name.h" > #include "ncssysf_def.h" > #include "ncs_main_papi.h" > #include "ncssysf_tsk.h" > diff --git a/osaf/libs/common/cpsv/include/cpnd_cb.h > b/osaf/libs/common/cpsv/include/cpnd_cb.h > --- a/osaf/libs/common/cpsv/include/cpnd_cb.h > +++ b/osaf/libs/common/cpsv/include/cpnd_cb.h > @@ -34,6 +34,9 @@ extern uint32_t gl_cpnd_cb_hdl; > #define m_CPND_GIVEUP_CPND_CB ncshm_give_hdl(gl_cpnd_cb_hdl) > > #define CPND_MAX_REPLICAS 1000 > +#define CPND_REP_NAME_MAX_CKPT_NAME_LENGTH 150 > +#define CPND_MAX_REPLICA_NAME_LENGTH (CPND_REP_NAME_MAX_CKPT_NAME_LENGTH + > 50) > + > #define CPSV_GEN_SECTION_ID_SIZE 4 > #define CPSV_WAIT_TIME 1000 > > @@ -169,7 +172,7 @@ typedef struct cpnd_all_repl_write_evt_n > typedef struct cpnd_ckpt_node { > NCS_PATRICIA_NODE patnode; > SaCkptCheckpointHandleT ckpt_id; /* index for identifying the > checkpoint */ > - SaNameT ckpt_name; > + SaConstStringT ckpt_name; > SaCkptCheckpointCreationAttributesT create_attrib; > SaCkptCheckpointOpenFlagsT open_flags; > uint32_t ckpt_lcl_ref_cnt; > diff --git a/osaf/libs/common/cpsv/include/cpnd_init.h > b/osaf/libs/common/cpsv/include/cpnd_init.h > --- a/osaf/libs/common/cpsv/include/cpnd_init.h > +++ b/osaf/libs/common/cpsv/include/cpnd_init.h > @@ -130,6 +130,7 @@ uint32_t cpnd_all_repl_rsp_expiry(CPND_C > uint32_t cpnd_open_active_sync_expiry(CPND_CB *cb, CPND_TMR_INFO *tmr_info); > void cpnd_proc_free_read_data(CPSV_EVT *evt); > SaUint32T cpnd_get_scAbsenceAllowed_attr(); > +SaUint32T cpnd_get_longDnsAllowed_attr(); > /* End cpnd_proc.c */ > > /* File : --- cpnd_amf.c */ > @@ -163,7 +164,7 @@ void cpnd_evt_node_get(CPND_CB *cb, SaCk > void cpnd_evt_node_getnext(CPND_CB *cb, SaCkptCheckpointHandleT > lcl_ckpt_id, CPSV_CPND_ALL_REPL_EVT_NODE **evt_node); > uint32_t cpnd_evt_node_add(CPND_CB *cb, CPSV_CPND_ALL_REPL_EVT_NODE > *evt_node); > uint32_t cpnd_evt_node_del(CPND_CB *cb, CPSV_CPND_ALL_REPL_EVT_NODE > *evt_node); > -CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaNameT > ckpt_name); > +CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaConstStringT > ckpt_name); > CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_add(CPND_CKPT_NODE *cp_node, > SaCkptSectionIdT *id, SaTimeT exp_time, > uint32_t gen_flag); > void cpnd_evt_backup_queue_add(CPND_CKPT_NODE *cp_node, CPND_EVT *evt); > diff --git a/osaf/libs/common/cpsv/include/cpsv_shm.h > b/osaf/libs/common/cpsv/include/cpsv_shm.h > --- a/osaf/libs/common/cpsv/include/cpsv_shm.h > +++ b/osaf/libs/common/cpsv/include/cpsv_shm.h > @@ -18,6 +18,8 @@ > #ifndef CPSV_SHM_H > #define CPSV_SHM_H > > +#include "osaf_extended_name.h" > + > #define MAX_CLIENTS 1000 > #define MAX_CKPTS 2000 > #define MAX_SIZE 30 > @@ -29,7 +31,7 @@ > > typedef struct cpsv_ckpt_hdr { > SaCkptCheckpointHandleT ckpt_id; /* Index for identifying the > checkpoint */ > - SaNameT ckpt_name; > + char ckpt_name[kOsafMaxDnLength]; > SaCkptCheckpointCreationAttributesT create_attrib; > SaCkptCheckpointOpenFlagsT open_flags; > uint32_t ckpt_lcl_ref_cnt; > @@ -55,7 +57,7 @@ typedef struct cpsv_sect_hdr { > } CPSV_SECT_HDR; > > typedef struct ckpt_info { > - SaNameT ckpt_name; > + char ckpt_name[kOsafMaxDnLength]; > SaCkptCheckpointHandleT ckpt_id; > uint32_t maxSections; > SaSizeT maxSecSize; > diff --git a/osaf/services/saf/cpsv/cpnd/Makefile.am > b/osaf/services/saf/cpsv/cpnd/Makefile.am > --- a/osaf/services/saf/cpsv/cpnd/Makefile.am > +++ b/osaf/services/saf/cpsv/cpnd/Makefile.am > @@ -26,6 +26,7 @@ osaf_execbin_PROGRAMS = osafckptnd > osafckptnd_CPPFLAGS = \ > -DSA_CLM_B01=1 \ > -DNCS_CPND=1 \ > + -DSA_EXTENDED_NAME_SOURCE \ > $(AM_CPPFLAGS) \ > -I$(top_srcdir)/osaf/libs/common/immsv/include \ > -I$(top_srcdir)/osaf/libs/common/cpsv/include > diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_db.c > b/osaf/services/saf/cpsv/cpnd/cpnd_db.c > --- a/osaf/services/saf/cpsv/cpnd/cpnd_db.c > +++ b/osaf/services/saf/cpsv/cpnd/cpnd_db.c > @@ -158,6 +158,8 @@ void cpnd_ckpt_node_destroy(CPND_CB *cb, > > cpnd_ckpt_sec_map_destroy(&cp_node->replica_info); > > + free((void *)cp_node->ckpt_name); > + > m_MMGR_FREE_CPND_CKPT_NODE(cp_node); > TRACE_LEAVE(); > > @@ -275,7 +277,7 @@ uint32_t cpnd_client_node_del(CPND_CB *c > * > * Notes : None. > > *****************************************************************************/ > -CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaNameT > ckpt_name) > +CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaConstStringT > ckpt_name) > { > CPND_CKPT_NODE *ckpt_node = NULL; > SaCkptCheckpointHandleT prev_ckpt_id; > @@ -284,7 +286,7 @@ CPND_CKPT_NODE *cpnd_ckpt_node_find_by_n > > while (ckpt_node) { > prev_ckpt_id = ckpt_node->ckpt_id; > - if (memcmp(&ckpt_name, &ckpt_node->ckpt_name, sizeof(SaNameT)) > == 0) { > + if (strcmp(ckpt_name, ckpt_node->ckpt_name) == 0) { > return ckpt_node; > } > cpnd_ckpt_node_getnext(cpnd_cb, prev_ckpt_id, &ckpt_node); > diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c > b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c > --- a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c > +++ b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c > @@ -593,7 +593,7 @@ static uint32_t cpnd_evt_proc_ckpt_final > static uint32_t cpnd_evt_proc_ckpt_open(CPND_CB *cb, CPND_EVT *evt, > CPSV_SEND_INFO *sinfo) > { > CPSV_EVT send_evt, *out_evt = NULL; > - SaNameT ckpt_name; > + SaConstStringT ckpt_name = NULL; > uint32_t rc = NCSCC_RC_SUCCESS; > CPND_CPD_DEFERRED_REQ_NODE *node = NULL; > CPND_CKPT_CLIENT_NODE *cl_node = NULL; > @@ -605,12 +605,18 @@ static uint32_t cpnd_evt_proc_ckpt_open( > TRACE_ENTER(); > memset(&send_evt, '\0', sizeof(CPSV_EVT)); > > + if ((cpnd_get_longDnsAllowed_attr() == 0) && > osaf_is_an_extended_name(&evt->info.openReq.ckpt_name)) { > + LOG_ER("cpnd - longDnsAllowed == false - NOT supporting > extended name"); > + send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_INVALID_PARAM; > + goto agent_rsp; > + } > + > if (!cpnd_is_cpd_up(cb)) { > send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_TRY_AGAIN; > goto agent_rsp; > } > > - ckpt_name = evt->info.openReq.ckpt_name; > + ckpt_name = osaf_extended_name_borrow(&evt->info.openReq.ckpt_name); > client_hdl = evt->info.openReq.client_hdl; > > cpnd_client_node_get(cb, client_hdl, &cl_node); > @@ -714,7 +720,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( > send_evt.type = CPSV_EVT_TYPE_CPD; > send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_CREATE; > > - send_evt.info.cpd.info.ckpt_create.ckpt_name = ckpt_name; > + osaf_extended_name_lend(ckpt_name, > &send_evt.info.cpd.info.ckpt_create.ckpt_name); > send_evt.info.cpd.info.ckpt_create.attributes = > evt->info.openReq.ckpt_attrib; > send_evt.info.cpd.info.ckpt_create.ckpt_flags = > evt->info.openReq.ckpt_flags; > send_evt.info.cpd.info.ckpt_create.client_version = cl_node->version; > @@ -723,14 +729,14 @@ static uint32_t cpnd_evt_proc_ckpt_open( > rc = cpnd_mds_msg_sync_send(cb, NCSMDS_SVC_ID_CPD, cb->cpd_mdest_id, > &send_evt, &out_evt, CPSV_WAIT_TIME); > > if (rc != NCSCC_RC_SUCCESS) { > - TRACE_4("cpnd ckpt open failure for > ckpt_name:%s,client_hdl:%llx",ckpt_name.value,client_hdl); > + TRACE_4("cpnd ckpt open failure for > ckpt_name:%s,client_hdl:%llx",ckpt_name, client_hdl); > > if (rc == NCSCC_RC_REQ_TIMOUT) { > > node = (CPND_CPD_DEFERRED_REQ_NODE > *)m_MMGR_ALLOC_CPND_CPD_DEFERRED_REQ_NODE; > if (!node) { > TRACE_4("cpnd cpd deferred req node memory > allocation for ckpt_name:%s,client_hdl:%llx", > - ckpt_name.value, client_hdl); > + ckpt_name, client_hdl); > send_evt.info.cpa.info.openRsp.error = > SA_AIS_ERR_NO_MEMORY; > goto agent_rsp; > } > @@ -738,7 +744,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( > memset(node, '\0', sizeof(CPND_CPD_DEFERRED_REQ_NODE)); > node->evt.type = CPSV_EVT_TYPE_CPD; > node->evt.info.cpd.type = > CPD_EVT_ND2D_CKPT_DESTROY_BYNAME; > - node->evt.info.cpd.info.ckpt_destroy_byname.ckpt_name = > ckpt_name; > + osaf_extended_name_lend(ckpt_name, > &node->evt.info.cpd.info.ckpt_destroy_byname.ckpt_name); > > ncs_enqueue(&cb->cpnd_cpd_deferred_reqs_list, (void > *)node); > } > @@ -773,7 +779,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( > > cp_node->clist = NULL; > cp_node->cpnd_dest_list = NULL; > - cp_node->ckpt_name = ckpt_name; > + cp_node->ckpt_name = strdup(ckpt_name); > cp_node->create_attrib = > out_evt->info.cpnd.info.ckpt_info.attributes; > cp_node->open_flags = SA_CKPT_CHECKPOINT_CREATE; > > @@ -828,7 +834,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( > rc = cpnd_ckpt_replica_create(cb, cp_node); > if (rc == NCSCC_RC_FAILURE) { > TRACE_4("cpnd ckpt rep create failed > ckpt_name:%s,client_hdl:%llx", > - ckpt_name.value, client_hdl); > + ckpt_name, client_hdl); > send_evt.info.cpa.info.openRsp.error = > SA_AIS_ERR_NO_RESOURCES; > goto ckpt_node_free_error; > } > @@ -837,14 +843,14 @@ static uint32_t cpnd_evt_proc_ckpt_open( > rc = cpnd_ckpt_hdr_update(cp_node); > if (rc == NCSCC_RC_FAILURE) { > TRACE_4("cpnd ckpt hdr update failed > ckpt_name:%s,client_hdl:%llx", > - ckpt_name.value, client_hdl); > + ckpt_name, client_hdl); > } > } > > rc = cpnd_restart_shm_ckpt_update(cb, cp_node, client_hdl); > if (rc == NCSCC_RC_FAILURE) { > TRACE_4("cpnd restart shm ckpt update failed > ckpt_name:%s,client_hdl:%llx", > - ckpt_name.value, client_hdl); > + ckpt_name, client_hdl); > send_evt.info.cpa.info.openRsp.error = > SA_AIS_ERR_NO_RESOURCES; > goto ckpt_shm_node_free_error; > } > @@ -891,12 +897,12 @@ static uint32_t cpnd_evt_proc_ckpt_open( > if (rc == NCSCC_RC_REQ_TIMOUT) { > send_evt.info.cpa.info.openRsp.error = > SA_AIS_ERR_TIMEOUT; > TRACE_4("cpnd remote to active mds send > fail with timeout for ckpt_name:%s,cpnd_mdest_id:%"PRIu64",\ > - > active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name.value, cb->cpnd_mdest_id, > cp_node->active_mds_dest, cp_node->ckpt_id); > + > active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name, cb->cpnd_mdest_id, > cp_node->active_mds_dest, cp_node->ckpt_id); > > } else { > send_evt.info.cpa.info.openRsp.error = > SA_AIS_ERR_TRY_AGAIN; > TRACE_4("cpnd remote to active mds send > fail with timeout for ckpt_name:%s,cpnd_mdest_id:%"PRIu64", \ > - > active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name.value, cb->cpnd_mdest_id, > cp_node->active_mds_dest, cp_node->ckpt_id); > + > active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name, cb->cpnd_mdest_id, > cp_node->active_mds_dest, cp_node->ckpt_id); > > } > goto agent_rsp; > @@ -939,7 +945,7 @@ static uint32_t cpnd_evt_proc_ckpt_open( > send_evt.info.cpa.info.openRsp.active_dest = > cp_node->active_mds_dest; > } > if (send_evt.info.cpa.info.openRsp.error == SA_AIS_OK) { > - TRACE_4("cpnd ckpt open success > ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,active_mds_dest:%"PRIu64"",ckpt_name.value, > + TRACE_4("cpnd ckpt open success > ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,active_mds_dest:%"PRIu64"",ckpt_name, > client_hdl, cp_node->ckpt_id,cp_node->active_mds_dest); > /* CPND RESTART UPDATE THE SHARED MEMORY WITH CLIENT > INFO */ > cpnd_restart_set_reader_writer_flags_cnt(cb, cl_node); > @@ -1126,10 +1132,17 @@ static uint32_t cpnd_evt_proc_ckpt_unlin > CPND_CKPT_NODE *cp_node = NULL; > uint32_t rc = NCSCC_RC_SUCCESS; > CPND_CPD_DEFERRED_REQ_NODE *node = NULL; > + SaConstStringT ckpt_name = > osaf_extended_name_borrow(&evt->info.ulinkReq.ckpt_name); > > TRACE_ENTER(); > memset(&send_evt, '\0', sizeof(CPSV_EVT)); > > + if ((cpnd_get_longDnsAllowed_attr() == 0) && > osaf_is_an_extended_name(&evt->info.ulinkReq.ckpt_name)) { > + LOG_ER("cpnd - longDnsAllowed == false - NOT supporting > extended name"); > + send_evt.info.cpa.info.ulinkRsp.error = > SA_AIS_ERR_INVALID_PARAM; > + goto agent_rsp; > + } > + > if (!cpnd_is_cpd_up(cb)) { > send_evt.info.cpa.info.ulinkRsp.error = SA_AIS_ERR_TRY_AGAIN; > goto agent_rsp; > @@ -1168,14 +1181,14 @@ static uint32_t cpnd_evt_proc_ckpt_unlin > } > } > > - cp_node = cpnd_ckpt_node_find_by_name(cb, evt->info.ulinkReq.ckpt_name); > + cp_node = cpnd_ckpt_node_find_by_name(cb, ckpt_name); > if (cp_node == NULL) { > if (out_evt != NULL) > send_evt.info.cpa.info.ulinkRsp.error = > out_evt->info.cpnd.info.ulink_ack.error; > else > send_evt.info.cpa.info.ulinkRsp.error = > SA_AIS_ERR_TIMEOUT; > > - TRACE_2("cpnd proc ckpt unlink success > ckpt_name:%s",evt->info.ulinkReq.ckpt_name.value); > + TRACE_2("cpnd proc ckpt unlink success ckpt_name:%s", > ckpt_name); > goto agent_rsp; > } > cp_node->cpa_sinfo = *(sinfo); > @@ -1269,7 +1282,9 @@ static uint32_t cpnd_evt_proc_ckpt_unlin > cpnd_restart_ckpt_name_length_reset(cb, cp_node); > > cp_node->is_unlink = true; > - cp_node->ckpt_name.length = 0; > + > + free((void *)cp_node->ckpt_name); > + cp_node->ckpt_name = strdup(""); > > if (cp_node->cpnd_rep_create) { > rc = cpnd_ckpt_hdr_update(cp_node); > @@ -1519,7 +1534,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_ > > CPND_CKPT_NODE *cp_node = NULL; > SaCkptHandleT client_hdl; > - SaNameT ckpt_name; > + SaConstStringT ckpt_name; > CPSV_EVT send_evt; > uint32_t rc = NCSCC_RC_SUCCESS; > CPND_CKPT_CLIENT_NODE *cl_node = NULL; > @@ -1527,7 +1542,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_ > TRACE_ENTER(); > memset(&send_evt, '\0', sizeof(CPSV_EVT)); > > - ckpt_name = evt->info.ckptListUpdate.ckpt_name; > + ckpt_name = > osaf_extended_name_borrow(&evt->info.ckptListUpdate.ckpt_name); > client_hdl = evt->info.ckptListUpdate.client_hdl; > > if (((cp_node = cpnd_ckpt_node_find_by_name(cb, ckpt_name)) != NULL) && > cp_node->is_unlink == false) { > @@ -1543,8 +1558,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_ > > } > else { > - TRACE_4("cpnd ckpt_name get failed or unlinked for ckpt_name > :%s",ckpt_name.value); > - > + TRACE_4("cpnd ckpt_name get failed or unlinked for ckpt_name > :%s",ckpt_name); > } > > TRACE_LEAVE(); > @@ -3596,7 +3610,8 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt > > send_evt.info.cpa.info.openRsp.active_dest = > > cp_node->active_mds_dest; > } > - TRACE_4("cpnd ckpt open success > for ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,mds_mdest:%"PRIu64 > ,cp_node->ckpt_name.value, > evt->info.ckpt_nd2nd_sync.ckpt_sync.client_hdl, > + TRACE_4("cpnd ckpt open success > for ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,mds_mdest:%"PRIu64 > + > ,cp_node->ckpt_name, evt->info.ckpt_nd2nd_sync.ckpt_sync.client_hdl, > > cp_node->ckpt_id, cp_node->active_mds_dest); > } else { > memset(&des_evt, '\0', > sizeof(CPSV_EVT)); > @@ -4079,7 +4094,7 @@ static uint32_t cpnd_evt_proc_ckpt_creat > > cp_node->clist = NULL; > cp_node->cpnd_dest_list = NULL; > - cp_node->ckpt_name = evt->info.ckpt_create.ckpt_name; > + cp_node->ckpt_name = > strdup(osaf_extended_name_borrow(&evt->info.ckpt_create.ckpt_name)); > cp_node->create_attrib = > evt->info.ckpt_create.ckpt_info.attributes; > cp_node->ckpt_id = evt->info.ckpt_create.ckpt_info.ckpt_id; > > @@ -4594,6 +4609,18 @@ uint32_t cpnd_evt_destroy(CPSV_EVT *evt) > } > break; > } > + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_OPEN) { > + if > (osaf_is_an_extended_name(&evt->info.cpnd.info.openReq.ckpt_name)) > + free((void > *)osaf_extended_name_borrow(&evt->info.cpnd.info.openReq.ckpt_name)); > + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_UNLINK) { > + if > (osaf_is_an_extended_name(&evt->info.cpnd.info.ulinkReq.ckpt_name)) > + free((void > *)osaf_extended_name_borrow(&evt->info.cpnd.info.ulinkReq.ckpt_name)); > + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_LIST_UPDATE) { > + if > (osaf_is_an_extended_name(&evt->info.cpnd.info.ckptListUpdate.ckpt_name)) > + free((void > *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckptListUpdate.ckpt_name)); > + } else if (evt->info.cpnd.type == CPND_EVT_D2ND_CKPT_CREATE) { > + if > (osaf_is_an_extended_name(&evt->info.cpnd.info.ckpt_create.ckpt_name)) > + free((void > *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckpt_create.ckpt_name)); > } > > m_MMGR_FREE_CPSV_EVT(evt, NCS_SERVICE_ID_CPND); > diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_main.c > b/osaf/services/saf/cpsv/cpnd/cpnd_main.c > --- a/osaf/services/saf/cpsv/cpnd/cpnd_main.c > +++ b/osaf/services/saf/cpsv/cpnd/cpnd_main.c > @@ -15,6 +15,7 @@ > * > */ > > +#include <stdlib.h> > #include <ncssysf_tsk.h> > > #include <logtrace.h> > @@ -27,6 +28,12 @@ static int __init_cpnd(void) > { > NCS_LIB_REQ_INFO lib_create; > > + /* Enable extended SaNameT */ > + if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0) { > + LOG_ER("Failed to set environment variable: > SA_ENABLE_EXTENDED_NAMES"); > + return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); > + } > + > /* Init LIB_CREATE request for Server */ > memset(&lib_create, 0, sizeof(lib_create)); > lib_create.i_op = NCS_LIB_REQ_CREATE; > diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c > b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c > --- a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c > +++ b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c > @@ -55,6 +55,7 @@ static void cpnd_dump_shm_info(NCS_OS_PO > static void cpnd_dump_ckpt_attri(CPND_CKPT_NODE *cp_node); > static void cpnd_ckpt_sc_cpnd_mdest_del(CPND_CB *cb); > static void cpnd_headless_ckpt_node_del(CPND_CB *cb); > +static SaUint32T cpnd_get_imm_attr(char **attribute_names); > > > /**************************************************************************** > * Name : cpnd_ckpt_client_add > @@ -455,7 +456,6 @@ uint32_t cpnd_ckpt_replica_create(CPND_C > > uint32_t rc = NCSCC_RC_SUCCESS; > char *buf; > - uint8_t size = 0, total_length; > int32_t sec_cnt = 0; > > TRACE_ENTER(); > @@ -466,14 +466,11 @@ uint32_t cpnd_ckpt_replica_create(CPND_C > return NCSCC_RC_FAILURE; > } > > - size = cp_node->ckpt_name.length; > - total_length = size + sizeof(cp_node->ckpt_id) + sizeof(NODE_ID) + 5; > - > - buf = m_MMGR_ALLOC_CPND_DEFAULT(total_length); > - memset(buf, '\0', total_length); > - strncpy(buf, (char *)cp_node->ckpt_name.value, size); > - > - sprintf(buf + size - 1, "_%d_%llu", > (uint32_t)m_NCS_NODE_ID_FROM_MDS_DEST(cb->cpnd_mdest_id), cp_node->ckpt_id); > + buf = m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH); > + memset(buf, '\0', CPND_MAX_REPLICA_NAME_LENGTH); > + strncpy(buf, cp_node->ckpt_name, CPND_REP_NAME_MAX_CKPT_NAME_LENGTH); > + > + sprintf(buf + strlen(buf) - 1, "_%d_%llu", > (uint32_t)m_NCS_NODE_ID_FROM_MDS_DEST(cb->cpnd_mdest_id), cp_node->ckpt_id); > /* size of chkpt */ > memset(&cp_node->replica_info.open, '\0', > sizeof(cp_node->replica_info.open)); > > @@ -1816,7 +1813,7 @@ uint32_t cpnd_ckpt_hdr_update(CPND_CKPT_ > memset(&write_req, '\0', sizeof(write_req)); > memset(&ckpt_hdr, '\0', sizeof(CPSV_CKPT_HDR)); > ckpt_hdr.ckpt_id = cp_node->ckpt_id; > - ckpt_hdr.ckpt_name = cp_node->ckpt_name; > + strncpy(ckpt_hdr.ckpt_name, cp_node->ckpt_name, kOsafMaxDnLength); > ckpt_hdr.create_attrib = cp_node->create_attrib; > ckpt_hdr.open_flags = cp_node->open_flags; > ckpt_hdr.is_unlink = cp_node->is_unlink; > @@ -2122,7 +2119,7 @@ void cpnd_dump_ckpt_info(CPND_CKPT_NODE > CPSV_CPND_DEST_INFO *cpnd_dest_list = NULL; > > TRACE("++++++++++++++++++++++++++++++++++++++++++++++++++"); > - TRACE("Ckpt_id - %d Ckpt Name - %.10s ", (uint32_t)ckpt_node->ckpt_id, > ckpt_node->ckpt_name.value); > + TRACE("Ckpt_id - %d Ckpt Name - %.10s ", (uint32_t)ckpt_node->ckpt_id, > ckpt_node->ckpt_name); > if (ckpt_node->is_unlink) > TRACE("Ckpt Unlinked - "); > if (ckpt_node->is_close) > @@ -2529,12 +2526,12 @@ void cpnd_proc_ckpt_info_update(CPND_CB > remaining_node--; > > /* send info to cpd */ > - LOG_NO("cpnd_proc_update_cpd_data::ckpt_name = %s[%llu]", > (char*)ckpt_node->ckpt_name.value, > + LOG_NO("cpnd_proc_update_cpd_data::ckpt_name = %s[%llu]", > (char*)ckpt_node->ckpt_name, > ckpt_node->ckpt_id); > send_evt.type = CPSV_EVT_TYPE_CPD; > send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_INFO_UPDATE; > send_evt.info.cpd.info.ckpt_info.ckpt_id = ckpt_node->ckpt_id; > - send_evt.info.cpd.info.ckpt_info.ckpt_name = > ckpt_node->ckpt_name; > + osaf_extended_name_lend(ckpt_node->ckpt_name, > &send_evt.info.cpd.info.ckpt_info.ckpt_name); > send_evt.info.cpd.info.ckpt_info.attributes = > ckpt_node->create_attrib; > send_evt.info.cpd.info.ckpt_info.ckpt_flags = > ckpt_node->open_flags; > send_evt.info.cpd.info.ckpt_info.num_users = > ckpt_node->ckpt_lcl_ref_cnt; > @@ -2725,6 +2722,56 @@ void cpnd_proc_active_down_ckpt_node_del > SaUint32T cpnd_get_scAbsenceAllowed_attr() > { > SaUint32T rc_attr_val = 0; > + char *attribute_names[] = { > + "scAbsenceAllowed", > + NULL > + }; > + > + TRACE_ENTER(); > + > + rc_attr_val = cpnd_get_imm_attr(attribute_names); > + > + TRACE_LEAVE(); > + return rc_attr_val; > +} > + > +/**************************************************************************************** > + * Name : cpnd_get_longDnsAllowed_attr() > + * > + * Description : This function gets scAbsenceAllowed attribute > + * > + * Arguments : - > + * > + * Return Values : scAbsenceAllowed attribute (0 = not allowed) > + > *****************************************************************************************/ > +SaUint32T cpnd_get_longDnsAllowed_attr() > +{ > + SaUint32T rc_attr_val = 0; > + char *attribute_names[] = { > + "longDnsAllowed", > + NULL > + }; > + > + TRACE_ENTER(); > + > + rc_attr_val = cpnd_get_imm_attr(attribute_names); > + > + TRACE_LEAVE(); > + return rc_attr_val; > +} > + > +/**************************************************************************************** > + * Name : cpnd_get_imm_attr > + * > + * Description : This function gets IMM attribute > + * > + * Arguments : - > + * > + * Return Values : scAbsenceAllowed attribute (0 = not allowed) > + > *****************************************************************************************/ > +static SaUint32T cpnd_get_imm_attr(char **attribute_names) > +{ > + SaUint32T rc_attr_val = 0; > SaAisErrorT rc = SA_AIS_OK; > SaImmAccessorHandleT accessorHandle; > SaImmHandleT immOmHandle; > @@ -2733,15 +2780,10 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr > > TRACE_ENTER(); > > - char *attribute_names[] = { > - "scAbsenceAllowed", > - NULL > - }; > char object_name_str[] = "opensafImm=opensafImm,safApp=safImmService"; > > SaNameT object_name; > - strncpy((char *) object_name.value, object_name_str, > SA_MAX_NAME_LENGTH); > - object_name.length = strlen((char *) object_name.value) + 1; > + osaf_extended_name_lend(object_name_str, &object_name); > > /* Save immutil settings and reconfigure */ > struct ImmutilWrapperProfile tmp_immutilWrapperProfile; > @@ -2767,7 +2809,6 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr > goto done; > } > > - > rc = immutil_saImmOmAccessorGet_2(accessorHandle, &object_name, > attribute_names, &attributes); > if (rc != SA_AIS_OK) { > TRACE("%s saImmOmAccessorGet_2 Fail '%s'", __FUNCTION__, > saf_error(rc)); > @@ -2776,11 +2817,9 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr > > void *value; > > - /* Handle the global scAbsenceAllowed_flag */ > attribute = attributes[0]; > TRACE("%s attrName > \"%s\"",__FUNCTION__,attribute?attribute->attrName:""); > if ((attribute != NULL) && (attribute->attrValuesNumber != 0)) { > - /* scAbsenceAllowed has value. Get the value */ > value = attribute->attrValues[0]; > rc_attr_val = *((SaUint32T *) value); > } > diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_res.c > b/osaf/services/saf/cpsv/cpnd/cpnd_res.c > --- a/osaf/services/saf/cpsv/cpnd/cpnd_res.c > +++ b/osaf/services/saf/cpsv/cpnd/cpnd_res.c > @@ -482,7 +482,7 @@ void *cpnd_restart_shm_create(NCS_OS_POS > } > > memset(cp_node, '\0', sizeof(CPND_CKPT_NODE)); > - cp_node->ckpt_name = cp_info.ckpt_name; > + cp_node->ckpt_name = strdup(cp_info.ckpt_name); > cp_node->ckpt_id = cp_info.ckpt_id; > cp_node->offset = cp_info.offset; > cp_node->is_close = cp_info.is_close; > @@ -495,12 +495,10 @@ void *cpnd_restart_shm_create(NCS_OS_POS > if (cp_info.cpnd_rep_create) { > /* OPEN THE SHARED MEMORY ALREADY > CREATED FOR CHECKPOINT REPLICA */ > /* size=cp_node->ckpt_name.length; */ > - size = cp_node->ckpt_name.length; > - total_length = size + > sizeof(cp_node->ckpt_id) + sizeof(NODE_ID) + 5; > - buf = > m_MMGR_ALLOC_CPND_DEFAULT(total_length); > - memset(buf, '\0', total_length); > - strncpy(buf, (char > *)cp_node->ckpt_name.value, size); > - sprintf(buf + size - 1, "_%d_%d", > (uint32_t)nodeid, (uint32_t)cp_node->ckpt_id); > + buf = > m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH); > + memset(buf, '\0', > CPND_MAX_REPLICA_NAME_LENGTH); > + strncpy(buf, cp_node->ckpt_name, > CPND_REP_NAME_MAX_CKPT_NAME_LENGTH); > + sprintf(buf + strlen(buf) - 1, > "_%d_%d", (uint32_t)nodeid, (uint32_t)cp_node->ckpt_id); > rc = > cpnd_ckpt_replica_create_res(&ckpt_rep_open, buf, &cp_node, 0, &cp_info, > cb->shm_alloc_guaranteed); > if (rc != NCSCC_RC_SUCCESS) { > /* assert(0); */ > @@ -511,8 +509,10 @@ void *cpnd_restart_shm_create(NCS_OS_POS > } > cb->num_rep++; > } > - if (cp_node->is_unlink) > - cp_node->ckpt_name.length = 0; > + if (cp_node->is_unlink) { > + free((void *)cp_node->ckpt_name); > + cp_node->ckpt_name = strdup(""); > + } > > memset(&tmp_cp_info, '\0', sizeof(CKPT_INFO)); > memcpy(&tmp_cp_info, &cp_info, > sizeof(CKPT_INFO)); > @@ -1021,7 +1021,7 @@ uint32_t cpnd_write_ckpt_info(CPND_CB *c > > TRACE_ENTER(); > memset(&ckpt_info, 0, sizeof(CKPT_INFO)); > - ckpt_info.ckpt_name = cp_node->ckpt_name; > + strncpy(ckpt_info.ckpt_name, cp_node->ckpt_name, kOsafMaxDnLength); > ckpt_info.ckpt_id = cp_node->ckpt_id; > ckpt_info.maxSections = cp_node->create_attrib.maxSections; > ckpt_info.maxSecSize = cp_node->create_attrib.maxSectionSize; ------------------------------------------------------------------------------ Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San Francisco, CA to explore cutting-edge tech and listen to tech luminaries present their vision of the future. This family event has something for everyone, including kids. Get more information and register today. http://sdm.link/attshape _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel