</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>
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
}
/* 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;
/* 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);
}
}
/* set signal functions */
- signal(SIGHUP, sigHupHandler);
- signal(SIGTERM, sigTermHandler);
+ signalx(SIGHUP, sigHupHandler);
+ signalx(SIGTERM, sigTermHandler);
/* initializing */
InitPcap();
int AddWatchlistCacheItem(char* macAddress);
int IsFoundInWatchlistCache(char* macAddress);
void FreeWatchlistCache(void);
+
+/* signal.c */
+Sigfunc* signalx(int signo, Sigfunc* func);
--- /dev/null
+#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);
+}
+
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
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;
int disableAlarm(void)
{
/* reset alarm */
- signal(SIGALRM, defaultSigfunc);
+ signalx(SIGALRM, defaultSigfunc);
alarm(0);
return 0;
}
/* 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;
/* 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);
}
int PutDataToUdpPort(char* udpServerAddr, char* udpServerPort, char* buff);
int PutMacAddressToServers(char* macAddress);
char *GetServicePortStr(char *servName);
+
+/* signal.c */
+Sigfunc* signalx(int signo, Sigfunc* func);
+
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")));
--- /dev/null
+#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);
+}
+