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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel