From ee39770362f69ced5b52104b622582e882af0b77 Mon Sep 17 00:00:00 2001 From: pk910 Date: Thu, 27 Sep 2012 23:44:02 +0200 Subject: [PATCH] added new multi log system --- Makefile.am | 1 + neonserv.example.conf | 18 +- src/ChanNode.c | 3 +- src/ChanUser.c | 5 +- src/ClientSocket.c | 7 +- src/DBHelper.c | 3 +- src/EventLogger.c | 3 +- src/HandleInfoHandler.c | 3 +- src/IRCEvents.c | 3 +- src/IRCParser.c | 13 +- src/IRCQueue.c | 5 +- src/ModeNode.c | 3 +- src/UserNode.c | 11 +- src/WHOHandler.c | 3 +- src/bots.c | 3 +- src/lang.c | 7 +- src/log.c | 291 ++++++++++++++++++ src/log.h | 39 +++ src/main.c | 57 +--- src/main.h | 2 - src/modcmd.c | 15 +- src/modules.c | 16 +- .../NeonKick.mod/event_neonkick_join.c | 2 +- .../NeonServ.mod/cmd_neonserv_access.c | 4 +- .../NeonServ.mod/cmd_neonserv_addban.c | 2 +- .../NeonServ.mod/cmd_neonserv_addtimeban.c | 2 +- .../NeonServ.mod/cmd_neonserv_adduser.c | 4 +- .../NeonServ.mod/cmd_neonserv_assignrank.c | 4 +- src/modules/NeonServ.mod/cmd_neonserv_ban.c | 2 +- .../NeonServ.mod/cmd_neonserv_chanservsync.c | 4 +- src/modules/NeonServ.mod/cmd_neonserv_clvl.c | 2 +- .../NeonServ.mod/cmd_neonserv_dehalfop.c | 2 +- .../NeonServ.mod/cmd_neonserv_dehalfopall.c | 2 +- .../NeonServ.mod/cmd_neonserv_deluser.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_deop.c | 2 +- .../NeonServ.mod/cmd_neonserv_deopall.c | 2 +- .../NeonServ.mod/cmd_neonserv_giveowner.c | 2 +- .../NeonServ.mod/cmd_neonserv_halfop.c | 2 +- .../NeonServ.mod/cmd_neonserv_halfopall.c | 2 +- .../NeonServ.mod/cmd_neonserv_invite.c | 4 +- src/modules/NeonServ.mod/cmd_neonserv_kick.c | 2 +- .../NeonServ.mod/cmd_neonserv_kickban.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_mode.c | 2 +- .../NeonServ.mod/cmd_neonserv_myaccess.c | 4 +- .../NeonServ.mod/cmd_neonserv_nicklist.c | 2 +- .../NeonServ.mod/cmd_neonserv_noregister.c | 4 +- src/modules/NeonServ.mod/cmd_neonserv_op.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_opall.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_peek.c | 2 +- .../NeonServ.mod/cmd_neonserv_rename.c | 2 +- .../NeonServ.mod/cmd_neonserv_resync.c | 2 +- .../NeonServ.mod/cmd_neonserv_suspend.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_trace.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_trim.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_unban.c | 2 +- .../NeonServ.mod/cmd_neonserv_unsuspend.c | 2 +- .../NeonServ.mod/cmd_neonserv_unvisited.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_up.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_users.c | 2 +- src/modules/NeonServ.mod/cmd_neonserv_voice.c | 2 +- .../NeonServ.mod/cmd_neonserv_voiceall.c | 2 +- .../NeonServ.mod/cmd_neonserv_wipeinfo.c | 2 +- .../NeonServ.mod/event_neonserv_ctcp.c | 2 +- .../NeonServ.mod/event_neonserv_join.c | 2 +- .../NeonServ.mod/event_neonserv_kick.c | 2 +- .../NeonServ.mod/event_neonserv_mode.c | 2 +- .../NeonServ.mod/event_neonserv_notice.c | 2 +- .../NeonServ.mod/event_neonserv_topic.c | 2 +- src/modules/NeonSpam.mod/bot_NeonSpam.c | 6 +- .../NeonSpam.mod/event_neonspam_chanmsg.c | 2 +- .../NeonSpam.mod/event_neonspam_join.c | 2 +- src/modules/global.mod/cmd_global_extscript.c | 2 +- src/modules/global.mod/cmd_global_register.c | 4 +- src/modules/global.mod/cmd_global_setaccess.c | 4 +- src/modules/module.h | 3 +- src/mysqlConn.c | 15 +- src/overall.h | 2 - src/signal.c | 17 +- src/timeq.c | 3 +- src/tools.c | 3 +- 80 files changed, 496 insertions(+), 184 deletions(-) create mode 100644 src/log.c create mode 100644 src/log.h diff --git a/Makefile.am b/Makefile.am index fdfb7f1..e0105d6 100644 --- a/Makefile.am +++ b/Makefile.am @@ -212,6 +212,7 @@ neonserv_SOURCES = src/version.c \ src/module_commands.c \ src/ModuleFunctions.c \ src/statistics.c \ + src/log.c \ src/memoryDebug.c neonserv_LDADD = $(MYSQL_LIBS) $(SYSTEM_LIBS) diff --git a/neonserv.example.conf b/neonserv.example.conf index afa81c0..ded933c 100644 --- a/neonserv.example.conf +++ b/neonserv.example.conf @@ -54,14 +54,20 @@ "port" = 7499; "pass" = "blaa"; }; -"log" { //neonserv.log +"logs" { /* - 1 - INFO - 2 - ERROR - 4 - RAW - 8 - MYSQL + module:section = target_type:target + possible sections: + "info","debug","raw","mysql","override","warning","error","fatal" + possible targets: + file:log.log + irc:#channel + std:out + std:err */ - "loglevel" = 3; + "*:info,warning,error,fatal" = "file:neonserv.log"; + // "*:override,error,fatal" = "irc:#neonserv"; + "*:info" = "std:out"; }; "modules" { "libglobalcmd" { diff --git a/src/ChanNode.c b/src/ChanNode.c index 41bbd45..44a335f 100644 --- a/src/ChanNode.c +++ b/src/ChanNode.c @@ -22,6 +22,7 @@ #include "ModeNode.h" #include "IRCEvents.h" #include "tools.h" +#include "log.h" static struct ChanNode **chanList; @@ -131,7 +132,7 @@ struct ChanNode* addChannel(const char *name) { struct ChanNode *chan = malloc(sizeof(*chan)); if (!chan) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } strcpy(chan->name, name); diff --git a/src/ChanUser.c b/src/ChanUser.c index 04fc29f..e18ce4d 100644 --- a/src/ChanUser.c +++ b/src/ChanUser.c @@ -19,12 +19,13 @@ #include "ChanNode.h" #include "ModeNode.h" #include "UserNode.h" +#include "log.h" struct ChanUser* addChanUser(struct ChanNode *chan, struct UserNode *user) { struct ChanUser *chanuser = malloc(sizeof(*chanuser)); if (!chanuser) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } chanuser->flags = 0; @@ -53,7 +54,7 @@ struct ChanUser* addInvisibleChanUser(struct ChanNode *chan, struct UserNode *us struct ChanUser *chanuser = malloc(sizeof(*chanuser)); if (!chanuser) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } chanuser->flags = CHANUSERFLAG_INVISIBLE; diff --git a/src/ClientSocket.c b/src/ClientSocket.c index eb11d88..d8faf26 100644 --- a/src/ClientSocket.c +++ b/src/ClientSocket.c @@ -25,6 +25,7 @@ #include "version.h" #include "IOHandler.h" #include "IRCEvents.h" +#include "log.h" struct socket_list { struct ClientSocket *data; @@ -54,7 +55,7 @@ void init_sockets() { sockets = malloc(sizeof(*sockets)); if (!sockets) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } sockets->data = NULL; @@ -156,9 +157,9 @@ int write_socket_force(struct ClientSocket *client, char* msg, int len) { if(!(client && (client->flags & SOCKET_FLAG_CONNECTED))) return 0; SYNCHRONIZE(synchronized); #ifdef HAVE_THREADS - putlog(LOGLEVEL_RAW, "[%d send %d] %s", getCurrentThreadID(), len, msg); + printf_log("main", LOG_IRCRAW, "[%d send %d] %s", getCurrentThreadID(), len, msg); #else - putlog(LOGLEVEL_RAW, "[send %d] %s", len, msg); + printf_log("main", LOG_IRCRAW, "[send %d] %s", len, msg); #endif iohandler_send(client->iofd, msg, len); client->traffic_out += len; diff --git a/src/DBHelper.c b/src/DBHelper.c index 69bdf44..6e2f843 100644 --- a/src/DBHelper.c +++ b/src/DBHelper.c @@ -27,6 +27,7 @@ #include "ClientSocket.h" #include "bots.h" #include "ConfigParser.h" +#include "log.h" void _loadUserSettings(struct UserNode *user) { SYNCHRONIZE(cache_sync); @@ -298,7 +299,7 @@ static void event_user_registered(struct UserNode *user, char *new_mask) { if ((row = mysql_fetch_row(res)) != NULL) { struct event_user_registered_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->user = user; diff --git a/src/EventLogger.c b/src/EventLogger.c index 77956d7..f5a8a31 100644 --- a/src/EventLogger.c +++ b/src/EventLogger.c @@ -21,6 +21,7 @@ #include "UserNode.h" #include "ChanNode.h" #include "DBHelper.h" +#include "log.h" static struct Event *first_event = NULL, *last_event = NULL; @@ -28,7 +29,7 @@ struct Event *createEvent(struct ClientSocket *client, struct UserNode *user, st struct Event *event = malloc(sizeof(*event)); if (!event) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } event->client = client; diff --git a/src/HandleInfoHandler.c b/src/HandleInfoHandler.c index edbf95b..8a8a46c 100644 --- a/src/HandleInfoHandler.c +++ b/src/HandleInfoHandler.c @@ -22,6 +22,7 @@ #include "IRCEvents.h" #include "tools.h" #include "modules.h" +#include "log.h" #define AUTHSERV_NICK "AuthServ" @@ -40,7 +41,7 @@ static struct HandleInfoQueueEntry* addHandleInfoQueueEntry(struct ClientSocket struct HandleInfoQueueEntry *entry = malloc(sizeof(*entry)); if (!entry) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } SYNCHRONIZE(cache_sync); diff --git a/src/IRCEvents.c b/src/IRCEvents.c index 9728502..2eea34d 100644 --- a/src/IRCEvents.c +++ b/src/IRCEvents.c @@ -21,6 +21,7 @@ #include "ChanUser.h" #include "ClientSocket.h" #include "mysqlConn.h" +#include "log.h" struct binding { void *func; @@ -105,7 +106,7 @@ int bind_##NAME(FUNCTYPE *func, int module_id) { \ if(!is_bound(TYPE, func)) { \ struct binding *cbind = malloc(sizeof(*cbind)); \ if (!cbind) { \ - perror("malloc() failed"); \ + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); \ return 0; \ } \ cbind->func = func; \ diff --git a/src/IRCParser.c b/src/IRCParser.c index bcb9f02..d9a707f 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -31,6 +31,7 @@ #include "timeq.h" #include "ConfigParser.h" #include "statistics.h" +#include "log.h" struct irc_cmd *irc_commands = NULL; //static struct UserNode *registering_users = NULL; @@ -59,9 +60,9 @@ void parse_line(struct ClientSocket *client, char *line) { int argc = 0; char *argv[MAXNUMPARAMS]; #ifdef HAVE_THREADS - putlog(LOGLEVEL_RAW, "[%d recv %lu] %s\n", getCurrentThreadID(), (unsigned long) strlen(line), line); + printf_log("main", LOG_IRCRAW, "[%d recv %lu] %s\n", getCurrentThreadID(), (unsigned long) strlen(line), line); #else - putlog(LOGLEVEL_RAW, "[recv %lu] %s\n", (unsigned long) strlen(line), line); + printf_log("main", LOG_IRCRAW, "[recv %lu] %s\n", (unsigned long) strlen(line), line); #endif if(line[0] == ':') line++; @@ -91,7 +92,7 @@ static void register_irc_function(char *command, irc_cmd_t *func) { struct irc_cmd *irc_cmd = malloc(sizeof(*irc_cmd)); if (!irc_cmd) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } irc_cmd->cmd = command; @@ -112,7 +113,7 @@ static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char * if(!irc_cmd) { event_raw(client, from, cmd, argv, argc); } else if(!ret) { - fprintf(stderr,"PARSE ERROR: %s\n", cmd); + printf_log("main", LOG_WARNING | LOG_IRCRAW, "PARSE ERROR: %s\n", cmd); } } @@ -384,8 +385,8 @@ static IRC_CMD(raw_join) { } if(chanuser->visCount > chan->botcount) { + printf_log("main", LOG_WARNING, "visCount (%d) bigger than botcount (%d) on channel %s (user %s).", chanuser->visCount, chan->botcount, chan->name, user->nick); chanuser->visCount = chan->botcount; - //TODO: Trigger WARNING } //if multiple bots see the user, it can't be invisible @@ -897,7 +898,7 @@ static void raw_005_network(struct ClientSocket *client, char *value) { if(bot == client) continue; if(!bot->network_name) continue; if(stricmp(bot->network_name, value)) { - putlog(LOGLEVEL_ERROR, "WARNING: Network name '%s' (%s) differs from '%s' (%s)! Connecting to multiple IRC-Networks with one instance is NOT supported!\n", client->network_name, client->nick, bot->network_name, bot->nick); + printf_log("main", LOG_ERROR, "WARNING: Network name '%s' (%s) differs from '%s' (%s)! Connecting to multiple IRC-Networks with one instance is NOT supported!\n", client->network_name, client->nick, bot->network_name, bot->nick); break; } } diff --git a/src/IRCQueue.c b/src/IRCQueue.c index 296850d..a7cc1a4 100644 --- a/src/IRCQueue.c +++ b/src/IRCQueue.c @@ -18,6 +18,7 @@ #include "ClientSocket.h" #include "IOHandler.h" #include "tools.h" +#include "log.h" #define MAXPENALTY 8 /* 4 messages */ @@ -41,7 +42,7 @@ static IOHANDLER_CALLBACK(queue_callback); static struct BotQueue *initialize_queue(struct ClientSocket *client) { struct BotQueue *queue = malloc(sizeof(*queue)); if (!queue) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } queue->client = client; @@ -131,7 +132,7 @@ int queue_add(struct ClientSocket *client, char* msg, int len) { } else { struct QueueEntry *entry = malloc(sizeof(*entry)); if (!entry) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return 0; } entry->msg = strdup(msg); diff --git a/src/ModeNode.c b/src/ModeNode.c index 8cc5b67..f3579cd 100644 --- a/src/ModeNode.c +++ b/src/ModeNode.c @@ -19,6 +19,7 @@ #include "ChanUser.h" #include "UserNode.h" #include "BanNode.h" +#include "log.h" static int modes_with_strarg, modes_with_intarg, modes_count; @@ -77,7 +78,7 @@ struct ModeNode *createModeNode(struct ChanNode *chan) { struct ModeNode *modes = malloc(sizeof(*modes)); if (!modes) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } modes->chan = chan; diff --git a/src/UserNode.c b/src/UserNode.c index a82e5ec..cd8735e 100644 --- a/src/UserNode.c +++ b/src/UserNode.c @@ -20,6 +20,7 @@ #include "tools.h" #include "IRCEvents.h" #include "IPNode.h" +#include "log.h" static struct UserNode **userList; @@ -288,7 +289,7 @@ struct UserNode* addUser(const char *nick) { struct UserNode *user = malloc(sizeof(*user)); if (!user) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } strcpy(user->nick, nick); @@ -350,7 +351,7 @@ struct UserNode* createTempUser(const char *nick) { if(!user) { user = malloc(sizeof(*user)); if (!user) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } user->ident[0] = 0; @@ -398,7 +399,7 @@ struct UserNode* createTempUserMask(const char *mask) { if(!user) { user = malloc(sizeof(*user)); if (!user) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } user->ident[0] = 0; @@ -421,7 +422,7 @@ struct UserNode* createTempUserMask(const char *mask) { user = malloc(sizeof(*user)); if (!user) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } strcpy(user->host, cmask); @@ -448,7 +449,7 @@ struct UserNode* createTempUserMask(const char *mask) { user = malloc(sizeof(*user)); if (!user) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } strcpy(user->nick, cmask); diff --git a/src/WHOHandler.c b/src/WHOHandler.c index 3294e38..5db3db6 100644 --- a/src/WHOHandler.c +++ b/src/WHOHandler.c @@ -23,6 +23,7 @@ #include "ClientSocket.h" #include "IPNode.h" #include "modules.h" +#include "log.h" #define WHOQUEUETYPE_ISONQUEUE 0x01 #define WHOQUEUETYPE_USERLIST 0x02 @@ -65,7 +66,7 @@ static struct WHOQueueEntry* addWHOQueueEntry(struct ClientSocket *client) { struct WHOQueueEntry *entry = malloc(sizeof(*entry)); if (!entry) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); DESYNCHRONIZE(whohandler_sync); return NULL; } diff --git a/src/bots.c b/src/bots.c index 076c0cb..7da678c 100644 --- a/src/bots.c +++ b/src/bots.c @@ -27,6 +27,7 @@ #include "DBHelper.h" #include "IRCEvents.h" #include "tools.h" +#include "log.h" struct cmd_bot_alias { int botid; @@ -275,7 +276,7 @@ void set_bot_alias(int botid, char *alias) { } botalias = malloc(sizeof(*botalias)); if (!botalias) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } botalias->botid = botid; diff --git a/src/lang.c b/src/lang.c index 22b0c77..7d1532b 100644 --- a/src/lang.c +++ b/src/lang.c @@ -19,6 +19,7 @@ #include "DBHelper.h" #include "mysqlConn.h" #include "tools.h" +#include "log.h" #define DEFAULT_LANG_TAG "EN" #define DEFAULT_LANG_NAME "English" @@ -54,7 +55,7 @@ static struct language* add_language(char *langtag, char *langname) { if(cindex == MAXLANGUAGES) return NULL; struct language *lang = malloc(sizeof(*lang)); if (!lang) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } lang->langtag = strdup(langtag); @@ -143,7 +144,7 @@ void register_language_string(struct language *lang, char *ident, char *text) { if(!lang_entry) { lang_entry = malloc(sizeof(*lang_entry)); if (!lang_entry) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } lang_entry->ident = strdup(ident); @@ -211,7 +212,7 @@ char *build_language_string(struct UserNode *user, char *buffer, const char *msg if(buffer == NULL) { buffer = (char *)malloc((MAXLEN+1) * sizeof(char)); if (!buffer) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } } diff --git a/src/log.c b/src/log.c new file mode 100644 index 0000000..6e1ba87 --- /dev/null +++ b/src/log.c @@ -0,0 +1,291 @@ +/* log.c - NeonServ v5.6 + * Copyright (C) 2011-2012 Philipp Kreil (pk910) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "log.h" +#include "ChanNode.h" +#include "IRCEvents.h" +#include "ClientSocket.h" +#include "bots.h" +#include "IOHandler.h" +#include "tools.h" +#include "ConfigParser.h" + +#define MAXLOGLEN 1024 + +static void write_log(const char *module, const int section, const char *line, int len); +static void load_log_targets(); +static void unload_log_targets(); +static int reload_log_targets(int init); + + +#define LOG_TARGET_TYPE_FILE 1 +#define LOG_TARGET_TYPE_STDOUT 2 +#define LOG_TARGET_TYPE_STDERR 3 +#define LOG_TARGET_TYPE_IRC 4 + +static const struct { + int id; + char *name; +} log_sections[] = { + {LOG_INFO, "info"}, + {LOG_DEBUG, "debug"}, + {LOG_IRCRAW, "raw"}, + {LOG_MYSQL, "mysql"}, + {LOG_OVERRIDE, "override"}, + {LOG_WARNING, "warning"}, + {LOG_ERROR, "error"}, + {LOG_FATAL, "fatal"}, + {0, NULL} +}; + +struct log_target { + char *module; + int section; + int type : 8; + union { + char *channel; + FILE *fptr; + } target; + struct log_target *next; +}; + +static struct log_target *log_targets = NULL; + +static char *get_section_name(int section_id) { + int i = -1; + while(log_sections[++i].id) { + if(log_sections[i].id == section_id) + return log_sections[i].name; + } + return NULL; +} + +static int get_section_id(char *section_name) { + int i = -1; + while(log_sections[++i].id) { + if(!stricmp(log_sections[i].name, section_name)) + return log_sections[i].id; + } + return 0; +} + + +void printf_log(const char *module, const int section, const char *text, ...) { + va_list arg_list; + char logBuf[MAXLOGLEN]; + int pos; + logBuf[0] = '\0'; + va_start(arg_list, text); + pos = vsnprintf(logBuf, MAXLOGLEN - 1, text, arg_list); + va_end(arg_list); + if (pos < 0 || pos > (MAXLOGLEN - 1)) pos = MAXLOGLEN - 1; + logBuf[pos] = '\0'; + write_log(module, section, logBuf, pos); +} + +static void write_log(const char *module, const int section, const char *line, int len) { + if(!log_targets) + return; + SYNCHRONIZE(log_sync); + struct log_target *target; + char lineBuf[MAXLOGLEN]; + char timeBuf[80]; + int lineBufPos, timeBufPos; + time_t rawtime; + struct tm *timeinfo; + int i, j; + + time(&rawtime); + timeinfo = localtime(&rawtime); + timeBufPos = strftime(timeBuf, 80, "[%X %x] ", timeinfo); + + lineBufPos = sprintf(lineBuf, "(%s:", module); + for(i = 0, j = 0; i < LOG_SECTIONS; i++) { + if((section & (1 << i))) { + char *section_name = get_section_name((1 << i)); + if(!section_name) + continue; + if(j++) + lineBuf[lineBufPos++] = ','; + lineBufPos += sprintf(lineBuf + lineBufPos, "%s", section_name); + } + } + lineBufPos += sprintf(lineBuf + lineBufPos, ") %s", line); + //cut off \n \r + while(lineBuf[lineBufPos-1] == '\r' || lineBuf[lineBufPos-1] == '\n') { + lineBuf[lineBufPos-1] = '\0'; + lineBufPos--; + } + + j = 0; + for(target = log_targets; target; target = target->next) { + if(strcmp(target->module, "*") && stricmp(target->module, module)) + continue; + if(!(target->section & section)) + continue; + if(target->type == LOG_TARGET_TYPE_IRC) { + if(section == LOG_IRCRAW || (!stricmp(module, "iohandler") && section == LOG_DEBUG)) + continue; //endless loop ;) + struct ChanNode *channel = getChanByName(target->target.channel); + struct ClientSocket *client; + if(channel && (client = getChannelBot(channel, 0))) { + putsock(client, "PRIVMSG %s :%s", channel->name, lineBuf); + } + } else if(target->type == LOG_TARGET_TYPE_FILE) { + fwrite(timeBuf, 1, timeBufPos, target->target.fptr); + fwrite(lineBuf, 1, lineBufPos, target->target.fptr); + fwrite("\n", 1, 1, target->target.fptr); + } else if(target->type == LOG_TARGET_TYPE_STDOUT || target->type == LOG_TARGET_TYPE_STDERR) { + if(process_state.daemonized) + continue; //block stdout / stderr as daemon + fprintf((target->type == LOG_TARGET_TYPE_STDOUT ? stdout : stderr), "%s%s\n", timeBuf, lineBuf); + j = 1; + } + } + if((process_state.loglevel & section) && !process_state.daemonized && !j) { + fprintf(stdout, "%s%s\n", timeBuf, lineBuf); + } + + DESYNCHRONIZE(log_sync); +} + +static void load_log_targets() { + if(log_targets) + return; + char **targetlist = get_all_fieldnames("logs"); + if(!targetlist) return; + int i = 0; + char tmp[MAXLEN]; + struct log_target *ctarget; + while(targetlist[i]) { + sprintf(tmp, "logs.%s", targetlist[i]); + char *type = get_string_field(tmp); + char *target = strchr(type, ':'); + char *module = targetlist[i]; + char *section = strchr(module, ':'); + if(!target || !section) { + i++; + continue; + } + *target = '\0'; + target++; + *section = '\0'; + section++; + ctarget = malloc(sizeof(*ctarget)); + if(!stricmp(type, "file")) { + ctarget->type = LOG_TARGET_TYPE_FILE; + ctarget->target.fptr = fopen(target, "a"); + if(!ctarget->target.fptr) { + free(ctarget); + ctarget = NULL; + } + } else if(!stricmp(type, "std")) { + if(!stricmp(target, "out")) + ctarget->type = LOG_TARGET_TYPE_STDOUT; + else if(!stricmp(target, "err")) + ctarget->type = LOG_TARGET_TYPE_STDERR; + else { + free(ctarget); + ctarget = NULL; + } + } else if(!stricmp(type, "irc")) { + if(is_valid_chan(target)) { + ctarget->type = LOG_TARGET_TYPE_IRC; + ctarget->target.channel = strdup(target); + } else { + free(ctarget); + ctarget = NULL; + } + } else { + free(ctarget); + ctarget = NULL; + } + if(ctarget) { + ctarget->module = strdup(module); + ctarget->section = 0; + char *csection = section; + while(1) { + char *next_section = strchr(csection, ','); + if(next_section) + *next_section = '\0'; + if(!strcmp(csection, "*")) + ctarget->section |= LOG_ALL; + else + ctarget->section |= get_section_id(csection); + if(next_section) { + *next_section = ','; + csection = next_section + 1; + } else + break; + } + ctarget->next = log_targets; + log_targets = ctarget; + } + target--; + *target = ':'; + section--; + *section = ':'; + i++; + } +} + +static void unload_log_targets() { + struct log_target *target, *next_target; + for(target = log_targets; target; target = next_target) { + next_target = target->next; + if(target->type == LOG_TARGET_TYPE_IRC) + free(target->target.channel); + else if(target->type == LOG_TARGET_TYPE_FILE) + fclose(target->target.fptr); + free(target); + } + log_targets = NULL; +} + +static int reload_log_targets(int init) { + unload_log_targets(); + load_log_targets(); + return 1; +} + +static IOHANDLER_LOG_BACKEND(log_iohandler_backend) { + int log_level; + switch(type) { + case IOLOG_DEBUG: + log_level = LOG_DEBUG; + break; + case IOLOG_WARNING: + log_level = LOG_WARNING; + break; + case IOLOG_ERROR: + log_level = LOG_ERROR; + break; + case IOLOG_FATAL: + log_level = LOG_FATAL; + break; + default: + log_level = 0; + } + write_log("iohandler", log_level, line, strlen(line)); +} + +void init_log() { + load_log_targets(); + bind_reload(reload_log_targets, 0); + iolog_backend = log_iohandler_backend; + printf_log("log", LOG_INFO, "initialized log system."); +} diff --git a/src/log.h b/src/log.h new file mode 100644 index 0000000..657e527 --- /dev/null +++ b/src/log.h @@ -0,0 +1,39 @@ +/* log.h - NeonServ v5.6 + * Copyright (C) 2011-2012 Philipp Kreil (pk910) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#ifndef _log_h +#define _log_h +#include "main.h" + +#define LOG_INFO 0x01 +#define LOG_DEBUG 0x02 +#define LOG_IRCRAW 0x04 +#define LOG_MYSQL 0x08 +#define LOG_OVERRIDE 0x10 +#define LOG_WARNING 0x20 +#define LOG_ERROR 0x40 +#define LOG_FATAL 0x80 + +#define LOG_ALL 0xff +#define LOG_SECTIONS 8 + +#ifndef DND_FUNCTIONS + +void printf_log(const char *module, const int section, const char *text, ...); +void init_log(); + +#endif +#endif diff --git a/src/main.c b/src/main.c index 23903d9..d2c482a 100644 --- a/src/main.c +++ b/src/main.c @@ -17,7 +17,6 @@ #define DEFAULT_PID_FILE "neonserv.pid" #define DEFAULT_CONF_FILE "neonserv.conf" -#define DEFAULT_LOG_FILE "neonserv.log" #include "main.h" #include "signal.h" @@ -46,11 +45,10 @@ #include "ModuleFunctions.h" #include "IOHandler.h" #include "statistics.h" +#include "log.h" struct ProcessState process_state; -static FILE *log_fptr = NULL; - #ifdef HAVE_THREADS pthread_mutex_t cache_sync; pthread_mutex_t whohandler_sync, whohandler_mass_sync; @@ -120,7 +118,7 @@ static void main_daemonize() { fprintf(stderr, "Unable to fork: %s\n", strerror(errno)); } else if (pid > 0) { printf("Forking into the background (pid: %d)...\n", pid); - putlog(LOGLEVEL_INFO, "Forking into the background (pid: %d)...\n", pid); + printf_log("main", LOG_INFO, "Forking into the background (pid: %d)...\n", pid); exit(0); } setsid(); @@ -129,7 +127,7 @@ static void main_daemonize() { FILE *pidfile = fopen(process_state.pidfile, "w"); if (pidfile == NULL) { fprintf(stderr, "Unable to create PID file: %s\n", strerror(errno)); - putlog(LOGLEVEL_ERROR, "Unable to create PID file: %s\n", strerror(errno)); + printf_log("main", LOG_ERROR, "Unable to create PID file: %s\n", strerror(errno)); } else { fprintf(pidfile, "%i\n", (int)getpid()); fclose(pidfile); @@ -142,8 +140,11 @@ static void main_daemonize() { } static int reload_configuration() { - if(!loadConfig(process_state.config)) + printf_log("main", LOG_DEBUG, "reloading configuration file: %s", process_state.config); + if(!loadConfig(process_state.config)) { + printf_log("main", LOG_ERROR, "could not reload configuration file: %s", process_state.config); return 1; + } if(process_state.loaded_config) { if(!reload_mysql()) return 2; @@ -163,12 +164,13 @@ static int reload_configuration() { /* INITIALISATION OF SUBSYSTEMS */ void initialize_subsystems() { init_bind(); + init_log(); + printf_log("main", LOG_INFO, "starting up NeonServ %s subsystems...", NEONSERV_VERSION); init_lang(); init_parser(); init_UserNode(); init_ChanNode(); init_ModeNode(); - init_bind(); init_modcmd(); register_module_commands(); init_handleinfohandler(); @@ -183,6 +185,7 @@ void initialize_subsystems() { } void shutdown_subsystems() { + printf_log("main", LOG_INFO, "stopping NeonServ subsystems..."); free_sockets(1); //wait 50ms (run iohandler) { @@ -485,46 +488,6 @@ static TIMEQ_CALLBACK(main_checkauths) { timeq_add(next_call, 0, main_checkauths, NULL); } -/* LOG BACKEND */ - -void write_log(int loglevel, const char *line, int len) { - SYNCHRONIZE(log_sync); - if(!process_state.daemonized && (process_state.loglevel & loglevel)) { - printf("%s", line); - } else if(!process_state.daemonized && loglevel == LOGLEVEL_ERROR) { - fprintf(stderr, "%s", line); - } - if(get_int_field("log.loglevel") & loglevel) { - if(!log_fptr) { - log_fptr = fopen(DEFAULT_LOG_FILE, "a"); - if(!log_fptr) goto write_log_end; - } - time_t rawtime; - struct tm *timeinfo; - time(&rawtime); - timeinfo = localtime(&rawtime); - char timestr[20]; - int timepos = strftime(timestr, 20, "%x %X ", timeinfo); - fwrite(timestr, 1, timepos, log_fptr); - fwrite(line, 1, len, log_fptr); - } - write_log_end: - DESYNCHRONIZE(log_sync); -} - -void putlog(int loglevel, const char *text, ...) { - va_list arg_list; - char logBuf[MAXLOGLEN]; - int pos; - logBuf[0] = '\0'; - va_start(arg_list, text); - pos = vsnprintf(logBuf, MAXLOGLEN - 1, text, arg_list); - va_end(arg_list); - if (pos < 0 || pos > (MAXLOGLEN - 1)) pos = MAXLOGLEN - 1; - logBuf[pos] = '\0'; - write_log(loglevel, logBuf, pos); -} - /* INSTALLATION SCRIPT */ static void check_firstrun() { diff --git a/src/main.h b/src/main.h index 85e4fd8..1f1d0f3 100644 --- a/src/main.h +++ b/src/main.h @@ -52,7 +52,5 @@ extern pthread_mutex_t whohandler_sync, whohandler_mass_sync; /* MODULAR ACCESSIBLE */ void restart_bot(int crash); /* MODULAR ACCESSIBLE */ void stop_bot(); /* MODULAR ACCESSIBLE */ void reload_config(); - -/* MODULAR ACCESSIBLE */ void putlog(int loglevel, const char *text, ...) PRINTF_LIKE(2, 3); #endif #endif \ No newline at end of file diff --git a/src/modcmd.c b/src/modcmd.c index 0c1e92e..fd71523 100644 --- a/src/modcmd.c +++ b/src/modcmd.c @@ -28,6 +28,7 @@ #include "DBHelper.h" #include "EventLogger.h" #include "tools.h" +#include "log.h" struct trigger_callback { int botid; @@ -113,7 +114,7 @@ static char* get_channel_trigger(int botid, int clientid, struct ChanNode *chan) triggerStr[0] = '\0'; trigger = malloc(sizeof(*trigger)); if (!trigger) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return 0; } trigger->botid = botid; @@ -380,7 +381,7 @@ static void handle_command(struct ClientSocket *client, struct UserNode *user, s struct command_check_user_cache *data = malloc(sizeof(*data)); char **temp_argv = malloc(argc*sizeof(*temp_argv)); if (!data || !temp_argv) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); break; } memcpy(temp_argv, argv, argc*sizeof(*temp_argv)); @@ -630,7 +631,7 @@ int register_command(int botid, char *name, int module_id, cmd_bind_t *func, int } cmdfunc = malloc(sizeof(*cmdfunc)); if (!cmdfunc) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return 0; } cmdfunc->botid = botid; @@ -655,7 +656,7 @@ int set_trigger_callback(int botid, int module_id, trigger_callback_t *func) { if(!cb) { cb = malloc(sizeof(*cb)); if (!cb) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return 0; } cb->botid = botid; @@ -709,7 +710,7 @@ int bind_botwise_cmd_to_function(int botid, int clientid, char *cmd, struct cmd_ } cbind = malloc(sizeof(*cbind)); if (!cbind) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return 0; } cbind->botid = botid; @@ -755,7 +756,7 @@ int bind_botwise_cmd_to_command(int botid, int clientid, char *cmd, char *func) } cbind = malloc(sizeof(*cbind)); if (!cbind) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return 0; } cbind->botid = botid; @@ -1009,7 +1010,7 @@ void register_command_alias(int botid, char *alias) { } botalias = malloc(sizeof(*botalias)); if (!botalias) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } botalias->botid = botid; diff --git a/src/modules.c b/src/modules.c index 7310c88..325621e 100644 --- a/src/modules.c +++ b/src/modules.c @@ -22,7 +22,9 @@ /* 000-001 */ #include "main.h" /* 002-004 */ #include "tools.h" /* 005-006 */ /* deprecated */ -/* 007-011 */ /* main.h */ +/* 007-009 */ /* main.h */ +/* 010 */ #include "log.h" +/* 011 */ /* main.h */ /* 012 */ #include "BanNode.h" /* 013-019 */ #include "bots.h" /* 020-025 */ #include "ChanNode.h" @@ -67,7 +69,7 @@ void *global_functions[] = { /* 007 */ (Function) restart_bot, /* 008 */ (Function) stop_bot, /* 009 */ (Function) reload_config, -/* 010 */ (Function) putlog, +/* 010 */ (Function) printf_log, #ifdef HAVE_THREADS /* 011 */ (Function) getCurrentThreadID, #else @@ -312,7 +314,7 @@ struct ModuleInfo *loadModule(char *name) { module = dlopen(fname, RTLD_LAZY); } if(!module) { - putlog(LOGLEVEL_ERROR, "Error loading module '%s': %s not found.\n", name, fname); + printf_log("main", LOG_ERROR, "Error loading module '%s': %s not found.\n", name, fname); return NULL; } void* initfunc = dlsym(module, "init_module"); @@ -323,7 +325,7 @@ struct ModuleInfo *loadModule(char *name) { sprintf(fname, "%s.dll", name); HMODULE module = LoadLibrary(fname); if(!module) { - putlog(LOGLEVEL_ERROR, "Error loading module '%s': %s not found.\n", name, fname); + printf_log("main", LOG_ERROR, "Error loading module '%s': %s not found.\n", name, fname); return NULL; } FARPROC initfunc = GetProcAddress(module, "init_module"); @@ -332,19 +334,19 @@ struct ModuleInfo *loadModule(char *name) { FARPROC modversion = GetProcAddress(module, "modversion"); #endif if(!startfunc || !stopfunc || !modversion) { - putlog(LOGLEVEL_ERROR, "Error loading module '%s': required symbols not found.\n", name); + printf_log("main", LOG_ERROR, "Error loading module '%s': required symbols not found.\n", name); return NULL; } int version = ((int (*)(void)) modversion)(); if(version != MODULE_VERSION) { - putlog(LOGLEVEL_ERROR, "Error loading module '%s': version mismatch ('%d' main code, '%d' module)\n", name, MODULE_VERSION, version); + printf_log("main", LOG_ERROR, "Error loading module '%s': version mismatch ('%d' main code, '%d' module)\n", name, MODULE_VERSION, version); return NULL; } //start module int errid; int module_id = module_id_counter++; if((errid = ((int (*)(void **, int)) initfunc)(global_functions, module_id))) { - putlog(LOGLEVEL_ERROR, "Error loading module '%s': module reported error (errid: %d)\n", name, errid); + printf_log("main", LOG_ERROR, "Error loading module '%s': module reported error (errid: %d)\n", name, errid); return NULL; } modinfo = malloc(sizeof(*modinfo)); diff --git a/src/modules/NeonKick.mod/event_neonkick_join.c b/src/modules/NeonKick.mod/event_neonkick_join.c index 40439eb..6dc1224 100644 --- a/src/modules/NeonKick.mod/event_neonkick_join.c +++ b/src/modules/NeonKick.mod/event_neonkick_join.c @@ -38,7 +38,7 @@ static void neonkick_event_join(struct ChanUser *chanuser) { if(!(user->flags & USERFLAG_ISAUTHED)) { struct neonkick_event_join_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonkick", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_access.c b/src/modules/NeonServ.mod/cmd_neonserv_access.c index b00046c..ce84cd4 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_access.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_access.c @@ -36,7 +36,7 @@ CMD_BIND(neonserv_cmd_access) { if(!(user->flags & USERFLAG_ISAUTHED)) { struct neonserv_cmd_access_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -67,7 +67,7 @@ CMD_BIND(neonserv_cmd_access) { } else { struct neonserv_cmd_access_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_addban.c b/src/modules/NeonServ.mod/cmd_neonserv_addban.c index 196e890..63e8224 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_addban.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_addban.c @@ -35,7 +35,7 @@ struct neonserv_cmd_addban_cache { CMD_BIND(neonserv_cmd_addban) { struct neonserv_cmd_addban_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_addtimeban.c b/src/modules/NeonServ.mod/cmd_neonserv_addtimeban.c index da4ff6a..2e096f9 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_addtimeban.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_addtimeban.c @@ -42,7 +42,7 @@ CMD_BIND(neonserv_cmd_addtimeban) { } struct neonserv_cmd_addtimeban_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_adduser.c b/src/modules/NeonServ.mod/cmd_neonserv_adduser.c index 6a11fa1..e8b14bd 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_adduser.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_adduser.c @@ -64,7 +64,7 @@ CMD_BIND(neonserv_cmd_adduser) { //but first lookup the auth to check if it really exists struct neonserv_cmd_adduser_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -91,7 +91,7 @@ CMD_BIND(neonserv_cmd_adduser) { } else { struct neonserv_cmd_adduser_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_assignrank.c b/src/modules/NeonServ.mod/cmd_neonserv_assignrank.c index 9b49627..19a906a 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_assignrank.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_assignrank.c @@ -59,7 +59,7 @@ CMD_BIND(neonserv_cmd_assignrank) { //but first lookup the auth to check if it really exists struct neonserv_cmd_assignrank_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -85,7 +85,7 @@ CMD_BIND(neonserv_cmd_assignrank) { } else { struct neonserv_cmd_assignrank_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_ban.c b/src/modules/NeonServ.mod/cmd_neonserv_ban.c index be8244f..2a419eb 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_ban.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_ban.c @@ -33,7 +33,7 @@ struct neonserv_cmd_ban_cache { CMD_BIND(neonserv_cmd_ban) { struct neonserv_cmd_ban_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_chanservsync.c b/src/modules/NeonServ.mod/cmd_neonserv_chanservsync.c index f918d27..e4e0096 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_chanservsync.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_chanservsync.c @@ -95,7 +95,7 @@ CMD_BIND(neonserv_cmd_chanservsync) { } struct neonserv_cmd_chanservsync_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -214,7 +214,7 @@ static void neonserv_cmd_chanservsync_notice_listener(struct UserNode *user, str //lookup auth struct neonserv_cmd_chanservsync_auth_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = neonserv_cmd_chanservsync_used->client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_clvl.c b/src/modules/NeonServ.mod/cmd_neonserv_clvl.c index eb99e42..159d540 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_clvl.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_clvl.c @@ -67,7 +67,7 @@ CMD_BIND(neonserv_cmd_clvl) { } else { struct neonserv_cmd_clvl_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_dehalfop.c b/src/modules/NeonServ.mod/cmd_neonserv_dehalfop.c index 46d888f..2882180 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_dehalfop.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_dehalfop.c @@ -34,7 +34,7 @@ struct neonserv_cmd_dehalfop_cache { CMD_BIND(neonserv_cmd_dehalfop) { struct neonserv_cmd_dehalfop_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_dehalfopall.c b/src/modules/NeonServ.mod/cmd_neonserv_dehalfopall.c index 49a770d..ce948ac 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_dehalfopall.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_dehalfopall.c @@ -34,7 +34,7 @@ struct neonserv_cmd_dehalfopall_cache { CMD_BIND(neonserv_cmd_dehalfopall) { struct neonserv_cmd_dehalfopall_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_deluser.c b/src/modules/NeonServ.mod/cmd_neonserv_deluser.c index 3d2c17b..e283f18 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_deluser.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_deluser.c @@ -51,7 +51,7 @@ CMD_BIND(neonserv_cmd_deluser) { } else { struct neonserv_cmd_deluser_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_deop.c b/src/modules/NeonServ.mod/cmd_neonserv_deop.c index cf2328e..d030b8e 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_deop.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_deop.c @@ -34,7 +34,7 @@ struct neonserv_cmd_deop_cache { CMD_BIND(neonserv_cmd_deop) { struct neonserv_cmd_deop_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_deopall.c b/src/modules/NeonServ.mod/cmd_neonserv_deopall.c index b81239b..0299a8b 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_deopall.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_deopall.c @@ -34,7 +34,7 @@ struct neonserv_cmd_deopall_cache { CMD_BIND(neonserv_cmd_deopall) { struct neonserv_cmd_deopall_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_giveowner.c b/src/modules/NeonServ.mod/cmd_neonserv_giveowner.c index 1c7b65e..67b1463 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_giveowner.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_giveowner.c @@ -66,7 +66,7 @@ CMD_BIND(neonserv_cmd_giveowner) { } else { struct neonserv_cmd_giveowner_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_halfop.c b/src/modules/NeonServ.mod/cmd_neonserv_halfop.c index 2cdff8a..8c83389 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_halfop.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_halfop.c @@ -33,7 +33,7 @@ struct neonserv_cmd_halfop_cache { CMD_BIND(neonserv_cmd_halfop) { struct neonserv_cmd_halfop_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_halfopall.c b/src/modules/NeonServ.mod/cmd_neonserv_halfopall.c index d18bb68..5ce22e8 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_halfopall.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_halfopall.c @@ -34,7 +34,7 @@ struct neonserv_cmd_halfopall_cache { CMD_BIND(neonserv_cmd_halfopall) { struct neonserv_cmd_halfopall_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_invite.c b/src/modules/NeonServ.mod/cmd_neonserv_invite.c index 22184ab..b9bce28 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_invite.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_invite.c @@ -72,7 +72,7 @@ CMD_BIND(neonserv_cmd_invite) { } else { struct neonserv_cmd_invite_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -139,7 +139,7 @@ static TIMEQ_CALLBACK(neonserv_cmd_invite_timeout_timeout) { static struct neonserv_cmd_invite_timeout* neonserv_cmd_invite_add_timeout(char *nick, char *chan) { struct neonserv_cmd_invite_timeout *entry = malloc(sizeof(*entry)); if (!entry) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } entry->next = NULL; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_kick.c b/src/modules/NeonServ.mod/cmd_neonserv_kick.c index 005149c..a4d3481 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_kick.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_kick.c @@ -35,7 +35,7 @@ struct neonserv_cmd_kick_cache { CMD_BIND(neonserv_cmd_kick) { struct neonserv_cmd_kick_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_kickban.c b/src/modules/NeonServ.mod/cmd_neonserv_kickban.c index 1fda7d0..a580764 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_kickban.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_kickban.c @@ -35,7 +35,7 @@ struct neonserv_cmd_kickban_cache { CMD_BIND(neonserv_cmd_kickban) { struct neonserv_cmd_kickban_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_mode.c b/src/modules/NeonServ.mod/cmd_neonserv_mode.c index 9aae43e..992ff46 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_mode.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_mode.c @@ -34,7 +34,7 @@ struct neonserv_cmd_mode_cache { CMD_BIND(neonserv_cmd_mode) { struct neonserv_cmd_mode_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_myaccess.c b/src/modules/NeonServ.mod/cmd_neonserv_myaccess.c index d1204f4..6fa063b 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_myaccess.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_myaccess.c @@ -40,7 +40,7 @@ CMD_BIND(neonserv_cmd_myaccess) { if(!(user->flags & USERFLAG_ISAUTHED)) { struct neonserv_cmd_myaccess_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -78,7 +78,7 @@ CMD_BIND(neonserv_cmd_myaccess) { } else { struct neonserv_cmd_myaccess_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c b/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c index 1231160..0fad5a8 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_nicklist.c @@ -66,7 +66,7 @@ CMD_BIND(neonserv_cmd_nicklist) { } struct neonserv_cmd_nicklist_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_noregister.c b/src/modules/NeonServ.mod/cmd_neonserv_noregister.c index 3044df3..2c15f49 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_noregister.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_noregister.c @@ -70,7 +70,7 @@ CMD_BIND(neonserv_cmd_noregister) { //but first lookup the auth to check if it really exists struct neonserv_cmd_noregister_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -98,7 +98,7 @@ CMD_BIND(neonserv_cmd_noregister) { } else { struct neonserv_cmd_noregister_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_op.c b/src/modules/NeonServ.mod/cmd_neonserv_op.c index df987b2..d6679bc 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_op.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_op.c @@ -33,7 +33,7 @@ struct neonserv_cmd_op_cache { CMD_BIND(neonserv_cmd_op) { struct neonserv_cmd_op_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_opall.c b/src/modules/NeonServ.mod/cmd_neonserv_opall.c index a18964f..3f2646a 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_opall.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_opall.c @@ -38,7 +38,7 @@ CMD_BIND(neonserv_cmd_opall) { } struct neonserv_cmd_opall_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_peek.c b/src/modules/NeonServ.mod/cmd_neonserv_peek.c index 91f88fa..fe600cd 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_peek.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_peek.c @@ -31,7 +31,7 @@ struct neonserv_cmd_peek_cache { CMD_BIND(neonserv_cmd_peek) { struct neonserv_cmd_peek_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_rename.c b/src/modules/NeonServ.mod/cmd_neonserv_rename.c index d88b000..34b72b0 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_rename.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_rename.c @@ -35,7 +35,7 @@ static void neonserv_cmd_rename_async1(struct ClientSocket *client, struct Clien CMD_BIND(neonserv_cmd_rename) { struct neonserv_cmd_rename_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_resync.c b/src/modules/NeonServ.mod/cmd_neonserv_resync.c index 7c5948e..46a095e 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_resync.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_resync.c @@ -51,7 +51,7 @@ CMD_BIND(neonserv_cmd_resync) { } struct neonserv_cmd_resync_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_suspend.c b/src/modules/NeonServ.mod/cmd_neonserv_suspend.c index 2ef151f..e4fc158 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_suspend.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_suspend.c @@ -51,7 +51,7 @@ CMD_BIND(neonserv_cmd_suspend) { } else { struct neonserv_cmd_suspend_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_trace.c b/src/modules/NeonServ.mod/cmd_neonserv_trace.c index 2cceb92..49dc741 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_trace.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_trace.c @@ -38,7 +38,7 @@ CMD_BIND(neonserv_cmd_trace) { //ok parse the criterias struct neonserv_cmd_trace_criteria *criteria = malloc(sizeof(*criteria)); if (!criteria) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } memset(criteria, 0, sizeof(*criteria)); diff --git a/src/modules/NeonServ.mod/cmd_neonserv_trim.c b/src/modules/NeonServ.mod/cmd_neonserv_trim.c index a9e49dc..52478a9 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_trim.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_trim.c @@ -107,7 +107,7 @@ CMD_BIND(neonserv_cmd_trim) { } struct neonserv_cmd_trim_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_unban.c b/src/modules/NeonServ.mod/cmd_neonserv_unban.c index f145e33..6361bb8 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_unban.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_unban.c @@ -41,7 +41,7 @@ CMD_BIND(neonserv_cmd_unban) { nextmask = merge_argv_char(argv, 0, argc, ','); struct neonserv_cmd_unban_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_unsuspend.c b/src/modules/NeonServ.mod/cmd_neonserv_unsuspend.c index f70c884..7c88303 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_unsuspend.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_unsuspend.c @@ -51,7 +51,7 @@ CMD_BIND(neonserv_cmd_unsuspend) { } else { struct neonserv_cmd_unsuspend_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_unvisited.c b/src/modules/NeonServ.mod/cmd_neonserv_unvisited.c index fc00afa..5f1572e 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_unvisited.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_unvisited.c @@ -69,7 +69,7 @@ static void neonserv_check_unvisited(struct ClientSocket *client, struct ClientS struct ChanNode *channel; struct neonserv_cmd_unvisited_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_up.c b/src/modules/NeonServ.mod/cmd_neonserv_up.c index 8a531f0..a5d4d85 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_up.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_up.c @@ -35,7 +35,7 @@ CMD_BIND(neonserv_cmd_up) { if(isModeSet(chan->modes, 'd') || isModeSet(chan->modes, 'D')) { struct neonserv_cmd_up_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_users.c b/src/modules/NeonServ.mod/cmd_neonserv_users.c index 5442526..73aa173 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_users.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_users.c @@ -44,7 +44,7 @@ CMD_BIND(neonserv_cmd_users) { } struct neonserv_cmd_users_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_voice.c b/src/modules/NeonServ.mod/cmd_neonserv_voice.c index e4639b9..ea3de40 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_voice.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_voice.c @@ -33,7 +33,7 @@ struct neonserv_cmd_voice_cache { CMD_BIND(neonserv_cmd_voice) { struct neonserv_cmd_voice_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_voiceall.c b/src/modules/NeonServ.mod/cmd_neonserv_voiceall.c index fd4bafb..a1c2325 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_voiceall.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_voiceall.c @@ -33,7 +33,7 @@ struct neonserv_cmd_voiceall_cache { CMD_BIND(neonserv_cmd_voiceall) { struct neonserv_cmd_voiceall_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/cmd_neonserv_wipeinfo.c b/src/modules/NeonServ.mod/cmd_neonserv_wipeinfo.c index e09851e..bde1a24 100644 --- a/src/modules/NeonServ.mod/cmd_neonserv_wipeinfo.c +++ b/src/modules/NeonServ.mod/cmd_neonserv_wipeinfo.c @@ -51,7 +51,7 @@ CMD_BIND(neonserv_cmd_wipeinfo) { } else { struct neonserv_cmd_wipeinfo_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/event_neonserv_ctcp.c b/src/modules/NeonServ.mod/event_neonserv_ctcp.c index abb7d66..200b80f 100644 --- a/src/modules/NeonServ.mod/event_neonserv_ctcp.c +++ b/src/modules/NeonServ.mod/event_neonserv_ctcp.c @@ -36,7 +36,7 @@ static void neonserv_event_chanctcp(struct UserNode *user, struct ChanNode *chan if(!(user->flags & USERFLAG_ISAUTHED)) { struct neonserv_event_ctcp_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/event_neonserv_join.c b/src/modules/NeonServ.mod/event_neonserv_join.c index 8903959..5f77f42 100644 --- a/src/modules/NeonServ.mod/event_neonserv_join.c +++ b/src/modules/NeonServ.mod/event_neonserv_join.c @@ -53,7 +53,7 @@ static void neonserv_event_join(struct ChanUser *chanuser) { if(!(user->flags & USERFLAG_ISAUTHED)) { struct neonserv_event_join_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/event_neonserv_kick.c b/src/modules/NeonServ.mod/event_neonserv_kick.c index 1fc5409..2daf63a 100644 --- a/src/modules/NeonServ.mod/event_neonserv_kick.c +++ b/src/modules/NeonServ.mod/event_neonserv_kick.c @@ -58,7 +58,7 @@ static void neonserv_event_kick(struct UserNode *user, struct ChanUser *target, if(!(chan->flags & CHANFLAG_CHAN_REGISTERED)) return; struct neonserv_event_kick_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/event_neonserv_mode.c b/src/modules/NeonServ.mod/event_neonserv_mode.c index 255c079..7926493 100644 --- a/src/modules/NeonServ.mod/event_neonserv_mode.c +++ b/src/modules/NeonServ.mod/event_neonserv_mode.c @@ -38,7 +38,7 @@ static void neonserv_event_mode(struct UserNode *user, struct ChanNode *chan, ch if(argc) temp_argv = malloc(argc*sizeof(*temp_argv)); if (!cache || (argc && !temp_argv)) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } if(argc) { diff --git a/src/modules/NeonServ.mod/event_neonserv_notice.c b/src/modules/NeonServ.mod/event_neonserv_notice.c index 408636a..c15089a 100644 --- a/src/modules/NeonServ.mod/event_neonserv_notice.c +++ b/src/modules/NeonServ.mod/event_neonserv_notice.c @@ -34,7 +34,7 @@ static void neonserv_event_channotice(struct UserNode *user, struct ChanNode *ch if(!(user->flags & USERFLAG_ISAUTHED)) { struct neonserv_event_notice_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonServ.mod/event_neonserv_topic.c b/src/modules/NeonServ.mod/event_neonserv_topic.c index 9082989..3958f83 100644 --- a/src/modules/NeonServ.mod/event_neonserv_topic.c +++ b/src/modules/NeonServ.mod/event_neonserv_topic.c @@ -34,7 +34,7 @@ static void neonserv_event_topic(struct UserNode *user, struct ChanNode *chan, c if(!(user->flags & USERFLAG_ISAUTHED)) { struct neonserv_event_topic_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonSpam.mod/bot_NeonSpam.c b/src/modules/NeonSpam.mod/bot_NeonSpam.c index d261b79..dd2e4d1 100644 --- a/src/modules/NeonSpam.mod/bot_NeonSpam.c +++ b/src/modules/NeonSpam.mod/bot_NeonSpam.c @@ -225,7 +225,7 @@ int loadNeonSpamSettings(struct ChanNode *chan) { if(chan->spam_settings) return 0; struct NeonSpamSettings *settings = malloc(sizeof(*settings)); if(!settings) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return 0; } MYSQL_RES *res; @@ -321,7 +321,7 @@ static struct NeonSpamJoinNode *getNeonSpamJoinNode(struct ChanUser *chanuser) { return result; joinnode = malloc(sizeof(*joinnode)); if(!joinnode) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } joinnode->ident = strdup(chanuser->user->ident); @@ -336,7 +336,7 @@ static struct NeonSpamJoinNode *getNeonSpamJoinNode(struct ChanUser *chanuser) { static void createSpamNode(struct ChanUser *chanuser) { struct NeonSpamNode *spamnode = malloc(sizeof(*spamnode)); if(!spamnode) { - perror("malloc() failed"); + printf_log("neonserv", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } spamnode->lastmsg = 0; diff --git a/src/modules/NeonSpam.mod/event_neonspam_chanmsg.c b/src/modules/NeonSpam.mod/event_neonspam_chanmsg.c index 648f505..5e7f1ae 100644 --- a/src/modules/NeonSpam.mod/event_neonspam_chanmsg.c +++ b/src/modules/NeonSpam.mod/event_neonspam_chanmsg.c @@ -154,7 +154,7 @@ static void neonspam_event_chanmsg(struct UserNode *user, struct ChanNode *chan, } else { struct neonspam_event_chanmsg_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonspam", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/NeonSpam.mod/event_neonspam_join.c b/src/modules/NeonSpam.mod/event_neonspam_join.c index 53280d4..f34b1a3 100644 --- a/src/modules/NeonSpam.mod/event_neonspam_join.c +++ b/src/modules/NeonSpam.mod/event_neonspam_join.c @@ -46,7 +46,7 @@ static void neonspam_event_join(struct ChanUser *chanuser) { } else { struct neonspam_event_join_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("neonspam", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/global.mod/cmd_global_extscript.c b/src/modules/global.mod/cmd_global_extscript.c index 0d5e656..74cde9d 100644 --- a/src/modules/global.mod/cmd_global_extscript.c +++ b/src/modules/global.mod/cmd_global_extscript.c @@ -126,7 +126,7 @@ CMD_BIND(global_cmd_extscript) { struct global_cmd_extscript_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("global", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/global.mod/cmd_global_register.c b/src/modules/global.mod/cmd_global_register.c index 3e69c26..03fa932 100644 --- a/src/modules/global.mod/cmd_global_register.c +++ b/src/modules/global.mod/cmd_global_register.c @@ -96,7 +96,7 @@ CMD_BIND(global_cmd_register) { //but first lookup the auth to check if it really exists struct global_cmd_register_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("global", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -125,7 +125,7 @@ CMD_BIND(global_cmd_register) { } else { struct global_cmd_register_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("global", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/global.mod/cmd_global_setaccess.c b/src/modules/global.mod/cmd_global_setaccess.c index f568ff0..8753cc3 100644 --- a/src/modules/global.mod/cmd_global_setaccess.c +++ b/src/modules/global.mod/cmd_global_setaccess.c @@ -60,7 +60,7 @@ CMD_BIND(global_cmd_setaccess) { //but first lookup the auth to check if it really exists struct global_cmd_setaccess_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("global", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; @@ -86,7 +86,7 @@ CMD_BIND(global_cmd_setaccess) { } else { struct global_cmd_setaccess_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("global", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; diff --git a/src/modules/module.h b/src/modules/module.h index 25a7676..1b9dac7 100644 --- a/src/modules/module.h +++ b/src/modules/module.h @@ -20,6 +20,7 @@ #include "../overall.h" #include "../version.h" #include "../mysqlConn.h" +#include "../log.h" extern void **global; extern int module_id; @@ -35,7 +36,7 @@ extern int module_id; /* 007 */ #define restart_bot ((void (*)(int))global[7]) /* 008 */ #define stop_bot ((void (*)(void))global[8]) /* 009 */ #define reload_config ((void (*)(void))global[9]) -/* 010 */ #define putlog ((void (*)(int, const char *, ...))global[10]) +/* 010 */ #define printf_log ((void (*)(char *, int, const char *, ...))global[10]) #ifdef HAVE_THREADS /* 011 */ #define getCurrentThreadID ((int (*)(void))global[11]) #endif diff --git a/src/mysqlConn.c b/src/mysqlConn.c index 4673c7d..45ab193 100644 --- a/src/mysqlConn.c +++ b/src/mysqlConn.c @@ -18,6 +18,7 @@ #include "mysqlConn.h" #include "ConfigParser.h" #include "tools.h" +#include "log.h" #define DATABASE_VERSION "20" static void show_mysql_error(); @@ -160,7 +161,8 @@ void init_mysql() { } } fclose(f); - } + } else + printf_log("main", LOG_ERROR | LOG_MYSQL, "File not found: database.sql"); f = fopen("database.defaults.sql", "r"); if (f) { char line[4096]; @@ -175,7 +177,8 @@ void init_mysql() { } } fclose(f); - } + } else + printf_log("main", LOG_ERROR | LOG_MYSQL, "File not found: database.defaults.sql"); do { MYSQL_RES *res = mysql_store_result(mysql_conn); mysql_free_result(res); @@ -209,7 +212,7 @@ void init_mysql() { } fclose(f); } else - perror("database.sql missing!"); + printf_log("main", LOG_ERROR | LOG_MYSQL, "File not found: database.upgrade.sql"); do { MYSQL_RES *res = mysql_store_result(mysql_conn); mysql_free_result(res); @@ -232,7 +235,7 @@ void free_mysql() { static void show_mysql_error() { MYSQL *mysql_conn = get_mysql_conn(); //show mysql_error() - putlog(LOGLEVEL_ERROR, "MySQL Error: %s\n", mysql_error(mysql_conn)); + printf_log("main", LOG_ERROR | LOG_MYSQL, "Error: %s\n", mysql_error(mysql_conn)); } void printf_mysql_query(const char *text, ...) { @@ -246,7 +249,7 @@ void printf_mysql_query(const char *text, ...) { va_end(arg_list); if (pos < 0 || pos > (MYSQLMAXLEN - 2)) pos = MYSQLMAXLEN - 2; queryBuf[pos] = '\0'; - putlog(LOGLEVEL_MYSQL, "MySQL: %s\n", queryBuf); + printf_log("main", LOG_MYSQL, "%s\n", queryBuf); if(mysql_query(mysql_conn, queryBuf)) { check_mysql(); if(mysql_query(mysql_conn, queryBuf)) { @@ -266,7 +269,7 @@ void printf_long_mysql_query(int len, const char *text, ...) { va_end(arg_list); if (pos < 0 || pos > (len - 2)) pos = len - 2; queryBuf[pos] = '\0'; - putlog(LOGLEVEL_MYSQL, "MySQL: %s\n", queryBuf); + printf_log("main", LOG_MYSQL, "%s\n", queryBuf); if(mysql_query(mysql_conn, queryBuf)) { check_mysql(); if(mysql_query(mysql_conn, queryBuf)) { diff --git a/src/overall.h b/src/overall.h index 26ff10e..d500e47 100644 --- a/src/overall.h +++ b/src/overall.h @@ -159,8 +159,6 @@ #define timeval_is_bigger(x,y) ((x.tv_sec > y.tv_sec) || (x.tv_sec == y.tv_sec && x.tv_usec > y.tv_usec)) -#define perror(errmsg) (putlog(LOGLEVEL_ERROR, "ERROR (%s:%d) %s", __FILE__, __LINE__, errmsg)) - #define MODSTATE_RELOAD 0x01 #define MODSTATE_STARTSTOP 0x02 #define MODSTATE_REBIND 0x03 diff --git a/src/signal.c b/src/signal.c index bc44446..4e8f9a5 100644 --- a/src/signal.c +++ b/src/signal.c @@ -20,12 +20,13 @@ #include "ClientSocket.h" #include "IOHandler.h" #include "ConfigParser.h" +#include "log.h" static void sigcrash(); static void sigexit(); void sighandler(int signum) { - putlog(LOGLEVEL_INFO, "Received Signal %d\n", signum); + printf_log("main", LOG_INFO, "Received Signal %d\n", signum); signal(signum, SIG_DFL); switch(signum) { case SIGABRT: @@ -66,22 +67,14 @@ static void sigcrash(int signum) { signame = "SIGUNKNOWN"; break; } - putlog(LOGLEVEL_ERROR, "NeonServ process crashed (%s)\n", signame); + printf_log("main", LOG_ERROR, "NeonServ process crashed (%s)\n", signame); #ifndef WIN32 char gcore[50]; sprintf(gcore, "gcore %u", getpid()); int sysretn = system(gcore); //generate core file sprintf(coregen, "core file generated. (%d)", sysretn); - putlog(LOGLEVEL_ERROR | LOGLEVEL_INFO, "generated core file.\n"); + printf_log("main", LOG_ERROR | LOG_INFO, "generated core file.\n"); #endif - char *alertchan = get_string_field("General.alertchan"); - if(alertchan) { - struct ChanNode *channel = getChanByName(alertchan); - struct ClientSocket *client; - if(channel && (client = getChannelBot(channel, 0))) { - putsock(client, "PRIVMSG %s :\00304NeonServ received signal %d (%s). %s", alertchan, signum, signame, coregen); - } - } //close all bots struct ClientSocket *bot; for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) { @@ -91,7 +84,7 @@ static void sigcrash(int signum) { bot->iofd = NULL; } } - putlog(LOGLEVEL_INFO, "hard shutdown...\n"); + printf_log("main", LOG_INFO, "hard shutdown...\n"); usleep(2000000); //hard restart restart_bot(1); diff --git a/src/timeq.c b/src/timeq.c index c95068d..c18227a 100644 --- a/src/timeq.c +++ b/src/timeq.c @@ -18,6 +18,7 @@ #include "timeq.h" #include "IOHandler.h" #include "tools.h" +#include "log.h" static struct timeq_entry *timeq_events; #ifdef HAVE_THREADS @@ -47,7 +48,7 @@ struct timeq_entry* timeq_uadd(int useconds, int module_id, timeq_callback_t *ca struct timeq_entry *entry = malloc(sizeof(*entry)); if (!entry) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } #ifdef HAVE_THREADS diff --git a/src/tools.c b/src/tools.c index 5447232..0232671 100644 --- a/src/tools.c +++ b/src/tools.c @@ -20,6 +20,7 @@ #include "lang.h" #include "ClientSocket.h" #include "IPNode.h" +#include "log.h" static const struct default_language_entry msgtab[] = { {"TIME_MASK_2_ITEMS", "%s and %s"}, /* {ARGS: "2 days", "1 hour"} */ @@ -388,7 +389,7 @@ int getCurrentSecondsOfDay() { struct ModeBuffer* initModeBuffer(struct ClientSocket *client, struct ChanNode *chan) { struct ModeBuffer *modeBuf = malloc(sizeof(*modeBuf)); if(!modeBuf) { - perror("malloc() failed"); + printf_log("main", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return NULL; } modeBuf->client = client; -- 2.20.1