osaf/libs/agents/saf/lga/Makefile.am | 1 + osaf/libs/agents/saf/lga/lga.h | 5 +- osaf/libs/agents/saf/lga/lga_api.c | 110 ++++++++++------------ osaf/libs/agents/saf/lga/lga_mds.c | 168 +++++++++++++++++++++------------- osaf/libs/agents/saf/lga/lga_state.c | 7 +- osaf/libs/agents/saf/lga/lga_util.c | 49 ++++++++- osaf/libs/saf/libSaLog/Makefile.am | 1 + 7 files changed, 206 insertions(+), 135 deletions(-)
Replace all internal SaNameT by C string and make log agent support long DN, but keep backward compatible. diff --git a/osaf/libs/agents/saf/lga/Makefile.am b/osaf/libs/agents/saf/lga/Makefile.am --- a/osaf/libs/agents/saf/lga/Makefile.am +++ b/osaf/libs/agents/saf/lga/Makefile.am @@ -26,6 +26,7 @@ noinst_HEADERS = \ noinst_LTLIBRARIES = liblga.la liblga_la_CPPFLAGS = \ + -DSA_EXTENDED_NAME_SOURCE \ $(AM_CPPFLAGS) \ -I$(top_srcdir)/osaf/libs/common/logsv/include diff --git a/osaf/libs/agents/saf/lga/lga.h b/osaf/libs/agents/saf/lga/lga.h --- a/osaf/libs/agents/saf/lga/lga.h +++ b/osaf/libs/agents/saf/lga/lga.h @@ -44,7 +44,7 @@ /* Log Stream Handle Definition */ typedef struct lga_log_stream_hdl_rec { unsigned int log_stream_hdl; /* Log stream HDL from handle mgr */ - SaNameT log_stream_name; /* log stream name mentioned during open log stream */ + char *log_stream_name; /* log stream name mentioned during open log stream */ unsigned int open_flags; /* log stream open flags as defined in AIS.02.01 */ unsigned int log_header_type; /* log header type */ unsigned int lgs_log_stream_id; /* server reference for this log stream */ @@ -141,7 +141,7 @@ extern lga_client_hdl_rec_t *lga_hdl_rec extern lga_log_stream_hdl_rec_t *lga_log_stream_hdl_rec_add(lga_client_hdl_rec_t **hdl_rec, uint32_t log_stream_id, uint32_t log_stream_open_flags, - const SaNameT *logStreamName, uint32_t log_header_type); + const char *logStreamName, uint32_t log_header_type); extern void lga_hdl_list_del(lga_client_hdl_rec_t **); extern uint32_t lga_hdl_rec_del(lga_client_hdl_rec_t **, lga_client_hdl_rec_t *); extern uint32_t lga_log_stream_hdl_rec_del(lga_log_stream_hdl_rec_t **, lga_log_stream_hdl_rec_t *); @@ -150,5 +150,6 @@ extern bool lga_validate_lga_client_hdl( /* lga_util.c */ extern lga_client_hdl_rec_t *lga_find_hdl_rec_by_regid(lga_cb_t *lga_cb, uint32_t client_id); extern void lga_msg_destroy(lgsv_msg_t *msg); +extern bool lga_is_extended_name_valid(const SaNameT* name); #endif /* !LGA_H */ diff --git a/osaf/libs/agents/saf/lga/lga_api.c b/osaf/libs/agents/saf/lga/lga_api.c --- a/osaf/libs/agents/saf/lga/lga_api.c +++ b/osaf/libs/agents/saf/lga/lga_api.c @@ -18,6 +18,7 @@ #include <string.h> #include <saf_error.h> #include "lga.h" +#include "osaf_extended_name.h" #include "lga_state.h" @@ -71,17 +72,17 @@ static bool is_lgs_state(lgs_state_t sta } static void populate_open_params(lgsv_stream_open_req_t *open_param, - const SaNameT *logStreamName, + const char *logStreamName, lga_client_hdl_rec_t *hdl_rec, SaLogFileCreateAttributesT_2 *logFileCreateAttributes, SaLogStreamOpenFlagsT logStreamOpenFlags) { TRACE_ENTER(); open_param->client_id = hdl_rec->lgs_client_id; - open_param->lstr_name = *logStreamName; + osaf_extended_name_lend(logStreamName, &open_param->lstr_name); if (logFileCreateAttributes == NULL || - is_well_know_stream((const char*)logStreamName->value)) { + is_well_know_stream(logStreamName)) { open_param->logFileFmt = NULL; open_param->logFileFmtLength = 0; open_param->maxLogFileSize = 0; @@ -575,7 +576,7 @@ SaAisErrorT saLogFinalize(SaLogHandleT l * @return */ static SaAisErrorT validate_open_params( - const SaNameT *logStreamName, + const char *logStreamName, const SaLogFileCreateAttributesT_2 *logFileCreateAttributes, SaLogStreamOpenFlagsT logStreamOpenFlags, SaLogStreamHandleT *logStreamHandle, @@ -589,38 +590,22 @@ static SaAisErrorT validate_open_params( osafassert(header_type != NULL); - if ((NULL == logStreamName) || (NULL == logStreamHandle)) { + if (NULL == logStreamHandle) { TRACE("SA_AIS_ERR_INVALID_PARAM => NULL pointer check"); ais_rc = SA_AIS_ERR_INVALID_PARAM; goto done; } - - /* Note: - * logStreamName is of type SaNameT this means that length normally is not - * allowed to be > SA_MAX_NAME_LENGTH - 1 (255). SaNameT also means that - * value does not have to be '\0' terminated. - * HOWEVER: - * This parameter does not follow these rules. In this case value shall be - * '\0' terminated and length can be 256. - * In order to not break backwards compatibility this should not be changed. - */ - if (logStreamName->length >= SA_MAX_NAME_LENGTH) { - TRACE("SA_AIS_ERR_INVALID_PARAM, logStreamName->length > SA_MAX_NAME_LENGTH"); - ais_rc = SA_AIS_ERR_INVALID_PARAM; - goto done; - } /* Check log stream input parameters */ /* The well known log streams */ - if (is_well_know_stream((const char *)logStreamName->value) == true) { + if (is_well_know_stream(logStreamName) == true) { /* SA_AIS_ERR_INVALID_PARAM, bullet 3 in SAI-AIS-LOG-A.02.01 Section 3.6.1, Return Values */ if ((NULL != logFileCreateAttributes) || (logStreamOpenFlags == SA_LOG_STREAM_CREATE)) { TRACE("SA_AIS_ERR_INVALID_PARAM, logStreamOpenFlags"); return SA_AIS_ERR_INVALID_PARAM; } - if (strcmp((const char *)logStreamName->value, /* Well known log streams */ - SA_LOG_STREAM_SYSTEM) == 0) { + if (strcmp(logStreamName, SA_LOG_STREAM_SYSTEM) == 0) { *header_type = (uint32_t)SA_LOG_GENERIC_HEADER; } else { *header_type = (uint32_t)SA_LOG_NTF_HEADER; @@ -651,8 +636,8 @@ static SaAisErrorT validate_open_params( /* SA_AIS_ERR_INVALID_PARAM, bullet 5 in SAI-AIS-LOG-A.02.01 Section 3.6.1, Return Values */ - if (strncmp((const char *)logStreamName->value, "safLgStr=", 9) && - strncmp((const char *)logStreamName->value, "safLgStrCfg=", 12)) { + if (strncmp(logStreamName, "safLgStr=", 9) && + strncmp(logStreamName, "safLgStrCfg=", 12)) { TRACE("\"safLgStr=\" is missing in logStreamName"); return SA_AIS_ERR_INVALID_PARAM; } @@ -764,7 +749,15 @@ SaAisErrorT saLogStreamOpen_2(SaLogHandl TRACE_ENTER(); - ais_rc = validate_open_params(logStreamName, logFileCreateAttributes, + if (lga_is_extended_name_valid(logStreamName) == false) { + TRACE("logStreamName is invalid"); + ais_rc = SA_AIS_ERR_INVALID_PARAM; + goto done; + } + + SaConstStringT streamName = osaf_extended_name_borrow(logStreamName); + + ais_rc = validate_open_params(streamName, logFileCreateAttributes, logStreamOpenFlags, logStreamHandle, &log_header_type); if (ais_rc != SA_AIS_OK) goto done; @@ -842,7 +835,7 @@ SaAisErrorT saLogStreamOpen_2(SaLogHandl open_param->logFilePathName = NULL; populate_open_params(open_param, - logStreamName, + streamName, hdl_rec, (SaLogFileCreateAttributesT_2 *)logFileCreateAttributes, logStreamOpenFlags); @@ -911,7 +904,7 @@ SaAisErrorT saLogStreamOpen_2(SaLogHandl lstr_hdl_rec = lga_log_stream_hdl_rec_add( &hdl_rec, log_stream_id, logStreamOpenFlags, - logStreamName, log_header_type + streamName, log_header_type ); if (lstr_hdl_rec == NULL) { osaf_mutex_unlock_ordie(&lga_cb.cb_lock); @@ -979,7 +972,7 @@ SaAisErrorT saLogStreamOpenAsync_2(SaLog * @return AIS return code */ static SaAisErrorT handle_log_record(const SaLogRecordT *logRecord, - SaNameT *logSvcUsrName, + char *logSvcUsrName, lgsv_write_log_async_req_t *write_param, SaTimeT *const logTimeStamp) { @@ -1039,51 +1032,41 @@ static SaAisErrorT handle_log_record(con ais_rc = SA_AIS_ERR_INVALID_PARAM; goto done; } - logSvcUsrName->length = strlen(logSvcUsrChars); - if (logSvcUsrName->length >= SA_MAX_NAME_LENGTH) { + if (strlen(logSvcUsrName) >= kOsafMaxDnLength) { TRACE("SA_AMF_COMPONENT_NAME is too long"); ais_rc = SA_AIS_ERR_INVALID_PARAM; goto done; } - strcpy((char *)logSvcUsrName->value, logSvcUsrChars); - write_param->logSvcUsrName = logSvcUsrName; + strcpy(logSvcUsrName, logSvcUsrChars); + osaf_extended_name_lend(logSvcUsrName, write_param->logSvcUsrName); } else { - if (logRecord->logHeader.genericHdr.logSvcUsrName->length >= - SA_MAX_NAME_LENGTH) { - TRACE("logSvcUsrName too long"); + if (lga_is_extended_name_valid( + logRecord->logHeader.genericHdr.logSvcUsrName + ) == false) { + TRACE("Invalid logSvcUsrName"); ais_rc = SA_AIS_ERR_INVALID_PARAM; goto done; } - logSvcUsrName->length = - logRecord->logHeader.genericHdr.logSvcUsrName->length; - write_param->logSvcUsrName = - (SaNameT *)logRecord->logHeader.genericHdr.logSvcUsrName; + osaf_extended_name_lend( + osaf_extended_name_borrow(logRecord->logHeader.genericHdr.logSvcUsrName), + write_param->logSvcUsrName + ); } } if (logRecord->logHdrType == SA_LOG_NTF_HEADER) { - if (logRecord->logHeader.ntfHdr.notificationObject == NULL) { - TRACE("notificationObject == NULL"); + if (lga_is_extended_name_valid( + logRecord->logHeader.ntfHdr.notificationObject + ) == false) { + TRACE("Invalid notificationObject"); ais_rc = SA_AIS_ERR_INVALID_PARAM; goto done; } - if (logRecord->logHeader.ntfHdr.notificationObject->length >= - SA_MAX_NAME_LENGTH) { - TRACE("notificationObject.length >= SA_MAX_NAME_LENGTH"); - ais_rc = SA_AIS_ERR_INVALID_PARAM; - goto done; - } - - if (logRecord->logHeader.ntfHdr.notifyingObject == NULL) { - TRACE("notifyingObject == NULL"); - ais_rc = SA_AIS_ERR_INVALID_PARAM; - goto done; - } - - if (logRecord->logHeader.ntfHdr.notifyingObject->length >= - SA_MAX_NAME_LENGTH) { - TRACE("notifyingObject.length >= SA_MAX_NAME_LENGTH"); + if (lga_is_extended_name_valid( + logRecord->logHeader.ntfHdr.notifyingObject + ) == false) { + TRACE("Invalid notifyingObject"); ais_rc = SA_AIS_ERR_INVALID_PARAM; goto done; } @@ -1126,13 +1109,16 @@ SaAisErrorT saLogWriteLogAsync(SaLogStre lgsv_msg_t msg; SaAisErrorT ais_rc = SA_AIS_OK; lgsv_write_log_async_req_t *write_param; - SaNameT logSvcUsrName; + char logSvcUsrName[kOsafMaxDnLength] = {0}; int rc; bool is_recovery2_locked = false; + SaNameT tmpSvcUsrName; + + TRACE_ENTER(); memset(&(msg), 0, sizeof(lgsv_msg_t)); write_param = &msg.info.api_info.param.write_log_async; - TRACE_ENTER(); + write_param->logSvcUsrName = &tmpSvcUsrName; if ((ackFlags != 0) && (ackFlags != SA_LOG_RECORD_WRITE_ACK)) { TRACE("SA_AIS_ERR_BAD_FLAGS=> ackFlags"); @@ -1144,7 +1130,7 @@ SaAisErrorT saLogWriteLogAsync(SaLogStre * logSvcUsrName from environment variable SA_AMF_COMPONENT_NAME */ SaTimeT logTimeStamp; - ais_rc = handle_log_record(logRecord, &logSvcUsrName, write_param, &logTimeStamp); + ais_rc = handle_log_record(logRecord, logSvcUsrName, write_param, &logTimeStamp); if (ais_rc != SA_AIS_OK) { TRACE("%s: Validate Log record Fail", __FUNCTION__); goto done; @@ -1163,7 +1149,7 @@ SaAisErrorT saLogWriteLogAsync(SaLogStre if (logRecord->logBuffer != NULL && logRecord->logBuffer->logBuf != NULL) { SaSizeT size = logRecord->logBuffer->logBufSize; - if (is_well_know_stream((const char*)lstr_hdl_rec->log_stream_name.value) == true) { + if (is_well_know_stream(lstr_hdl_rec->log_stream_name) == true) { bool sizeOver = size > strlen((char *)logRecord->logBuffer->logBuf) + 1; /* Prevent log client accidently assign too big number to logBufSize. */ if (sizeOver == true) { diff --git a/osaf/libs/agents/saf/lga/lga_mds.c b/osaf/libs/agents/saf/lga/lga_mds.c --- a/osaf/libs/agents/saf/lga/lga_mds.c +++ b/osaf/libs/agents/saf/lga/lga_mds.c @@ -19,6 +19,8 @@ #include <saf_error.h> #include "lga.h" #include "lga_state.h" +#include "osaf_extended_name.h" + static MDS_CLIENT_MSG_FORMAT_VER LGA_WRT_LGS_MSG_FMT_ARRAY[LGA_WRT_LGS_SUBPART_VER_RANGE] = { @@ -126,14 +128,17 @@ static uint32_t lga_enc_lstr_open_sync_m TRACE("p8 NULL!!!"); return 0; } + + SaConstStringT value = osaf_extended_name_borrow(¶m->lstr_name); + size_t length = strlen(value); ncs_encode_32bit(&p8, param->client_id); - ncs_encode_16bit(&p8, param->lstr_name.length); + ncs_encode_16bit(&p8, length); ncs_enc_claim_space(uba, 6); total_bytes += 6; /* Encode log stream name */ - ncs_encode_n_octets_in_uba(uba, param->lstr_name.value, (uint32_t)param->lstr_name.length); - total_bytes += (uint32_t)param->lstr_name.length; + ncs_encode_n_octets_in_uba(uba, (uint8_t *)value, (uint32_t)length); + total_bytes += (uint32_t) length; /* Encode logFileName if initiated */ p8 = ncs_enc_reserve_space(uba, 2); @@ -277,6 +282,96 @@ static uint32_t lga_enc_lstr_close_msg(N return total_bytes; } +static uint32_t lga_enc_write_ntf_header(NCS_UBAID *uba, const SaLogNtfLogHeaderT *ntfLogH) +{ + uint8_t *p8; + uint32_t total_bytes = 0; + + p8 = ncs_enc_reserve_space(uba, 14); + if (!p8) { + TRACE("Could not reserve space"); + return 0; + } + ncs_encode_64bit(&p8, ntfLogH->notificationId); + ncs_encode_32bit(&p8, (uint32_t)ntfLogH->eventType); + + SaConstStringT value = osaf_extended_name_borrow(ntfLogH->notificationObject); + size_t length = strlen(value); + + ncs_encode_16bit(&p8, length); + ncs_enc_claim_space(uba, 14); + total_bytes += 14; + + ncs_encode_n_octets_in_uba(uba, (uint8_t *)value, (uint32_t)length); + total_bytes += (uint32_t)length; + + p8 = ncs_enc_reserve_space(uba, 2); + if (!p8) { + TRACE("Could not reserve space"); + return 0; + } + + SaConstStringT notifObj = osaf_extended_name_borrow(ntfLogH->notifyingObject); + size_t notifLength = strlen(notifObj); + ncs_encode_16bit(&p8, notifLength); + ncs_enc_claim_space(uba, 2); + total_bytes += 2; + + ncs_encode_n_octets_in_uba(uba, (uint8_t *)notifObj, (uint32_t)notifLength); + total_bytes += (uint32_t)notifLength; + + p8 = ncs_enc_reserve_space(uba, 16); + if (!p8) { + TRACE("Could not reserve space"); + return 0; + } + ncs_encode_32bit(&p8, ntfLogH->notificationClassId->vendorId); + ncs_encode_16bit(&p8, ntfLogH->notificationClassId->majorId); + ncs_encode_16bit(&p8, ntfLogH->notificationClassId->minorId); + ncs_encode_64bit(&p8, ntfLogH->eventTime); + ncs_enc_claim_space(uba, 16); + total_bytes += 16; + + return total_bytes; +} + +static uint32_t lga_enc_write_gen_header(NCS_UBAID *uba, + const lgsv_write_log_async_req_t *param, + const SaLogGenericLogHeaderT *genLogH) +{ + uint8_t *p8; + uint32_t total_bytes = 0; + + p8 = ncs_enc_reserve_space(uba, 10); + if (!p8) { + TRACE("Could not reserve space"); + return 0; + } + ncs_encode_32bit(&p8, 0); + ncs_encode_16bit(&p8, 0); + ncs_encode_16bit(&p8, 0); + + SaConstStringT usrName = osaf_extended_name_borrow(param->logSvcUsrName); + size_t nameLength = strlen(usrName) + 1; + + ncs_encode_16bit(&p8, nameLength); + ncs_enc_claim_space(uba, 10); + total_bytes += 10; + + ncs_encode_n_octets_in_uba(uba, (uint8_t *)usrName, (uint32_t)nameLength); + total_bytes += (uint32_t)nameLength; + + p8 = ncs_enc_reserve_space(uba, 2); + if (!p8) { + TRACE("Could not reserve space"); + return 0; + } + ncs_encode_16bit(&p8, genLogH->logSeverity); + total_bytes += 2; + + return total_bytes; +} + /**************************************************************************** Name : lga_enc_write_log_async_msg @@ -323,77 +418,24 @@ static uint32_t lga_enc_write_log_async_ total_bytes += 12; /* Alarm and application streams so far. */ - + uint32_t bytecount = 0; switch (param->logRecord->logHdrType) { case SA_LOG_NTF_HEADER: ntfLogH = ¶m->logRecord->logHeader.ntfHdr; - p8 = ncs_enc_reserve_space(uba, 14); - if (!p8) { - TRACE("Could not reserve space"); - return 0; - } - ncs_encode_64bit(&p8, ntfLogH->notificationId); - ncs_encode_32bit(&p8, (uint32_t)ntfLogH->eventType); - ncs_encode_16bit(&p8, ntfLogH->notificationObject->length); - ncs_enc_claim_space(uba, 14); - total_bytes += 14; - ncs_encode_n_octets_in_uba(uba, - ntfLogH->notificationObject->value, - (uint32_t)ntfLogH->notificationObject->length); - total_bytes += ntfLogH->notificationObject->length; + bytecount = lga_enc_write_ntf_header(uba, ntfLogH); + if (bytecount == 0) return 0; - p8 = ncs_enc_reserve_space(uba, 2); - if (!p8) { - TRACE("Could not reserve space"); - return 0; - } - ncs_encode_16bit(&p8, ntfLogH->notifyingObject->length); - ncs_enc_claim_space(uba, 2); - total_bytes += 2; - - ncs_encode_n_octets_in_uba(uba, ntfLogH->notifyingObject->value, ntfLogH->notifyingObject->length); - total_bytes += ntfLogH->notifyingObject->length; - - p8 = ncs_enc_reserve_space(uba, 16); - if (!p8) { - TRACE("Could not reserve space"); - return 0; - } - ncs_encode_32bit(&p8, ntfLogH->notificationClassId->vendorId); - ncs_encode_16bit(&p8, ntfLogH->notificationClassId->majorId); - ncs_encode_16bit(&p8, ntfLogH->notificationClassId->minorId); - ncs_encode_64bit(&p8, ntfLogH->eventTime); - ncs_enc_claim_space(uba, 16); - total_bytes += 16; + total_bytes += bytecount; break; case SA_LOG_GENERIC_HEADER: genLogH = ¶m->logRecord->logHeader.genericHdr; - p8 = ncs_enc_reserve_space(uba, 10); - if (!p8) { - TRACE("Could not reserve space"); - return 0; - } - ncs_encode_32bit(&p8, 0); - ncs_encode_16bit(&p8, 0); - ncs_encode_16bit(&p8, 0); - ncs_encode_16bit(&p8, param->logSvcUsrName->length); - ncs_enc_claim_space(uba, 10); - total_bytes += 10; - ncs_encode_n_octets_in_uba(uba, - (uint8_t *)param->logSvcUsrName->value, (uint32_t)param->logSvcUsrName->length); - total_bytes += param->logSvcUsrName->length; + bytecount = lga_enc_write_gen_header(uba, param, genLogH); + if (bytecount == 0) return 0; - p8 = ncs_enc_reserve_space(uba, 2); - if (!p8) { - TRACE("Could not reserve space"); - return 0; - } - ncs_encode_16bit(&p8, genLogH->logSeverity); - total_bytes += 2; - + total_bytes += bytecount; break; default: diff --git a/osaf/libs/agents/saf/lga/lga_state.c b/osaf/libs/agents/saf/lga/lga_state.c --- a/osaf/libs/agents/saf/lga/lga_state.c +++ b/osaf/libs/agents/saf/lga/lga_state.c @@ -24,6 +24,7 @@ #include <osaf_time.h> #include <saf_error.h> +#include "osaf_extended_name.h" /*** * Common data */ @@ -137,8 +138,10 @@ static int send_stream_open_msg(uint32_t const uint32_t sleep_delay_ms = 100; TRACE_ENTER(); + osafassert(p_stream->log_stream_name != NULL && "log_stream_name is NULL"); + TRACE("\t log_stream_name \"%s\", lgs_client_id=%d", - p_stream->log_stream_name.value, p_client->lgs_client_id); + p_stream->log_stream_name, p_client->lgs_client_id); /* Populate a stream open message to the LGS */ @@ -147,7 +150,7 @@ static int send_stream_open_msg(uint32_t /* Set the open parameters to open a stream for recovery */ open_param->client_id = p_client->lgs_client_id; - open_param->lstr_name = p_stream->log_stream_name; + osaf_extended_name_lend(p_stream->log_stream_name, &open_param->lstr_name); open_param->logFileFmt = NULL; open_param->logFileFmtLength = 0; open_param->maxLogFileSize = 0; diff --git a/osaf/libs/agents/saf/lga/lga_util.c b/osaf/libs/agents/saf/lga/lga_util.c --- a/osaf/libs/agents/saf/lga/lga_util.c +++ b/osaf/libs/agents/saf/lga/lga_util.c @@ -20,6 +20,7 @@ #include "lga.h" #include "osaf_poll.h" #include "lga_state.h" +#include "osaf_extended_name.h" /* Variables used during startup/shutdown only */ static pthread_mutex_t lga_lock = PTHREAD_MUTEX_INITIALIZER; @@ -125,10 +126,17 @@ static void lga_log_stream_hdl_rec_list_ lga_log_stream_hdl_rec_t *lstr_hdl; TRACE_ENTER(); while ((lstr_hdl = *plstr_hdl) != NULL) { + TRACE("%s stream \"%s\", hdl = %d",__FUNCTION__, lstr_hdl->log_stream_name != NULL ? + (lstr_hdl->log_stream_name) : ("NULL"), lstr_hdl->log_stream_hdl); *plstr_hdl = lstr_hdl->next; - TRACE("%s stream \"%s\", hdl = %d",__FUNCTION__, - lstr_hdl->log_stream_name.value, lstr_hdl->log_stream_hdl); ncshm_destroy_hdl(NCS_SERVICE_ID_LGA, lstr_hdl->log_stream_hdl); + + /* Check NULL to avoid the case: initialize -> finalize */ + if (lstr_hdl->log_stream_name != NULL) { + free(lstr_hdl->log_stream_name); + lstr_hdl->log_stream_name = NULL; + } + free(lstr_hdl); lstr_hdl = NULL; } @@ -503,10 +511,15 @@ uint32_t lga_log_stream_hdl_rec_del(lga_ lga_log_stream_hdl_rec_t *list_iter = *list_head; /* If the to be removed record is the first record */ - if (list_iter == rm_node) { + if (rm_node != NULL && list_iter == rm_node) { *list_head = rm_node->next; /** remove the association with hdl-mngr **/ + if (rm_node->log_stream_name != NULL) { + free(rm_node->log_stream_name); + rm_node->log_stream_name = NULL; + } + ncshm_give_hdl(rm_node->log_stream_hdl); ncshm_destroy_hdl(NCS_SERVICE_ID_LGA, rm_node->log_stream_hdl); free(rm_node); @@ -519,6 +532,11 @@ uint32_t lga_log_stream_hdl_rec_del(lga_ list_iter->next = rm_node->next; /** remove the association with hdl-mngr **/ + if (rm_node->log_stream_name != NULL) { + free(rm_node->log_stream_name); + rm_node->log_stream_name = NULL; + } + ncshm_give_hdl(rm_node->log_stream_hdl); ncshm_destroy_hdl(NCS_SERVICE_ID_LGA, rm_node->log_stream_hdl); free(rm_node); @@ -620,7 +638,7 @@ uint32_t lga_hdl_rec_del(lga_client_hdl_ lga_log_stream_hdl_rec_t *lga_log_stream_hdl_rec_add(lga_client_hdl_rec_t **hdl_rec, uint32_t lstr_id, uint32_t log_stream_open_flags, - const SaNameT *logStreamName, uint32_t log_header_type) + const char *logStreamName, uint32_t log_header_type) { lga_log_stream_hdl_rec_t *rec = calloc(1, sizeof(lga_log_stream_hdl_rec_t)); @@ -640,10 +658,12 @@ lga_log_stream_hdl_rec_t *lga_log_stream **/ rec->lgs_log_stream_id = lstr_id; rec->open_flags = log_stream_open_flags; - rec->log_stream_name.length = logStreamName->length; - memcpy((void *)rec->log_stream_name.value, (void *)logStreamName->value, logStreamName->length); rec->log_header_type = log_header_type; + /* This allocated memory will be freed when log stream handle is closed/finalized */ + rec->log_stream_name = calloc(1, strlen(logStreamName) + 1); + memcpy(rec->log_stream_name, logStreamName, strlen(logStreamName)); + /*** * Initiate the recovery flag * The setting means that the stream is initialized and that there is @@ -789,6 +809,23 @@ SaAisErrorT lga_hdl_cbk_dispatch(lga_cb_ return rc; } +/** + * Check if the name is valid or not. + */ +bool lga_is_extended_name_valid(const SaNameT* name) +{ + + if (name == NULL) return false; + if (osaf_is_extended_name_valid(name) == false) return false; + + SaConstStringT str = osaf_extended_name_borrow(name); + if (strlen(str) >= kOsafMaxDnLength) return false; + + return true; + +} + + /* * To enable tracing early in saLogInitialize, use a GCC constructor */ diff --git a/osaf/libs/saf/libSaLog/Makefile.am b/osaf/libs/saf/libSaLog/Makefile.am --- a/osaf/libs/saf/libSaLog/Makefile.am +++ b/osaf/libs/saf/libSaLog/Makefile.am @@ -30,6 +30,7 @@ lib_LTLIBRARIES = libSaLog.la libSaLog_la_SOURCES = libSaLog_la_CPPFLAGS = \ + -DSA_EXTENDED_NAME_SOURCE \ $(AM_CPPFLAGS) if HAVE_LD_VERSION_SCRIPT ------------------------------------------------------------------------------ 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