OSDN Git Service

replaced signal function.
authorwatanaby <watanaby@users.osdn.jp>
Fri, 6 May 2016 04:03:43 +0000 (13:03 +0900)
committerwatanaby <watanaby@users.osdn.jp>
Fri, 6 May 2016 04:03:43 +0000 (13:03 +0900)
12 files changed:
doc/Changes.html
mdsrc/Makefile
mdsrc/ipfw.c
mdsrc/opengatemd.c
mdsrc/opengatemd.h
mdsrc/signal.c [new file with mode: 0644]
mngsrc/Makefile
mngsrc/alarms.c
mngsrc/ipfw.c
mngsrc/opengatemmng.h
mngsrc/proc.c
mngsrc/signal.c [new file with mode: 0644]

index a24a452..9a02abc 100644 (file)
@@ -263,6 +263,10 @@ OpengateM History</H3>
        </DT><DD>
        Modified comments (openatem-all).
        </DD>
+       <DT>Ver.1.0.1 at 2016.5.6
+       </DT><DD>
+       Replaced signal function to NO-RESTART one (openatem-all).
+       </DD>
 </DL>
 <P>
 <B>Please see GIT on osdn.jp to check the differences between versions.</B> 
index 8e7e457..899333a 100644 (file)
@@ -21,7 +21,7 @@ CFLAGS= -g -O3 -Wall -I/usr/local/include ${CFLAGSMYSQL}
 
 LIBS = -lezxml -lpcap -L../ezxml -L/usr/local/lib  ${LIBSQLITE} ${LIBMYSQL} ${LIBCCMALLOC}
 
-OBJS = util.o error.o getparam.o managementdb.o workdb.c ipfw.o pcap.o packetcache.o macdbcache.o session.o ttlcheck.o udpserv.o watchlistcache.o
+OBJS = util.o error.o getparam.o managementdb.o workdb.c ipfw.o pcap.o packetcache.o macdbcache.o session.o ttlcheck.o udpserv.o watchlistcache.o signal.o
 HDRS = opengatemd.h
 
 MDMAINPROGO = opengatemd.o
index 2cd064f..4fda0e5 100644 (file)
@@ -69,7 +69,7 @@ int openClientGate(char *macAddress, char* userId, char* extraId)
     } 
 
     /* set timeout (at long time locking, lock is canceled by SIGALRM) */
-    if((defaultSigFunc=signal(SIGALRM, sigFunc))==SIG_ERR){
+    if((defaultSigFunc=signalx(SIGALRM, sigFunc))==SIG_ERR){
       err_msg("ERR at %s#%d: set sig alarm error",__FILE__,__LINE__);
       Close(fd);
       return 1;
@@ -85,7 +85,7 @@ int openClientGate(char *macAddress, char* userId, char* extraId)
 
     /* reaching to this line means that no other process executes here */
     /* then reset timeout signal and go to main procedure */
-    signal(SIGALRM, defaultSigFunc);
+    signalx(SIGALRM, defaultSigFunc);
     alarm(0);
   }
 
index fee2361..100ed48 100644 (file)
@@ -159,8 +159,8 @@ int  main(int argc, char **argv)
   }
 
   /* set signal functions */
-  signal(SIGHUP, sigHupHandler);
-  signal(SIGTERM, sigTermHandler);
+  signalx(SIGHUP, sigHupHandler);
+  signalx(SIGTERM, sigTermHandler);
 
   /* initializing */
   InitPcap();
index 9ab62e6..64b7daa 100644 (file)
@@ -240,3 +240,6 @@ void InitWatchlistCache(void);
 int AddWatchlistCacheItem(char* macAddress);
 int IsFoundInWatchlistCache(char* macAddress);
 void FreeWatchlistCache(void);
+
+/* signal.c */
+Sigfunc* signalx(int signo, Sigfunc* func);
diff --git a/mdsrc/signal.c b/mdsrc/signal.c
new file mode 100644 (file)
index 0000000..ffef813
--- /dev/null
@@ -0,0 +1,18 @@
+#include "opengatemd.h"
+
+/**********************************************************/
+/* signal function WITHOUT SA_RESTART                     */
+/**********************************************************/
+Sigfunc* signalx(int signo, Sigfunc* func)
+{
+  struct sigaction act, oldact;
+
+  act.sa_handler = func;
+  sigemptyset(&act.sa_mask);
+  act.sa_flags = 0;
+
+  if (sigaction(signo, &act, &oldact) < 0) return(SIG_ERR);
+       
+  return(oldact.sa_handler);
+}
+
index 48099c2..6de1682 100644 (file)
@@ -32,7 +32,7 @@ CFLAGS= -g -O3 -Wall -I/usr/local/include ${CFLAGSMYSQL}
 
 LIBS = -lezxml -lssl -lcrypto -lradius -lpam -L../ezxml -L/usr/local/lib ${LIBLDAP} ${LIBSQLITE} ${LIBMYSQL} ${LIBCCMALLOC}
 
