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