add more information when deleting a user; added zombie channel search
[NeonServV5.git] / src / main.c
index f567e93f3e92ec5eaf0cd4b1e54caa1bea401cca..f3afaaf8a18c97a9bfd50a452eac5c2bd2a9feb5 100644 (file)
@@ -216,6 +216,12 @@ int main(int argc, char *argv[]) {
         exit(0);
     }
     check_firstrun();
+    char **modulelist = get_all_fieldnames("modules");
+    if(!modulelist || !modulelist[0]) {
+        fprintf(stderr, "no modules loaded... Please update your configuration!\n");
+        exit(0);
+    }
+    free(modulelist);
     if (run_as_daemon) {
         #ifndef WIN32
         /* Attempt to fork into the background if daemon mode is on. */
@@ -238,9 +244,10 @@ int main(int argc, char *argv[]) {
             fprintf(pidfile, "%i\n", (int)getpid());
             fclose(pidfile);
         }
-        fclose(stdin); fopen("/dev/null", "r");
-        fclose(stdout); fopen("/dev/null", "w");
-        fclose(stderr); fopen("/dev/null", "w");
+               FILE *retn;
+        fclose(stdin); retn = fopen("/dev/null", "r");
+        fclose(stdout); retn = fopen("/dev/null", "w");
+        fclose(stderr); retn = fopen("/dev/null", "w");
         #endif
     }
     