-OBJS = util.o error.o getparam.o managementdb.o workdb.c getmac.o cgi.o messages.o queue.o ipfw.o proc.o auth.o auth-pam.o auth-ftps.o auth-pop3s.o auth-rad.o auth-ldap.o alarms.o udpcli.o
+OBJS = util.o error.o getparam.o managementdb.o workdb.c getmac.o cgi.o messages.o queue.o ipfw.o proc.o auth.o auth-pam.o auth-ftps.o auth-pop3s.o auth-rad.o auth-ldap.o alarms.o udpcli.o signal.o
 HDRS = opengatemmng.h
 
 CHKPROGO = opengatemchk.o
index 8c790fe..5fb010b 100644 (file)
@@ -213,8 +213,8 @@ int enableAlarm(void)
       pRunningAlarm = p;
       
       /* set signal alarm */
-      if(defaultSigfunc==NULL)defaultSigfunc=signal(SIGALRM, alarmSigFunc);
-      else signal(SIGALRM, alarmSigFunc);
+      if(defaultSigfunc==NULL)defaultSigfunc=signalx(SIGALRM, alarmSigFunc);
+      else signalx(SIGALRM, alarmSigFunc);
       alarm(alarmemain);
       alarmSet=TRUE;
 
@@ -233,7 +233,7 @@ Time count is not stoped in disable mode
 int disableAlarm(void)
 {
   /* reset alarm */
-  signal(SIGALRM, defaultSigfunc);
+  signalx(SIGALRM, defaultSigfunc);
   alarm(0);
 
   return 0;
index 589c0f5..ef287c0 100644 (file)
@@ -70,7 +70,7 @@ int openClientGate(char *clientAddr, int forced, char* userId, char* extraId, ch
     } 
 
     /* set lock timeout (at long time locking, lock is canceled by SIGALRM) */
-    if((defaultSigFunc=signal(SIGALRM, sigFunc))==SIG_ERR){
+    if((defaultSigFunc=signalx(SIGALRM, sigFunc))==SIG_ERR){
       err_msg("ERR at %s#%d: set sig alarm error",__FILE__,__LINE__);
       Close(fd);
       return 1;
@@ -87,7 +87,7 @@ int openClientGate(char *clientAddr, int forced, char* userId, char* extraId, ch
     /* when other process executes here, this process waits in lock() */
     /* returning from lock() means that exclusive execution is possible */
     /* then reset timeout signal and go to main processing */
-    signal(SIGALRM, defaultSigFunc);
+    signalx(SIGALRM, defaultSigFunc);
     alarm(0);
   }
 
index 11f3008..87b8d53 100644 (file)
@@ -294,3 +294,7 @@ int DisableAlarm(void);
 int PutDataToUdpPort(char* udpServerAddr, char* udpServerPort, char* buff);
 int PutMacAddressToServers(char* macAddress);
 char *GetServicePortStr(char *servName);
+
+/* signal.c */
+Sigfunc* signalx(int signo, Sigfunc* func);
+
index 8d955f9..7de103d 100644 (file)
@@ -72,7 +72,7 @@ int startChildProc(char* macAddress){
     SavePidToMacCheckTable(macAddress, getpid(), rule4, rule6);
 
     /* at TERM signal is received, call closeExit */
-    signal(SIGTERM, closeExit);
+    signalx(SIGTERM, closeExit);
 
     /* sleep a while */
     sleep(atoi(GetConfValue("OpenTimeout")));
diff --git a/mngsrc/signal.c b/mngsrc/signal.c
new file mode 100644 (file)
index 0000000..e389108
--- /dev/null
@@ -0,0 +1,18 @@
+#include "opengatemmng.h"
+
+/**********************************************************/
+/* signal function WITHOUT SA_RESTART                     */
+/**********************************************************/
+Sigfunc* signalx(int signo, Sigfunc* func)
+{
+  struct sigaction act, oldact;
+
+  act.sa_handler = func;
+  sigemptyset(&act.sa_mask);
+  act.sa_flags = 0;
+
+  if (sigaction(signo, &act, &oldact) < 0) return(SIG_ERR);
+       
+  return(oldact.sa_handler);
+}
+