Ack on the third (tools) patch.

/AndersBj

Zoran Milinkovic wrote:
>  osaf/tools/safimm/immadm/Makefile.am       |   1 +
>  osaf/tools/safimm/immadm/imm_admin.c       |  14 +--
>  osaf/tools/safimm/immcfg/Makefile.am       |   1 +
>  osaf/tools/safimm/immcfg/imm_cfg.c         |  22 ++++--
>  osaf/tools/safimm/immcfg/imm_import.cc     |  61 ++++++++++---------
>  osaf/tools/safimm/immdump/Makefile.am      |   1 +
>  osaf/tools/safimm/immdump/imm_xmlw_dump.cc |  10 +-
>  osaf/tools/safimm/immfind/Makefile.am      |   1 +
>  osaf/tools/safimm/immfind/imm_find.c       |  16 ++--
>  osaf/tools/safimm/immlist/Makefile.am      |   1 +
>  osaf/tools/safimm/immlist/imm_list.c       |   8 +-
>  osaf/tools/safimm/src/immutil.c            |  92 
> ++++++++++++++++++-----------
>  12 files changed, 129 insertions(+), 99 deletions(-)
>
>
> The patch contains a code for the support long DNs in IMM tools
>
> diff --git a/osaf/tools/safimm/immadm/Makefile.am 
> b/osaf/tools/safimm/immadm/Makefile.am
> --- a/osaf/tools/safimm/immadm/Makefile.am
> +++ b/osaf/tools/safimm/immadm/Makefile.am
> @@ -21,6 +21,7 @@ MAINTAINERCLEANFILES = Makefile.in
>  bin_PROGRAMS = immadm
>  
>  immadm_CPPFLAGS = \
> +     -DSA_EXTENDED_NAME_SOURCE \
>       $(AM_CPPFLAGS) \
>       -I$(top_srcdir)/osaf/tools/safimm/include \
>       -I$(top_srcdir)/osaf/libs/common/immsv/include
> diff --git a/osaf/tools/safimm/immadm/imm_admin.c 
> b/osaf/tools/safimm/immadm/imm_admin.c
> --- a/osaf/tools/safimm/immadm/imm_admin.c
> +++ b/osaf/tools/safimm/immadm/imm_admin.c
> @@ -201,7 +201,7 @@ void print_param(SaImmAdminOperationPara
>                       }
>                       break;
>               case SA_IMM_ATTR_SANAMET :
> -                     printf("%-50s %-12s %s\n", param->paramName, 
> "SA_NAME_T", (*((SaNameT *)param->paramBuffer)).value);
> +                     printf("%-50s %-12s %s\n", param->paramName, 
> "SA_NAME_T", saAisNameBorrow((SaNameT*) param->paramBuffer));
>                       break;
>               case SA_IMM_ATTR_SAFLOATT :
>                       printf("%-50s %-12s %f\n", param->paramName, 
> "SA_FLOAT_T", (*((SaFloatT *)param->paramBuffer)));
> @@ -371,10 +371,9 @@ int main(int argc, char *argv[])
>       }
>  
>       if((optind < argc) && (!explicitAdmo)) {
> -             strncpy((char *)objectName.value, argv[optind], 
> SA_MAX_NAME_LENGTH);
> -             objectName.length = strlen((char *)objectName.value);
> +             saAisNameLend(argv[optind], &objectName);
>  
> -             if(strcmp((char *) objectName.value, OPENSAF_IMM_OBJECT_DN)==0) 
> {
> +             if(strcmp(saAisNameBorrow(&objectName), 
> OPENSAF_IMM_OBJECT_DN)==0) {
>                       releaseAdmo=false;
>                       adminOwnerName = (SaImmAdminOwnerNameT) 
> malloc(strlen(OPENSAF_IMM_SERVICE_NAME) + 1);
>                       strcpy(adminOwnerName, OPENSAF_IMM_SERVICE_NAME);
> @@ -390,18 +389,17 @@ int main(int argc, char *argv[])
>  
>       /* Remaining arguments should be object names on which the admin op 
> should be performed. */
>       while (optind < argc) {
> -             strncpy((char *)objectName.value, argv[optind], 
> SA_MAX_NAME_LENGTH);
> -             objectName.length = strlen((char *)objectName.value);
> +             saAisNameLend(argv[optind], &objectName);
>  
>               error = immutil_saImmOmAdminOwnerSet(ownerHandle, objectNames, 
> SA_IMM_ONE);
>               if (error != SA_AIS_OK) {
>                       if (error == SA_AIS_ERR_NOT_EXIST) {
> -                             if(strcmp(adminOwnerName, (const char *) 
> objectName.value)==0) {
> +                             if(strcmp(adminOwnerName, 
> saAisNameBorrow(&objectName))==0) {
>                                       fprintf(stderr, "AdminOwnerName == 
> ImplementerName (%s) - Could be direct admin-op on OI\n", adminOwnerName);
>                                       goto retry;
>                               }
>                               fprintf(stderr, "error - saImmOmAdminOwnerSet - 
> object '%s' does not exist\n",
> -                                     objectName.value);
> +                                     saAisNameBorrow(&objectName));
>                       }
>                       else
>                               fprintf(stderr, "error - saImmOmAdminOwnerSet 
> FAILED: %s\n", saf_error(error));
> diff --git a/osaf/tools/safimm/immcfg/Makefile.am 
> b/osaf/tools/safimm/immcfg/Makefile.am
> --- a/osaf/tools/safimm/immcfg/Makefile.am
> +++ b/osaf/tools/safimm/immcfg/Makefile.am
> @@ -27,6 +27,7 @@ immcfg_CXXFLAGS = \
>       @XML2_CFLAGS@
>  
>  immcfg_CPPFLAGS = \
> +     -DSA_EXTENDED_NAME_SOURCE \
>       $(AM_CPPFLAGS) \
>       -I$(top_srcdir)/osaf/tools/safimm/include \
>       -I$(top_srcdir)/osaf/libs/common/immsv/include \
> diff --git a/osaf/tools/safimm/immcfg/imm_cfg.c 
> b/osaf/tools/safimm/immcfg/imm_cfg.c
> --- a/osaf/tools/safimm/immcfg/imm_cfg.c
> +++ b/osaf/tools/safimm/immcfg/imm_cfg.c
> @@ -44,6 +44,7 @@
>  #include <saf_error.h>
>  #include <immsv_api.h>
>  
> +#include "osaf_extended_name.h"
>  
>  static SaVersionT immVersion = { 'A', 2, 13 };
>  int verbose = 0;
> @@ -183,6 +184,8 @@ static void free_attr_value(SaImmValueTy
>       if(attrValue) {
>               if(attrValueType == SA_IMM_ATTR_SASTRINGT)
>                       free(*((SaStringT *)attrValue));
> +             else if(attrValueType == SA_IMM_ATTR_SANAMET)
> +                     osaf_extended_name_free((SaNameT*) attrValue);
>               else if(attrValueType == SA_IMM_ATTR_SAANYT)
>                       free(((SaAnyT*)attrValue)->bufferAddr);
>               free(attrValue);
> @@ -233,7 +236,7 @@ static SaImmAttrModificationT_2 *new_att
>       SaImmAttrModificationTypeT modType = SA_IMM_ATTR_VALUES_REPLACE;
>  
>       if (className == NULL) {
> -             fprintf(stderr, "Object with DN '%s' does not exist\n", 
> objectName->value);
> +             fprintf(stderr, "Object with DN '%s' does not exist\n", 
> osaf_extended_name_borrow(objectName));
>               res = -1;
>               goto done;
>       }
> @@ -434,7 +437,7 @@ int object_create(const SaNameT **object
>  
>       i = 0;
>       while (objectNames[i] != NULL) {
> -             str = strdup((char*)objectNames[i]->value);
> +             str = strdup(osaf_extended_name_borrow(objectNames[i]));
>               if ((delim = strchr(str, ',')) != NULL) {
>                       /* a parent exist */
>                       while (delim && *(delim - 1) == 0x5c) {
> @@ -451,14 +454,15 @@ int object_create(const SaNameT **object
>                                       goto done;
>                               }
>  
> -                             dn.length = sprintf((char*)dn.value, "%s", 
> parent);
> +
> +                             osaf_extended_name_lend(parent, &dn);
>                               parentName = &dn;
>                               parentNames[0] = parentName;
>  
>                               VERBOSE_INFO("call saImmOmAdminOwnerSet for 
> parent: %s\n", parent);
>                               if ((error = 
> immutil_saImmOmAdminOwnerSet(ownerHandle, parentNames, SA_IMM_SUBTREE)) != 
> SA_AIS_OK) {
>                                       if (error == SA_AIS_ERR_NOT_EXIST)
> -                                             fprintf(stderr, "error - parent 
> '%s' does not exist\n", dn.value);
> +                                             fprintf(stderr, "error - parent 
> '%s' does not exist\n", osaf_extended_name_borrow(&dn));
>                                       else {
>                                               fprintf(stderr, "error - 
> saImmOmAdminOwnerSet FAILED: %s\n", saf_error(error));
>                                               goto done;
> @@ -565,7 +569,7 @@ int object_modify(const SaNameT **object
>  
>       if ((error = immutil_saImmOmAdminOwnerSet(ownerHandle, (const SaNameT 
> **)objectNames, SA_IMM_ONE)) != SA_AIS_OK) {
>               if (error == SA_AIS_ERR_NOT_EXIST)
> -                     fprintf(stderr, "error - object '%s' does not exist\n", 
> objectNames[0]->value);
> +                     fprintf(stderr, "error - object '%s' does not exist\n", 
> osaf_extended_name_borrow(objectNames[0]));
>               else
>                       fprintf(stderr, "error - saImmOmAdminOwnerSet FAILED: 
> %s\n", saf_error(error));
>  
> @@ -656,7 +660,7 @@ int object_delete(const SaNameT **object
>       while (objectNames[i] != NULL) {
>               if ((error = immutil_saImmOmCcbObjectDelete(ccbHandle, 
> objectNames[i])) != SA_AIS_OK) {
>                       fprintf(stderr, "error - saImmOmCcbObjectDelete for 
> '%s' FAILED: %s\n",
> -                             objectNames[i]->value, saf_error(error));
> +                             osaf_extended_name_borrow(objectNames[i]), 
> saf_error(error));
>  
>                       SaAisErrorT rc2 = saImmOmCcbGetErrorStrings(ccbHandle, 
> &errStrings);
>                       if(errStrings) {
> @@ -746,8 +750,8 @@ static int class_change(SaImmHandleT imm
>  {
>       SaAisErrorT error;
>       SaImmAccessorHandleT accessorHandle;
> -     SaNameT opensafImmObjectName = { 
> strlen("opensafImm=opensafImm,safApp=safImmService"),
> -                                                                     
> "opensafImm=opensafImm,safApp=safImmService" };
> +     SaNameT opensafImmObjectName;
> +     osaf_extended_name_lend("opensafImm=opensafImm,safApp=safImmService", 
> &opensafImmObjectName);
>       const SaNameT *objectNameList[] = { &opensafImmObjectName, NULL };
>       SaImmAttrNameT opensafImmAttrName[2] = { "opensafImmNostdFlags", NULL };
>       SaImmAttrValuesT_2 **attributes;
> @@ -1402,7 +1406,7 @@ static int imm_operation(int argc, char 
>                       objectNames = realloc(objectNames, (objectNames_len + 
> 1) * sizeof(SaNameT*));
>                       objectName = objectNames[objectNames_len - 1] = 
> malloc(sizeof(SaNameT));
>                       objectNames[objectNames_len++] = NULL;
> -                     objectName->length = snprintf((char*)objectName->value, 
> SA_MAX_NAME_LENGTH, "%s", argv[optind++]);
> +                     osaf_extended_name_lend(argv[optind++], objectName);
>               }
>       }
>  
> diff --git a/osaf/tools/safimm/immcfg/imm_import.cc 
> b/osaf/tools/safimm/immcfg/imm_import.cc
> --- a/osaf/tools/safimm/immcfg/imm_import.cc
> +++ b/osaf/tools/safimm/immcfg/imm_import.cc
> @@ -37,6 +37,8 @@
>  #include <saImmOm.h>
>  #include <immutil.h>
>  
> +#include "osaf_extended_name.h"
> +
>  #define MAX_DEPTH 10
>  #define MAX_CHAR_BUFFER_SIZE 8192  //8k
>  
> @@ -240,6 +242,8 @@ static void free_attr_value(SaImmValueTy
>       if(attrValue) {
>               if(attrValueType == SA_IMM_ATTR_SASTRINGT)
>                       free(*((SaStringT *)attrValue));
> +             else if(attrValueType == SA_IMM_ATTR_SANAMET)
> +                     osaf_extended_name_free((SaNameT*) attrValue);
>               else if(attrValueType == SA_IMM_ATTR_SAANYT)
>                       free(((SaAnyT*)attrValue)->bufferAddr);
>               free(attrValue);
> @@ -308,6 +312,8 @@ static void free_parserState(ParserState
>                       if(it->attrDefaultValue) {
>                               if(it->attrValueType == SA_IMM_ATTR_SASTRINGT 
> && *(void **)(it->attrDefaultValue))
>                                       free(*(void **)(it->attrDefaultValue));
> +                             else if(it->attrValueType == 
> SA_IMM_ATTR_SANAMET && (SaNameT*) (it->attrDefaultValue))
> +                                     osaf_extended_name_free((SaNameT*) 
> (it->attrDefaultValue));
>                               else if(it->attrValueType == SA_IMM_ATTR_SAANYT 
> && (SaAnyT *)(it->attrDefaultValue))
>                                       free(((SaAnyT 
> *)(it->attrDefaultValue))->bufferAddr);
>                               free(it->attrDefaultValue);
> @@ -330,7 +336,9 @@ static void free_parserState(ParserState
>                               if(it->attrValueType == SA_IMM_ATTR_SASTRINGT
>                                               || it->attrValueType == 
> SA_IMM_ATTR_SAANYT) {
>                                       free(*(void **)(it->attrValues[i]));
> -                             }
> +                             } else if (it->attrValueType == 
> SA_IMM_ATTR_SANAMET) {
> +                                     osaf_extended_name_free((SaNameT*) 
> it->attrValues[i]);
> +                                }
>                               free(it->attrValues[i]);
>                       }
>                       free(it->attrValues);
> @@ -491,13 +499,10 @@ void setAdminOwnerHelper(ParserState* st
>        * This function checks if there is a need to call
>          saImmOmAdminOwnerSet on the parent or if a call is redundant */
>  
> -     // safe conversion of SaNameT to  char*
> -     int len = parentOfObject->length;
> -     char tmpStr[len+1];
> -     strncpy(tmpStr, (char*) parentOfObject->value, len);
> -     tmpStr[len] = '\0';
> -
> -     if (len < 1) {
> +     // safe conversion of SaNameT to const char*
> +     const char* tmpStr = osaf_extended_name_borrow(parentOfObject);
> +
> +     if (osaf_is_extended_name_empty(parentOfObject)) {
>               // this is a root object, no need to set AdminOwner
>               LOG_IN("  This is a root object, no need to call 
> saImmOmAdminOwnerSet");
>               // state->adminOwnerSetSet.insert(state->objectName);
> @@ -637,14 +642,11 @@ static void createImmObject(ParserState*
>       /* Set the class name */
>       className = state->objectClass;
>  
> -     objectName.length = snprintf((char*) objectName.value,
> -                                                              
> sizeof(objectName.value),
> -                                                              "%s", 
> state->objectName);
> -
>       /* Set the parent name */
> -     parentName.length = 0;
> +     osaf_extended_name_clear(&parentName);
>       if (state->objectName != NULL) {
>               char* parent;
> +             osaf_extended_name_lend(state->objectName, &objectName);
>  
>               /* ',' is the delimeter */
>               /* but '\' is the escape character, used for association 
> objects */
> @@ -658,11 +660,7 @@ static void createImmObject(ParserState*
>                       parent = NULL;
>               }
>  
> -             if (parent != NULL) {
> -                     parentName.length = (SaUint16T)strlen(parent);
> -                     strncpy((char*)parentName.value, parent, 
> parentName.length);
> -                     parentName.value[parentName.length] = 0;
> -             }
> +             if (parent != NULL) osaf_extended_name_lend(parent, 
> &parentName);
>       } else {
>               LOG_ER("Empty DN for object");
>               stopParser(state);
> @@ -679,8 +677,8 @@ static void createImmObject(ParserState*
>  
>  #ifdef TRACE_8
>       /* Get the length of the DN and truncate state->objectName */
> -     if (parentName.length > 0) {
> -             DNlen = strlen(state->objectName) - (parentName.length + 1);
> +     if (!osaf_is_extended_name_empty(&parentName)) {
> +             DNlen = strlen(state->objectName) - 
> (strlen(osaf_extended_name_borrow(&parentName)) + 1);
>       } else {
>               DNlen = strlen(state->objectName);
>       }
> @@ -833,7 +831,9 @@ done:
>                       if(it->attrValueType == SA_IMM_ATTR_SASTRINGT
>                                       || it->attrValueType == 
> SA_IMM_ATTR_SAANYT) {
>                               free(*(void **)(it->attrValues[i]));
> -                     }
> +                     } else if (it->attrValueType == SA_IMM_ATTR_SANAMET) {
> +                             osaf_extended_name_free((SaNameT*) 
> it->attrValues[i]);
> +                        }
>                       free(it->attrValues[i]);
>               }
>               free(it->attrValues);
> @@ -899,8 +899,11 @@ static bool attrvalue_is_equal(SaImmValu
>               return *((SaTimeT*) val1) == *((SaTimeT*) val2);
>               break;
>       case SA_IMM_ATTR_SANAMET:
> -             return (memcmp(val1, val2, sizeof(SaNameT)) == 0);
> -             break;
> +        {
> +             const char* s1 = osaf_extended_name_borrow((SaNameT*) val1);
> +             const char* s2 = osaf_extended_name_borrow((SaNameT*) val2);
> +             return strcmp(s1, s2) == 0;
> +     }
>       case SA_IMM_ATTR_SAFLOATT:
>               return *((SaFloatT*) val1) == *((SaFloatT*) val2);
>               break;
> @@ -1113,6 +1116,8 @@ static void createImmClass(ParserState* 
>               if(it->attrDefaultValue) {
>                       if(it->attrValueType == SA_IMM_ATTR_SASTRINGT && *(void 
> **)(it->attrDefaultValue))
>                               free(*(void **)(it->attrDefaultValue));
> +                     else if (it->attrValueType == SA_IMM_ATTR_SANAMET && 
> (SaNameT*) (it->attrDefaultValue))
> +                             osaf_extended_name_free((SaNameT*) 
> it->attrDefaultValue);
>                       else if(it->attrValueType == SA_IMM_ATTR_SAANYT && 
> (SaAnyT *)(it->attrDefaultValue))
>                               free(((SaAnyT 
> *)(it->attrDefaultValue))->bufferAddr);
>                       free(it->attrDefaultValue);
> @@ -1758,7 +1763,7 @@ static void charactersHandler(void* user
>               break;
>       case DN:
>               /* Copy the distinguished name */
> -             if(len >= SA_MAX_NAME_LENGTH) {
> +             if (len > kMaxDnLength) {
>                       LOG_ER("DN is too long (%d characters)", len);
>                       stopParser(state);
>                       state->parsingStatus = 1;
> @@ -2184,6 +2189,8 @@ static void addObjectAttributeDefinition
>               while(attrValues.attrValues[i]) {
>                       if(attrValues.attrValueType == SA_IMM_ATTR_SASTRINGT)
>                               free(*((SaStringT *)attrValues.attrValues[i]));
> +                     else if(attrValues.attrValueType == SA_IMM_ATTR_SANAMET)
> +                             osaf_extended_name_free((SaNameT*) 
> attrValues.attrValues[i]);
>                       else if(attrValues.attrValueType == SA_IMM_ATTR_SAANYT)
>                               
> free(((SaAnyT*)attrValues.attrValues[i])->bufferAddr);
>                       free(attrValues.attrValues[i]);
> @@ -2467,14 +2474,12 @@ static int charsToValueHelper(SaImmAttrV
>               break;
>       case SA_IMM_ATTR_SANAMET:
>               len = strlen(str);
> -             if(len >= SA_MAX_NAME_LENGTH) {
> +             if (len > kMaxDnLength) {
>                       LOG_ER("SaNameT value is too long: %d characters", len);
>                       return 1;
>               }
>               *value = malloc(sizeof(SaNameT));
> -             ((SaNameT*)*value)->length = (SaUint16T)len;
> -             strncpy((char*)((SaNameT*)*value)->value, str, len);
> -             ((SaNameT*)*value)->value[len] = '\0';
> +             osaf_extended_name_alloc(str, (SaNameT*) *value);
>               break;
>       case SA_IMM_ATTR_SAFLOATT:
>               *value = malloc(sizeof(SaFloatT));
> diff --git a/osaf/tools/safimm/immdump/Makefile.am 
> b/osaf/tools/safimm/immdump/Makefile.am
> --- a/osaf/tools/safimm/immdump/Makefile.am
> +++ b/osaf/tools/safimm/immdump/Makefile.am
> @@ -30,6 +30,7 @@ immdump_SOURCES = \
>       imm_xmlw_dump.cc
>  
>  immdump_CPPFLAGS = \
> +     -DSA_EXTENDED_NAME_SOURCE \
>       $(AM_CPPFLAGS) \
>       -I$(top_srcdir)/osaf/libs/common/immsv/include
>  
> diff --git a/osaf/tools/safimm/immdump/imm_xmlw_dump.cc 
> b/osaf/tools/safimm/immdump/imm_xmlw_dump.cc
> --- a/osaf/tools/safimm/immdump/imm_xmlw_dump.cc
> +++ b/osaf/tools/safimm/immdump/imm_xmlw_dump.cc
> @@ -20,8 +20,9 @@
>  #include <iostream>
>  #include <libxml/encoding.h>
>  #include <unistd.h>
> -#include <osaf_unicode.h>
> -
> +#include "saAis.h"
> +#include "osaf_unicode.h"
> +#include "osaf_extended_name.h"
>  
>  
>  /* Functions */
> @@ -40,8 +41,7 @@ void dumpObjectsXMLw(SaImmHandleT immHan
>      unsigned int           tryCount=0;
>      TRACE_ENTER();
>  
> -    root.length = 0;
> -    strncpy((char*)root.value, "", 3);
> +    osaf_extended_name_clear(&root);
>  
>      /* Initialize immOmSearch */
>  
> @@ -93,7 +93,7 @@ void dumpObjectsXMLw(SaImmHandleT immHan
>              continue;
>          }
>  
> -        objectToXMLw(std::string((char*)objectName.value, objectName.length),
> +        objectToXMLw(std::string(osaf_extended_name_borrow(&objectName)),
>                      attrs,
>                      immHandle,
>                      classRDNMap,
> diff --git a/osaf/tools/safimm/immfind/Makefile.am 
> b/osaf/tools/safimm/immfind/Makefile.am
> --- a/osaf/tools/safimm/immfind/Makefile.am
> +++ b/osaf/tools/safimm/immfind/Makefile.am
> @@ -26,6 +26,7 @@ immfind_CXXFLAGS = \
>       -I$(top_srcdir)/osaf/libs/common/immsv/include
>  
>  immfind_CPPFLAGS = \
> +     -DSA_EXTENDED_NAME_SOURCE \
>       $(AM_CPPFLAGS) \
>       -I$(top_srcdir)/osaf/tools/safimm/include \
>       -I$(top_srcdir)/osaf/libs/common/immsv/include
> diff --git a/osaf/tools/safimm/immfind/imm_find.c 
> b/osaf/tools/safimm/immfind/imm_find.c
> --- a/osaf/tools/safimm/immfind/imm_find.c
> +++ b/osaf/tools/safimm/immfind/imm_find.c
> @@ -39,6 +39,7 @@
>  #include <saImmOm.h>
>  #include <immutil.h>
>  #include <saf_error.h>
> +#include "osaf_extended_name.h"
>  
>  static SaVersionT immVersion = { 'A', 2, 11 };
>  extern struct ImmutilWrapperProfile immutilWrapperProfile;
> @@ -102,10 +103,10 @@ int main(int argc, char *argv[])
>       SaImmSearchParametersT_2 searchParam;
>       SaNameT objectName;
>       SaImmAttrValuesT_2 **attributes;
> -     SaNameT rootName = { 0, "" };
> +     SaNameT rootName;
> +     osaf_extended_name_clear(&rootName);
>       SaImmScopeT scope = SA_IMM_SUBTREE;     /* default search scope */
> -     char classNameBuf[SA_MAX_NAME_LENGTH] = {0};
> -     const char *className = classNameBuf;
> +     const char* className = "";
>       unsigned long timeoutVal = 60;
>  
>       while (1) {
> @@ -116,7 +117,7 @@ int main(int argc, char *argv[])
>  
>               switch (c) {
>               case 'c':
> -                     strncpy(classNameBuf, optarg, SA_MAX_NAME_LENGTH);
> +                     className = optarg;
>                       break;
>               case 's':
>                       if (strcmp(optarg, "sublevel") == 0)
> @@ -155,10 +156,7 @@ int main(int argc, char *argv[])
>          immutilWrapperProfile.nTries = timeoutVal;
>          immutilWrapperProfile.retryInterval = 1000;
>  
> -     if (optind < argc) {
> -             strncpy((char *)rootName.value, argv[optind], 
> SA_MAX_NAME_LENGTH);
> -             rootName.length = strlen((char *)rootName.value);
> -     }
> +     if (optind < argc) osaf_extended_name_lend(argv[optind], &rootName);
>  
>       error = immutil_saImmOmInitialize(&immHandle, NULL, &immVersion);
>       if (error != SA_AIS_OK) {
> @@ -190,7 +188,7 @@ int main(int argc, char *argv[])
>                       exit(EXIT_FAILURE);
>               }
>               if (error == SA_AIS_OK)
> -                     printf("%s\n", objectName.value);
> +                     printf("%s\n", osaf_extended_name_borrow(&objectName));
>       } while (error != SA_AIS_ERR_NOT_EXIST);
>  
>       error = immutil_saImmOmSearchFinalize(searchHandle);
> diff --git a/osaf/tools/safimm/immlist/Makefile.am 
> b/osaf/tools/safimm/immlist/Makefile.am
> --- a/osaf/tools/safimm/immlist/Makefile.am
> +++ b/osaf/tools/safimm/immlist/Makefile.am
> @@ -21,6 +21,7 @@ MAINTAINERCLEANFILES = Makefile.in
>  bin_PROGRAMS = immlist
>  
>  immlist_CPPFLAGS = \
> +     -DSA_EXTENDED_NAME_SOURCE \
>       $(AM_CPPFLAGS) \
>       -I$(top_srcdir)/osaf/tools/safimm/include \
>       -I$(top_srcdir)/osaf/libs/common/immsv/include
> diff --git a/osaf/tools/safimm/immlist/imm_list.c 
> b/osaf/tools/safimm/immlist/imm_list.c
> --- a/osaf/tools/safimm/immlist/imm_list.c
> +++ b/osaf/tools/safimm/immlist/imm_list.c
> @@ -103,7 +103,7 @@ static void print_attr_value_raw(SaImmVa
>               break;
>       case SA_IMM_ATTR_SANAMET: {
>               SaNameT *myNameT = (SaNameT *)attrValue;
> -             printf("%s", myNameT->value);
> +             printf("%s", saAisNameBorrow(myNameT));
>               break;
>       }
>       case SA_IMM_ATTR_SASTRINGT:
> @@ -166,7 +166,8 @@ static void print_attr_value(SaImmValueT
>       case SA_IMM_ATTR_SANAMET:
>               {
>                       SaNameT *myNameT = (SaNameT *)attrValue;
> -                     printf("%s (%u) ", myNameT->value, myNameT->length);
> +                     printf("%s (%zu) ", saAisNameBorrow(myNameT),
> +                             strlen(saAisNameBorrow(myNameT)));
>                       break;
>               }
>       case SA_IMM_ATTR_SASTRINGT:
> @@ -371,8 +372,7 @@ static void display_object(const char *n
>       SaAisErrorT error;
>       SaImmAttrValuesT_2 **attributes;
>  
> -     strncpy((char *)objectName.value, name, SA_MAX_NAME_LENGTH);
> -     objectName.length = strlen((char *)objectName.value);
> +     saAisNameLend(name, &objectName);
>  
>       error = immutil_saImmOmAccessorGet_2(accessorHandle, &objectName, 
> attributeNames, &attributes);
>       if (SA_AIS_OK != error) {
> diff --git a/osaf/tools/safimm/src/immutil.c b/osaf/tools/safimm/src/immutil.c
> --- a/osaf/tools/safimm/src/immutil.c
> +++ b/osaf/tools/safimm/src/immutil.c
> @@ -15,11 +15,13 @@
>   *
>   */
>  
> +#define _GNU_SOURCE
> +#ifndef SA_EXTENDED_NAME_SOURCE
> +#define SA_EXTENDED_NAME_SOURCE
> +#endif
> +#include "immutil.h"
>  #include <stdio.h>
>  #include <unistd.h>
> -#ifndef __USE_ISOC99
> -#define __USE_ISOC99 // strtof and LLONG_MAX in older gcc versions like 4.3.2
> -#endif
>  #include <stdlib.h>
>  #include <string.h>
>  #include <limits.h>
> @@ -28,12 +30,11 @@
>  #include <syslog.h>
>  #include <errno.h>
>  
> -#include <immutil.h>
> -
> -#include <logtrace.h>
> +#include "saAis.h"
> +#include "logtrace.h"
> +#include "osaf_extended_name.h"
>  
>  static const SaVersionT immVersion = { 'A', 2, 11 };
> -size_t strnlen(const char *s, size_t maxlen);
>  
>  /* Memory handling functions */
>  #define CHUNK        4000
> @@ -107,9 +108,17 @@ void ccbutil_deleteCcbData(struct CcbUti
>  {
>       struct CcbUtilCcbData *item = ccbList;
>       struct CcbUtilCcbData *prev = NULL;
> +     struct CcbUtilOperationData *op;
>       if (ccb == NULL)
>               return;
>       while (item != NULL) {
> +             op = item->operationListHead;
> +             while(op) {
> +                     osaf_extended_name_free(&op->objectName);
> +                     op = op->next;
> +                     if(op == item->operationListTail)
> +                             break;
> +             }
>               if (ccb->ccbId == item->ccbId) {
>                       if (prev == NULL) {
>                               ccbList = item->next;
> @@ -152,7 +161,7 @@ CcbUtilOperationData_t *ccbutil_ccbAddCr
>       operation->param.create.className = dupSaImmClassNameT(clist, 
> className);
>       operation->param.create.parentName = dupSaNameT(clist, parentName);
>       operation->param.create.attrValues = dupSaImmAttrValuesT_array(clist, 
> attrValues);
> -     operation->objectName.length = 0;
> +     saAisNameLend("", &operation->objectName);
>       return operation;
>  }
>  
> @@ -162,26 +171,39 @@ CcbUtilOperationData_t *ccbutil_ccbAddCr
>       const SaNameT *parentName,
>       const SaImmAttrValuesT_2 **attrValues)
>  {
> +     const char *str;
> +     size_t len;
>       struct Chunk *clist = (struct Chunk *)ccb->memref;
>       struct CcbUtilOperationData *operation = newOperationData(ccb, 
> CCBUTIL_CREATE);
>       operation->param.create.className = dupSaImmClassNameT(clist, 
> className);
>       operation->param.create.parentName = dupSaNameT(clist, parentName);
>       operation->param.create.attrValues = dupSaImmAttrValuesT_array(clist, 
> attrValues);
> -     operation->objectName = *objectName;
> +
> +     str = saAisNameBorrow(objectName);
> +     len = strlen(str);
> +     saAisNameLend(len < SA_MAX_UNEXTENDED_NAME_LENGTH ? str : strdup(str), 
> &operation->objectName);
> +
>       return operation;
>  }
>  
>  void ccbutil_ccbAddDeleteOperation(struct CcbUtilCcbData *ccb, const SaNameT 
> *objectName)
>  {
> +     const char *str;
> +     size_t len;
>       struct Chunk *clist = (struct Chunk *)ccb->memref;
>       struct CcbUtilOperationData *operation = newOperationData(ccb, 
> CCBUTIL_DELETE);
>       operation->param.deleteOp.objectName = dupSaNameT(clist, objectName);
> -     operation->objectName = *objectName;
> +
> +     str = saAisNameBorrow(objectName);
> +     len = strlen(str);
> +     saAisNameLend(len < SA_MAX_UNEXTENDED_NAME_LENGTH ? str : strdup(str), 
> &operation->objectName);
>  }
>  
>  int ccbutil_ccbAddModifyOperation(struct CcbUtilCcbData *ccb,
>                                  const SaNameT *objectName, const 
> SaImmAttrModificationT_2 **attrMods)
>  {
> +     const char *str;
> +     size_t len;
>       struct Chunk *clist = (struct Chunk *)ccb->memref;
>       struct CcbUtilOperationData *operation;
>  
> @@ -191,9 +213,12 @@ int ccbutil_ccbAddModifyOperation(struct
>  
>       operation = newOperationData(ccb, CCBUTIL_MODIFY);
>       operation->param.modify.objectName = dupSaNameT(clist, objectName);
> -     operation->objectName = *objectName;
>       operation->param.modify.attrMods = 
> dupSaImmAttrModificationT_array(clist, attrMods);
>  
> +     str = saAisNameBorrow(objectName);
> +     len = strlen(str);
> +     saAisNameLend(len < SA_MAX_UNEXTENDED_NAME_LENGTH ? str : strdup(str), 
> &operation->objectName);
> +
>       return 0;
>  }
>  
> @@ -212,8 +237,7 @@ CcbUtilOperationData_t *ccbutil_getCcbOp
>          CcbUtilOperationData_t *opData = ccbutil_getNextCcbOp(ccbId, NULL);
>  
>          while (opData != NULL) {
> -                if ((dn->length == opData->objectName.length) &&
> -                    (memcmp(dn->value, opData->objectName.value, dn->length) 
> == 0))
> +             if (strcmp(saAisNameBorrow(dn), 
> saAisNameBorrow(&opData->objectName)) == 0)
>                          break;
>  
>                  opData = ccbutil_getNextCcbOp(ccbId, opData);
> @@ -267,13 +291,10 @@ char const *immutil_getClassName(struct 
>  
>  char const *immutil_getStringValue(char const *key, SaNameT const *name)
>  {
> -     static char buffer[SA_MAX_NAME_LENGTH + 1];
> +     const char* buffer = saAisNameBorrow(name);
>       unsigned int klen;
>       char *cp;
>  
> -     assert(name->length <= SA_MAX_NAME_LENGTH);
> -     memcpy(buffer, name->value, name->length);
> -     buffer[name->length] = 0;
>       assert(key != NULL);
>       klen = strlen(key);
>       assert(klen > 1 || key[klen - 1] == '=');
> @@ -297,14 +318,13 @@ char const *immutil_getStringValue(char 
>  
>  char const *immutil_getDnItem(SaNameT const *name, unsigned int index)
>  {
> -     static char buffer[SA_MAX_NAME_LENGTH + 1];
> +     static char* buffer = NULL;
>       char *cp;
>       char *value;
> +     size_t size = strlen(saAisNameBorrow(name)) + 1;
>  
> -     assert(name->length <= SA_MAX_NAME_LENGTH);
> -     memcpy(buffer, name->value, name->length);
> -     buffer[name->length] = 0;
> -
> +     buffer = realloc(buffer, size);
> +     memcpy(buffer, saAisNameBorrow(name), size);
>       value = buffer;
>       cp = strchr(value, ',');
>       while (index > 0) {
> @@ -494,10 +514,9 @@ const SaUint32T *immutil_getUint32Attr(c
>  
>  int immutil_matchName(SaNameT const *name, regex_t const *preg)
>  {
> -     char buffer[SA_MAX_NAME_LENGTH + 1];
> +     const char* buffer;
>       assert(name != NULL && preg != NULL);
> -     memcpy(buffer, name->value, name->length);
> -     buffer[name->length] = 0;
> +     buffer = saAisNameBorrow(name);
>       return regexec(preg, buffer, 0, NULL, 0);
>  }
>  
> @@ -510,8 +529,7 @@ SaAisErrorT immutil_update_one_rattr(SaI
>       SaImmAttrValueT attrValues[] = { value };
>       SaNameT objectName;
>  
> -     strncpy((char *)objectName.value, dn, SA_MAX_NAME_LENGTH);
> -     objectName.length = strlen((char *)objectName.value);
> +     saAisNameLend(dn, &objectName);
>  
>       attrMod.modType = SA_IMM_ATTR_VALUES_REPLACE;
>       attrMod.modAttr.attrName = attributeName;
> @@ -531,7 +549,7 @@ SaImmClassNameT immutil_get_className(co
>  
>       (void)immutil_saImmOmInitialize(&omHandle, NULL, &immVersion);
>       (void)immutil_saImmOmAccessorInitialize(omHandle, &accessorHandle);
> -        if (immutil_saImmOmAccessorGet_2(accessorHandle, objectName, 
> attributeNames, &attributes) == SA_AIS_OK)
> +     if (immutil_saImmOmAccessorGet_2(accessorHandle, objectName, 
> attributeNames, &attributes) == SA_AIS_OK)
>               className = strdup(*((char **)attributes[0]->attrValues[0]));
>       (void)immutil_saImmOmAccessorFinalize(accessorHandle);
>       (void)immutil_saImmOmFinalize(omHandle);
> @@ -549,7 +567,7 @@ SaAisErrorT immutil_get_attrValueType(co
>       SaImmAttrDefinitionT_2 **attrDefinitions;
>       int i = 0;
>  
> -        (void)immutil_saImmOmInitialize(&omHandle, NULL, &immVersion);
> +     (void)immutil_saImmOmInitialize(&omHandle, NULL, &immVersion);
>  
>       if ((rc = saImmOmClassDescriptionGet_2(omHandle, className, 
> &classCategory, &attrDefinitions)) != SA_AIS_OK)
>               goto done;
> @@ -665,13 +683,8 @@ void *immutil_new_attrValue(SaImmValueTy
>       case SA_IMM_ATTR_SANAMET: {
>               SaNameT *mynamet;
>               len = strlen(str);
> -             if (len > SA_MAX_NAME_LENGTH) {
> -                     fprintf(stderr, "too long SaNameT\n");
> -                     return NULL;
> -             }
>               attrValue = mynamet = malloc(sizeof(SaNameT));
> -             mynamet->length = len;
> -             strncpy((char *)mynamet->value, str, SA_MAX_NAME_LENGTH);
> +             saAisNameLend(len < SA_MAX_UNEXTENDED_NAME_LENGTH ? str : 
> strdup(str), mynamet);
>               break;
>       }
>       case SA_IMM_ATTR_SASTRINGT: {
> @@ -741,8 +754,9 @@ static const SaNameT *dupSaNameT(struct 
>       SaNameT *copy;
>       if (original == NULL)
>               return NULL;
> +     const char* value = saAisNameBorrow(original);
>       copy = (SaNameT *)clistMalloc(clist, sizeof(SaNameT));
> -     memcpy(copy, original, sizeof(SaNameT));
> +     saAisNameLend(strlen(value) < SA_MAX_UNEXTENDED_NAME_LENGTH ? value : 
> dupStr(clist, value), copy);
>       return copy;
>  }
>  
> @@ -823,6 +837,12 @@ static void copySaImmAttrValuesT(struct 
>                       char *cporig = *((char **)original->attrValues[i]);
>                       char **cpp = (char **)databuffer;
>                       *cpp = dupStr(clist, cporig);
> +             } else if(original->attrValueType == SA_IMM_ATTR_SANAMET) {
> +                     SaNameT* cporig = (SaNameT*) original->attrValues[i];
> +                     SaNameT* cpdest = (SaNameT*) copy->attrValues[i];
> +                     const char* value = saAisNameBorrow(cporig);
> +                     saAisNameLend(strlen(value) < 
> SA_MAX_UNEXTENDED_NAME_LENGTH ? value :
> +                             dupStr(clist, value), cpdest);
>               } else if(original->attrValueType == SA_IMM_ATTR_SAANYT) {
>                       SaAnyT* cporig = (SaAnyT *) original->attrValues[i];
>                       SaAnyT* cpdest = (SaAnyT *) copy->attrValues[i];
>
> ------------------------------------------------------------------------------
> 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&#174;
> Code Sight&#153; - 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
>   


------------------------------------------------------------------------------
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

Reply via email to