@@ -422,15 +429,24 @@ static AUTHLOOKUP_CALLBACK(main_checkauths_callback) {
     printf_mysql_query("SELECT `user_id`, `user_registered` FROM `users` WHERE `user_user` = '%s'", escape_string(auth));
     res = mysql_use();
     if ((row = mysql_fetch_row(res)) != NULL) {
-        if(!exists || (strcmp(row[1], "0") && registered != atoi(row[1]))) {
+        int diff = registered - atoi(row[1]);
+        if(diff < 0)
+            diff *= -1;
+        if(!exists || (strcmp(row[1], "0") && diff > 86400)) {
             //User is no longer valid! Delete it...
             deleteUser(atoi(row[0]));
             char *alertchan = get_string_field("General.CheckAuths.alertchan");
             if(alertchan) {
+                char reason[MAXLEN];
+                if(!exists) {
+                    strcpy(reason, "USER_NOT_EXISTS");
+                } else {
+                    sprintf(reason, "USER_REGISTERED_MISSMATCH: %lu, expected %d (diff: %d)", (unsigned long) registered, atoi(row[1]), diff);
+                }
                 struct ChanNode *alertchan_chan = getChanByName(alertchan);
                 struct ClientSocket *alertclient;
                 if(alertchan_chan && (alertclient = getChannelBot(alertchan_chan, 0)) != NULL) {
-                    putsock(alertclient, "PRIVMSG %s :Deleted User %s", alertchan_chan->name, auth);
+                    putsock(alertclient, "PRIVMSG %s :Deleted User %s (%s)", alertchan_chan->name, auth, reason);
                 }
             }
         } else if(exists && !strcmp(row[1], "0")) {
@@ -504,7 +520,7 @@ TIMEQ_CALLBACK(main_statistics) {
         statistics_enabled = 0;
 }
 
-void statistics_update() {
+int statistics_update() {
     if(get_int_field("statistics.enable") && statistics_requested_lusers && get_string_field("statistics.execute")) {
         statistics_requested_lusers = 0;
         char command[MAXLEN];
@@ -520,8 +536,9 @@ void statistics_update() {
         sprintf(command, "%s %d %d %d %d %d %d %d", get_string_field("statistics.execute"), getUserCount(), getChanUserCount(), getChannelCount(), statistics_privmsg, statistics_commands, statistics_network_users, statistics_network_channels);
         statistics_privmsg = 0;
         statistics_commands = 0;
-        system(command);
+        return system(command);
     }
+       return -1;
 }
 
 time_t getStartTime() {
@@ -529,7 +546,11 @@ time_t getStartTime() {
 }
 
 int getRunningThreads() {
+       #ifdef HAVE_THREADS
     return running_threads;
+       #else
+       return 1;
+       #endif
 }
 
 void write_log(int loglevel, const char *line, int len) {
@@ -582,7 +603,7 @@ static void check_firstrun() {
         printf("AuthServ account name of admin user: ");
         char *ptr;
         char adminuser[31];
-        fgets(adminuser, 30, stdin);
+        ptr = fgets(adminuser, 30, stdin);
         for(ptr = adminuser; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(strlen(adminuser) < 2) goto check_firstrun_admin;
         printf_mysql_query("SELECT `user_id` FROM `users` WHERE `user_user` = '%s'", escape_string(adminuser));
@@ -602,25 +623,25 @@ static void check_firstrun() {
         char bot_nick[31];
         check_firstrun_bot_nick:
         printf("Nick: ");
-        fgets(bot_nick, 30, stdin);
+        ptr = fgets(bot_nick, 30, stdin);
         for(ptr = bot_nick; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(strlen(bot_nick) < 2) goto check_firstrun_bot_nick;
         char bot_ident[16];
         check_firstrun_bot_ident:
         printf("Ident: ");
-        fgets(bot_ident, 15, stdin);
+        ptr = fgets(bot_ident, 15, stdin);
         for(ptr = bot_ident; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(strlen(bot_ident) < 2) goto check_firstrun_bot_ident;
         char bot_realname[101];
         check_firstrun_bot_realname:
         printf("Realname: ");
-        fgets(bot_realname, 100, stdin);
+        ptr = fgets(bot_realname, 100, stdin);
         for(ptr = bot_realname; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(strlen(bot_realname) < 2) goto check_firstrun_bot_realname;
         char bot_server[101];
         check_firstrun_bot_server:
         printf("Server: [irc.onlinegamesnet.net] ");
-        fgets(bot_server, 100, stdin);
+        ptr = fgets(bot_server, 100, stdin);
         for(ptr = bot_server; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(*bot_server && strlen(bot_nick) < 5) goto check_firstrun_bot_server;
         if(!*bot_server)
@@ -628,7 +649,7 @@ static void check_firstrun() {
         int bot_port;
         char bot_port_buf[7];
         printf("Port: [6667] ");
-        fgets(bot_port_buf, 6, stdin);
+        ptr = fgets(bot_port_buf, 6, stdin);
         for(ptr = bot_port_buf; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(!*bot_port_buf)
             bot_port = 6667;
@@ -638,7 +659,7 @@ static void check_firstrun() {
         char bot_ssl_buf[5];
         check_firstrun_bot_ssl:
         printf("SSL: [y/N] ");
-        fgets(bot_ssl_buf, 4, stdin);
+        ptr = fgets(bot_ssl_buf, 4, stdin);
         for(ptr = bot_ssl_buf; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(!*bot_ssl_buf || tolower(*bot_ssl_buf) == 'n')
             bot_ssl = 0;
@@ -648,12 +669,12 @@ static void check_firstrun() {
             goto check_firstrun_bot_ssl;
         char bot_pass[101];
         printf("Server Password: [] ");
-        fgets(bot_pass, 100, stdin);
+        ptr = fgets(bot_pass, 100, stdin);
         for(ptr = bot_pass; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         int bot_maxchan;
         char bot_maxchan_buf[5];
         printf("MaxChannel: [20] ");
-        fgets(bot_maxchan_buf, 5, stdin);
+        ptr = fgets(bot_maxchan_buf, 5, stdin);
         for(ptr = bot_maxchan_buf; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(*bot_maxchan_buf)
             bot_maxchan = atoi(bot_maxchan_buf);
@@ -663,7 +684,7 @@ static void check_firstrun() {
         char bot_queue_buf[5];
         check_firstrun_bot_queue:
         printf("Queue (prevents excess floods): [Y/n] ");
-        fgets(bot_queue_buf, 4, stdin);
+        ptr = fgets(bot_queue_buf, 4, stdin);
         for(ptr = bot_queue_buf; *ptr; ptr++) { if(*ptr == '\n' || *ptr == '\r') *ptr = '\0'; }
         if(!*bot_queue_buf || tolower(*bot_queue_buf) == 'y')
             bot_queue = 1;