]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/commands.cpp
Changed to non-conflicting numeric 948 for invalid idle time
[user/henk/code/inspircd.git] / src / commands.cpp
index 00074fb5192bde94696bd7e582ae693a1623936a..dc757c80328d8e8acf3bb2fa590a0d582dcb585a 100644 (file)
@@ -264,12 +264,36 @@ void handle_kick(char **parameters, int pcnt, userrec *user)
        }
        
        // this must be propogated so that channel membership is kept in step network-wide
-       
        char buffer[MAXBUF];
        snprintf(buffer,MAXBUF,"k %s %s %s :%s",user->nick,u->nick,Ptr->name,reason);
        NetSendToAll(buffer);
 }
 
+void handle_loadmodule(char **parameters, int pcnt, userrec *user)
+{
+       if (LoadModule(parameters[0]))
+       {
+               WriteOpers("*** NEW MODULE: %s",parameters[0]);
+               WriteServ(user->fd,"975 %s %s :Module successfully loaded.",user->nick, parameters[0]);
+       }
+       else
+       {
+               WriteServ(user->fd,"974 %s %s :Failed to load module: %s",user->nick, parameters[0],ModuleError());
+       }
+}
+
+void handle_unloadmodule(char **parameters, int pcnt, userrec *user)
+{
+        if (UnloadModule(parameters[0]))
+        {
+                WriteOpers("*** MODULE UNLOADED: %s",parameters[0]);
+                WriteServ(user->fd,"973 %s %s :Module successfully unloaded.",user->nick, parameters[0]);
+        }
+        else
+        {
+                WriteServ(user->fd,"972 %s %s :Failed to unload module: %s",user->nick, parameters[0],ModuleError());
+        }
+}
 
 void handle_die(char **parameters, int pcnt, userrec *user)
 {
@@ -341,9 +365,11 @@ void handle_kill(char **parameters, int pcnt, userrec *user)
         log(DEBUG,"kill: %s %s",parameters[0],parameters[1]);
        if (u)
        {
+               log(DEBUG,"into kill mechanism");
                int MOD_RESULT = 0;
                 FOREACH_RESULT(OnKill(user,u,parameters[1]));
                 if (MOD_RESULT) {
+                       log(DEBUG,"A module prevented the kill with result %d",MOD_RESULT);
                         return;
                 }
 
@@ -364,14 +390,15 @@ void handle_kill(char **parameters, int pcnt, userrec *user)
                                log(DEBUG,"deleting user hash value %d",iter->second);
                                if ((iter->second) && (user->registered == 7)) {
                                        delete iter->second;
-                                       }
-                       clientlist.erase(iter);
+                               }
+                               clientlist.erase(iter);
                        }
                        purge_empty_chans();
                }
                else
                {
                        // local kill
+                       log(DEFAULT,"LOCAL KILL: %s :%s!%s!%s (%s)", u->nick, ServerName,user->dhost,user->nick,parameters[1]);
                        WriteTo(user, u, "KILL %s :%s!%s!%s (%s)", u->nick, ServerName,user->dhost,user->nick,parameters[1]);
                        WriteOpers("*** Local Kill by %s: %s!%s@%s (%s)",user->nick,u->nick,u->ident,u->host,parameters[1]);
                        snprintf(killreason,MAXBUF,"Killed (%s (%s))",user->nick,parameters[1]);
@@ -545,6 +572,12 @@ void handle_names(char **parameters, int pcnt, userrec *user)
 {
        chanrec* c;
 
+       if (!pcnt)
+       {
+               WriteServ(user->fd,"366 %s * :End of /NAMES list.",user->nick);
+               return;
+       }
+
        if (loop_call(handle_names,parameters,pcnt,user,0,pcnt-1,0))
                return;
        c = FindChan(parameters[0]);
@@ -1198,10 +1231,29 @@ void handle_modules(char **parameters, int pcnt, userrec *user)
 {
        for (int i = 0; i < module_names.size(); i++)
        {
-                       Version V = modules[i]->GetVersion();
-                       char modulename[MAXBUF];
-                       strlcpy(modulename,module_names[i].c_str(),256);
-                       WriteServ(user->fd,"900 %s :0x%08lx %d.%d.%d.%d %s",user->nick,modules[i],V.Major,V.Minor,V.Revision,V.Build,CleanFilename(modulename));
+               Version V = modules[i]->GetVersion();
+               char modulename[MAXBUF];
+               char flagstate[MAXBUF];
+               strcpy(flagstate,"");
+               if (V.Flags & VF_STATIC)
+                       strlcat(flagstate,", static",MAXBUF);
+               if (V.Flags & VF_VENDOR)
+                       strlcat(flagstate,", vendor",MAXBUF);
+               if (V.Flags & VF_COMMON)
+                       strlcat(flagstate,", common",MAXBUF);
+               if (V.Flags & VF_SERVICEPROVIDER)
+                       strlcat(flagstate,", service provider",MAXBUF);
+               if (!strlen(flagstate))
+                       strcpy(flagstate,"  <no flags>");
+               strlcpy(modulename,module_names[i].c_str(),256);
+               if (strchr(user->modes,'o'))
+               {
+                       WriteServ(user->fd,"900 %s :0x%08lx %d.%d.%d.%d %s (%s)",user->nick,modules[i],V.Major,V.Minor,V.Revision,V.Build,CleanFilename(modulename),flagstate+2);
+               }
+               else
+               {
+                       WriteServ(user->fd,"900 %s :%s",user->nick,CleanFilename(modulename));
+               }
        }
 }
 
@@ -1572,7 +1624,7 @@ void handle_oper(char **parameters, int pcnt, userrec *user)
                if (!fail2)
                {
                        WriteServ(user->fd,"491 %s :Invalid oper credentials",user->nick);
-                       WriteOpers("*** WARNING! qFailed oper attempt by %s!%s@%s!",user->nick,user->ident,user->host);
+                       WriteOpers("*** WARNING! Failed oper attempt by %s!%s@%s!",user->nick,user->ident,user->host);
                        log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: user, host or password did not match.",user->nick,user->ident,user->host);
                }
                else
@@ -2310,7 +2362,7 @@ void handle_hash(char token,char* params,serverrec* source,serverrec* reply, cha
        char* create_time = strtok(NULL," ");
        char* duration = strtok(NULL," :");
        char* reason = strtok(NULL,"\r\n");
-       add_gline(atoi(duration),who,reason,mask);
+       add_gline(atoi(duration),(const char*)who,(const char*)reason,(const char*)mask);
        // we must update the creation time on this gline
        // now that we've added it, or it wont expire at the right time.
        gline_set_creation_time(mask,atoi(create_time));
@@ -2332,7 +2384,7 @@ void handle_dot(char token,char* params,serverrec* source,serverrec* reply, char
        char* who = strtok(NULL," ");
        if (mask)
        {
-               if (del_gline(mask))
+               if (del_gline((const char*)mask))
                {
                        if (who)
                        {
@@ -2351,7 +2403,7 @@ void handle_add_sqline(char token,char* params,serverrec* source,serverrec* repl
        char* create_time = strtok(NULL," ");
        char* duration = strtok(NULL," :");
        char* reason = strtok(NULL,"\r\n");
-       add_qline(atoi(duration),who,reason,mask);
+       add_qline(atoi(duration),(const char*)who,(const char*)reason,(const char*)mask);
        // we must update the creation time on this gline
        // now that we've added it, or it wont expire at the right time.
        qline_set_creation_time(mask,atoi(create_time));
@@ -2374,7 +2426,7 @@ void handle_del_sqline(char token,char* params,serverrec* source,serverrec* repl
        char* who = strtok(NULL," ");
        if (mask)
        {
-               if (del_qline(mask))
+               if (del_qline((const char*)mask))
                {
                        if (who)
                        {
@@ -2393,7 +2445,7 @@ void handle_add_szline(char token,char* params,serverrec* source,serverrec* repl
        char* create_time = strtok(NULL," ");
        char* duration = strtok(NULL," :");
        char* reason = strtok(NULL,"\r\n");
-       add_zline(atoi(duration),who,reason,mask);
+       add_zline(atoi(duration),(const char*)who,(const char*)reason,(const char*)mask);
        // we must update the creation time on this gline
        // now that we've added it, or it wont expire at the right time.
        zline_set_creation_time(mask,atoi(create_time));
@@ -2416,7 +2468,7 @@ void handle_del_szline(char token,char* params,serverrec* source,serverrec* repl
        char* who = strtok(NULL," ");
        if (mask)
        {
-               if (del_zline(mask))
+               if (del_zline((const char*)mask))
                {
                        if (who)
                        {
@@ -2707,6 +2759,10 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv)
                {
                        token = '*';
                }
+               if (!strcmp(command,"PING"))
+               {
+                       token = '*';
+               }
                if (!strcmp(command,"NOTICE"))
                {
                        snprintf(udp_msg,MAXBUF,"V %s %s",source,data);
@@ -3008,6 +3064,8 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv)
                char Link_Pass[1024];
                char Link_SendPass[1024];
                int LinkPort = 0;
+
+               log(DEBUG,"U-token linked server detected.");
                
                // search for a corresponding <link> block in the config files
                for (int i = 0; i < ConfValueEnum("link",&config_f); i++)
@@ -3098,14 +3156,14 @@ void handle_link_packet(char* udp_msg, char* tcp_host, serverrec *serv)
        }
 }
 
-long duration(char* str)
+long duration(const char* str)
 {
        char n_field[MAXBUF];
        long total = 0;
-       char* str_end = str + strlen(str);
+       const char* str_end = str + strlen(str);
        n_field[0] = 0;
        
-       for (char* i = str; i < str_end; i++)
+       for (char* i = (char*)str; i < str_end; i++)
        {
                // if we have digits, build up a string for the value in n_field,
                // up to 10 digits in size.