Annotation of ircnowd/src/ngircd/op.c, Revision 1.1
1.1 ! tomglok 1: /*
! 2: * ngIRCd -- The Next Generation IRC Daemon
! 3: * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify
! 6: * it under the terms of the GNU General Public License as published by
! 7: * the Free Software Foundation; either version 2 of the License, or
! 8: * (at your option) any later version.
! 9: * Please read the file COPYING, README and AUTHORS for more information.
! 10: */
! 11:
! 12: #include "portab.h"
! 13:
! 14: /**
! 15: * @file
! 16: * IRC operator functions
! 17: */
! 18:
! 19: #include <assert.h>
! 20:
! 21: #include "conn.h"
! 22: #include "channel.h"
! 23: #include "conf.h"
! 24: #include "log.h"
! 25: #include "parse.h"
! 26: #include "messages.h"
! 27: #include "irc-write.h"
! 28:
! 29: #include "op.h"
! 30:
! 31: /**
! 32: * Return and log a "no privileges" message.
! 33: */
! 34: GLOBAL bool
! 35: Op_NoPrivileges(CLIENT * Client, REQUEST * Req)
! 36: {
! 37: CLIENT *from = NULL;
! 38:
! 39: if (Req->prefix)
! 40: from = Client_Search(Req->prefix);
! 41:
! 42: if (from) {
! 43: Log(LOG_ERR|LOG_snotice,
! 44: "No privileges: client \"%s\" (%s), command \"%s\"!",
! 45: Req->prefix, Client_Mask(Client), Req->command);
! 46: return IRC_WriteErrClient(from, ERR_NOPRIVILEGES_MSG,
! 47: Client_ID(from));
! 48: } else {
! 49: Log(LOG_ERR|LOG_snotice,
! 50: "No privileges: client \"%s\", command \"%s\"!",
! 51: Client_Mask(Client), Req->command);
! 52: return IRC_WriteErrClient(Client, ERR_NOPRIVILEGES_MSG,
! 53: Client_ID(Client));
! 54: }
! 55: } /* Op_NoPrivileges */
! 56:
! 57: /**
! 58: * Check that the originator of a request is an IRC operator and allowed
! 59: * to administer this server.
! 60: *
! 61: * @param Client Client from which the command has been received.
! 62: * @param Req Request structure.
! 63: * @return CLIENT structure of the client that initiated the command or
! 64: * NULL if client is not allowed to execute operator commands.
! 65: */
! 66: GLOBAL CLIENT *
! 67: Op_Check(CLIENT * Client, REQUEST * Req)
! 68: {
! 69: CLIENT *c;
! 70:
! 71: assert(Client != NULL);
! 72: assert(Req != NULL);
! 73:
! 74: if (Client_Type(Client) == CLIENT_SERVER && Req->prefix)
! 75: c = Client_Search(Req->prefix);
! 76: else
! 77: c = Client;
! 78:
! 79: if (!c)
! 80: return NULL;
! 81: if (Client_Type(Client) == CLIENT_SERVER
! 82: && Client_Type(c) == CLIENT_SERVER)
! 83: return c;
! 84: if (!Client_HasMode(c, 'o'))
! 85: return NULL;
! 86: if (Client_Conn(c) <= NONE && !Conf_AllowRemoteOper)
! 87: return NULL;
! 88:
! 89: /* The client is an local IRC operator, or this server is configured
! 90: * to trust remote operators. */
! 91: return c;
! 92: } /* Op_Check */
! 93:
! 94: /* -eof- */
CVSweb