src/imm/immnd/ImmModel.cc | 94 ++++++++++++++++++++++++++---------------------
1 files changed, 52 insertions(+), 42 deletions(-)
ImmModel::notCompatibleAtt()
Check for dangling values when adding NO_DANGLING flag to SaStringDN attributes.
ImmModel::ccbObjectModify()
Check for SaStringDN attributes that have long DN values before disabling long
DN (setting longDnsAllowed to 0).
ImmModel::rtObjectCreate()
When long DN is disabled, don't allow creating runtime objects with SaStringDN
attributes that have long DN value.
ImmModel::rtObjectUpdate()
When long DN is disabled, don't allow setting long DN value to SaStringDN
attributes.
diff --git a/src/imm/immnd/ImmModel.cc b/src/imm/immnd/ImmModel.cc
--- a/src/imm/immnd/ImmModel.cc
+++ b/src/imm/immnd/ImmModel.cc
@@ -4563,8 +4563,12 @@ ImmModel::notCompatibleAtt(const std::st
/* "changedAttrs != NULL" ensures that this check is only for the
schema update */
if(checkNoDanglingRefs && changedAttrs) {
- if(newAttr->mValueType != SA_IMM_ATTR_SANAMET)
+ if (newAttr->mValueType != SA_IMM_ATTR_SANAMET &&
+ !(newAttr->mValueType == SA_IMM_ATTR_SASTRINGT &&
(newAttr->mFlags & SA_IMM_ATTR_DN))) {
+ LOG_NO("Impossible upgrade, attribute %s:%s adds/removes
SA_IMM_ATTR_NO_DANGLING flag, ",
+ className.c_str(), attName.c_str());
return true;
+ }
ClassMap::iterator cmi = sClassMap.find(className);
osafassert(cmi != sClassMap.end());
@@ -9779,8 +9783,9 @@ ImmModel::ccbObjectModify(const ImmsvOmC
goto bypass_impl;
}
}
- } else if((i4->second->mValueType ==
SA_IMM_ATTR_SANAMET) &&
- !(i4->second->mFlags &
SA_IMM_ATTR_NO_DANGLING))
+ } else if ((i4->second->mValueType ==
SA_IMM_ATTR_SANAMET ||
+ (i4->second->mValueType ==
SA_IMM_ATTR_SASTRINGT && (i4->second->mFlags & SA_IMM_ATTR_DN))) &&
+ !(i4->second->mFlags &
SA_IMM_ATTR_NO_DANGLING))
{
/* DN limit check for attribute that is:
not the RDN attribute (else branch here)
@@ -15894,7 +15899,7 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
objectName.append((const char*)attrValues->n.attrValue.val.x.buf,
strnlen((const char*)attrValues->n.attrValue.val.x.buf,
(size_t)attrValues->n.attrValue.val.x.size));
- } else if (attrValues->n.attrValueType == SA_IMM_ATTR_SANAMET
+ } else if ((attrValues->n.attrValueType == SA_IMM_ATTR_SANAMET ||
attrValues->n.attrValueType == SA_IMM_ATTR_SASTRINGT)
&& !longDnsPermitted) {
AttrMap::iterator it = classInfo->mAttrMap.find(attrName);
if(it == classInfo->mAttrMap.end()) {
@@ -15903,24 +15908,27 @@ ImmModel::rtObjectCreate(struct ImmsvOmC
err = SA_AIS_ERR_INVALID_PARAM;
goto rtObjectCreateExit;
}
- if(attrValues->n.attrValue.val.x.size >=
SA_MAX_UNEXTENDED_NAME_LENGTH) {
- LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. "
- "Not allowed by IMM service or extended names are
disabled",
- attrName.c_str());
- err = SA_AIS_ERR_NAME_TOO_LONG;
- goto rtObjectCreateExit;
- }
-
- IMMSV_EDU_ATTR_VAL_LIST *value = attrValues->n.attrMoreValues;
- while(value) {
- if(value->n.val.x.size >= SA_MAX_UNEXTENDED_NAME_LENGTH) {
+
+ if (attrValues->n.attrValueType == SA_IMM_ATTR_SANAMET ||
(it->second->mFlags & SA_IMM_ATTR_DN)) {
+ if(attrValues->n.attrValue.val.x.size >=
SA_MAX_UNEXTENDED_NAME_LENGTH) {
LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN. "
"Not allowed by IMM service or extended names are
disabled",
attrName.c_str());
err = SA_AIS_ERR_NAME_TOO_LONG;
goto rtObjectCreateExit;
}
- value = value->next;
+
+ IMMSV_EDU_ATTR_VAL_LIST *value = attrValues->n.attrMoreValues;
+ while(value) {
+ if(value->n.val.x.size >= SA_MAX_UNEXTENDED_NAME_LENGTH) {
+ LOG_NO("ERR_NAME_TOO_LONG: Attribute '%s' has long DN.
"
+ "Not allowed by IMM service or extended names are
disabled",
+ attrName.c_str());
+ err = SA_AIS_ERR_NAME_TOO_LONG;
+ goto rtObjectCreateExit;
+ }
+ value = value->next;
+ }
}
}
attrValues = attrValues->next;
@@ -17276,33 +17284,35 @@ ImmModel::rtObjectUpdate(const ImmsvOmCc
break; //out of while-loop
}
+ if((attr->mValueType == SA_IMM_ATTR_SANAMET ||
+ (attr->mValueType == SA_IMM_ATTR_SASTRINGT &&
(attr->mFlags & SA_IMM_ATTR_DN))) &&
+ !longDnsPermitted) {
+ if(p->attrValue.attrValue.val.x.size >=
SA_MAX_UNEXTENDED_NAME_LENGTH) {
+ LOG_NO("ERR_BAD_OPERATION: Attribute '%s' has long DN. "
+ "Not allowed by IMM service or extended names are
disabled",
+ attrName.c_str());
+ err = SA_AIS_ERR_BAD_OPERATION;
+ break; //out of while-loop
+ }
+ if((attr->mFlags & SA_IMM_ATTR_MULTI_VALUE) &&
p->attrValue.attrValuesNumber > 1) {
+ IMMSV_EDU_ATTR_VAL_LIST *values =
p->attrValue.attrMoreValues;
+ while(values) {
+ if(values->n.val.x.size >=
SA_MAX_UNEXTENDED_NAME_LENGTH) {
+ LOG_NO("ERR_BAD_OPERATION: Attribute '%s' has long
DN. "
+ "Not allowed by IMM service or extended names
are disabled",
+ attrName.c_str());
+ err = SA_AIS_ERR_BAD_OPERATION;
+ break; //out of while-loop
+ }
+ values = values->next;
+ }
+ if(err != SA_AIS_OK) {
+ break; //out of while-loop
+ }
+ }
+ }
+
if(attr->mValueType == SA_IMM_ATTR_SANAMET) {
- if(!longDnsPermitted) {
- if(p->attrValue.attrValue.val.x.size >=
SA_MAX_UNEXTENDED_NAME_LENGTH) {
- LOG_NO("ERR_BAD_OPERATION: Attribute '%s' has long DN.
"
- "Not allowed by IMM service or extended names are
disabled",
- attrName.c_str());
- err = SA_AIS_ERR_BAD_OPERATION;
- break;
- }
- if((attr->mFlags & SA_IMM_ATTR_MULTI_VALUE) &&
p->attrValue.attrValuesNumber > 1) {
- IMMSV_EDU_ATTR_VAL_LIST *values =
p->attrValue.attrMoreValues;
- while(values) {
- if(values->n.val.x.size >=
SA_MAX_UNEXTENDED_NAME_LENGTH) {
- LOG_NO("ERR_BAD_OPERATION: Attribute '%s' has
long DN. "
- "Not allowed by IMM service or extended
names are disabled",
- attrName.c_str());
- err = SA_AIS_ERR_BAD_OPERATION;
- break;
- }
- values = values->next;
- }
- if(err != SA_AIS_OK) {
- break;
- }
- }
- }
-
if (p->attrValue.attrValue.val.x.size > kOsafMaxDnLength) {
LOG_NO("ERR_LIBRARY: attr '%s' of type SaNameT is too
long:%u",
attrName.c_str(), p->attrValue.attrValue.val.x.size -
1);
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel