osaf/services/saf/ntfsv/ntfs/Makefile.am | 1 +
osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc | 3 ++
osaf/services/saf/ntfsv/ntfs/NtfFilter.cc | 44 ++++++++++++++++--------------
osaf/services/saf/ntfsv/ntfs/NtfLogger.cc | 40 ++++++++++++++++++++++++---
osaf/services/saf/ntfsv/ntfs/ntfs_evt.c | 7 +++-
osaf/services/saf/ntfsv/ntfs/ntfs_main.c | 5 +++
6 files changed, 72 insertions(+), 28 deletions(-)
(1) Retry logging with truncated notificationObject/notifyingObject as no long
dn support in LOG Service
(2) Fix longdn deallocation followed by memory owner
diff --git a/osaf/services/saf/ntfsv/ntfs/Makefile.am
b/osaf/services/saf/ntfsv/ntfs/Makefile.am
--- a/osaf/services/saf/ntfsv/ntfs/Makefile.am
+++ b/osaf/services/saf/ntfsv/ntfs/Makefile.am
@@ -39,6 +39,7 @@ osaf_execbindir = $(pkglibdir)
osaf_execbin_PROGRAMS = osafntfd
osafntfd_CPPFLAGS = \
+ -DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
-I$(top_srcdir)/osaf/libs/common/ntfsv/include \
-I$(top_srcdir)/osaf/tools/saflog/include
diff --git a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
--- a/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
+++ b/osaf/services/saf/ntfsv/ntfs/NtfAdmin.cc
@@ -301,6 +301,7 @@ void NtfAdmin::notificationReceivedUpdat
// we have got the notification
TRACE_2("notification %u received"
" again, skipped", (unsigned int)notificationId);
+ ntfsv_dealloc_notification(sendNotInfo);
delete sendNotInfo;
}
else
@@ -344,6 +345,8 @@ void NtfAdmin::notificationReceivedColdS
// we have got the notification
TRACE_2("notification %u received"
" again, skipped", (unsigned int)notificationId);
+ ntfsv_dealloc_notification(sendNotInfo);
+ delete sendNotInfo;
}
else
{
diff --git a/osaf/services/saf/ntfsv/ntfs/NtfFilter.cc
b/osaf/services/saf/ntfsv/ntfs/NtfFilter.cc
--- a/osaf/services/saf/ntfsv/ntfs/NtfFilter.cc
+++ b/osaf/services/saf/ntfsv/ntfs/NtfFilter.cc
@@ -24,9 +24,10 @@
*/
#include "NtfFilter.hh"
+#include <string>
#include "logtrace.h"
#include "ntfsv_mem.h"
-
+#include "osaf_extended_name.h"
/**
* Constructor.
*
@@ -115,22 +116,23 @@ bool NtfFilter::checkSourceIndicator(SaU
*/
bool NtfFilter::cmpSaNameT(SaNameT *n, SaNameT *n2)
{
- if (n->length != n2->length) {
- if (n->length < n2->length) {
- char *rv, *p = strndup((char*)n->value, n->length);
- char *p2 = strndup((char*)n2->value, n2->length);
- rv = strstr(p2,p);
- free(p);
- free(p2);
- if (rv)
- return true;
- }
- return false;
- }
+ bool rc;
+ SaConstStringT str2, str;
+ size_t length, length2;
- if(memcmp(n->value, n2->value, n2->length) == 0)
- return true;
- return false;
+ rc = false;
+ str = osaf_extended_name_borrow(n);
+ length = strlen(str);
+ str2 = osaf_extended_name_borrow(n2);
+ length2 = strlen(str2);
+
+ if (length != length2) {
+ if (length < length2)
+ rc = strstr(str2, str) != NULL;
+ } else if(memcmp(str, str2, length) == 0)
+ rc = true;
+
+ return rc;
}
/**
@@ -244,7 +246,7 @@ NtfAlarmFilter::NtfAlarmFilter(SaNtfAlar
NtfAlarmFilter::~NtfAlarmFilter()
{
TRACE_8("destructor p = %p", filter_);
- ntfsv_filter_alarm_free(filter_);
+ ntfsv_filter_alarm_free(filter_, true);
free(filter_);
}
@@ -325,7 +327,7 @@ NtfSecurityAlarmFilter::NtfSecurityAlarm
NtfSecurityAlarmFilter::~NtfSecurityAlarmFilter()
{
TRACE_8("destructor p = %p", filter_);
- ntfsv_filter_sec_alarm_free(filter_);
+ ntfsv_filter_sec_alarm_free(filter_, true);
free(filter_);
}
@@ -442,7 +444,7 @@ NtfFilter(SA_NTF_TYPE_OBJECT_CREATE_DELE
NtfObjectCreateDeleteFilter::~NtfObjectCreateDeleteFilter()
{
TRACE_8("destructor p = %p", filter_);
- ntfsv_filter_obj_cr_del_free(filter_);
+ ntfsv_filter_obj_cr_del_free(filter_, true);
free(filter_);
}
@@ -476,7 +478,7 @@ NtfStateChangeFilter::NtfStateChangeFilt
NtfStateChangeFilter::~NtfStateChangeFilter()
{
TRACE_8("destructor p = %p", filter_);
- ntfsv_filter_state_ch_free(filter_);
+ ntfsv_filter_state_ch_free(filter_, true);
free(filter_);
}
@@ -548,7 +550,7 @@ bool NtfAttributeChangeFilter::checkFilt
NtfAttributeChangeFilter::~NtfAttributeChangeFilter()
{
TRACE_8("destructor p = %p", filter_);
- ntfsv_filter_attr_ch_free(filter_);
+ ntfsv_filter_attr_ch_free(filter_, true);
free(filter_);
}
diff --git a/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc
b/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc
--- a/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc
+++ b/osaf/services/saf/ntfsv/ntfs/NtfLogger.cc
@@ -21,12 +21,14 @@
*/
#include <sys/poll.h>
+#include "saAis.h"
#include "saLog.h"
#include "NtfAdmin.hh"
#include "NtfLogger.hh"
#include "ntfs_com.h"
#include "logtrace.h"
#include "ntfsv_mem.h"
+#include "osaf_extended_name.h"
/* ========================================================================
* DEFINITIONS
@@ -250,13 +252,40 @@ SaAisErrorT NtfLogger::logNotification(N
&logRecord);
if (SA_AIS_OK != errorCode)
{
- LOG_ER("Failed to log an alarm or security alarm "
- "notification (%d)",
- errorCode);
+ LOG_ER("Failed to log an alarm or security alarm notification
(%d)", errorCode);
if (errorCode == SA_AIS_ERR_LIBRARY || errorCode ==
SA_AIS_ERR_BAD_HANDLE) {
LOG_ER("Fatal error SA_AIS_ERR_LIBRARY or
SA_AIS_ERR_BAD_HANDLE; exiting (%d)...", errorCode);
exit(EXIT_FAILURE);
- }
+ } else if (errorCode == SA_AIS_ERR_INVALID_PARAM) {
+ /* Retry to log truncated
notificationObject/notifyingObject because
+ * LOG Service has not supported long dn in
Opensaf 4.5
+ */
+ char short_dn[SA_MAX_UNEXTENDED_NAME_LENGTH];
+ memset(&short_dn, 0,
SA_MAX_UNEXTENDED_NAME_LENGTH);
+ SaNameT shortdn_notificationObject,
shortdn_notifyingObject;
+ if
(osaf_is_an_extended_name(ntfHeader->notificationObject)) {
+ strncpy(short_dn,
osaf_extended_name_borrow(ntfHeader->notificationObject)
+ ,
SA_MAX_UNEXTENDED_NAME_LENGTH - 1);
+ osaf_extended_name_lend(short_dn,
&shortdn_notificationObject);
+
logRecord.logHeader.ntfHdr.notificationObject = &shortdn_notificationObject;
+ }
+ if
(osaf_is_an_extended_name(ntfHeader->notifyingObject)) {
+ strncpy(short_dn,
osaf_extended_name_borrow(ntfHeader->notifyingObject)
+ ,
SA_MAX_UNEXTENDED_NAME_LENGTH - 1);
+ osaf_extended_name_lend(short_dn,
&shortdn_notifyingObject);
+
logRecord.logHeader.ntfHdr.notifyingObject = &shortdn_notifyingObject;
+ }
+ if (short_dn[0] != '\0') {
+ LOG_NO("Retry to log the truncated
notificationObject/notifyingObject");
+ if ((errorCode =
saLogWriteLogAsync(alarmStreamHandle,
+
notif->getNotificationId(),
+
SA_LOG_RECORD_WRITE_ACK,
+
&logRecord)) != SA_AIS_OK) {
+ LOG_ER("Failed to log the
truncated notificationObject/notifyingObject (%d)"
+ ,
errorCode);
+ }
+ }
+ }
goto end;
}
}
@@ -270,7 +299,8 @@ SaAisErrorT NtfLogger::logNotification(N
SaAisErrorT NtfLogger::initLog()
{
SaAisErrorT result;
- SaNameT alarmStreamName = {sizeof(SA_LOG_STREAM_ALARM),
SA_LOG_STREAM_ALARM};
+ SaNameT alarmStreamName;
+ osaf_extended_name_lend(SA_LOG_STREAM_ALARM, &alarmStreamName);
int first_try = 1;
TRACE_ENTER();
diff --git a/osaf/services/saf/ntfsv/ntfs/ntfs_evt.c
b/osaf/services/saf/ntfsv/ntfs/ntfs_evt.c
--- a/osaf/services/saf/ntfsv/ntfs/ntfs_evt.c
+++ b/osaf/services/saf/ntfsv/ntfs/ntfs_evt.c
@@ -20,6 +20,7 @@
#include <limits.h>
#include "ntfs.h"
#include "ntfsv_enc_dec.h"
+#include "osaf_extended_name.h"
#include "ntfs_imcnutil.h"
@@ -342,10 +343,12 @@ static void print_header(SaNtfNotificati
TRACE_1("eventType = %d", (int)*notificationHeader->eventType);
/* Notification Object */
- TRACE_1("notificationObject.length = %u\n",
notificationHeader->notificationObject->length);
+ TRACE_1("notificationObject.length = %zu\n",
+
osaf_extended_name_length(notificationHeader->notificationObject));
/* Notifying Object */
- TRACE_1("notifyingObject->length = %u\n",
notificationHeader->notifyingObject->length);
+ TRACE_1("notifyingObject->length = %zu\n",
+
osaf_extended_name_length(notificationHeader->notifyingObject));
/* Notification Class ID */
TRACE_1("VendorID = %d\nmajorID = %d\nminorID = %d\n",
diff --git a/osaf/services/saf/ntfsv/ntfs/ntfs_main.c
b/osaf/services/saf/ntfsv/ntfs/ntfs_main.c
--- a/osaf/services/saf/ntfsv/ntfs/ntfs_main.c
+++ b/osaf/services/saf/ntfsv/ntfs/ntfs_main.c
@@ -180,6 +180,11 @@ static uint32_t initialize()
uint32_t rc = NCSCC_RC_SUCCESS;;
TRACE_ENTER();
+ /* Set extended SaNameT environment var*/
+ if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0) {
+ LOG_ER("Failed to set environment variable:
SA_ENABLE_EXTENDED_NAMES");
+ goto done;
+ }
/* Determine how this process was started, by NID or AMF */
if (getenv("SA_AMF_COMPONENT_NAME") == NULL)
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel