commit 74424cb1a557a4eb203296fdc015865f6260958e from: Florian Westphal date: Sun Jun 12 17:18:27 2005 UTC set 3 second penalty after failed /oper command. commit - 5c20474fdb245df8c4a01b3aa59628b06712e89b commit + 74424cb1a557a4eb203296fdc015865f6260958e blob - 499fbb94bef57a3aed733ed72d82b652d26561dc blob + 8153e34db459d849e955bb83cf919e277f5d071d --- src/ngircd/irc-oper.c +++ src/ngircd/irc-oper.c @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-oper.c,v 1.20 2005/03/19 18:43:48 fw Exp $"; +static char UNUSED id[] = "$Id: irc-oper.c,v 1.21 2005/06/12 17:18:27 fw Exp $"; #include "imp.h" #include @@ -37,6 +37,15 @@ static char UNUSED id[] = "$Id: irc-oper.c,v 1.20 2005 #include "irc-oper.h" +static bool +bad_operpass(CLIENT *Client, char *errtoken, char *errmsg) +{ + Log( LOG_WARNING, "Got invalid OPER from \"%s\": \"%s\" -- %s", Client_Mask( Client ), errtoken, errmsg); + IRC_SetPenalty(Client, 3); + return IRC_WriteStrClient( Client, ERR_PASSWDMISMATCH_MSG, Client_ID( Client )); +} + + GLOBAL bool IRC_OPER( CLIENT *Client, REQUEST *Req ) { @@ -54,25 +63,16 @@ IRC_OPER( CLIENT *Client, REQUEST *Req ) if( Conf_Oper[i].name[0] && Conf_Oper[i].pwd[0] && ( strcmp( Conf_Oper[i].name, Req->argv[0] ) == 0 )) break; } if( i >= Conf_Oper_Count ) - { - Log( LOG_WARNING, "Got invalid OPER from \"%s\": Name \"%s\" not configured!", Client_Mask( Client ), Req->argv[0] ); - return IRC_WriteStrClient( Client, ERR_PASSWDMISMATCH_MSG, Client_ID( Client )); - } + return bad_operpass(Client, Req->argv[0], "not configured"); /* Stimmt das Passwort? */ if( strcmp( Conf_Oper[i].pwd, Req->argv[1] ) != 0 ) - { - Log( LOG_WARNING, "Got invalid OPER from \"%s\": Bad password for \"%s\"!", Client_Mask( Client ), Conf_Oper[i].name ); - return IRC_WriteStrClient( Client, ERR_PASSWDMISMATCH_MSG, Client_ID( Client )); - } + return bad_operpass(Client, Conf_Oper[i].name, "Bad password"); /* Authorized Mask? */ - if( Conf_Oper[i].mask && (! Match( Conf_Oper[i].mask, Client_Mask( Client ) ))) { - Log( LOG_WARNING, "Rejected valid OPER for \"%s\": Mask mismatch (got: \"%s\", want: \"%s\")!", Conf_Oper[i].name, Client_Mask( Client ), Conf_Oper[i].mask ); - return IRC_WriteStrClient( Client, ERR_PASSWDMISMATCH_MSG, Client_ID( Client )); - } + if( Conf_Oper[i].mask && (! Match( Conf_Oper[i].mask, Client_Mask( Client ) ))) + return bad_operpass(Client, Conf_Oper[i].mask, "hostmask check failed" ); - if( ! Client_HasMode( Client, 'o' )) { /* noch kein o-Mode gesetzt */