diff --git a/Changelog b/Changelog index 5677740..91923e8 100644 --- a/Changelog +++ b/Changelog @@ -1,5 +1,7 @@ [Changes 1.2.2] +* Act on channel mode lock as half-op. (caf) + * Fix crash and memory leak in $aliasctl(COMMAND MATCH). (caf) * Fix memory leaks in /CDCC PLIST and /CDCC NOTICE. (caf) diff --git a/source/commands2.c b/source/commands2.c index 6be737a..6215208 100644 --- a/source/commands2.c +++ b/source/commands2.c @@ -291,11 +291,11 @@ char *s; int check_mode_lock(char *channel, char *mode_list, int server) { - ChannelList *chan; - char buffer[BIG_BUFFER_SIZE]; + ChannelList *chan = lookup_channel(channel, server, CHAN_NOUNLINK); - if ((chan = lookup_channel(channel, server, 0)) && chan->modelock_key) + if (chan && chan->modelock_key && (chan->have_op || chan->hop)) { + char buffer[BIG_BUFFER_SIZE]; char *modelock, *new_mode_list, *newmode, *save, *save1; char *args = NULL, *args1 = NULL; int add = 0; @@ -389,8 +389,8 @@ int check_mode_lock(char *channel, char *mode_list, int server) } modelock++; } - if (chan && chan->have_op && *buffer) - send_to_server("MODE %s %s", chan->channel, buffer); + if (*buffer) + my_send_to_server(server, "MODE %s %s", chan->channel, buffer); new_free(&save); new_free(&save1); return 1;