osaf/services/saf/logsv/lgs/Makefile.am     |    1 +
 osaf/services/saf/logsv/lgs/lgs.h           |    4 +-
 osaf/services/saf/logsv/lgs/lgs_amf.cc      |   14 +-
 osaf/services/saf/logsv/lgs/lgs_config.cc   |   30 +-
 osaf/services/saf/logsv/lgs/lgs_evt.cc      |   77 ++++--
 osaf/services/saf/logsv/lgs/lgs_filehdl.cc  |   12 +-
 osaf/services/saf/logsv/lgs/lgs_fmt.cc      |   41 ++-
 osaf/services/saf/logsv/lgs/lgs_imm.cc      |  256 ++++++++++-----------
 osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc |   12 +-
 osaf/services/saf/logsv/lgs/lgs_main.cc     |    7 +-
 osaf/services/saf/logsv/lgs/lgs_mbcsv.cc    |   74 +++--
 osaf/services/saf/logsv/lgs/lgs_mds.cc      |  296 ++++++++++++++++---------
 osaf/services/saf/logsv/lgs/lgs_recov.cc    |   44 +--
 osaf/services/saf/logsv/lgs/lgs_recov.h     |    8 +-
 osaf/services/saf/logsv/lgs/lgs_stream.cc   |  322 +++++++++------------------
 osaf/services/saf/logsv/lgs/lgs_stream.h    |   18 +-
 osaf/services/saf/logsv/lgs/lgs_util.cc     |   25 ++-
 osaf/services/saf/logsv/lgs/lgs_util.h      |    2 +
 18 files changed, 630 insertions(+), 613 deletions(-)


Major change overview:
1) Replace all internal SaNameT with C/C++ strings
2) Remove NCS_PATRICIA_TREE used to hold stream DNs,
   Using the existing database `stream_array` instead.
3) Change a bit in `checkFieldSize()/lgs_fmt`,
   check `numOfDigits` agains number of digits of the constant
   SA_LOG_MAX_RECORD_SIZE

diff --git a/osaf/services/saf/logsv/lgs/Makefile.am 
b/osaf/services/saf/logsv/lgs/Makefile.am
--- a/osaf/services/saf/logsv/lgs/Makefile.am
+++ b/osaf/services/saf/logsv/lgs/Makefile.am
@@ -45,6 +45,7 @@ osaf_execbin_PROGRAMS = osaflogd
 osaflogd_CXXFLAGS = $(AM_CXXFLAGS)
 
 osaflogd_CPPFLAGS = \
+       -DSA_EXTENDED_NAME_SOURCE \
        $(AM_CPPFLAGS) \
        -I$(top_srcdir)/osaf/libs/common/logsv/include \
        -I$(top_srcdir)/osaf/libs/common/immsv/include
diff --git a/osaf/services/saf/logsv/lgs/lgs.h 
b/osaf/services/saf/logsv/lgs/lgs.h
--- a/osaf/services/saf/logsv/lgs/lgs.h
+++ b/osaf/services/saf/logsv/lgs/lgs.h
@@ -123,11 +123,11 @@ extern  SaAisErrorT lgs_imm_init_configS
 
 // Functions for recovery handling
 void lgs_cleanup_abandoned_streams();
-void lgs_delete_one_stream_object(char *name_str);
+void lgs_delete_one_stream_object(const std::string &name_str);
 void lgs_search_stream_objects();
 SaUint32T *lgs_get_scAbsenceAllowed_attr(SaUint32T *attr_val);
 int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out,
-                          char *object_name,
+                          const std::string &object_name,
                           SaImmHandleT *immOmHandle);
 int lgs_free_streamobj_attr(SaImmHandleT immHandle);
 
diff --git a/osaf/services/saf/logsv/lgs/lgs_amf.cc 
b/osaf/services/saf/logsv/lgs/lgs_amf.cc
--- a/osaf/services/saf/logsv/lgs/lgs_amf.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_amf.cc
@@ -27,13 +27,13 @@
 static void close_all_files()
 {
        log_stream_t *stream;
-
-       stream = log_stream_getnext_by_name(NULL);
+       int num = get_number_of_streams();
+       stream = log_stream_get_by_id(--num);
        while (stream != NULL) {
                if (log_stream_file_close(stream) != 0)
-                       LOG_WA("Could not close file for stream %s", 
stream->name);
+                       LOG_WA("Could not close file for stream %s", 
stream->name.c_str());
 
-               stream = log_stream_getnext_by_name(stream->name);
+               stream = log_stream_get_by_id(--num);
        }
 }
 
