X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_user%2Fcmd_user.cpp;h=c4cdd9b37d94a3adde06004460491194986dd8ae;hb=c8f515121fbdf3e4de693712ef2311cece45477d;hp=cec11c104efd274f808e6371b4fde5b0b9c90e0e;hpb=c67d3103e9f7397f0ab9631bf07a5e5547deb2c3;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_user/cmd_user.cpp b/src/coremods/core_user/cmd_user.cpp index cec11c104..c4cdd9b37 100644 --- a/src/coremods/core_user/cmd_user.cpp +++ b/src/coremods/core_user/cmd_user.cpp @@ -19,23 +19,22 @@ #include "inspircd.h" +#include "core_user.h" -/** Handle /USER. - */ -class CommandUser : public SplitCommand +enum { - public: - /** Constructor for user. - */ - CommandUser ( Module* parent) : SplitCommand(parent,"USER",4,4) { works_before_reg = true; Penalty = 0; syntax = " "; } - /** Handle command. - * @param parameters The parameters to the command - * @param user The user issuing the command - * @return A value from CmdResult to indicate command success or failure. - */ - CmdResult HandleLocal(const std::vector& parameters, LocalUser *user); + // From ircu. + ERR_INVALIDUSERNAME = 468 }; +CommandUser::CommandUser(Module* parent) + : SplitCommand(parent, "USER", 4, 4) +{ + works_before_reg = true; + Penalty = 0; + syntax = " "; +} + CmdResult CommandUser::HandleLocal(const std::vector& parameters, LocalUser *user) { /* A user may only send the USER command once */ @@ -43,20 +42,11 @@ CmdResult CommandUser::HandleLocal(const std::vector& parameters, L { if (!ServerInstance->IsIdent(parameters[0])) { - /* - * RFC says we must use this numeric, so we do. Let's make it a little more nub friendly though. :) - * -- Craig, and then w00t. - */ - user->WriteNumeric(ERR_NEEDMOREPARAMS, "USER :Your username is not valid"); + user->WriteNumeric(ERR_INVALIDUSERNAME, name, "Your username is not valid"); return CMD_FAILURE; } else { - /* - * The ident field is IDENTMAX+2 in size to account for +1 for the optional - * ~ character, and +1 for null termination, therefore we can safely use up to - * IDENTMAX here. - */ user->ChangeIdent(parameters[0]); user->fullname.assign(parameters[3].empty() ? "No info" : parameters[3], 0, ServerInstance->Config->Limits.MaxGecos); user->registered = (user->registered | REG_USER); @@ -64,23 +54,26 @@ CmdResult CommandUser::HandleLocal(const std::vector& parameters, L } else { - user->WriteNumeric(ERR_ALREADYREGISTERED, ":You may not reregister"); + user->WriteNumeric(ERR_ALREADYREGISTERED, "You may not reregister"); + user->CommandFloodPenalty += 1000; return CMD_FAILURE; } /* parameters 2 and 3 are local and remote hosts, and are ignored */ + return CheckRegister(user); +} + +CmdResult CommandUser::CheckRegister(LocalUser* user) +{ + // If the user is registered, return CMD_SUCCESS/CMD_FAILURE depending on what modules say, otherwise just + // return CMD_SUCCESS without doing anything, knowing the other handler will call us again if (user->registered == REG_NICKUSER) { ModResult MOD_RESULT; - - /* user is registered now, bit 0 = USER command, bit 1 = sent a NICK command */ FIRST_MOD_RESULT(OnUserRegister, MOD_RESULT, (user)); if (MOD_RESULT == MOD_RES_DENY) return CMD_FAILURE; - } return CMD_SUCCESS; } - -COMMAND_INIT(CommandUser)