osaf/services/saf/ntfsv/ntfimcnd/Makefile.am | 2 +
osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c | 91 +++++++++++---------
osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c | 54 ++++++------
3 files changed, 78 insertions(+), 69 deletions(-)
diff --git a/osaf/services/saf/ntfsv/ntfimcnd/Makefile.am
b/osaf/services/saf/ntfsv/ntfimcnd/Makefile.am
--- a/osaf/services/saf/ntfsv/ntfimcnd/Makefile.am
+++ b/osaf/services/saf/ntfsv/ntfimcnd/Makefile.am
@@ -27,6 +27,7 @@ osaf_execbindir = $(pkglibdir)
osaf_execbin_PROGRAMS = osafntfimcnd
osafntfimcnd_CPPFLAGS = \
+ -DSA_EXTENDED_NAME_SOURCE \
$(AM_CPPFLAGS) \
-I$(top_srcdir)/osaf/libs/common/ntfsv/include \
-I$(top_srcdir)/osaf/libs/common/immsv/include
@@ -39,6 +40,7 @@ osafntfimcnd_SOURCES = \
osafntfimcnd_LDADD = \
$(top_builddir)/osaf/tools/safimm/src/libimmutil.la \
$(top_builddir)/osaf/libs/core/libopensaf_core.la \
+ $(top_builddir)/osaf/libs/common/ntfsv/libntfsv_common.la \
$(top_builddir)/osaf/libs/saf/libSaAmf/libSaAmf.la \
$(top_builddir)/osaf/libs/saf/libSaImm/libSaImmOi.la \
$(top_builddir)/osaf/libs/saf/libSaImm/libSaImmOm.la \
diff --git a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c
b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c
--- a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c
+++ b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_imm.c
@@ -25,11 +25,13 @@
#include <unistd.h>
#include <errno.h>
+#include "saAis.h"
#include "saNtf.h"
#include "saAmf.h"
#include "logtrace.h"
#include "saf_error.h"
#include "ncsgl_defs.h"
+#include "osaf_extended_name.h"
#include "saImmOm.h"
#include "saImmOi.h"
@@ -54,9 +56,9 @@ static const SaImmOiImplementerNameT app
/* Used with function get_rdn_attr_name() */
struct {
- char attrName[SA_MAX_NAME_LENGTH];
- char saved_className[SA_MAX_NAME_LENGTH];
-} s_get_rdn_attr_name = {{0},{0}};
+ char* attrName;
+ char* saved_className;
+} s_get_rdn_attr_name = {NULL, NULL};;
/* Used with function get_created_dn() */
struct s_get_created_dn {
@@ -103,10 +105,17 @@ static char *get_rdn_attr_name(const SaI
TRACE_ENTER();
/* Just return the name if already looked up */
- if (strcmp(className, s_get_rdn_attr_name.saved_className) == 0) {
+ if (s_get_rdn_attr_name.saved_className != NULL &&
+ strcmp(className, s_get_rdn_attr_name.saved_className) == 0) {
goto done;
}
- strncpy(s_get_rdn_attr_name.saved_className, className,
SA_MAX_NAME_LENGTH-1);
+ s_get_rdn_attr_name.saved_className =
+ realloc(s_get_rdn_attr_name.saved_className, strlen(className)
+ 1);
+ if (s_get_rdn_attr_name.saved_className == NULL) {
+ LOG_ER("Failed to realloc memory");
+ goto error;
+ }
+ memcpy(s_get_rdn_attr_name.saved_className, className,
strlen(className) + 1);
/* Get class description */
msecs_waited = 0;
@@ -128,11 +137,17 @@ static char *get_rdn_attr_name(const SaI
}
/* Find the name of the attribute with the RDN flag set */
- s_get_rdn_attr_name.attrName[0] = '\0';
for (i=0; attrDescr[i] != NULL; i++) {
if (attrDescr[i]->attrFlags & SA_IMM_ATTR_RDN) {
-
strncpy(s_get_rdn_attr_name.attrName,attrDescr[i]->attrName,SA_MAX_NAME_LENGTH);
- s_get_rdn_attr_name.attrName[SA_MAX_NAME_LENGTH-1] =
'\0';
+ s_get_rdn_attr_name.attrName =
+ realloc(s_get_rdn_attr_name.attrName,
+ strlen(attrDescr[i]->attrName)
+ 1);
+ if (s_get_rdn_attr_name.attrName == NULL) {
+ LOG_ER("Failed to realloc memory");
+ goto error;
+ }
+ memcpy(s_get_rdn_attr_name.attrName,
attrDescr[i]->attrName
+ ,
strlen(attrDescr[i]->attrName) + 1);
break;
}
}
@@ -178,7 +193,7 @@ static SaNameT *get_created_dn(const SaI
{
int i = 0;
- SaNameT object_rdn;
+ const char* object_rdn = "";
char *attrName;
TRACE_ENTER();
@@ -190,27 +205,30 @@ static SaNameT *get_created_dn(const SaI
for (i=0; attr[i] != NULL; i++) {
if( strcmp(attr[i]->attrName, attrName) == 0) {
if (attr[i]->attrValueType == SA_IMM_ATTR_SASTRINGT) {
- strncpy((char*)object_rdn.value,
*((char**)attr[i]->attrValues[0]),
- SA_MAX_NAME_LENGTH);
- object_rdn.value[SA_MAX_NAME_LENGTH-1] = '\0';
- object_rdn.length =
strlen((char*)object_rdn.value);
+ object_rdn = *((char**) attr[i]->attrValues[0]);
} else if (attr[i]->attrValueType ==
SA_IMM_ATTR_SANAMET) {
- memcpy(&object_rdn, attr[i]->attrValues[0],
sizeof(SaNameT));
+ object_rdn = osaf_extended_name_borrow(
+
(SaNameT*)(attr[i]->attrValues[0]));
}
break;
}
}
/* Create the DN */
- s_get_created_dn.objectName.value[0] = 0;
- if (parentName->length > 0) {
-
snprintf((char*)s_get_created_dn.objectName.value,SA_MAX_NAME_LENGTH,"%s,%s",
- (char*)object_rdn.value,
(char*)parentName->value);
+ osaf_extended_name_free(&s_get_created_dn.objectName);
+ char* objectName;
+ if (!osaf_is_extended_name_empty(parentName)) {
+ size_t rdn_len = strlen(object_rdn);
+ size_t parent_len = osaf_extended_name_length(parentName);
+ objectName = malloc(rdn_len + parent_len + 2);
+ memcpy(objectName, object_rdn, rdn_len);
+ objectName[rdn_len] = ',';
+ memcpy(objectName + rdn_len + 1,
osaf_extended_name_borrow(parentName)
+
, parent_len + 1);
} else {
-
snprintf((char*)s_get_created_dn.objectName.value,SA_MAX_NAME_LENGTH,"%s",
- (char*)object_rdn.value);
+ objectName = strdup(object_rdn);
}
- s_get_created_dn.objectName.length =
strlen((char*)s_get_created_dn.objectName.value);
+ osaf_extended_name_steal(objectName, &s_get_created_dn.objectName);
TRACE_LEAVE();
return &s_get_created_dn.objectName;
@@ -247,15 +265,12 @@ static SaNameT *get_operation_invoke_nam
}
/* Get the value from Admin owner name or Implementer name */
- s_get_operation_invoke_name_create.iname.length = 0;
- s_get_operation_invoke_name_create.iname.value[0] = 0;
+ osaf_extended_name_free(&s_get_operation_invoke_name_create.iname);
+ osaf_extended_name_clear(&s_get_operation_invoke_name_create.iname);
for (i=0; attr[i] != NULL; i++) {
if( strcmp(attr[i]->attrName, attrName) == 0) {
-
strncpy((char*)s_get_operation_invoke_name_create.iname.value,
- *((char**)attr[i]->attrValues[0]),
SA_MAX_NAME_LENGTH);
-
s_get_operation_invoke_name_create.iname.value[SA_MAX_NAME_LENGTH-1] = '\0';
- s_get_operation_invoke_name_create.iname.length =
-
strlen((char*)s_get_operation_invoke_name_create.iname.value);
+ osaf_extended_name_alloc(*((char**)
attr[i]->attrValues[0]),
+ &s_get_operation_invoke_name_create.iname);
goto done;
}
}
@@ -299,16 +314,12 @@ static SaNameT *get_operation_invoke_nam
}
/* Get the value from Admin owner name or Implementer name */
- s_get_operation_invoke_name_modify.iname.length = 0;
- s_get_operation_invoke_name_modify.iname.value[0] = 0;
+ osaf_extended_name_free(&s_get_operation_invoke_name_modify.iname);
+ osaf_extended_name_clear(&s_get_operation_invoke_name_modify.iname);
for (i=0; attrMods[i] != NULL; i++) {
if( strcmp(attrMods[i]->modAttr.attrName, attrName) == 0) {
-
strncpy((char*)s_get_operation_invoke_name_modify.iname.value,
-
*((char**)attrMods[i]->modAttr.attrValues[0]),
- SA_MAX_NAME_LENGTH);
-
s_get_operation_invoke_name_modify.iname.value[SA_MAX_NAME_LENGTH-1] = '\0';
- s_get_operation_invoke_name_modify.iname.length =
-
strlen((char*)s_get_operation_invoke_name_modify.iname.value);
+ osaf_extended_name_alloc(*((char**)
attrMods[i]->modAttr.attrValues[0]),
+ &s_get_operation_invoke_name_modify.iname);
goto done;
}
}
@@ -335,10 +346,8 @@ static SaAisErrorT saImmOiCcbObjectDelet
SaAisErrorT rc = SA_AIS_OK;
struct CcbUtilCcbData *ccbUtilCcbData;
struct CcbUtilOperationData *ccbUtilOperationData;
- const SaNameT invoke_name = {
- .length = 0,
- .value[0]='\0'
- };
+ SaNameT invoke_name;
+ osaf_extended_name_clear(&invoke_name);
int internal_rc = 0;
TRACE_ENTER();
@@ -815,4 +824,4 @@ void ntfimcn_special_applier_clear(void)
TRACE("%s saImmOiImplementerClear failed
%s",__FUNCTION__,saf_error(rc));
}
}
-}
\ No newline at end of file
+}
diff --git a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c
b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c
--- a/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c
+++ b/osaf/services/saf/ntfsv/ntfimcnd/ntfimcn_notifier.c
@@ -27,11 +27,14 @@
#include <stdbool.h>
#include "ncsgl_defs.h"
+#include "saAis.h"
#include "saNtf.h"
#include "saAmf.h"
#include "saImm.h"
#include "logtrace.h"
#include "saf_error.h"
+#include "ntfsv_mem.h"
+#include "osaf_extended_name.h"
#include "ntfimcn_main.h"
@@ -163,13 +166,12 @@ done:
TRACE_ENTER();
/* Allocate string for attribute name */
- name_len = strlen(info_value) + 1;
- if (name_len > SA_MAX_NAME_LENGTH) {
- name_len = SA_MAX_NAME_LENGTH;
- }
+ name_len = strlen(info_value);
+ if (name_len > kMaxDnLength)
+ name_len = kMaxDnLength;
rc = saNtfPtrValAllocate(
notificationHandle,
- name_len,
+ name_len + 1,
(void **)&name_ptr,
&additionalInfo[add_index].infoValue);
if (rc != SA_AIS_OK) {
@@ -182,10 +184,8 @@ done:
/* Fill in additional info of Index */
additionalInfo[add_index].infoId = add_index;
additionalInfo[add_index].infoType = SA_NTF_VALUE_STRING;
- strncpy((char *)name_ptr, info_value, name_len);
- if (name_len == SA_MAX_NAME_LENGTH) {
- name_ptr[SA_MAX_NAME_LENGTH] = '\0';
- }
+ memcpy(name_ptr, info_value, name_len);
+ name_ptr[name_len] = '\0';
done:
TRACE_LEAVE();
@@ -317,8 +317,8 @@ static int fill_attribute_value(
case SA_IMM_ATTR_SANAMET: /* SaNameT */
name_value = *(SaNameT *)attrValues_in[attrValues_index_in];
internal_rc = fill_value_array(notificationHandle,
- name_value.value,
- name_value.length,
+
(SaUint8T*)osaf_extended_name_borrow(&name_value),
+ strlen(osaf_extended_name_borrow(&name_value)),
value_out);
if (internal_rc != 0) {
LOG_ER("%s: fill_value_array failed",__FUNCTION__);
@@ -394,14 +394,13 @@ static void fill_notification_header_com
/* Notification Object. DN of handled object */
sa_name_ptr = notificationHeader->notificationObject;
- strncpy((char*)sa_name_ptr->value, (char *)dist_name->value,
SA_MAX_NAME_LENGTH);
- sa_name_ptr->value[SA_MAX_NAME_LENGTH-1] = 0;
- sa_name_ptr->length = strlen((char *)sa_name_ptr->value) + 1;
-
+ ntfs_sanamet_alloc(osaf_extended_name_borrow(dist_name)
+ ,
osaf_extended_name_length(dist_name) + 1
+ , sa_name_ptr);
/* Notifying Object. A constant string */
sa_name_ptr = notificationHeader->notifyingObject;
- strncpy((char
*)sa_name_ptr->value,NTFIMCN_NOTIFYING_OBJECT,SA_MAX_NAME_LENGTH);
- sa_name_ptr->length = sizeof(NTFIMCN_NOTIFYING_OBJECT);
+ ntfs_sanamet_alloc(NTFIMCN_NOTIFYING_OBJECT,
sizeof(NTFIMCN_NOTIFYING_OBJECT)
+ , sa_name_ptr);
/* Notification Class Identifier. Constant identifier
* except for minor Id that's dependent on event type
@@ -711,7 +710,7 @@ done:
*/
static int fill_attribute_info_modify(
SaImmOiCcbIdT CcbId,
- SaStringT invoke_name,
+ SaConstStringT invoke_name,
const SaImmAttrModificationT_2 **imm_attr_mods_in,
SaNtfAttributeChangeNotificationT
*SaNtfAttributeChangeNotification,
SaBoolT ccbLast)
@@ -724,7 +723,7 @@ static int fill_attribute_info_modify(
SaImmAttrModificationT_2 my_imm_attr_mod;
SaNtfAttributeChangeT *changedAttributes=NULL;
SaImmAttrValueT SaImmAttrValue=NULL;
- char *string_v[1];
+ SaConstStringT string_v[1];
TRACE_ENTER();
@@ -951,7 +950,7 @@ done:
* @return (-1) on error
*/
static int fill_attribute_info_delete(SaImmOiCcbIdT CcbId,
- SaStringT invoke_name,
+ SaConstStringT invoke_name,
SaNtfObjectCreateDeleteNotificationT
*SaNtfObjectNotification,
SaBoolT ccbLast)
{
@@ -960,7 +959,7 @@ static int fill_attribute_info_delete(Sa
SaNtfAttributeT *ntf_attributes;
/*SaImmAttrValueT my_imm_attr_value;*/
SaImmAttrValueT my_imm_attr_value[1]; /* COV fix */
- char *string_v[1];
+ SaConstStringT string_v[1];
TRACE_ENTER();
@@ -1261,7 +1260,7 @@ int ntfimcn_send_object_modify_notificat
SaAisErrorT rc = SA_AIS_OK;
int internal_rc = 0;
SaImmOiCcbIdT CcbId;
- char invoke_name_str[SA_MAX_NAME_LENGTH+1];
+ SaConstStringT invoke_name_str;
SaNtfAttributeChangeNotificationT SaNtfAttributeChangeNotification;
SaUint64T num_attributes = 4;
@@ -1295,7 +1294,7 @@ int ntfimcn_send_object_modify_notificat
* pointer to a SaNameT. This should be changed to a SaStringT.
* Until then a conversion is needed.
*/
-
snprintf(invoke_name_str,(invoke_name->length+1),"%s",invoke_name->value);
+ invoke_name_str = osaf_extended_name_borrow(invoke_name);
#endif
/* Find out how many attributes we have to handle */
@@ -1416,7 +1415,7 @@ int ntfimcn_send_object_delete_notificat
SaNtfObjectCreateDeleteNotificationT SaNtfObjectDeleteNotification;
SaUint64T num_attributes = 3;
- char invoke_name_str[SA_MAX_NAME_LENGTH+1];
+ SaConstStringT invoke_name_str;
TRACE_ENTER();
CcbId = CcbUtilOperationData->ccbId;
@@ -1458,9 +1457,7 @@ int ntfimcn_send_object_delete_notificat
/* Fill in Additional info and corresponding Attribute list
*/
if (num_attributes > 0) {
- memcpy(invoke_name_str,invoke_name->value,
- invoke_name->length);
- invoke_name_str[invoke_name->length] = '\0';
+ invoke_name_str = osaf_extended_name_borrow(invoke_name);
internal_rc = fill_attribute_info_delete(CcbId,
invoke_name_str,
&SaNtfObjectDeleteNotification,
@@ -1519,7 +1516,8 @@ int ntfimcn_send_lost_cm_notification(vo
{
SaAisErrorT rc = SA_AIS_OK;
int internal_rc = 0;
- SaNameT object_name = {12,"osafntfimcnd"};
+ SaNameT object_name;
+ osaf_extended_name_lend("osafntfimcnd", &object_name);
SaNtfStateChangeNotificationT SaNtfStateChangeNotification;
const SaUint64T num_statechanges=0;
------------------------------------------------------------------------------
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