/*
* ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "class.h"
#include "parse.h"
#include "irc.h"
+#include "irc-macros.h"
#include "irc-write.h"
#include "lists.h"
#include "log.h"
#include "messages.h"
#include "op.h"
+#include "irc-oper.h"
+
/**
* Handle invalid received OPER command.
* Log OPER attempt and send error message to client.
static bool
Bad_OperPass(CLIENT *Client, char *errtoken, char *errmsg)
{
- Log(LOG_WARNING, "Got invalid OPER from \"%s\": \"%s\" -- %s!",
+ Log(LOG_ERR|LOG_snotice, "Got invalid OPER from \"%s\": \"%s\" -- %s!",
Client_Mask(Client), errtoken, errmsg);
/* Increase penalty to slow down possible brute force attacks */
IRC_SetPenalty(Client, 10);
from = Client;
break;
case CLIENT_SERVER:
+ _IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
from = Client_Search(Req->prefix);
break;
default:
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
- from = Op_Check(Client, Req);
+ if (!Conf_AllowRemoteOper && Client_Type(Client) == CLIENT_SERVER) {
+ /* Explicitely forbid remote servers to modify "x-lines" when
+ * the "AllowRemoteOper" configuration option isn't set, even
+ * when the command seems to originate from the remote server
+ * itself: this prevents GLINE's to become set during server
+ * handshake in this case (what wouldn't be possible during
+ * regular runtime when a remote IRC Op sends the command). */
+ from = NULL;
+ } else
+ from = Op_Check(Client, Req);
if (!from)
return Op_NoPrivileges(Client, Req);