Browse Source

HPCC-17005 Remove dafilesrv execute functionality.

Signed-off-by: Jake Smith <jake.smith@lexisnexisrisk.com>
Jake Smith 8 years ago
parent
commit
583396e3d4

+ 3 - 71
common/remote/rmtfile.cpp

@@ -467,25 +467,6 @@ unsigned getDaliServixVersion(const IpAddress &ip,StringBuffer &ver)
     return getDaliServixVersion(ep,ver);
     return getDaliServixVersion(ep,ver);
 }
 }
 
 
-int remoteExec(const SocketEndpoint &_ep,const char *cmdline, const char *workdir,bool sync,
-                                 size32_t insize, void *inbuf, MemoryBuffer *outbuf)
-{
-    SocketEndpoint ep(_ep);
-    setDafsEndpointPort(ep);
-    if (ep.isNull())
-        return false;
-    try {
-        Owned<ISocket> socket = ISocket::connect_wait(ep,5000);
-        return remoteExec(socket, cmdline, workdir, sync, insize, inbuf, outbuf);
-    }
-    catch (IException *e)
-    {
-        EXCLOG(e,"remoteExec");
-        e->Release();
-    }
-    return -2;
-}
-
 extern REMOTE_API int setDafileSvrTraceFlags(const SocketEndpoint &_ep,byte flags)
 extern REMOTE_API int setDafileSvrTraceFlags(const SocketEndpoint &_ep,byte flags)
 {
 {
     SocketEndpoint ep(_ep);
     SocketEndpoint ep(_ep);
@@ -609,42 +590,7 @@ void setRemoteFileTimeouts(unsigned maxconnecttime,unsigned maxreadtime)
     clientSetRemoteFileTimeouts(maxconnecttime,maxreadtime);
     clientSetRemoteFileTimeouts(maxconnecttime,maxreadtime);
 }
 }
 
 
-class CScriptThread : public Thread
-{
-    StringAttr script;
-    SocketEndpoint ep;
-    Semaphore done;
-    bool ok;
-public:
-    CScriptThread(SocketEndpoint &_ep,const char *_script)
-        : script(_script), ep(_ep)
-    {
-        ok = false;
-    }
-
-    int run()
-    {
-        try {
-            int ret = remoteExec(ep,script.get(),"/c$",true,0,NULL,NULL);
-            if (ret==0)
-                ok = true;
-        }
-        catch (IException *e) {
-            EXCLOG(e,"validateNodes CScriptThread");
-            e->Release();
-        }
-        done.signal();
-        return 0;
-    }
-
-    bool waitok(unsigned timeout)
-    {
-        done.wait(timeout);
-        return ok;
-    }
-};
-
-unsigned validateNodes(const SocketEndpointArray &epso,const char *dataDir, const char *mirrorDir, bool chkver, const char *script, unsigned scripttimeout, SocketEndpointArray &failures, UnsignedArray &failedcodes, StringArray &failedmessages, const char *filename)
+unsigned validateNodes(const SocketEndpointArray &epso,const char *dataDir, const char *mirrorDir, bool chkver, SocketEndpointArray &failures, UnsignedArray &failedcodes, StringArray &failedmessages, const char *filename)
 {
 {
     // used for detecting duff nodes
     // used for detecting duff nodes
     IPointerArrayOf<ISocket> sockets;
     IPointerArrayOf<ISocket> sockets;
@@ -679,18 +625,14 @@ unsigned validateNodes(const SocketEndpointArray &epso,const char *dataDir, cons
         StringAttr dataDir, mirrorDir;
         StringAttr dataDir, mirrorDir;
         bool chkv;
         bool chkv;
         const char *filename;
         const char *filename;
-        const char *script;
-        unsigned scripttimeout;
 public:
 public:
-        casyncfor(const SocketEndpointArray &_eps,const IPointerArrayOf<ISocket> &_sockets,const char *_dataDir,const char *_mirrorDir,bool _chkv, const char *_script, unsigned _scripttimeout, const char *_filename,SocketEndpointArray &_failures, StringArray &_failedmessages,UnsignedArray &_failedcodes,CriticalSection &_sect)
+        casyncfor(const SocketEndpointArray &_eps,const IPointerArrayOf<ISocket> &_sockets,const char *_dataDir,const char *_mirrorDir,bool _chkv, const char *_filename,SocketEndpointArray &_failures, StringArray &_failedmessages,UnsignedArray &_failedcodes,CriticalSection &_sect)
             : eps(_eps), sockets(_sockets), failures(_failures),
             : eps(_eps), sockets(_sockets), failures(_failures),
               failedmessages(_failedmessages), failedcodes(_failedcodes), sect(_sect),
               failedmessages(_failedmessages), failedcodes(_failedcodes), sect(_sect),
               dataDir(_dataDir), mirrorDir(_mirrorDir)
               dataDir(_dataDir), mirrorDir(_mirrorDir)
         { 
         { 
             chkv = _chkv;
             chkv = _chkv;
             filename = _filename;
             filename = _filename;
-            script = _script;
-            scripttimeout = (script&&*script)?_scripttimeout:0;
         }
         }
         void Do(unsigned i)
         void Do(unsigned i)
         {
         {
@@ -813,16 +755,6 @@ public:
                 }
                 }
                 while (0 != drives);
                 while (0 != drives);
             }
             }
-            if (!code&&scripttimeout) { // use a second thread to implement script timeout
-                Owned<CScriptThread> thread = new CScriptThread(ep,script);
-                thread->start();
-                if (!thread->waitok(scripttimeout)) {
-                    code |=  DAFS_SCRIPT_FAIL;
-                    if (errstr.length())
-                        errstr.append(',');
-                    errstr.append("FAILED: ").append(script);
-                }
-            }
             if (code) {
             if (code) {
                 CriticalBlock block(sect);
                 CriticalBlock block(sect);
                 failures.append(ep);
                 failures.append(ep);
@@ -830,7 +762,7 @@ public:
                 failedmessages.append(errstr.str());
                 failedmessages.append(errstr.str());
             }
             }
         }
         }
