commit - 3bf0c6f3b9cbeded68c2c7f7a6f2a020616b73f5
commit + 926204cacd05f49f24e79d0af404c2da4cfdbe3a
blob - 736163c107e6b6b135ddde4370b8eb720811f77d
blob + 7033031a9e16e202ecbe064d152dd5ffdc41abb3
--- src/ngircd/irc-oper.c
+++ src/ngircd/irc-oper.c
} /* Bad_OperPass */
+/**
+ * Check that the client is an IRC operator allowed to administer this server.
+ */
+static bool
+Check_Oper(CLIENT * Client)
+{
+ if (!Client_HasMode(Client, 'o'))
+ return false;
+ if (!Client_OperByMe(Client) && !Conf_AllowRemoteOper)
+ return false;
+ /* The client is an local IRC operator, or this server is configured
+ * to trust remote operators. */
+ return true;
+} /* CheckOper */
+
+
+/**
+ * Return and log a "no privileges" message.
+ */
+static bool
+No_Privileges(CLIENT * Client, REQUEST * Req)
+{
+ Log(LOG_NOTICE, "No privileges: client \"%s\", command \"%s\"",
+ Client_Mask(Client), Req->command);
+ return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG,
+ Client_ID(Client));
+} /* PermissionDenied */
+
+
GLOBAL bool
IRC_OPER( CLIENT *Client, REQUEST *Req )
{
assert(Client != NULL);
assert(Req != NULL);
- /* Not a local IRC operator? */
- if ((!Client_HasMode(Client, 'o')) || (!Client_OperByMe(Client)))
- return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG,
- Client_ID(Client));
+ if (!Check_Oper(Client))
+ return No_Privileges(Client, Req);
/* Bad number of parameters? */
#ifdef STRICT_RFC
assert( Client != NULL );
assert( Req != NULL );
- /* Not a local IRC operator? */
- if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
+ if (!Check_Oper(Client))
+ return No_Privileges(Client, Req);
/* Bad number of parameters? */
if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
assert( Client != NULL );
assert( Req != NULL );
- /* Not a local IRC operator? */
- if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
+ if (!Check_Oper(Client))
+ return No_Privileges(Client, Req);
/* Bad number of parameters? */
if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
assert(Client != NULL);
assert(Req != NULL);
- /* Not a local IRC operator? */
- if ((!Client_HasMode(Client, 'o')) || (!Client_OperByMe(Client)))
- return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG,
- Client_ID(Client));
+ if (!Check_Oper(Client))
+ return No_Privileges(Client, Req);
/* Bad number of parameters? */
if ((Req->argc != 1) && (Req->argc != 2) && (Req->argc != 5))
assert( Client != NULL );
assert( Req != NULL );
- /* Not a local IRC operator? */
- if(( ! Client_HasMode( Client, 'o' )) || ( ! Client_OperByMe( Client ))) return IRC_WriteStrClient( Client, ERR_NOPRIVILEGES_MSG, Client_ID( Client ));
+ if (!Check_Oper(Client))
+ return No_Privileges(Client, Req);
/* Bad number of parameters? */
if( Req->argc != 1 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );