]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/command_parse.cpp
Remove trailing spaces from input in irc::ircsepstream
[user/henk/code/inspircd.git] / src / command_parse.cpp
index c7e368005ff9043454999b3ce5141b12ec6359d6..735d17b8adb67cc0fb25ee9084e3ad6f2dc10190 100644 (file)
 #include <string>
 #include <sstream>
 #include <vector>
-#include <sched.h>
-#ifdef THREADED_DNS
-#include <pthread.h>
-#endif
+#include <algorithm>
 #include "users.h"
 #include "globals.h"
 #include "modules.h"
@@ -40,7 +37,6 @@
 #include "commands.h"
 #include "xline.h"
 #include "inspstring.h"
-#include "dnsqueue.h"
 #include "helperfuncs.h"
 #include "hashcomp.h"
 #include "socketengine.h"
@@ -210,10 +206,12 @@ void CommandParser::ProcessCommand(userrec *user, std::string &cmd)
        std::string command = tokens.GetToken();
 
        while (((para[items] = tokens.GetToken()) != "") && (items < 127))
+       {
+               log(DEBUG,"Param: '%s'",para[items].c_str());
                command_p[items] = para[items++].c_str();
+       }
 
-       for (std::string::iterator makeupper = command.begin(); makeupper != command.end(); makeupper++)
-               *makeupper = toupper(*makeupper);
+       std::transform(command.begin(), command.end(), command.begin(), ::toupper);
                
        int MOD_RESULT = 0;
        FOREACH_RESULT(I_OnPreCommand,OnPreCommand(command,command_p,items,user,false));
@@ -236,13 +234,13 @@ void CommandParser::ProcessCommand(userrec *user, std::string &cmd)
                                        WriteServ(user->fd,"481 %s :Permission Denied- You do not have the required operator privilages",user->nick);
                                        return;
                                }
+                               if (!user->HasPermission(command))
+                               {
+                                       WriteServ(user->fd,"481 %s :Permission Denied- Oper type %s does not have access to command %s",user->nick,user->oper,command.c_str());
+                                       return;
+                               }
                        }
-                       if ((cm->second->flags_needed) && (!user->HasPermission(command)))
-                       {
-                               WriteServ(user->fd,"481 %s :Permission Denied- Oper type %s does not have access to command %s",user->nick,user->oper,command.c_str());
-                               return;
-                       }
-                       if ((user->registered == 7) && (!*user->oper) && (cm->second->IsDisabled()))
+                       if ((user->registered == REG_ALL) && (!*user->oper) && (cm->second->IsDisabled()))
                        {
                                /* command is disabled! */
                                WriteServ(user->fd,"421 %s %s :This command has been disabled.",user->nick,command.c_str());
@@ -250,14 +248,13 @@ void CommandParser::ProcessCommand(userrec *user, std::string &cmd)
                        }
                        if (items < cm->second->min_params)
                        {
+                               WriteServ(user->fd,"461 %s %s :Not enough parameters.", user->nick, command.c_str());
                                /* If syntax is given, display this as the 461 reply */
-                               if (cm->second->syntax.length())
-                                       WriteServ(user->fd,"461 %s %s :Syntax: %s %s", user->nick, command.c_str(), cm->second->command.c_str(), cm->second->syntax.c_str());
-                               else
-                                       WriteServ(user->fd,"461 %s %s :Not enough parameters", user->nick, command.c_str());
+                               if ((Config->SyntaxHints) && (cm->second->syntax.length()))
+                                       WriteServ(user->fd,"304 %s :SYNTAX %s %s", user->nick, cm->second->command.c_str(), cm->second->syntax.c_str());
                                return;
                        }
-                       if ((user->registered == 7) || (cm->second == command_user) || (cm->second == command_nick) || (cm->second == command_pass))
+                       if ((user->registered == REG_ALL) || (cm->second == command_user) || (cm->second == command_nick) || (cm->second == command_pass))
                        {
                                /* ikky /stats counters */
                                cm->second->use_count++;