]> git.stg.codes - stg.git/commitdiff
scriptexecuter become a plain C library
authorMaxim Mamontov <faust.madf@gmail.com>
Wed, 27 Jul 2011 14:07:46 +0000 (17:07 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Wed, 27 Jul 2011 14:07:46 +0000 (17:07 +0300)
include/stg/user_property.h
projects/rscriptd/listener.cpp
projects/rscriptd/main.cpp
stglibs/scriptexecuter.lib/Makefile
stglibs/scriptexecuter.lib/scriptexecuter.c [new file with mode: 0644]
stglibs/scriptexecuter.lib/scriptexecuter.cpp [deleted file]
stglibs/scriptexecuter.lib/scriptexecuter.h

index f0a6d18e85644c8f9d1a8f81919cef898b64f00d..ade21f4e8024e040dd2d6d13ba393e02e27e8731 100644 (file)
@@ -363,7 +363,7 @@ std::string filePath = scriptsDir + "/OnChange";
 if (access(filePath.c_str(), X_OK) == 0)
     {
     std::string execString("\"" + filePath + "\" \"" + login + "\" \"" + paramName + "\" \"" + oldValue + "\" \"" + newValue + "\" \"" + admin->GetLogin() + "\" \"" + admin->GetIPStr() + "\"");
 if (access(filePath.c_str(), X_OK) == 0)
     {
     std::string execString("\"" + filePath + "\" \"" + login + "\" \"" + paramName + "\" \"" + oldValue + "\" \"" + newValue + "\" \"" + admin->GetLogin() + "\" \"" + admin->GetIPStr() + "\"");
-    ScriptExec(execString);
+    ScriptExec(execString.c_str());
     }
 else
     {
     }
 else
     {
index e9aacc19b0ad5b2d87ed4a9e5812d2fd1ea0bb7d..39e590b6980567d20a00d0c0de263e3266a66f99 100644 (file)
@@ -410,7 +410,7 @@ bool LISTENER::Connect(const UserData & data) const
 printfd(__FILE__, "Connect %s\n", data.login.c_str());
 if (access(scriptOnConnect.c_str(), X_OK) == 0)
     {
 printfd(__FILE__, "Connect %s\n", data.login.c_str());
 if (access(scriptOnConnect.c_str(), X_OK) == 0)
     {
-    if (ScriptExec(scriptOnConnect + " " + data.params))
+    if (ScriptExec((scriptOnConnect + " " + data.params).c_str()))
         {
         WriteServLog("Script %s cannot be executed for an unknown reason.", scriptOnConnect.c_str());
         return true;
         {
         WriteServLog("Script %s cannot be executed for an unknown reason.", scriptOnConnect.c_str());
         return true;
@@ -429,7 +429,7 @@ bool LISTENER::Disconnect(const UserData & data) const
 printfd(__FILE__, "Disconnect %s\n", data.login.c_str());
 if (access(scriptOnDisconnect.c_str(), X_OK) == 0)
     {
 printfd(__FILE__, "Disconnect %s\n", data.login.c_str());
 if (access(scriptOnDisconnect.c_str(), X_OK) == 0)
     {
-    if (ScriptExec(scriptOnDisconnect + " " + data.params))
+    if (ScriptExec((scriptOnDisconnect + " " + data.params).c_str()))
         {
         WriteServLog("Script %s cannot be executed for an unknown reson.", scriptOnDisconnect.c_str());
         return true;
         {
         WriteServLog("Script %s cannot be executed for an unknown reson.", scriptOnDisconnect.c_str());
         return true;
index 344a26113b3287b744225d685b9f10a9cb11b2a5..7e7f7f355e257f2e10d61a3cec9d65d53eaf241a 100644 (file)
@@ -251,12 +251,12 @@ switch (executerPid)
         //close(1);
         //close(2);
         //setsid();
         //close(1);
         //close(2);
         //setsid();
-        Executer(msgKey, *msgID, executerPid, procName);
+        Executer(*msgID, executerPid, procName);
         return 1;
 
     default:    // Parent
         if (executersPid.empty())
         return 1;
 
     default:    // Parent
         if (executersPid.empty())
-            Executer(msgKey, *msgID, executerPid, NULL);
+            Executer(*msgID, executerPid, NULL);
         executersPid.insert(executerPid);
     }
 return 0;
         executersPid.insert(executerPid);
     }
 return 0;
index 146d4af91fa38fac17c11f68b44feda0d44508da..92538b121b6f05d9e2226d5a98f8f29c0756c2d0 100644 (file)
@@ -4,7 +4,7 @@
 
 LIB_NAME = stgscriptexecuter
 
 
 LIB_NAME = stgscriptexecuter
 
-SRCS = scriptexecuter.cpp
+SRCS = scriptexecuter.c
 
 INCS = scriptexecuter.h
 
 
 INCS = scriptexecuter.h
 
diff --git a/stglibs/scriptexecuter.lib/scriptexecuter.c b/stglibs/scriptexecuter.lib/scriptexecuter.c
new file mode 100644 (file)
index 0000000..021407d
--- /dev/null
@@ -0,0 +1,114 @@
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/msg.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <string.h>
+#include <errno.h>
+#include <signal.h>
+
+#include "scriptexecuter.h"
+
+
+#define MAX_SCRIPT_LEN  (1100)
+
+static int msgid;
+static int nonstop;
+
+//-----------------------------------------------------------------------------
+struct SCRIPT_DATA
+{
+    long    mtype;
+    char    script[MAX_SCRIPT_LEN];
+} sd;
+//-----------------------------------------------------------------------------
+static void CatchUSR1Executer()
+{
+nonstop = 0;
+}
+//-----------------------------------------------------------------------------
+int ScriptExec(const char * str)
+{
+if (strlen(str) >= MAX_SCRIPT_LEN)
+    return -1;
+
+strncpy(sd.script, str, MAX_SCRIPT_LEN);
+sd.mtype = 1;
+if (msgsnd(msgid, (void *)&sd, MAX_SCRIPT_LEN, 0) < 0)
+    return -1;
+
+return 0;
+}
+//-----------------------------------------------------------------------------
+#ifdef LINUX
+void Executer(int msgID, pid_t pid, char * procName)
+#else
+void Executer(int msgID, pid_t pid)
+#endif
+{
+msgid = msgID;
+if (pid)
+    return;
+nonstop = 1;
+
+#ifdef LINUX
+memset(procName, 0, strlen(procName));
+strcpy(procName, "stg-exec");
+#else
+setproctitle("stg-exec");
+#endif
+
+struct sigaction newsa, oldsa;
+sigset_t sigmask;
+
+sigemptyset(&sigmask);
+sigaddset(&sigmask, SIGTERM);
+newsa.sa_handler = SIG_IGN;
+newsa.sa_mask = sigmask;
+newsa.sa_flags = 0;
+sigaction(SIGTERM, &newsa, &oldsa);
+
+sigemptyset(&sigmask);
+sigaddset(&sigmask, SIGINT);
+newsa.sa_handler = SIG_IGN;
+newsa.sa_mask = sigmask;
+newsa.sa_flags = 0;
+sigaction(SIGINT, &newsa, &oldsa);
+
+sigemptyset(&sigmask);
+sigaddset(&sigmask, SIGHUP);
+newsa.sa_handler = SIG_IGN;
+newsa.sa_mask = sigmask;
+newsa.sa_flags = 0;
+sigaction(SIGHUP, &newsa, &oldsa);
+
+sigemptyset(&sigmask);
+sigaddset(&sigmask, SIGUSR1);
+newsa.sa_handler = CatchUSR1Executer;
+newsa.sa_mask = sigmask;
+newsa.sa_flags = 0;
+sigaction(SIGUSR1, &newsa, &oldsa);
+
+int ret;
+
+struct SCRIPT_DATA sd;
+
+while (nonstop)
+    {
+    sd.mtype = 1;
+    ret = msgrcv(msgid, &sd, MAX_SCRIPT_LEN, 0, 0);
+
+    if (ret < 0)
+        {
+        usleep(20000);
+        continue;
+        }
+    int ret = system(sd.script);
+    if (ret == -1)
+        {
+        // Fork failed
+        }
+    }
+}
+//-----------------------------------------------------------------------------
diff --git a/stglibs/scriptexecuter.lib/scriptexecuter.cpp b/stglibs/scriptexecuter.lib/scriptexecuter.cpp
deleted file mode 100644 (file)
index abe0185..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <cstring>
-#include <cerrno>
-#include <csignal>
-
-#include "stg/common.h"
-#include "scriptexecuter.h"
-
-using namespace std;
-
-#define MAX_SCRIPT_LEN  (1100)
-
-static int msgid;
-static bool nonstop;
-
-//-----------------------------------------------------------------------------
-struct SCRIPT_DATA
-{
-    long    mtype;
-    char    script[MAX_SCRIPT_LEN];
-} sd;
-//-----------------------------------------------------------------------------
-static void CatchUSR1Executer(int)
-{
-nonstop = false;
-}
-//-----------------------------------------------------------------------------
-int ScriptExec(const string & str)
-{
-if (str.length() >= MAX_SCRIPT_LEN)
-    {
-    printfd(__FILE__, "ScriptExec() - script params exceeds MAX_SCRIPT_LENGTH (%d > %d)\n", str.length(), MAX_SCRIPT_LEN);
-    return -1;
-    }
-
-strncpy(sd.script, str.c_str(), MAX_SCRIPT_LEN);
-sd.mtype = 1;
-if (msgsnd(msgid, (void *)&sd, MAX_SCRIPT_LEN, 0) < 0)
-    {
-    printfd(__FILE__, "ScriptExec() - failed to send message to the IPC queue: '%s'\n", strerror(errno));
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
-#ifdef LINUX
-void Executer(int, int msgID, pid_t pid, char * procName)
-#else
-void Executer(int, int msgID, pid_t pid, char *)
-#endif
-{
-msgid = msgID;
-if (pid)
-    return;
-nonstop = true;
-
-#ifdef LINUX
-memset(procName, 0, strlen(procName));
-strcpy(procName, "stg-exec");
-#else
-setproctitle("stg-exec");
-#endif
-
-struct sigaction newsa, oldsa;
-sigset_t sigmask;
-
-sigemptyset(&sigmask);
-sigaddset(&sigmask, SIGTERM);
-newsa.sa_handler = SIG_IGN;
-newsa.sa_mask = sigmask;
-newsa.sa_flags = 0;
-sigaction(SIGTERM, &newsa, &oldsa);
-
-sigemptyset(&sigmask);
-sigaddset(&sigmask, SIGINT);
-newsa.sa_handler = SIG_IGN;
-newsa.sa_mask = sigmask;
-newsa.sa_flags = 0;
-sigaction(SIGINT, &newsa, &oldsa);
-
-sigemptyset(&sigmask);
-sigaddset(&sigmask, SIGHUP);
-newsa.sa_handler = SIG_IGN;
-newsa.sa_mask = sigmask;
-newsa.sa_flags = 0;
-sigaction(SIGHUP, &newsa, &oldsa);
-
-sigemptyset(&sigmask);
-sigaddset(&sigmask, SIGUSR1);
-newsa.sa_handler = CatchUSR1Executer;
-newsa.sa_mask = sigmask;
-newsa.sa_flags = 0;
-sigaction(SIGUSR1, &newsa, &oldsa);
-
-int ret;
-
-SCRIPT_DATA sd;
-
-while (nonstop)
-    {
-    sd.mtype = 1;
-    ret = msgrcv(msgid, &sd, MAX_SCRIPT_LEN, 0, 0);
-
-    if (ret < 0)
-        {
-        usleep(20000);
-        continue;
-        }
-    int ret = system(sd.script);
-    if (ret == -1)
-        {
-        // Fork failed
-        }
-    }
-}
-//-----------------------------------------------------------------------------
index d0db1dad759b669b3189575c50bbdf844b4a6c7d..41b02a2fdf8927bd57e9a959253af4e56b20f21a 100644 (file)
@@ -1,9 +1,19 @@
 #ifndef SCRIPT_EXECUTER_H
 #define SCRIPT_EXECUTER_H
 
 #ifndef SCRIPT_EXECUTER_H
 #define SCRIPT_EXECUTER_H
 
-#include <string>
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 
-int ScriptExec(const std::string & str);
-void Executer(int msgKey, int msgID, pid_t pid, char * procName);
+int ScriptExec(const char * str);
+#ifdef LINUX
+void Executer(int msgID, pid_t pid, char * procName);
+#else
+void Executer(int msgID, pid_t pid);
+#endif
 
 
-#endif //SCRIPT_EXECUTER_H
+#ifdef __cplusplus
+}
+#endif
+
+#endif