Hi Vu, For this patch ACK, no comments
Thanks Lennart > -----Original Message----- > From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] > Sent: den 1 juli 2016 12:42 > To: mahesh.va...@oracle.com; Lennart Lund <lennart.l...@ericsson.com> > Cc: opensaf-devel@lists.sourceforge.net > Subject: [PATCH 2 of 4] log: update LOG agent to support Long DN & RDN > [#1315] > > 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 ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel