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(&param->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 = &param->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 = &param->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

Reply via email to