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