X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcommand_parse.cpp;h=a7fd810a320fdd28d90a6c157bc3726e0bb9f2a6;hb=551d687ec6d7ce44be35fae0dd7345fe73c4f63a;hp=2b75bfa9f0139e2cb8d7c366f6a77923c782d7cc;hpb=44f42a13de52c8025942ddab42f51feb36821782;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/command_parse.cpp b/src/command_parse.cpp index 2b75bfa9f..a7fd810a3 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.cpp @@ -37,7 +37,7 @@ int InspIRCd::PassCompare(Extensible* ex, const std::string &data, const std::st return 1; /* We dont handle any hash types except for plaintext - Thanks tra26 */ - if (hashtype != "" && hashtype != "plaintext") + if (!hashtype.empty() && hashtype != "plaintext") /* See below. 1 because they dont match */ return 1; @@ -93,7 +93,7 @@ int CommandParser::LoopCall(User* user, Command* CommandObj, const std::vector new_parameters(parameters); if (!items2.GetToken(extrastuff)) - extrastuff = ""; + extrastuff.clear(); new_parameters[splithere] = item; if (extra >= 0) @@ -148,6 +148,9 @@ CmdResult CommandParser::CallHandler(const std::string &commandname, const std:: if (n != cmdlist.end()) { + if ((!parameters.empty()) && (parameters.back().empty()) && (!n->second->allow_empty_last_param)) + return CMD_INVALID; + if (parameters.size() >= n->second->min_params) { bool bOkay = false; @@ -243,7 +246,7 @@ bool CommandParser::ProcessCommand(LocalUser *user, std::string &cmd) * a * test */ - std::string lparam = ""; + std::string lparam; /* * The '-1' here is a clever trick, we'll go backwards throwing everything into a temporary param @@ -297,7 +300,7 @@ bool CommandParser::ProcessCommand(LocalUser *user, std::string &cmd) return do_more; } } - if ((user->registered == REG_ALL) && (!IS_OPER(user)) && (cm->second->IsDisabled())) + if ((user->registered == REG_ALL) && (!user->IsOper()) && (cm->second->IsDisabled())) { /* command is disabled! */ if (ServerInstance->Config->DisabledDontExist) @@ -314,6 +317,10 @@ bool CommandParser::ProcessCommand(LocalUser *user, std::string &cmd) command.c_str(), user->nick.c_str(), user->ident.c_str(), user->host.c_str()); return do_more; } + + if ((!command_p.empty()) && (command_p.back().empty()) && (!cm->second->allow_empty_last_param)) + command_p.pop_back(); + if (command_p.size() < cm->second->min_params) { user->WriteNumeric(ERR_NEEDMOREPARAMS, "%s %s :Not enough parameters.", user->nick.c_str(), command.c_str()); @@ -364,7 +371,7 @@ bool CommandParser::ProcessBuffer(std::string &buffer,LocalUser *user) if (!user || buffer.empty()) return true; - ServerInstance->Logs->Log("USERINPUT", RAWIO, "C[%s] I :%s %s", + ServerInstance->Logs->Log("USERINPUT", LOG_RAWIO, "C[%s] I :%s %s", user->uuid.c_str(), user->nick.c_str(), buffer.c_str()); return ProcessCommand(user,buffer); }