-    } afor(eps,sockets,dataDir,mirrorDir,chkver,script,scripttimeout,filename,failures,failedmessages,failedcodes,sect);
+    } afor(eps,sockets,dataDir,mirrorDir,chkver,filename,failures,failedmessages,failedcodes,sect);
     afor.For(eps.ordinality(), 10, false, true);
     afor.For(eps.ordinality(), 10, false, true);
     return failures.ordinality();
     return failures.ordinality();
 }
 }

+ 1 - 4
common/remote/rmtfile.hpp

@@ -63,9 +63,6 @@ extern REMOTE_API void setLocalMountRedirect(const IpAddress &ip,const char *dir
 // redirects a daliservix file to a local mount. To remove redirect use NULL for mount dir or NULL for dir
 // redirects a daliservix file to a local mount. To remove redirect use NULL for mount dir or NULL for dir
 
 
 
 
-extern REMOTE_API int remoteExec(const SocketEndpoint &ep,const char *cmdline, const char *workdir,bool sync,
-                                 size32_t insize, void *inbuf, MemoryBuffer *outbuf);
-
 extern REMOTE_API void remoteExtractBlobElements(const char * prefix, const RemoteFilename &file, ExtractedBlobArray & extracted);
 extern REMOTE_API void remoteExtractBlobElements(const char * prefix, const RemoteFilename &file, ExtractedBlobArray & extracted);
 
 
 extern REMOTE_API int setDafileSvrTraceFlags(const SocketEndpoint &ep,byte flags);
 extern REMOTE_API int setDafileSvrTraceFlags(const SocketEndpoint &ep,byte flags);
@@ -102,7 +99,7 @@ extern REMOTE_API void setRemoteFileTimeouts(unsigned maxconnecttime,unsigned ma
 #define DAFS_VALIDATE_DISK_FULL_MIRROR   (0x28)
 #define DAFS_VALIDATE_DISK_FULL_MIRROR   (0x28)
 #define DAFS_SCRIPT_FAIL            (0x40)
 #define DAFS_SCRIPT_FAIL            (0x40)
                                 
                                 
-extern REMOTE_API unsigned validateNodes(const SocketEndpointArray &eps,const char *dataDir, const char *mirrorDir, bool chkver, const char *script, unsigned scripttimeout, SocketEndpointArray &failures, UnsignedArray &failedcodes, StringArray &failedmessages, const char *filename=NULL);
+extern REMOTE_API unsigned validateNodes(const SocketEndpointArray &eps,const char *dataDir, const char *mirrorDir, bool chkver, SocketEndpointArray &failures, UnsignedArray &failedcodes, StringArray &failedmessages, const char *filename=NULL);
 
 
 extern REMOTE_API void installFileHooks(const char *filespec);
 extern REMOTE_API void installFileHooks(const char *filespec);
 extern REMOTE_API void removeFileHooks(); // Should be called before closedown
 extern REMOTE_API void removeFileHooks(); // Should be called before closedown

+ 11 - 84
common/remote/sockfile.cpp

@@ -286,8 +286,8 @@ enum {
     RFCcreatedir,
     RFCcreatedir,
     RFCgetdir,
     RFCgetdir,
     RFCstop,
     RFCstop,
-    RFCexec,
-    RFCkill,
+    RFCexec,                                        // legacy cmd removed
+    RFCdummy1,                                      // legacy placeholder
     RFCredeploy,                                    // 20
     RFCredeploy,                                    // 20
     RFCgetcrc,
     RFCgetcrc,
     RFCmove,
     RFCmove,
@@ -340,7 +340,7 @@ const char *RFCStrings[] =
     RFCText(RFCgetdir),
     RFCText(RFCgetdir),
     RFCText(RFCstop),
     RFCText(RFCstop),
     RFCText(RFCexec),
     RFCText(RFCexec),
-    RFCText(RFCkill),
+    RFCText(RFCdummy1),
     RFCText(RFCredeploy),
     RFCText(RFCredeploy),
     RFCText(RFCgetcrc),
     RFCText(RFCgetcrc),
     RFCText(RFCmove),
     RFCText(RFCmove),
@@ -2651,40 +2651,6 @@ extern unsigned stopRemoteServer(ISocket * socket)
     return errCode;
     return errCode;
 }
 }
 
 
-int remoteExec(ISocket * socket, const char *cmdline, const char *workdir,bool sync,
-                size32_t insize, void *inbuf, MemoryBuffer *outbuf)
-{
-    if (!socket)
-        return -1;
-    bool hasoutput = (outbuf!=NULL);
-    if (!inbuf)
-        insize = 0;
-    MemoryBuffer sendbuf;
-    initSendBuffer(sendbuf);
-    sendbuf.append((RemoteFileCommandType)RFCexec).append(cmdline).append(workdir).append(sync).
-               append(hasoutput).append(insize);
-    if (insize)
-        sendbuf.append(insize, inbuf);
-    MemoryBuffer replybuf;
-    try {
-        sendBuffer(socket, sendbuf);
-        receiveBuffer(socket, replybuf, LENGTHY_RETRIES); // we don't know how long program will take really - assume <1hr
-        int retcode;
-        unsigned phandle;
-        size32_t outsz;
-        replybuf.read(retcode).read(phandle).read(outsz);
-        if (outsz&&outbuf)
-            replybuf.read(outsz,outbuf->reserve(outsz));
-        return retcode;
-    }
-    catch (IException *e) {
-        EXCLOG(e);
-        ::Release(e);
-    }
-
-    return -1;
-}
-
 int setDafsTrace(ISocket * socket,byte flags)
 int setDafsTrace(ISocket * socket,byte flags)
 {
 {
     if (!socket) {
     if (!socket) {
@@ -4752,44 +4718,14 @@ public:
 
 
     bool cmdExec(MemoryBuffer &msg, MemoryBuffer &reply, CRemoteClientHandler &client)
     bool cmdExec(MemoryBuffer &msg, MemoryBuffer &reply, CRemoteClientHandler &client)
     {
     {
-        StringAttr cmdline;
-        StringAttr workdir;
-        bool sync;
-        bool hasoutput;
-        size32_t insize;
-        MemoryAttr inbuf;
-        msg.read(cmdline).read(workdir).read(sync).read(hasoutput).read(insize);
-        if (insize) 
-            msg.read(insize, inbuf.allocate(insize));
-        Owned<IPipeProcess> pipe = createPipeProcess();
-        int retcode=-1;
-        HANDLE phandle=(HANDLE)0;
-        MemoryBuffer outbuf;
-        if (pipe->run("EXEC",cmdline,workdir,insize!=0,hasoutput)) {
-            if (insize) {
-                pipe->write(insize, inbuf.get());
-                pipe->closeInput();
-            }
-            if (hasoutput) {
-                byte buf[4096];
-                for (;;) {
-                    size32_t read = pipe->read(sizeof(buf),buf);
-                    if (!read)
-                        break;
-                    outbuf.append(read,buf);
-                }
-            }
-            if (sync)
-                retcode = pipe->wait();
-            else {
-                phandle = pipe->getProcessHandle(); 
-                retcode = 0;
-            }
-        }
-        size32_t outsz = outbuf.length();
-        reply.append(retcode).append((unsigned)phandle).append(outsz);
-        if (outsz)
-            reply.append(outbuf);
+        StringAttr cmdLine;
+        msg.read(cmdLine);
+        // NB: legacy remoteExec used to simply pass error code and buffer back to caller.
+        VStringBuffer errMsg("Remote command execution no longer supported. Trying to execute cmdline=%s", cmdLine.get());
+        WARNLOG("%s", errMsg.str());
+        size32_t outSz = errMsg.length()+1; // reply with null terminated string
+        // reply with error code -1
+        reply.append((unsigned)-1).append((unsigned)0).append(outSz).append(outSz, errMsg.str());
         return true;
         return true;
     }
     }
 
 
@@ -4848,13 +4784,6 @@ public:
         return false; // TBD
         return false; // TBD
     }
     }
 
 
-    bool cmdKill(MemoryBuffer & msg, MemoryBuffer & reply)
-    {
-        // TBD
-        appendErr2(reply, RFSERR_InvalidCommand, RFCkill);
-        return false;
-    }
-
     bool cmdUnknown(MemoryBuffer & msg, MemoryBuffer & reply,RemoteFileCommandType cmd)
     bool cmdUnknown(MemoryBuffer & msg, MemoryBuffer & reply,RemoteFileCommandType cmd)
     {
     {
         appendErr2(reply, RFSERR_InvalidCommand, cmd);
         appendErr2(reply, RFSERR_InvalidCommand, cmd);
@@ -4961,7 +4890,6 @@ public:
             case RFCmonitordir:
             case RFCmonitordir:
             case RFCstop:
             case RFCstop:
             case RFCextractblobelements:
             case RFCextractblobelements:
-            case RFCkill:
             case RFCredeploy:
             case RFCredeploy:
             case RFCmove:
             case RFCmove:
             case RFCsetsize:
             case RFCsetsize:
@@ -5014,7 +4942,6 @@ public:
                 MAPCOMMAND(RFCstop, cmdStop);
                 MAPCOMMAND(RFCstop, cmdStop);
                 MAPCOMMANDCLIENT(RFCexec, cmdExec, *client);
                 MAPCOMMANDCLIENT(RFCexec, cmdExec, *client);
                 MAPCOMMANDCLIENT(RFCextractblobelements, cmdExtractBlobElements, *client);
                 MAPCOMMANDCLIENT(RFCextractblobelements, cmdExtractBlobElements, *client);
-                MAPCOMMAND(RFCkill, cmdKill);
                 MAPCOMMAND(RFCredeploy, cmdRedeploy); // only Windows
                 MAPCOMMAND(RFCredeploy, cmdRedeploy); // only Windows
                 MAPCOMMANDCLIENT(RFCgetcrc, cmdGetCRC, *client);
                 MAPCOMMANDCLIENT(RFCgetcrc, cmdGetCRC, *client);
                 MAPCOMMANDCLIENT(RFCmove, cmdMove, *client);
                 MAPCOMMANDCLIENT(RFCmove, cmdMove, *client);

+ 0 - 2
common/remote/sockfile.hpp

@@ -70,8 +70,6 @@ extern REMOTE_API IRemoteFileServer * createRemoteFileServer(unsigned maxThreads
 extern REMOTE_API int setDafsTrace(ISocket * socket,byte flags);
 extern REMOTE_API int setDafsTrace(ISocket * socket,byte flags);
 extern REMOTE_API int setDafsThrottleLimit(ISocket * socket, ThrottleClass throttleClass, unsigned throttleLimit, unsigned throttleDelayMs, unsigned throttleCPULimit, unsigned queueLimit, StringBuffer *errMsg=NULL);
 extern REMOTE_API int setDafsThrottleLimit(ISocket * socket, ThrottleClass throttleClass, unsigned throttleLimit, unsigned throttleDelayMs, unsigned throttleCPULimit, unsigned queueLimit, StringBuffer *errMsg=NULL);
 extern REMOTE_API bool enableDafsAuthentication(bool on);
 extern REMOTE_API bool enableDafsAuthentication(bool on);
-extern int remoteExec(ISocket * socket, const char *cmdline, const char *workdir,bool sync,
-                size32_t insize, void *inbuf, MemoryBuffer *outbuf);
 extern void remoteExtractBlobElements(const SocketEndpoint &ep, const char * prefix, const char * filename, ExtractedBlobArray & extracted);
 extern void remoteExtractBlobElements(const SocketEndpoint &ep, const char * prefix, const char * filename, ExtractedBlobArray & extracted);
 extern int getDafsInfo(ISocket * socket, unsigned level, StringBuffer &retstr);
 extern int getDafsInfo(ISocket * socket, unsigned level, StringBuffer &retstr);
 extern void setDafsEndpointPort(SocketEndpoint &ep);
 extern void setDafsEndpointPort(SocketEndpoint &ep);

+ 2 - 2
dali/remote/daliservix.cpp

@@ -920,8 +920,8 @@ enum {
     RFCcreatedir,
     RFCcreatedir,
     RFCgetdir,
     RFCgetdir,
     RFCstop,        // not supported
     RFCstop,        // not supported
-    RFCexec,        // not supported
-    RFCkill,        // not supported
+    RFCexec,        // legacy cmd removed
+    RFCdummy1,      // legacy placeholder
     RFCredeploy,    // not supported
     RFCredeploy,    // not supported
     RFCgetcrc,
     RFCgetcrc,
 //
 //

+ 2 - 2
dali/rfs/rfs.cpp

@@ -143,8 +143,8 @@ enum {
     RFCcreatedir,
     RFCcreatedir,
     RFCgetdir,
     RFCgetdir,
     RFCstop,        // not supported
     RFCstop,        // not supported
-    RFCexec,        // not supported
-    RFCkill,        // not supported
+    RFCexec,        // legacy cmd removed
+    RFCdummy1,      // legacy placeholder
     RFCredeploy,    // not supported
     RFCredeploy,    // not supported
     RFCgetcrc,
     RFCgetcrc,
 #ifdef TBD      // The follwing may be implemented depending if required
 #ifdef TBD      // The follwing may be implemented depending if required

+ 0 - 14
initfiles/componentfiles/configxml/thor.xsd.in

@@ -246,20 +246,6 @@
               </xs:appinfo>
               </xs:appinfo>
             </xs:annotation>
             </xs:annotation>
           </xs:attribute>
           </xs:attribute>
-          <xs:attribute name="SwapNodeCheckScript" type="xs:string" use="optional">
-            <xs:annotation>
-              <xs:appinfo>
-                <tooltip>Script to run to check node functioning (non zero exit from script indicates not.)</tooltip>
-              </xs:appinfo>
-            </xs:annotation>
-          </xs:attribute>
-          <xs:attribute name="SwapNodeCheckScriptTimeout" type="xs:nonNegativeInteger" use="optional" default="0">
-            <xs:annotation>
-              <xs:appinfo>
-                <tooltip>Interval (in seconds) beyond which check node script must return (if 0 disable check node script)</tooltip>
-              </xs:appinfo>
-            </xs:annotation>
-          </xs:attribute>
           </xs:complexType>
           </xs:complexType>
         </xs:element>
         </xs:element>
         <xs:element name="Storage">
         <xs:element name="Storage">

+ 1 - 1
thorlcr/master/thmastermain.cpp

@@ -424,7 +424,7 @@ bool checkClusterRelicateDAFS(IGroup &grp)
     SocketEndpointArray failures;
     SocketEndpointArray failures;
     UnsignedArray failedcodes;
     UnsignedArray failedcodes;
     StringArray failedmessages;
     StringArray failedmessages;
-    validateNodes(epa,NULL,NULL,true,NULL,0,failures,failedcodes,failedmessages);
+    validateNodes(epa,NULL,NULL,true,failures,failedcodes,failedmessages);
     ForEachItemIn(i,failures) {
     ForEachItemIn(i,failures) {
         SocketEndpoint ep(failures.item(i));
         SocketEndpoint ep(failures.item(i));
         ep.port = 0;
         ep.port = 0;

+ 2 - 2
tools/swapnode/swapnodelib.cpp

@@ -421,7 +421,7 @@ public:
                     getConfigurationDirectory(environment->queryPropTree("Software/Directories"),"data","thor",thorname,dataDir); // if not defined can't check
                     getConfigurationDirectory(environment->queryPropTree("Software/Directories"),"data","thor",thorname,dataDir); // if not defined can't check
                     getConfigurationDirectory(environment->queryPropTree("Software/Directories"),"mirror","thor",thorname,mirrorDir); // if not defined can't check
                     getConfigurationDirectory(environment->queryPropTree("Software/Directories"),"mirror","thor",thorname,mirrorDir); // if not defined can't check
 
 
-                    validateNodes(epa,dataDir.str(),mirrorDir.str(),false,options->queryProp("SwapNode/@swapNodeCheckScript"),options->getPropInt("SwapNode/@swapNodeCheckScriptTimeout")*1000,failures,failedcodes,failedmessages);
+                    validateNodes(epa,dataDir.str(),mirrorDir.str(),false,failures,failedcodes,failedmessages);
 
 
                     dt.setNow();
                     dt.setNow();
                     dt.getString(ts.clear());
                     dt.getString(ts.clear());
@@ -586,7 +586,7 @@ class CAutoSwapNode : public CSwapNode
         if (options->getPropBool("SwapNode/@swapNodeCheckMirrorDrive",true))
         if (options->getPropBool("SwapNode/@swapNodeCheckMirrorDrive",true))
             getConfigurationDirectory(environment->queryPropTree("Software/Directories"),"mirror","thor",thorname,mirrorDir); // if not defined can't check
             getConfigurationDirectory(environment->queryPropTree("Software/Directories"),"mirror","thor",thorname,mirrorDir); // if not defined can't check
 
 
-        validateNodes(epa1, dataDir.str(), mirrorDir.str(), false, options->queryProp("SwapNode/@swapNodeCheckScript"), options->getPropInt("SwapNode/@swapNodeCheckScriptTimeout")*1000, badepa, failedcodes, failedmessages);
+        validateNodes(epa1, dataDir.str(), mirrorDir.str(), false, badepa, failedcodes, failedmessages);
         if (!badepa.ordinality()) {
         if (!badepa.ordinality()) {
             PROGLOG("SWAPNODE: on recheck all bad nodes passed (%s,%s)",groupName.get(),ts.str());
             PROGLOG("SWAPNODE: on recheck all bad nodes passed (%s,%s)",groupName.get(),ts.str());
             return false;
             return false;