From 15b0b805fe2e739c9d89b54e1bfb26beb79c3112 Mon Sep 17 00:00:00 2001 From: Nakidai Date: Mon, 9 Feb 2026 13:15:23 +0300 Subject: Add authorization for mode_channel() User has to be authorized in order to be able to change channel's modes. --- handle.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'handle.c') diff --git a/handle.c b/handle.c index 31a11c1..ecbde08 100644 --- a/handle.c +++ b/handle.c @@ -76,8 +76,26 @@ join(struct Message *msg, struct Peer *peer) static int mode_channel(struct Message *msg, struct Peer *peer) { - (void)msg; - (void)peer; + enum ChannelPeerMode modes; + struct Channel *channel; + size_t i; + + for (i = 0; i < channels_c; ++i) + if (!strcmp(channels[i].name, msg->params[0])) + break; + ensure(i != channels_c, reply(peer, 403, msg->params[0]), 0); + channel = &channels[i]; + + ensure(msg->params[1] && *msg->params[1], reply(peer, 324, channel->name, ""), 0); + + for (i = 0; i < channel->peers_c; ++i) + if (channel->peers[i].p->fd == peer->fd) + break; + ensure(i != channel->peers_c, reply(peer, 482, channel->name), 0); + modes = channel->peers[i].modes; + + ensure(modes & CHANNEL_OPER || peer->modes & OPER, reply(peer, 482, channel->name), 0); + return 0; } -- cgit 1.4.1