diff -uNr ircservices-5.0.36/Changes ircservices-5.0.37/Changes --- ircservices-5.0.36/Changes 2004-07-12 17:43:49 +0900 +++ ircservices-5.0.37/Changes 2004-07-27 18:03:00 +0900 @@ -1,5 +1,17 @@ Version 5.0 ----------- +2004/07/27 .37 Autokicks now prefix the kick reason with "AKICK by " + to avoid misleading kick messages. Suggested by Bergee + +2004/07/26 Fixed potential crashes in NickServ UNSUSPEND, DROP, and + LINK (from the nickserv/oldlink module only). Reported + by Tom McIntyre +2004/07/15 Fixed cosmetic bug in MemoServ INFO display. Reported by + Bergee +2004/07/14 Fixed potential crash on exit when freeing language data. +2004/07/14 Fixed bug causing nickname enforcers to not be removed when + a nickname was deleted. Reported by Bergee + 2004/07/09 .36 Removed log message on socket buffer size misbehavior. 2004/07/09 Fixed potential crash on SQUIT. Reported by Tom McIntyre diff -uNr ircservices-5.0.36/lang/de.l ircservices-5.0.37/lang/de.l --- ircservices-5.0.36/lang/de.l 2004-06-30 23:32:40 +0900 +++ ircservices-5.0.37/lang/de.l 2004-07-13 18:40:34 +0900 @@ -3301,8 +3301,8 @@ CHAN_HELP_COMMANDS_HOP HOP Modifizieren/anzeigen der AutoHalfOp-Liste CHAN_HELP_COMMANDS_OPVOICE - OP Erteilen des Raum-Operator-Satus (+o) - DEOP Entziehen des Raum-Operator-Satus (-o) + OP Erteilen des Raum-Operator-Status (+o) + DEOP Entziehen des Raum-Operator-Status (-o) VOICE Erteilen des Moderator-Status (+v) DEVOICE Entziehen des Moderator-Status (-v) CHAN_HELP_COMMANDS_HALFOP diff -uNr ircservices-5.0.36/lang/en_us.l ircservices-5.0.37/lang/en_us.l --- ircservices-5.0.36/lang/en_us.l 2004-06-29 16:25:22 +0900 +++ ircservices-5.0.37/lang/en_us.l 2004-07-27 17:00:56 +0900 @@ -4818,7 +4818,7 @@ Syntax: SESSION LIST threshold SESSION VIEW host - Allows Services operatorss to view the session list. + Allows Services operators to view the session list. SESSION LIST lists hosts with at least threshold sessions. The threshold must be a number greater than 1, to prevent @@ -5080,4 +5080,4 @@ # version of the master (English) language file was used to create a # translated file. -# CVS: $Revision: 2.222 $ +# CVS: $Revision: 2.222.2.1 $ diff -uNr ircservices-5.0.36/lang/hu.l ircservices-5.0.37/lang/hu.l --- ircservices-5.0.36/lang/hu.l 2004-06-30 17:34:01 +0900 +++ ircservices-5.0.37/lang/hu.l 2004-07-14 01:33:20 +0900 @@ -1221,10 +1221,9 @@ CHAN_XOP_NICKS_ONLY_HOP SOP, AOP, HOP, s VOP listk csak regisztrlt nicknevelet tartalmazhatnak. CHAN_XOP_REACHED_LIMIT - Sajnlom, elrted a maximlis ltszmot az SOP, AOP s VOP listn + Sajnlom, az SOP, AOP s VOP listn lv bejegyzsek szma nem lehet tbb, mint %d. Hatrrtk elrve. CHAN_XOP_REACHED_LIMIT_HOP - Sajnlom, elrted a maximlis ltszmot az SOP, AOP,HOP s VOP listn - + Sajnlom, az SOP, AOP, HOP s VOP listn lv bejegyzsek szma nem lehet tbb, mint %d. Hatrrtk elrve. CHAN_XOP_NOT_FOUND %s nem tallhat a %s %s listn. CHAN_XOP_NO_SUCH_ENTRY @@ -3614,7 +3613,7 @@ csatorna founderje mdosthatja az SOP listt. CHAN_HELP_SOP_END - Az SOP LIST parancs megadja az SOP listt. + Az SOP LIST parancs megadja az SOP listt. Ha nem vagyunk kivncsiak a teljes listra akkor a listban szerepl Sop sorszmt megadva is megtudhatjuk a nevt, megadhatunk intervallumot is. @@ -3645,7 +3644,7 @@ AOP listt. CHAN_HELP_AOP_END - Az AOP LIST parancs megadja az AOP listt. + Az AOP LIST parancs megadja az AOP listt. Ha nem vagyunk kivncsiak a teljes listra akkor a listban szerepl Aop sorszmt megadva is megtudhatjuk a nevt, megadhatunk intervallumot is. @@ -3670,7 +3669,7 @@ A HOP mdosthatja a VOP listt; SOP-ok s AOP-ok mdosthatjk a HOP listt. - A HOP LIST parancs megadja az HOP listt. + A HOP LIST parancs megadja az HOP listt. Ha nem vagyunk kivncsiak a teljes listra akkor a listban szerepl hop sorszmt megadva is megtudhatjuk a nevt, megadhatunk intervallumot is. @@ -3695,7 +3694,7 @@ A VOP nem mdosthat listt; SOP-ok, AOP-ok s HOP-ok mdosthatjk a VOP listt. - A VOP LIST parancs megadja az VOP listt. + A VOP LIST parancs megadja az VOP listt. Ha nem vagyunk kivncsiak a teljes listra akkor a listban szerepl Vop sorszmt megadva is megtudhatjuk a nevt, megadhatunk intervallumot is. diff -uNr ircservices-5.0.36/lang/ja_euc.l ircservices-5.0.37/lang/ja_euc.l --- ircservices-5.0.36/lang/ja_euc.l 2004-05-18 11:54:28 +0900 +++ ircservices-5.0.37/lang/ja_euc.l 2004-07-27 17:03:29 +0900 @@ -1241,7 +1241,7 @@ CHAN_LEVELS_LIST_FOUNDER %-*s ߼ԤΤ CHAN_LEVELS_LIST_NORMAL - %-*s %d + %-*s %4d CHAN_LEVELS_RESET %sΥ٥ͤᤷޤ @@ -1396,6 +1396,8 @@ ͥ%sפޥƾõޤ CHAN_CLEARED_EXCEPTIONS ͥ%sפ㳰ޥõޤ +CHAN_CLEARED_INVITES + ͥ%sפͶinvite˥ޥõޤ CHAN_CLEARED_MODES ͥ%sפΥ⡼ɤͤᤷޤ CHAN_CLEARED_OPS @@ -3817,6 +3819,8 @@ BANS ޥƲ CHAN_HELP_CLEAR_EXCEPTIONS EXCEPTIONS 㳰ޥƲ +CHAN_HELP_CLEAR_INVITES + INVITES Ͷinvite˥ޥƲ CHAN_HELP_CLEAR_MID OPS ƤΥ桼Υڥ졼 CHAN_HELP_CLEAR_HALFOPS @@ -4499,9 +4503,9 @@ Ĵޤ LISTVIEWޥɤǡꥹȤɽޤѥꤷ - ϡפʤޥɽޤ󡣤ΣĤΥޥ - ΰ㤤ϡVIEWܺ٤ʾʥޥɲä桼Υ - åͭ¡Ѿʤɡˤɽ뤳ȤǤ + ϡפʤޥɽޤLISTޥΤߤ + ɽΤФơVIEWϤܺ٤ʾʥޥɲä桼 + Υ˥åͭ¡Ѿʤɡˤʻɽޤ ʤƱۥȤŬѤǤ륨ȥ꤬ʣ硢ꥹȤ ־ֹ椬ּ㤤ˤΤŬѤޤ diff -uNr ircservices-5.0.36/lang/ja_sjis.l ircservices-5.0.37/lang/ja_sjis.l --- ircservices-5.0.36/lang/ja_sjis.l 2004-05-18 11:57:51 +0900 +++ ircservices-5.0.37/lang/ja_sjis.l 2004-07-27 18:03:43 +0900 @@ -1241,7 +1241,7 @@ CHAN_LEVELS_LIST_FOUNDER %-*s nݎ҂̂ CHAN_LEVELS_LIST_NORMAL - %-*s %d + %-*s %4d CHAN_LEVELS_RESET %s̃xlɖ߂܂B @@ -1396,6 +1396,8 @@ `lu%sv̒Ǖ}XNSď܂B CHAN_CLEARED_EXCEPTIONS `lu%sv̒ǕO}XN܂B +CHAN_CLEARED_INVITES + `lu%sv̗Uiinvitej}XN܂B CHAN_CLEARED_MODES `lu%sṽ[hlɖ߂܂B CHAN_CLEARED_OPS @@ -3817,6 +3819,8 @@ BANS Ǖ}XNSĉ CHAN_HELP_CLEAR_EXCEPTIONS EXCEPTIONS ǕO}XNSĉ +CHAN_HELP_CLEAR_INVITES + INVITES Uiinvitej}XNSĉ CHAN_HELP_CLEAR_MID OPS SẴ[ŨIy[^ CHAN_HELP_CLEAR_HALFOPS @@ -4499,9 +4503,9 @@ 𒲐܂B LISTVIEWR}hŁAXg\܂Bp^[w肵 - ꍇ́AvȂ}XN͕\܂B̂Q‚̃R}h - ̈Ⴂ́AVIEW̕ڍׂȏi}XNlj[Ũj - bNALAgp󋵂Ȃǁj\邱ƂłB + ꍇ́AvȂ}XN͕\܂BLIST}XN݂̂ + \̂ɑ΂āAVIEW͂ڍׂȏi}XNlj[ + ŨjbNALAgp󋵂Ȃǁj𕹂ĕ\܂B ȂAzXgɓKpłGgꍇAXg ԏiԍԎႢĵKp܂B diff -uNr ircservices-5.0.36/lang/nl.l ircservices-5.0.37/lang/nl.l --- ircservices-5.0.36/lang/nl.l 2004-06-30 17:38:37 +0900 +++ ircservices-5.0.37/lang/nl.l 2004-07-27 14:42:01 +0900 @@ -1999,8 +1999,7 @@ # AKILL responses OPER_AKILL_SYNTAX - AKILL {ADD | DEL | LIST | VIEW | COUNT} [[+vervaltijd] - masker [rede]] + AKILL {ADD | DEL | LIST | VIEW | COUNT} [[+vervaltijd] masker [rede]] OPER_AKILL_ADD_SYNTAX AKILL ADD [+vervaltijd] masker rede OPER_AKILL_DEL_SYNTAX diff -uNr ircservices-5.0.36/language.c ircservices-5.0.37/language.c --- ircservices-5.0.36/language.c 2004-07-12 18:10:52 +0900 +++ ircservices-5.0.37/language.c 2004-07-27 20:58:52 +0900 @@ -203,7 +203,7 @@ /* First clear out any languages borrowing from the default language */ for (i = 0; i < NUM_LANGS; i++) { if (i != DEF_LANGUAGE && langtexts[i] == langtexts[DEF_LANGUAGE]) - langtexts[DEF_LANGUAGE] = NULL; + langtexts[i] = NULL; } /* Now free everything left */ diff -uNr ircservices-5.0.36/modules/chanserv/check.c ircservices-5.0.37/modules/chanserv/check.c --- ircservices-5.0.36/modules/chanserv/check.c 2004-07-12 18:10:52 +0900 +++ ircservices-5.0.37/modules/chanserv/check.c 2004-07-27 20:58:52 +0900 @@ -272,6 +272,7 @@ NickGroupInfo *ngi; char *mask, *s; const char *reason; + char reasonbuf[BUFSIZE]; int stay; @@ -330,6 +331,9 @@ mask = sstrdup(ci->akick[i].mask); reason = ci->akick[i].reason ? ci->akick[i].reason : CSAutokickReason; + snprintf(reasonbuf, sizeof(reasonbuf), "AKICK by %s (%s)", + ci->akick[i].who, reason); + reason = reasonbuf; time(&ci->akick[i].lastused); goto kick; } diff -uNr ircservices-5.0.36/modules/memoserv/main.c ircservices-5.0.37/modules/memoserv/main.c --- ircservices-5.0.36/modules/memoserv/main.c 2004-07-12 18:10:53 +0900 +++ ircservices-5.0.37/modules/memoserv/main.c 2004-07-27 20:58:52 +0900 @@ -1228,6 +1228,7 @@ notice_lang(s_MemoServ, u, NICK_IDENTIFY_REQUIRED, s_NickServ); return; } + ni = u->ni; ngi = u->ngi; mi = &u->ngi->memos; } diff -uNr ircservices-5.0.36/modules/nickserv/mail-auth.c ircservices-5.0.37/modules/nickserv/mail-auth.c --- ircservices-5.0.36/modules/nickserv/mail-auth.c 2004-07-12 18:10:53 +0900 +++ ircservices-5.0.37/modules/nickserv/mail-auth.c 2004-07-27 20:58:52 +0900 @@ -287,7 +287,7 @@ if (irc_stricmp(nick, ngi->nicks[i]) == 0) ni2 = ni; else - ni2 = get_nickinfo(ngi->nicks[i]); + ni2 = get_nickinfo_noexpire(ngi->nicks[i]); if (!ni2) { module_log("BUG: missing NickInfo for nick %d (%s) of" " nickgroup %u", i, ngi->nicks[i], ngi->id); diff -uNr ircservices-5.0.36/modules/nickserv/main.c ircservices-5.0.37/modules/nickserv/main.c --- ircservices-5.0.36/modules/nickserv/main.c 2004-07-12 18:10:53 +0900 +++ ircservices-5.0.37/modules/nickserv/main.c 2004-07-27 20:58:52 +0900 @@ -1001,16 +1001,16 @@ char *nick = strtok(NULL, " "); if (nick) { NickInfo *ni2 = get_nickinfo(nick); - if (ni2 == ni) { + if (!ni2) { + notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); + return; + } else if (ni2 == ni) { /* Let the command through even for non-servadmins if they * gave their own nick; it's less confusing than a * "Permission denied" error */ } else if (!is_services_admin(u)) { notice_lang(s_NickServ, u, PERMISSION_DENIED); return; - } else if (!ni2) { - notice_lang(s_NickServ, u, NICK_X_NOT_REGISTERED, nick); - return; } else { ni = ni2; } diff -uNr ircservices-5.0.36/modules/nickserv/nickserv.h ircservices-5.0.37/modules/nickserv/nickserv.h --- ircservices-5.0.36/modules/nickserv/nickserv.h 2004-07-12 18:10:53 +0900 +++ ircservices-5.0.37/modules/nickserv/nickserv.h 2004-07-27 20:58:52 +0900 @@ -248,9 +248,11 @@ E2 void free_nickinfo(NickInfo *ni); E2 NickGroupInfo *new_nickgroupinfo(const char *seed); E2 void free_nickgroupinfo(NickGroupInfo *ngi); -E int check_expire_nick(NickInfo *ni); #undef E2 +E int check_expire_nick(NickInfo *ni); +E NickInfo *get_nickinfo_noexpire(const char *nick); + #define get_ngi(ni) _get_ngi((ni), __FILE__, __LINE__) #define check_ngi(ni) (get_ngi((ni)) != NULL) // Check for presence of NGI only #define get_ngi_id(id) _get_ngi_id((id), __FILE__, __LINE__) diff -uNr ircservices-5.0.36/modules/nickserv/oldlink.c ircservices-5.0.37/modules/nickserv/oldlink.c --- ircservices-5.0.36/modules/nickserv/oldlink.c 2004-07-12 18:10:53 +0900 +++ ircservices-5.0.37/modules/nickserv/oldlink.c 2004-07-27 20:58:52 +0900 @@ -130,7 +130,7 @@ /* Put each of the old group's nicks in the new group */ ARRAY_FOREACH (i, ngi->nicks) { - NickInfo *ni2 = get_nickinfo(ngi->nicks[i]); + NickInfo *ni2 = get_nickinfo_noexpire(ngi->nicks[i]); ARRAY_EXTEND(target_ngi->nicks); strscpy(target_ngi->nicks[target_ngi->nicks_count-1], ngi->nicks[i], NICKMAX); diff -uNr ircservices-5.0.36/modules/nickserv/util.c ircservices-5.0.37/modules/nickserv/util.c --- ircservices-5.0.36/modules/nickserv/util.c 2004-07-12 18:10:53 +0900 +++ ircservices-5.0.37/modules/nickserv/util.c 2004-07-27 20:58:52 +0900 @@ -231,6 +231,24 @@ /*************************************************************************/ +/* Retrieve a NickInfo structure without expiring it. Routines which hold + * onto a NickGroupInfo pointer while calling get_nickinfo() need to use + * this routine instead to avoid the NickGroupInfo being deallocated if the + * nick being searched for is found to have expired. + */ + +NickInfo *get_nickinfo_noexpire(const char *nick) +{ + NickInfo *ni; + int old_noexpire = noexpire; + noexpire = 1; + ni = get_nickinfo(nick); + noexpire = old_noexpire; + return ni; +} + +/*************************************************************************/ + /* Retrieve the NickGroupInfo structure associated with the given NickInfo. * If it cannot be retrieved, log an error message and return NULL. * Note: Callers should use get_ngi[_id]() or check_ngi[_id](), which embed @@ -593,6 +611,8 @@ NickGroupInfo *ngi; rem_ns_timeout(ni, -1, 1); + if (ni->status & NS_KILL_HELD) + release(ni, 0); if (ni->user) { if (usermode_reg) send_cmd(s_NickServ, "SVSMODE %s :-%s", ni->nick, @@ -640,7 +660,7 @@ int i; ARRAY_FOREACH (i, ngi->nicks) { - NickInfo *ni = get_nickinfo(ngi->nicks[i]); + NickInfo *ni = get_nickinfo_noexpire(ngi->nicks[i]); if (!ni) { module_log("delgroup(%u): missing NickInfo for nick %s", ngi->id, ngi->nicks[i]); @@ -736,7 +756,7 @@ (long)ngi->authset); } ARRAY_FOREACH (i, ngi->nicks) { - NickInfo *ni = get_nickinfo(ngi->nicks[i]); + NickInfo *ni = get_nickinfo_noexpire(ngi->nicks[i]); if (!ni) { module_log("unsuspend: unable to retrieve NickInfo for %s" " (nick group %u)", ngi->nicks[i], ngi->id); diff -uNr ircservices-5.0.36/version.sh ircservices-5.0.37/version.sh --- ircservices-5.0.36/version.sh 2004-07-12 17:43:53 +0900 +++ ircservices-5.0.37/version.sh 2004-07-27 18:08:26 +0900 @@ -6,7 +6,7 @@ # $PROGRAM is the string returned as the first part of a /VERSION reply, # and must not contain spaces. It is not used anywhere else. PROGRAM=ircservices -VERSION=5.0.36 +VERSION=5.0.37 # Increment Services build number if [ -f version.c ] ; then @@ -51,7 +51,7 @@ const char *info_text[] = { - "IRC Services developed by and copyright (c) 1996-2003", + "IRC Services developed by and copyright (c) 1996-2004", "Andrew Church .", "Parts written by Andrew Kempe and others.", "IRC Services may be freely redistributed under the GNU",