Op_Check(): return client that initiated the request or NULL
authorAlexander Barton <alex@barton.de>
Sun, 25 Dec 2011 15:52:31 +0000 (16:52 +0100)
committerAlexander Barton <alex@barton.de>
Sun, 25 Dec 2011 15:52:31 +0000 (16:52 +0100)
The old behavior of returning true/false is compatible to this change,
so there are no other code changes required.

src/ngircd/op.c
src/ngircd/op.h

index 7c0737f913d7f6af2303653bb6aea2432cc45a1d..c93133c432021f3e1c540f2e5de3e6bc8c8719aa 100644 (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 */
 
 
index a1a84a330dc8caf105192ed474c7e000c96001a8..71748eb316114496d69b7501c87203e905ae98b2 100644 (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