]> jfr.im git - irc/quakenet/newserv.git/blobdiff - chanserv/chanservlog.c
HELPMOD2: don't ignore +h clients
[irc/quakenet/newserv.git] / chanserv / chanservlog.c
index 64b12e79e5aee9648e32633d51d83b2d148ad6f7..89edbe86288345302fc5f6347001bcf803b90ed7 100644 (file)
@@ -5,16 +5,30 @@
 #include <stdarg.h>
 #include <stdio.h>
 #include "chanserv.h"
+#include "../core/hooks.h"
+#include "../core/error.h"
 
 int logfd;
 
+/* When we get a sigusr1, reopen the logfile */
+void cs_usr1handler(int hooknum, void *arg) {
+  Error("chanserv",ERR_INFO,"Reopening logfile.");
+
+  if (logfd>=0)
+    close(logfd);
+
+  logfd=open("chanservlog",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR);
+}
+
 void cs_initlog() {
-  logfd=open("chanservlog.0",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR);
+  logfd=open("chanservlog",O_WRONLY|O_CREAT|O_APPEND,S_IRUSR|S_IWUSR);
+  registerhook(HOOK_CORE_SIGUSR1, cs_usr1handler);
 }
 
 void cs_closelog() {
   if (logfd>=0)
     close(logfd);
+  deregisterhook(HOOK_CORE_SIGUSR1, cs_usr1handler);
 }
 
 void cs_log(nick *np, char *event, ... ) {
@@ -22,10 +36,9 @@ void cs_log(nick *np, char *event, ... ) {
   char buf2[1024];
   char userbuf[512];
   va_list va;
-  struct tm *tm;
-  time_t now;
-  char timebuf[100];
+  char timebuf[TIMELEN];
   int len;
+  time_t now;
 
   if (logfd<0)
     return; 
@@ -42,8 +55,7 @@ void cs_log(nick *np, char *event, ... ) {
   }
 
   now=time(NULL);
-  tm=gmtime(&now);
-  strftime(timebuf,100,"%Y-%m-%d %H:%M:%S",tm);
-  len=snprintf(buf2,1024,"[%s] %s %s\n",timebuf,userbuf,buf);
+  strftime(timebuf,sizeof(timebuf),Q9_LOG_FORMAT_TIME, gmtime(&now));
+  len=snprintf(buf2,sizeof(buf2),"[%s] %s %s\n",timebuf,userbuf,buf);
   write(logfd, buf2, len);
 }