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

Reply via email to