From: Entrope Date: Thu, 19 Feb 2004 22:36:42 +0000 (+0000) Subject: cleanups and fixes X-Git-Tag: v1.4.0-rc1~273 X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=e0fcae790ae98f3b25313b0e1d461a9982d997ea cleanups and fixes Fix the response when trying to set an option to an invalid access level. Put accurate headers on zoot_list !users output. Reduce default addban/addtimedban/delban access levels to 250. Add advertising/support plug for #srvx. Handle (but report) IRC socket connection errors. git-archimport-id: srvx@srvx.net--2004-srvx/srvx--devo--1.3--patch-3 --- diff --git a/src/chanserv.c b/src/chanserv.c index 32e7c0b..c14a7f0 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -3298,7 +3298,7 @@ static void zoot_list(struct listData *list) { struct userData *uData; - unsigned int start, curr; + unsigned int start, curr, highest, lowest; struct helpfile_table tmp_table; const char **temp, *msg; @@ -3314,16 +3314,18 @@ zoot_list(struct listData *list) tmp_table.width = list->table.width; tmp_table.flags = list->table.flags; list->table.contents[0][0] = " "; + highest = list->highest; + lowest = (highest < 100) ? 0 : (highest - 100); for(start = curr = 1; curr < list->table.length; ) { uData = list->users[curr-1]; list->table.contents[curr++][0] = " "; - if((curr == list->table.length) || (list->users[curr-1]->access != uData->access)) + if((curr == list->table.length) || (list->users[curr-1]->access < lowest)) { if(list->search) - send_message(list->user, list->bot, "CSMSG_ACCESS_SEARCH_HEADER", list->channel->name, list->lowest, list->highest, list->search); + send_message(list->user, list->bot, "CSMSG_ACCESS_SEARCH_HEADER", list->channel->name, lowest, highest, list->search); else - send_message(list->user, list->bot, "CSMSG_ACCESS_ALL_HEADER", list->channel->name, list->lowest, list->highest); + send_message(list->user, list->bot, "CSMSG_ACCESS_ALL_HEADER", list->channel->name, lowest, highest); temp = list->table.contents[--start]; list->table.contents[start] = list->table.contents[0]; tmp_table.contents = list->table.contents + start; @@ -3331,6 +3333,8 @@ zoot_list(struct listData *list) table_send(list->bot, list->user->nick, 0, NULL, tmp_table); list->table.contents[start] = temp; start = curr; + highest = lowest - 1; + lowest = (highest < 100) ? 0 : (highest - 99); } } } @@ -4937,7 +4941,7 @@ channel_level_option(enum levelOption option, struct userNode *user, struct chan value = user_level_from_name(argv[1], UL_OWNER+1); if(!value && !isdigit(argv[1][0])) { - reply("CSMSG_INVALID_ACCESS", index); + reply("CSMSG_INVALID_ACCESS", argv[1]); return 0; } uData = GetChannelUser(cData, user->handle_info); @@ -6966,9 +6970,9 @@ init_chanserv(const char *nick) DEFINE_COMMAND(resync, 1, MODCMD_REQUIRE_CHANUSER, "access", "master", NULL); DEFINE_COMMAND(events, 1, MODCMD_REQUIRE_REGCHAN, "flags", "+nolog", "access", "coowner", NULL); - DEFINE_COMMAND(addban, 2, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL); - DEFINE_COMMAND(addtimedban, 3, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL); - DEFINE_COMMAND(delban, 2, MODCMD_REQUIRE_REGCHAN, "access", "master", NULL); + DEFINE_COMMAND(addban, 2, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL); + DEFINE_COMMAND(addtimedban, 3, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL); + DEFINE_COMMAND(delban, 2, MODCMD_REQUIRE_REGCHAN, "access", "250", NULL); DEFINE_COMMAND(uset, 1, MODCMD_REQUIRE_CHANUSER, "access", "peon", NULL); DEFINE_COMMAND(bans, 1, MODCMD_REQUIRE_REGCHAN, "access", "peon", "flags", "+nolog", NULL); diff --git a/src/hash.c b/src/hash.c index b63da6d..bd205af 100644 --- a/src/hash.c +++ b/src/hash.c @@ -518,8 +518,7 @@ LockChannel(struct chanNode* channel) void UnlockChannel(struct chanNode *channel) { - if (!channel->locks) - return; + assert(channel->locks > 0); if (!--channel->locks && !channel->members.used) DelChannel(channel); } diff --git a/src/modcmd.c b/src/modcmd.c index 834efab..4dc8928 100644 --- a/src/modcmd.c +++ b/src/modcmd.c @@ -1716,7 +1716,7 @@ static MODCMD_FUNC(cmd_dump_messages) { static MODCMD_FUNC(cmd_version) { reply("MCMSG_VERSION"); - send_message_type(4, user, cmd->parent->bot, "Copyright 2000-2004 srvx Development Team.\nThe srvx Development Team includes Paul Chang, Adrian Dewhurst, Miles Peterson, Michael Poole and others."); + send_message_type(4, user, cmd->parent->bot, "Copyright 2000-2004 srvx Development Team.\nThe srvx Development Team includes Paul Chang, Adrian Dewhurst, Miles Peterson, Michael Poole and others.\nThe srvx Development Team can be reached at http://sf.net/projects/srvx/ or in #srvx on irc.gamesurge.net."); if ((argc > 1) && !irccasecmp(argv[1], "arch")) send_message_type(4, user, cmd->parent->bot, "%s", ARCH_VERSION); return 1; diff --git a/tests/test-driver.pl b/tests/test-driver.pl index 6696235..161f261 100755 --- a/tests/test-driver.pl +++ b/tests/test-driver.pl @@ -86,6 +86,7 @@ POE::Session->create(inline_states => irc_topic => sub {}, irc_error => \&irc_error, irc_disconnected => \&irc_disconnected, + irc_socketerr => \&irc_socketerr, }, args => [@ARGV]); @@ -420,6 +421,26 @@ sub irc_disconnected { } } +sub irc_socketerr { + my ($kernel, $session, $heap, $sender, $msg) = @_[KERNEL, SESSION, HEAP, SENDER, ARG0]; + my $client = $heap->{sessions}->{$sender}; + print "Client $client->{name} (re-)connect error: $_[ARG0]\n"; + if ($client->{quitting}) { + $kernel->call($sender, 'unregister', 'all'); + delete $heap->{sessions}->{$sender}; + delete $heap->{clients}->{$client->{name}}; + } else { + if ($client->{disconnect_expected}) { + delete $client->{disconnect_expected}; + } else { + print "Got unexpected disconnect for $client->{name} (nick $client->{nick})\n"; + } + $kernel->call($session, 'disable_client', $client); + $kernel->delay_set('reconnect', $client->{throttled} ? THROTTLED_TIMEOUT : RECONNECT_TIMEOUT, $client); + delete $client->{throttled}; + } +} + sub irc_notice { my ($kernel, $session, $heap, $sender, $from, $to, $text) = @_[KERNEL, SESSION, HEAP, SENDER, ARG0, ARG1, ARG2]; my $client = $heap->{sessions}->{$sender};