فهرست منبع

HPCC-24342 Sasha should send credentials in messages to Dali

Add SashaUser and SashaUserPassword to Sasha configuration, send these creds
in Dali requests for authentication

Signed-off-by: Russ Whitehead <william.whitehead@lexisnexisrisk.com>
Russ Whitehead 4 سال پیش
والد
کامیت
d9625b827e
4فایلهای تغییر یافته به همراه45 افزوده شده و 10 حذف شده
  1. 14 3
      dali/sasha/saverify.cpp
  2. 16 5
      dali/sasha/saxref.cpp
  3. 9 0
      initfiles/componentfiles/configxml/sasha.xsd
  4. 6 2
      initfiles/componentfiles/configxml/sasha.xsl

+ 14 - 3
dali/sasha/saverify.cpp

@@ -199,6 +199,7 @@ public:
 class CFileCrcList
 {
     CIpTable dafilesrvips;
+    Owned<IUserDescriptor> udesc;
 public:
     bool &stopped;
     CIArrayOf<CFileCrcItem> list;
@@ -206,6 +207,10 @@ public:
     CFileCrcList(bool &_stopped)
         : stopped(_stopped)
     {
+        StringBuffer userName;
+        serverConfig->getProp("@sashaUser", userName);
+        udesc.setown(createUserDescriptor());
+        udesc->set(userName.str(), nullptr);
     }
 
     void add(RemoteFilename &filename,unsigned partno,unsigned copy,unsigned crc)
@@ -221,7 +226,7 @@ public:
 
     void verifyFile(const char *name,CDateTime *cutoff)
     {
-        Owned<IDistributedFile> file=queryDistributedFileDirectory().lookup(name,UNKNOWN_USER,false,false,false,nullptr,defaultPrivilegedUser);
+        Owned<IDistributedFile> file=queryDistributedFileDirectory().lookup(name,udesc,false,false,false,nullptr,defaultPrivilegedUser);
         if (!file)
             return;
         IPropertyTree &fileprops = file->queryAttributes();
@@ -343,7 +348,7 @@ public:
             }
         }
         if (!stopped) {
-            file.setown(queryDistributedFileDirectory().lookup(name,UNKNOWN_USER,false,false,false,nullptr,defaultPrivilegedUser));
+            file.setown(queryDistributedFileDirectory().lookup(name,udesc,false,false,false,nullptr,defaultPrivilegedUser));
             if (!file)
                 return;
             if (afor.ok) {
@@ -365,6 +370,7 @@ class CSashaVerifierServer: public ISashaServer, public Thread
 
     bool stopped;
     Semaphore stopsem;
+    Owned<IUserDescriptor> udesc;
 public:
     IMPLEMENT_IINTERFACE;
 
@@ -372,6 +378,11 @@ public:
         : Thread("CSashaVerifierServer")
     {
         stopped = false;
+
+        StringBuffer userName;
+        serverConfig->getProp("@sashaUser", userName);
+        udesc.setown(createUserDescriptor());
+        udesc->set(userName.str(), nullptr);
     }
 
     ~CSashaVerifierServer()
@@ -411,7 +422,7 @@ public:
             try {
                 PROGLOG("VERIFIER: Started");
                 CFileCrcList filelist(stopped);
-                Owned<IDFAttributesIterator> iter = queryDistributedFileDirectory().getDFAttributesIterator("*",UNKNOWN_USER,true,false);//MORE:Pass IUserDescriptor
+                Owned<IDFAttributesIterator> iter = queryDistributedFileDirectory().getDFAttributesIterator("*",udesc,true,false);
                 if (iter) {
                     CDateTime mincutoff;
                     mincutoff.setNow();

+ 16 - 5
dali/sasha/saxref.cpp

@@ -672,7 +672,7 @@ public:
     CLargeMemoryAllocator mem;
     bool verbose;
     unsigned numuniqnodes = 0;
-
+    Owned<IUserDescriptor> udesc;
 
     CNewXRefManager(unsigned maxMb=DEFAULT_MAXMEMORY)
         : mem(0x100000*((memsize_t)maxMb),0x10000,true)
@@ -687,6 +687,11 @@ public:
         orphansbranch.setown(createPTree("Orphans"));
         dirbranch.setown(createPTree("Directories"));
         log("Max memory = %d MB", maxMb);
+
+        StringBuffer userName;
+        serverConfig->getProp("@sashaUser", userName);
+        udesc.setown(createUserDescriptor());
+        udesc->set(userName.str(), nullptr);
     }
 
     ~CNewXRefManager()
@@ -1208,7 +1213,7 @@ public:
         CDfsLogicalFileName lfn;
         if (lfn.setFromMask(mask.str(),rootdir)) { // orphans are only orphans if there doesn't exist a valid file
             try {
-                if (queryDistributedFileDirectory().exists(lfn.get(),UNKNOWN_USER,true,false)) {
+                if (queryDistributedFileDirectory().exists(lfn.get(),udesc,true,false)) {
                     warn(mask.str(),"Orphans ignored as %s exists",lfn.get());
                     return;
                 }
@@ -1498,7 +1503,7 @@ public:
             }
             Owned<IDistributedFile> file;
             try {
-                file.setown(queryDistributedFileDirectory().lookup(lfn,UNKNOWN_USER,false,false,false,nullptr,defaultPrivilegedUser));
+                file.setown(queryDistributedFileDirectory().lookup(lfn,udesc,false,false,false,nullptr,defaultPrivilegedUser));
             }
             catch (IException *e) {
                 EXCLOG(e,"CNewXRefManager::listLost");
@@ -2257,6 +2262,7 @@ class CSashaExpiryServer: public ISashaServer, public Thread
     bool stopped;
     Semaphore stopsem;
     Mutex runmutex;
+    Owned<IUserDescriptor> udesc;
 
 public:
     IMPLEMENT_IINTERFACE;
@@ -2265,6 +2271,11 @@ public:
         : Thread("CSashaExpiryServer")
     {
         stopped = false;
+
+        StringBuffer userName;
+        serverConfig->getProp("@sashaUser", userName);
+        udesc.setown(createUserDescriptor());
+        udesc->set(userName.str(), nullptr);
     }
 
     ~CSashaExpiryServer()
@@ -2300,7 +2311,7 @@ public:
         unsigned defaultExpireDays = serverConfig->getPropInt("DfuExpiry/@expiryDefault", DEFAULT_EXPIRYDAYS);
         unsigned defaultPersistExpireDays = serverConfig->getPropInt("DfuExpiry/@persistExpiryDefault", DEFAULT_PERSISTEXPIRYDAYS);
         StringArray expirylist;
-        Owned<IDFAttributesIterator> iter = queryDistributedFileDirectory().getDFAttributesIterator("*",UNKNOWN_USER,true,false);//MORE:Pass IUserDescriptor
+        Owned<IDFAttributesIterator> iter = queryDistributedFileDirectory().getDFAttributesIterator("*",udesc,true,false);
         ForEach(*iter)
         {
             IPropertyTree &attr=iter->query();
@@ -2352,7 +2363,7 @@ public:
                 /* NB: 0 timeout, meaning fail and skip, if there is any locking contention.
                  * If the file is locked, it implies it is being accessed.
                  */
-                queryDistributedFileDirectory().removeEntry(lfn, UNKNOWN_USER, NULL, 0, true); //MORE:Pass IUserDescriptor
+                queryDistributedFileDirectory().removeEntry(lfn, udesc, NULL, 0, true);
                 PROGLOG(LOGPFX2 "Deleted %s",lfn);
             }
             catch (IException *e) // may want to just detach if fails

+ 9 - 0
initfiles/componentfiles/configxml/sasha.xsd

@@ -196,6 +196,15 @@
                     </xs:appinfo>
                 </xs:annotation>
             </xs:attribute>
+
+            <xs:attribute name="sashaUser" type="xs:string" use="optional" default="">
+                <xs:annotation>
+                    <xs:appinfo>
+                        <tooltip>Specifies the Sasha Username used for authorization.</tooltip>
+                    </xs:appinfo>
+                </xs:annotation>
+            </xs:attribute>
+
         </xs:complexType>
     </xs:element>
     <xs:attributeGroup name="Archiver">

+ 6 - 2
initfiles/componentfiles/configxml/sasha.xsl

@@ -54,7 +54,11 @@
             <xsl:attribute name="logDir">
                <xsl:value-of select="translate(@logDir, $oldPathChars, $newPathChars)"/>
             </xsl:attribute>
-            
+
+            <xsl:attribute name="sashaUser">
+                <xsl:value-of select="@sashaUser"/>
+            </xsl:attribute>
+
             <xsl:attribute name="enableSNMP">
                <xsl:call-template name="outputBool">
                   <xsl:with-param name="val" select="@enableSNMP"/>
@@ -83,7 +87,7 @@
                    <xsl:value-of select="@LDSroot"/>
                 </xsl:attribute>
             </xsl:element>
-            
+
             <xsl:element name="Archiver">
                 <xsl:element name="WorkUnits"> 
                     <xsl:attribute name="limit">