]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/commands.cpp
/LOADMODULE and /UNLOADMODULE all successfully working!
[user/henk/code/inspircd.git] / src / commands.cpp
index 7dbec94fbb86bac5af9e17d5459d06a4bbf54efe..19dd9f200a070cf9be2106efa08a6229fd31c377 100644 (file)
@@ -270,6 +270,31 @@ void handle_kick(char **parameters, int pcnt, userrec *user)
        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)
 {
@@ -1513,18 +1538,22 @@ void handle_oper(char **parameters, int pcnt, userrec *user)
        char Password[MAXBUF];
        char OperType[MAXBUF];
        char TypeName[MAXBUF];
-       char Hostname[MAXBUF];
+       char HostName[MAXBUF];
+       char TheHost[MAXBUF];
        int i,j;
        bool found = false;
        bool fail2 = false;
        char global[MAXBUF];
 
+       snprintf(TheHost,MAXBUF,"%s@%s",user->ident,user->host);
+
        for (int i = 0; i < ConfValueEnum("oper",&config_f); i++)
        {
                ConfValue("oper","name",i,LoginName,&config_f);
                ConfValue("oper","password",i,Password,&config_f);
                ConfValue("oper","type",i,OperType,&config_f);
-               if ((!strcmp(LoginName,parameters[0])) && (!strcmp(Password,parameters[1])))
+               ConfValue("oper","host",i,HostName,&config_f);
+               if ((!strcmp(LoginName,parameters[0])) && (!strcmp(Password,parameters[1])) && (match(TheHost,HostName)))
                {
                        fail2 = true;
                        for (j =0; j < ConfValueEnum("type",&config_f); j++)
@@ -1536,8 +1565,8 @@ void handle_oper(char **parameters, int pcnt, userrec *user)
                                        /* found this oper's opertype */
                                        snprintf(global,MAXBUF,"| %s %s",user->nick,TypeName);
                                        NetSendToAll(global);
-                                       ConfValue("type","host",j,Hostname,&config_f);
-                                       ChangeDisplayedHost(user,Hostname);
+                                       ConfValue("type","host",j,HostName,&config_f);
+                                       ChangeDisplayedHost(user,HostName);
                                        strlcpy(user->oper,TypeName,NICKMAX);
                                        found = true;
                                        fail2 = false;
@@ -1560,6 +1589,7 @@ void handle_oper(char **parameters, int pcnt, userrec *user)
                         snprintf(global,MAXBUF,"M %s +o",user->nick);
                         NetSendToAll(global);
                        FOREACH_MOD OnOper(user);
+                       log(DEFAULT,"OPER: %s!%s@%s opered as type: %s",user->nick,user->ident,user->host,OperType);
                }
        }
        else
@@ -1567,12 +1597,14 @@ void handle_oper(char **parameters, int pcnt, userrec *user)
                if (!fail2)
                {
                        WriteServ(user->fd,"491 %s :Invalid oper credentials",user->nick);
-                       WriteOpers("*** WARNING! Failed oper attempt by %s!%s@%s!",user->nick,user->ident,user->host);
+                       WriteOpers("*** WARNING! qFailed 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
                {
                        WriteServ(user->fd,"491 %s :Your oper block does not have a valid opertype associated with it",user->nick);
                        WriteOpers("*** CONFIGURATION ERROR! Oper block mismatch for OperType %s",OperType);
+                        log(DEFAULT,"OPER: Failed oper attempt by %s!%s@%s: credentials valid, but oper type nonexistent.",user->nick,user->ident,user->host);
                }
        }
        return;