@@ -54,6 +54,7 @@ static SaAisErrorT amf_active_state_hand
 {
        log_stream_t *stream;
        SaAisErrorT error = SA_AIS_OK;
+       int num;
 
        TRACE_ENTER2("HA ACTIVE request");
 
@@ -67,12 +68,13 @@ static SaAisErrorT amf_active_state_hand
        lgs_start_gcfg_applier();
 
        /* check existing streams */
-       stream = log_stream_getnext_by_name(NULL);
+       num = get_number_of_streams();
+       stream = log_stream_get_by_id(--num);
        if (!stream)
                LOG_ER("No streams exist!");
        while (stream != NULL) {
                *stream->p_fd = -1; /* First Initialize fd */
-               stream = log_stream_getnext_by_name(stream->name);
+               stream = log_stream_get_by_id(--num);
        }
 
 done:
diff --git a/osaf/services/saf/logsv/lgs/lgs_config.cc 
b/osaf/services/saf/logsv/lgs/lgs_config.cc
--- a/osaf/services/saf/logsv/lgs/lgs_config.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_config.cc
@@ -464,6 +464,7 @@ int lgs_cfg_verify_root_dir(const std::s
        int rc = 0;
        log_stream_t *stream = NULL;
        size_t n = root_str_in.size();
+       int num;
 
        if (n > PATH_MAX) {
                LOG_NO("verify_root_dir Fail. Path > PATH_MAX");
@@ -475,7 +476,8 @@ int lgs_cfg_verify_root_dir(const std::s
         * Make sure that the path /rootPath/streamPath/<fileName><tail>
         * must not be larger than PATH_MAX.
         */
-       stream = log_stream_getnext_by_name(NULL);
+       num = get_number_of_streams();
+       stream = log_stream_get_by_id(--num);
        while (stream != NULL) {
                if (lgs_is_valid_pathlength(stream->pathName, stream->fileName,
                                                                        
root_str_in) == false) {
@@ -483,7 +485,8 @@ int lgs_cfg_verify_root_dir(const std::s
                        rc = -1;
                        goto done;
                }
-               stream = log_stream_getnext_by_name(stream->name);
+
+               stream = log_stream_get_by_id(--num);
        }
 
        if (lgs_path_is_writeable_dir_h(root_str_in) == false) {
@@ -785,7 +788,6 @@ static int verify_all_init()
  */
 static void read_logsv_config_obj_2() {
        SaImmHandleT omHandle;
-       SaNameT objectName;
        SaImmAccessorHandleT accessorHandle;
        SaImmAttrValuesT_2 *attribute;
        SaImmAttrValuesT_2 **attributes;
@@ -808,18 +810,15 @@ static void read_logsv_config_obj_2() {
                osaf_abort(0);
        }
 
-       n = snprintf((char *) objectName.value, SA_MAX_NAME_LENGTH, "%s",
-                       LGS_IMM_LOG_CONFIGURATION);
-       if (n >= SA_MAX_NAME_LENGTH) {
-               LOG_ER("%s: Fail Object name > SA_MAX_NAME_LENGTH", 
__FUNCTION__);
-               osaf_abort(0); /* Should never happen */
-       }
-       objectName.length = strlen((char *) objectName.value);
+       SaConstStringT objectName = LGS_IMM_LOG_CONFIGURATION;
+
+       SaNameT tmpObjName;
+       osaf_extended_name_lend(objectName, &tmpObjName);
 
        /* Get all attributes of the object */
        if ((om_rc = immutil_saImmOmAccessorGet_2(
                     accessorHandle,
-                    &objectName,
+                    &tmpObjName,
                     NULL,
                     &attributes)) != SA_AIS_OK) {
                LOG_NO("%s immutil_saImmOmAccessorGet_2 Fail: %s",
@@ -1396,15 +1395,14 @@ void conf_runtime_obj_create(SaImmOiHand
                NULL
        };
 
-       SaNameT parent_name, *parent_name_p;
-       strcpy((char *) parent_name.value, "safApp=safLogService");
-       parent_name.length = strlen((char *) parent_name.value);
-       parent_name_p = &parent_name;
+       SaNameT parent_name_p;
+       SaConstStringT parent_name = "safApp=safLogService";
+       osaf_extended_name_lend(parent_name, &parent_name_p);
 
        rc = immutil_saImmOiRtObjectCreate_2(
                immOiHandle,
                const_cast<SaImmClassNameT>("OpenSafLogCurrentConfig"),
-               parent_name_p,
+               &parent_name_p,
                attrValues);
 
        if (rc == SA_AIS_ERR_EXIST) {
diff --git a/osaf/services/saf/logsv/lgs/lgs_evt.cc 
b/osaf/services/saf/logsv/lgs/lgs_evt.cc
--- a/osaf/services/saf/logsv/lgs/lgs_evt.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_evt.cc
@@ -23,6 +23,7 @@
 #include "lgs_mbcsv_v2.h"
 #include "lgs_recov.h"
 #include "lgs_imm_gcfg.h"
+#include "osaf_extended_name.h"
 
 /* Macro to validate the version */
 #define m_LOG_VER_IS_VALID(ver)   \
@@ -542,12 +543,13 @@ static uint32_t proc_rda_cb_msg(lgsv_lgs
                lgs_process_lga_down_list();
 
                /* Check existing streams */
-               stream = log_stream_getnext_by_name(NULL);
+               int num = get_number_of_streams();
+               stream = log_stream_get_by_id(--num);
                if (!stream)
                        LOG_ER("No streams exist!");
                while (stream != NULL) {
-                       *stream->p_fd = -1; /* Initialize fd */ 
-                       stream = log_stream_getnext_by_name(stream->name);
+                       *stream->p_fd = -1; /* Initialize fd */
+                       stream = log_stream_get_by_id(--num);
                }
        }
 
@@ -764,7 +766,7 @@ static uint32_t lgs_ckpt_stream_open(lgs
                ckpt_rec_open_ptr->logPath = const_cast<char 
*>(logStream->pathName.c_str());
                ckpt_rec_open_ptr->logFileCurrent = const_cast<char 
*>(logStream->logFileCurrent.c_str());
                ckpt_rec_open_ptr->fileFmt = logStream->logFileFormat;
-               ckpt_rec_open_ptr->logStreamName = logStream->name;
+               ckpt_rec_open_ptr->logStreamName = const_cast<char 
*>(logStream->name.c_str());
 
                ckpt_rec_open_ptr->maxFileSize = logStream->maxLogFileSize;
                ckpt_rec_open_ptr->maxLogRecordSize = 
logStream->fixedLogRecordSize;
@@ -803,11 +805,13 @@ SaAisErrorT create_new_app_stream(
        log_stream_t *stream;
        SaBoolT twelveHourModeFlag;
        SaUint32T logMaxLogrecsize_conf = 0;
+       SaConstStringT str_name;
+       int num, err = 0;
 
        TRACE_ENTER();
 
-       if (open_sync_param->lstr_name.length > SA_MAX_NAME_LENGTH) {
-               TRACE("Name too long");
+       if (lgs_is_extended_name_valid(&open_sync_param->lstr_name) == false) {
+               TRACE("SaNameT is invalid");
                rc = SA_AIS_ERR_INVALID_PARAM;
                goto done;
        }
@@ -863,7 +867,8 @@ SaAisErrorT create_new_app_stream(
        }
 
        /* Verify that path and file are unique */
-       stream = log_stream_getnext_by_name(NULL);
+       num = get_number_of_streams();
+       stream = log_stream_get_by_id(--num);
        while (stream != NULL) {
                if ((stream->fileName == open_sync_param->logFileName) &&
                    (stream->pathName == open_sync_param->logFilePathName)) {
@@ -871,12 +876,13 @@ SaAisErrorT create_new_app_stream(
                        rc = SA_AIS_ERR_INVALID_PARAM;
                        goto done;
                }
-               stream = log_stream_getnext_by_name(stream->name);
+               stream = log_stream_get_by_id(--num);
        }
 
        /* Verify that the name seems to be a DN */
-       if (strncmp("safLgStr=", (char *)open_sync_param->lstr_name.value, 
sizeof("safLgStr=") != 0)) {
-               TRACE("'%s' is not a valid stream name => invalid param", 
open_sync_param->lstr_name.value);
+       str_name = osaf_extended_name_borrow(&open_sync_param->lstr_name);
+       if (strncmp("safLgStr=", str_name, sizeof("safLgStr=") != 0)) {
+               TRACE("'%s' is not a valid stream name => invalid param", 
str_name);
                rc = SA_AIS_ERR_INVALID_PARAM;
                goto done;
        }
@@ -891,25 +897,34 @@ SaAisErrorT create_new_app_stream(
                goto done;
        }
 
-       stream = log_stream_new_1(&open_sync_param->lstr_name,
-                               open_sync_param->logFileName,
-                               open_sync_param->logFilePathName,
-                               open_sync_param->maxLogFileSize,
-                               open_sync_param->maxLogRecordSize,
-                               open_sync_param->logFileFullAction,
-                               open_sync_param->maxFilesRotated,
-                               open_sync_param->logFileFmt,
-                               STREAM_TYPE_APPLICATION,
-                               STREAM_NEW,
-                               twelveHourModeFlag,
-                               0,
-                               creationFlag);
+       *o_stream = log_stream_new(str_name, STREAM_NEW);
+       if (*o_stream == NULL) {
+               rc = SA_AIS_ERR_NO_MEMORY;
+               goto done;
 
-       if (stream == NULL) {
+       }
+
+       err = lgs_populate_log_stream(
+               open_sync_param->logFileName,
+               open_sync_param->logFilePathName,
+               open_sync_param->maxLogFileSize,
+               open_sync_param->maxLogRecordSize,
+               open_sync_param->logFileFullAction,
+               open_sync_param->maxFilesRotated,
+               open_sync_param->logFileFmt,
+               STREAM_TYPE_APPLICATION,
+               twelveHourModeFlag,
+               0,
+               *o_stream // output
+               );
+       if (err == -1) {
+               log_stream_delete(o_stream);
                rc = SA_AIS_ERR_NO_MEMORY;
                goto done;
        }
-       *o_stream = stream;
+
+       rc = lgs_create_rt_appstream(*o_stream);
+       if (rc != SA_AIS_OK) log_stream_delete(o_stream);
 
  done:
        TRACE_LEAVE();
@@ -926,7 +941,7 @@ static SaAisErrorT file_attribute_cmp(lg
 {
        SaAisErrorT rs = SA_AIS_OK;
 
-       TRACE_ENTER2("Stream: %s", applicationStream->name);
+       TRACE_ENTER2("Stream: %s", applicationStream->name.c_str());
 
        if (open_sync_param->maxLogFileSize != 
applicationStream->maxLogFileSize ||
            open_sync_param->maxLogRecordSize != 
applicationStream->fixedLogRecordSize ||
@@ -983,15 +998,14 @@ static uint32_t proc_stream_open_msg(lgs
        lgsv_msg_t msg;
        lgsv_stream_open_req_t *open_sync_param = 
&(evt->info.msg.info.api_info.param.lstr_open_sync);
        log_stream_t *logStream;
-       char name[SA_MAX_NAME_LENGTH + 1];
+       std::string name;
        time_t file_closetime = 0;
        int i_rc = 0;
 
        /* Create null-terminated stream name */
-       memcpy(name, open_sync_param->lstr_name.value, 
open_sync_param->lstr_name.length);
-       memset(&name[open_sync_param->lstr_name.length], 0, SA_MAX_NAME_LENGTH 
+ 1 - open_sync_param->lstr_name.length);
+       name = osaf_extended_name_borrow(&open_sync_param->lstr_name);
 
-       TRACE_ENTER2("stream '%s', client_id %u", name, 
open_sync_param->client_id);
+       TRACE_ENTER2("stream '%s', client_id %u", name.c_str(), 
open_sync_param->client_id);
 
        logStream = log_stream_get_by_name(name);
        if (logStream != NULL) {
@@ -1036,7 +1050,7 @@ static uint32_t proc_stream_open_msg(lgs
                                        ais_rv = SA_AIS_ERR_NOT_EXIST;
                                        goto snd_rsp;
                                }
-                               TRACE("%s Stream %s is recovered", 
__FUNCTION__, name);
+                               TRACE("%s Stream %s is recovered", 
__FUNCTION__, name.c_str());
                                log_stream_print(logStream); /* TRACE */
                                lstr_id = logStream->streamId;
                                goto snd_rsp;
@@ -1112,6 +1126,7 @@ static uint32_t proc_stream_open_msg(lgs
        free(open_sync_param->logFileFmt);
        free(open_sync_param->logFilePathName);
        free(open_sync_param->logFileName);
+       osaf_extended_name_free(&open_sync_param->lstr_name);
 
        TRACE_LEAVE();
        return rc;
diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc 
b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc
--- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc
@@ -539,17 +539,17 @@ static int check_oldest(char *line, char
        int date, time, c, d;
        date = time = c = d = 0;
        int len = 0;
-       char name_format[SA_MAX_NAME_LENGTH];
+       std::string name_format;
        char time_stamps[] = "_%d_%d_%d_%d.log";
 
        len = strlen(time_stamps);
        len += fname_prefix_size;
 
-       strncpy(name_format, fname_prefix, fname_prefix_size);
-       name_format[fname_prefix_size] = '\0';
-       TRACE_3("fname: %s", name_format);
-       strncat(name_format, time_stamps, SA_MAX_NAME_LENGTH-1);
-       if (sscanf(line, name_format, &date, &time, &c, &d) >= 2) {
+       name_format = std::string(fname_prefix);
+       TRACE_3("fname: %s", name_format.c_str());
+
+       name_format = name_format + time_stamps;
+       if (sscanf(line, name_format.c_str(), &date, &time, &c, &d) >= 2) {
                TRACE_3("%s: line: arg 1: %d 2: %d 3: %d 4: %d ok", 
__FUNCTION__,
                                date, time, c, d);
                if (date < *old_date || *old_date == -1) {
diff --git a/osaf/services/saf/logsv/lgs/lgs_fmt.cc 
b/osaf/services/saf/logsv/lgs/lgs_fmt.cc
--- a/osaf/services/saf/logsv/lgs/lgs_fmt.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_fmt.cc
@@ -24,6 +24,7 @@
 
 #include "lgs_fmt.h"
 #include "lgs.h"
+#include "osaf_extended_name.h"
 
 /* Number of seconds per an hour/minute */
 #define SECOND_PER_HOUR  3600L
@@ -40,19 +41,23 @@
 static SaInt32T checkFieldSize(SaStringT inputString, SaUint16T *numOfDigits)
 {
        SaInt32T result = 0;
-       SaInt8T dest[SA_MAX_NAME_LENGTH];
+       std::string dest;
        char **endptr = NULL;
+       int maxDigitsNum = std::to_string(SA_LOG_MAX_RECORD_SIZE).size() + 1;
 
-       (void)strcpy(dest, ""); /* Init dest */
        *numOfDigits = 0;
+       dest.clear();
 
        /* Build string of characters */
-       while ((isdigit(*inputString) != 0) && (*numOfDigits < 
SA_MAX_NAME_LENGTH)) {
+       while ((isdigit(*inputString) != 0) && (*numOfDigits < maxDigitsNum)) {
+               char c = *inputString;
+               dest += c;
+               inputString++;
                *numOfDigits = *numOfDigits + 1;
-               (void)strncat(dest, inputString++, sizeof(SaInt8T));
        }
 
-       result = strtol(dest, endptr, 0);
+       result = strtol(dest.c_str(), endptr, 0);
+
        return result;
 }
 
@@ -1048,12 +1053,11 @@ static int extractNotificationField(char
                fieldSize = checkFieldSize(fmtExpPtr, &fieldSizeOffset);
                if (fieldSize == 0) {
                        characters = snprintf(dest, dest_size, "%s",
-                                               
logRecord->logHeader.ntfHdr.notificationObject->value);
+                                             
osaf_extended_name_borrow(logRecord->logHeader.ntfHdr.notificationObject));
                } else {
-                       characters = snprintf(dest, dest_size,
-                                               "%*.*s",
-                                               (int) -fieldSize,
-                                               (int) fieldSize, 
logRecord->logHeader.ntfHdr.notificationObject->value);
+                       characters = snprintf(dest, dest_size, "%*.*s", (int) 
-fieldSize,
+                                             (int) fieldSize,
+                                             
osaf_extended_name_borrow(logRecord->logHeader.ntfHdr.notificationObject));
                }
 
                *fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset;
@@ -1063,13 +1067,12 @@ static int extractNotificationField(char
                /* Check field size and trunkate alternative pad with blanks */
                fieldSize = checkFieldSize(fmtExpPtr, &fieldSizeOffset);
                if (fieldSize == 0) {
-                       characters = snprintf(dest,
-                                               dest_size, "%s", 
logRecord->logHeader.ntfHdr.notifyingObject->value);
+                       characters = snprintf(dest, dest_size, "%s",
+                                             
osaf_extended_name_borrow(logRecord->logHeader.ntfHdr.notifyingObject));
                } else {
-                       characters = snprintf(dest, dest_size,
-                                               "%*.*s",
-                                               (int) -fieldSize,
-                                               (int) fieldSize, 
logRecord->logHeader.ntfHdr.notifyingObject->value);
+                       characters = snprintf(dest, dest_size, "%*.*s", (int) 
-fieldSize,
+                                             (int) fieldSize,
+                                             
osaf_extended_name_borrow(logRecord->logHeader.ntfHdr.notifyingObject));
                }
 
                *fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset;
@@ -1114,10 +1117,12 @@ static int extractSystemField(char *dest
                        characters = snprintf(dest, dest_size,
                                              "%*.*s",
                                              (int)-fieldSize,
-                                             (int)fieldSize, 
logRecord->logHeader.genericHdr.logSvcUsrName->value);
+                                             (int)fieldSize,
+                                             
osaf_extended_name_borrow(logRecord->logHeader.genericHdr.logSvcUsrName));
                } else {
                        characters = snprintf(dest, dest_size,
-                                             "%s", 
logRecord->logHeader.genericHdr.logSvcUsrName->value);
+                                             "%s",
+                                             
osaf_extended_name_borrow(logRecord->logHeader.genericHdr.logSvcUsrName));
                }
                *fmtExpPtrOffset = *fmtExpPtrOffset + fieldSizeOffset;
                break;
diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.cc 
b/osaf/services/saf/logsv/lgs/lgs_imm.cc
--- a/osaf/services/saf/logsv/lgs/lgs_imm.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_imm.cc
@@ -248,7 +248,7 @@ static uint32_t ckpt_stream_config(log_s
                ckpt_v2.header.num_ckpt_records = 1;
                ckpt_v2.header.data_len = 1;
 
-               ckpt_v2.ckpt_rec.stream_cfg.name = (char *)stream->name;
+               ckpt_v2.ckpt_rec.stream_cfg.name = const_cast<char 
*>(stream->name.c_str());
                ckpt_v2.ckpt_rec.stream_cfg.fileName = const_cast<char 
*>(stream->fileName.c_str());
                ckpt_v2.ckpt_rec.stream_cfg.pathName = const_cast<char 
*>(stream->pathName.c_str());
                ckpt_v2.ckpt_rec.stream_cfg.maxLogFileSize = 
stream->maxLogFileSize;
@@ -267,7 +267,7 @@ static uint32_t ckpt_stream_config(log_s
                ckpt_v1.header.num_ckpt_records = 1;
                ckpt_v1.header.data_len = 1;
 
-               ckpt_v1.ckpt_rec.stream_cfg.name = (char *)stream->name;
+               ckpt_v1.ckpt_rec.stream_cfg.name = const_cast<char 
*>(stream->name.c_str());
                ckpt_v1.ckpt_rec.stream_cfg.fileName = const_cast<char 
*>(stream->fileName.c_str());
                ckpt_v1.ckpt_rec.stream_cfg.pathName = const_cast<char 
*>(stream->pathName.c_str());
                ckpt_v1.ckpt_rec.stream_cfg.maxLogFileSize = 
stream->maxLogFileSize;
@@ -389,17 +389,17 @@ static void adminOperationCallback(SaImm
        const SaImmAdminOperationParamsT_2 *param = params[0];
        log_stream_t *stream;
        SaAisErrorT ais_rc = SA_AIS_OK;
-
-       TRACE_ENTER2("%s", objectName->value);
+       SaConstStringT objName = osaf_extended_name_borrow(objectName);
+
+       TRACE_ENTER2("%s", objName);
 
        if (lgs_cb->ha_state != SA_AMF_HA_ACTIVE) {
                LOG_ER("admin op callback in applier");
                goto done;
        }
 
-       if ((stream = log_stream_get_by_name((char *)objectName->value)) == 
NULL) {
-               report_om_error(immOiHandle, invocation, "Stream %s not found",
-                               objectName->value);
+       if ((stream = log_stream_get_by_name(objName)) == NULL) {
+               report_om_error(immOiHandle, invocation, "Stream %s not found", 
objName);
                goto done;
        }
 
@@ -467,12 +467,12 @@ static void adminOperationCallback(SaImm
                        goto done;
                }
 
-               TRACE("Changing severity for stream %s to %u", stream->name, 
severityFilter);
+               TRACE("Changing severity for stream %s to %u", 
stream->name.c_str(), severityFilter);
                stream->severityFilter = severityFilter;
 
                ais_rc = immutil_update_one_rattr(
                        immOiHandle,
-                       reinterpret_cast<const char *>(objectName->value),
+                       objName,
                        const_cast<SaImmAttrNameT>("saLogStreamSeverityFilter"),
                        SA_IMM_ATTR_SAUINT32T,
                        &stream->severityFilter);
@@ -505,8 +505,9 @@ static SaAisErrorT ccbObjectDeleteCallba
 {
        SaAisErrorT rc = SA_AIS_OK;
        struct CcbUtilCcbData *ccbUtilCcbData;
-
-       TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value);
+       SaConstStringT objName = osaf_extended_name_borrow(objectName);
+
+       TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objName);
 
        if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
                if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -530,9 +531,10 @@ static SaAisErrorT ccbObjectCreateCallba
 {
        SaAisErrorT rc = SA_AIS_OK;
        struct CcbUtilCcbData *ccbUtilCcbData;
+       SaConstStringT parName = osaf_extended_name_borrow(parentName);
 
        TRACE_ENTER2("CCB ID %llu, class '%s', parent '%s'",
-                       ccbId, className, parentName->value);
+                    ccbId, className, parName);
 
        if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
                if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -565,8 +567,9 @@ static SaAisErrorT ccbObjectModifyCallba
 {
        SaAisErrorT rc = SA_AIS_OK;
        struct CcbUtilCcbData *ccbUtilCcbData;
-
-       TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value);
+       SaConstStringT objName = osaf_extended_name_borrow(objectName);
+
+       TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objName);
 
        if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
                if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -745,8 +748,8 @@ static SaAisErrorT config_ccb_completed_
        };
 
        char oi_err_str[256];
-
-       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
opdata->objectName.value);
+       SaConstStringT objName = osaf_extended_name_borrow(&opdata->objectName);
+       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName);
 
        attrMod = opdata->param.modify.attrMods[i++];
        while (attrMod != NULL) {
@@ -765,7 +768,7 @@ static SaAisErrorT config_ccb_completed_
                         (attribute->attrValuesNumber == 0)) {
                                report_oi_error(immOiHandle, opdata->ccbId,
                                        "deletion of value is not allowed for 
attribute %s stream %s",
-                                       attribute->attrName, 
opdata->objectName.value);
+                                               attribute->attrName, objName);
                                ais_rc = SA_AIS_ERR_BAD_OPERATION;
                                goto done;
                }
@@ -1044,6 +1047,7 @@ bool chk_filepath_stream_exist(
        log_stream_t *i_stream = NULL;
        std::string i_fileName;
        std::string i_pathName;
+       int num;
        bool rc = false;
 
        TRACE_ENTER();
@@ -1093,15 +1097,17 @@ bool chk_filepath_stream_exist(
 
        /* Check if any stream has given filename and path */
        TRACE("Check if any stream has given filename and path");
-       i_stream = log_stream_getnext_by_name(NULL);
+       num = get_number_of_streams();
+       i_stream = log_stream_get_by_id(--num);
        while (i_stream != NULL) {
-               TRACE("Check stream \"%s\"", i_stream->name);
+               TRACE("Check stream \"%s\"", i_stream->name.c_str());
                if ((i_stream->fileName == i_fileName) &&
                        (i_stream->pathName == i_pathName)) {
                        rc = true;
                        break;
                }
-               i_stream = log_stream_getnext_by_name(i_stream->name);
+
+               i_stream = log_stream_get_by_id(--num);
        }
 
        TRACE_LEAVE2("rc = %d", rc);
@@ -1317,8 +1323,8 @@ static SaAisErrorT check_attr_validity(S
         */
        if (opdata->operationType == CCBUTIL_MODIFY) {
                TRACE("Validate for MODIFY");
-               stream = log_stream_get_by_name(
-                               (char *) 
opdata->param.modify.objectName->value);
+               SaConstStringT objName = 
osaf_extended_name_borrow(opdata->param.modify.objectName);
+               stream = log_stream_get_by_name(objName);
                if (stream == NULL) {
                        /* No stream to modify */
                        report_oi_error(immOiHandle, opdata->ccbId,
@@ -1687,7 +1693,7 @@ static SaAisErrorT stream_ccb_completed_
 {
        SaAisErrorT rc;
 
-       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
opdata->objectName.value);
+       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
osaf_extended_name_borrow(&opdata->objectName));
        rc = check_attr_validity(immOiHandle, opdata);
        TRACE_LEAVE2("rc = %u", rc);
        return rc;
@@ -1703,9 +1709,9 @@ static SaAisErrorT stream_ccb_completed_
 {
        SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
 
-       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
opdata->objectName.value);
-
-       const char *name = (char*) opdata->param.delete_.objectName->value;
+       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
osaf_extended_name_borrow(&opdata->objectName));
+
+       SaConstStringT name = 
osaf_extended_name_borrow(opdata->param.delete_.objectName);
        log_stream_t *stream = log_stream_get_by_name(name);
 
        if (stream != NULL) {
@@ -1728,8 +1734,7 @@ static SaAisErrorT stream_ccb_completed_
 
                rc = SA_AIS_OK;
        } else {
-               report_oi_error(immOiHandle, opdata->ccbId,
-                               "stream %s not found", name);
+               report_oi_error(immOiHandle, opdata->ccbId, "stream %s not 
found", name);
        }
 
 done:
@@ -1806,7 +1811,7 @@ static SaAisErrorT ccbCompletedCallback(
                        break;
                case CCBUTIL_DELETE:
                case CCBUTIL_MODIFY:
-                       if (!strncmp((char*)opdata->objectName.value, 
"safLgStrCfg", 11)) {
+                       if 
(!strncmp(osaf_extended_name_borrow(&opdata->objectName), "safLgStrCfg", 11)) {
                                rc = stream_ccb_completed(immOiHandle, opdata);
                        } else {
                                rc = config_ccb_completed(immOiHandle, opdata);
@@ -1854,10 +1859,12 @@ void logRootDirectory_filemove(
        TRACE_ENTER();
        log_stream_t *stream;
        std::string current_logfile;
+       int num;
 
        /* Close and rename files at current path
         */
-       stream = log_stream_getnext_by_name(NULL);
+       num = get_number_of_streams();
+       stream = log_stream_get_by_id(--num);
        while (stream != NULL) {
                TRACE("Handling file %s", stream->logFileCurrent.c_str());
 
@@ -1873,18 +1880,19 @@ void logRootDirectory_filemove(
                                old_logRootDirectory, stream, current_logfile,
                                cur_time_in) != 0) {
                        LOG_ER("Old log files could not be renamed and closed 
for stream: %s",
-                                       stream->name);
+                              stream->name.c_str());
                }
-               stream = log_stream_getnext_by_name(stream->name);
+               stream = log_stream_get_by_id(--num);
        }
 
        /* Create new files at new path
         */
-       stream = log_stream_getnext_by_name(NULL);
+       num = get_number_of_streams();
+       stream = log_stream_get_by_id(--num);
        while (stream != NULL) {
                if (lgs_create_config_file_h(new_logRootDirectory, stream) != 
0) {
                        LOG_ER("New config file could not be created for 
stream: %s",
-                                       stream->name);
+                              stream->name.c_str());
                }
 
                /* Create the new log file based on updated configuration */
@@ -1894,14 +1902,14 @@ void logRootDirectory_filemove(
                if ((*stream->p_fd = log_file_open(new_logRootDirectory,
                        stream, stream->logFileCurrent, NULL)) == -1) {
                        LOG_ER("New log file could not be created for stream: 
%s",
-                                       stream->name);
+                              stream->name.c_str());
                }
 
                /* Also update standby current file name
                 * Used if standby and configured for split file system
                 */
                stream->stb_logFileCurrent = stream->logFileCurrent;
-               stream = log_stream_getnext_by_name(stream->name);
+               stream = log_stream_get_by_id(--num);
        }
        TRACE_LEAVE();
 }
@@ -1918,6 +1926,7 @@ void logDataGroupname_fileown(const char
 {
        TRACE_ENTER();
        log_stream_t *stream;
+       int num;
 
        if (new_logDataGroupname == NULL) {
                LOG_ER("Data group is NULL");
@@ -1929,10 +1938,11 @@ void logDataGroupname_fileown(const char
                /* Not attribute values deletion
                 * Change ownership of log files to this new group
                 */
-               stream = log_stream_getnext_by_name(NULL);
+               num = get_number_of_streams();
+               stream = log_stream_get_by_id(--num);
                while (stream != NULL) {
                        lgs_own_log_files_h(stream, new_logDataGroupname);
-                       stream = log_stream_getnext_by_name(stream->name);
+                       stream = log_stream_get_by_id(--num);
                }
        }
        TRACE_LEAVE();
@@ -1993,7 +2003,7 @@ static void config_ccb_apply_modify(cons
        /* Flag set if any of the mailbox limit values have changed */
        bool mailbox_lim_upd = false;
 
-       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
opdata->objectName.value);
+       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
osaf_extended_name_borrow(&opdata->objectName));
 
        attrMod = opdata->param.modify.attrMods[i++];
        while (attrMod != NULL) {
@@ -2141,7 +2151,7 @@ static SaAisErrorT stream_create_and_con
        SaAisErrorT rc = SA_AIS_OK;
        *stream = NULL;
        int i = 0;
-       SaNameT objectName;
+       std::string objectName;
        std::string fileName;
        std::string pathName;
 
@@ -2150,16 +2160,15 @@ static SaAisErrorT stream_create_and_con
        while (ccb->param.create.attrValues[i] != NULL) {
                if (!strncmp(ccb->param.create.attrValues[i]->attrName, 
"safLgStrCfg",
                                sizeof("safLgStrCfg"))) {
-                       if (ccb->param.create.parentName->length > 0) {
-                               objectName.length = snprintf((char*) 
objectName.value, sizeof(objectName.value),
-                                               "%s,%s", *(const SaStringT*) 
ccb->param.create.attrValues[i]->attrValues[0],
-                                               
ccb->param.create.parentName->value);
+                       SaConstStringT parentName = 
osaf_extended_name_borrow(ccb->param.create.parentName);
+                       if (strlen(parentName) > 0) {
+                               objectName =  std::string(*(const SaStringT*) 
ccb->param.create.attrValues[i]->attrValues[0])
+                                       + "," + parentName ;
                        } else {
-                               objectName.length = snprintf((char*) 
objectName.value, sizeof(objectName.value),
-                                               "%s", *(const SaStringT*) 
ccb->param.create.attrValues[i]->attrValues[0]);
+                               objectName =  std::string(*(const SaStringT*) 
ccb->param.create.attrValues[i]->attrValues[0]);
                        }
 
-                       if ((*stream = log_stream_new_2(&objectName, 
STREAM_NEW)) == NULL) {
+                       if ((*stream = log_stream_new(objectName, STREAM_NEW)) 
== NULL) {
                                rc = SA_AIS_ERR_NO_MEMORY;
                                goto done;
                        }
@@ -2203,7 +2212,7 @@ static SaAisErrorT stream_create_and_con
                                SaBoolT dummy;
                                char *logFileFormat = *((char **) value);
                                if 
(!lgs_is_valid_format_expression(logFileFormat, (*stream)->streamType, &dummy)) 
{
-                                       LOG_WA("Invalid logFileFormat for 
stream %s, using default", (*stream)->name);
+                                       LOG_WA("Invalid logFileFormat for 
stream %s, using default", (*stream)->name.c_str());
                                        logFileFormat = const_cast<char 
*>(static_cast<const char *>(
                                                
lgs_cfg_get(LGS_IMM_LOG_STREAM_FILE_FORMAT)));
                                }
@@ -2236,16 +2245,16 @@ static SaAisErrorT stream_create_and_con
        }
 
        /* Update creation timestamp */
-       rc = immutil_update_one_rattr(lgs_cb->immOiHandle, 
reinterpret_cast<const char *>(objectName.value),
-                       
const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"), SA_IMM_ATTR_SATIMET,
-                       &(*stream)->creationTimeStamp);
+       rc = immutil_update_one_rattr(lgs_cb->immOiHandle, objectName.c_str(),
+                                     
const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"), SA_IMM_ATTR_SATIMET,
+                                     &(*stream)->creationTimeStamp);
        if (rc != SA_AIS_OK) {
                LOG_ER("immutil_update_one_rattr failed %s", saf_error(rc));
                osaf_abort(0);
        }
 
        done:
-       TRACE_LEAVE();
+       TRACE_LEAVE2("rc: %s", saf_error(rc));
        return rc;
 }
 
@@ -2254,7 +2263,7 @@ static void stream_ccb_apply_create(cons
        SaAisErrorT rc;
        log_stream_t *stream;
 
-       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
opdata->objectName.value);
+       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
osaf_extended_name_borrow(&opdata->objectName));
 
        if ((rc = stream_create_and_configure1(opdata, &stream)) == SA_AIS_OK) {
                log_stream_open_fileinit(stream);
@@ -2276,10 +2285,10 @@ static void stream_ccb_apply_modify(cons
        struct timespec curtime_tspec;
        std::string fileName;
        bool modify = false;
-
-       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
opdata->objectName.value);
-
-       stream = log_stream_get_by_name((char*)opdata->objectName.value);
+       SaConstStringT objName = osaf_extended_name_borrow(&opdata->objectName);
+       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName);
+
+       stream = log_stream_get_by_name(objName);
        osafassert(stream);
 
        current_logfile_name = stream->logFileCurrent;
@@ -2384,10 +2393,11 @@ static void stream_ccb_apply_delete(cons
        struct timespec closetime_tspec;
        osaf_clock_gettime(CLOCK_REALTIME, &closetime_tspec);
        time_t file_closetime = closetime_tspec.tv_sec;
-
-       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, 
opdata->objectName.value);
-
-       stream = log_stream_get_by_name((char *) opdata->objectName.value);
+       SaConstStringT objName = osaf_extended_name_borrow(&opdata->objectName);
+
+       TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, objName);
+
+       stream = log_stream_get_by_name(objName);
 
        /* Checkpoint to standby LOG server */
        ckpt_stream_close(stream, file_closetime);
@@ -2448,7 +2458,7 @@ static void ccbApplyCallback(SaImmOiHand
                        break;
                case CCBUTIL_DELETE:
                case CCBUTIL_MODIFY:
-                       if (!strncmp((char*)opdata->objectName.value, 
"safLgStrCfg", 11))
+                       if 
(!strncmp(osaf_extended_name_borrow(&opdata->objectName), "safLgStrCfg", 11))
                                stream_ccb_apply(opdata);
                        else
                                config_ccb_apply(opdata);
@@ -2495,8 +2505,8 @@ static SaAisErrorT rtAttrUpdateCallback(
        SaAisErrorT rc = SA_AIS_ERR_FAILED_OPERATION;
        SaImmAttrNameT attributeName;
        int i = 0;
-
-       TRACE_ENTER2("%s", objectName->value);
+       SaConstStringT objName = osaf_extended_name_borrow(objectName);
+       TRACE_ENTER2("%s", objName);
 
        if (lgs_cb->ha_state != SA_AMF_HA_ACTIVE) {
                LOG_ER("admin op callback in applier");
@@ -2504,17 +2514,16 @@ static SaAisErrorT rtAttrUpdateCallback(
        }
 
        /* Handle configuration runtime object */
-       if (strncmp((char *) objectName->value, LGS_CFG_RUNTIME_OBJECT,
-                       objectName->length) == 0) {
+       if (strncmp(objName, LGS_CFG_RUNTIME_OBJECT, strlen(objName)) == 0) {
                /* Handle Runtome configuration object */
                conf_runtime_obj_hdl(immOiHandle, attributeNames);
        } else {
 
                /* Handle stream object if valid
                 */
-               log_stream_t *stream = log_stream_get_by_name((char 
*)objectName->value);
+               log_stream_t *stream = log_stream_get_by_name(objName);
                if (stream == NULL) {
-                       LOG_ER("%s: stream %s not found", __FUNCTION__, 
objectName->value);
+                       LOG_ER("%s: stream %s not found", __FUNCTION__, 
objName);
                        goto done;
                }
 
@@ -2523,12 +2532,12 @@ static SaAisErrorT rtAttrUpdateCallback(
                        rc = SA_AIS_OK;
                        if (!strcmp(attributeName, "saLogStreamNumOpeners")) {
                                rc = immutil_update_one_rattr(immOiHandle,
-                                       (char *)objectName->value,
+                                       objName,
                                        attributeName, SA_IMM_ATTR_SAUINT32T,
                                        &stream->numOpeners);
                        } else if (!strcmp(attributeName, 
"logStreamDiscardedCounter")) {
                                rc = immutil_update_one_rattr(immOiHandle,
-                                       (char *) objectName->value,
+                                       objName,
                                        attributeName, SA_IMM_ATTR_SAUINT64T,
                                        &stream->filtered);
                        } else {
@@ -2562,7 +2571,7 @@ done:
  * 
  * @return SaAisErrorT
  */
-static SaAisErrorT stream_create_and_configure(const char *dn,
+static SaAisErrorT stream_create_and_configure(const std::string &dn,
                log_stream_t **in_stream, int stream_id,
                SaImmAccessorHandleT accessorHandle)
 {
@@ -2586,23 +2595,22 @@ static SaAisErrorT stream_create_and_con
                NULL
        };
 
-       TRACE_ENTER2("(%s)", dn);
-
-       strncpy((char *)objectName.value, dn, SA_MAX_NAME_LENGTH);
-       objectName.length = strlen((char *)objectName.value);
-
-       *in_stream = stream = log_stream_new_2(&objectName, stream_id);
+       TRACE_ENTER2("(%s)", dn.c_str());
+
+       osaf_extended_name_lend(dn.c_str(), &objectName);
+
+       *in_stream = stream = log_stream_new(dn, stream_id);
 
        if (stream == NULL) {
                rc = SA_AIS_ERR_NO_MEMORY;
                goto done;
        }
 
-       if (strcmp(dn, SA_LOG_STREAM_ALARM) == 0)
+       if (dn == SA_LOG_STREAM_ALARM)
                stream->streamType = STREAM_TYPE_ALARM;
-       else if (strcmp(dn , SA_LOG_STREAM_NOTIFICATION) == 0)
+       else if (dn == SA_LOG_STREAM_NOTIFICATION)
                stream->streamType = STREAM_TYPE_NOTIFICATION;
-       else if (strcmp(dn , SA_LOG_STREAM_SYSTEM) == 0)
+       else if (dn == SA_LOG_STREAM_SYSTEM)
                stream->streamType = STREAM_TYPE_SYSTEM;
        else
                stream->streamType = STREAM_TYPE_APPLICATION;
@@ -2612,7 +2620,7 @@ static SaAisErrorT stream_create_and_con
                     accessorHandle,
                     &objectName,
                     attribute_names, &attributes)) != SA_AIS_OK) {
-               LOG_ER("Configuration for %s not found: %s", objectName.value, 
saf_error(rc));
+               LOG_ER("Configuration for %s not found: %s", dn.c_str(), 
saf_error(rc));
                rc = SA_AIS_ERR_NOT_EXIST;
                goto done;
        }
@@ -2651,7 +2659,7 @@ static SaAisErrorT stream_create_and_con
                        SaBoolT dummy;
                        char *logFileFormat = *((char **)value);
                        if (!lgs_is_valid_format_expression(logFileFormat, 
stream->streamType, &dummy)) {
-                               LOG_WA("Invalid logFileFormat for stream %s, 
using default", stream->name);
+                               LOG_WA("Invalid logFileFormat for stream %s, 
using default", stream->name.c_str());
 
                                if (stream->streamType == 
STREAM_TYPE_APPLICATION) {
                                        logFileFormat = const_cast<char 
*>(static_cast<const char*>(
@@ -2696,7 +2704,7 @@ static SaAisErrorT stream_create_and_con
        }
 
  done:
-       TRACE_LEAVE();
+       TRACE_LEAVE2("rc: %s", saf_error(rc));
        return rc;
 }
 
@@ -2734,7 +2742,7 @@ SaAisErrorT lgs_imm_init_configStreams(l
        SaImmAttrValuesT_2 **attributes;
        int wellknownStreamId = 0;
        int appStreamId = 3;
-       int streamId = 0;
+       int streamId = 0, num;
        SaNameT objectName;
        const char *className = "SaLogStreamConfig";
 
@@ -2775,9 +2783,9 @@ SaAisErrorT lgs_imm_init_configStreams(l
                         *
                         * With well-known streams, stream ID is in reserved 
numbers [0-2].
                         */
-                       streamId = is_well_know_stream((char 
*)objectName.value)? wellknownStreamId++:appStreamId++;
-                       ais_rc = stream_create_and_configure((char*) 
objectName.value,
-                                       &stream, streamId, accessorHandle);
+                       SaConstStringT name = 
osaf_extended_name_borrow(&objectName);
+                       streamId = is_well_know_stream(name)? 
wellknownStreamId++:appStreamId++;
+                       ais_rc = stream_create_and_configure(name, &stream, 
streamId, accessorHandle);
                        if (ais_rc != SA_AIS_OK) {
                                LOG_WA("stream_create_and_configure failed %d", 
ais_rc);
                                goto done;
@@ -2798,7 +2806,8 @@ SaAisErrorT lgs_imm_init_configStreams(l
                osaf_abort(0);
        }
 
-       stream = log_stream_getnext_by_name(NULL);
+       num = get_number_of_streams();
+       stream = log_stream_get_by_id(--num);
        while (stream != NULL) {
                if (cb->scAbsenceAllowed != 0) {
                        int_rc = log_stream_open_file_restore(stream);
@@ -2817,7 +2826,7 @@ SaAisErrorT lgs_imm_init_configStreams(l
                }
 
                ais_rc = immutil_update_one_rattr(
-                       cb->immOiHandle, stream->name,
+                       cb->immOiHandle, stream->name.c_str(),
                        
const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"),
                        SA_IMM_ATTR_SATIMET,
                        &stream->creationTimeStamp);
@@ -2826,7 +2835,7 @@ SaAisErrorT lgs_imm_init_configStreams(l
                        osaf_abort(0);
                }
 
-               stream = log_stream_getnext_by_name(stream->name);
+               stream = log_stream_get_by_id(--num);
        }
 
  done:
@@ -2846,7 +2855,7 @@ SaAisErrorT lgs_imm_init_configStreams(l
                LOG_NO("%s immutil_saImmOmFinalize() Fail %d",__FUNCTION__, 
om_rc);
        }
 
-       TRACE_LEAVE();
+       TRACE_LEAVE2("rc: %s", saf_error(ais_rc));
        return ais_rc;
 }
 
@@ -2888,7 +2897,7 @@ void lgs_imm_init_OI_handle(SaImmOiHandl
                lgs_exit("saImmOiSelectionObjectGet failed", 
SA_AMF_COMPONENT_RESTART);
        }
 
-       TRACE_LEAVE();
+       TRACE_LEAVE2("rc: %s", saf_error(rc));
 }
 
 /**
@@ -2991,8 +3000,8 @@ static SaAisErrorT imm_impl_set_sequence
         }
 
 done:
+       TRACE_LEAVE2("rc: %s", saf_error(rc));
        return rc;
-       TRACE_LEAVE();
 }
 
 /**
@@ -3136,13 +3145,10 @@ void lgs_search_stream_objects()
        searchParam.searchOneAttr.attrName = const_cast<char 
*>("SaImmAttrClassName");
        searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT;
        searchParam.searchOneAttr.attrValue = &class_name;
-       SaNameT root_name;
-       root_name.value[0] = '\0';
-       root_name.length = 1;
 
        ais_rc = immutil_saImmOmSearchInitialize_2(
                        immOmHandle,
-                       &root_name,
+                       NULL,
                        SA_IMM_SUBTREE,
                        SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_NO_ATTR,
                        &searchParam,
@@ -3164,13 +3170,13 @@ void lgs_search_stream_objects()
        }
 
        while (ais_rc == SA_AIS_OK) {
-               TRACE("\tFound object \"%s\"", reinterpret_cast<char 
*>(object_name.value));
+               SaConstStringT objName = 
osaf_extended_name_borrow(&object_name);
+               TRACE("\tFound object \"%s\"", objName);
                /* Add the string to the list
                 */
-               rc = log_rtobj_list_add(reinterpret_cast<char 
*>(object_name.value));
+               rc = log_rtobj_list_add(objName);
                if (rc == -1) {
-                       TRACE("%s Could not add %s to list Fail",
-                             __FUNCTION__, reinterpret_cast<char 
*>(object_name.value));
+                       TRACE("%s Could not add %s to list Fail", __FUNCTION__, 
objName);
                }
 
                /* Get next object */
@@ -3199,33 +3205,29 @@ done_fin_Om:
        }
 
 done:
-
-       TRACE_LEAVE();
+       TRACE_LEAVE2("rc: %s", saf_error(ais_rc));
 }
 
-void lgs_delete_one_stream_object(char *name_str)
+void lgs_delete_one_stream_object(const std::string &name_str)
 {
        SaAisErrorT ais_rc = SA_AIS_OK;
        SaNameT object_name;
 
-       if (name_str == NULL) {
+       if (name_str.empty() == true) {
                TRACE("%s No object name given", __FUNCTION__);
                return;
        }
 
        /* Copy name to a SaNameT */
-       (void) strncpy(reinterpret_cast<char *>(object_name.value),
-                      name_str, SA_MAX_NAME_LENGTH);
-       object_name.length = strlen(name_str) + 1;
+       osaf_extended_name_lend(name_str.c_str(), &object_name);
 
        /* and delete the object */
        ais_rc = immutil_saImmOiRtObjectDelete(lgs_cb->immOiHandle, 
&object_name);
        if (ais_rc == SA_AIS_OK) {
-               TRACE("%s Object \"%s\" deleted", __FUNCTION__,
-                     reinterpret_cast<char *>(object_name.value));
+               TRACE("%s Object \"%s\" deleted", __FUNCTION__, 
name_str.c_str());
        } else {
                LOG_WA("%s saImmOiRtObjectDelete for \"%s\" FAILED %d",
-                      __FUNCTION__, reinterpret_cast<char 
*>(object_name.value), ais_rc);
+                      __FUNCTION__, name_str.c_str(), ais_rc);
        }
 }
 
@@ -3261,19 +3263,14 @@ void lgs_cleanup_abandoned_streams()
                 */
                if (name_str != NULL) {
                        /* Copy name to a SaNameT */
-                       (void) strncpy(reinterpret_cast<char 
*>(object_name.value),
-                                      name_str, SA_MAX_NAME_LENGTH);
-                       object_name.length = strlen(name_str) + 1;
+                       osaf_extended_name_lend(name_str, &object_name);
                        /* and delete the object */
-                       ais_rc = 
immutil_saImmOiRtObjectDelete(lgs_cb->immOiHandle,
-                               &object_name);
+                       ais_rc = 
immutil_saImmOiRtObjectDelete(lgs_cb->immOiHandle, &object_name);
                        if (ais_rc == SA_AIS_OK) {
-                               TRACE("\tObject \"%s\" deleted",
-                                     reinterpret_cast<char 
*>(object_name.value));
+                               TRACE("\tObject \"%s\" deleted", name_str);
                        } else {
                                LOG_WA("%s saImmOiRtObjectDelete for \"%s\" 
FAILED %d",
-                                      __FUNCTION__,
-                                      reinterpret_cast<char 
*>(object_name.value), ais_rc);
+                                      __FUNCTION__, name_str, ais_rc);
                        }
                } else {
                        /* Should never happen! */
@@ -3297,8 +3294,9 @@ void lgs_cleanup_abandoned_streams()
  * @param immOmHandle[out]
  * @return -1 on error
  */
-int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out, char 
*object_name_in,
-       SaImmHandleT *immOmHandle)
+int lgs_get_streamobj_attr(SaImmAttrValuesT_2 ***attrib_out,
+                          const std::string &object_name_in,
+                          SaImmHandleT *immOmHandle)
 {
        int rc = 0;
        SaAisErrorT ais_rc = SA_AIS_OK;
@@ -3317,10 +3315,10 @@ int lgs_get_streamobj_attr(SaImmAttrValu
                NULL
        };
 
-       TRACE_ENTER2("object_name_in \"%s\"", object_name_in);
+       TRACE_ENTER2("object_name_in \"%s\"", object_name_in.c_str());
 
        SaNameT object_name;
-       if (object_name_in == NULL) {
+       if (object_name_in.empty() == true) {
                TRACE("%s No object name given (NULL)", __FUNCTION__);
                rc = -1;
                goto done;
@@ -3345,9 +3343,7 @@ int lgs_get_streamobj_attr(SaImmAttrValu
                goto done;
        }
 
-       strncpy(reinterpret_cast<char *>(object_name.value),
-               object_name_in, SA_MAX_NAME_LENGTH);
-       object_name.length = strlen(reinterpret_cast<char 
*>(object_name.value)) + 1;
+       osaf_extended_name_lend(object_name_in.c_str(), &object_name);
 
        ais_rc = immutil_saImmOmAccessorGet_2(accessorHandle, &object_name,
                        attribute_names, attrib_out);
@@ -3421,12 +3417,10 @@ SaUint32T *lgs_get_scAbsenceAllowed_attr
                const_cast<char *>("scAbsenceAllowed"),
                NULL
        };
-       char object_name_str[] = "opensafImm=opensafImm,safApp=safImmService";
+       std::string object_name_str = 
"opensafImm=opensafImm,safApp=safImmService";
 
        SaNameT object_name;
-       strncpy(reinterpret_cast<char *>(object_name.value),
-               object_name_str, SA_MAX_NAME_LENGTH);
-       object_name.length = strlen(reinterpret_cast<char 
*>(object_name.value)) + 1;
+       osaf_extended_name_lend(object_name_str.c_str(), &object_name);
 
        /* Default restore handling shall be disabled. Is enabled if the
         * scAbsenceAllowed attribute is not empty
diff --git a/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc 
b/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc
--- a/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_imm_gcfg.cc
@@ -30,7 +30,7 @@
 #include "immutil.h"
 #include "osaf_time.h"
 #include "osaf_poll.h"
-
+#include "osaf_extended_name.h"
 /*
  * Implements an IMM applier for the OpensafConfig class.
  * Used for detecting changes of opensafNetworkName attribute.
@@ -362,7 +362,7 @@ static SaAisErrorT ccbObjectModifyCallba
        SaAisErrorT rc = SA_AIS_OK;
        struct CcbUtilCcbData *ccbUtilCcbData;
 
-       TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, objectName->value);
+       TRACE_ENTER2("CCB ID %llu, '%s'", ccbId, 
osaf_extended_name_borrow(objectName));
 
        if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
                if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -414,6 +414,7 @@ static void ccbApplyCallback(SaImmOiHand
        const SaImmAttrModificationT_2 *attrMod;
        char *value_str = NULL;
        int i = 0;
+       SaConstStringT objName;
 
        TRACE_ENTER2("CCB ID %llu", ccbId);
 
@@ -432,10 +433,9 @@ static void ccbApplyCallback(SaImmOiHand
                goto done;
        }
 
-       if (strncmp(reinterpret_cast<char *>(opdata->objectName.value),
-               "opensafConfigId", sizeof("opensafConfigId") - 1) != 0) {
-               TRACE("Object \"%s\" not a OpensafConfig object",
-                     reinterpret_cast<char *>(opdata->objectName.value));
+       objName = osaf_extended_name_borrow(&opdata->objectName);
+       if (strncmp(objName, "opensafConfigId", sizeof("opensafConfigId") - 1) 
!= 0) {
+               TRACE("Object \"%s\" not a OpensafConfig object", objName);
                goto done;
        }
 
diff --git a/osaf/services/saf/logsv/lgs/lgs_main.cc 
b/osaf/services/saf/logsv/lgs/lgs_main.cc
--- a/osaf/services/saf/logsv/lgs/lgs_main.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_main.cc
@@ -481,7 +481,12 @@ int main(int argc, char *argv[])
        const time_t CLEAN_TIMEOUT = 600; /* 10 min */
 
        daemonize(argc, argv);
-       
+
+       if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0 ) {
+               LOG_ER("Failed to set SA_ENABLE_EXTENDED_NAMES (%s)", 
strerror(errno));
+               goto done;
+       }
+
        if (log_initialize() != NCSCC_RC_SUCCESS) {
                LOG_ER("log_initialize failed");
                goto done;
diff --git a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc 
b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc
--- a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc
@@ -268,6 +268,8 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c
 {
        TRACE_ENTER();
        NCS_MBCSV_ARG mbcsv_arg;
+       int num;
+
        memset(&mbcsv_arg, '\0', sizeof(NCS_MBCSV_ARG));
 
        /* Set the mbcsv args */
@@ -289,7 +291,8 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c
         */
        log_stream_t *stream;
        if (lgs_is_split_file_system()) {
-               stream = log_stream_getnext_by_name(NULL);
+               num = get_number_of_streams();
+               stream = log_stream_get_by_id(--num);
                while (stream != NULL) { /* Iterate over all streams */
                        if (ha_state == SA_AMF_HA_ACTIVE) {
                                stream->logFileCurrent = 
stream->stb_logFileCurrent;
@@ -302,7 +305,7 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c
                                *stream->p_fd = -1; /* Reopen files */
                        }
 
-                       stream = log_stream_getnext_by_name(stream->name);
+                       stream = log_stream_get_by_id(--num);
                }
        }
 
@@ -598,7 +601,7 @@ uint32_t lgs_ckpt_stream_open_set(log_st
        stream_open->logPath = const_cast<char *>(logStream->pathName.c_str());
        stream_open->logFileCurrent = const_cast<char 
*>(logStream->logFileCurrent.c_str());
        stream_open->fileFmt = logStream->logFileFormat;
-       stream_open->logStreamName = logStream->name;
+       stream_open->logStreamName = const_cast<char 
*>(logStream->name.c_str());
        stream_open->maxFileSize = logStream->maxLogFileSize;
        stream_open->maxLogRecordSize = logStream->fixedLogRecordSize;
        stream_open->logFileFullAction = logStream->logFullAction;
@@ -625,6 +628,7 @@ static uint32_t edu_enc_streams(lgs_cb_t
        uint32_t rc = NCSCC_RC_SUCCESS, num_rec = 0;
        uint8_t *pheader = NULL;
        lgsv_ckpt_header_t ckpt_hdr;
+       int num;
 
        /* Prepare reg. structure to encode */
        ckpt_stream_rec = static_cast<lgs_ckpt_stream_open_t 
*>(malloc(sizeof(lgs_ckpt_stream_open_t)));
@@ -641,8 +645,9 @@ static uint32_t edu_enc_streams(lgs_cb_t
                return (rc = EDU_ERR_MEM_FAIL);
        }
        ncs_enc_claim_space(uba, sizeof(lgsv_ckpt_header_t));
-       log_stream_rec = log_stream_getnext_by_name(NULL);
 
+       num = get_number_of_streams();
+       log_stream_rec = log_stream_get_by_id(--num);
        /* Walk through the reg list and encode record by record */
        while (log_stream_rec != NULL) {
                lgs_ckpt_stream_open_set(log_stream_rec, ckpt_stream_rec);
@@ -656,7 +661,7 @@ static uint32_t edu_enc_streams(lgs_cb_t
                        return rc;
                }
                ++num_rec;
-               log_stream_rec = 
log_stream_getnext_by_name(log_stream_rec->name);
+               log_stream_rec = log_stream_get_by_id(--num);
        }                       /* End while RegRec */
 
        /* Encode RegHeader */
@@ -1581,8 +1586,8 @@ static void insert_localmsg_in_stream(lo
        
        /* Construct logSvcUsrName for log service */
        SaNameT logSvcUsrName;
-       sprintf((char *)logSvcUsrName.value, "%s", "safApp=safLogService");
-       logSvcUsrName.length = strlen((char *)logSvcUsrName.value);
+       SaConstStringT tmpSvcName = "safApp=safLogService";
+       osaf_extended_name_lend(tmpSvcName, &logSvcUsrName);
 
        /* Create a log header corresponding to type of stream */
        if ((stream->streamType == STREAM_TYPE_ALARM) ||
@@ -1834,7 +1839,7 @@ static uint32_t ckpt_proc_close_stream(l
                goto done;
        }
        
-       TRACE("close stream %s, id: %u", stream->name, stream->streamId);
+       TRACE("close stream %s, id: %u", stream->name.c_str(), 
stream->streamId);
 
        if ((stream->numOpeners > 0) || (clientId < 0)){
                /* No clients to remove if no openers or if closing a stream 
opened
@@ -1868,7 +1873,7 @@ uint32_t ckpt_proc_open_stream(lgs_cb_t 
 {
        lgs_ckpt_stream_open_t *param;
        log_stream_t *stream;
-       int pos = 0;
+       int pos = 0, err = 0;
 
        TRACE_ENTER();
        
@@ -1898,30 +1903,37 @@ uint32_t ckpt_proc_open_stream(lgs_cb_t 
                 */
                stream->numOpeners = param->numOpeners;
        } else {
-               SaNameT name;
+               TRACE("\tNew stream %s, id %u", param->logStreamName, 
param->streamId);
 
-               TRACE("\tNew stream %s, id %u", param->logStreamName, 
param->streamId);
-               strcpy((char *)name.value, param->logStreamName);
-               name.length = strlen(param->logStreamName);
+               SaAisErrorT rc = SA_AIS_OK;
+               stream = log_stream_new(param->logStreamName, param->streamId);
+               if (stream == NULL) {
+                       LOG_ER("Failed to create log stream %s", 
param->logStreamName);
+                       goto done;
 
-               stream = log_stream_new_1(&name,
-                               param->logFile,
-                               param->logPath,
-                               param->maxFileSize,
-                               param->maxLogRecordSize,
-                               param->logFileFullAction,
-                               param->maxFilesRotated,
-                               param->fileFmt,
-                               param->streamType,
-                               param->streamId,
-                               SA_FALSE,       // FIX sync or calculate?
-                               param->logRecordId,
-                               0);
+               }
+               err = lgs_populate_log_stream(
+                                     param->logFile,
+                                     param->logPath,
+                                     param->maxFileSize,
+                                     param->maxLogRecordSize,
+                                     param->logFileFullAction,
+                                     param->maxFilesRotated,
+                                     param->fileFmt,
+                                     param->streamType,
+                                     SA_FALSE, // FIX sync or calculate?
+                                     param->logRecordId,
+                                     stream  // output
+                       );
 
-               if (stream == NULL) {
-                       /* Do not allow standby to get out of sync */
-                       LOG_ER("%s - Failed to create stream '%s'", 
__FUNCTION__,
-                                       param->logStreamName);
+               if (err == -1) {
+                       log_stream_delete(&stream);
+                       goto done;
+               }
+
+               rc = lgs_create_rt_appstream(stream);
+               if (rc != SA_AIS_OK) {
+                       log_stream_delete(&stream);
                        goto done;
                }
 
@@ -2133,7 +2145,7 @@ static uint32_t ckpt_proc_cfg_stream(lgs
                goto done;
        }
 
-       TRACE("config stream %s, id: %u", stream->name, stream->streamId);
+       TRACE("config stream %s, id: %u", stream->name.c_str(), 
stream->streamId);
        stream->act_last_close_timestamp = closetime; /* Not used if ver 1 */
        stream->fileName = fileName;
        stream->maxLogFileSize = maxLogFileSize;
diff --git a/osaf/services/saf/logsv/lgs/lgs_mds.cc 
b/osaf/services/saf/logsv/lgs/lgs_mds.cc
--- a/osaf/services/saf/logsv/lgs/lgs_mds.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_mds.cc
@@ -19,6 +19,7 @@
 
 #include "lgs.h"
 #include "osaf_time.h"
+#include "osaf_extended_name.h"
 
 #define LGS_SVC_PVT_SUBPART_VERSION 1
 #define LGS_WRT_LGA_SUBPART_VER_AT_MIN_MSG_FMT 1
@@ -129,6 +130,7 @@ static uint32_t dec_lstr_open_sync_msg(N
        uint32_t rc = NCSCC_RC_SUCCESS;
        lgsv_stream_open_req_t *param = 
&msg->info.api_info.param.lstr_open_sync;
        uint8_t local_data[256];
+       char *str_name = NULL;
 
        TRACE_ENTER();
        // To make it safe when using free()
@@ -143,17 +145,28 @@ static uint32_t dec_lstr_open_sync_msg(N
 
        /* log stream name length */
        p8 = ncs_dec_flatten_space(uba, local_data, 2);
-       param->lstr_name.length = ncs_decode_16bit(&p8);
+       size_t length = ncs_decode_16bit(&p8);
        ncs_dec_skip_space(uba, 2);
        
-       if (param->lstr_name.length >= SA_MAX_NAME_LENGTH) {
+       if (length >= kOsafMaxDnLength) {
                TRACE("%s - lstr_name too long",__FUNCTION__);
                rc = NCSCC_RC_FAILURE;
                goto done;
        }
 
        /* log stream name */
-       ncs_decode_n_octets_from_uba(uba, param->lstr_name.value, 
(uint32_t)param->lstr_name.length);
+       str_name = static_cast<char *> (calloc(1, length + 1));
+       if (str_name == NULL) {
+               LOG_ER("Fail to allocated memory - str_name");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       ncs_decode_n_octets_from_uba(uba,
+                                    reinterpret_cast<uint8_t *>(str_name),
+                                    static_cast<uint32_t>(length));
+       osaf_extended_name_clear(&param->lstr_name);
+       /* This allocated memory must be freed in proc_stream_open_msg @lgs_evt 
*/
+       osaf_extended_name_alloc(str_name, &param->lstr_name);
 
        /* log file name */
        p8 = ncs_dec_flatten_space(uba, local_data, 2);
@@ -238,6 +251,8 @@ done_err:
        free(param->logFileFmt);
 
 done:
+       free(str_name);
+       str_name = NULL;
        TRACE_8("LGSV_STREAM_OPEN_REQ");
        return rc;
 }
@@ -271,6 +286,156 @@ static uint32_t dec_lstr_close_msg(NCS_U
        return rc;
 }
 
+static uint32_t dec_write_ntf_log_header(NCS_UBAID *uba, SaLogNtfLogHeaderT 
*const ntfLogH)
+{
+       uint8_t *p8;
+       uint8_t local_data[1024];
+       size_t notificationL, notifyingL;
+       uint32_t rc = NCSCC_RC_SUCCESS;
+       char *notificationObj = NULL;
+       char *notifyingObj = NULL;
+
+       ntfLogH->notificationObject = NULL;
+       ntfLogH->notifyingObject = NULL;
+       ntfLogH->notificationClassId = NULL;
+
+       p8 = ncs_dec_flatten_space(uba, local_data, 14);
+       ntfLogH->notificationId = ncs_decode_64bit(&p8);
+       ntfLogH->eventType = 
static_cast<SaNtfEventTypeT>(ncs_decode_32bit(&p8));
+
+       ntfLogH->notificationObject = static_cast<SaNameT 
*>(malloc(sizeof(SaNameT) + 1));
+       if (ntfLogH->notificationObject == NULL) {
+               LOG_WA("malloc FAILED");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+
+       notificationL = ncs_decode_16bit(&p8);
+       if (kOsafMaxDnLength <= notificationL) {
+               LOG_WA("notificationObject length is so long (max: %d)", 
kOsafMaxDnLength);
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       ncs_dec_skip_space(uba, 14);
+
+       notificationObj = static_cast<char *> (calloc(1, notificationL + 1));
+       if (notificationObj == NULL) {
+               LOG_WA("Fail to allocated memory - notificationObj");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       ncs_decode_n_octets_from_uba(uba,
+                                    reinterpret_cast<uint8_t 
*>(notificationObj),
+                                    static_cast<uint32_t>(notificationL));
+       osaf_extended_name_clear(ntfLogH->notificationObject);
+       osaf_extended_name_alloc(notificationObj, ntfLogH->notificationObject);
+
+       ntfLogH->notifyingObject = static_cast<SaNameT 
*>(malloc(sizeof(SaNameT) + 1));
+       if (ntfLogH->notifyingObject == NULL) {
+               LOG_WA("malloc FAILED");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+
+       p8 = ncs_dec_flatten_space(uba, local_data, 2);
+       notifyingL = ncs_decode_16bit(&p8);
+       ncs_dec_skip_space(uba, 2);
+
+       if (kOsafMaxDnLength <= notifyingL) {
+               LOG_WA("notifyingObject is so long (max: %d)", 
kOsafMaxDnLength);
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       notifyingObj = static_cast<char *> (calloc(1, notifyingL + 1));
+       if (notifyingObj == NULL) {
+               LOG_WA("Fail to allocated memory - notifyingObj");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       ncs_decode_n_octets_from_uba(uba,
+                                    reinterpret_cast<uint8_t *>(notifyingObj),
+                                    static_cast<uint32_t>(notifyingL));
+       osaf_extended_name_clear(ntfLogH->notifyingObject);
+       osaf_extended_name_alloc(notifyingObj, ntfLogH->notifyingObject);
+
+       ntfLogH->notificationClassId = static_cast<SaNtfClassIdT 
*>(malloc(sizeof(SaNtfClassIdT)));
+       if (ntfLogH->notificationClassId == NULL) {
+               LOG_WA("malloc FAILED");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       p8 = ncs_dec_flatten_space(uba, local_data, 16);
+       ntfLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8);
+       ntfLogH->notificationClassId->majorId = ncs_decode_16bit(&p8);
+       ntfLogH->notificationClassId->minorId = ncs_decode_16bit(&p8);
+       ntfLogH->eventTime = ncs_decode_64bit(&p8);
+       ncs_dec_skip_space(uba, 16);
+
+done:
+       free(notificationObj);
+       free(notifyingObj);
+       TRACE("%s - rc = %d", __func__, rc);
+       return rc;
+}
+
+static uint32_t dec_write_gen_log_header(NCS_UBAID *uba, 
SaLogGenericLogHeaderT *const genLogH)
+{
+       uint8_t *p8;
+       uint8_t local_data[1024];
+       size_t svcLength;
+       uint32_t rc = NCSCC_RC_SUCCESS;
+       char *logSvcUsrName = NULL;
+
+       genLogH->notificationClassId = NULL;
+       genLogH->logSvcUsrName = NULL;
+
+       genLogH->notificationClassId = static_cast<SaNtfClassIdT 
*>(malloc(sizeof(SaNtfClassIdT)));
+       if (genLogH->notificationClassId == NULL) {
+               LOG_WA("malloc FAILED");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+
+       p8 = ncs_dec_flatten_space(uba, local_data, 10);
+       genLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8);
+       genLogH->notificationClassId->majorId = ncs_decode_16bit(&p8);
+       genLogH->notificationClassId->minorId = ncs_decode_16bit(&p8);
+
+       svcLength = ncs_decode_16bit(&p8);
+       if (kOsafMaxDnLength <= svcLength) {
+               LOG_WA("logSvcUsrName too big (max: %d)", kOsafMaxDnLength);
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       logSvcUsrName = static_cast<char *>(malloc(svcLength + 1));
+       if (logSvcUsrName == NULL) {
+               LOG_WA("malloc FAILED");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       genLogH->logSvcUsrName = static_cast<SaNameT *>(malloc(sizeof(SaNameT) 
+ 1));
+       if (genLogH->logSvcUsrName == NULL) {
+               LOG_WA("malloc FAILED");
+               rc = NCSCC_RC_FAILURE;
+               goto done;
+       }
+       ncs_dec_skip_space(uba, 10);
+       ncs_decode_n_octets_from_uba(uba,
+                                    reinterpret_cast<uint8_t *>(logSvcUsrName),
+                                    static_cast<uint32_t>(svcLength));
+       osaf_extended_name_clear(const_cast<SaNameT *>(genLogH->logSvcUsrName));
+       osaf_extended_name_alloc(logSvcUsrName, const_cast<SaNameT 
*>(genLogH->logSvcUsrName));
+
+       p8 = ncs_dec_flatten_space(uba, local_data, 2);
+       genLogH->logSeverity = ncs_decode_16bit(&p8);
+       ncs_dec_skip_space(uba, 2);
+
+done:
+       free(logSvcUsrName);
+       TRACE("%s - rc = %d", __func__, rc);
+       return rc;
+}
+
 /****************************************************************************
   Name          : dec_write_log_async_msg
  
@@ -294,7 +459,6 @@ static uint32_t dec_write_log_async_msg(
         * Note that more pointers has to be initiated in the allocation 
sequence
         * below.
         */
-       SaNameT *logSvcUsrName = NULL;
        SaLogNtfLogHeaderT *ntfLogH = NULL;
        SaLogGenericLogHeaderT *genLogH = NULL;
        param->logRecord = NULL;
@@ -330,109 +494,14 @@ static uint32_t dec_write_log_async_msg(
        switch (param->logRecord->logHdrType) {
        case SA_LOG_NTF_HEADER:
                ntfLogH = &param->logRecord->logHeader.ntfHdr;
-               /* Initiate log ntf header pointers */
-               ntfLogH->notificationObject = NULL;
-               ntfLogH->notifyingObject = NULL;
-               ntfLogH->notificationClassId = NULL;
-               
-               p8 = ncs_dec_flatten_space(uba, local_data, 14);
-               ntfLogH->notificationId = ncs_decode_64bit(&p8);
-               ntfLogH->eventType = 
static_cast<SaNtfEventTypeT>(ncs_decode_32bit(&p8));
-
-               ntfLogH->notificationObject = static_cast<SaNameT 
*>(malloc(sizeof(SaNameT) + 1));
-               if (!ntfLogH->notificationObject) {
-                       LOG_WA("malloc FAILED");
-                       rc = NCSCC_RC_FAILURE;
-                       goto err_done;
-               }
-
-               ntfLogH->notificationObject->length = ncs_decode_16bit(&p8);
-               if (SA_MAX_NAME_LENGTH <= ntfLogH->notificationObject->length) {
-                       TRACE("notificationObject to big");
-                       rc = NCSCC_RC_FAILURE;
-                       goto err_done;
-               }
-               ncs_dec_skip_space(uba, 14);
-
-               ncs_decode_n_octets_from_uba(uba,
-                                            
ntfLogH->notificationObject->value, ntfLogH->notificationObject->length);
-               
ntfLogH->notificationObject->value[ntfLogH->notificationObject->length] = '\0';
-
-               ntfLogH->notifyingObject = static_cast<SaNameT 
*>(malloc(sizeof(SaNameT) + 1));
-               if (!ntfLogH->notifyingObject) {
-                       LOG_WA("malloc FAILED");
-                       rc = NCSCC_RC_FAILURE;
-                       goto err_done;
-               }
-               p8 = ncs_dec_flatten_space(uba, local_data, 2);
-               ntfLogH->notifyingObject->length = ncs_decode_16bit(&p8);
-               ncs_dec_skip_space(uba, 2);
-
-               if (SA_MAX_NAME_LENGTH <= ntfLogH->notifyingObject->length) {
-                       TRACE("notifyingObject to big");
-                       rc = NCSCC_RC_FAILURE;
-                       goto err_done;
-               }
-
-               ncs_decode_n_octets_from_uba(uba, 
ntfLogH->notifyingObject->value, ntfLogH->notifyingObject->length);
-               
ntfLogH->notifyingObject->value[ntfLogH->notifyingObject->length] = '\0';
-
-               ntfLogH->notificationClassId = static_cast<SaNtfClassIdT 
*>(malloc(sizeof(SaNtfClassIdT)));
-               if (!ntfLogH->notificationClassId) {
-                       LOG_WA("malloc FAILED");
-                       rc = NCSCC_RC_FAILURE;
-                       goto err_done;
-               }
-               p8 = ncs_dec_flatten_space(uba, local_data, 16);
-               ntfLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8);
-               ntfLogH->notificationClassId->majorId = ncs_decode_16bit(&p8);
-               ntfLogH->notificationClassId->minorId = ncs_decode_16bit(&p8);
-               ntfLogH->eventTime = ncs_decode_64bit(&p8);
-               ncs_dec_skip_space(uba, 16);
+               rc = dec_write_ntf_log_header(uba, ntfLogH);
+               if (rc != NCSCC_RC_SUCCESS) goto err_done;
                break;
 
        case SA_LOG_GENERIC_HEADER:
                genLogH = &param->logRecord->logHeader.genericHdr;
-               /* Initiate general header pointers */
-               genLogH->notificationClassId = NULL;
-               
-               genLogH->notificationClassId = static_cast<SaNtfClassIdT 
*>(malloc(sizeof(SaNtfClassIdT)));
-               if (!genLogH->notificationClassId) {
-                       LOG_WA("malloc FAILED");
-                       rc = NCSCC_RC_FAILURE;
-                       goto err_done;
-               }
-               p8 = ncs_dec_flatten_space(uba, local_data, 10);
-               genLogH->notificationClassId->vendorId = ncs_decode_32bit(&p8);
-               genLogH->notificationClassId->majorId = ncs_decode_16bit(&p8);
-               genLogH->notificationClassId->minorId = ncs_decode_16bit(&p8);
-
-               logSvcUsrName = static_cast<SaNameT *>(malloc(sizeof(SaNameT) + 
1));
-               if (!logSvcUsrName) {
-                       LOG_WA("malloc FAILED");
-                       rc = NCSCC_RC_FAILURE;
-                       goto err_done;
-               }
-
-               /*
-                ** A const value in genLogHeader is fucking up...
-                ** Extra instance used.
-                */
-               logSvcUsrName->length = ncs_decode_16bit(&p8);
-
-               if (SA_MAX_NAME_LENGTH <= logSvcUsrName->length) {
-                       LOG_WA("logSvcUsrName too big");
-                       rc = NCSCC_RC_FAILURE;
-                       goto err_done;
-               }
-               ncs_dec_skip_space(uba, 10);
-
-               ncs_decode_n_octets_from_uba(uba, logSvcUsrName->value, 
logSvcUsrName->length);
-               logSvcUsrName->value[logSvcUsrName->length] = '\0';
-               genLogH->logSvcUsrName = logSvcUsrName;
-               p8 = ncs_dec_flatten_space(uba, local_data, 2);
-               genLogH->logSeverity = ncs_decode_16bit(&p8);
-               ncs_dec_skip_space(uba, 2);
+               rc = dec_write_gen_log_header(uba, genLogH);
+               if (rc != NCSCC_RC_SUCCESS) goto err_done;
                break;
 
        default:
@@ -467,7 +536,7 @@ static uint32_t dec_write_log_async_msg(
                                             
param->logRecord->logBuffer->logBuf,
                                             
(uint32_t)param->logRecord->logBuffer->logBufSize);
        }
-       
+
     /************ end saLogRecord decode ****************/
        TRACE_8("LGSV_WRITE_LOG_ASYNC_REQ");
        return rc;
@@ -483,24 +552,29 @@ static uint32_t dec_write_log_async_msg(
                        free(param->logRecord->logBuffer);
                }
                if (ntfLogH != NULL) { /* &param->logRecord->logHeader.ntfHdr */
-                       if (ntfLogH->notificationObject != NULL)
+                       if (ntfLogH->notificationObject != NULL) {
+                               
osaf_extended_name_free(ntfLogH->notificationObject);
                                free(ntfLogH->notificationObject);
-                       if (ntfLogH->notifyingObject != NULL)
+                       }
+                       if (ntfLogH->notifyingObject != NULL) {
+                               
osaf_extended_name_free(ntfLogH->notifyingObject);
                                free(ntfLogH->notifyingObject);
+                       }
                        if (ntfLogH->notificationClassId != NULL)
                                free(ntfLogH->notificationClassId);
                }
                if (genLogH != NULL) { /* 
&param->logRecord->logHeader.genericHdr */
                        if (genLogH->notificationClassId != NULL)
                                free(genLogH->notificationClassId);
+                       if (genLogH->logSvcUsrName != NULL) {
+                               osaf_extended_name_free(const_cast<SaNameT 
*>(genLogH->logSvcUsrName));
+                               free(const_cast<SaNameT 
*>(genLogH->logSvcUsrName));
+
+                       }
                }
-       
+
                free(param->logRecord);
        }
-       
-       if (logSvcUsrName != NULL)
-               free(logSvcUsrName);
-               
     /************ end saLogRecord decode ****************/
        TRACE_8("LGSV_WRITE_LOG_ASYNC_REQ (error)");
        return rc;
diff --git a/osaf/services/saf/logsv/lgs/lgs_recov.cc 
b/osaf/services/saf/logsv/lgs/lgs_recov.cc
--- a/osaf/services/saf/logsv/lgs/lgs_recov.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_recov.cc
@@ -93,7 +93,7 @@ void log_rtobj_list_free()
  * @param dn_str[in] '\0' terminated string containing a dn
  * @return -1 on error
  */
-int log_rtobj_list_add(char *dn_str)
+int log_rtobj_list_add(const std::string &dn_str)
 {
        char *str_ptr = NULL;
        size_t len = 0;
@@ -116,8 +116,8 @@ int log_rtobj_list_add(char *dn_str)
        }
 
        /* Save dn string */
-       len = strlen(dn_str) + 1; /* Including '\0' */
-       if (len > SA_MAX_NAME_LENGTH) {
+       len = dn_str.size() + 1; /* Including '\0' */
+       if (len > kOsafMaxDnLength) {
                /* Should never happen */
                LOG_WA("%s\tToo long dn string!",__FUNCTION__);
                rc = -1;
@@ -131,7 +131,7 @@ int log_rtobj_list_add(char *dn_str)
                goto done;
        }
 
-       strcpy(str_ptr, dn_str);
+       strcpy(str_ptr, dn_str.c_str());
 
        /* Add dn to list */
        rtobj_list[rtobj_cnt] = str_ptr;
@@ -158,12 +158,12 @@ int log_rtobj_list_no()
  * @param dn_str[in] '\0' terminated string with dn to find
  * @return Position of found name or -1 if name not found
  */
-int log_rtobj_list_find(char *dn_str)
+int log_rtobj_list_find(const std::string &dn_str)
 {
        uint32_t i = 0;
        int pos = -1;
 
-       TRACE_ENTER2("dn_str \"%s\"", dn_str);
+       TRACE_ENTER2("dn_str \"%s\"", dn_str.c_str());
 
        if (rtobj_list == NULL) {
                TRACE("\t No rtobj_list exist");
@@ -173,7 +173,7 @@ int log_rtobj_list_find(char *dn_str)
        for (i = 0; i < rtobj_list_len; i++) {
                if (rtobj_list[i] == NULL)
                        continue;
-               if (strcmp(rtobj_list[i], dn_str) == 0) {
+               if (strcmp(rtobj_list[i], dn_str.c_str()) == 0) {
                        /* Found! */
                        pos = (int) i;
                        break;
@@ -339,7 +339,7 @@ static void lgs_remove_stream(uint32_t c
  * @return -1 on error
  */
 int lgs_restore_one_app_stream(
-       char *stream_name, uint32_t client_id,
+       const std::string &stream_name, uint32_t client_id,
        log_stream_t **o_stream)
 {
        int int_rc = 0;
@@ -365,31 +365,27 @@ int lgs_restore_one_app_stream(
        // Make it safe for free
        par_out.curFileName = NULL;
 
-       TRACE_ENTER2("object_name \"%s\", client_id=%d", stream_name, 
client_id);
+       TRACE_ENTER2("object_name \"%s\", client_id=%d", stream_name.c_str(), 
client_id);
 
        memset(&open_stream_param, 0, sizeof(open_stream_param));
 
        /* Check and save stream file name */
-       if (stream_name == NULL) {
+       if (stream_name.empty() == true) {
                TRACE("%s: No object name <NULL>", __FUNCTION__);
                rc_out = -1;
                goto done;
        }
-       n = snprintf(reinterpret_cast<char 
*>(open_stream_param.lstr_name.value),
-               SA_MAX_NAME_LENGTH, "%s", stream_name);
-
-       open_stream_param.lstr_name.length = strlen(stream_name) + 1;
-       if (n >= SA_MAX_NAME_LENGTH) {
-               TRACE("Log stream name \"%s\" is truncated",
-                       open_stream_param.lstr_name.value);
+       if (stream_name.size() >= kOsafMaxDnLength) {
+               TRACE("Log stream name \"%s\" is truncated", 
stream_name.c_str());
                rc_out = -1;
                goto done;
        }
+       osaf_extended_name_lend(stream_name.c_str(), 
&open_stream_param.lstr_name);
 
        /* Check if in found objects list */
        list_pos = log_rtobj_list_find(stream_name);
        if (list_pos == -1) {
-               TRACE("%s: No stream \"%s\" found to restore", __FUNCTION__, 
stream_name);
+               TRACE("%s: No stream \"%s\" found to restore", __FUNCTION__, 
stream_name.c_str());
                rc_out = -1;
                goto done;
        }
@@ -726,7 +722,7 @@ int log_stream_open_file_restore(log_str
         */
        if (par_out.curFileName == NULL) {
                /* There is no current log file. Consider as logsv starts from 
scratch */
-               TRACE("\t Create new cfg/logfile for stream (%s)", 
stream->name);
+               TRACE("\t Create new cfg/logfile for stream (%s)", 
stream->name.c_str());
                log_stream_open_fileinit(stream);
                stream->creationTimeStamp = lgs_get_SaTime();
                goto done;
@@ -774,7 +770,7 @@ done:
  * @param stream_name[in]  The name of the stream
  * @return -1 on error
  */
-int log_close_rtstream_files(char *stream_name)
+int log_close_rtstream_files(const std::string &stream_name)
 {
        int int_rc = 0;
        int rc_out = 0;
@@ -793,10 +789,10 @@ int log_close_rtstream_files(char *strea
        // Make it safe for free
        par_out.curFileName = NULL;
 
-       TRACE_ENTER2("object_name \"%s\"", stream_name);
+       TRACE_ENTER2("object_name \"%s\"", stream_name.c_str());
 
        /* Check and save stream file name */
-       if (stream_name == NULL) {
+       if (stream_name.empty() == true) {
                TRACE("%s: No object name <NULL>", __FUNCTION__);
                rc_out = -1;
                goto done;
@@ -878,7 +874,7 @@ int log_close_rtstream_files(char *strea
                                   current_time, LGS_LOG_FILE_EXT, emptyStr);
        if (int_rc == -1) {
                LOG_WA("Failed to rename log file (%s) for stream (%s)",
-                      par_out.curFileName, stream_name);
+                      par_out.curFileName, stream_name.c_str());
        }
 
        int_rc = lgs_file_rename_h(rootPath, pathName_bk, fileName,
@@ -886,7 +882,7 @@ int log_close_rtstream_files(char *strea
 
        if (int_rc == -1) {
                LOG_WA("Failed to rename configuration file (%s) for stream 
(%s)",
-                      fileName.c_str(), stream_name);
+                      fileName.c_str(), stream_name.c_str());
        }
 
 done_free_attr:
diff --git a/osaf/services/saf/logsv/lgs/lgs_recov.h 
b/osaf/services/saf/logsv/lgs/lgs_recov.h
--- a/osaf/services/saf/logsv/lgs/lgs_recov.h
+++ b/osaf/services/saf/logsv/lgs/lgs_recov.h
@@ -20,19 +20,19 @@
 
 #include "lgs.h"
 
-int log_rtobj_list_add(char *dn_str);
+int log_rtobj_list_add(const std::string &dn_str);
 int log_rtobj_list_no();
-int log_rtobj_list_find(char *stream_name);
+int log_rtobj_list_find(const std::string &stream_name);
 int log_rtobj_list_getnamepos();
 char *log_rtobj_list_getname(int pos);
 void log_rtobj_list_erase_one_pos(int pos);
 void log_rtobj_list_free();
 int lgs_restore_one_app_stream(
-       char *stream_name,
+       const std::string &stream_name,
        uint32_t client_id,
        log_stream_t **o_stream
        );
 int log_stream_open_file_restore(log_stream_t *log_stream);
-int log_close_rtstream_files(char *stream_name);
+int log_close_rtstream_files(const std::string &stream_name);
 
 #endif /* LGS_STATE_H */
diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc 
b/osaf/services/saf/logsv/lgs/lgs_stream.cc
--- a/osaf/services/saf/logsv/lgs/lgs_stream.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc
@@ -31,11 +31,10 @@
 #include "lgs_file.h"
 #include "lgs_filehdl.h"
 #include "osaf_time.h"
+#include "immutil.h"
 
 #define DEFAULT_NUM_APP_LOG_STREAMS 64
 
-static NCS_PATRICIA_TREE stream_dn_tree;
-
 static log_stream_t **stream_array;
 /* We have at least the 3 well known streams. */
 static unsigned int stream_array_size = 3;
@@ -104,6 +103,17 @@ done:
 }
 
 /**
+ * Get current number of openning streams
+ *
+ * @param: none
+ * @return current number of opening streams
+ */
+unsigned int get_number_of_streams()
+{
+       return numb_of_streams;
+}
+
+/**
  * Close with retry at EINTR
  * 
  * @param fd [in]
@@ -260,48 +270,6 @@ static int rotate_if_needed(log_stream_t
        return rc;
 }
 
-static uint32_t log_stream_add(NCS_PATRICIA_NODE *node, const char *key)
-{
-       uint32_t rc = NCSCC_RC_SUCCESS;
-
-       node->key_info = (uint8_t *)key;
-
-       if ( NULL == ncs_patricia_tree_get(&stream_dn_tree,node->key_info)){
-               rc = ncs_patricia_tree_add(&stream_dn_tree, node);
-               if (rc != NCSCC_RC_SUCCESS) {
-                       LOG_WA("ncs_patricia_tree_add FAILED for '%s' %u", key, 
rc);
-                       node->key_info = NULL;
-                       goto done;
-               }
-       }
-
- done:
-       return rc;
-}
-
-static uint32_t log_stream_remove(const char *key)
-{
-       uint32_t rc = NCSCC_RC_SUCCESS;
-       log_stream_t *stream;
-
-       stream = reinterpret_cast<log_stream_t 
*>(ncs_patricia_tree_get(&stream_dn_tree, (uint8_t *)key));
-       if (stream == NULL) {
-               TRACE_2("ncs_patricia_tree_get FAILED");
-               rc = NCSCC_RC_FAILURE;
-               goto done;
-       }
-       
-       if (ncs_patricia_tree_get(&stream_dn_tree,stream->pat_node.key_info)){
-               if ((rc = ncs_patricia_tree_del(&stream_dn_tree, 
&stream->pat_node)) != NCSCC_RC_SUCCESS) {
-                       LOG_WA("ncs_patricia_tree_del FAILED for  '%s' 
%u",key,rc);
-                       goto done;
-               }
-       }
-
- done:
-       return rc;
-}
-
 /**
  * Initiate the files belonging to a stream
  * 
@@ -357,35 +325,11 @@ done:
        TRACE_LEAVE();
 }
 
-log_stream_t *log_stream_get_by_name(const char *name)
-{
-       char nname[SA_MAX_NAME_LENGTH + 1];
-
-       /* Create null-terminated stream name */
-       strcpy(nname, name);
-       memset(&nname[strlen(name)], 0, SA_MAX_NAME_LENGTH + 1 - strlen(name));
-
-       return reinterpret_cast<log_stream_t 
*>(ncs_patricia_tree_get(&stream_dn_tree, (uint8_t *)nname));
-}
-
-log_stream_t *log_stream_getnext_by_name(const char *name)
-{
-       char nname[SA_MAX_NAME_LENGTH + 1];
-
-       if (name != NULL) {
-               /* Create SA_MAX_NAME_LENGTH stream name */
-               strcpy(nname, name);
-               memset(&nname[strlen(name)], 0, SA_MAX_NAME_LENGTH + 1 - 
strlen(name));
-               return reinterpret_cast<log_stream_t 
*>(ncs_patricia_tree_getnext(&stream_dn_tree, (uint8_t *)nname));
-       } else
-               return reinterpret_cast<log_stream_t 
*>(ncs_patricia_tree_getnext(&stream_dn_tree, NULL));
-}
-
 void log_stream_print(log_stream_t *stream)
 {
        osafassert(stream != NULL);
 
-       TRACE_2("******** Stream %s ********", stream->name);
+       TRACE_2("******** Stream %s ********", stream->name.c_str());
        TRACE_2("  fileName:             %s", stream->fileName.c_str());
        TRACE_2("  pathName:             %s", stream->pathName.c_str());
        TRACE_2("  maxLogFileSize:       %llu", stream->maxLogFileSize);
@@ -418,9 +362,6 @@ void log_free_stream_resources(log_strea
        if (stream->streamId != 0)
                lgs_stream_array_remove(stream->streamId);
 
-       if (stream->pat_node.key_info != NULL)
-               log_stream_remove(stream->name);
-
        if (stream->logFileFormat != NULL)
                free(stream->logFileFormat);
 
@@ -442,20 +383,19 @@ void log_stream_delete(log_stream_t **s)
        osafassert(s != NULL && *s != NULL);
        stream = *s;
 
-       TRACE_ENTER2("%s", stream->name);
+       TRACE_ENTER2("%s", stream->name.c_str());
 
        if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) {
                if (stream->streamType == STREAM_TYPE_APPLICATION) {
                        SaAisErrorT rv;
                        TRACE("Stream is closed, I am HA active so remove IMM 
object");
                        SaNameT objectName;
-                       strcpy((char *)objectName.value, stream->name);
-                       objectName.length = strlen((char *)objectName.value);
+                       osaf_extended_name_lend(stream->name.c_str(), 
&objectName);
                        rv = saImmOiRtObjectDelete(lgs_cb->immOiHandle, 
&objectName);
                        if (rv != SA_AIS_OK) {
                                /* no retry; avoid blocking LOG service #1886 */
                                LOG_WA("saImmOiRtObjectDelete returned %u for 
%s",
-                                               rv, stream->name);
+                                      rv, stream->name.c_str());
                        }
                }
        }
@@ -463,9 +403,6 @@ void log_stream_delete(log_stream_t **s)
        if (stream->streamId != 0)
                lgs_stream_array_remove(stream->streamId);
 
-       if (stream->pat_node.key_info != NULL)
-               log_stream_remove(stream->name);
-
        if (stream->logFileFormat != NULL)
                free(stream->logFileFormat);
 
@@ -491,33 +428,7 @@ static void init_log_stream_fd(log_strea
        *stream->p_fd = -1;     
 }
 
-/**
- * Create a new stream object. If HA state active, create the
- * correspronding IMM runtime object.
- * 
- * Note: log_stream_new() is replaced by this function.
- *       The new function is doing the same as the old but the possibility
- *       to create a stream without creating a corresponding runtime object
- *       is added. See creationFlag parameter
- *
- * Stream attributes[in]:
- * @param name
- * @param filename
- * @param pathname
- * @param maxLogFileSize
- * @param fixedLogRecordSize
- * @param logFullAction
- * @param maxFilesRotated
- * @param logFileFormat
- * @param streamType
- * @param stream_id
- * @param twelveHourModeFlag
- * @param logRecordId
- * 
- * @return log_stream_t*
- */
-log_stream_t *log_stream_new_1(
-       SaNameT *dn,
+int lgs_populate_log_stream(
        const std::string &filename,
        const std::string &pathname,
        SaUint64T maxLogFileSize,
@@ -526,76 +437,51 @@ log_stream_t *log_stream_new_1(
        SaUint32T maxFilesRotated,
        const char *logFileFormat,
        logStreamTypeT streamType,
-       int stream_id,
        SaBoolT twelveHourModeFlag,
        uint32_t logRecordId,
-       int creationFlag
+       log_stream_t *const o_stream
        )
 {
-       int rc;
-       log_stream_t *stream = NULL;
+       int rc = 0;
 
-       osafassert(dn != NULL);
-       TRACE_ENTER2("%s, l: %u", dn->value, dn->length);
+       o_stream->fileName = filename;
+       o_stream->pathName = pathname;
+       o_stream->maxLogFileSize = maxLogFileSize;
+       o_stream->fixedLogRecordSize = fixedLogRecordSize;
+       o_stream->haProperty = SA_TRUE;
+       o_stream->logFullAction = logFullAction;
+       o_stream->maxFilesRotated = maxFilesRotated;
+       o_stream->creationTimeStamp = lgs_get_SaTime();
+       o_stream->severityFilter = 0x7f;        /* by default all levels are 
allowed */
+       o_stream->streamType = streamType;
+       o_stream->twelveHourModeFlag = twelveHourModeFlag;
+       o_stream->logRecordId = logRecordId;
+       o_stream->stb_logRecordId = 0;
 
-       if (lgs_relative_path_check_ts(pathname)) {
-               goto done;
+       o_stream->logFileFormat = strdup(logFileFormat);
+       if (o_stream->logFileFormat == NULL) {
+               LOG_WA("Failed to allocate memory for logFileFormat");
+               rc = -1;
        }
 
-       stream = new (std::nothrow) log_stream_t();
-       if (stream == NULL) {
-               LOG_WA("log_stream_new calloc FAILED");
-               goto done;
-       }
-       memcpy(stream->name, dn->value, dn->length);
-       stream->name[SA_MAX_NAME_LENGTH] = '\0';
-       stream->fileName = filename;
-       stream->pathName = pathname;
-       stream->maxLogFileSize = maxLogFileSize;
-       stream->fixedLogRecordSize = fixedLogRecordSize;
-       stream->haProperty = SA_TRUE;
-       stream->logFullAction = logFullAction;
-       stream->streamId = stream_id;
-       stream->logFileFormat = strdup(logFileFormat);
-       if (stream->logFileFormat == NULL) {
-               log_stream_delete(&stream);
-               goto done;
-       }
-       stream->maxFilesRotated = maxFilesRotated;
-       stream->creationTimeStamp = lgs_get_SaTime();
-       stream->severityFilter = 0x7f;  /* by default all levels are allowed */
-       stream->streamType = streamType;
-       stream->twelveHourModeFlag = twelveHourModeFlag;
-       stream->logRecordId = logRecordId;
-       stream->stb_logRecordId = 0;
-       
-       /* Initiate local or shared stream file descriptor dependant on shared 
or
-        * split file system
-        */
-       init_log_stream_fd(stream);
+       return rc;
+}
 
-       /* Add stream to tree */
-       if (log_stream_add(&stream->pat_node, stream->name) != 
NCSCC_RC_SUCCESS) {
-               log_stream_delete(&stream);
-               goto done;
-       }
+/**
+ * Create a new rt app stream object.
+ *
+ * @param rt runtimem app stream
+ * @return SaAisErrorT
+ */
+SaAisErrorT lgs_create_rt_appstream(log_stream_t *const rt)
+{
+       SaAisErrorT rc = SA_AIS_OK;
+       TRACE_ENTER2("%s, l: %lu", rt->name.c_str(), rt->name.size());
 
-       /* Add stream to array */
-       if (stream->streamId == kInvalidId)
-               rc = lgs_stream_array_insert_new(stream, &stream->streamId);
-       else
-               rc = lgs_stream_array_insert(stream, stream->streamId);
-
-       if (rc < 0) {
-               LOG_WA("Add stream to array FAILED");
-               log_stream_delete(&stream);
-               goto done;
-       }
-
-       /* Create IMM runtime object for stream (if ACTIVE) */
+       /* Create IMM runtime object for rt (if ACTIVE) */
        if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) {
-               char *dndup = strdup(stream->name);
-               char *parent_name = strchr(stream->name, ',');
+               char *dndup = strdup(rt->name.c_str());
+               char *parent_name = strchr(const_cast<char 
*>(rt->name.c_str()), ',');
                char *rdnstr;
                SaNameT parent, *parentName = NULL;
 
@@ -603,10 +489,9 @@ log_stream_t *log_stream_new_1(
                        rdnstr = strtok(dndup, ",");
                        parent_name++;  /* FIX, vulnerable for malformed DNs */
                        parentName = &parent;
-                       strcpy((char *)parent.value, parent_name);
-                       parent.length = strlen((char *)parent.value);
+                       osaf_extended_name_lend(parent_name, &parent);
                } else
-                       rdnstr = stream->name;
+                       rdnstr = const_cast<char *>(rt->name.c_str());
 
                void *arr1[] = { &rdnstr };
                const SaImmAttrValuesT_2 attr_safLgStr = {
@@ -615,7 +500,7 @@ log_stream_t *log_stream_new_1(
                        .attrValuesNumber = 1,
                        .attrValues = arr1
                };
-               char *str2 = const_cast<char *>(stream->fileName.c_str());
+               char *str2 = const_cast<char *>(rt->fileName.c_str());
                void *arr2[] = { &str2 };
                const SaImmAttrValuesT_2 attr_safLogStreamFileName = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamFileName"),
@@ -623,7 +508,7 @@ log_stream_t *log_stream_new_1(
                        .attrValuesNumber = 1,
                        .attrValues = arr2
                };
-               char *str3 = const_cast<char *>(stream->pathName.c_str());
+               char *str3 = const_cast<char *>(rt->pathName.c_str());
                void *arr3[] = { &str3 };
                const SaImmAttrValuesT_2 attr_safLogStreamPathName = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamPathName"),
@@ -631,42 +516,42 @@ log_stream_t *log_stream_new_1(
                        .attrValuesNumber = 1,
                        .attrValues = arr3
                };
-               void *arr4[] = { &stream->maxLogFileSize };
+               void *arr4[] = { &rt->maxLogFileSize };
                const SaImmAttrValuesT_2 attr_saLogStreamMaxLogFileSize = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamMaxLogFileSize"),
                        .attrValueType = SA_IMM_ATTR_SAUINT64T,
                        .attrValuesNumber = 1,
                        .attrValues = arr4
                };
-               void *arr5[] = { &stream->fixedLogRecordSize };
+               void *arr5[] = { &rt->fixedLogRecordSize };
                const SaImmAttrValuesT_2 attr_saLogStreamFixedLogRecordSize = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamFixedLogRecordSize"),
                        .attrValueType = SA_IMM_ATTR_SAUINT32T,
                        .attrValuesNumber = 1,
                        .attrValues = arr5
                };
-               void *arr6[] = { &stream->haProperty };
+               void *arr6[] = { &rt->haProperty };
                const SaImmAttrValuesT_2 attr_saLogStreamHaProperty = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamHaProperty"),
                        .attrValueType = SA_IMM_ATTR_SAUINT32T,
                        .attrValuesNumber = 1,
                        .attrValues = arr6
                };
-               void *arr7[] = { &stream->logFullAction };
+               void *arr7[] = { &rt->logFullAction };
                const SaImmAttrValuesT_2 attr_saLogStreamLogFullAction = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamLogFullAction"),
                        .attrValueType = SA_IMM_ATTR_SAUINT32T,
                        .attrValuesNumber = 1,
                        .attrValues = arr7
                };
-               void *arr8[] = { &stream->maxFilesRotated };
+               void *arr8[] = { &rt->maxFilesRotated };
                const SaImmAttrValuesT_2 attr_saLogStreamMaxFilesRotated = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamMaxFilesRotated"),
                        .attrValueType = SA_IMM_ATTR_SAUINT32T,
                        .attrValuesNumber = 1,
                        .attrValues = arr8
                };
-               char *str9 = stream->logFileFormat;
+               char *str9 = rt->logFileFormat;
                void *arr9[] = { &str9 };
                const SaImmAttrValuesT_2 attr_saLogStreamLogFileFormat = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamLogFileFormat"),
@@ -674,14 +559,14 @@ log_stream_t *log_stream_new_1(
                        .attrValuesNumber = 1,
                        .attrValues = arr9
                };
-               void *arr10[] = { &stream->severityFilter };
+               void *arr10[] = { &rt->severityFilter };
                const SaImmAttrValuesT_2 attr_saLogStreamSeverityFilter = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamSeverityFilter"),
                        .attrValueType = SA_IMM_ATTR_SAUINT32T,
                        .attrValuesNumber = 1,
                        .attrValues = arr10
                };
-               void *arr11[] = { &stream->creationTimeStamp };
+               void *arr11[] = { &rt->creationTimeStamp };
                const SaImmAttrValuesT_2 attr_saLogStreamCreationTimestamp = {
                        .attrName = 
const_cast<SaImmAttrNameT>("saLogStreamCreationTimestamp"),
                        .attrValueType = SA_IMM_ATTR_SATIMET,
@@ -703,26 +588,26 @@ log_stream_t *log_stream_new_1(
                        NULL
                };
 
-               /* parentName needs to be configurable? */
                {
-                       SaAisErrorT rv;
-
-                       rv = saImmOiRtObjectCreate_2(lgs_cb->immOiHandle,
+                       /**
+                        * Have to have retry for Rt creation.
+                        * Rt update could consider removing retry to avoid 
blocking
+                        */
+                       rc = 
immutil_saImmOiRtObjectCreate_2(lgs_cb->immOiHandle,
                                                     
const_cast<SaImmClassNameT>("SaLogStream"),
                                                     parentName, attrValues);
                        free(dndup);
 
-                       if (rv != SA_AIS_OK) {
-                               /* no retry; avoid blocking LOG service #1886 */
+                       if (rc != SA_AIS_OK) {
                                LOG_WA("saImmOiRtObjectCreate_2 returned %u for 
%s, parent %s",
-                                     rv, stream->name, parent_name);
+                                      rc, rt->name.c_str(), parent_name);
+
                        }
                }
        }
 
- done:
-       TRACE_LEAVE();
-       return stream;
+       TRACE_LEAVE2("rc: %s", saf_error(rc));
+       return rc;
 }
 
 /**
@@ -732,21 +617,19 @@ log_stream_t *log_stream_new_1(
  *
  * @return log_stream_t*
  */
-log_stream_t *log_stream_new_2(SaNameT *name, int stream_id)
+log_stream_t *log_stream_new(const std::string &name, int stream_id)
 {
-       int rc;
+       int rc = 0;
        log_stream_t *stream = NULL;
 
-       osafassert(name != NULL);
-       TRACE_ENTER2("%s, l: %u", name->value, (unsigned int)name->length);
+       TRACE_ENTER2("%s, l: %lu", name.c_str(), name.size());
 
        stream = new (std::nothrow) log_stream_t();
        if (stream == NULL) {
                LOG_WA("calloc FAILED");
                goto done;
        }
-       memcpy(stream->name, name->value, name->length);
-       stream->name[SA_MAX_NAME_LENGTH] = '\0';
+       stream->name = name;
        stream->streamId = stream_id;
        stream->creationTimeStamp = lgs_get_SaTime();
        stream->severityFilter = 0x7f;  /* by default all levels are allowed */
@@ -756,12 +639,6 @@ log_stream_t *log_stream_new_2(SaNameT *
         */
        init_log_stream_fd(stream);     
 
-       /* Add stream to tree */
-       if (log_stream_add(&stream->pat_node, stream->name) != 
NCSCC_RC_SUCCESS) {
-               log_stream_delete(&stream);
-               goto done;
-       }
-
        /* Add stream to array */
        if (stream->streamId == kInvalidId)
                rc = lgs_stream_array_insert_new(stream, &stream->streamId);
@@ -774,7 +651,7 @@ log_stream_t *log_stream_new_2(SaNameT *
        }
 
  done:
-       TRACE_LEAVE();
+       TRACE_LEAVE2("rc: %d", rc);
        return stream;
 }
 
@@ -834,7 +711,7 @@ int log_file_open(
  */
 void log_stream_open_fileinit(log_stream_t *stream)
 {
-       TRACE_ENTER2("%s, numOpeners=%u", stream->name, stream->numOpeners);
+       TRACE_ENTER2("%s, numOpeners=%u", stream->name.c_str(), 
stream->numOpeners);
        osafassert(stream != NULL);
 
        /* first time open? */
@@ -882,7 +759,7 @@ void log_stream_close(log_stream_t **s, 
                lgs_cfg_get(LGS_IMM_LOG_ROOT_DIRECTORY));
 
        osafassert(stream != NULL);
-       TRACE_ENTER2("%s", stream->name);
+       TRACE_ENTER2("%s", stream->name.c_str());
        
        osafassert(stream->numOpeners > 0);
        stream->numOpeners--;
@@ -979,7 +856,7 @@ int log_stream_file_close(log_stream_t *
        int errno_ret;
 
        osafassert(stream != NULL);
-       TRACE_ENTER2("%s", stream->name);
+       TRACE_ENTER2("%s", stream->name.c_str());
 
        osafassert(stream->numOpeners > 0);
 
@@ -1254,7 +1131,7 @@ int log_stream_write_h(log_stream_t *str
        int write_errno=0;
 
        osafassert(stream != NULL && buf != NULL);
-       TRACE_ENTER2("%s", stream->name);
+       TRACE_ENTER2("%s", stream->name.c_str());
 
        /* Open files on demand e.g. on new active after fail/switch-over. This
         * enables LOG to cope with temporary file system problems. */
@@ -1266,7 +1143,7 @@ int log_stream_write_h(log_stream_t *str
                
                if (*stream->p_fd == -1) {
                        TRACE("%s - Initiating stream files \"%s\" Failed", 
__FUNCTION__,
-                                       stream->name);
+                             stream->name.c_str());
                } else {
                        TRACE("%s - stream files initiated", __FUNCTION__);
                }
@@ -1371,6 +1248,26 @@ log_stream_t *log_stream_get_by_id(uint3
 }
 
 /**
+ * Get the stream from database stream_array by its name (dn)
+ *
+ * @param name stream name (dn)
+ * @ret pointer to log_stream_t
+ */
+log_stream_t *log_stream_get_by_name(const std::string &name)
+{
+       log_stream_t *tmp = NULL;
+       uint32_t i = 0;
+
+       for (i = 0; i < stream_array_size; i++) {
+               tmp = stream_array[i];
+               if (tmp != NULL && name == tmp->name) return tmp;
+       }
+
+       return NULL;
+
+}
+
+/**
  * Insert stream into array at specified position.
  * @param stream
  * @param id
@@ -1466,13 +1363,12 @@ void log_stream_id_print()
        TRACE("  Current number of streams: %u", numb_of_streams);
        for (i = 0; i < stream_array_size; i++) {
                if (stream_array[i] != NULL)
-                       TRACE("    Id %u - %s", i, stream_array[i]->name);
+                       TRACE("    Id %u - %s", i, 
stream_array[i]->name.c_str());
        }
 }
 
 uint32_t log_stream_init()
 {
-       NCS_PATRICIA_PARAMS param;
        SaUint32T value;
 
        /* Get configuration of how many application streams we should allow. */
@@ -1486,11 +1382,7 @@ uint32_t log_stream_init()
                return NCSCC_RC_FAILURE;
        }
 
-       memset(&param, 0, sizeof(NCS_PATRICIA_PARAMS));
-
-       param.key_size = SA_MAX_NAME_LENGTH;
-
-       return ncs_patricia_tree_init(&stream_dn_tree, &param);
+       return NCSCC_RC_SUCCESS;
 }
 
 /**
@@ -1519,7 +1411,7 @@ int log_stream_config_change(bool create
        char *current_time = lgs_get_time(cur_time_in);
        std::string emptyStr = "";
 
-       TRACE_ENTER2("%s", stream->name);
+       TRACE_ENTER2("%s", stream->name.c_str());
 
        /* Peer sync needed due to change in logFileCurrent */
        
@@ -1527,7 +1419,7 @@ int log_stream_config_change(bool create
                /* lgs has not yet recieved any stream operation request after 
this swtchover/failover.
                 *  stream shall be opened on-request after a switchover, 
failover
                 */     
-               TRACE("log file of the stream: %s does not exist",stream->name);
+               TRACE("log file of the stream: %s does not exist", 
stream->name.c_str());
        } else {
                /* close the existing log file, and only when there is a valid 
fd */
 
diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.h 
b/osaf/services/saf/logsv/lgs/lgs_stream.h
--- a/osaf/services/saf/logsv/lgs/lgs_stream.h
+++ b/osaf/services/saf/logsv/lgs/lgs_stream.h
@@ -24,6 +24,7 @@
 #include <limits.h>
 
 #include "lgs_fmt.h"
+#include "osaf_extended_name.h"
 
 #define LGS_LOG_FILE_EXT ".log"
 #define LGS_LOG_FILE_CONFIG_EXT ".cfg"
@@ -34,10 +35,8 @@
  * attributes like file descriptor.
  */
 typedef struct log_stream {
-       NCS_PATRICIA_NODE pat_node;
-
        /* --- Corresponds to IMM Class SaLogStream/SaLogStreamConfig --- */
-       char name[SA_MAX_NAME_LENGTH + 1];      /* add for null termination */
+       std::string name;
        std::string fileName;
        std::string pathName;
        SaUint64T maxLogFileSize;
@@ -82,8 +81,7 @@ extern uint32_t log_stream_init();
 extern void log_stream_delete(log_stream_t **s);
 
 #define STREAM_NEW -1
-extern log_stream_t *log_stream_new_1(
-       SaNameT *name,
+extern int lgs_populate_log_stream(
        const std::string &filename,
        const std::string &pathname,
        SaUint64T maxLogFileSize,
@@ -92,13 +90,13 @@ extern log_stream_t *log_stream_new_1(
        SaUint32T maxFilesRotated,
        const char *logFileFormat,
        logStreamTypeT streamType,
-       int stream_id,
        SaBoolT twelveHourModeFlag,
        uint32_t logRecordId,
-       int creationFlag
+       log_stream_t *const o_stream
        );
 
-extern log_stream_t *log_stream_new_2(SaNameT *name, int stream_id);
+extern SaAisErrorT lgs_create_rt_appstream(log_stream_t *const rt);
+extern log_stream_t *log_stream_new(const std::string &name, int stream_id);
 
 extern void log_stream_open_fileinit(log_stream_t *stream);
 extern void log_initiate_stream_files(log_stream_t *stream);
@@ -120,11 +118,11 @@ extern int log_file_open(const std::stri
                         int *errno_save);
 
 /* Accessor functions */
-extern log_stream_t *log_stream_get_by_name(const char *name);
-extern log_stream_t *log_stream_getnext_by_name(const char *name);
 extern void log_stream_print(log_stream_t *stream);
 extern log_stream_t *log_stream_get_by_id(uint32_t id);
 extern bool check_max_stream();
 void log_free_stream_resources(log_stream_t *stream);
+unsigned int get_number_of_streams();
+extern log_stream_t *log_stream_get_by_name(const std::string &name);
 
 #endif
diff --git a/osaf/services/saf/logsv/lgs/lgs_util.cc 
b/osaf/services/saf/logsv/lgs/lgs_util.cc
--- a/osaf/services/saf/logsv/lgs/lgs_util.cc
+++ b/osaf/services/saf/logsv/lgs/lgs_util.cc
@@ -420,11 +420,14 @@ void lgs_send_write_log_ack(uint32_t cli
  */
 void lgs_free_write_log(const lgsv_write_log_async_req_t *param)
 {
+       TRACE_ENTER();
+
        if (param->logRecord->logHdrType == SA_LOG_GENERIC_HEADER) {
                SaLogGenericLogHeaderT *genLogH = 
&param->logRecord->logHeader.genericHdr;
                free(param->logRecord->logBuffer->logBuf);
                free(param->logRecord->logBuffer);
                free(genLogH->notificationClassId);
+               osaf_extended_name_free(const_cast<SaNameT 
*>(genLogH->logSvcUsrName));
                free((void *)genLogH->logSvcUsrName);
                free(param->logRecord);
        } else {
@@ -432,10 +435,14 @@ void lgs_free_write_log(const lgsv_write
                free(param->logRecord->logBuffer->logBuf);
                free(param->logRecord->logBuffer);
                free(ntfLogH->notificationClassId);
+               osaf_extended_name_free(ntfLogH->notifyingObject);
                free(ntfLogH->notifyingObject);
+               osaf_extended_name_free(ntfLogH->notificationObject);
                free(ntfLogH->notificationObject);
                free(param->logRecord);
        }
+
+       TRACE_LEAVE();
 }
 
 /**
@@ -593,7 +600,7 @@ int lgs_own_log_files_h(log_stream_t *st
        std::string dir_path;
        olfbgh_t *data_in = static_cast<olfbgh_t *>(malloc(sizeof(olfbgh_t)));
 
-       TRACE_ENTER2("stream %s",stream->name);
+       TRACE_ENTER2("stream %s", stream->name.c_str());
 
        /* Set in parameter dir_path */
        const std::string logsv_root_dir = static_cast<const char 
*>(lgs_cfg_get(LGS_IMM_LOG_ROOT_DIRECTORY));
@@ -834,3 +841,19 @@ bool lgs_is_valid_pathlength(const std::
 
        return ((rootlen + pathlen + filelen + LOG_TAIL_MAX) < PATH_MAX);
 }
+
+/**
+ * Check if the name is valid or not.
+ */
+bool lgs_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;
+
+}
diff --git a/osaf/services/saf/logsv/lgs/lgs_util.h 
b/osaf/services/saf/logsv/lgs/lgs_util.h
--- a/osaf/services/saf/logsv/lgs/lgs_util.h
+++ b/osaf/services/saf/logsv/lgs/lgs_util.h
@@ -81,4 +81,6 @@ bool lgs_is_valid_pathlength(const std::
 int lgs_init_timer(time_t timeout_s);
 void lgs_close_timer(int ufd);
 
+bool lgs_is_extended_name_valid(const SaNameT* name);
+
 #endif   /* ifndef __LGS_UTIL_H */


------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to