Op_Check(): return client that initiated the request or NULL

The old behavior of returning true/false is compatible to this change,
so there are no other code changes required.
This commit is contained in:
Alexander Barton 2011-12-25 16:52:31 +01:00
parent 3ca8703309
commit e23f025dd6
2 changed files with 16 additions and 8 deletions

View File

@ -58,9 +58,15 @@ Op_NoPrivileges(CLIENT * Client, REQUEST * Req)
/**
* Check that the client is an IRC operator allowed to administer this server.
* Check that the originator of a request is an IRC operator and allowed
* to administer this server.
*
* @param CLient Client from which the command has been received.
* @param Req Request structure.
* @return CLIENT structure of the client that initiated the command or
* NULL if client is not allowed to execute operator commands.
*/
GLOBAL bool
GLOBAL CLIENT *
Op_Check(CLIENT * Client, REQUEST * Req)
{
CLIENT *c;
@ -72,15 +78,17 @@ Op_Check(CLIENT * Client, REQUEST * Req)
c = Client_Search(Req->prefix);
else
c = Client;
if (!c)
return false;
return NULL;
if (!Client_HasMode(c, 'o'))
return false;
return NULL;
if (!Client_OperByMe(c) && !Conf_AllowRemoteOper)
return false;
return NULL;
/* The client is an local IRC operator, or this server is configured
* to trust remote operators. */
return true;
return c;
} /* Op_Check */

View File

@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2009 Alexander Barton (alex@barton.de)
* Copyright (c)2001-2011 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
@ -18,7 +18,7 @@
*/
GLOBAL bool Op_NoPrivileges PARAMS((CLIENT * Client, REQUEST * Req));
GLOBAL bool Op_Check PARAMS((CLIENT * Client, REQUEST * Req));
GLOBAL CLIENT *Op_Check PARAMS((CLIENT * Client, REQUEST * Req));
#endif