Browse Source

Merge pull request #11277 from timothyklemm/hpcc-19784-iterators

HPCC-19784 Improve access to user and resource name value pairs

Reviewed-By: Rodrigo Pastrana <rodrigo.pastrana@lexisnexis.com>
Reviewed-By: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 7 years ago
parent
commit
b51572ed5a

+ 5 - 0
system/security/LdapSecurity/ldapsecurity.cpp

@@ -318,6 +318,11 @@ const char * CLdapSecResource::getParameter(const char * name)
 
 }
 
+IPropertyIterator * CLdapSecResource::getParameterIterator() const
+{
+    return (m_parameters.get() ? m_parameters->getIterator() : nullptr);
+}
+
 void CLdapSecResource::setDescription(const char* description)
 {
     m_description.clear().append(description);

+ 2 - 0
system/security/LdapSecurity/ldapsecurity.ipp

@@ -149,6 +149,7 @@ public:
 
     virtual void setPropertyInt(const char* name, int value){}
     virtual int getPropertyInt(const char* name){ return 0;}
+    IPropertyIterator * getPropertyIterator() const override { return nullptr;}
 
 
 //interface ISecCredentials
@@ -270,6 +271,7 @@ public:
     virtual SecAccessFlags getAccessFlags();
     virtual int addParameter(const char* name, const char* value);
     virtual const char * getParameter(const char * name);
+    virtual IPropertyIterator * getParameterIterator() const override;
     virtual void setDescription(const char* description);
     virtual const char* getDescription();
 

+ 6 - 1
system/security/shared/SecureUser.hpp

@@ -200,7 +200,12 @@ public:
         return 0;
     }
 
-    
+    IPropertyIterator * getPropertyIterator() const override
+    {
+        return (m_parameters.get() ? m_parameters->getIterator() : nullptr);
+    }
+
+
 
 //interface ISecCredentials
     bool setPassword(const char * pw)

+ 12 - 10
system/security/shared/SecurityResource.hpp

@@ -79,6 +79,12 @@ public:
         return NULL;
 
     }
+
+    virtual IPropertyIterator * getParameterIterator() const override
+    {
+        return (m_parameters.get() ? m_parameters->getIterator() : nullptr);
+    }
+
     virtual void setRequiredAccessFlags(SecAccessFlags flags)
     {
         m_required_access = flags;
@@ -139,22 +145,18 @@ public:
     {
         if(!from)
             return;
-        CSecurityResource* _res = (CSecurityResource*)(from);
-        if(!_res)
-            return;
 
-        setDescription(_res->m_description.str());
-        setValue(_res->m_value.str());
-        setAccessFlags(_res->getAccessFlags());
+        setDescription(from->getDescription());
+        setValue(from->getValue());
+        setAccessFlags(from->getAccessFlags());
 
-        if(!_res->m_parameters)
+        Owned<IPropertyIterator> Itr = from->getParameterIterator();
+        if(!Itr.get())
             return;
-
-        Owned<IPropertyIterator> Itr = _res->m_parameters->getIterator();
         Itr->first();
         while(Itr->isValid())
         {
-            addParameter(Itr->getPropKey(), _res->m_parameters->queryProp(Itr->getPropKey()));
+            addParameter(Itr->getPropKey(), from->getParameter(Itr->getPropKey()));
             Itr->next();
         }
         return;

+ 3 - 0
system/security/shared/seclib.hpp

@@ -163,6 +163,7 @@ enum authStatus : int
 };
 
 class CDateTime;
+interface IPropertyIterator;
 interface ISecUser : extends IInterface
 {
     virtual const char * getName() = 0;
@@ -197,6 +198,7 @@ interface ISecUser : extends IInterface
     virtual const char * getProperty(const char * name) = 0;
     virtual void setPropertyInt(const char * name, int value) = 0;
     virtual int getPropertyInt(const char * name) = 0;
+    virtual IPropertyIterator * getPropertyIterator() const = 0;
     virtual ISecUser * clone() = 0;
 };
 
@@ -232,6 +234,7 @@ interface ISecResource : extends ISecProperty
     virtual SecAccessFlags getRequiredAccessFlags() = 0;
     virtual int addParameter(const char * name, const char * value) = 0;
     virtual const char * getParameter(const char * name) = 0;
+    virtual IPropertyIterator * getParameterIterator() const = 0;
     virtual void setDescription(const char * description) = 0;
     virtual const char * getDescription() = 0;
     virtual ISecResource * clone() = 0;