(thanks to the people reading git and excessively exploiting this bug... It was undet...
[NeonServV5.git] / src / IRCParser.c
index d9a707f63d024576c02c2a5bdc1cef516ed1515e..89047f8402648cae2289a74003a3ad998da9caba 100644 (file)
@@ -113,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) {
-        printf_log("main", LOG_WARNING | LOG_IRCRAW, "PARSE ERROR: %s\n", cmd);
+        printf_log("main", LOG_WARNING | LOG_IRCRAW, "PARSE ERROR: %s %s %s\n", (from ? from : "*"), cmd, merge_argv(argv, 0, argc));
     }
 }
 
@@ -481,7 +481,8 @@ static IRC_CMD(raw_kick) {
     chanuser->visCount--;
     if(chanuser->visCount == 0) {
         delChanUser(chanuser, 0); //not free, yet!
-        event_kick(user, chanuser, argv[2]);
+        if(user)
+            event_kick(user, chanuser, argv[2]);
         freeChanUser(chanuser);
     }
     
@@ -640,6 +641,7 @@ static IRC_CMD(raw_privmsg) {
     if(from == NULL || argc < 2) return 0;
     struct UserNode *user = getUserByMask(from);
     if(user == NULL) {
+        if(stricmplen(from, "***!", 4) == 0) return 1; /* ZNC Playback */
         user = createTempUserMask(from);
                if(!user) return 0;
         user->flags |= USERFLAG_ISTMPUSER;
@@ -684,6 +686,7 @@ static IRC_CMD(raw_privmsg) {
 }
 
 static IRC_CMD(raw_notice) {
+    if(from == NULL && argc && !stricmp(argv[0], "AUTH")) return 1; //NOTICE AUTH is NOT a parse error ;)
     if(from == NULL || argc < 2) return 0;
     struct UserNode *user = getUserByMask(from);
     if(user == NULL) {