Thanks, Zoran. I will create a ticket to update the document.
BR, Hung Nguyen - DEK Technologies -------------------------------------------------------------------------------- From: Zoran Milinkovic [email protected] Sent: Monday, January 23, 2017 8:00PM To: Hung Nguyen, Neelakanta Reddy [email protected], [email protected] Cc: Opensaf-devel [email protected] Subject: RE: [PATCH 1 of 1] imm: Add missing checks for SaStringT attributes with ATTR_DN flag [#2270] Hi Hung, Reviewed the patch. Ack from me. In README.NO_DANGLING it's written: "This flag can only be set for attribute definitions where the attribute data type is SaNameT and the attribute is a CONFIG attribute." ... but later.... "The value must of course be the DN of a currently existing object. The use of SaStringT is allowed here to accommodate future enhancements that replace the use of SaNameT with SaStringT." Maybe we need another ticket to clearly state that NO_DANGLING flag works with SaNameT type or SaStringT type with SA_IMM_ATTR_DN flag. Thanks, Zoran -----Original Message----- From: Hung Nguyen [mailto:[email protected]] Sent: den 23 januari 2017 08:54 To: Zoran Milinkovic <[email protected]>; [email protected] Cc: [email protected] Subject: [PATCH 1 of 1] imm: Add missing checks for SaStringT attributes with ATTR_DN flag [#2270] 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
