diff -uNr ircservices-5.0.21/Changes ircservices-5.0.22/Changes --- ircservices-5.0.21/Changes 2003-07-14 15:12:51 +0900 +++ ircservices-5.0.22/Changes 2003-09-16 04:13:50 +0900 @@ -1,5 +1,49 @@ Version 5.0 ----------- +2003/09/09 .22 The SHOWALLOCS compilation option can now be set from the + configure script instead of editing memory.c directly. +2003/09/09 Fixed bug causing blank lines in help messages to not be + sent in rare cases. +2003/09/09 Clarified NickServ AJOIN help with regard to +k and similar + channels. +2003/08/31 NickServ now displays the proper LIST help text for IRC + operators. Reported by +2003/08/31 Disabling the AUTOPROTECT channel level now disables + automatic channel founder (Unreal, etc.) as well. +2003/08/31 ChanServ LEVELS DISABLE AUTOOP (and AUTOVOICE, etc.) now + properly affects the founder as well. Reported by + Shaun Guth +2003/08/31 Fixed desynch on MODE -b with differing upper/lower case + from the actual ban. Reported by Jeffrey Kam + +2003/08/31 Fixed potential crash on attempted DROP of a forbidden + channel. Reported by Marc-Andre A. Fuentes + +2003/08/30 Add syntax reminder for users that get E-mail address and + password backwards in NickServ REGISTER. Suggested by + Craig McLure +2003/08/30 Fixed desynch occurring with MergeChannelModes when a user + joined an empty channel and quickly changed nicknames. +2003/08/30 NickServ SET EMAIL now logs the previous E-mail address as + well as the new one. Suggested by + . As a result, the log message + now has a slightly different format. +2003/08/30 Fixed bug causing some ChanServ mode changes to get lost. + Reported by Craig McLure +2003/08/30 ChanServ no longer attempts to restore the topic on a + channel if no topic has been recorded. +2003/08/30 Added NickServ DROPEMAIL command. +2003/08/30 ChanServ SET FOUNDER and SET SUCCESSOR now log the previous + founder/successor as well as the new one. Suggested by + . As a result, the log messages + now have a slightly different format. +2003/08/29 Channel mode and topic changes (except for mode changes + caused by CSSetChannelTime) now always use a consistent + source name: ChanServ, OperServ, or the server name, + depending on whether the respective modules are loaded. +2003/07/27 Added FAQ Z.3.5 regarding backtraces. +2003/07/16 Added explanation of reasoning behind choice of license + terms. Suggested by Richard Stallman 2003/07/09 .21 Fixed type-related warnings in some environments. 2003/07/09 Fixed errors when compiling in parallel (make -jN). 2003/07/04 Fixed warnings about builtin function name clash with GCC. diff -uNr ircservices-5.0.21/TODO ircservices-5.0.22/TODO --- ircservices-5.0.21/TODO 2003-07-09 10:30:27 +0900 +++ ircservices-5.0.22/TODO 2003-09-01 00:13:25 +0900 @@ -1,5 +1,9 @@ Things to probably do: +NS Flags for LIST[EMAIL] to match against only nick or only usermask/email +CS When moving to a new ircd, graceful handling for modelocked modes + not available in the new ircd + [Yusuf Iskenderoglu ] OS Change KILLCLONES to AKILLNICK or similar [Mark Hetherington ] NS Option to prevent certain domains from being used in mail addresses @@ -19,14 +23,10 @@ [Jollino ] NS Optionally send memo to newly registered nicks [Yusuf Iskenderoglu ] -OS Allow regex autokills/exceptions/slines - [Aragon Gouveia ] OS Allow wildcard/regex kills of nicks [Guy Antony Halse ] NS Add a SETNICK command to replace servadmin "SET nick option ..." MS Add memo forwarding for channel memos as well -OS Kill users who nickchange to SQlined nicks for ircds that don't - support forced nickname changing (SVSNICK) ** Allow including of configuration files [Yusuf Iskenderoglu ] NS Disallow registration/linking of SQLINEd nicks @@ -47,6 +47,12 @@ Things to think about: +OS Notify autokilled users of autokill expiration upon kill +OS Make news memo-like: separate command to read, and notice of new + news at logon + [last 2: ] +OS Allow regex autokills/exceptions/slines + [Aragon Gouveia ] NS/CS Reason for FORBID ** Option/module to log all WALLOPS/GLOBOPS [Andrew Kempe ] diff -uNr ircservices-5.0.21/actions.c ircservices-5.0.22/actions.c --- ircservices-5.0.21/actions.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/actions.c 2003-09-16 04:17:48 +0900 @@ -17,6 +17,9 @@ static int cb_clear_channel = -1; static int cb_set_topic = -1; +/* Sender to be used with clear_channel() (empty string: use server name) */ +static char clear_channel_sender[NICKMAX] = {0}; + /*************************************************************************/ /*************************************************************************/ @@ -88,13 +91,14 @@ static void clear_umodes(const char *sender, Channel *chan, int32 modes); static void clear_users(const char *sender, Channel *chan, const char *reason); -void clear_channel(const char *sender, Channel *chan, int what, - const void *param) +void clear_channel(Channel *chan, int what, const void *param) { + const char *sender = + *clear_channel_sender ? clear_channel_sender : ServerName; + if (call_callback_4(NULL, cb_clear_channel, sender,chan,what,param) > 0) { set_cmode(NULL, chan); return; - } if (what & CLEAR_USERS) { @@ -188,6 +192,29 @@ /*************************************************************************/ +/* Set the nickname to be used to send commands in clear_channel() calls. + * If NULL, the server name is used; if PTR_INVALID, the name is not + * changed. Returns the old value of the sender, or the empty string if no + * nickname was set, in a static buffer. + */ + +const char *set_clear_channel_sender(const char *newsender) +{ + static char oldsender[NICKMAX]; + strscpy(oldsender, clear_channel_sender, sizeof(oldsender)); + if (newsender != PTR_INVALID) { + if (newsender) { + strscpy(clear_channel_sender, newsender, + sizeof(clear_channel_sender)); + } else { + *clear_channel_sender = 0; + } + } + return oldsender; +} + +/*************************************************************************/ + /* Remove a user from the IRC network. `source' is the nick which should * generate the kill, or NULL for a server-generated kill. */ @@ -212,18 +239,23 @@ /*************************************************************************/ -/* Set the topic on a channel. `setter' must not be NULL. */ +/* Set the topic on a channel. `setter' must not be NULL. `source' is the + * nick to use to send the TOPIC message; if NULL, the server name is used. + */ -void set_topic(Channel *c, const char *topic, const char *setter, time_t t) +void set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { - call_callback_4(NULL, cb_set_topic, c, topic, setter, t); + if (!source) + source = ServerName; + call_callback_5(NULL, cb_set_topic, source, c, topic, setter, t); free(c->topic); if (topic && *topic) c->topic = sstrdup(topic); else c->topic = NULL; strscpy(c->topic_setter, setter, NICKMAX); - if (call_callback_4(NULL, cb_set_topic, c, NULL, NULL, t) > 0) + if (call_callback_5(NULL, cb_set_topic, source, c, NULL, NULL, t) > 0) return; } @@ -343,6 +375,11 @@ int32 flag; int params, is_chanuser; + if (debug >= 2) { + log("debug: set_cmode(%s,%s): char=%c(%02X)", + sender, channel->name, c<0x20||c>0x7E ? '.' : c, c); + } + /* + and - are handled specially. */ if (c == '+') { add = 1; @@ -390,6 +427,10 @@ * leading whitespace) */ for (i = 0; i < params; i++) { const char *s = va_arg(args, const char *); + if (debug >= 2) { + log("debug: set_cmode(%s,%s): param=%s", + sender, channel->name, s); + } len += snprintf(parambuf+len, sizeof(parambuf)-len, "%s%s", len ? " " : "", s); } @@ -443,6 +484,11 @@ int i; char *s; + if (debug >= 2) { + log("debug: possibly_remove_mode %c from %.*s%s%s", + mode, md->nopmodes*2, md->opmodes, + user ? " for user " : "", user ? user : ""); + } for (i = md->nopmodes-1; i >= 0; i--) { if (md->opmodes[i*2+1] == mode) { /* We've already set this mode once */ @@ -452,17 +498,22 @@ continue; } /* Remove the mode */ + if (debug >= 2) + log("debug: removing mode %d/%d", i, md->nopmodes); md->nopmodes--; s = md->opmodes + (i*2); memmove(s, s+2, strlen(s+2)+1); + /* Count parameters for this mode and decrement total by count */ md->nparams--; s = md->params[i]-1; while ((s = strchr(s+1, ' ')) != NULL) md->nparams--; + /* Move parameter pointers */ if (i < md->nopmodes) { memmove(md->params+i, md->params+i+1, sizeof(md->params[0])*(md->nopmodes-i)); } + /* Clear tail slot */ memset(md->params+md->nopmodes, 0, sizeof(md->params[0])); } } @@ -480,12 +531,27 @@ { char *s; + if (len < 0) { + log("add_mode_with_params(): BUG: parameter length < 0 (%d)", len); + len = 0; + } + if (debug >= 2) { + log("debug: add_mode_with_params: current=%.*s mode=%c add=%d" + " params=%d[%.*s]", md->nopmodes*2, md->opmodes, mode, is_add, + params, len, parambuf); + } + /* Check for overflow of parameter count or length */ if (md->nparams+params > MAXMODES || md->paramslen+1+len > MAXPARAMSLEN ) { /* Doesn't fit, so flush modes out first */ + struct modedata mdtmp = *md; + if (debug >= 2) + log("debug: add_mode_with_params: ...flushing first"); flush_cmode(md, 0); + memcpy(md->sender, mdtmp.sender, sizeof(md->sender)); + md->channel = mdtmp.channel; md->used = time(NULL); } s = md->opmodes + 2*md->nopmodes; @@ -496,9 +562,6 @@ " truncating to %d characters", is_add ? '+' : '-', mode, sizeof(md->params[0])-1); len = sizeof(md->params[0])-1; - } else if (len < 0) { - log("add_mode_with_params(): BUG: parameter length < 0 (%d)", len); - len = 0; } if (len > 0) memcpy(md->params[md->nopmodes], parambuf, len); @@ -542,6 +605,16 @@ goto done; } + if (debug >= 2) { + char onbuf[512]; + strscpy(onbuf, mode_flags_to_string(md->binmodes_on,MODE_CHANNEL), + sizeof(onbuf)); + log("debug: flush_cmode(%s): bin_on=%s bin_off=%s opmodes=%d(%.*s)", + md->channel->name, onbuf, + mode_flags_to_string(md->binmodes_off, MODE_CHANNEL), + md->nopmodes, md->nopmodes*2, md->opmodes); + } + /* Note that - must come before + because some servers (Unreal, others?) * ignore +s if followed by -p. */ if (md->binmodes_off) { diff -uNr ircservices-5.0.21/channels.c ircservices-5.0.22/channels.c --- ircservices-5.0.21/channels.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/channels.c 2003-09-16 04:17:48 +0900 @@ -177,22 +177,48 @@ /*************************************************************************/ +/* Search for the given ban on the given channel, and return the index into + * chan->bans[] if found, -1 otherwise. Nicknames are compared using + * irc_stricmp(), usernames and hostnames using stricmp(). + */ +static int find_ban(const Channel *chan, const char *ban) +{ + char *s, *t; + int i; + + t = strchr(ban, '!'); + i = 0; + for (i = 0; i < chan->bancount; i++) { + s = strchr(chan->bans[i], '!'); + if (s && t) { + if (s-(chan->bans[i]) == t-ban + && irc_strnicmp(chan->bans[i], ban, s-(chan->bans[i])) == 0 + && stricmp(s+1, t+1) == 0 + ) { + return i; + } + } else if (!s && !t) { + /* Bans without '!' should be impossible; just + * do a case-insensitive compare */ + if (stricmp(chan->bans[i], ban) == 0) + return i; + } + } + return -1; +} + +/*************************************************************************/ + /* Search for the given ban (case-insensitive) on the channel; return 1 if * it exists, 0 if not. */ int chan_has_ban(const char *chan, const char *ban) { - Channel *c; - int i; - - c = get_channel(chan); + Channel *c = get_channel(chan); if (!c) return 0; - for (i = 0; i < c->bancount; i++) - if (irc_stricmp(c->bans[i], ban) == 0) - return 1; - return 0; + return find_ban(c, ban) >= 0; } /*************************************************************************/ @@ -324,16 +350,12 @@ } chan->bans[chan->bancount++] = sstrdup(av[0]); } else { - char **s = chan->bans; - int i = 0; - while (i < chan->bancount && strcmp(*s, av[0]) != 0) { - i++; - s++; - } - if (i < chan->bancount) { + int i = find_ban(chan, av[0]); + if (i >= 0) { chan->bancount--; if (i < chan->bancount) - memmove(s, s+1, sizeof(char*)*(chan->bancount-i)); + memmove(&chan->bans[i], &chan->bans[i+1], + sizeof(char*) * (chan->bancount-i)); } else { log("channel: MODE %s -b %s: ban not found", chan->name, *av); diff -uNr ircservices-5.0.21/configure ircservices-5.0.22/configure --- ircservices-5.0.21/configure 2003-06-25 15:11:14 +0900 +++ ircservices-5.0.22/configure 2003-09-09 23:30:19 +0900 @@ -199,6 +199,7 @@ CLEAN_COMPILE=y MEMCHECKS= +SHOWALLOCS= DUMPCORE= STATIC_MODULES= @@ -271,6 +272,7 @@ OPT_DATDEST= OPT_CLEAN_COMPILE=bonkle OPT_MEMCHECKS=bonkle +OPT_SHOWALLOCS=bonkle OPT_DUMPCORE=bonkle IGNORE_CACHE= DONT_ASK= @@ -288,8 +290,8 @@ export OPT_OS2 OPT_BINDEST OPT_DATDEST IGNORE_CACHE DONT_ASK NO_DIR_CHECK export USE_LOCAL_FUNCS NO_USE_LOCAL_FUNCS USE_STATIC_MODULES -export NO_USE_STATIC_MODULES OPT_CLEAN_COMPILE OPT_MEMCHECKS OPT_DUMPCORE -export FORCE_GCC_2_96 +export NO_USE_STATIC_MODULES OPT_CLEAN_COMPILE OPT_MEMCHECKS OPT_SHOWALLOCS +export OPT_DUMPCORE FORCE_GCC_2_96 export USER_CC USER_CC_FLAGS USER_CC_LFLAGS USER_CC_LIBS while [ $# -gt 0 ] ; do @@ -364,6 +366,10 @@ OPT_MEMCHECKS=y elif [ "$option" = "no-memchecks" ] ; then OPT_MEMCHECKS= + elif [ "$option" = "showallocs" ] ; then + OPT_SHOWALLOCS=y + elif [ "$option" = "no-showallocs" ] ; then + OPT_SHOWALLOCS= elif [ "$option" = "dumpcore" ] ; then OPT_DUMPCORE=y elif [ "$option" = "no-dumpcore" ] ; then @@ -426,6 +432,9 @@ -memchecks Perform extra checks on memory allocation (for debugging only; causes a significant performance penalty) + -showallocs Log all memory allocation activity (for + debugging only; ignored unless -memchecks + is enabled) -dumpcore Causes Services to attempt to write a core file if it crashes (for debugging) @@ -433,7 +442,6 @@ -force-gcc-2.96 Allow use of GCC 2.96 (unsupported). See question B.1 in the FAQ for details. - -check Check whether this script has already been run and whether the cache is up-to-date. Exits with 0 if up-to-date, 1 if not. @@ -523,6 +531,9 @@ if [ "$OPT_MEMCHECKS" != bonkle ] ; then MEMCHECKS=$OPT_MEMCHECKS fi +if [ "$OPT_SHOWALLOCS" != bonkle ] ; then + SHOWALLOCS=$OPT_SHOWALLOCS +fi if [ "$OPT_DUMPCORE" != bonkle ] ; then DUMPCORE=$OPT_DUMPCORE fi @@ -2179,6 +2190,11 @@ # define MEMCHECKS #endif EOT +if [ "$SHOWALLOCS" ] ; then cat >>config.h.new <>config.h.new if [ "x$SYMS_NEED_UNDERSCORES" = x1 ] ; then cat >>config.h.new < [OPTIONAL] # When enabled, displays a "do not abuse NickServ" warning at the # end of the NickServ HELP output similar to previous versions of # Services. Otherwise, the warning is not displayed. diff -uNr ircservices-5.0.21/defs.h ircservices-5.0.22/defs.h --- ircservices-5.0.21/defs.h 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/defs.h 2003-09-16 04:17:48 +0900 @@ -118,7 +118,10 @@ #include #include #define __GNU_SOURCE /* for strsignal() with glibc */ +#undef DEFS_H /* kludge to work around Cygwin string.h kludge to work + * around problem compiling in gdb... this is stupid */ #include +#define DEFS_H #undef __GNU_SOURCE #include #include @@ -237,6 +240,13 @@ /*************************************************************************/ +/* Generic "invalid" pointer value. For use when an "invalid" value is + * needed and NULL cannot be used. */ + +#define PTR_INVALID ((const char *)-1) + +/*************************************************************************/ + /* Hack for sigsetjmp(); since (at least with glibc, and it shouldn't hurt * anywhere else) sigsetjmp() only works if you don't leave the stack frame * it was called from, we have to call it before calling the signals.c diff -uNr ircservices-5.0.21/docs/2.html ircservices-5.0.22/docs/2.html --- ircservices-5.0.21/docs/2.html 2003-07-14 15:18:10 +0900 +++ ircservices-5.0.22/docs/2.html 2003-07-16 11:53:22 +0900 @@ -81,6 +81,7 @@ IRC server (IRCD) nameServices module Bahamut [bahamut.dal.net] 1.4.25 through 1.4.33 + (*)
Note: versions 1.4.34 and above are not supported. bahamut Chunky Monkey IRCD 1.0 and above @@ -118,6 +119,17 @@
(servers listed in italics are listed based on user reports, but are not supported) +

(*) Bahamut (version 1.4.35 and earlier) has a +vulnerability which can lead to server crashes or execution of malicious +code when the DEBUGMODE compile-time constant is defined. If you +use this server, make certain you either do not define DEBUGMODE, +or change the following line in src/s_debug.c: +

syslog(LOG_ERR, debugbuf);
+to: +
syslog(LOG_ERR, "%s", debugbuf);
+See this +advisory [0xbadc0ded.org] for details. +

Back to top


diff -uNr ircservices-5.0.21/docs/4.html ircservices-5.0.22/docs/4.html --- ircservices-5.0.21/docs/4.html 2003-06-05 13:47:53 +0900 +++ ircservices-5.0.22/docs/4.html 2003-09-09 22:52:38 +0900 @@ -217,6 +217,35 @@


+ +

DROPEMAIL + +

Syntax: +
DROPEMAIL pattern +
DROPEMAIL-CONFIRM pattern +
+

+Drops all nicknames with an E-mail address matching the +given pattern. If pattern is the single character +"-", drops all nicknames without an E-mail address. +

+To prevent accidentally dropping nicknames via this command, +it must be given twice: first using the DROPEMAIL command +name, then using DROPEMAIL-CONFIRM with the same pattern. +The DROPEMAIL-CONFIRM command must be given within 10 minutes of +(by default, changeable via the +NSDropEmailExpire +option in modules.conf) +and by the same person who gave the DROPEMAIL command. +If more than 4 DROPEMAIL commands are given in a row, the +oldest will be discarded and no longer recognized for a +DROPEMAIL-CONFIRM command. +

+Limited to Services admins. + +

+


+

LINK (requires the nickserv/link module) @@ -336,10 +365,17 @@

Modifies or displays the autojoin list for your nickname. This is the list of channels that you would like to automatically -join, and takes effect whenever you identify to NickServ. Note -that you may only put channel names starting with "#" in the +join, and takes effect whenever you identify to NickServ. +You may only put channel names starting with "#" in the autojoin list (local channels cannot be added).

+Note that the IRC server may prohibit you from entering some +channels on the autojoin list, such as channels that have a +channel key set (mode +k) or are invite-only (mode +i). +However, if you have access to the ChanServ +INVITE command on a registered channel, +NickServ will automatically invite you into the channel. +

Services admins can list the autojoin list for any nickname with the format LIST nickname. @@ -1222,6 +1258,8 @@ example below, you should also set the RESTRICTED option for the channel, or anyone entering the channel when it is empty will be able to see the key! +MLOCK +i will likewise not prevent users from entering the +channel when it is empty without being invited.

Examples:
@@ -3206,6 +3244,7 @@
DEVOICE
DROP (ChanServ)
DROP (NickServ) +
DROPEMAIL
DROPNICK

E

diff -uNr ircservices-5.0.21/docs/6.html ircservices-5.0.22/docs/6.html --- ircservices-5.0.21/docs/6.html 2003-06-05 13:32:16 +0900 +++ ircservices-5.0.22/docs/6.html 2003-08-30 03:17:00 +0900 @@ -969,18 +969,22 @@

set topic -
Parameters: Channel *c, const char *topic, - const char *setter, time_t t +
Parameters: const char *source, Channel *c, + const char *topic, const char *setter, + time_t t
Called twice whenever set_topic() (in actions.c) - is called to set the topic of a channel from Services. The first - call is done before the channel structure is modified, and all - callback routines must return 0 in this case. The second call is - done after the channel structure is modified, but before - c->topic_time is changed; in this call, topic and - setter are both NULL. If the callback routine - returns 1, no further processing is done. This is currently used - to ensure that the topic time is set so that the IRC servers will - acknowledge the change under certain protocols. + is called to set the topic of a channel from Services. Parameters + are as for set_topic() (in actions.c), except as + noted below; source will always be non-NULL. The + first call is done before the channel structure is modified, and + all callback routines must return 0 in this case. The second call + is done after the channel structure is modified, but before + c->topic_time is changed; in this call, + topic and setter are both + NULL. If the callback routine returns 1, no further + processing is done. This is currently used to ensure that the + topic time is set so that the IRC servers will acknowledge the + change under certain protocols.

unload module @@ -1625,8 +1629,9 @@ transfer all of your rights in the information to the author(s) of IRC Services, then you may not submit the information. (This requirement is made to avoid the hassles which would accompany the inclusion of source -code or other items owned by multiple people or groups. If you cannot -comply with this paragraph but would still like to submit something, please +code or other items owned by multiple people or groups; see also the note +on the copyright page. If you cannot comply +with this paragraph but would still like to submit something, please contact the author to discuss your situation.)

Back to top diff -uNr ircservices-5.0.21/docs/a.html ircservices-5.0.22/docs/a.html --- ircservices-5.0.21/docs/a.html 2003-05-28 15:18:16 +0900 +++ ircservices-5.0.22/docs/a.html 2003-08-30 05:27:20 +0900 @@ -1433,9 +1433,28 @@

Example: NSSecureAdmins + +

  • +NSEnableDropEmail    [OPTIONAL] +

    Allows the DROPEMAIL command to be used. This command can help +recover from mass-registration attacks, but can also destroy your +database if used improperly. + +

    Example: NSEnableDropEmail +

+ + +

  • +NSDropEmailExpire    [REQUIRED] +

    Sets the maximum length of time allowed between a DROPEMAIL +command and the corresponding DROPEMAIL-CONFIRM command. + +

    Example: NSDropEmailExpire 10m +

+

  • -NSHelpWarning    [OPTIONAL] +NSHelpWarning time    [OPTIONAL]

    When enabled, displays a "do not abuse NickServ" warning at the end of the NickServ HELP output similar to previous versions of Services. Otherwise, the warning is not displayed. diff -uNr ircservices-5.0.21/docs/copyright.html ircservices-5.0.22/docs/copyright.html --- ircservices-5.0.21/docs/copyright.html 2002-09-29 17:14:08 +0900 +++ ircservices-5.0.22/docs/copyright.html 2003-07-16 21:28:10 +0900 @@ -10,7 +10,7 @@

    Copyright notice and disclaimer

    -

    IRC Services is copyright (c) 1996-2002 Andrew Church. There is +

    IRC Services is copyright (c) 1996-2003 Andrew Church. There is absolutely NO WARRANTY provided with this software, including the implied warranties of merchantability, fitness for a particular purpose, and noninfringement; in other words, if it blows up in your face, you get to @@ -21,13 +21,48 @@ circumstance.

    IRC Services is provided under the terms of the -GNU General Public License, Version 2, and may be -freely redistributed, with certain limitations described in that license -(notably, if you distribute IRC Services or any portion of it at all -then you must distribute the source code as well). You are not required to -accept the license if you will only use IRC Services privately; however, if -you do not accept the license, international copyright law forbids you from -copying or distributing IRC Services. +GNU General Public License (GPL), Version 2, and +may be freely redistributed, with certain limitations described in that +license (notably, if you distribute IRC Services or any portion of +it at all then you must distribute the source code as well). You are +not required to accept the license if you will only use IRC Services +privately; however, if you do not accept the license, international +copyright law forbids you from copying or distributing IRC Services. + +

    A note on the explicit use of version 2 of the GPL

    + +

    The GPL is published by the Free Software +Foundation (FSF) [www.fsf.org], which +occasionally releases new versions of the license to deal with ambiguities +or new legal issues. The FSF recommends that software which uses the GPL +specify that "any future version" may be used in place of the provided +license, both to give users of the software the choice to use such +"corrected" versions, and to avoid difficulties that can arise when +multiple individuals or organizations contribute to a project--if such +contributions are licensed under a particular version of the license and +only that version, the project maintainer would have to contact each of the +contributors for permission in order to apply a new version of the license +to the project as a whole, a task which can be time-consuming at best, and +impossible at worst. + +

    I have chosen to license Services under only version 2 of the GPL for +two reasons: +

    • Simplicity of dealing with licensing issues when a new version +of the GPL is released. Using a single version avoids the hassles of +having to deal with two (or more) interpretations of licensing terms. +
    • Because I own all of the source code. As discussed in +section 6-3 and FAQ Z.8, +I rarely accept code from others, and when I do I require that all rights +be transferred to me; doing this ensures that I will be able to release +Services under a new license (a new version of the GPL, or potentially some +other license) in the future if necessary. +
    + +

    Developers who intend to modify Services and distribute the modified +version should be aware of this; if you accept submissions of source code +from others, and don't require a transferral of rights, it would behoove +you to ask that the submitted code be licensed under the GPL version 2 +"or any future version" to avoid potential legal problems.


    diff -uNr ircservices-5.0.21/docs/faq.html ircservices-5.0.22/docs/faq.html --- ircservices-5.0.21/docs/faq.html 2003-06-18 00:37:59 +0900 +++ ircservices-5.0.22/docs/faq.html 2003-08-31 20:29:04 +0900 @@ -112,6 +112,9 @@
    E.6. If I use SET MLOCK on a channel to set a key, then anyone who enters the channel when empty can see it! How do I avoid this? +
    E.7. How can I disable automatic channel-owner mode for + the channel founder on Unreal and other IRC servers with such a + mode?

    F. OperServ features

    F.1. Using the OperServ JUPE command results in server @@ -142,6 +145,7 @@ Services sends responses in English instead.
    Z.3. I've found a bug that's not mentioned here or in the documentation or KnownBugs files. What should I do? +
    Z.3.5. What's a "backtrace", and how do I get one?
    Z.4. Your Services program doesn't do such-and-such like DALnet Services. What's wrong?
    Z.5. I've got a great new idea for Services. Do you want @@ -742,6 +746,18 @@ or use a bot to keep the channel open.
+ +

E.7. How can I disable automatic channel-owner mode for + the channel founder on Unreal and other IRC servers with such a + mode? +

+ Use the ChanServ LEVELS command to disable the + AUTOPROTECT level; doing so will also disable automatic + setting of the "channel owner" mode for the channel founder. + Setting the AUTOPROTECT level to anything other than + "disabled" will likewise re-enable the "channel owner" mode. +

+


@@ -954,6 +970,9 @@
  • What you think Services should have done instead
  • Whether the problem happens every time or just occasionally + If the problem involves Services crashing (e.g., with a + segmentation fault), then you should also provide a "backtrace"; + see the next question (Z.3.5) for details.

    If possible, try and reproduce the problem on a clean install (i.e. empty databases), starting from registration of @@ -979,6 +998,93 @@ author directly.

  • + +

    Z.3.5. What's a "backtrace", and how do I get one? +

    + A "backtrace" is a list of what functions have been called in + order to reach a certain point in a program. For example, the + function main() may have called a function + foo(), which in turn called a function bar(), + so the backtrace at a point inside function bar() would + look like: +

      +
    • Level 0: bar() +
    • Level 1: foo() +
    • Level 2: main() +
    + This can be thought of tracing the path of execution back to the + beginning of the program, hence the term "backtrace". +

    + Backtraces are most useful in determining where (and often why) a + program crashed, since they indicate both the exact point at which + the program crashed and the sequence of actions that led to the + crash; for this reason, they are a standard feature of most + debuggers. The instructions below are for the GNU debugger, GDB, + but should be mostly applicable to other debuggers as well. +

    + The most common way to obtain a backtrace is from a core + file, a file created when a program crashes that contains + information about the program's state at the time of the crash. + However, Services normally avoids the creation of core files in + order to provide a somewhat cleaner response to such emergency + conditions. In order to force Services to create core files, it is + necessary to pass the -dumpcore option to the + configure script and recompile Services. Additionally, + since compiler optimization can cause the crash location to be + reported incorrectly, and since the default compilation options do + not include debugging information helpful in interpreting a + backtrace, it is preferable to turn optimization off and debugging + on by using the configure option "-cflags -g". + If you have already run the configure script once, the + following command line can be used to enable core dumps: +

    + ./configure -dumpcore -cflags -g -defaults +
    +

    + Once you have reconfigured Services, compile, install, and start it + as usual. When a crash occurs, a core file will be created, + usually named "core" or "ircservices.core" and + usually stored in the Services data directory (though both of these + are operating system dependent). This file can be used to generate + a backtrace for the program at the time of the crash. +

    + To generate the backtrace, load the program and core file into the + debugger with the command line: +

    + gdb executable-file core-file +
    + For example, if your Services executable file is located in + /usr/local/sbin, your data directory is + /usr/local/lib/ircservices, and the core file is named + core, you would use: +
    + gdb /usr/local/sbin/ircservices /usr/local/lib/ircservices/core +
    + After the executable and core file have been loaded, you will be + presented with a "(gdb)" prompt. Type "bt" + (short for "backtrace") and press Enter at this prompt, and the + backtrace will be printed. +

    + If Services still does not produce a core file after following the + above instructions, it is possible to obtain a backtrace from the + program as it is running. To do this, recompile Services as above, + but instead of starting it the ordinary way, first load it into + GDB: +

    + gdb executable-file +
    + and then run Services in the foreground, rather than in the + background as usual: +
    + run -debug -nofork +
    + When the program crashes, GDB will print a message like + "Program received signal SIGSEGV, Segmentation fault", + and you will be presented with the "(gdb)" prompt. If + you type "bt" at this prompt, you will be able to get a + backtrace as above. +
    +

    Z.4. Your Services program doesn't do such-and-such like DALnet Services. What's wrong? @@ -1089,7 +1195,9 @@ as is but rewrite it so that it fits in with the rest of the Services code properly. This is the main way I'm able to keep Services as stable and coherent as it is: I don't let anyone else - touch the actual code base. + touch the actual code base. (There are also licensing-related + issues with allowing multiple people to contribute code; see the + copyright page.)

    Every now and then I have someone tell me, "But it's open source! You have to let other people help too!" This is, however, a @@ -1097,15 +1205,15 @@ not about having lots of people work on a single project; that's the "bazaar model" of software development, popularized by Eric S. Raymond's essay - "The + "The Cathedral and the Bazaar" - [www.tuxedo.org] (and I don't - entirely agree with his arguments, but that's another story). Open - source is only about giving users of software the freedom to modify - that software as they see fit, by giving them a copy of the source - code for the software; the difference is that those users may not + [www.catb.org] (and I don't entirely + agree with his arguments, but that's another story). Open source + is only about giving users of software the freedom to modify that + software as they see fit, by giving them a copy of the source code + for the software; the difference is that those users may not necessarily be all working together on a single project, and may - even be in "competition" with one another, so to speak, by each + even be in "competition" with one another, so to speak, each releasing their own version of a program. While it may seem that this wastes effort, the advantage is that each of those people has their own ideas for what the software should do; each program diff -uNr ircservices-5.0.21/extern.h ircservices-5.0.22/extern.h --- ircservices-5.0.21/extern.h 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/extern.h 2003-09-16 04:17:48 +0900 @@ -18,11 +18,11 @@ E int actions_init(int ac, char **av); E int bad_password(const char *service, User *u, const char *what); -E void clear_channel(const char *source, Channel *chan, int what, - const void *param); +E void clear_channel(Channel *chan, int what, const void *param); +E const char *set_clear_channel_sender(const char *newsender); E void kill_user(const char *source, const char *user, const char *reason); -E void set_topic(Channel *c, const char *topic, const char *setter, - time_t time); +E void set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t time); E void set_cmode(const char *sender, Channel *channel, ...); diff -uNr ircservices-5.0.21/lang/de.l ircservices-5.0.22/lang/de.l --- ircservices-5.0.21/lang/de.l 2003-06-27 10:56:51 +0900 +++ ircservices-5.0.22/lang/de.l 2003-09-10 23:04:12 +0900 @@ -2880,16 +2880,16 @@ ignoriert. Keine Fehlermeldung wird angezeigt, wenn der Chatname nicht angegeben wird. -NICK_HELP_AJOIN - Syntax: AJOIN ADD Raum - AJOIN DEL Raum - AJOIN LIST - - Modifiziert die Liste der Automatisch betretenden Räume oder - zeit sie an. Alle Räume von der Liste werden automatisch - betreten, wenn Sie sich den %S gegenüber mit Ihrem Passwort - identifizieren. Nur Räume, die mit "#" anfangen, können zur - Liste hinzugefügt werden, lokale Räume nicht. +#NICK_HELP_AJOIN +# Syntax: AJOIN ADD Raum +# AJOIN DEL Raum +# AJOIN LIST +# +# Modifiziert die Liste der Automatisch betretenden Räume oder +# zeit sie an. Alle Räume von der Liste werden automatisch +# betreten, wenn Sie sich den %S gegenüber mit Ihrem Passwort +# identifizieren. Nur Räume, die mit "#" anfangen, können zur +# Liste hinzugefügt werden, lokale Räume nicht. NICK_OPER_HELP_COMMANDS @@ -3010,7 +3010,7 @@ Zeigt alle Chatnamen an, die zu den angegebenen Suchmaske passen. Dabei muss entweder der Chatname selbst oder die Letzte Adresse (Format user@host) auf die Suchmaske passen. Chatnamen mit - der Option PRIVATE werden nur Services-Administratoren angezeigt. + der Option PRIVATE werden nur Services-Administratoren angezeigt. Die NOEXPIRE-Chatnamen werden mit einem !, die suspendierten mit einem * am Anfang markiert. @@ -3039,7 +3039,7 @@ Zeigt alle Chatnamen an, die zu den angegebenen Suchmaske passen. Dabei muss entweder der Chatname selbst oder die Letzte Adresse (Format user@host) auf die Suchmaske passen. Chatnamen mit - der Option PRIVATE werden nur Services-Administratoren angezeigt. + der Option PRIVATE werden nur Services-Administratoren angezeigt. Die NOEXPIRE-Chatnamen werden mit einem !, die suspendierten mit einem * und noch nicht authentifizierten (Befehl AUTH) mit einem ? am Anfang markiert. diff -uNr ircservices-5.0.21/lang/en_us.l ircservices-5.0.22/lang/en_us.l --- ircservices-5.0.21/lang/en_us.l 2003-06-03 15:21:55 +0900 +++ ircservices-5.0.22/lang/en_us.l 2003-09-09 22:56:04 +0900 @@ -353,6 +353,25 @@ NICK_X_DROPPED_LINKS Nickname %s and all linked nicknames have been dropped. +# DROPEMAIL and DROPEMAIL-CONFIRM responses +NICK_DROPEMAIL_SYNTAX + DROPEMAIL pattern +NICK_DROPEMAIL_PATTERN_TOO_LONG + The given pattern is too long (maximum %d characters). +NICK_DROPEMAIL_NONE + No nicknames have E-mail addresses matching the given pattern. +NICK_DROPEMAIL_COUNT + %d nicknames have E-mail addresses matching the given pattern. + To drop these nicknames, type: /msg %s DROPEMAIL-CONFIRM %s +NICK_DROPEMAIL_CONFIRM_SYNTAX + DROPEMAIL-CONFIRM address +NICK_DROPEMAIL_CONFIRM_UNKNOWN + The given pattern is not recognized. Please use the DROPEMAIL command again with this pattern before using the DROPEMAIL-CONFIRM command. +NICK_DROPEMAIL_CONFIRM_DROPPING + Dropping %d nicknames... +NICK_DROPEMAIL_CONFIRM_DROPPED + Nickname drop complete. + # SET responses NICK_SET_SYNTAX SET option parameters @@ -2943,15 +2962,28 @@ Modifies or displays the autojoin list for your nickname. This is the list of channels that you would like to automatically join, and takes effect whenever you identify - to %S. Note that you may only put channel names - starting with "#" in the autojoin list (local channels - cannot be added). + to %S. You may only put channel names starting with + "#" in the autojoin list (local channels cannot be added). + +NICK_HELP_AJOIN_END + Note that the IRC server may prohibit you from entering some + channels on the autojoin list, such as channels that have a + channel key set (mode +k) or are invite-only (mode +i). +NICK_HELP_AJOIN_END_CHANSERV + Note that the IRC server may prohibit you from entering some + channels on the autojoin list, such as channels that have a + channel key set (mode +k) or are invite-only (mode +i). + However, if you have access to the %s INVITE command + on a registered channel, %S will automatically invite + you into the channel. NICK_OPER_HELP_COMMANDS The following commands are available to Services admins: DROPNICK Drop any nickname +NICK_OPER_HELP_COMMANDS_DROPEMAIL + DROPEMAIL Drop all nicknames matching an E-mail address NICK_OPER_HELP_COMMANDS_GETPASS GETPASS Show the password for a nickname (only if encryption is not active) @@ -2982,6 +3014,25 @@ Limited to Services admins. +NICK_OPER_HELP_DROPEMAIL + Syntax: DROPEMAIL pattern + DROPEMAIL-CONFIRM pattern + + Drops all nicknames with an E-mail address matching the + given pattern. If pattern is the single character + "-", drops all nicknames without an E-mail address. + + To prevent accidentally dropping nicknames via this command, + it must be given twice: first using the DROPEMAIL command + name, then using DROPEMAIL-CONFIRM with the same pattern. + The DROPEMAIL-CONFIRM command must be given within %s + of and by the same person who gave the DROPEMAIL command. + If more than 4 DROPEMAIL commands are given in a row, the + oldest will be discarded and no longer recognized for a + DROPEMAIL-CONFIRM command. + + Limited to Services admins. + NICK_OPER_HELP_SET Services admins can also set the option NOEXPIRE, with @@ -3060,9 +3111,9 @@ Lists all registered nicknames for which either the nickname itself or the last seen address (in user@host format) match - the given pattern. Nicks with the PRIVATE option set will + the given pattern. Nicks with the PRIVATE option set will only be displayed to Services admins. For Services admins, - nicks with the NOEXPIRE option set will have a ! prepended + nicks with the NOEXPIRE option set will have a ! prepended to the nickname and those that are suspended will be prepended by a *. @@ -3091,9 +3142,9 @@ Lists all registered nicknames for which either the nickname itself or the last seen address (in user@host format) match - the given pattern. Nicks with the PRIVATE option set will + the given pattern. Nicks with the PRIVATE option set will only be displayed to Services admins. For Services admins, - nicks with the NOEXPIRE option set will have a ! prepended + nicks with the NOEXPIRE option set will have a ! prepended to the nickname, those that are suspended will be prepended by a *, and those that have not yet been authenticated (with the AUTH command) will be prepended by a ?. @@ -3460,6 +3511,8 @@ example below, you should also set the RESTRICTED option for the channel (see HELP SET RESTRICTED), or anyone entering the channel when it is empty will be able to see the key! + MLOCK +i will likewise not prevent users from entering the + channel when it is empty without being invited. Examples: @@ -4989,4 +5042,4 @@ # version of the master (English) language file was used to create a # translated file. -# CVS: $Revision: 2.208 $ +# CVS: $Revision: 2.213 $ diff -uNr ircservices-5.0.21/lang/es.l ircservices-5.0.22/lang/es.l --- ircservices-5.0.21/lang/es.l 2003-06-09 15:43:59 +0900 +++ ircservices-5.0.22/lang/es.l 2003-09-16 04:12:51 +0900 @@ -354,6 +354,25 @@ NICK_X_DROPPED_LINKS El apodo %s y todos los apodos ligados han sido cancelados. +# DROPEMAIL and DROPEMAIL-CONFIRM responses +NICK_DROPEMAIL_SYNTAX + DROPEMAIL Patrón +NICK_DROPEMAIL_PATTERN_TOO_LONG + El patrón dado es demaciado largo (%d caractéres máximo). +NICK_DROPEMAIL_NONE + Ningún apodo tiene una dirección de correo electrónico que concuerde con el patrón especificado. +NICK_DROPEMAIL_COUNT + %d apodos tienen direcciónes de correo electrónico que concuerdan con el patrón especificado. + Para cancelar estos apodos, escriba: /msg %s DROPEMAIL-CONFIRM %s +NICK_DROPEMAIL_CONFIRM_SYNTAX + DROPEMAIL-CONFIRM Patrón +NICK_DROPEMAIL_CONFIRM_UNKNOWN + El patrón especificado no es reconocido. Por favor utilice el comando DROPEMAIL nuevamente con este patrón antes de usar el comando DROPEMAIL-CONFIRM. +NICK_DROPEMAIL_CONFIRM_DROPPING + Cancelando %d apodos... +NICK_DROPEMAIL_CONFIRM_DROPPED + Cancelación de apodos completado. + # SET responses NICK_SET_SYNTAX SET Opción Parámetros @@ -2939,20 +2958,41 @@ NICK_HELP_AJOIN Sintaxis: AJOIN ADD Canal - AJOIN DEL Canal - AJOIN LIST + AJOIN DEL Canal + AJOIN LIST - Modifica o muestra la lista de auto ingreso (autojoin) para su apodo. Esta - es la lista de canales a los cuales le gustaria ser llevado automáticamente, - y va a surtir efecto cuando usted se identifica a %S. Note que usted - solamente puede incluír nombres de canales que comiencen con "#" en la - lista de auto ingreso (canales locales no pueden ser incluidos). + Modifica o muestra la lista de auto ingreso (autojoin) para + su apodo. Esta es la lista de canales a los cuales le + gustaria ser llevado automáticamente, y va a surtir efecto + cuando usted se identifica a %S. Note que usted + solamente puede incluír nombres de canales que comiencen con + "#" en la lista de auto ingreso (canales locales no pueden + ser incluidos). + +NICK_HELP_AJOIN_END + Note que el servidor de IRC pudiera prohibirle el ingreso a + algunos de los canales en la lista de auto ingreso, tales + canales incluyen aquellos a los cuales le ha sido fijado una + llave (modo +k) o que se han fijado como invitación-solamente + (modo +i). +NICK_HELP_AJOIN_END_CHANSERV + Note que el servidor de IRC pudiera prohibirle el ingreso a + algunos de los canales en la lista de auto ingreso, tales + canales incluyen aquellos a los cuales le ha sido fijado una + llave (modo +k) o que se han fijado como invitación-solamente + (modo +i). Sin embargo, si usted tiene acceso al comando + INVITE de %s en un canal registrado, %S le + invitará automáticamente a usted para que pueda ingresar al + canal. NICK_OPER_HELP_COMMANDS Los siguientes comandos están disponibles a los Administradores de Servicios: DROPNICK Cancela cualquier apodo +NICK_OPER_HELP_COMMANDS_DROPEMAIL + DROPEMAIL Cancela todos los apodos que concuerden con una + dirección de correo electrónico especificada NICK_OPER_HELP_COMMANDS_GETPASS GETPASS Muestra la contraseña para un apodo (solo si encripción está desactivada) @@ -2983,6 +3023,27 @@ Limitedo a los Administradores de servicios. +NICK_OPER_HELP_DROPEMAIL + Syntax: DROPEMAIL Patrón + DROPEMAIL-CONFIRM Patrón + + Cancela todos los apodos con una dirección de correo + electrónico que concuerde con el Patrón dado. Si Patrón es el + simple caractér "-", entonces cancelará todos los apodos sin + una dirección de correo electrónico. + + Para prevenir el que accidentalmente se cancelen apodos via + este comando, se deberá entrar dos veces: primero usando el + comando llamado DROPEMAIL, y despues usando DROPEMAIL-CONFIRM + con el mismo patrón. El comando DROPEMAIL-CONFIRM debe ser + ejecutado dentro de %s de y por la misma persona que + ejecutó el comando DROPEMAIL. Si se dan mas de 4 ejecuciones + del comando DROPEMAIL continuamente, la mas antigua será + ignorada y no se le reconoserá mas para una ejecución del + comando DROPEMAIL-CONFIRM. + + Limitado a los Administradores De Servicios. + NICK_OPER_HELP_SET Administradores de Servicios pueden seleccionar la opción @@ -2999,7 +3060,7 @@ que el apodo expire. Si no se incluye un apodo, entonces se aplica a tu propio apodo. - Limitado a los Administradores de Servicios. + Limitado a los Administradores De Servicios. NICK_OPER_HELP_UNSET @@ -3032,7 +3093,7 @@ Alista los apodos que estén ligados al apodo dado. - Limitado a los Administradores de Servicios. + Limitado a los Administradores De Servicios. NICK_OPER_HELP_LISTLINKS Sintaxis: LISTLINKS [Apodo] @@ -3063,9 +3124,9 @@ Alista todos los apodos registrados para los cuales o bien el apodo mismo o la última dirección vista (en el formato Usuario@Proveedor-web) - concuerdan con el patrón dado. Apodos con la opción PRIVATE activada + concuerdan con el patrón dado. Apodos con la opción PRIVATE activada serán solamente mostrados a los Administradores de los servicios. Ellos, - verán que los apodos con la opción NOEXPIRE activada tendrán un signo ! + verán que los apodos con la opción NOEXPIRE activada tendrán un signo ! antes del apodo y aquellos que están suspendidos estarán prefijados con el signo * antes del apodo. @@ -3094,9 +3155,9 @@ Alista todos los apodos registrados para los cuales o bien el apodo mismo o la última dirección vista (en el formato Usuario@Proveedor-web) - concuerdan con el patrón dado. Apodos con la opción PRIVATE activada + concuerdan con el patrón dado. Apodos con la opción PRIVATE activada serán solamente mostrados a los Administradores de los servicios. Ellos, - verán que los apodos con la opción NOEXPIRE activada tendrán un signo ! + verán que los apodos con la opción NOEXPIRE activada tendrán un signo ! antes del apodo, los que están suspendidos estarán prefijados con el signo * antes del apodo, y aquellos que aún no han sido autenticados (con el comando AUTH) tendrán un signo ? antes del apodo. @@ -3149,7 +3210,7 @@ Este comando pudiera no estar disponible cuando la red está usando encripción, dependiendo de el tipo de encripción utilizada. - Limitado a los Administradores de servicios. + Limitado a los Administradores De Servicios. NICK_OPER_HELP_FORBID Sintaxis: FORBID Apodo @@ -3157,7 +3218,7 @@ Prohibe a todos el regístro y el uso de un apodo. Se puede revertir utilizando el comando DROP. - Limitado a los Administradores de servicios. + Limitado a los Administradores De Servicios. NICK_OPER_HELP_SUSPEND Sintaxis: SUSPEND [+Expiración] Apodo Razón @@ -3177,7 +3238,7 @@ Permite a los usuarios el uso y habilidad de identificarse por un apodo previamente SUSPENDido. - Limitado a los Administradores de servicios. + Limitado a los Administradores De Servicios. NICK_OPER_HELP_AJOIN @@ -3194,7 +3255,7 @@ apodo y esta persona no será ya más tratada como si se hubiese identificado previamente por el apodo. - Limitado a los Administradores de servicios. + Limitado a los Administradores De Servicios. NICK_OPER_HELP_GETAUTH Sintaxis: GETAUTH Apodo @@ -3329,7 +3390,7 @@ /msg %s HELP para obtener información de cómo hacerlo. CHAN_HELP_REGISTER_ADMINONLY - Limitado a los Administradores de servicios. + Limitado a los Administradores De Servicios. CHAN_HELP_SENDPASS Sintaxis: SENDPASS Canal @@ -3455,32 +3516,39 @@ Sintaxis: SET Canal MLOCK Modos Fija el parámetro modo-candado para el canal. %S le permite a - usted definir ciertos modos en el canal para que esten siempre activados - (o desactivados). Todos los modos binarios (n, s, t, k, l, ect) - pueden ser fijados permanentemente; cada modo puede ser activado, desactivado, - o no fijado. El parámetro Modos es construido exactamente en la misma forma - que se ejecuta un comando /MODE; lo cual significa que, los modos seguidos - por un signo + son activados, y los modos seguidos por - son desactivados. - - Advertencia: Si usted fija una llave con el modo-candado, como en el segundo - ejemplo abajo, entonces deberá también fijar la opción RESTRICTED para el canal - (vea HELP SET RESTRICTED), de lo contrario a cualquier usuario que ingrese al - canal cuando este esté vacío le sera posible ver la llave del canal! + usted definir ciertos modos en el canal para que esten siempre + activados (o desactivados). Todos los modos binarios (n, s, t, + k, l, ect) pueden ser fijados permanentemente; cada modo puede + ser activado, desactivado, o no fijado. El parámetro Modos es + construido exactamente en la misma forma que se ejecuta un + comando /MODE; lo cual significa que, los modos seguidos por + un signo + son activados, y los modos seguidos por - son + desactivados. + + Advertencia: Si usted fija una llave con el modo-candado, como + en el segundo ejemplo abajo, entonces deberá también fijar la + opción RESTRICTED para el canal (vea HELP SET RESTRICTED), de + lo contrario a cualquier usuario que ingrese al canal cuando + este esté vacío le sera posible ver la llave del canal! + Igualmente MLOCK +i no preveerá el que los usuarios ingresen + al canal cuando está vacío sin haber sido invitados. Ejemplos: SET #Canal MLOCK +nt-ikl - Impone los modos n y t como activos, y los modos i, k, y l como innactivos. - Todos los otros modos son liberados para estár bien activos o innactivos. + Impone los modos n y t como activos, y los modos i, k, + y l como innactivos. Todos los otros modos son + liberados para estár bien activos o innactivos. SET #Canal MLOCK +knst-ilmp My-Contraseña - Impone los modos k, n, s, y t como activos, y los modos i, l, m, - y p como innactivos. Tambien establece la contraseña del canal - como "My-Contraseña". + Impone los modos k, n, s, y t como activos, y los modos + i, l, m, y p como innactivos. Tambien establece la + contraseña del canal como "My-Contraseña". SET #Canal MLOCK + - Remueve el modo-candado; todos los modos en el canal son liberados - para estár o bien activados o desactivados (innactivos). + Remueve el modo-candado; todos los modos en el canal + son liberados para estár o bien activados o + desactivados (innactivos). CHAN_HELP_SET_HIDE Sintaxis: SET Canal HIDE {EMAIL | TOPIC | MLOCK} {ON | OFF} @@ -4060,7 +4128,7 @@ Si encripción está en uso, este comando puediera no estar disponible dependiendo del tipo de encripción que se este usando en la red. - Limitado a los Administradores De Los Servicios. + Limitado a los Administradores De Servicios. CHAN_OPER_HELP_FORBID Sintaxis: FORBID Canal @@ -4068,7 +4136,7 @@ Deshabilita el que alguien registre o utilice el canal indicado. Esto puede ser revertido por medio de eliminar el canal (drop). - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. CHAN_OPER_HELP_SUSPEND Sintaxis: SUSPEND [+Expiración] Canal Razón @@ -4079,7 +4147,7 @@ permitirá su uso como antes. El parámetro Expiración es interpretado en la misma manera que el comando %s AKILL. - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. CHAN_OPER_HELP_UNSUSPEND Sintaxis: UNSUSPEND Canal @@ -4087,7 +4155,7 @@ Permite a los usuarios el uso y el que se identifiquen por un canal que habia sido previamente suspendido (suspend). - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. ########################################################################### @@ -4272,7 +4340,7 @@ fue fijado con HARD). Este uso del comando SET LIMIT es limitado a Administradores - de Servicios. Otros usuarios solo pueden establecer su propio + De Servicios. Otros usuarios solo pueden establecer su propio límite o el de un canal sobre el cual tienen tales privilegios, no pueden remover su límite, no pueden fijar un límite superior a %d, y no pueden fijar un límite HARD. @@ -4289,8 +4357,8 @@ el canal indicado. Con un parámetro de apodo, muestra la misma información para - el apodo indicado. Este comando está limitado a los - Administradores de Servicios. + el apodo indicado. Este comando está limitado a los + Administradores De Servicios. MEMO_HELP_FORWARD Sintaxis: FORWARD {Núm | List | ALL} @@ -4487,7 +4555,7 @@ Remueve todos los usuarios de un canal (pateo masivo). - Limitado a los Operadores de Servicios. + Limitado a los Operadores De Servicios. OPER_HELP_KICK Sintaxis: KICK Canal Usuario Razón @@ -4547,7 +4615,7 @@ tiempo de expiración. OPER_HELP_AKILL_END - Limitado a Operadores De Servicios. + Limitado a los Operadores De Servicios. OPER_HELP_EXCLUDE Sintaxis: EXCLUDE ADD [+Expiración] Máscara Razón @@ -4659,7 +4727,7 @@ de entradas en la lista SQLINE. Vea la ayuda para SGLINE (/msg %S HELP SGLINE) para más detalles. - Limitado a Operadores De Servicios. + Limitado a los Operadores De Servicios. OPER_HELP_SZLINE Sintaxis: SZLINE ADD [+Expiración] Máscara Razón @@ -4679,7 +4747,7 @@ de entradas en la lista SZLINE. Vea la ayuda para SGLINE (/msg %S HELP SGLINE) para más detalles. - Limitado a Operadores De Servicios. + Limitado a los Operadores De Servicios. OPER_HELP_EXCEPTION Sintaxis: EXCEPTION ADD [+Expiración] Máscara Límite Razón @@ -4736,7 +4804,7 @@ grandes junto a máscaras de excepción que concuerden apliamente afectarán negativamente en la eficiencia de los servicios. - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. OPER_HELP_SESSION Sintaxis: SESSION LIST Núm-Límite @@ -4757,7 +4825,7 @@ de sesiones y sobre como fijar límites de sesiones específicos a ciertas máquinas y grupos de esas máquinas. - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. OPER_HELP_SU Sintaxis: SU Contraseña @@ -4772,7 +4840,7 @@ AVISO!: Si usted ingresa una contraseña incorrecta, Entonces los servicios enviarán un mensaje de aviso a todos los IRCops. - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. OPER_HELP_SET Sintaxis: SET Opción Ajuste @@ -4783,8 +4851,8 @@ DEBUG Activa/desactiva el modo de detección de errores SUPASS Fija contraseña para el comando SU (super-usuario) - Limitado a Administradores de Servicios; la opción SUPASS solo puede - ser fijada por el Super-Usuario de los Servicios. + Limitado a los Administradores De Servicios; la opción SUPASS + solo puede ser fijada por el Super-Usuario De Servicios. OPER_HELP_SET_READONLY Sintaxis: SET READONLY {ON | OFF} @@ -4837,7 +4905,7 @@ el texto "Jupitered by ", mostrando el apodo de la persona que desenganchó (jupitered) al servidor. - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. OPER_HELP_RAW Sintaxis: RAW Texto @@ -4849,7 +4917,7 @@ apropiadamente. NO USE ESTE COMANDO a menos que usted esté completamente seguro de lo que está haciendo! - Limitado al Super-Usuario de Servicios. + Limitado al Super-Usuario De Servicios. OPER_HELP_UPDATE Sintaxis: UPDATE [FORCE] @@ -4872,14 +4940,14 @@ deseen grabarse. Para desactivación normal de los Servicios, utilice el comando SHUTDOWN. - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. OPER_HELP_SHUTDOWN Sintaxis: SHUTDOWN Causa que los Servicios graben todas las bases de datos y despues se desactiven. - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. OPER_HELP_RESTART Sintaxis: RESTART @@ -4888,7 +4956,7 @@ luego se desactiven. (ejemplo: salir e immediatamente re-hacer el ejecutable). - Limitado a Administradores de Servicios. + Limitado a los Administradores De Servicios. OPER_HELP_REHASH Sintaxis: REHASH @@ -4999,5 +5067,5 @@ DELETE borra las estadísticas del servidor especificado. COPY duplica un grupo de estadísticas del servidor. RENAME renombra un grupo de estadísticas del servidor. - Estos tres comandos están limitados al Super-Usuario - de los Servicios. + Estos tres comandos están limitados al Super-Usuario De + Servicios. diff -uNr ircservices-5.0.21/lang/fr.l ircservices-5.0.22/lang/fr.l --- ircservices-5.0.21/lang/fr.l 2003-06-03 15:20:20 +0900 +++ ircservices-5.0.22/lang/fr.l 2003-09-10 23:04:01 +0900 @@ -2984,18 +2984,18 @@ commande; les autres seront ignorées. Aucun message d'erreur n'est généré si aucun surnom est donné. -NICK_HELP_AJOIN - Syntaxe: AJOIN ADD canal - AJOIN DEL canal - AJOIN LIST - - Modifie ou présente la liste de canaux auto-joints pour - votre surnom. Il s'agit de la liste des canaux que vous - désirez joindre automatiquement, dès que vous vous - identifiez à %S. Remarquez que vous pouvez seulement - mettre des noms de canaux commençant par "#" dans la liste - auto-joindre (les canaux locaux ne peuvent pas être - ajoutés). +#NICK_HELP_AJOIN +# Syntaxe: AJOIN ADD canal +# AJOIN DEL canal +# AJOIN LIST +# +# Modifie ou présente la liste de canaux auto-joints pour +# votre surnom. Il s'agit de la liste des canaux que vous +# désirez joindre automatiquement, dès que vous vous +# identifiez à %S. Remarquez que vous pouvez seulement +# mettre des noms de canaux commençant par "#" dans la liste +# auto-joindre (les canaux locaux ne peuvent pas être +# ajoutés). NICK_OPER_HELP_COMMANDS @@ -3125,10 +3125,10 @@ Donne la liste de tous les surnoms enregistrés pour n'importe quel surnom ou la dernière adresse sur lequel il a été apperçu (dans le format usager@hôte) correspondant au - modèle donné. Les surnoms ayant l'option PRIVATE seront + modèle donné. Les surnoms ayant l'option PRIVATE seront seulement présentés aux Administrateurs des Services. Pour les Administrateurs des Services, les surnoms ayant l'option - NOEXPIRE déterminée auront un ! à côté du surnom, et les + NOEXPIRE déterminée auront un ! à côté du surnom, et les surnoms suspendus seront accompagnés d'un *. Si les options FORBIDDEN, SUSPENDED ou NOEXPIRE sont @@ -3159,10 +3159,10 @@ Donne la liste de tous les surnoms enregistrés qui correspondent au modèle donné, autant avec le surnom lui-même ou avec la dernière adresse apperçue (dans le - format usager@hôte). Les surnoms ayant l'option PRIVATE + format usager@hôte). Les surnoms ayant l'option PRIVATE sélectionnée seront présentés exclusivement aux Administrateurs des Services. Pour ces derniers, les - surnoms ayant l'option NOEXPIRE déterminée auront à côté un + surnoms ayant l'option NOEXPIRE déterminée auront à côté un !, ceux qui sont suspendus serons précédés d'un *, et ceux qui n'ont pas encore été autorisés (avec la commande AUTH) seront précédés d'un ?. diff -uNr ircservices-5.0.21/lang/hu.l ircservices-5.0.22/lang/hu.l --- ircservices-5.0.21/lang/hu.l 2003-06-11 12:59:24 +0900 +++ ircservices-5.0.22/lang/hu.l 2003-09-10 23:02:21 +0900 @@ -362,6 +362,25 @@ NICK_X_DROPPED_LINKS Ez a nicknév %s és az összes hozzá linkelt nicknév már nem regisztrált. +# DROPEMAIL válasz +NICK_DROPEMAIL_SYNTAX + DROPEMAIL példa +NICK_DROPEMAIL_PATTERN_TOO_LONG + A megadott példa túl hosszú (maximum %d karakter). +NICK_DROPEMAIL_NONE + Egy nicknévnek E-mail címe a megadott példában. +NICK_DROPEMAIL_COUNT + %d nicknévnek van E-mail címe a megadott példából. + Hogy dropold ezeket a nickneveket, írd be: /msg %s DROPEMAIL-CONFIRM %s +NICK_DROPEMAIL_CONFIRM_SYNTAX + DROPEMAIL-CONFIRM cím +NICK_DROPEMAIL_CONFIRM_UNKNOWN + A megadott példa nem felismerhetõ. Kérlek használd a DROPEMAIL parancsot újra ezzel a példával mielõtt használod a DROPEMAIL-CONFIRM parancsot. +NICK_DROPEMAIL_CONFIRM_DROPPING + %d nicknév törlése... +NICK_DROPEMAIL_CONFIRM_DROPPED + Nicknevek dropolása kész. + # SET válasz NICK_SET_SYNTAX SET opció paraméterek @@ -2897,17 +2916,32 @@ AJOIN DEL csatorna AJOIN LIST - Módosítja vagy listázza az autojoin listát. Ez azon csatornák listája - amelyekbe automatikus be szeretnél lépni, - és ez megtörténik abban a pillanatban amikor azonositottad magad %S. - MEgjegyzés csak olyan csatornát rakhatsz a listára, ami "#" kezdõdik - (local csatornák nem adhatok hozzá a listához). + Módosítja vagy megjeleníti az nicknevedhez tartozó autojoin listát. + Ez a lista azon csatornákat tartalmazza, melyekbe automatikusan + be akarsz lépni, ennek akkor van hatása, ha már beazonosítottál a %S felé. + Csak olyan csatornákat helyezhetsz el az autojoin listán, melyek + "#" jellel kezdõdnek (helyi csatornák nem adhatóak hozzá). + +NICK_HELP_AJOIN_END + Megjegyzés: az IRC server megtilthatja, hogy belépj néhány csatornára + az autojoin listádról, mint például melyek csatornajelszóval védettek, + (mode +k) vagy csak meghívásra lehet belépni (mode +i). +NICK_HELP_AJOIN_END_CHANSERV + Megjegyzés: az IRC server megtilthatja, hogy belépj néhány csatornára + az autojoin listádról, mint például melyek csatornajelszóval védettek, + (mode +k) vagy csak meghívásra lehet belépni (mode +i). + Habár, ha van hozzáférésed a %s INVITE parancsához + egy regisztrált csatornán, akkor a %S automatikus meg fog hívni a + csatornára téged. NICK_OPER_HELP_COMMANDS A következõ parancsok állnak a Services adminok rendelkezésére: DROPNICK Nicknév droppolása +NICK_OPER_HELP_COMMANDS_DROPEMAIL + DROPEMAIL Dropol minden nicknevet, aminél szerepel a + megadott E-mail cím NICK_OPER_HELP_COMMANDS_GETPASS GETPASS Nicknév jelszavának megtekintése (csak, ha az encryption nem aktív) @@ -2938,6 +2972,26 @@ Limitálva Services adminoknak. +NICK_OPER_HELP_DROPEMAIL + Syntax: DROPEMAIL példa + DROPEMAIL-CONFIRM példa + + Dropol minden nicknevet, aminél szerepel az E-mail cím, + melyet megadtál a példában. Ha a példa egy egyszerû + karakter: "-", dropol minden nicknevet, melynél nincs E-mail + cím társítva. + + Hogy megelõzzük a balesetszerû nicknév dropolásokat ezen a + parancson keresztül, kétszer kell megadni: elõször használva + a DROPEMAIL parancsot majd használva a DROPEMAIL-CONFIRM + ugyanazzal a példával. A DROPEMAIL-CONFIRM parancs meg kell + adni %s és ugyannak a személynek, aki kiadta a + DROPEMAIL parancsot. Ha több mint 4 DROPEMAIL parancs van + megadva egy sorban a legrégebbi elfelejtõdik és továbbiakban + nem fog reagálni a DROPEMAIL-CONFIRM parancsra. + + Limitálva Services adminoknak. + NICK_OPER_HELP_SET Services adminok használhatják a NOEXPIRE (nem elévülõ) opciót is, @@ -3015,9 +3069,9 @@ Listáz minden registrált nicknevet, amely vagy nicknév vagy az utoljára látott address (user@host formatumban), amely - egyezik a megadott sablonnal. Nickek PRIVATE opcióval beállítva + egyezik a megadott sablonnal. Nickek PRIVATE opcióval beállítva csak Services adminoknak jelennek meg. Services adminoknak, - a nickek NOEXPIRE opcióval beállítva ! megelõzve (prefix) + a nickek NOEXPIRE opcióval beállítva ! megelõzve (prefix) jelennek meg azok pedig, amelyek használata fel lett függesztve * megelõzve (prefix) fognak megjelenni. Pl: !nick *nick @@ -3047,9 +3101,9 @@ Listáz minden regisztrált nicknevet, amely vagy egy nicknév vagy az utoljára használt address (user@host formátumban), ami megegyezik - a megadott sablonnal. Nickek PRIVATE opció beállítással csak + a megadott sablonnal. Nickek PRIVATE opció beállítással csak Services adminoknak fognak megjelenni. Services adminoknak, - nickek NOEXPIRE opció beállítással ! megelõzve (prefix) + nickek NOEXPIRE opció beállítással ! megelõzve (prefix) jelennek meg azok pedig, amelyek használata fel lett függesztve * megelõzve (prefix) fognak megjelenni. Pl: !nick *nick És azok, amelyek még nem lettek élesítve (az @@ -3417,6 +3471,13 @@ /MODE parancs; azok a módok amelyek a + jel után vannak lockolódnak, és azok a módok amelyek a - jel után vannak nem rakhatóak fel a szobára. + Figyelmeztetés: Ha beállítasz egy mode-lock alatti kulcsot, + mint azt a második példában látod, akkor be kell állítanod a + RESTRICTED opciót a csatornán (lásd HELP SET RESTRICTED) + vagy bárki beléphet a szobába amikor üres és lehetõsége lesz + meglátni a kulcsot! MLOCK +i nem elõzi meg, hogy belépjenek + a szobádba amikor üres, meghívás nélkül. + Példák: SET #csatorna MLOCK +nt-ikl diff -uNr ircservices-5.0.21/lang/index ircservices-5.0.22/lang/index --- ircservices-5.0.21/lang/index 2003-06-05 10:55:22 +0900 +++ ircservices-5.0.22/lang/index 2003-09-09 23:05:24 +0900 @@ -95,6 +95,14 @@ NICK_DROPNICK_SYNTAX NICK_X_DROPPED NICK_X_DROPPED_LINKS +NICK_DROPEMAIL_SYNTAX +NICK_DROPEMAIL_PATTERN_TOO_LONG +NICK_DROPEMAIL_NONE +NICK_DROPEMAIL_COUNT +NICK_DROPEMAIL_CONFIRM_SYNTAX +NICK_DROPEMAIL_CONFIRM_UNKNOWN +NICK_DROPEMAIL_CONFIRM_DROPPING +NICK_DROPEMAIL_CONFIRM_DROPPED NICK_SET_SYNTAX NICK_SET_OPER_SYNTAX NICK_SET_DISABLED @@ -965,13 +973,17 @@ NICK_HELP_LISTEMAIL NICK_HELP_STATUS NICK_HELP_AJOIN +NICK_HELP_AJOIN_END +NICK_HELP_AJOIN_END_CHANSERV NICK_OPER_HELP_COMMANDS +NICK_OPER_HELP_COMMANDS_DROPEMAIL NICK_OPER_HELP_COMMANDS_GETPASS NICK_OPER_HELP_COMMANDS_FORBID NICK_OPER_HELP_COMMANDS_LISTLINKS NICK_OPER_HELP_COMMANDS_SETAUTH NICK_OPER_HELP_COMMANDS_END NICK_OPER_HELP_DROPNICK +NICK_OPER_HELP_DROPEMAIL NICK_OPER_HELP_SET NICK_OPER_HELP_SET_NOEXPIRE NICK_OPER_HELP_UNSET diff -uNr ircservices-5.0.21/lang/it.l ircservices-5.0.22/lang/it.l --- ircservices-5.0.21/lang/it.l 2003-06-03 12:21:48 +0900 +++ ircservices-5.0.22/lang/it.l 2003-08-31 23:31:36 +0900 @@ -1689,9 +1689,9 @@ # # Visualizza tutti i nick che corrispondono al campione # dato, nel formato nick!user@host. I nick con -# l'opzione PRIVATE attivata vengono visualizzati +# l'opzione PRIVATE attivata vengono visualizzati # solo agli amministratori dei servizi. I nick con l'opzione -# NOEXPIRE attivata verranno listati con un ! davanti. +# NOEXPIRE attivata verranno listati con un ! davanti. # # Se l'opzione FORBIDDEN o NOEXPIRE e' data, solo i nick # che rispettivamente sono vietati o non hanno scadenza diff -uNr ircservices-5.0.21/lang/ja_euc.l ircservices-5.0.22/lang/ja_euc.l --- ircservices-5.0.21/lang/ja_euc.l 2003-06-02 16:50:30 +0900 +++ ircservices-5.0.22/lang/ja_euc.l 2003-09-09 22:55:40 +0900 @@ -293,6 +293,25 @@ NICK_X_DROPPED_LINKS ¥Ë¥Ã¥¯¡Ö%s¡×µÚ¤ÓÁ´¤Æ¤Î¥ê¥ó¥¯¤µ¤ì¤¿¥Ë¥Ã¥¯¤ÎÅÐÏ¿¤ò²ò½ü¤·¤Þ¤·¤¿¡£ +# DROPEMAIL¡¢DROPEMAIL-CONFIRM±þÅú +NICK_DROPEMAIL_SYNTAX + DROPEMAIL ¥Ñ¥¿¡¼¥ó +NICK_DROPEMAIL_PATTERN_TOO_LONG + ¥Ñ¥¿¡¼¥ó¤¬Ä¹¤¹¤®¤Þ¤¹¡ÊºÇÂç%d¥Ð¥¤¥È¡Ë¡£ +NICK_DROPEMAIL_NONE + »ØÄꤵ¤ì¤¿¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ¹¤ë¥Ë¥Ã¥¯¤Ï¤¢¤ê¤Þ¤»¤ó¡£ +NICK_DROPEMAIL_COUNT + »ØÄꤵ¤ì¤¿¥Ñ¥¿¡¼¥ó¤Ë°ìÃפ¹¤ë¥Ë¥Ã¥¯¤¬%d¸Ä¤¢¤ê¤Þ¤¹¡£ + ºï½ü¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï¡¢¡Ö/msg %s DROPEMAIL-CONFIRM %s¡×¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£ +NICK_DROPEMAIL_CONFIRM_SYNTAX + DROPEMAIL-CONFIRM ¥Ñ¥¿¡¼¥ó +NICK_DROPEMAIL_CONFIRM_UNKNOWN + »ØÄꤵ¤ì¤¿¥Ñ¥¿¡¼¥ó¤Ïµ­²±¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£DROPEMAIL-CONFIRM¤ÎÁ°¤Ë¡¢ºÆÅÙ¡¢¤³¤Î¥Ñ¥¿¡¼¥ó¤ÇDROPEMAIL¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ +NICK_DROPEMAIL_CONFIRM_DROPPING + ¥Ë¥Ã¥¯¤ÎÅÐÏ¿²ò½ü¤ò³«»Ï¤·¤Þ¤¹¡£ +NICK_DROPEMAIL_CONFIRM_DROPPED + ¥Ë¥Ã¥¯¤ÎÅÐÏ¿²ò½ü¤¬´°Î»¤·¤Þ¤·¤¿¡£ + # SET±þÅú NICK_SET_SYNTAX SET ÀßÄê̾ ÃÍ @@ -2809,12 +2828,27 @@ ²Ã¤µ¤ì¤¿¥Á¥ã¥ó¥Í¥ë¤Ï¡¢¥Ë¥Ã¥¯Ç§¾Ú¤ò¹Ô¤¦»þ¤Ë¼«Æ°Åª¤Ë»²²Ã¤µ¤»¤é ¤ì¤Þ¤¹¡£¤¿¤À¤·ÄɲäǤ­¤ë¤Î¤Ï¡¢Ì¾Á°¤¬¡Ö#¡×¤Ç»Ï¤Þ¤ë¥Á¥ã¥ó¥Í¥ë ¤Î¤ß¤Ç¤¹¡Ê¥í¡¼¥«¥ë¥Á¥ã¥ó¥Í¥ë¤òÄɲäǤ­¤Þ¤»¤ó¡Ë¡£ + +NICK_HELP_AJOIN_END + ¤Þ¤¿¡¢IRC¥µ¡¼¥Ð¤Ë¤è¤Ã¤Æ¥Á¥ã¥ó¥Í¥ë»²²Ã¤òµñÈݤµ¤ì¤ë¤³¤È¤¬¤¢¤ê + ¤Þ¤¹¡Ê¥­¡¼¤òÀßÄꤵ¤ì¤¿¥Á¥ã¥ó¥Í¥ë¤ä¡¢¥¤¥ó¥Ð¥¤¥ÈÀìÍÑ¥Á¥ã¥ó¥Í¥ë + ¤Ê¤É¡Ë¡£ +NICK_HELP_AJOIN_END_CHANSERV + ¤Þ¤¿¡¢IRC¥µ¡¼¥Ð¤Ë¤è¤Ã¤Æ¥Á¥ã¥ó¥Í¥ë»²²Ã¤òµñÈݤµ¤ì¤ë¤³¤È¤¬¤¢¤ê + ¤Þ¤¹¡Ê¥­¡¼¤òÀßÄꤵ¤ì¤¿¥Á¥ã¥ó¥Í¥ë¤ä¡¢¥¤¥ó¥Ð¥¤¥ÈÀìÍÑ¥Á¥ã¥ó¥Í¥ë + ¤Ê¤É¡Ë¡£¤¿¤À¡¢¥¤¥ó¥Ð¥¤¥ÈÀìÍÑ¥Á¥ã¥ó¥Í¥ë¤Ç¡¢%s¤ËÅÐÏ¿¤µ¤ì¡¢ + ¤½¤Î¥Á¥ã¥ó¥Í¥ë¤ÇINVITE¥³¥Þ¥ó¥É¤ò»È¤¦¸¢Íø¤¬¤¢¤ë¾ì¹ç¤Ï¡¢ + %S¤¬¼«Æ°Åª¤Ë¥Á¥ã¥ó¥Í¥ë¤ËͶ¤¤¤Þ¤¹¡£ + NICK_OPER_HELP_COMMANDS Services¥¢¥É¥ß¥Ë¥¹¥È¥ì¡¼¥¿¤Ï¼¡¤Î¥³¥Þ¥ó¥É¤â»È¤¨¤Þ¤¹¡£ DROPNICK ¾¤Î¥Ë¥Ã¥¯¤ÎÅÐÏ¿¤ò²ò½ü¤¹¤ë +NICK_OPER_HELP_COMMANDS_DROPEMAIL + DROPEMAIL »ØÄꤵ¤ì¤¿¥á¡¼¥ë¥¢¥É¥ì¥¹¤ò»ý¤Ä¥Ë¥Ã¥¯¤ò¤¹¤Ù¤Æ + ¡¡¡¡ÅÐÏ¿²ò½ü¤¹¤ë NICK_OPER_HELP_COMMANDS_GETPASS GETPASS ¥Ë¥Ã¥¯¤Î¥Ñ¥¹¥ï¡¼¥É¤òɽ¼¨¤¹¤ë ¡¡¡¡¡Ê°Å¹æ²½¤¬»È¤ï¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Î¤ß¡Ë @@ -2842,6 +2876,26 @@ ¤³¤Î¥³¥Þ¥ó¥É¤Î»ÈÍѤÏServices¥¢¥É¥ß¥ó¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ +NICK_OPER_HELP_DROPEMAIL + ÍÑË¡¡§DROPEMAIL ¥Ñ¥¿¡¼¥ó + ¡¡¡¡¡¡DROPEMAIL-CONFIRM ¥Ñ¥¿¡¼¥ó + + »ØÄꤵ¤ì¤¿¥Ñ¥¿¡¼¥ó¤ËÅŻҥ᡼¥ë¥¢¥É¥ì¥¹¤¬°ìÃפ¹¤ëÁ´¤Æ¤Î¥Ë¥Ã¥¯ + ¤ÎÅÐÏ¿¤ò²ò½ü¤·¤Þ¤¹¡£¥Ñ¥¿¡¼¥ó¤¬¡Ö-¡×¡ÊȾ³Ñ¤Î¥Ï¥¤¥Õ¥ó¡Ë¤Ç¤¢¤ë + ¾ì¹ç¡¢¥á¡¼¥ë¥¢¥É¥ì¥¹¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¥Ë¥Ã¥¯¤ÎÅÐÏ¿¤ò²ò½ü¤·¤Þ + ¤¹¡£ + + ¸í¤Ã¤¿ÅÐÏ¿²ò½ü¤òËɻߤ¹¤ë¤¿¤á¡¢¤³¤Î¥³¥Þ¥ó¥É¤Ï£²Ãʳ¬¤Ç¼Â¹Ô¤·¤Þ + ¤¹¡£¤Þ¤º¤ÏDROPEMAIL¥³¥Þ¥ó¥É¤Ç¥Ñ¥¿¡¼¥ó¤ò»ØÄꤷ¡¢³ºÅö¤¹¤ë¥Ë¥Ã + ¥¯¤Î¿ô¤ò³Îǧ¤·¤Æ¤«¤é¡¢DROPEMAIL-CONFIRM¥³¥Þ¥ó¥É¤Ç¼ÂºÝ¤ËÅÐÏ¿ + ²ò½ü¤ò¹Ô¤¤¤Þ¤¹¡£DROPEMAIL-CONFIRM¤Ï¡¢DROPEMAIL¤Î¼Â¹Ô¤«¤é%s + °ÊÆâ¡¢¤«¤ÄƱ¤¸¥æ¡¼¥¶¤Ë¤è¤Ã¤Æ¼Â¹Ô¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¤Ê¤ª¡¢ + DROPEMAIL¥³¥Þ¥ó¥É¤¬£µ¤Ä°Ê¾åϢ³¤Ç¼õ¤±ÉÕ¤±¤¿¾ì¹ç¤Ï°ìÈָŤ¤¤â + ¤Î¤«¤éÁ÷¿®¼Ô¡¦³ºÅö¥Ë¥Ã¥¯¾ðÊ󤬾䨡¢»þ´ÖÆâ¤Ç¤â + DROPEMAIL-CONFIRM¥³¥Þ¥ó¥É¤¬»È¤¨¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£ + + ¤³¤Î¥³¥Þ¥ó¥É¤Î»ÈÍѤÏServices¥¢¥É¥ß¥ó¤ËÀ©¸Â¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ + NICK_OPER_HELP_SET Services¥¢¥É¥ß¥ó¤Ï¡¢¡ÖNOEXPIRE¡×¡ÊÅÐÏ¿¤Î¼«Æ°²ò½ü¤Î̵ͭ¡ËÀßÄê @@ -3282,6 +3336,9 @@ Ãí°Õ¡§¥­¡¼¡Ê+k¡Ë¤ò¥í¥Ã¥¯¤¹¤ë¾ì¹ç¡¢RESTRICTEDÀßÄê¤òÍ­¸ú¤Ë¤¹¤ë ¡¡¡¡¡¡¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£RESTRICTED¤òÍ­¸ú¤Ë¤·¤Ê¤¤¤È¡¢¥Á¥ã¥ó ¡¡¡¡¡¡¥Í¥ë̤»ÈÍÑ»þ¤Ë¥æ¡¼¥¶¤¬Æþ¤ë¤È¡¢¥­¡¼¤¬¸«¤¨¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ + ¡¡¡¡¡¡¥¤¥ó¥Ð¥¤¥ÈÀìÍÑ¡Ê+i¡Ë¤â¡¢ºÇ½é¤Ë»²²Ã¤¹¤ë¥æ¡¼¥¶¤ËÂФ·¤Æ¤Ï + ¡¡¡¡¡¡¸ú²Ì¤òȯ´ø¤·¤Þ¤»¤ó¤Î¤Ç¡¢Æ±ÍͤËRESTRICTED¤Î»ÈÍѤò¿ä¾©¤· + ¡¡¡¡¡¡¤Þ¤¹¡£ Î㡧 SET #channel MLOCK +nt-iklps diff -uNr ircservices-5.0.21/lang/ja_sjis.l ircservices-5.0.22/lang/ja_sjis.l --- ircservices-5.0.21/lang/ja_sjis.l 2003-06-02 16:56:14 +0900 +++ ircservices-5.0.22/lang/ja_sjis.l 2003-09-09 23:06:06 +0900 @@ -293,6 +293,25 @@ NICK_X_DROPPED_LINKS ƒjƒbƒNu%sv‹y‚Ñ‘S‚ẴŠƒ“ƒN‚³‚ꂽƒjƒbƒN‚Ì“o˜^‚ð‰ðœ‚µ‚Ü‚µ‚½B +# DROPEMAILADROPEMAIL-CONFIRM‰ž“š +NICK_DROPEMAIL_SYNTAX + DROPEMAIL ƒpƒ^[ƒ“ +NICK_DROPEMAIL_PATTERN_TOO_LONG + ƒpƒ^[ƒ“‚ª’·‚·‚¬‚Ü‚·iÅ‘å%dƒoƒCƒgjB +NICK_DROPEMAIL_NONE + Žw’肳‚ꂽƒpƒ^[ƒ“‚Ɉê’v‚·‚éƒjƒbƒN‚Í‚ ‚è‚Ü‚¹‚ñB +NICK_DROPEMAIL_COUNT + Žw’肳‚ꂽƒpƒ^[ƒ“‚Ɉê’v‚·‚éƒjƒbƒN‚ª%dŒÂ‚ ‚è‚Ü‚·B + 휂ðŽÀs‚·‚é‚É‚ÍAu/msg %s DROPEMAIL-CONFIRM %sv‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B +NICK_DROPEMAIL_CONFIRM_SYNTAX + DROPEMAIL-CONFIRM ƒpƒ^[ƒ“ +NICK_DROPEMAIL_CONFIRM_UNKNOWN + Žw’肳‚ꂽƒpƒ^[ƒ“‚Í‹L‰¯‚³‚ê‚Ä‚¢‚Ü‚¹‚ñBDROPEMAIL-CONFIRM‚Ì‘O‚ÉAÄ“xA‚±‚̃pƒ^[ƒ“‚ÅDROPEMAIL‚ðŽÀs‚µ‚Ä‚­‚¾‚³‚¢B +NICK_DROPEMAIL_CONFIRM_DROPPING + ƒjƒbƒN‚Ì“o˜^‰ðœ‚ðŠJŽn‚µ‚Ü‚·B +NICK_DROPEMAIL_CONFIRM_DROPPED + ƒjƒbƒN‚Ì“o˜^‰ðœ‚ªŠ®—¹‚µ‚Ü‚µ‚½B + # SET‰ž“š NICK_SET_SYNTAX SET Ý’è–¼ ’l @@ -2809,12 +2828,27 @@ ‰Á‚³‚ꂽƒ`ƒƒƒ“ƒlƒ‹‚ÍAƒjƒbƒN”FØ‚ðs‚¤Žž‚ÉŽ©“®“I‚ÉŽQ‰Á‚³‚¹‚ç ‚ê‚Ü‚·B‚½‚¾‚µ’ljÁ‚Å‚«‚é‚Ì‚ÍA–¼‘O‚ªu#v‚ÅŽn‚Ü‚éƒ`ƒƒƒ“ƒlƒ‹ ‚Ì‚Ý‚Å‚·iƒ[ƒJƒ‹ƒ`ƒƒƒ“ƒlƒ‹‚ð’ljÁ‚Å‚«‚Ü‚¹‚ñjB + +NICK_HELP_AJOIN_END + ‚Ü‚½AIRCƒT[ƒo‚É‚æ‚Á‚ă`ƒƒƒ“ƒlƒ‹ŽQ‰Á‚ð‹‘”Û‚³‚ê‚邱‚Æ‚ª‚ ‚è + ‚Ü‚·iƒL[‚ðݒ肳‚ꂽƒ`ƒƒƒ“ƒlƒ‹‚âAƒCƒ“ƒoƒCƒgê—pƒ`ƒƒƒ“ƒlƒ‹ + ‚È‚ÇjB +NICK_HELP_AJOIN_END_CHANSERV + ‚Ü‚½AIRCƒT[ƒo‚É‚æ‚Á‚ă`ƒƒƒ“ƒlƒ‹ŽQ‰Á‚ð‹‘”Û‚³‚ê‚邱‚Æ‚ª‚ ‚è + ‚Ü‚·iƒL[‚ðݒ肳‚ꂽƒ`ƒƒƒ“ƒlƒ‹‚âAƒCƒ“ƒoƒCƒgê—pƒ`ƒƒƒ“ƒlƒ‹ + ‚È‚ÇjB‚½‚¾AƒCƒ“ƒoƒCƒgê—pƒ`ƒƒƒ“ƒlƒ‹‚ÅA%s‚É“o˜^‚³‚êA + ‚»‚̃`ƒƒƒ“ƒlƒ‹‚ÅINVITEƒRƒ}ƒ“ƒh‚ðŽg‚¤Œ —˜‚ª‚ ‚éꇂÍA + %S‚ªŽ©“®“I‚Ƀ`ƒƒƒ“ƒlƒ‹‚É—U‚¢‚Ü‚·B + NICK_OPER_HELP_COMMANDS ServicesƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^‚ÍŽŸ‚̃Rƒ}ƒ“ƒh‚àŽg‚¦‚Ü‚·B DROPNICK ‘¼‚̃jƒbƒN‚Ì“o˜^‚ð‰ðœ‚·‚é +NICK_OPER_HELP_COMMANDS_DROPEMAIL + DROPEMAIL Žw’肳‚ꂽƒ[ƒ‹ƒAƒhƒŒƒX‚ðŽ‚ƒjƒbƒN‚ð‚·‚×‚Ä + @@“o˜^‰ðœ‚·‚é NICK_OPER_HELP_COMMANDS_GETPASS GETPASS ƒjƒbƒN‚̃pƒXƒ[ƒh‚ð•\Ž¦‚·‚é @@iˆÃ†‰»‚ªŽg‚í‚ê‚Ä‚¢‚È‚¢ê‡‚Ì‚Ýj @@ -2842,6 +2876,26 @@ ‚±‚̃Rƒ}ƒ“ƒh‚ÌŽg—p‚ÍServicesƒAƒhƒ~ƒ“‚ɧŒÀ‚³‚ê‚Ä‚¢‚Ü‚·B +NICK_OPER_HELP_DROPEMAIL + —p–@FDROPEMAIL ƒpƒ^[ƒ“ + @@@DROPEMAIL-CONFIRM ƒpƒ^[ƒ“ + + Žw’肳‚ꂽƒpƒ^[ƒ“‚É“dŽqƒ[ƒ‹ƒAƒhƒŒƒX‚ªˆê’v‚·‚é‘S‚ẴjƒbƒN + ‚Ì“o˜^‚ð‰ðœ‚µ‚Ü‚·Bƒpƒ^[ƒ“‚ªu-vi”¼Šp‚̃nƒCƒtƒ“j‚Å‚ ‚é + ê‡Aƒ[ƒ‹ƒAƒhƒŒƒX‚ªÝ’肳‚ê‚Ä‚¢‚È‚¢ƒjƒbƒN‚Ì“o˜^‚ð‰ðœ‚µ‚Ü + ‚·B + + Œë‚Á‚½“o˜^‰ðœ‚ð–hŽ~‚·‚邽‚ßA‚±‚̃Rƒ}ƒ“ƒh‚Í‚Q’iŠK‚ÅŽÀs‚µ‚Ü + ‚·B‚Ü‚¸‚ÍDROPEMAILƒRƒ}ƒ“ƒh‚Ńpƒ^[ƒ“‚ðŽw’肵AŠY“–‚·‚éƒjƒb + ƒN‚Ì”‚ðŠm”F‚µ‚Ä‚©‚çADROPEMAIL-CONFIRMƒRƒ}ƒ“ƒh‚ÅŽÀÛ‚É“o˜^ + ‰ðœ‚ðs‚¢‚Ü‚·BDROPEMAIL-CONFIRM‚ÍADROPEMAIL‚ÌŽÀs‚©‚ç%s + ˆÈ“àA‚©‚“¯‚¶ƒ†[ƒU‚É‚æ‚Á‚ÄŽÀs‚³‚ê‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB‚È‚¨A + DROPEMAILƒRƒ}ƒ“ƒh‚ª‚T‚ˆÈã˜A‘±‚Ŏ󂯕t‚¯‚½ê‡‚͈ê”Ԍ¢‚à + ‚Ì‚©‚ç‘—MŽÒEŠY“–ƒjƒbƒNî•ñ‚ªÁ‚¦AŽžŠÔ“à‚Å‚à + DROPEMAIL-CONFIRMƒRƒ}ƒ“ƒh‚ªŽg‚¦‚È‚­‚È‚è‚Ü‚·B + + ‚±‚̃Rƒ}ƒ“ƒh‚ÌŽg—p‚ÍServicesƒAƒhƒ~ƒ“‚ɧŒÀ‚³‚ê‚Ä‚¢‚Ü‚·B + NICK_OPER_HELP_SET ServicesƒAƒhƒ~ƒ“‚ÍAuNOEXPIREvi“o˜^‚ÌŽ©“®‰ðœ‚Ì—L–³jÝ’è @@ -3282,6 +3336,9 @@ ’ˆÓFƒL[i+kj‚ðƒƒbƒN‚·‚éê‡ARESTRICTEDÝ’è‚ð—LŒø‚É‚·‚é @@@‚±‚Æ‚ð‚¨Š©‚ß‚µ‚Ü‚·BRESTRICTED‚ð—LŒø‚É‚µ‚È‚¢‚ÆAƒ`ƒƒƒ“ @@@ƒlƒ‹–¢Žg—pŽž‚Ƀ†[ƒU‚ª“ü‚é‚ÆAƒL[‚ªŒ©‚¦‚Ä‚µ‚Ü‚¢‚Ü‚·B + @@@ƒCƒ“ƒoƒCƒgê—pi+ij‚àAʼn‚ÉŽQ‰Á‚·‚郆[ƒU‚ɑ΂µ‚Ä‚Í + @@@Œø‰Ê‚ð”­Šö‚µ‚Ü‚¹‚ñ‚Ì‚ÅA“¯—l‚ÉRESTRICTED‚ÌŽg—p‚ð„§‚µ + @@@‚Ü‚·B —áF SET #channel MLOCK +nt-iklps diff -uNr ircservices-5.0.21/lang/langstrs.h ircservices-5.0.22/lang/langstrs.h --- ircservices-5.0.21/lang/langstrs.h 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/lang/langstrs.h 2003-09-16 04:17:48 +0900 @@ -95,1093 +95,1105 @@ #define NICK_DROPNICK_SYNTAX 94 #define NICK_X_DROPPED 95 #define NICK_X_DROPPED_LINKS 96 -#define NICK_SET_SYNTAX 97 -#define NICK_SET_OPER_SYNTAX 98 -#define NICK_SET_DISABLED 99 -#define NICK_SET_UNKNOWN_OPTION 100 -#define NICK_SET_UNKNOWN_OPTION_OR_BAD_NICK 101 -#define NICK_SET_PASSWORD_FAILED 102 -#define NICK_SET_PASSWORD_CHANGED 103 -#define NICK_SET_PASSWORD_CHANGED_TO 104 -#define NICK_SET_LANGUAGE_SYNTAX 105 -#define NICK_SET_LANGUAGE_UNKNOWN 106 -#define NICK_SET_LANGUAGE_CHANGED 107 -#define NICK_SET_URL_CHANGED 108 -#define NICK_SET_EMAIL_UNAUTHED 109 -#define NICK_SET_EMAIL_TOO_MANY_NICKS 110 -#define NICK_SET_EMAIL_CHANGED 111 -#define NICK_SET_INFO_CHANGED 112 -#define NICK_SET_KILL_SYNTAX 113 -#define NICK_SET_KILL_IMMED_SYNTAX 114 -#define NICK_SET_KILL_ON 115 -#define NICK_SET_KILL_QUICK 116 -#define NICK_SET_KILL_IMMED 117 -#define NICK_SET_KILL_IMMED_DISABLED 118 -#define NICK_SET_KILL_OFF 119 -#define NICK_SET_SECURE_SYNTAX 120 -#define NICK_SET_SECURE_ON 121 -#define NICK_SET_SECURE_OFF 122 -#define NICK_SET_PRIVATE_SYNTAX 123 -#define NICK_SET_PRIVATE_ON 124 -#define NICK_SET_PRIVATE_OFF 125 -#define NICK_SET_HIDE_SYNTAX 126 -#define NICK_SET_HIDE_EMAIL_ON 127 -#define NICK_SET_HIDE_EMAIL_OFF 128 -#define NICK_SET_HIDE_MASK_ON 129 -#define NICK_SET_HIDE_MASK_OFF 130 -#define NICK_SET_HIDE_QUIT_ON 131 -#define NICK_SET_HIDE_QUIT_OFF 132 -#define NICK_SET_TIMEZONE_SYNTAX 133 -#define NICK_SET_TIMEZONE_TO 134 -#define NICK_SET_TIMEZONE_DEFAULT 135 -#define NICK_SET_MAINNICK_NOT_FOUND 136 -#define NICK_SET_MAINNICK_CHANGED 137 -#define NICK_SET_NOEXPIRE_SYNTAX 138 -#define NICK_SET_NOEXPIRE_ON 139 -#define NICK_SET_NOEXPIRE_OFF 140 -#define NICK_UNSET_SYNTAX 141 -#define NICK_UNSET_SYNTAX_REQ_EMAIL 142 -#define NICK_UNSET_URL 143 -#define NICK_UNSET_EMAIL 144 -#define NICK_UNSET_INFO 145 -#define NICK_UNSET_EMAIL_BAD 146 -#define NICK_UNSET_EMAIL_OTHER_BAD 147 -#define NICK_ACCESS_SYNTAX 148 -#define NICK_ACCESS_ALREADY_PRESENT 149 -#define NICK_ACCESS_REACHED_LIMIT 150 -#define NICK_ACCESS_NO_NICKS 151 -#define NICK_ACCESS_ADDED 152 -#define NICK_ACCESS_NOT_FOUND 153 -#define NICK_ACCESS_DELETED 154 -#define NICK_ACCESS_LIST_EMPTY 155 -#define NICK_ACCESS_LIST 156 -#define NICK_ACCESS_LIST_X_EMPTY 157 -#define NICK_ACCESS_LIST_X 158 -#define NICK_OLD_LINK_SYNTAX 159 -#define NICK_LINK_SYNTAX 160 -#define NICK_LINK_DISABLED 161 -#define NICK_LINK_FAILED 162 -#define NICK_CANNOT_BE_LINKED 163 -#define NICK_OLD_LINK_SAME 164 -#define NICK_LINK_SAME 165 -#define NICK_LINK_ALREADY_LINKED 166 -#define NICK_LINK_IN_USE 167 -#define NICK_LINK_TOO_MANY 168 -#define NICK_LINK_TOO_MANY_NICKS 169 -#define NICK_OLD_LINK_TOO_MANY_CHANNELS 170 -#define NICK_OLD_LINKED 171 -#define NICK_LINKED 172 -#define NICK_OLD_UNLINK_SYNTAX 173 -#define NICK_UNLINK_SYNTAX 174 -#define NICK_UNLINK_OPER_SYNTAX 175 -#define NICK_UNLINK_DISABLED 176 -#define NICK_UNLINK_FAILED 177 -#define NICK_UNLINK_SAME 178 -#define NICK_OLD_UNLINK_NOT_LINKED 179 -#define NICK_UNLINK_NOT_LINKED_YOURS 180 -#define NICK_UNLINK_NOT_LINKED 181 -#define NICK_OLD_UNLINKED 182 -#define NICK_UNLINKED 183 -#define NICK_X_UNLINKED 184 -#define NICK_OLD_LISTLINKS_SYNTAX 185 -#define NICK_LISTLINKS_SYNTAX 186 -#define NICK_LISTLINKS_HEADER 187 -#define NICK_LISTLINKS_FOOTER 188 -#define NICK_INFO_SYNTAX 189 -#define NICK_INFO_REALNAME 190 -#define NICK_INFO_ADDRESS 191 -#define NICK_INFO_ADDRESS_ONLINE 192 -#define NICK_INFO_ADDRESS_ONLINE_NOHOST 193 -#define NICK_INFO_TIME_REGGED 194 -#define NICK_INFO_LAST_SEEN 195 -#define NICK_INFO_LAST_QUIT 196 -#define NICK_INFO_URL 197 -#define NICK_INFO_EMAIL 198 -#define NICK_INFO_EMAIL_UNAUTHED 199 -#define NICK_INFO_INFO 200 -#define NICK_INFO_OPTIONS 201 -#define NICK_INFO_OPT_KILL 202 -#define NICK_INFO_OPT_SECURE 203 -#define NICK_INFO_OPT_PRIVATE 204 -#define NICK_INFO_OPT_NONE 205 -#define NICK_INFO_NO_EXPIRE 206 -#define NICK_INFO_SUSPEND_DETAILS 207 -#define NICK_INFO_SUSPEND_REASON 208 -#define NICK_INFO_SHOW_ALL 209 -#define NICK_LISTCHANS_SYNTAX 210 -#define NICK_LISTCHANS_NONE 211 -#define NICK_LISTCHANS_HEADER 212 -#define NICK_LISTCHANS_END 213 -#define NICK_LIST_SYNTAX 214 -#define NICK_LIST_OPER_SYNTAX 215 -#define NICK_LIST_OPER_SYNTAX_AUTH 216 -#define NICK_LIST_HEADER 217 -#define NICK_LIST_RESULTS 218 -#define NICK_LISTEMAIL_NONE 219 -#define NICK_RECOVER_SYNTAX 220 -#define NICK_NO_RECOVER_SELF 221 -#define NICK_RECOVERED 222 -#define NICK_RELEASE_SYNTAX 223 -#define NICK_RELEASE_NOT_HELD 224 -#define NICK_RELEASED 225 -#define NICK_GHOST_SYNTAX 226 -#define NICK_NO_GHOST_SELF 227 -#define NICK_GHOST_KILLED 228 -#define NICK_GETPASS_SYNTAX 229 -#define NICK_GETPASS_UNAVAILABLE 230 -#define NICK_GETPASS_PASSWORD_IS 231 -#define NICK_FORBID_SYNTAX 232 -#define NICK_FORBID_SUCCEEDED 233 -#define NICK_FORBID_FAILED 234 -#define NICK_SUSPEND_SYNTAX 235 -#define NICK_SUSPEND_SUCCEEDED 236 -#define NICK_SUSPEND_ALREADY_SUSPENDED 237 -#define NICK_UNSUSPEND_SYNTAX 238 -#define NICK_UNSUSPEND_SUCCEEDED 239 -#define NICK_UNSUSPEND_NOT_SUSPENDED 240 -#define NICK_AJOIN_SYNTAX 241 -#define NICK_AJOIN_ADD_SYNTAX 242 -#define NICK_AJOIN_DEL_SYNTAX 243 -#define NICK_AJOIN_ALREADY_PRESENT 244 -#define NICK_AJOIN_LIST_FULL 245 -#define NICK_AJOIN_ADDED 246 -#define NICK_AJOIN_NOT_FOUND 247 -#define NICK_AJOIN_DELETED 248 -#define NICK_AJOIN_LIST_EMPTY 249 -#define NICK_AJOIN_LIST 250 -#define NICK_AJOIN_LIST_X_EMPTY 251 -#define NICK_AJOIN_LIST_X 252 -#define NICK_AUTH_SENT 253 -#define NICK_AUTH_FOR_REGISTER 254 -#define NICK_AUTH_FOR_SET_EMAIL 255 -#define NICK_AUTH_NOT_NEEDED 256 -#define NICK_AUTH_NO_AUTHCODE 257 -#define NICK_AUTH_HAS_AUTHCODE 258 -#define PASSWORD_WARNING_FOR_AUTH 259 -#define NICK_AUTH_MAIL_SUBJECT 260 -#define NICK_AUTH_MAIL_BODY 261 -#define NICK_AUTH_MAIL_TEXT_REG 262 -#define NICK_AUTH_MAIL_TEXT_EMAIL 263 -#define NICK_AUTH_MAIL_TEXT_SENDAUTH 264 -#define NICK_AUTH_MAIL_BODY_SETAUTH 265 -#define NICK_AUTH_SYNTAX 266 -#define NICK_AUTH_DISABLED 267 -#define NICK_AUTH_FAILED 268 -#define NICK_AUTH_SUCCEEDED_REGISTER 269 -#define NICK_AUTH_SUCCEEDED_SET_EMAIL 270 -#define NICK_AUTH_SUCCEEDED_SETAUTH 271 -#define NICK_SENDAUTH_SYNTAX 272 -#define NICK_SENDAUTH_TOO_SOON 273 -#define NICK_SENDAUTH_FAILED 274 -#define NICK_SETAUTH_SYNTAX 275 -#define NICK_SETAUTH_NO_EMAIL 276 -#define NICK_SETAUTH_AUTHCODE_SET 277 -#define NICK_SETAUTH_SEND_FAILED 278 -#define NICK_SETAUTH_SEND_TEMPFAIL 279 -#define NICK_SETAUTH_USER_NOTICE 280 -#define NICK_GETAUTH_SYNTAX 281 -#define NICK_GETAUTH_AUTHCODE_IS 282 -#define NICK_CLEARAUTH_SYNTAX 283 -#define NICK_CLEARAUTH_CLEARED 284 -#define NICK_SENDPASS_MAIL_SUBJECT 285 -#define NICK_SENDPASS_MAIL_BODY 286 -#define NICK_SENDPASS_SYNTAX 287 -#define NICK_SENDPASS_FAILED 288 -#define NICK_SENDPASS_NO_EMAIL 289 -#define NICK_SENDPASS_NOT_AUTHED 290 -#define NICK_SENDPASS_TOO_SOON 291 -#define NICK_SENDPASS_SENT 292 -#define CHAN_LEVEL_AUTOOP 293 -#define CHAN_LEVEL_AUTOVOICE 294 -#define CHAN_LEVEL_INVITE 295 -#define CHAN_LEVEL_AKICK 296 -#define CHAN_LEVEL_SET 297 -#define CHAN_LEVEL_CLEAR 298 -#define CHAN_LEVEL_UNBAN 299 -#define CHAN_LEVEL_OPDEOP 300 -#define CHAN_LEVEL_ACCESS_LIST 301 -#define CHAN_LEVEL_ACCESS_CHANGE 302 -#define CHAN_LEVEL_MEMO 303 -#define CHAN_LEVEL_VOICE 304 -#define CHAN_LEVEL_AUTOHALFOP 305 -#define CHAN_LEVEL_HALFOP 306 -#define CHAN_LEVEL_AUTOPROTECT 307 -#define CHAN_LEVEL_PROTECT 308 -#define CHAN_LEVEL_KICK 309 -#define CHAN_LEVEL_STATUS 310 -#define CHAN_LEVEL_TOPIC 311 -#define CHAN_IS_REGISTERED 312 -#define CHAN_MAY_NOT_BE_USED 313 -#define CHAN_NOT_ALLOWED_TO_JOIN 314 -#define CHAN_MUST_IDENTIFY_NICK 315 -#define CHAN_BOUNCY_MODES 316 -#define CHAN_REGISTER_SYNTAX 317 -#define CHAN_REGISTER_DISABLED 318 -#define CHAN_REGISTER_SHORT_CHANNEL 319 -#define CHAN_REGISTER_NOT_LOCAL 320 -#define CHAN_REGISTER_INVALID_NAME 321 -#define CHAN_MUST_REGISTER_NICK 322 -#define CHAN_MAY_NOT_BE_REGISTERED 323 -#define CHAN_ALREADY_REGISTERED 324 -#define CHAN_MUST_BE_CHANOP 325 -#define CHAN_REACHED_CHANNEL_LIMIT 326 -#define CHAN_EXCEEDED_CHANNEL_LIMIT 327 -#define CHAN_REGISTRATION_FAILED 328 -#define CHAN_REGISTERED 329 -#define CHAN_PASSWORD_IS 330 -#define CHAN_IDENTIFY_SYNTAX 331 -#define CHAN_IDENTIFY_FAILED 332 -#define CHAN_IDENTIFY_SUCCEEDED 333 -#define CHAN_DROP_SYNTAX 334 -#define CHAN_DROP_DISABLED 335 -#define CHAN_DROPPED 336 -#define CHAN_SET_SYNTAX 337 -#define CHAN_SET_DISABLED 338 -#define CHAN_SET_UNKNOWN_OPTION 339 -#define CHAN_SET_FOUNDER_TOO_MANY_CHANS 340 -#define CHAN_FOUNDER_CHANGED 341 -#define CHAN_SUCCESSOR_CHANGED 342 -#define CHAN_SUCCESSOR_IS_FOUNDER 343 -#define CHAN_SET_PASSWORD_FAILED 344 -#define CHAN_PASSWORD_CHANGED 345 -#define CHAN_PASSWORD_CHANGED_TO 346 -#define CHAN_DESC_CHANGED 347 -#define CHAN_URL_CHANGED 348 -#define CHAN_EMAIL_CHANGED 349 -#define CHAN_ENTRY_MSG_CHANGED 350 -#define CHAN_SET_MLOCK_NEED_PLUS_MINUS 351 -#define CHAN_SET_MLOCK_NEED_PARAM 352 -#define CHAN_SET_MLOCK_LIMIT_POSITIVE 353 -#define CHAN_SET_MLOCK_MODE_REG_BAD 354 -#define CHAN_SET_MLOCK_LINK_BAD 355 -#define CHAN_SET_MLOCK_LINK_SAME 356 -#define CHAN_SET_MLOCK_LINK_NO_LIMIT 357 -#define CHAN_SET_MLOCK_FLOOD_BAD 358 -#define CHAN_SET_MLOCK_UNKNOWN_CHAR 359 -#define CHAN_SET_MLOCK_CANNOT_LOCK 360 -#define CHAN_MLOCK_CHANGED 361 -#define CHAN_MLOCK_REMOVED 362 -#define CHAN_SET_HIDE_SYNTAX 363 -#define CHAN_SET_HIDE_EMAIL_ON 364 -#define CHAN_SET_HIDE_EMAIL_OFF 365 -#define CHAN_SET_HIDE_TOPIC_ON 366 -#define CHAN_SET_HIDE_TOPIC_OFF 367 -#define CHAN_SET_HIDE_MLOCK_ON 368 -#define CHAN_SET_HIDE_MLOCK_OFF 369 -#define CHAN_SET_KEEPTOPIC_SYNTAX 370 -#define CHAN_SET_KEEPTOPIC_ON 371 -#define CHAN_SET_KEEPTOPIC_OFF 372 -#define CHAN_SET_TOPICLOCK_SYNTAX 373 -#define CHAN_SET_TOPICLOCK_ON 374 -#define CHAN_SET_TOPICLOCK_OFF 375 -#define CHAN_SET_PRIVATE_SYNTAX 376 -#define CHAN_SET_PRIVATE_ON 377 -#define CHAN_SET_PRIVATE_OFF 378 -#define CHAN_SET_SECUREOPS_SYNTAX 379 -#define CHAN_SET_SECUREOPS_ON 380 -#define CHAN_SET_SECUREOPS_OFF 381 -#define CHAN_SET_LEAVEOPS_SYNTAX 382 -#define CHAN_SET_LEAVEOPS_ON 383 -#define CHAN_SET_LEAVEOPS_OFF 384 -#define CHAN_SET_RESTRICTED_SYNTAX 385 -#define CHAN_SET_RESTRICTED_ON 386 -#define CHAN_SET_RESTRICTED_OFF 387 -#define CHAN_SET_SECURE_SYNTAX 388 -#define CHAN_SET_SECURE_ON 389 -#define CHAN_SET_SECURE_OFF 390 -#define CHAN_SET_OPNOTICE_SYNTAX 391 -#define CHAN_SET_OPNOTICE_ON 392 -#define CHAN_SET_OPNOTICE_OFF 393 -#define CHAN_SET_ENFORCE_SYNTAX 394 -#define CHAN_SET_ENFORCE_ON 395 -#define CHAN_SET_ENFORCE_OFF 396 -#define CHAN_SET_NOEXPIRE_SYNTAX 397 -#define CHAN_SET_NOEXPIRE_ON 398 -#define CHAN_SET_NOEXPIRE_OFF 399 -#define CHAN_UNSET_SYNTAX 400 -#define CHAN_SUCCESSOR_UNSET 401 -#define CHAN_URL_UNSET 402 -#define CHAN_EMAIL_UNSET 403 -#define CHAN_ENTRY_MSG_UNSET 404 -#define CHAN_ACCESS_SYNTAX 405 -#define CHAN_ACCESS_DISABLED 406 -#define CHAN_ACCESS_LEVEL_NONZERO 407 -#define CHAN_ACCESS_LEVEL_RANGE 408 -#define CHAN_ACCESS_NICKS_ONLY 409 -#define CHAN_ACCESS_REACHED_LIMIT 410 -#define CHAN_ACCESS_LEVEL_UNCHANGED 411 -#define CHAN_ACCESS_LEVEL_CHANGED 412 -#define CHAN_ACCESS_ADDED 413 -#define CHAN_ACCESS_NO_SUCH_ENTRY 414 -#define CHAN_ACCESS_NOT_FOUND 415 -#define CHAN_ACCESS_NO_MATCH 416 -#define CHAN_ACCESS_DELETED 417 -#define CHAN_ACCESS_DELETED_ONE 418 -#define CHAN_ACCESS_DELETED_SEVERAL 419 -#define CHAN_ACCESS_LIST_EMPTY 420 -#define CHAN_ACCESS_LIST_HEADER 421 -#define CHAN_ACCESS_LIST_FORMAT 422 -#define CHAN_ACCESS_COUNT 423 -#define CHAN_SOP_SYNTAX 424 -#define CHAN_AOP_SYNTAX 425 -#define CHAN_HOP_SYNTAX 426 -#define CHAN_VOP_SYNTAX 427 -#define CHAN_XOP_ADDED 428 -#define CHAN_XOP_LEVEL_CHANGED 429 -#define CHAN_XOP_LEVEL_UNCHANGED 430 -#define CHAN_XOP_NICKS_ONLY 431 -#define CHAN_XOP_NICKS_ONLY_HOP 432 -#define CHAN_XOP_REACHED_LIMIT 433 -#define CHAN_XOP_REACHED_LIMIT_HOP 434 -#define CHAN_XOP_NOT_FOUND 435 -#define CHAN_XOP_NO_SUCH_ENTRY 436 -#define CHAN_XOP_NO_MATCH 437 -#define CHAN_XOP_DELETED 438 -#define CHAN_XOP_DELETED_ONE 439 -#define CHAN_XOP_DELETED_SEVERAL 440 -#define CHAN_XOP_LIST_EMPTY 441 -#define CHAN_XOP_LIST_HEADER 442 -#define CHAN_XOP_LIST_FORMAT 443 -#define CHAN_XOP_COUNT 444 -#define CHAN_AKICK_SYNTAX 445 -#define CHAN_AKICK_DISABLED 446 -#define CHAN_AKICK_ALREADY_EXISTS 447 -#define CHAN_AKICK_REACHED_LIMIT 448 -#define CHAN_AKICK_ADDED 449 -#define CHAN_AKICK_NO_SUCH_ENTRY 450 -#define CHAN_AKICK_NOT_FOUND 451 -#define CHAN_AKICK_NO_MATCH 452 -#define CHAN_AKICK_DELETED 453 -#define CHAN_AKICK_DELETED_ONE 454 -#define CHAN_AKICK_DELETED_SEVERAL 455 -#define CHAN_AKICK_LIST_EMPTY 456 -#define CHAN_AKICK_LIST_HEADER 457 -#define CHAN_AKICK_VIEW_FORMAT 458 -#define CHAN_AKICK_VIEW_UNUSED_FORMAT 459 -#define CHAN_AKICK_ENFORCE_DONE 460 -#define CHAN_AKICK_COUNT 461 -#define CHAN_LEVELS_SYNTAX 462 -#define CHAN_LEVELS_RANGE 463 -#define CHAN_LEVELS_CHANGED 464 -#define CHAN_LEVELS_UNKNOWN 465 -#define CHAN_LEVELS_DISABLED 466 -#define CHAN_LEVELS_LIST_HEADER 467 -#define CHAN_LEVELS_LIST_DISABLED 468 -#define CHAN_LEVELS_LIST_FOUNDER 469 -#define CHAN_LEVELS_LIST_NORMAL 470 -#define CHAN_LEVELS_RESET 471 -#define CHAN_INFO_SYNTAX 472 -#define CHAN_INFO_HEADER 473 -#define CHAN_INFO_FOUNDER 474 -#define CHAN_INFO_SUCCESSOR 475 -#define CHAN_INFO_DESCRIPTION 476 -#define CHAN_INFO_ENTRYMSG 477 -#define CHAN_INFO_TIME_REGGED 478 -#define CHAN_INFO_LAST_USED 479 -#define CHAN_INFO_LAST_TOPIC 480 -#define CHAN_INFO_TOPIC_SET_BY 481 -#define CHAN_INFO_URL 482 -#define CHAN_INFO_EMAIL 483 -#define CHAN_INFO_OPTIONS 484 -#define CHAN_INFO_OPT_PRIVATE 485 -#define CHAN_INFO_OPT_KEEPTOPIC 486 -#define CHAN_INFO_OPT_TOPICLOCK 487 -#define CHAN_INFO_OPT_SECUREOPS 488 -#define CHAN_INFO_OPT_LEAVEOPS 489 -#define CHAN_INFO_OPT_RESTRICTED 490 -#define CHAN_INFO_OPT_SECURE 491 -#define CHAN_INFO_OPT_OPNOTICE 492 -#define CHAN_INFO_OPT_ENFORCE 493 -#define CHAN_INFO_OPT_NONE 494 -#define CHAN_INFO_MODE_LOCK 495 -#define CHAN_INFO_NO_EXPIRE 496 -#define CHAN_INFO_SUSPEND_DETAILS 497 -#define CHAN_INFO_SUSPEND_REASON 498 -#define CHAN_INFO_SHOW_ALL 499 -#define CHAN_LIST_SYNTAX 500 -#define CHAN_LIST_OPER_SYNTAX 501 -#define CHAN_LIST_HEADER 502 -#define CHAN_LIST_END 503 -#define CHAN_INVITE_SYNTAX 504 -#define CHAN_INVITE_OK 505 -#define CHAN_OPVOICE_SYNTAX 506 -#define CHAN_OP_SUCCEEDED 507 -#define CHAN_OP_ALREADY 508 -#define CHAN_OP_FAILED 509 -#define CHAN_DEOP_SUCCEEDED 510 -#define CHAN_DEOP_ALREADY 511 -#define CHAN_DEOP_FAILED 512 -#define CHAN_VOICE_SUCCEEDED 513 -#define CHAN_VOICE_ALREADY 514 -#define CHAN_VOICE_FAILED 515 -#define CHAN_DEVOICE_SUCCEEDED 516 -#define CHAN_DEVOICE_ALREADY 517 -#define CHAN_DEVOICE_FAILED 518 -#define CHAN_HALFOP_SUCCEEDED 519 -#define CHAN_HALFOP_ALREADY 520 -#define CHAN_HALFOP_FAILED 521 -#define CHAN_DEHALFOP_SUCCEEDED 522 -#define CHAN_DEHALFOP_ALREADY 523 -#define CHAN_DEHALFOP_FAILED 524 -#define CHAN_PROTECT_SUCCEEDED 525 -#define CHAN_PROTECT_ALREADY 526 -#define CHAN_PROTECT_FAILED 527 -#define CHAN_DEPROTECT_SUCCEEDED 528 -#define CHAN_DEPROTECT_ALREADY 529 -#define CHAN_DEPROTECT_FAILED 530 -#define CHAN_UNBAN_SYNTAX 531 -#define CHAN_UNBANNED 532 -#define CHAN_KICK_SYNTAX 533 -#define CHAN_KICK_PROTECTED 534 -#define CHAN_KICKED 535 -#define CHAN_TOPIC_SYNTAX 536 -#define CHAN_CLEAR_SYNTAX 537 -#define CHAN_CLEARED_BANS 538 -#define CHAN_CLEARED_EXCEPTIONS 539 -#define CHAN_CLEARED_MODES 540 -#define CHAN_CLEARED_OPS 541 -#define CHAN_CLEARED_HALFOPS 542 -#define CHAN_CLEARED_VOICES 543 -#define CHAN_CLEARED_USERS 544 -#define CHAN_GETPASS_SYNTAX 545 -#define CHAN_GETPASS_UNAVAILABLE 546 -#define CHAN_GETPASS_PASSWORD_IS 547 -#define CHAN_FORBID_SYNTAX 548 -#define CHAN_FORBID_SHORT_CHANNEL 549 -#define CHAN_FORBID_SUCCEEDED 550 -#define CHAN_FORBID_FAILED 551 -#define CHAN_SUSPEND_SYNTAX 552 -#define CHAN_SUSPEND_SUCCEEDED 553 -#define CHAN_SUSPEND_ALREADY_SUSPENDED 554 -#define CHAN_UNSUSPEND_SYNTAX 555 -#define CHAN_UNSUSPEND_SUCCEEDED 556 -#define CHAN_UNSUSPEND_NOT_SUSPENDED 557 -#define CHAN_SENDPASS_MAIL_SUBJECT 558 -#define CHAN_SENDPASS_MAIL_BODY 559 -#define CHAN_SENDPASS_SYNTAX 560 -#define CHAN_SENDPASS_FAILED 561 -#define CHAN_SENDPASS_FOUNDER_ONLY 562 -#define CHAN_SENDPASS_NO_EMAIL 563 -#define CHAN_SENDPASS_TOO_SOON 564 -#define CHAN_SENDPASS_SENT 565 -#define MEMO_HAVE_NEW_MEMO 566 -#define MEMO_HAVE_NEW_MEMOS 567 -#define MEMO_TYPE_READ_LAST 568 -#define MEMO_TYPE_READ_NUM 569 -#define MEMO_TYPE_LIST_NEW 570 -#define MEMO_AT_LIMIT 571 -#define MEMO_OVER_LIMIT 572 -#define MEMO_NEW_MEMO_ARRIVED 573 -#define MEMO_HAVE_NO_MEMOS 574 -#define MEMO_X_HAS_NO_MEMOS 575 -#define MEMO_DOES_NOT_EXIST 576 -#define MEMO_LIST_NOT_FOUND 577 -#define MEMO_SEND_SYNTAX 578 -#define MEMO_SEND_DISABLED 579 -#define MEMO_SEND_PLEASE_WAIT 580 -#define MEMO_X_GETS_NO_MEMOS 581 -#define MEMO_X_HAS_TOO_MANY_MEMOS 582 -#define MEMO_SENT 583 -#define MEMO_LIST_SYNTAX 584 -#define MEMO_HAVE_NO_NEW_MEMOS 585 -#define MEMO_X_HAS_NO_NEW_MEMOS 586 -#define MEMO_LIST_MEMOS 587 -#define MEMO_LIST_NEW_MEMOS 588 -#define MEMO_LIST_CHAN_MEMOS 589 -#define MEMO_LIST_CHAN_NEW_MEMOS 590 -#define MEMO_LIST_HEADER 591 -#define MEMO_LIST_FORMAT 592 -#define MEMO_READ_SYNTAX 593 -#define MEMO_HEADER 594 -#define MEMO_CHAN_HEADER 595 -#define MEMO_SAVE_SYNTAX 596 -#define MEMO_SAVED_ONE 597 -#define MEMO_SAVED_SEVERAL 598 -#define MEMO_DEL_SYNTAX 599 -#define MEMO_DELETED_NONE 600 -#define MEMO_DELETED_ONE 601 -#define MEMO_DELETED_SEVERAL 602 -#define MEMO_DELETED_ALL 603 -#define MEMO_SET_SYNTAX 604 -#define MEMO_SET_DISABLED 605 -#define MEMO_SET_UNKNOWN_OPTION 606 -#define MEMO_SET_NOTIFY_SYNTAX 607 -#define MEMO_SET_NOTIFY_ON 608 -#define MEMO_SET_NOTIFY_LOGON 609 -#define MEMO_SET_NOTIFY_NEW 610 -#define MEMO_SET_NOTIFY_OFF 611 -#define MEMO_SET_LIMIT_SYNTAX 612 -#define MEMO_SET_LIMIT_OPER_SYNTAX 613 -#define MEMO_SET_YOUR_LIMIT_FORBIDDEN 614 -#define MEMO_SET_LIMIT_FORBIDDEN 615 -#define MEMO_SET_YOUR_LIMIT_TOO_HIGH 616 -#define MEMO_SET_LIMIT_TOO_HIGH 617 -#define MEMO_SET_LIMIT_OVERFLOW 618 -#define MEMO_SET_YOUR_LIMIT 619 -#define MEMO_SET_YOUR_LIMIT_ZERO 620 -#define MEMO_SET_YOUR_LIMIT_DEFAULT 621 -#define MEMO_UNSET_YOUR_LIMIT 622 -#define MEMO_SET_LIMIT 623 -#define MEMO_SET_LIMIT_ZERO 624 -#define MEMO_SET_LIMIT_DEFAULT 625 -#define MEMO_UNSET_LIMIT 626 -#define MEMO_INFO_NO_MEMOS 627 -#define MEMO_INFO_MEMO 628 -#define MEMO_INFO_MEMO_UNREAD 629 -#define MEMO_INFO_MEMOS 630 -#define MEMO_INFO_MEMOS_ONE_UNREAD 631 -#define MEMO_INFO_MEMOS_SOME_UNREAD 632 -#define MEMO_INFO_MEMOS_ALL_UNREAD 633 -#define MEMO_INFO_LIMIT 634 -#define MEMO_INFO_HARD_LIMIT 635 -#define MEMO_INFO_LIMIT_ZERO 636 -#define MEMO_INFO_HARD_LIMIT_ZERO 637 -#define MEMO_INFO_NO_LIMIT 638 -#define MEMO_INFO_NOTIFY_OFF 639 -#define MEMO_INFO_NOTIFY_ON 640 -#define MEMO_INFO_NOTIFY_RECEIVE 641 -#define MEMO_INFO_NOTIFY_SIGNON 642 -#define MEMO_INFO_X_NO_MEMOS 643 -#define MEMO_INFO_X_MEMO 644 -#define MEMO_INFO_X_MEMO_UNREAD 645 -#define MEMO_INFO_X_MEMOS 646 -#define MEMO_INFO_X_MEMOS_ONE_UNREAD 647 -#define MEMO_INFO_X_MEMOS_SOME_UNREAD 648 -#define MEMO_INFO_X_MEMOS_ALL_UNREAD 649 -#define MEMO_INFO_X_LIMIT 650 -#define MEMO_INFO_X_HARD_LIMIT 651 -#define MEMO_INFO_X_NO_LIMIT 652 -#define MEMO_INFO_X_NOTIFY_OFF 653 -#define MEMO_INFO_X_NOTIFY_ON 654 -#define MEMO_INFO_X_NOTIFY_RECEIVE 655 -#define MEMO_INFO_X_NOTIFY_SIGNON 656 -#define MEMO_FORWARD_MAIL_SUBJECT 657 -#define MEMO_FORWARD_MAIL_BODY 658 -#define MEMO_FORWARD_SYNTAX 659 -#define MEMO_FORWARD_NEED_EMAIL 660 -#define MEMO_FORWARD_PLEASE_WAIT 661 -#define MEMO_FORWARD_FAILED 662 -#define MEMO_FORWARDED_NONE 663 -#define MEMO_FORWARDED_ONE 664 -#define MEMO_FORWARDED_SEVERAL 665 -#define MEMO_FORWARDED_ALL 666 -#define MEMO_FORWARDED_ALSO_TEMPFAIL 667 -#define MEMO_FORWARDED_ALSO_PERMFAIL 668 -#define MEMO_SET_FORWARD_SYNTAX 669 -#define MEMO_SET_FORWARD_ON 670 -#define MEMO_SET_FORWARD_COPY 671 -#define MEMO_SET_FORWARD_OFF 672 -#define MEMO_IGNORE_SYNTAX 673 -#define MEMO_IGNORE_ADD_SYNTAX 674 -#define MEMO_IGNORE_DEL_SYNTAX 675 -#define MEMO_IGNORE_LIST_FULL 676 -#define MEMO_IGNORE_ALREADY_PRESENT 677 -#define MEMO_IGNORE_ADDED 678 -#define MEMO_IGNORE_NOT_FOUND 679 -#define MEMO_IGNORE_DELETED 680 -#define MEMO_IGNORE_LIST_EMPTY 681 -#define MEMO_IGNORE_LIST 682 -#define MEMO_IGNORE_LIST_X_EMPTY 683 -#define MEMO_IGNORE_LIST_X 684 -#define OPER_BOUNCY_MODES 685 -#define OPER_BOUNCY_MODES_U_LINE 686 -#define OPER_GLOBAL_SYNTAX 687 -#define OPER_STATS_UNKNOWN_OPTION 688 -#define OPER_STATS_RESET_USER_COUNT 689 -#define OPER_STATS_CURRENT_USERS 690 -#define OPER_STATS_MAX_USERS 691 -#define OPER_STATS_UPTIME_DHMS 692 -#define OPER_STATS_UPTIME_HM_MS 693 -#define OPER_STATS_KBYTES_READ 694 -#define OPER_STATS_KBYTES_WRITTEN 695 -#define OPER_STATS_NETBUF_SOCK 696 -#define OPER_STATS_NETBUF_SOCK_PERCENT 697 -#define OPER_STATS_NETBUF_TOTAL 698 -#define OPER_STATS_NETBUF_TOTAL_PERCENT 699 -#define OPER_STATS_ALL_USER_MEM 700 -#define OPER_STATS_ALL_CHANNEL_MEM 701 -#define OPER_STATS_ALL_SERVER_MEM 702 -#define OPER_STATS_ALL_NICKGROUPINFO_MEM 703 -#define OPER_STATS_ALL_NICKINFO_MEM 704 -#define OPER_STATS_ALL_CHANSERV_MEM 705 -#define OPER_STATS_ALL_STATSERV_MEM 706 -#define OPER_STATS_ALL_NEWS_MEM 707 -#define OPER_STATS_ALL_AKILL_MEM 708 -#define OPER_STATS_ALL_EXCEPTION_MEM 709 -#define OPER_STATS_ALL_SGLINE_MEM 710 -#define OPER_STATS_ALL_SQLINE_MEM 711 -#define OPER_STATS_ALL_SZLINE_MEM 712 -#define OPER_STATS_ALL_SESSION_MEM 713 -#define OPER_MODE_SYNTAX 714 -#define OPER_CLEARMODES_SYNTAX 715 -#define OPER_CLEARMODES_DONE 716 -#define OPER_CLEARMODES_EXCEPT_DONE 717 -#define OPER_CLEARMODES_ALL_DONE 718 -#define OPER_CLEARCHAN_SYNTAX 719 -#define OPER_CLEARCHAN_DONE 720 -#define OPER_KICK_SYNTAX 721 -#define OPER_ADMIN_SYNTAX 722 -#define OPER_ADMIN_ADD_SYNTAX 723 -#define OPER_ADMIN_DEL_SYNTAX 724 -#define OPER_ADMIN_NO_NICKSERV 725 -#define OPER_ADMIN_EXISTS 726 -#define OPER_ADMIN_ADDED 727 -#define OPER_ADMIN_TOO_MANY 728 -#define OPER_ADMIN_REMOVED 729 -#define OPER_ADMIN_NOT_FOUND 730 -#define OPER_ADMIN_LIST_HEADER 731 -#define OPER_OPER_SYNTAX 732 -#define OPER_OPER_ADD_SYNTAX 733 -#define OPER_OPER_DEL_SYNTAX 734 -#define OPER_OPER_NO_NICKSERV 735 -#define OPER_OPER_EXISTS 736 -#define OPER_OPER_ADDED 737 -#define OPER_OPER_TOO_MANY 738 -#define OPER_OPER_REMOVED 739 -#define OPER_OPER_NOT_FOUND 740 -#define OPER_OPER_LIST_HEADER 741 -#define OPER_AKILL_SYNTAX 742 -#define OPER_AKILL_ADD_SYNTAX 743 -#define OPER_AKILL_DEL_SYNTAX 744 -#define OPER_TOO_MANY_AKILLS 745 -#define OPER_AKILL_EXISTS 746 -#define OPER_AKILL_NO_NICK 747 -#define OPER_AKILL_MASK_TOO_GENERAL 748 -#define OPER_AKILL_EXPIRY_LIMITED 749 -#define OPER_AKILL_ADDED 750 -#define OPER_AKILL_REMOVED 751 -#define OPER_AKILL_NOT_FOUND 752 -#define OPER_AKILL_LIST_HEADER 753 -#define OPER_AKILL_LIST_FORMAT 754 -#define OPER_AKILL_VIEW_FORMAT 755 -#define OPER_AKILL_VIEW_UNUSED_FORMAT 756 -#define OPER_AKILL_COUNT 757 -#define OPER_EXCLUDE_SYNTAX 758 -#define OPER_EXCLUDE_ADD_SYNTAX 759 -#define OPER_EXCLUDE_DEL_SYNTAX 760 -#define OPER_TOO_MANY_EXCLUDES 761 -#define OPER_EXCLUDE_EXISTS 762 -#define OPER_EXCLUDE_ADDED 763 -#define OPER_EXCLUDE_REMOVED 764 -#define OPER_EXCLUDE_NOT_FOUND 765 -#define OPER_EXCLUDE_LIST_HEADER 766 -#define OPER_EXCLUDE_LIST_FORMAT 767 -#define OPER_EXCLUDE_VIEW_FORMAT 768 -#define OPER_EXCLUDE_VIEW_UNUSED_FORMAT 769 -#define OPER_EXCLUDE_COUNT 770 -#define OPER_SLINE_SYNTAX 771 -#define OPER_SLINE_ADD_SYNTAX 772 -#define OPER_SLINE_DEL_SYNTAX 773 -#define OPER_TOO_MANY_SLINES 774 -#define OPER_SLINE_EXISTS 775 -#define OPER_SLINE_ADDED 776 -#define OPER_SLINE_REMOVED 777 -#define OPER_SLINE_NOT_FOUND 778 -#define OPER_SLINE_LIST_HEADER 779 -#define OPER_SLINE_LIST_FORMAT 780 -#define OPER_SLINE_VIEW_FORMAT 781 -#define OPER_SLINE_VIEW_UNUSED_FORMAT 782 -#define OPER_SLINE_COUNT 783 -#define OPER_SZLINE_NOT_AVAIL 784 -#define OPER_SU_SYNTAX 785 -#define OPER_SU_NO_PASSWORD 786 -#define OPER_SU_SUCCEEDED 787 -#define OPER_SU_FAILED 788 -#define OPER_SET_SYNTAX 789 -#define OPER_SET_IGNORE_ON 790 -#define OPER_SET_IGNORE_OFF 791 -#define OPER_SET_IGNORE_ERROR 792 -#define OPER_SET_READONLY_ON 793 -#define OPER_SET_READONLY_OFF 794 -#define OPER_SET_READONLY_ERROR 795 -#define OPER_SET_DEBUG_ON 796 -#define OPER_SET_DEBUG_OFF 797 -#define OPER_SET_DEBUG_LEVEL 798 -#define OPER_SET_DEBUG_ERROR 799 -#define OPER_SET_SUPASS_FAILED 800 -#define OPER_SET_SUPASS_OK 801 -#define OPER_SET_SUPASS_NONE 802 -#define OPER_SET_UNKNOWN_OPTION 803 -#define OPER_JUPE_SYNTAX 804 -#define OPER_JUPE_INVALID_NAME 805 -#define OPER_JUPE_ALREADY_JUPED 806 -#define OPER_RAW_SYNTAX 807 -#define OPER_UPDATE_SYNTAX 808 -#define OPER_UPDATE_FORCE_FAILED 809 -#define OPER_UPDATING 810 -#define OPER_UPDATE_COMPLETE 811 -#define OPER_UPDATE_FAILED 812 -#define OPER_REHASHING 813 -#define OPER_REHASHED 814 -#define OPER_REHASH_ERROR 815 -#define OPER_IGNORE_LIST 816 -#define OPER_IGNORE_LIST_EMPTY 817 -#define OPER_KILLCLONES_SYNTAX 818 -#define OPER_KILLCLONES_UNKNOWN_NICK 819 -#define OPER_KILLCLONES_KILLED 820 -#define OPER_KILLCLONES_KILLED_AKILL 821 -#define OPER_EXCEPTION_SYNTAX 822 -#define OPER_EXCEPTION_ADD_SYNTAX 823 -#define OPER_EXCEPTION_DEL_SYNTAX 824 -#define OPER_EXCEPTION_MOVE_SYNTAX 825 -#define OPER_EXCEPTION_ALREADY_PRESENT 826 -#define OPER_EXCEPTION_TOO_MANY 827 -#define OPER_EXCEPTION_ADDED 828 -#define OPER_EXCEPTION_MOVED 829 -#define OPER_EXCEPTION_NO_SUCH_ENTRY 830 -#define OPER_EXCEPTION_NOT_FOUND 831 -#define OPER_EXCEPTION_NO_MATCH 832 -#define OPER_EXCEPTION_EMPTY 833 -#define OPER_EXCEPTION_DELETED 834 -#define OPER_EXCEPTION_DELETED_ONE 835 -#define OPER_EXCEPTION_DELETED_SEVERAL 836 -#define OPER_EXCEPTION_LIST_HEADER 837 -#define OPER_EXCEPTION_LIST_COLHEAD 838 -#define OPER_EXCEPTION_LIST_FORMAT 839 -#define OPER_EXCEPTION_VIEW_FORMAT 840 -#define OPER_EXCEPTION_INVALID_LIMIT 841 -#define OPER_EXCEPTION_INVALID_HOSTMASK 842 -#define OPER_SESSION_SYNTAX 843 -#define OPER_SESSION_LIST_SYNTAX 844 -#define OPER_SESSION_VIEW_SYNTAX 845 -#define OPER_SESSION_INVALID_THRESHOLD 846 -#define OPER_SESSION_NOT_FOUND 847 -#define OPER_SESSION_LIST_HEADER 848 -#define OPER_SESSION_LIST_COLHEAD 849 -#define OPER_SESSION_LIST_FORMAT 850 -#define OPER_SESSION_VIEW_FORMAT 851 -#define NEWS_LOGON_TEXT 852 -#define NEWS_OPER_TEXT 853 -#define NEWS_LOGON_SYNTAX 854 -#define NEWS_LOGON_LIST_HEADER 855 -#define NEWS_LOGON_LIST_ENTRY 856 -#define NEWS_LOGON_LIST_NONE 857 -#define NEWS_LOGON_ADD_SYNTAX 858 -#define NEWS_LOGON_ADD_FULL 859 -#define NEWS_LOGON_ADDED 860 -#define NEWS_LOGON_DEL_SYNTAX 861 -#define NEWS_LOGON_DEL_NOT_FOUND 862 -#define NEWS_LOGON_DELETED 863 -#define NEWS_LOGON_DEL_NONE 864 -#define NEWS_LOGON_DELETED_ALL 865 -#define NEWS_OPER_SYNTAX 866 -#define NEWS_OPER_LIST_HEADER 867 -#define NEWS_OPER_LIST_ENTRY 868 -#define NEWS_OPER_LIST_NONE 869 -#define NEWS_OPER_ADD_SYNTAX 870 -#define NEWS_OPER_ADD_FULL 871 -#define NEWS_OPER_ADDED 872 -#define NEWS_OPER_DEL_SYNTAX 873 -#define NEWS_OPER_DEL_NOT_FOUND 874 -#define NEWS_OPER_DELETED 875 -#define NEWS_OPER_DEL_NONE 876 -#define NEWS_OPER_DELETED_ALL 877 -#define NEWS_HELP_LOGON 878 -#define NEWS_HELP_OPER 879 -#define STAT_SERVERS_REMOVE_SERV_FIRST 880 -#define STAT_SERVERS_SERVER_EXISTS 881 -#define STAT_SERVERS_SYNTAX 882 -#define STAT_SERVERS_STATS_TOTAL 883 -#define STAT_SERVERS_STATS_ON_OFFLINE 884 -#define STAT_SERVERS_LASTQUIT_WAS 885 -#define STAT_SERVERS_LIST_HEADER 886 -#define STAT_SERVERS_LIST_FORMAT 887 -#define STAT_SERVERS_LIST_RESULTS 888 -#define STAT_SERVERS_VIEW_HEADER_ONLINE 889 -#define STAT_SERVERS_VIEW_HEADER_OFFLINE 890 -#define STAT_SERVERS_VIEW_LASTJOIN 891 -#define STAT_SERVERS_VIEW_LASTQUIT 892 -#define STAT_SERVERS_VIEW_QUITMSG 893 -#define STAT_SERVERS_VIEW_USERS_OPERS 894 -#define STAT_SERVERS_VIEW_RESULTS 895 -#define STAT_SERVERS_DELETE_SYNTAX 896 -#define STAT_SERVERS_DELETE_DONE 897 -#define STAT_SERVERS_COPY_SYNTAX 898 -#define STAT_SERVERS_COPY_DONE 899 -#define STAT_SERVERS_RENAME_SYNTAX 900 -#define STAT_SERVERS_RENAME_DONE 901 -#define STAT_USERS_SYNTAX 902 -#define STAT_USERS_TOTUSERS 903 -#define STAT_USERS_TOTOPERS 904 -#define STAT_USERS_SERVUSERS 905 -#define STAT_USERS_SERVOPERS 906 -#define NICK_HELP 907 -#define NICK_HELP_EXPIRES 908 -#define NICK_HELP_WARNING 909 -#define NICK_HELP_COMMANDS 910 -#define NICK_HELP_COMMANDS_AUTH 911 -#define NICK_HELP_COMMANDS_IDENTIFY 912 -#define NICK_HELP_COMMANDS_SENDPASS 913 -#define NICK_HELP_COMMANDS_DROP 914 -#define NICK_HELP_COMMANDS_LINK 915 -#define NICK_HELP_COMMANDS_OLDLINK 916 -#define NICK_HELP_COMMANDS_ACCESS 917 -#define NICK_HELP_COMMANDS_AJOIN 918 -#define NICK_HELP_COMMANDS_SET 919 -#define NICK_HELP_COMMANDS_LIST 920 -#define NICK_HELP_COMMANDS_LISTCHANS 921 -#define NICK_HELP_REGISTER 922 -#define NICK_HELP_REGISTER_EMAIL 923 -#define NICK_HELP_REGISTER_EMAIL_REQ 924 -#define NICK_HELP_REGISTER_EMAIL_AUTH 925 -#define NICK_HELP_REGISTER_END 926 -#define NICK_HELP_AUTH 927 -#define NICK_HELP_SENDAUTH 928 -#define NICK_HELP_SENDPASS 929 -#define NICK_HELP_IDENTIFY 930 -#define NICK_HELP_DROP 931 -#define NICK_HELP_DROP_LINK 932 -#define NICK_HELP_DROP_END 933 -#define NICK_HELP_OLD_LINK 934 -#define NICK_HELP_LINK 935 -#define NICK_HELP_OLD_UNLINK 936 -#define NICK_HELP_UNLINK 937 -#define NICK_HELP_LISTLINKS 938 -#define NICK_HELP_ACCESS 939 -#define NICK_HELP_SET 940 -#define NICK_HELP_SET_OPTION_MAINNICK 941 -#define NICK_HELP_SET_END 942 -#define NICK_HELP_SET_PASSWORD 943 -#define NICK_HELP_SET_LANGUAGE 944 -#define NICK_HELP_SET_URL 945 -#define NICK_HELP_SET_EMAIL 946 -#define NICK_HELP_SET_INFO 947 -#define NICK_HELP_SET_KILL 948 -#define NICK_HELP_SET_SECURE 949 -#define NICK_HELP_SET_PRIVATE 950 -#define NICK_HELP_SET_HIDE 951 -#define NICK_HELP_SET_TIMEZONE 952 -#define NICK_HELP_SET_MAINNICK 953 -#define NICK_HELP_UNSET 954 -#define NICK_HELP_UNSET_REQ_EMAIL 955 -#define NICK_HELP_RECOVER 956 -#define NICK_HELP_RELEASE 957 -#define NICK_HELP_GHOST 958 -#define NICK_HELP_INFO 959 -#define NICK_HELP_INFO_AUTH 960 -#define NICK_HELP_LISTCHANS 961 -#define NICK_HELP_LIST 962 -#define NICK_HELP_LIST_OPERSONLY 963 -#define NICK_HELP_LISTEMAIL 964 -#define NICK_HELP_STATUS 965 -#define NICK_HELP_AJOIN 966 -#define NICK_OPER_HELP_COMMANDS 967 -#define NICK_OPER_HELP_COMMANDS_GETPASS 968 -#define NICK_OPER_HELP_COMMANDS_FORBID 969 -#define NICK_OPER_HELP_COMMANDS_LISTLINKS 970 -#define NICK_OPER_HELP_COMMANDS_SETAUTH 971 -#define NICK_OPER_HELP_COMMANDS_END 972 -#define NICK_OPER_HELP_DROPNICK 973 -#define NICK_OPER_HELP_SET 974 -#define NICK_OPER_HELP_SET_NOEXPIRE 975 -#define NICK_OPER_HELP_UNSET 976 -#define NICK_OPER_HELP_OLD_UNLINK 977 -#define NICK_OPER_HELP_UNLINK 978 -#define NICK_OPER_HELP_OLD_LISTLINKS 979 -#define NICK_OPER_HELP_LISTLINKS 980 -#define NICK_OPER_HELP_ACCESS 981 -#define NICK_OPER_HELP_INFO 982 -#define NICK_OPER_HELP_LISTCHANS 983 -#define NICK_OPER_HELP_LIST 984 -#define NICK_OPER_HELP_LIST_AUTH 985 -#define NICK_OPER_HELP_LISTEMAIL 986 -#define NICK_OPER_HELP_LISTEMAIL_AUTH 987 -#define NICK_OPER_HELP_GETPASS 988 -#define NICK_OPER_HELP_FORBID 989 -#define NICK_OPER_HELP_SUSPEND 990 -#define NICK_OPER_HELP_UNSUSPEND 991 -#define NICK_OPER_HELP_AJOIN 992 -#define NICK_OPER_HELP_SETAUTH 993 -#define NICK_OPER_HELP_GETAUTH 994 -#define NICK_OPER_HELP_CLEARAUTH 995 -#define CHAN_HELP_REQSOP_LEVXOP 996 -#define CHAN_HELP_REQSOP_LEV 997 -#define CHAN_HELP_REQSOP_XOP 998 -#define CHAN_HELP_REQAOP_LEVXOP 999 -#define CHAN_HELP_REQAOP_LEV 1000 -#define CHAN_HELP_REQAOP_XOP 1001 -#define CHAN_HELP_REQHOP_LEVXOP 1002 -#define CHAN_HELP_REQHOP_LEV 1003 -#define CHAN_HELP_REQHOP_XOP 1004 -#define CHAN_HELP_REQVOP_LEVXOP 1005 -#define CHAN_HELP_REQVOP_LEV 1006 -#define CHAN_HELP_REQVOP_XOP 1007 -#define CHAN_HELP 1008 -#define CHAN_HELP_EXPIRES 1009 -#define CHAN_HELP_COMMANDS 1010 -#define CHAN_HELP_COMMANDS_SENDPASS 1011 -#define CHAN_HELP_COMMANDS_DROP 1012 -#define CHAN_HELP_COMMANDS_LIST 1013 -#define CHAN_HELP_COMMANDS_AKICK 1014 -#define CHAN_HELP_COMMANDS_LEVELS 1015 -#define CHAN_HELP_COMMANDS_XOP 1016 -#define CHAN_HELP_COMMANDS_HOP 1017 -#define CHAN_HELP_COMMANDS_OPVOICE 1018 -#define CHAN_HELP_COMMANDS_HALFOP 1019 -#define CHAN_HELP_COMMANDS_PROTECT 1020 -#define CHAN_HELP_COMMANDS_INVITE 1021 -#define CHAN_HELP_REGISTER 1022 -#define CHAN_HELP_REGISTER_ADMINONLY 1023 -#define CHAN_HELP_SENDPASS 1024 -#define CHAN_HELP_IDENTIFY 1025 -#define CHAN_HELP_DROP 1026 -#define CHAN_HELP_SET 1027 -#define CHAN_HELP_SET_FOUNDER 1028 -#define CHAN_HELP_SET_SUCCESSOR 1029 -#define CHAN_HELP_SET_PASSWORD 1030 -#define CHAN_HELP_SET_DESC 1031 -#define CHAN_HELP_SET_URL 1032 -#define CHAN_HELP_SET_EMAIL 1033 -#define CHAN_HELP_SET_ENTRYMSG 1034 -#define CHAN_HELP_SET_KEEPTOPIC 1035 -#define CHAN_HELP_SET_TOPICLOCK 1036 -#define CHAN_HELP_SET_MLOCK 1037 -#define CHAN_HELP_SET_HIDE 1038 -#define CHAN_HELP_SET_PRIVATE 1039 -#define CHAN_HELP_SET_RESTRICTED 1040 -#define CHAN_HELP_SET_SECURE 1041 -#define CHAN_HELP_SET_SECUREOPS 1042 -#define CHAN_HELP_SET_LEAVEOPS 1043 -#define CHAN_HELP_SET_OPNOTICE 1044 -#define CHAN_HELP_SET_ENFORCE 1045 -#define CHAN_HELP_UNSET 1046 -#define CHAN_HELP_SOP 1047 -#define CHAN_HELP_SOP_MID1 1048 -#define CHAN_HELP_SOP_MID1_CHANPROT 1049 -#define CHAN_HELP_SOP_MID2 1050 -#define CHAN_HELP_SOP_MID2_HALFOP 1051 -#define CHAN_HELP_SOP_END 1052 -#define CHAN_HELP_AOP 1053 -#define CHAN_HELP_AOP_MID 1054 -#define CHAN_HELP_AOP_MID_HALFOP 1055 -#define CHAN_HELP_AOP_END 1056 -#define CHAN_HELP_HOP 1057 -#define CHAN_HELP_VOP 1058 -#define CHAN_HELP_ACCESS 1059 -#define CHAN_HELP_ACCESS_XOP 1060 -#define CHAN_HELP_ACCESS_XOP_HALFOP 1061 -#define CHAN_HELP_ACCESS_LEVELS 1062 -#define CHAN_HELP_ACCESS_LEVELS_HALFOP 1063 -#define CHAN_HELP_ACCESS_LEVELS_END 1064 -#define CHAN_HELP_LEVELS 1065 -#define CHAN_HELP_LEVELS_XOP 1066 -#define CHAN_HELP_LEVELS_XOP_HOP 1067 -#define CHAN_HELP_LEVELS_END 1068 -#define CHAN_HELP_LEVELS_DESC 1069 -#define CHAN_HELP_AKICK 1070 -#define CHAN_HELP_INFO 1071 -#define CHAN_HELP_LIST 1072 -#define CHAN_HELP_LIST_OPERSONLY 1073 -#define CHAN_HELP_OP 1074 -#define CHAN_HELP_DEOP 1075 -#define CHAN_HELP_VOICE 1076 -#define CHAN_HELP_DEVOICE 1077 -#define CHAN_HELP_HALFOP 1078 -#define CHAN_HELP_DEHALFOP 1079 -#define CHAN_HELP_PROTECT 1080 -#define CHAN_HELP_DEPROTECT 1081 -#define CHAN_HELP_INVITE 1082 -#define CHAN_HELP_UNBAN 1083 -#define CHAN_HELP_KICK 1084 -#define CHAN_HELP_KICK_PROTECTED 1085 -#define CHAN_HELP_TOPIC 1086 -#define CHAN_HELP_CLEAR 1087 -#define CHAN_HELP_CLEAR_EXCEPTIONS 1088 -#define CHAN_HELP_CLEAR_MID 1089 -#define CHAN_HELP_CLEAR_HALFOPS 1090 -#define CHAN_HELP_CLEAR_END 1091 -#define CHAN_HELP_STATUS 1092 -#define CHAN_OPER_HELP_COMMANDS 1093 -#define CHAN_OPER_HELP_COMMANDS_GETPASS 1094 -#define CHAN_OPER_HELP_COMMANDS_FORBID 1095 -#define CHAN_OPER_HELP_COMMANDS_END 1096 -#define CHAN_OPER_HELP_DROP 1097 -#define CHAN_OPER_HELP_SET 1098 -#define CHAN_OPER_HELP_SET_NOEXPIRE 1099 -#define CHAN_OPER_HELP_UNSET 1100 -#define CHAN_OPER_HELP_INFO 1101 -#define CHAN_OPER_HELP_LIST 1102 -#define CHAN_OPER_HELP_GETPASS 1103 -#define CHAN_OPER_HELP_FORBID 1104 -#define CHAN_OPER_HELP_SUSPEND 1105 -#define CHAN_OPER_HELP_UNSUSPEND 1106 -#define MEMO_HELP 1107 -#define MEMO_HELP_EXPIRES 1108 -#define MEMO_HELP_END_LEVELS 1109 -#define MEMO_HELP_END_XOP 1110 -#define MEMO_HELP_COMMANDS 1111 -#define MEMO_HELP_COMMANDS_FORWARD 1112 -#define MEMO_HELP_COMMANDS_SAVE 1113 -#define MEMO_HELP_COMMANDS_DEL 1114 -#define MEMO_HELP_COMMANDS_IGNORE 1115 -#define MEMO_HELP_SEND 1116 -#define MEMO_HELP_LIST 1117 -#define MEMO_HELP_LIST_EXPIRE 1118 -#define MEMO_HELP_READ 1119 -#define MEMO_HELP_SAVE 1120 -#define MEMO_HELP_DEL 1121 -#define MEMO_HELP_SET 1122 -#define MEMO_HELP_SET_OPTION_FORWARD 1123 -#define MEMO_HELP_SET_END 1124 -#define MEMO_HELP_SET_NOTIFY 1125 -#define MEMO_HELP_SET_LIMIT 1126 -#define MEMO_HELP_INFO 1127 -#define MEMO_OPER_HELP_COMMANDS 1128 -#define MEMO_OPER_HELP_SET_LIMIT 1129 -#define MEMO_OPER_HELP_INFO 1130 -#define MEMO_HELP_FORWARD 1131 -#define MEMO_HELP_SET_FORWARD 1132 -#define MEMO_HELP_IGNORE 1133 -#define OPER_HELP 1134 -#define OPER_HELP_COMMANDS 1135 -#define OPER_HELP_COMMANDS_SERVOPER 1136 -#define OPER_HELP_COMMANDS_AKILL 1137 -#define OPER_HELP_COMMANDS_EXCLUDE 1138 -#define OPER_HELP_COMMANDS_SLINE 1139 -#define OPER_HELP_COMMANDS_SESSION 1140 -#define OPER_HELP_COMMANDS_NEWS 1141 -#define OPER_HELP_COMMANDS_SERVADMIN 1142 -#define OPER_HELP_COMMANDS_SERVROOT 1143 -#define OPER_HELP_COMMANDS_RAW 1144 -#define OPER_HELP_GLOBAL 1145 -#define OPER_HELP_STATS 1146 -#define OPER_HELP_SERVERMAP 1147 -#define OPER_HELP_OPER 1148 -#define OPER_HELP_ADMIN 1149 -#define OPER_HELP_MODE 1150 -#define OPER_HELP_CLEARMODES 1151 -#define OPER_HELP_CLEARCHAN 1152 -#define OPER_HELP_KICK 1153 -#define OPER_HELP_AKILL 1154 -#define OPER_HELP_AKILL_OPERMAXEXPIRY 1155 -#define OPER_HELP_AKILL_END 1156 -#define OPER_HELP_EXCLUDE 1157 -#define OPER_HELP_SGLINE 1158 -#define OPER_HELP_SQLINE 1159 -#define OPER_HELP_SQLINE_KILL 1160 -#define OPER_HELP_SQLINE_NOKILL 1161 -#define OPER_HELP_SQLINE_IGNOREOPERS 1162 -#define OPER_HELP_SQLINE_END 1163 -#define OPER_HELP_SZLINE 1164 -#define OPER_HELP_EXCEPTION 1165 -#define OPER_HELP_SESSION 1166 -#define OPER_HELP_SU 1167 -#define OPER_HELP_SET 1168 -#define OPER_HELP_SET_READONLY 1169 -#define OPER_HELP_SET_DEBUG 1170 -#define OPER_HELP_SET_SUPASS 1171 -#define OPER_HELP_JUPE 1172 -#define OPER_HELP_RAW 1173 -#define OPER_HELP_UPDATE 1174 -#define OPER_HELP_QUIT 1175 -#define OPER_HELP_SHUTDOWN 1176 -#define OPER_HELP_RESTART 1177 -#define OPER_HELP_REHASH 1178 -#define OPER_HELP_KILLCLONES 1179 -#define STAT_HELP 1180 -#define STAT_HELP_COMMANDS 1181 -#define STAT_HELP_SERVERS 1182 -#define STAT_HELP_USERS 1183 -#define STAT_OPER_HELP_SERVERS 1184 +#define NICK_DROPEMAIL_SYNTAX 97 +#define NICK_DROPEMAIL_PATTERN_TOO_LONG 98 +#define NICK_DROPEMAIL_NONE 99 +#define NICK_DROPEMAIL_COUNT 100 +#define NICK_DROPEMAIL_CONFIRM_SYNTAX 101 +#define NICK_DROPEMAIL_CONFIRM_UNKNOWN 102 +#define NICK_DROPEMAIL_CONFIRM_DROPPING 103 +#define NICK_DROPEMAIL_CONFIRM_DROPPED 104 +#define NICK_SET_SYNTAX 105 +#define NICK_SET_OPER_SYNTAX 106 +#define NICK_SET_DISABLED 107 +#define NICK_SET_UNKNOWN_OPTION 108 +#define NICK_SET_UNKNOWN_OPTION_OR_BAD_NICK 109 +#define NICK_SET_PASSWORD_FAILED 110 +#define NICK_SET_PASSWORD_CHANGED 111 +#define NICK_SET_PASSWORD_CHANGED_TO 112 +#define NICK_SET_LANGUAGE_SYNTAX 113 +#define NICK_SET_LANGUAGE_UNKNOWN 114 +#define NICK_SET_LANGUAGE_CHANGED 115 +#define NICK_SET_URL_CHANGED 116 +#define NICK_SET_EMAIL_UNAUTHED 117 +#define NICK_SET_EMAIL_TOO_MANY_NICKS 118 +#define NICK_SET_EMAIL_CHANGED 119 +#define NICK_SET_INFO_CHANGED 120 +#define NICK_SET_KILL_SYNTAX 121 +#define NICK_SET_KILL_IMMED_SYNTAX 122 +#define NICK_SET_KILL_ON 123 +#define NICK_SET_KILL_QUICK 124 +#define NICK_SET_KILL_IMMED 125 +#define NICK_SET_KILL_IMMED_DISABLED 126 +#define NICK_SET_KILL_OFF 127 +#define NICK_SET_SECURE_SYNTAX 128 +#define NICK_SET_SECURE_ON 129 +#define NICK_SET_SECURE_OFF 130 +#define NICK_SET_PRIVATE_SYNTAX 131 +#define NICK_SET_PRIVATE_ON 132 +#define NICK_SET_PRIVATE_OFF 133 +#define NICK_SET_HIDE_SYNTAX 134 +#define NICK_SET_HIDE_EMAIL_ON 135 +#define NICK_SET_HIDE_EMAIL_OFF 136 +#define NICK_SET_HIDE_MASK_ON 137 +#define NICK_SET_HIDE_MASK_OFF 138 +#define NICK_SET_HIDE_QUIT_ON 139 +#define NICK_SET_HIDE_QUIT_OFF 140 +#define NICK_SET_TIMEZONE_SYNTAX 141 +#define NICK_SET_TIMEZONE_TO 142 +#define NICK_SET_TIMEZONE_DEFAULT 143 +#define NICK_SET_MAINNICK_NOT_FOUND 144 +#define NICK_SET_MAINNICK_CHANGED 145 +#define NICK_SET_NOEXPIRE_SYNTAX 146 +#define NICK_SET_NOEXPIRE_ON 147 +#define NICK_SET_NOEXPIRE_OFF 148 +#define NICK_UNSET_SYNTAX 149 +#define NICK_UNSET_SYNTAX_REQ_EMAIL 150 +#define NICK_UNSET_URL 151 +#define NICK_UNSET_EMAIL 152 +#define NICK_UNSET_INFO 153 +#define NICK_UNSET_EMAIL_BAD 154 +#define NICK_UNSET_EMAIL_OTHER_BAD 155 +#define NICK_ACCESS_SYNTAX 156 +#define NICK_ACCESS_ALREADY_PRESENT 157 +#define NICK_ACCESS_REACHED_LIMIT 158 +#define NICK_ACCESS_NO_NICKS 159 +#define NICK_ACCESS_ADDED 160 +#define NICK_ACCESS_NOT_FOUND 161 +#define NICK_ACCESS_DELETED 162 +#define NICK_ACCESS_LIST_EMPTY 163 +#define NICK_ACCESS_LIST 164 +#define NICK_ACCESS_LIST_X_EMPTY 165 +#define NICK_ACCESS_LIST_X 166 +#define NICK_OLD_LINK_SYNTAX 167 +#define NICK_LINK_SYNTAX 168 +#define NICK_LINK_DISABLED 169 +#define NICK_LINK_FAILED 170 +#define NICK_CANNOT_BE_LINKED 171 +#define NICK_OLD_LINK_SAME 172 +#define NICK_LINK_SAME 173 +#define NICK_LINK_ALREADY_LINKED 174 +#define NICK_LINK_IN_USE 175 +#define NICK_LINK_TOO_MANY 176 +#define NICK_LINK_TOO_MANY_NICKS 177 +#define NICK_OLD_LINK_TOO_MANY_CHANNELS 178 +#define NICK_OLD_LINKED 179 +#define NICK_LINKED 180 +#define NICK_OLD_UNLINK_SYNTAX 181 +#define NICK_UNLINK_SYNTAX 182 +#define NICK_UNLINK_OPER_SYNTAX 183 +#define NICK_UNLINK_DISABLED 184 +#define NICK_UNLINK_FAILED 185 +#define NICK_UNLINK_SAME 186 +#define NICK_OLD_UNLINK_NOT_LINKED 187 +#define NICK_UNLINK_NOT_LINKED_YOURS 188 +#define NICK_UNLINK_NOT_LINKED 189 +#define NICK_OLD_UNLINKED 190 +#define NICK_UNLINKED 191 +#define NICK_X_UNLINKED 192 +#define NICK_OLD_LISTLINKS_SYNTAX 193 +#define NICK_LISTLINKS_SYNTAX 194 +#define NICK_LISTLINKS_HEADER 195 +#define NICK_LISTLINKS_FOOTER 196 +#define NICK_INFO_SYNTAX 197 +#define NICK_INFO_REALNAME 198 +#define NICK_INFO_ADDRESS 199 +#define NICK_INFO_ADDRESS_ONLINE 200 +#define NICK_INFO_ADDRESS_ONLINE_NOHOST 201 +#define NICK_INFO_TIME_REGGED 202 +#define NICK_INFO_LAST_SEEN 203 +#define NICK_INFO_LAST_QUIT 204 +#define NICK_INFO_URL 205 +#define NICK_INFO_EMAIL 206 +#define NICK_INFO_EMAIL_UNAUTHED 207 +#define NICK_INFO_INFO 208 +#define NICK_INFO_OPTIONS 209 +#define NICK_INFO_OPT_KILL 210 +#define NICK_INFO_OPT_SECURE 211 +#define NICK_INFO_OPT_PRIVATE 212 +#define NICK_INFO_OPT_NONE 213 +#define NICK_INFO_NO_EXPIRE 214 +#define NICK_INFO_SUSPEND_DETAILS 215 +#define NICK_INFO_SUSPEND_REASON 216 +#define NICK_INFO_SHOW_ALL 217 +#define NICK_LISTCHANS_SYNTAX 218 +#define NICK_LISTCHANS_NONE 219 +#define NICK_LISTCHANS_HEADER 220 +#define NICK_LISTCHANS_END 221 +#define NICK_LIST_SYNTAX 222 +#define NICK_LIST_OPER_SYNTAX 223 +#define NICK_LIST_OPER_SYNTAX_AUTH 224 +#define NICK_LIST_HEADER 225 +#define NICK_LIST_RESULTS 226 +#define NICK_LISTEMAIL_NONE 227 +#define NICK_RECOVER_SYNTAX 228 +#define NICK_NO_RECOVER_SELF 229 +#define NICK_RECOVERED 230 +#define NICK_RELEASE_SYNTAX 231 +#define NICK_RELEASE_NOT_HELD 232 +#define NICK_RELEASED 233 +#define NICK_GHOST_SYNTAX 234 +#define NICK_NO_GHOST_SELF 235 +#define NICK_GHOST_KILLED 236 +#define NICK_GETPASS_SYNTAX 237 +#define NICK_GETPASS_UNAVAILABLE 238 +#define NICK_GETPASS_PASSWORD_IS 239 +#define NICK_FORBID_SYNTAX 240 +#define NICK_FORBID_SUCCEEDED 241 +#define NICK_FORBID_FAILED 242 +#define NICK_SUSPEND_SYNTAX 243 +#define NICK_SUSPEND_SUCCEEDED 244 +#define NICK_SUSPEND_ALREADY_SUSPENDED 245 +#define NICK_UNSUSPEND_SYNTAX 246 +#define NICK_UNSUSPEND_SUCCEEDED 247 +#define NICK_UNSUSPEND_NOT_SUSPENDED 248 +#define NICK_AJOIN_SYNTAX 249 +#define NICK_AJOIN_ADD_SYNTAX 250 +#define NICK_AJOIN_DEL_SYNTAX 251 +#define NICK_AJOIN_ALREADY_PRESENT 252 +#define NICK_AJOIN_LIST_FULL 253 +#define NICK_AJOIN_ADDED 254 +#define NICK_AJOIN_NOT_FOUND 255 +#define NICK_AJOIN_DELETED 256 +#define NICK_AJOIN_LIST_EMPTY 257 +#define NICK_AJOIN_LIST 258 +#define NICK_AJOIN_LIST_X_EMPTY 259 +#define NICK_AJOIN_LIST_X 260 +#define NICK_AUTH_SENT 261 +#define NICK_AUTH_FOR_REGISTER 262 +#define NICK_AUTH_FOR_SET_EMAIL 263 +#define NICK_AUTH_NOT_NEEDED 264 +#define NICK_AUTH_NO_AUTHCODE 265 +#define NICK_AUTH_HAS_AUTHCODE 266 +#define PASSWORD_WARNING_FOR_AUTH 267 +#define NICK_AUTH_MAIL_SUBJECT 268 +#define NICK_AUTH_MAIL_BODY 269 +#define NICK_AUTH_MAIL_TEXT_REG 270 +#define NICK_AUTH_MAIL_TEXT_EMAIL 271 +#define NICK_AUTH_MAIL_TEXT_SENDAUTH 272 +#define NICK_AUTH_MAIL_BODY_SETAUTH 273 +#define NICK_AUTH_SYNTAX 274 +#define NICK_AUTH_DISABLED 275 +#define NICK_AUTH_FAILED 276 +#define NICK_AUTH_SUCCEEDED_REGISTER 277 +#define NICK_AUTH_SUCCEEDED_SET_EMAIL 278 +#define NICK_AUTH_SUCCEEDED_SETAUTH 279 +#define NICK_SENDAUTH_SYNTAX 280 +#define NICK_SENDAUTH_TOO_SOON 281 +#define NICK_SENDAUTH_FAILED 282 +#define NICK_SETAUTH_SYNTAX 283 +#define NICK_SETAUTH_NO_EMAIL 284 +#define NICK_SETAUTH_AUTHCODE_SET 285 +#define NICK_SETAUTH_SEND_FAILED 286 +#define NICK_SETAUTH_SEND_TEMPFAIL 287 +#define NICK_SETAUTH_USER_NOTICE 288 +#define NICK_GETAUTH_SYNTAX 289 +#define NICK_GETAUTH_AUTHCODE_IS 290 +#define NICK_CLEARAUTH_SYNTAX 291 +#define NICK_CLEARAUTH_CLEARED 292 +#define NICK_SENDPASS_MAIL_SUBJECT 293 +#define NICK_SENDPASS_MAIL_BODY 294 +#define NICK_SENDPASS_SYNTAX 295 +#define NICK_SENDPASS_FAILED 296 +#define NICK_SENDPASS_NO_EMAIL 297 +#define NICK_SENDPASS_NOT_AUTHED 298 +#define NICK_SENDPASS_TOO_SOON 299 +#define NICK_SENDPASS_SENT 300 +#define CHAN_LEVEL_AUTOOP 301 +#define CHAN_LEVEL_AUTOVOICE 302 +#define CHAN_LEVEL_INVITE 303 +#define CHAN_LEVEL_AKICK 304 +#define CHAN_LEVEL_SET 305 +#define CHAN_LEVEL_CLEAR 306 +#define CHAN_LEVEL_UNBAN 307 +#define CHAN_LEVEL_OPDEOP 308 +#define CHAN_LEVEL_ACCESS_LIST 309 +#define CHAN_LEVEL_ACCESS_CHANGE 310 +#define CHAN_LEVEL_MEMO 311 +#define CHAN_LEVEL_VOICE 312 +#define CHAN_LEVEL_AUTOHALFOP 313 +#define CHAN_LEVEL_HALFOP 314 +#define CHAN_LEVEL_AUTOPROTECT 315 +#define CHAN_LEVEL_PROTECT 316 +#define CHAN_LEVEL_KICK 317 +#define CHAN_LEVEL_STATUS 318 +#define CHAN_LEVEL_TOPIC 319 +#define CHAN_IS_REGISTERED 320 +#define CHAN_MAY_NOT_BE_USED 321 +#define CHAN_NOT_ALLOWED_TO_JOIN 322 +#define CHAN_MUST_IDENTIFY_NICK 323 +#define CHAN_BOUNCY_MODES 324 +#define CHAN_REGISTER_SYNTAX 325 +#define CHAN_REGISTER_DISABLED 326 +#define CHAN_REGISTER_SHORT_CHANNEL 327 +#define CHAN_REGISTER_NOT_LOCAL 328 +#define CHAN_REGISTER_INVALID_NAME 329 +#define CHAN_MUST_REGISTER_NICK 330 +#define CHAN_MAY_NOT_BE_REGISTERED 331 +#define CHAN_ALREADY_REGISTERED 332 +#define CHAN_MUST_BE_CHANOP 333 +#define CHAN_REACHED_CHANNEL_LIMIT 334 +#define CHAN_EXCEEDED_CHANNEL_LIMIT 335 +#define CHAN_REGISTRATION_FAILED 336 +#define CHAN_REGISTERED 337 +#define CHAN_PASSWORD_IS 338 +#define CHAN_IDENTIFY_SYNTAX 339 +#define CHAN_IDENTIFY_FAILED 340 +#define CHAN_IDENTIFY_SUCCEEDED 341 +#define CHAN_DROP_SYNTAX 342 +#define CHAN_DROP_DISABLED 343 +#define CHAN_DROPPED 344 +#define CHAN_SET_SYNTAX 345 +#define CHAN_SET_DISABLED 346 +#define CHAN_SET_UNKNOWN_OPTION 347 +#define CHAN_SET_FOUNDER_TOO_MANY_CHANS 348 +#define CHAN_FOUNDER_CHANGED 349 +#define CHAN_SUCCESSOR_CHANGED 350 +#define CHAN_SUCCESSOR_IS_FOUNDER 351 +#define CHAN_SET_PASSWORD_FAILED 352 +#define CHAN_PASSWORD_CHANGED 353 +#define CHAN_PASSWORD_CHANGED_TO 354 +#define CHAN_DESC_CHANGED 355 +#define CHAN_URL_CHANGED 356 +#define CHAN_EMAIL_CHANGED 357 +#define CHAN_ENTRY_MSG_CHANGED 358 +#define CHAN_SET_MLOCK_NEED_PLUS_MINUS 359 +#define CHAN_SET_MLOCK_NEED_PARAM 360 +#define CHAN_SET_MLOCK_LIMIT_POSITIVE 361 +#define CHAN_SET_MLOCK_MODE_REG_BAD 362 +#define CHAN_SET_MLOCK_LINK_BAD 363 +#define CHAN_SET_MLOCK_LINK_SAME 364 +#define CHAN_SET_MLOCK_LINK_NO_LIMIT 365 +#define CHAN_SET_MLOCK_FLOOD_BAD 366 +#define CHAN_SET_MLOCK_UNKNOWN_CHAR 367 +#define CHAN_SET_MLOCK_CANNOT_LOCK 368 +#define CHAN_MLOCK_CHANGED 369 +#define CHAN_MLOCK_REMOVED 370 +#define CHAN_SET_HIDE_SYNTAX 371 +#define CHAN_SET_HIDE_EMAIL_ON 372 +#define CHAN_SET_HIDE_EMAIL_OFF 373 +#define CHAN_SET_HIDE_TOPIC_ON 374 +#define CHAN_SET_HIDE_TOPIC_OFF 375 +#define CHAN_SET_HIDE_MLOCK_ON 376 +#define CHAN_SET_HIDE_MLOCK_OFF 377 +#define CHAN_SET_KEEPTOPIC_SYNTAX 378 +#define CHAN_SET_KEEPTOPIC_ON 379 +#define CHAN_SET_KEEPTOPIC_OFF 380 +#define CHAN_SET_TOPICLOCK_SYNTAX 381 +#define CHAN_SET_TOPICLOCK_ON 382 +#define CHAN_SET_TOPICLOCK_OFF 383 +#define CHAN_SET_PRIVATE_SYNTAX 384 +#define CHAN_SET_PRIVATE_ON 385 +#define CHAN_SET_PRIVATE_OFF 386 +#define CHAN_SET_SECUREOPS_SYNTAX 387 +#define CHAN_SET_SECUREOPS_ON 388 +#define CHAN_SET_SECUREOPS_OFF 389 +#define CHAN_SET_LEAVEOPS_SYNTAX 390 +#define CHAN_SET_LEAVEOPS_ON 391 +#define CHAN_SET_LEAVEOPS_OFF 392 +#define CHAN_SET_RESTRICTED_SYNTAX 393 +#define CHAN_SET_RESTRICTED_ON 394 +#define CHAN_SET_RESTRICTED_OFF 395 +#define CHAN_SET_SECURE_SYNTAX 396 +#define CHAN_SET_SECURE_ON 397 +#define CHAN_SET_SECURE_OFF 398 +#define CHAN_SET_OPNOTICE_SYNTAX 399 +#define CHAN_SET_OPNOTICE_ON 400 +#define CHAN_SET_OPNOTICE_OFF 401 +#define CHAN_SET_ENFORCE_SYNTAX 402 +#define CHAN_SET_ENFORCE_ON 403 +#define CHAN_SET_ENFORCE_OFF 404 +#define CHAN_SET_NOEXPIRE_SYNTAX 405 +#define CHAN_SET_NOEXPIRE_ON 406 +#define CHAN_SET_NOEXPIRE_OFF 407 +#define CHAN_UNSET_SYNTAX 408 +#define CHAN_SUCCESSOR_UNSET 409 +#define CHAN_URL_UNSET 410 +#define CHAN_EMAIL_UNSET 411 +#define CHAN_ENTRY_MSG_UNSET 412 +#define CHAN_ACCESS_SYNTAX 413 +#define CHAN_ACCESS_DISABLED 414 +#define CHAN_ACCESS_LEVEL_NONZERO 415 +#define CHAN_ACCESS_LEVEL_RANGE 416 +#define CHAN_ACCESS_NICKS_ONLY 417 +#define CHAN_ACCESS_REACHED_LIMIT 418 +#define CHAN_ACCESS_LEVEL_UNCHANGED 419 +#define CHAN_ACCESS_LEVEL_CHANGED 420 +#define CHAN_ACCESS_ADDED 421 +#define CHAN_ACCESS_NO_SUCH_ENTRY 422 +#define CHAN_ACCESS_NOT_FOUND 423 +#define CHAN_ACCESS_NO_MATCH 424 +#define CHAN_ACCESS_DELETED 425 +#define CHAN_ACCESS_DELETED_ONE 426 +#define CHAN_ACCESS_DELETED_SEVERAL 427 +#define CHAN_ACCESS_LIST_EMPTY 428 +#define CHAN_ACCESS_LIST_HEADER 429 +#define CHAN_ACCESS_LIST_FORMAT 430 +#define CHAN_ACCESS_COUNT 431 +#define CHAN_SOP_SYNTAX 432 +#define CHAN_AOP_SYNTAX 433 +#define CHAN_HOP_SYNTAX 434 +#define CHAN_VOP_SYNTAX 435 +#define CHAN_XOP_ADDED 436 +#define CHAN_XOP_LEVEL_CHANGED 437 +#define CHAN_XOP_LEVEL_UNCHANGED 438 +#define CHAN_XOP_NICKS_ONLY 439 +#define CHAN_XOP_NICKS_ONLY_HOP 440 +#define CHAN_XOP_REACHED_LIMIT 441 +#define CHAN_XOP_REACHED_LIMIT_HOP 442 +#define CHAN_XOP_NOT_FOUND 443 +#define CHAN_XOP_NO_SUCH_ENTRY 444 +#define CHAN_XOP_NO_MATCH 445 +#define CHAN_XOP_DELETED 446 +#define CHAN_XOP_DELETED_ONE 447 +#define CHAN_XOP_DELETED_SEVERAL 448 +#define CHAN_XOP_LIST_EMPTY 449 +#define CHAN_XOP_LIST_HEADER 450 +#define CHAN_XOP_LIST_FORMAT 451 +#define CHAN_XOP_COUNT 452 +#define CHAN_AKICK_SYNTAX 453 +#define CHAN_AKICK_DISABLED 454 +#define CHAN_AKICK_ALREADY_EXISTS 455 +#define CHAN_AKICK_REACHED_LIMIT 456 +#define CHAN_AKICK_ADDED 457 +#define CHAN_AKICK_NO_SUCH_ENTRY 458 +#define CHAN_AKICK_NOT_FOUND 459 +#define CHAN_AKICK_NO_MATCH 460 +#define CHAN_AKICK_DELETED 461 +#define CHAN_AKICK_DELETED_ONE 462 +#define CHAN_AKICK_DELETED_SEVERAL 463 +#define CHAN_AKICK_LIST_EMPTY 464 +#define CHAN_AKICK_LIST_HEADER 465 +#define CHAN_AKICK_VIEW_FORMAT 466 +#define CHAN_AKICK_VIEW_UNUSED_FORMAT 467 +#define CHAN_AKICK_ENFORCE_DONE 468 +#define CHAN_AKICK_COUNT 469 +#define CHAN_LEVELS_SYNTAX 470 +#define CHAN_LEVELS_RANGE 471 +#define CHAN_LEVELS_CHANGED 472 +#define CHAN_LEVELS_UNKNOWN 473 +#define CHAN_LEVELS_DISABLED 474 +#define CHAN_LEVELS_LIST_HEADER 475 +#define CHAN_LEVELS_LIST_DISABLED 476 +#define CHAN_LEVELS_LIST_FOUNDER 477 +#define CHAN_LEVELS_LIST_NORMAL 478 +#define CHAN_LEVELS_RESET 479 +#define CHAN_INFO_SYNTAX 480 +#define CHAN_INFO_HEADER 481 +#define CHAN_INFO_FOUNDER 482 +#define CHAN_INFO_SUCCESSOR 483 +#define CHAN_INFO_DESCRIPTION 484 +#define CHAN_INFO_ENTRYMSG 485 +#define CHAN_INFO_TIME_REGGED 486 +#define CHAN_INFO_LAST_USED 487 +#define CHAN_INFO_LAST_TOPIC 488 +#define CHAN_INFO_TOPIC_SET_BY 489 +#define CHAN_INFO_URL 490 +#define CHAN_INFO_EMAIL 491 +#define CHAN_INFO_OPTIONS 492 +#define CHAN_INFO_OPT_PRIVATE 493 +#define CHAN_INFO_OPT_KEEPTOPIC 494 +#define CHAN_INFO_OPT_TOPICLOCK 495 +#define CHAN_INFO_OPT_SECUREOPS 496 +#define CHAN_INFO_OPT_LEAVEOPS 497 +#define CHAN_INFO_OPT_RESTRICTED 498 +#define CHAN_INFO_OPT_SECURE 499 +#define CHAN_INFO_OPT_OPNOTICE 500 +#define CHAN_INFO_OPT_ENFORCE 501 +#define CHAN_INFO_OPT_NONE 502 +#define CHAN_INFO_MODE_LOCK 503 +#define CHAN_INFO_NO_EXPIRE 504 +#define CHAN_INFO_SUSPEND_DETAILS 505 +#define CHAN_INFO_SUSPEND_REASON 506 +#define CHAN_INFO_SHOW_ALL 507 +#define CHAN_LIST_SYNTAX 508 +#define CHAN_LIST_OPER_SYNTAX 509 +#define CHAN_LIST_HEADER 510 +#define CHAN_LIST_END 511 +#define CHAN_INVITE_SYNTAX 512 +#define CHAN_INVITE_OK 513 +#define CHAN_OPVOICE_SYNTAX 514 +#define CHAN_OP_SUCCEEDED 515 +#define CHAN_OP_ALREADY 516 +#define CHAN_OP_FAILED 517 +#define CHAN_DEOP_SUCCEEDED 518 +#define CHAN_DEOP_ALREADY 519 +#define CHAN_DEOP_FAILED 520 +#define CHAN_VOICE_SUCCEEDED 521 +#define CHAN_VOICE_ALREADY 522 +#define CHAN_VOICE_FAILED 523 +#define CHAN_DEVOICE_SUCCEEDED 524 +#define CHAN_DEVOICE_ALREADY 525 +#define CHAN_DEVOICE_FAILED 526 +#define CHAN_HALFOP_SUCCEEDED 527 +#define CHAN_HALFOP_ALREADY 528 +#define CHAN_HALFOP_FAILED 529 +#define CHAN_DEHALFOP_SUCCEEDED 530 +#define CHAN_DEHALFOP_ALREADY 531 +#define CHAN_DEHALFOP_FAILED 532 +#define CHAN_PROTECT_SUCCEEDED 533 +#define CHAN_PROTECT_ALREADY 534 +#define CHAN_PROTECT_FAILED 535 +#define CHAN_DEPROTECT_SUCCEEDED 536 +#define CHAN_DEPROTECT_ALREADY 537 +#define CHAN_DEPROTECT_FAILED 538 +#define CHAN_UNBAN_SYNTAX 539 +#define CHAN_UNBANNED 540 +#define CHAN_KICK_SYNTAX 541 +#define CHAN_KICK_PROTECTED 542 +#define CHAN_KICKED 543 +#define CHAN_TOPIC_SYNTAX 544 +#define CHAN_CLEAR_SYNTAX 545 +#define CHAN_CLEARED_BANS 546 +#define CHAN_CLEARED_EXCEPTIONS 547 +#define CHAN_CLEARED_MODES 548 +#define CHAN_CLEARED_OPS 549 +#define CHAN_CLEARED_HALFOPS 550 +#define CHAN_CLEARED_VOICES 551 +#define CHAN_CLEARED_USERS 552 +#define CHAN_GETPASS_SYNTAX 553 +#define CHAN_GETPASS_UNAVAILABLE 554 +#define CHAN_GETPASS_PASSWORD_IS 555 +#define CHAN_FORBID_SYNTAX 556 +#define CHAN_FORBID_SHORT_CHANNEL 557 +#define CHAN_FORBID_SUCCEEDED 558 +#define CHAN_FORBID_FAILED 559 +#define CHAN_SUSPEND_SYNTAX 560 +#define CHAN_SUSPEND_SUCCEEDED 561 +#define CHAN_SUSPEND_ALREADY_SUSPENDED 562 +#define CHAN_UNSUSPEND_SYNTAX 563 +#define CHAN_UNSUSPEND_SUCCEEDED 564 +#define CHAN_UNSUSPEND_NOT_SUSPENDED 565 +#define CHAN_SENDPASS_MAIL_SUBJECT 566 +#define CHAN_SENDPASS_MAIL_BODY 567 +#define CHAN_SENDPASS_SYNTAX 568 +#define CHAN_SENDPASS_FAILED 569 +#define CHAN_SENDPASS_FOUNDER_ONLY 570 +#define CHAN_SENDPASS_NO_EMAIL 571 +#define CHAN_SENDPASS_TOO_SOON 572 +#define CHAN_SENDPASS_SENT 573 +#define MEMO_HAVE_NEW_MEMO 574 +#define MEMO_HAVE_NEW_MEMOS 575 +#define MEMO_TYPE_READ_LAST 576 +#define MEMO_TYPE_READ_NUM 577 +#define MEMO_TYPE_LIST_NEW 578 +#define MEMO_AT_LIMIT 579 +#define MEMO_OVER_LIMIT 580 +#define MEMO_NEW_MEMO_ARRIVED 581 +#define MEMO_HAVE_NO_MEMOS 582 +#define MEMO_X_HAS_NO_MEMOS 583 +#define MEMO_DOES_NOT_EXIST 584 +#define MEMO_LIST_NOT_FOUND 585 +#define MEMO_SEND_SYNTAX 586 +#define MEMO_SEND_DISABLED 587 +#define MEMO_SEND_PLEASE_WAIT 588 +#define MEMO_X_GETS_NO_MEMOS 589 +#define MEMO_X_HAS_TOO_MANY_MEMOS 590 +#define MEMO_SENT 591 +#define MEMO_LIST_SYNTAX 592 +#define MEMO_HAVE_NO_NEW_MEMOS 593 +#define MEMO_X_HAS_NO_NEW_MEMOS 594 +#define MEMO_LIST_MEMOS 595 +#define MEMO_LIST_NEW_MEMOS 596 +#define MEMO_LIST_CHAN_MEMOS 597 +#define MEMO_LIST_CHAN_NEW_MEMOS 598 +#define MEMO_LIST_HEADER 599 +#define MEMO_LIST_FORMAT 600 +#define MEMO_READ_SYNTAX 601 +#define MEMO_HEADER 602 +#define MEMO_CHAN_HEADER 603 +#define MEMO_SAVE_SYNTAX 604 +#define MEMO_SAVED_ONE 605 +#define MEMO_SAVED_SEVERAL 606 +#define MEMO_DEL_SYNTAX 607 +#define MEMO_DELETED_NONE 608 +#define MEMO_DELETED_ONE 609 +#define MEMO_DELETED_SEVERAL 610 +#define MEMO_DELETED_ALL 611 +#define MEMO_SET_SYNTAX 612 +#define MEMO_SET_DISABLED 613 +#define MEMO_SET_UNKNOWN_OPTION 614 +#define MEMO_SET_NOTIFY_SYNTAX 615 +#define MEMO_SET_NOTIFY_ON 616 +#define MEMO_SET_NOTIFY_LOGON 617 +#define MEMO_SET_NOTIFY_NEW 618 +#define MEMO_SET_NOTIFY_OFF 619 +#define MEMO_SET_LIMIT_SYNTAX 620 +#define MEMO_SET_LIMIT_OPER_SYNTAX 621 +#define MEMO_SET_YOUR_LIMIT_FORBIDDEN 622 +#define MEMO_SET_LIMIT_FORBIDDEN 623 +#define MEMO_SET_YOUR_LIMIT_TOO_HIGH 624 +#define MEMO_SET_LIMIT_TOO_HIGH 625 +#define MEMO_SET_LIMIT_OVERFLOW 626 +#define MEMO_SET_YOUR_LIMIT 627 +#define MEMO_SET_YOUR_LIMIT_ZERO 628 +#define MEMO_SET_YOUR_LIMIT_DEFAULT 629 +#define MEMO_UNSET_YOUR_LIMIT 630 +#define MEMO_SET_LIMIT 631 +#define MEMO_SET_LIMIT_ZERO 632 +#define MEMO_SET_LIMIT_DEFAULT 633 +#define MEMO_UNSET_LIMIT 634 +#define MEMO_INFO_NO_MEMOS 635 +#define MEMO_INFO_MEMO 636 +#define MEMO_INFO_MEMO_UNREAD 637 +#define MEMO_INFO_MEMOS 638 +#define MEMO_INFO_MEMOS_ONE_UNREAD 639 +#define MEMO_INFO_MEMOS_SOME_UNREAD 640 +#define MEMO_INFO_MEMOS_ALL_UNREAD 641 +#define MEMO_INFO_LIMIT 642 +#define MEMO_INFO_HARD_LIMIT 643 +#define MEMO_INFO_LIMIT_ZERO 644 +#define MEMO_INFO_HARD_LIMIT_ZERO 645 +#define MEMO_INFO_NO_LIMIT 646 +#define MEMO_INFO_NOTIFY_OFF 647 +#define MEMO_INFO_NOTIFY_ON 648 +#define MEMO_INFO_NOTIFY_RECEIVE 649 +#define MEMO_INFO_NOTIFY_SIGNON 650 +#define MEMO_INFO_X_NO_MEMOS 651 +#define MEMO_INFO_X_MEMO 652 +#define MEMO_INFO_X_MEMO_UNREAD 653 +#define MEMO_INFO_X_MEMOS 654 +#define MEMO_INFO_X_MEMOS_ONE_UNREAD 655 +#define MEMO_INFO_X_MEMOS_SOME_UNREAD 656 +#define MEMO_INFO_X_MEMOS_ALL_UNREAD 657 +#define MEMO_INFO_X_LIMIT 658 +#define MEMO_INFO_X_HARD_LIMIT 659 +#define MEMO_INFO_X_NO_LIMIT 660 +#define MEMO_INFO_X_NOTIFY_OFF 661 +#define MEMO_INFO_X_NOTIFY_ON 662 +#define MEMO_INFO_X_NOTIFY_RECEIVE 663 +#define MEMO_INFO_X_NOTIFY_SIGNON 664 +#define MEMO_FORWARD_MAIL_SUBJECT 665 +#define MEMO_FORWARD_MAIL_BODY 666 +#define MEMO_FORWARD_SYNTAX 667 +#define MEMO_FORWARD_NEED_EMAIL 668 +#define MEMO_FORWARD_PLEASE_WAIT 669 +#define MEMO_FORWARD_FAILED 670 +#define MEMO_FORWARDED_NONE 671 +#define MEMO_FORWARDED_ONE 672 +#define MEMO_FORWARDED_SEVERAL 673 +#define MEMO_FORWARDED_ALL 674 +#define MEMO_FORWARDED_ALSO_TEMPFAIL 675 +#define MEMO_FORWARDED_ALSO_PERMFAIL 676 +#define MEMO_SET_FORWARD_SYNTAX 677 +#define MEMO_SET_FORWARD_ON 678 +#define MEMO_SET_FORWARD_COPY 679 +#define MEMO_SET_FORWARD_OFF 680 +#define MEMO_IGNORE_SYNTAX 681 +#define MEMO_IGNORE_ADD_SYNTAX 682 +#define MEMO_IGNORE_DEL_SYNTAX 683 +#define MEMO_IGNORE_LIST_FULL 684 +#define MEMO_IGNORE_ALREADY_PRESENT 685 +#define MEMO_IGNORE_ADDED 686 +#define MEMO_IGNORE_NOT_FOUND 687 +#define MEMO_IGNORE_DELETED 688 +#define MEMO_IGNORE_LIST_EMPTY 689 +#define MEMO_IGNORE_LIST 690 +#define MEMO_IGNORE_LIST_X_EMPTY 691 +#define MEMO_IGNORE_LIST_X 692 +#define OPER_BOUNCY_MODES 693 +#define OPER_BOUNCY_MODES_U_LINE 694 +#define OPER_GLOBAL_SYNTAX 695 +#define OPER_STATS_UNKNOWN_OPTION 696 +#define OPER_STATS_RESET_USER_COUNT 697 +#define OPER_STATS_CURRENT_USERS 698 +#define OPER_STATS_MAX_USERS 699 +#define OPER_STATS_UPTIME_DHMS 700 +#define OPER_STATS_UPTIME_HM_MS 701 +#define OPER_STATS_KBYTES_READ 702 +#define OPER_STATS_KBYTES_WRITTEN 703 +#define OPER_STATS_NETBUF_SOCK 704 +#define OPER_STATS_NETBUF_SOCK_PERCENT 705 +#define OPER_STATS_NETBUF_TOTAL 706 +#define OPER_STATS_NETBUF_TOTAL_PERCENT 707 +#define OPER_STATS_ALL_USER_MEM 708 +#define OPER_STATS_ALL_CHANNEL_MEM 709 +#define OPER_STATS_ALL_SERVER_MEM 710 +#define OPER_STATS_ALL_NICKGROUPINFO_MEM 711 +#define OPER_STATS_ALL_NICKINFO_MEM 712 +#define OPER_STATS_ALL_CHANSERV_MEM 713 +#define OPER_STATS_ALL_STATSERV_MEM 714 +#define OPER_STATS_ALL_NEWS_MEM 715 +#define OPER_STATS_ALL_AKILL_MEM 716 +#define OPER_STATS_ALL_EXCEPTION_MEM 717 +#define OPER_STATS_ALL_SGLINE_MEM 718 +#define OPER_STATS_ALL_SQLINE_MEM 719 +#define OPER_STATS_ALL_SZLINE_MEM 720 +#define OPER_STATS_ALL_SESSION_MEM 721 +#define OPER_MODE_SYNTAX 722 +#define OPER_CLEARMODES_SYNTAX 723 +#define OPER_CLEARMODES_DONE 724 +#define OPER_CLEARMODES_EXCEPT_DONE 725 +#define OPER_CLEARMODES_ALL_DONE 726 +#define OPER_CLEARCHAN_SYNTAX 727 +#define OPER_CLEARCHAN_DONE 728 +#define OPER_KICK_SYNTAX 729 +#define OPER_ADMIN_SYNTAX 730 +#define OPER_ADMIN_ADD_SYNTAX 731 +#define OPER_ADMIN_DEL_SYNTAX 732 +#define OPER_ADMIN_NO_NICKSERV 733 +#define OPER_ADMIN_EXISTS 734 +#define OPER_ADMIN_ADDED 735 +#define OPER_ADMIN_TOO_MANY 736 +#define OPER_ADMIN_REMOVED 737 +#define OPER_ADMIN_NOT_FOUND 738 +#define OPER_ADMIN_LIST_HEADER 739 +#define OPER_OPER_SYNTAX 740 +#define OPER_OPER_ADD_SYNTAX 741 +#define OPER_OPER_DEL_SYNTAX 742 +#define OPER_OPER_NO_NICKSERV 743 +#define OPER_OPER_EXISTS 744 +#define OPER_OPER_ADDED 745 +#define OPER_OPER_TOO_MANY 746 +#define OPER_OPER_REMOVED 747 +#define OPER_OPER_NOT_FOUND 748 +#define OPER_OPER_LIST_HEADER 749 +#define OPER_AKILL_SYNTAX 750 +#define OPER_AKILL_ADD_SYNTAX 751 +#define OPER_AKILL_DEL_SYNTAX 752 +#define OPER_TOO_MANY_AKILLS 753 +#define OPER_AKILL_EXISTS 754 +#define OPER_AKILL_NO_NICK 755 +#define OPER_AKILL_MASK_TOO_GENERAL 756 +#define OPER_AKILL_EXPIRY_LIMITED 757 +#define OPER_AKILL_ADDED 758 +#define OPER_AKILL_REMOVED 759 +#define OPER_AKILL_NOT_FOUND 760 +#define OPER_AKILL_LIST_HEADER 761 +#define OPER_AKILL_LIST_FORMAT 762 +#define OPER_AKILL_VIEW_FORMAT 763 +#define OPER_AKILL_VIEW_UNUSED_FORMAT 764 +#define OPER_AKILL_COUNT 765 +#define OPER_EXCLUDE_SYNTAX 766 +#define OPER_EXCLUDE_ADD_SYNTAX 767 +#define OPER_EXCLUDE_DEL_SYNTAX 768 +#define OPER_TOO_MANY_EXCLUDES 769 +#define OPER_EXCLUDE_EXISTS 770 +#define OPER_EXCLUDE_ADDED 771 +#define OPER_EXCLUDE_REMOVED 772 +#define OPER_EXCLUDE_NOT_FOUND 773 +#define OPER_EXCLUDE_LIST_HEADER 774 +#define OPER_EXCLUDE_LIST_FORMAT 775 +#define OPER_EXCLUDE_VIEW_FORMAT 776 +#define OPER_EXCLUDE_VIEW_UNUSED_FORMAT 777 +#define OPER_EXCLUDE_COUNT 778 +#define OPER_SLINE_SYNTAX 779 +#define OPER_SLINE_ADD_SYNTAX 780 +#define OPER_SLINE_DEL_SYNTAX 781 +#define OPER_TOO_MANY_SLINES 782 +#define OPER_SLINE_EXISTS 783 +#define OPER_SLINE_ADDED 784 +#define OPER_SLINE_REMOVED 785 +#define OPER_SLINE_NOT_FOUND 786 +#define OPER_SLINE_LIST_HEADER 787 +#define OPER_SLINE_LIST_FORMAT 788 +#define OPER_SLINE_VIEW_FORMAT 789 +#define OPER_SLINE_VIEW_UNUSED_FORMAT 790 +#define OPER_SLINE_COUNT 791 +#define OPER_SZLINE_NOT_AVAIL 792 +#define OPER_SU_SYNTAX 793 +#define OPER_SU_NO_PASSWORD 794 +#define OPER_SU_SUCCEEDED 795 +#define OPER_SU_FAILED 796 +#define OPER_SET_SYNTAX 797 +#define OPER_SET_IGNORE_ON 798 +#define OPER_SET_IGNORE_OFF 799 +#define OPER_SET_IGNORE_ERROR 800 +#define OPER_SET_READONLY_ON 801 +#define OPER_SET_READONLY_OFF 802 +#define OPER_SET_READONLY_ERROR 803 +#define OPER_SET_DEBUG_ON 804 +#define OPER_SET_DEBUG_OFF 805 +#define OPER_SET_DEBUG_LEVEL 806 +#define OPER_SET_DEBUG_ERROR 807 +#define OPER_SET_SUPASS_FAILED 808 +#define OPER_SET_SUPASS_OK 809 +#define OPER_SET_SUPASS_NONE 810 +#define OPER_SET_UNKNOWN_OPTION 811 +#define OPER_JUPE_SYNTAX 812 +#define OPER_JUPE_INVALID_NAME 813 +#define OPER_JUPE_ALREADY_JUPED 814 +#define OPER_RAW_SYNTAX 815 +#define OPER_UPDATE_SYNTAX 816 +#define OPER_UPDATE_FORCE_FAILED 817 +#define OPER_UPDATING 818 +#define OPER_UPDATE_COMPLETE 819 +#define OPER_UPDATE_FAILED 820 +#define OPER_REHASHING 821 +#define OPER_REHASHED 822 +#define OPER_REHASH_ERROR 823 +#define OPER_IGNORE_LIST 824 +#define OPER_IGNORE_LIST_EMPTY 825 +#define OPER_KILLCLONES_SYNTAX 826 +#define OPER_KILLCLONES_UNKNOWN_NICK 827 +#define OPER_KILLCLONES_KILLED 828 +#define OPER_KILLCLONES_KILLED_AKILL 829 +#define OPER_EXCEPTION_SYNTAX 830 +#define OPER_EXCEPTION_ADD_SYNTAX 831 +#define OPER_EXCEPTION_DEL_SYNTAX 832 +#define OPER_EXCEPTION_MOVE_SYNTAX 833 +#define OPER_EXCEPTION_ALREADY_PRESENT 834 +#define OPER_EXCEPTION_TOO_MANY 835 +#define OPER_EXCEPTION_ADDED 836 +#define OPER_EXCEPTION_MOVED 837 +#define OPER_EXCEPTION_NO_SUCH_ENTRY 838 +#define OPER_EXCEPTION_NOT_FOUND 839 +#define OPER_EXCEPTION_NO_MATCH 840 +#define OPER_EXCEPTION_EMPTY 841 +#define OPER_EXCEPTION_DELETED 842 +#define OPER_EXCEPTION_DELETED_ONE 843 +#define OPER_EXCEPTION_DELETED_SEVERAL 844 +#define OPER_EXCEPTION_LIST_HEADER 845 +#define OPER_EXCEPTION_LIST_COLHEAD 846 +#define OPER_EXCEPTION_LIST_FORMAT 847 +#define OPER_EXCEPTION_VIEW_FORMAT 848 +#define OPER_EXCEPTION_INVALID_LIMIT 849 +#define OPER_EXCEPTION_INVALID_HOSTMASK 850 +#define OPER_SESSION_SYNTAX 851 +#define OPER_SESSION_LIST_SYNTAX 852 +#define OPER_SESSION_VIEW_SYNTAX 853 +#define OPER_SESSION_INVALID_THRESHOLD 854 +#define OPER_SESSION_NOT_FOUND 855 +#define OPER_SESSION_LIST_HEADER 856 +#define OPER_SESSION_LIST_COLHEAD 857 +#define OPER_SESSION_LIST_FORMAT 858 +#define OPER_SESSION_VIEW_FORMAT 859 +#define NEWS_LOGON_TEXT 860 +#define NEWS_OPER_TEXT 861 +#define NEWS_LOGON_SYNTAX 862 +#define NEWS_LOGON_LIST_HEADER 863 +#define NEWS_LOGON_LIST_ENTRY 864 +#define NEWS_LOGON_LIST_NONE 865 +#define NEWS_LOGON_ADD_SYNTAX 866 +#define NEWS_LOGON_ADD_FULL 867 +#define NEWS_LOGON_ADDED 868 +#define NEWS_LOGON_DEL_SYNTAX 869 +#define NEWS_LOGON_DEL_NOT_FOUND 870 +#define NEWS_LOGON_DELETED 871 +#define NEWS_LOGON_DEL_NONE 872 +#define NEWS_LOGON_DELETED_ALL 873 +#define NEWS_OPER_SYNTAX 874 +#define NEWS_OPER_LIST_HEADER 875 +#define NEWS_OPER_LIST_ENTRY 876 +#define NEWS_OPER_LIST_NONE 877 +#define NEWS_OPER_ADD_SYNTAX 878 +#define NEWS_OPER_ADD_FULL 879 +#define NEWS_OPER_ADDED 880 +#define NEWS_OPER_DEL_SYNTAX 881 +#define NEWS_OPER_DEL_NOT_FOUND 882 +#define NEWS_OPER_DELETED 883 +#define NEWS_OPER_DEL_NONE 884 +#define NEWS_OPER_DELETED_ALL 885 +#define NEWS_HELP_LOGON 886 +#define NEWS_HELP_OPER 887 +#define STAT_SERVERS_REMOVE_SERV_FIRST 888 +#define STAT_SERVERS_SERVER_EXISTS 889 +#define STAT_SERVERS_SYNTAX 890 +#define STAT_SERVERS_STATS_TOTAL 891 +#define STAT_SERVERS_STATS_ON_OFFLINE 892 +#define STAT_SERVERS_LASTQUIT_WAS 893 +#define STAT_SERVERS_LIST_HEADER 894 +#define STAT_SERVERS_LIST_FORMAT 895 +#define STAT_SERVERS_LIST_RESULTS 896 +#define STAT_SERVERS_VIEW_HEADER_ONLINE 897 +#define STAT_SERVERS_VIEW_HEADER_OFFLINE 898 +#define STAT_SERVERS_VIEW_LASTJOIN 899 +#define STAT_SERVERS_VIEW_LASTQUIT 900 +#define STAT_SERVERS_VIEW_QUITMSG 901 +#define STAT_SERVERS_VIEW_USERS_OPERS 902 +#define STAT_SERVERS_VIEW_RESULTS 903 +#define STAT_SERVERS_DELETE_SYNTAX 904 +#define STAT_SERVERS_DELETE_DONE 905 +#define STAT_SERVERS_COPY_SYNTAX 906 +#define STAT_SERVERS_COPY_DONE 907 +#define STAT_SERVERS_RENAME_SYNTAX 908 +#define STAT_SERVERS_RENAME_DONE 909 +#define STAT_USERS_SYNTAX 910 +#define STAT_USERS_TOTUSERS 911 +#define STAT_USERS_TOTOPERS 912 +#define STAT_USERS_SERVUSERS 913 +#define STAT_USERS_SERVOPERS 914 +#define NICK_HELP 915 +#define NICK_HELP_EXPIRES 916 +#define NICK_HELP_WARNING 917 +#define NICK_HELP_COMMANDS 918 +#define NICK_HELP_COMMANDS_AUTH 919 +#define NICK_HELP_COMMANDS_IDENTIFY 920 +#define NICK_HELP_COMMANDS_SENDPASS 921 +#define NICK_HELP_COMMANDS_DROP 922 +#define NICK_HELP_COMMANDS_LINK 923 +#define NICK_HELP_COMMANDS_OLDLINK 924 +#define NICK_HELP_COMMANDS_ACCESS 925 +#define NICK_HELP_COMMANDS_AJOIN 926 +#define NICK_HELP_COMMANDS_SET 927 +#define NICK_HELP_COMMANDS_LIST 928 +#define NICK_HELP_COMMANDS_LISTCHANS 929 +#define NICK_HELP_REGISTER 930 +#define NICK_HELP_REGISTER_EMAIL 931 +#define NICK_HELP_REGISTER_EMAIL_REQ 932 +#define NICK_HELP_REGISTER_EMAIL_AUTH 933 +#define NICK_HELP_REGISTER_END 934 +#define NICK_HELP_AUTH 935 +#define NICK_HELP_SENDAUTH 936 +#define NICK_HELP_SENDPASS 937 +#define NICK_HELP_IDENTIFY 938 +#define NICK_HELP_DROP 939 +#define NICK_HELP_DROP_LINK 940 +#define NICK_HELP_DROP_END 941 +#define NICK_HELP_OLD_LINK 942 +#define NICK_HELP_LINK 943 +#define NICK_HELP_OLD_UNLINK 944 +#define NICK_HELP_UNLINK 945 +#define NICK_HELP_LISTLINKS 946 +#define NICK_HELP_ACCESS 947 +#define NICK_HELP_SET 948 +#define NICK_HELP_SET_OPTION_MAINNICK 949 +#define NICK_HELP_SET_END 950 +#define NICK_HELP_SET_PASSWORD 951 +#define NICK_HELP_SET_LANGUAGE 952 +#define NICK_HELP_SET_URL 953 +#define NICK_HELP_SET_EMAIL 954 +#define NICK_HELP_SET_INFO 955 +#define NICK_HELP_SET_KILL 956 +#define NICK_HELP_SET_SECURE 957 +#define NICK_HELP_SET_PRIVATE 958 +#define NICK_HELP_SET_HIDE 959 +#define NICK_HELP_SET_TIMEZONE 960 +#define NICK_HELP_SET_MAINNICK 961 +#define NICK_HELP_UNSET 962 +#define NICK_HELP_UNSET_REQ_EMAIL 963 +#define NICK_HELP_RECOVER 964 +#define NICK_HELP_RELEASE 965 +#define NICK_HELP_GHOST 966 +#define NICK_HELP_INFO 967 +#define NICK_HELP_INFO_AUTH 968 +#define NICK_HELP_LISTCHANS 969 +#define NICK_HELP_LIST 970 +#define NICK_HELP_LIST_OPERSONLY 971 +#define NICK_HELP_LISTEMAIL 972 +#define NICK_HELP_STATUS 973 +#define NICK_HELP_AJOIN 974 +#define NICK_HELP_AJOIN_END 975 +#define NICK_HELP_AJOIN_END_CHANSERV 976 +#define NICK_OPER_HELP_COMMANDS 977 +#define NICK_OPER_HELP_COMMANDS_DROPEMAIL 978 +#define NICK_OPER_HELP_COMMANDS_GETPASS 979 +#define NICK_OPER_HELP_COMMANDS_FORBID 980 +#define NICK_OPER_HELP_COMMANDS_LISTLINKS 981 +#define NICK_OPER_HELP_COMMANDS_SETAUTH 982 +#define NICK_OPER_HELP_COMMANDS_END 983 +#define NICK_OPER_HELP_DROPNICK 984 +#define NICK_OPER_HELP_DROPEMAIL 985 +#define NICK_OPER_HELP_SET 986 +#define NICK_OPER_HELP_SET_NOEXPIRE 987 +#define NICK_OPER_HELP_UNSET 988 +#define NICK_OPER_HELP_OLD_UNLINK 989 +#define NICK_OPER_HELP_UNLINK 990 +#define NICK_OPER_HELP_OLD_LISTLINKS 991 +#define NICK_OPER_HELP_LISTLINKS 992 +#define NICK_OPER_HELP_ACCESS 993 +#define NICK_OPER_HELP_INFO 994 +#define NICK_OPER_HELP_LISTCHANS 995 +#define NICK_OPER_HELP_LIST 996 +#define NICK_OPER_HELP_LIST_AUTH 997 +#define NICK_OPER_HELP_LISTEMAIL 998 +#define NICK_OPER_HELP_LISTEMAIL_AUTH 999 +#define NICK_OPER_HELP_GETPASS 1000 +#define NICK_OPER_HELP_FORBID 1001 +#define NICK_OPER_HELP_SUSPEND 1002 +#define NICK_OPER_HELP_UNSUSPEND 1003 +#define NICK_OPER_HELP_AJOIN 1004 +#define NICK_OPER_HELP_SETAUTH 1005 +#define NICK_OPER_HELP_GETAUTH 1006 +#define NICK_OPER_HELP_CLEARAUTH 1007 +#define CHAN_HELP_REQSOP_LEVXOP 1008 +#define CHAN_HELP_REQSOP_LEV 1009 +#define CHAN_HELP_REQSOP_XOP 1010 +#define CHAN_HELP_REQAOP_LEVXOP 1011 +#define CHAN_HELP_REQAOP_LEV 1012 +#define CHAN_HELP_REQAOP_XOP 1013 +#define CHAN_HELP_REQHOP_LEVXOP 1014 +#define CHAN_HELP_REQHOP_LEV 1015 +#define CHAN_HELP_REQHOP_XOP 1016 +#define CHAN_HELP_REQVOP_LEVXOP 1017 +#define CHAN_HELP_REQVOP_LEV 1018 +#define CHAN_HELP_REQVOP_XOP 1019 +#define CHAN_HELP 1020 +#define CHAN_HELP_EXPIRES 1021 +#define CHAN_HELP_COMMANDS 1022 +#define CHAN_HELP_COMMANDS_SENDPASS 1023 +#define CHAN_HELP_COMMANDS_DROP 1024 +#define CHAN_HELP_COMMANDS_LIST 1025 +#define CHAN_HELP_COMMANDS_AKICK 1026 +#define CHAN_HELP_COMMANDS_LEVELS 1027 +#define CHAN_HELP_COMMANDS_XOP 1028 +#define CHAN_HELP_COMMANDS_HOP 1029 +#define CHAN_HELP_COMMANDS_OPVOICE 1030 +#define CHAN_HELP_COMMANDS_HALFOP 1031 +#define CHAN_HELP_COMMANDS_PROTECT 1032 +#define CHAN_HELP_COMMANDS_INVITE 1033 +#define CHAN_HELP_REGISTER 1034 +#define CHAN_HELP_REGISTER_ADMINONLY 1035 +#define CHAN_HELP_SENDPASS 1036 +#define CHAN_HELP_IDENTIFY 1037 +#define CHAN_HELP_DROP 1038 +#define CHAN_HELP_SET 1039 +#define CHAN_HELP_SET_FOUNDER 1040 +#define CHAN_HELP_SET_SUCCESSOR 1041 +#define CHAN_HELP_SET_PASSWORD 1042 +#define CHAN_HELP_SET_DESC 1043 +#define CHAN_HELP_SET_URL 1044 +#define CHAN_HELP_SET_EMAIL 1045 +#define CHAN_HELP_SET_ENTRYMSG 1046 +#define CHAN_HELP_SET_KEEPTOPIC 1047 +#define CHAN_HELP_SET_TOPICLOCK 1048 +#define CHAN_HELP_SET_MLOCK 1049 +#define CHAN_HELP_SET_HIDE 1050 +#define CHAN_HELP_SET_PRIVATE 1051 +#define CHAN_HELP_SET_RESTRICTED 1052 +#define CHAN_HELP_SET_SECURE 1053 +#define CHAN_HELP_SET_SECUREOPS 1054 +#define CHAN_HELP_SET_LEAVEOPS 1055 +#define CHAN_HELP_SET_OPNOTICE 1056 +#define CHAN_HELP_SET_ENFORCE 1057 +#define CHAN_HELP_UNSET 1058 +#define CHAN_HELP_SOP 1059 +#define CHAN_HELP_SOP_MID1 1060 +#define CHAN_HELP_SOP_MID1_CHANPROT 1061 +#define CHAN_HELP_SOP_MID2 1062 +#define CHAN_HELP_SOP_MID2_HALFOP 1063 +#define CHAN_HELP_SOP_END 1064 +#define CHAN_HELP_AOP 1065 +#define CHAN_HELP_AOP_MID 1066 +#define CHAN_HELP_AOP_MID_HALFOP 1067 +#define CHAN_HELP_AOP_END 1068 +#define CHAN_HELP_HOP 1069 +#define CHAN_HELP_VOP 1070 +#define CHAN_HELP_ACCESS 1071 +#define CHAN_HELP_ACCESS_XOP 1072 +#define CHAN_HELP_ACCESS_XOP_HALFOP 1073 +#define CHAN_HELP_ACCESS_LEVELS 1074 +#define CHAN_HELP_ACCESS_LEVELS_HALFOP 1075 +#define CHAN_HELP_ACCESS_LEVELS_END 1076 +#define CHAN_HELP_LEVELS 1077 +#define CHAN_HELP_LEVELS_XOP 1078 +#define CHAN_HELP_LEVELS_XOP_HOP 1079 +#define CHAN_HELP_LEVELS_END 1080 +#define CHAN_HELP_LEVELS_DESC 1081 +#define CHAN_HELP_AKICK 1082 +#define CHAN_HELP_INFO 1083 +#define CHAN_HELP_LIST 1084 +#define CHAN_HELP_LIST_OPERSONLY 1085 +#define CHAN_HELP_OP 1086 +#define CHAN_HELP_DEOP 1087 +#define CHAN_HELP_VOICE 1088 +#define CHAN_HELP_DEVOICE 1089 +#define CHAN_HELP_HALFOP 1090 +#define CHAN_HELP_DEHALFOP 1091 +#define CHAN_HELP_PROTECT 1092 +#define CHAN_HELP_DEPROTECT 1093 +#define CHAN_HELP_INVITE 1094 +#define CHAN_HELP_UNBAN 1095 +#define CHAN_HELP_KICK 1096 +#define CHAN_HELP_KICK_PROTECTED 1097 +#define CHAN_HELP_TOPIC 1098 +#define CHAN_HELP_CLEAR 1099 +#define CHAN_HELP_CLEAR_EXCEPTIONS 1100 +#define CHAN_HELP_CLEAR_MID 1101 +#define CHAN_HELP_CLEAR_HALFOPS 1102 +#define CHAN_HELP_CLEAR_END 1103 +#define CHAN_HELP_STATUS 1104 +#define CHAN_OPER_HELP_COMMANDS 1105 +#define CHAN_OPER_HELP_COMMANDS_GETPASS 1106 +#define CHAN_OPER_HELP_COMMANDS_FORBID 1107 +#define CHAN_OPER_HELP_COMMANDS_END 1108 +#define CHAN_OPER_HELP_DROP 1109 +#define CHAN_OPER_HELP_SET 1110 +#define CHAN_OPER_HELP_SET_NOEXPIRE 1111 +#define CHAN_OPER_HELP_UNSET 1112 +#define CHAN_OPER_HELP_INFO 1113 +#define CHAN_OPER_HELP_LIST 1114 +#define CHAN_OPER_HELP_GETPASS 1115 +#define CHAN_OPER_HELP_FORBID 1116 +#define CHAN_OPER_HELP_SUSPEND 1117 +#define CHAN_OPER_HELP_UNSUSPEND 1118 +#define MEMO_HELP 1119 +#define MEMO_HELP_EXPIRES 1120 +#define MEMO_HELP_END_LEVELS 1121 +#define MEMO_HELP_END_XOP 1122 +#define MEMO_HELP_COMMANDS 1123 +#define MEMO_HELP_COMMANDS_FORWARD 1124 +#define MEMO_HELP_COMMANDS_SAVE 1125 +#define MEMO_HELP_COMMANDS_DEL 1126 +#define MEMO_HELP_COMMANDS_IGNORE 1127 +#define MEMO_HELP_SEND 1128 +#define MEMO_HELP_LIST 1129 +#define MEMO_HELP_LIST_EXPIRE 1130 +#define MEMO_HELP_READ 1131 +#define MEMO_HELP_SAVE 1132 +#define MEMO_HELP_DEL 1133 +#define MEMO_HELP_SET 1134 +#define MEMO_HELP_SET_OPTION_FORWARD 1135 +#define MEMO_HELP_SET_END 1136 +#define MEMO_HELP_SET_NOTIFY 1137 +#define MEMO_HELP_SET_LIMIT 1138 +#define MEMO_HELP_INFO 1139 +#define MEMO_OPER_HELP_COMMANDS 1140 +#define MEMO_OPER_HELP_SET_LIMIT 1141 +#define MEMO_OPER_HELP_INFO 1142 +#define MEMO_HELP_FORWARD 1143 +#define MEMO_HELP_SET_FORWARD 1144 +#define MEMO_HELP_IGNORE 1145 +#define OPER_HELP 1146 +#define OPER_HELP_COMMANDS 1147 +#define OPER_HELP_COMMANDS_SERVOPER 1148 +#define OPER_HELP_COMMANDS_AKILL 1149 +#define OPER_HELP_COMMANDS_EXCLUDE 1150 +#define OPER_HELP_COMMANDS_SLINE 1151 +#define OPER_HELP_COMMANDS_SESSION 1152 +#define OPER_HELP_COMMANDS_NEWS 1153 +#define OPER_HELP_COMMANDS_SERVADMIN 1154 +#define OPER_HELP_COMMANDS_SERVROOT 1155 +#define OPER_HELP_COMMANDS_RAW 1156 +#define OPER_HELP_GLOBAL 1157 +#define OPER_HELP_STATS 1158 +#define OPER_HELP_SERVERMAP 1159 +#define OPER_HELP_OPER 1160 +#define OPER_HELP_ADMIN 1161 +#define OPER_HELP_MODE 1162 +#define OPER_HELP_CLEARMODES 1163 +#define OPER_HELP_CLEARCHAN 1164 +#define OPER_HELP_KICK 1165 +#define OPER_HELP_AKILL 1166 +#define OPER_HELP_AKILL_OPERMAXEXPIRY 1167 +#define OPER_HELP_AKILL_END 1168 +#define OPER_HELP_EXCLUDE 1169 +#define OPER_HELP_SGLINE 1170 +#define OPER_HELP_SQLINE 1171 +#define OPER_HELP_SQLINE_KILL 1172 +#define OPER_HELP_SQLINE_NOKILL 1173 +#define OPER_HELP_SQLINE_IGNOREOPERS 1174 +#define OPER_HELP_SQLINE_END 1175 +#define OPER_HELP_SZLINE 1176 +#define OPER_HELP_EXCEPTION 1177 +#define OPER_HELP_SESSION 1178 +#define OPER_HELP_SU 1179 +#define OPER_HELP_SET 1180 +#define OPER_HELP_SET_READONLY 1181 +#define OPER_HELP_SET_DEBUG 1182 +#define OPER_HELP_SET_SUPASS 1183 +#define OPER_HELP_JUPE 1184 +#define OPER_HELP_RAW 1185 +#define OPER_HELP_UPDATE 1186 +#define OPER_HELP_QUIT 1187 +#define OPER_HELP_SHUTDOWN 1188 +#define OPER_HELP_RESTART 1189 +#define OPER_HELP_REHASH 1190 +#define OPER_HELP_KILLCLONES 1191 +#define STAT_HELP 1192 +#define STAT_HELP_COMMANDS 1193 +#define STAT_HELP_SERVERS 1194 +#define STAT_HELP_USERS 1195 +#define STAT_OPER_HELP_SERVERS 1196 -#define NUM_STRINGS 1185 +#define NUM_STRINGS 1197 diff -uNr ircservices-5.0.21/lang/nl.l ircservices-5.0.22/lang/nl.l --- ircservices-5.0.21/lang/nl.l 2003-06-06 05:01:14 +0900 +++ ircservices-5.0.22/lang/nl.l 2003-09-10 07:47:52 +0900 @@ -357,6 +357,25 @@ NICK_X_DROPPED_LINKS Registratie van bijnaam %s en alle gekoppelde bijnamen is ongedaan gemaakt. +# DROPEMAIL and DROPEMAIL-CONFIRM responses +NICK_DROPEMAIL_SYNTAX + DROPEMAIL patroon +NICK_DROPEMAIL_PATTERN_TOO_LONG + Het gegeven patroon is te lang (maximaal %d karakters). +NICK_DROPEMAIL_NONE + Er zijn geen bijnamen met E-mail adressen volgens het gegeven patroon. +NICK_DROPEMAIL_COUNT + %d bijnamen hebben E-mail adressen volgens het gegeven patroon. + Om deze bijnamen te verwijderen, typ: /msg %s DROPEMAIL-CONFIRM %s +NICK_DROPEMAIL_CONFIRM_SYNTAX + DROPEMAIL-CONFIRM patroon +NICK_DROPEMAIL_CONFIRM_UNKNOWN + Het gegeven patroon is niet herkend. Gebruik het DROPEMAIL commando opnieuw met dit patroon voordat u het DROPEMAIL-CONFIRM commando gebruikt. +NICK_DROPEMAIL_CONFIRM_DROPPING + Bezig met verwijderen van %d bijnamen... +NICK_DROPEMAIL_CONFIRM_DROPPED + Verwijderen van bijnamen voltooid. + # SET responses NICK_SET_SYNTAX SET optie parameters @@ -3006,17 +3025,32 @@ AJOIN DEL kamer AJOIN LIST - Verandert of toont de auto-entree lijst van uw bijnaam. Dit + Verandert of toont de autojoin lijst van uw bijnaam. Dit is de lijst van kamers die u automatisch binnengaat, en treedt - in werking wanneer u zich identificeert bij %S. Let op dat de - auto-entree lijst alleen kamers die beginnen met "#" kan - bevatten (lokale kamers kunnen niet toegevoegd worden). + in werking wanneer u zich identificeert bij %S. U kunt alleen + kamers die beginnen met "#" in de autojoin lijst plaatsen + (lokale kamers kunnen niet toegevoegd worden). + +NICK_HELP_AJOIN_END + Let op dat de IRC server u kan verbieden sommige kamers + uit de autojoin lijst binnen te gaan, zoals kamers die een sleutel + hebben (mode +k), of die uitnodiging vereisen (mode +i). +NICK_HELP_AJOIN_END_CHANSERV + Let op dat de IRC server u kan verbieden sommige kamers + uit de autojoin lijst binnen te gaan, zoals kamers die een sleutel + hebben (mode +k), of die uitnodiging vereisen (mode +i). + Echter, wanneer u toegang heeft tot het %s INVITE commando + in een geregistreerde kamer, zal %S u automatisch uitnodigen + in de kamer. NICK_OPER_HELP_COMMANDS De volgende commando's zijn beschikbaar voor Services admins: DROPNICK Verwijder een bijnaam +NICK_OPER_HELP_COMMANDS_DROPEMAIL + DROPEMAIL Verwijder alle bijnamen die overeenkomen met + een E-mail adres NICK_OPER_HELP_COMMANDS_GETPASS GETPASS Verkrijg het wachtwoord van een bijnaam (alleen als versleuteling uitstaat) @@ -3049,6 +3083,27 @@ Gebruik beperkt tot Services admins. +NICK_OPER_HELP_DROPEMAIL + Syntax: DROPEMAIL patroon + DROPEMAIL-CONFIRM patroon + + Verwijdert alle bijnamen waarvan het E-mail adres + overeenkomt met het gegeven patroon. Wanneer patroon + slechts bestaat uit het karakter "-", worden alle bijnamen + zonder E-mail adres verwijdert. + + Om te voorkomen dat bijnamen per ongeluk verwijdert worden + met dit commando dient het tweemaal gegeven te worden: eerst + middels het DROPEMAIL commando, daarna met DROPEMAIL-CONFIRM + en hetzelfde patroon. Het DROPEMAIL-CONFIRM commando moet + binnen %s na het DROPEMAIL commando door dezelfde + persoon gegeven worden. Wanneer meer dan 4 DROPEMAIL + commando's na elkaar gegeven worden zal de oudste worden + vergeten en niet langer worden herkent voor een + DROPEMAIL-CONFIRM commando. + + Gebruik beperkt tot Services admins. + NICK_OPER_HELP_SET Services admins kunnen ook de optie NOEXPIRE gebruiken, @@ -3132,9 +3187,9 @@ Geeft een lijst van alle bijnamen waarvan ofwel de bijnaam zelf, of wel het laatst geziene adres (in de vorm gebruiker@host) overeenkomt met het gegeven patroon. - Bijnamen met de PRIVATE optie aan worden alleen getoond aan + Bijnamen met de PRIVATE optie aan worden alleen getoond aan Services Admins. Voor Services Admins worden bijnamen die op - NOEXPIRE staan aangeduidt met een ! en bijnamen die buiten + NOEXPIRE staan aangeduidt met een ! en bijnamen die buiten gebruik zijn met een *. Als de optie FORBIDDEN, SUSPENDED of NOEXPIRE gegeven @@ -3159,9 +3214,9 @@ Geeft een lijst van alle bijnamen waarvan ofwel de bijnaam zelf, of wel het laatst geziene adres (in de vorm gebruiker@host) overeenkomt met het gegeven patroon. - Bijnamen met de PRIVATE optie aan worden alleen getoond aan + Bijnamen met de PRIVATE optie aan worden alleen getoond aan Services Admins. Voor Services Admins worden bijnamen die op - NOEXPIRE staan aangeduidt met een ! en bijnamen die buiten + NOEXPIRE staan aangeduidt met een ! en bijnamen die buiten gebruik zijn met een *, en bijnamen die nog niet geauthenticeerd zijn (met het AUTH commando) worden aangeduid met een ?. @@ -3535,7 +3590,9 @@ zoals in voorbeeld twee hieronder, dient u ook de RESTRICTED optie aan te zetten voor de kamer (zie HELP SET RESTRICTED), anders kan een ieder die de kamer - binnenkomt als deze leeg is de sleutel zien! + binnenkomt als deze leeg is de sleutel zien! MLOCK +i zal + gebruikers eveneens niet tegenhouden wanneer zij zonder + uitnodiging de kamer binnen gaan als deze leeg is. Voorbeelden: diff -uNr ircservices-5.0.21/lang/tr.l ircservices-5.0.22/lang/tr.l --- ircservices-5.0.21/lang/tr.l 2003-06-09 15:25:36 +0900 +++ ircservices-5.0.22/lang/tr.l 2003-09-12 11:21:37 +0900 @@ -307,6 +307,25 @@ NICK_X_DROPPED_LINKS %s ve de linkli tüm nicklerinin kaydi silinmistir. (dropped) +# DROPEMAIL and DROPEMAIL-CONFIRM responses +NICK_DROPEMAIL_SYNTAX + DROPEMAIL maske +NICK_DROPEMAIL_PATTERN_TOO_LONG + Belirtilen maske cok uzun (En fazla %d karakter kullanilabilir.) +NICK_DROPEMAIL_NONE + Verilen maskeye uygun herhangi bir nick bulunamadi. +NICK_DROPEMAIL_COUNT + Belirtilen maskeye uygun %d adet nick bulundu. + Silmek icin lütfen /msg %s DROPEMAIL-CONFIRM %s komutunu kullaniniz. +NICK_DROPEMAIL_CONFIRM_SYNTAX + DROPEMAIL-CONFIRM maske +NICK_DROPEMAIL_CONFIRM_UNKNOWN + Belirtilen maske anlasilamadi. Lütfen DROPEMAIL-CONFIRM komutunu tekrar kullanmadan önce DROPEMAIL komutu ile maskeyi yeniden ayarlayiniz. +NICK_DROPEMAIL_CONFIRM_DROPPING + %d adet nickin kaydi siliniyor... +NICK_DROPEMAIL_CONFIRM_DROPPED + Kayit silme islemi tamamlandi. + # SET responses NICK_SET_SYNTAX SET secenek parametreler @@ -2848,20 +2867,34 @@ mesaji verilmez. NICK_HELP_AJOIN - Kullanimi: AJOIN ADD channel - AJOIN DEL channel - AJOIN LIST + Kullanimi: ^BAJOIN ADD ^_channel^_^B + ^BAJOIN DEL ^_channel^_^B + ^BAJOIN LIST^B Nick'inizin otojoin kanal listesini düzenler ve/veya görüntüler. Bu listeye eklediginiz kanallara, /identify komutu kullandiktan - hemen sonra %S tarafindan gönderilirsiniz. Dikkat etmelisiniz ki, - sadece "#" isareti ile baslayan kanal isimleri kabul edilebilir. + hemen sonra %S tarafindan gönderilirsiniz. Dikkat + etmelisiniz ki sadece "#" isareti ile baslayan kanal isimleri + kabul edilebilir. + +NICK_HELP_AJOIN_END + Bazi IRC server, otojoin listenizdeki kanallara girmenizi + engelleyebilir. Mesela anahtar (+k) ve ya invite-only (+i) + modlarinin bulundugu kanallara girmek mümkün olmayabilir. +NICK_HELP_AJOIN_END_CHANSERV + Bazi IRC server, otojoin listenizdeki kanallara girmenizi + engelleyebilir. Mesela anahtar (+k) ve ya invite-only (+i) + modlarinin bulundugu kanallara girmek mümkün olmayabilir. + Ancak, %s INVITE komutuna erisiminiz varsa, %S sizi + bu kanallara direk olarak davet edecektir. NICK_OPER_HELP_COMMANDS Bu komutlar Services Adminler tarafindan kullanilabilir: DROPNICK Bir nickin kaydini siler. +NICK_OPER_HELP_COMMANDS_DROPEMAIL + DROPEMAIL Bir email adresi maskesine uyan her nicki siler NICK_OPER_HELP_COMMANDS_GETPASS GETPASS Sifreleme gecerli degilse, bir nickin sifresini gösterir. @@ -2891,6 +2924,24 @@ Bu komutu sadece services adminler kullanabilirler. +NICK_OPER_HELP_DROPEMAIL + Kullanimi: DROPEMAIL maske + DROPEMAIL-CONFIRM maske + + Belirtilen maske ye uyan tüm emaillere ait olan nicklerin + kaydini siler. Eger maske tek bir sadece "-" karakterinden + olusuyorsa, email adresi olmayan nicklerin kaydi silinir. + + Nicklerin yanlislikla silinmesini engellemek icin, bu komut iki + asamadan olusmaktadir. Öncelikle DROPEMAIL komutu ile bir + maske belirlenir. Daha sonra DROPEMAIL-CONFIRM komutu ile + ayni maske onaylanir. DROPEMAIL-CONFIRM komutu %s süre icinde + DROPEMAIL komutunu kullanan kisi tarafindan verilmek zorundadir + Eger ayni dan 4 DROPEMAIL komutundan daha fazlasi verilirse, + sonuncusu gecersiz sayilacaktir. + + Bu komutu sadece Services Adminler kullanabilir. + NICK_OPER_HELP_UNLINK Kullanimi: UNLINK nick [FORCE] @@ -2968,7 +3019,7 @@ Kullanimi: LIST pattern [FORBIDDEN] [NOEXPIRE] [SUSPENDED] Belirtilen parametreye uyan butun kayitli nick'leri ya nick - ya da user@host formatinda listeler. PRIVATE özelligi aktif + ya da user@host formatinda listeler. PRIVATE özelligi aktif olan nickler bu listede sadece services adminler tarafindan görülebilirler. @@ -2997,7 +3048,7 @@ Kullanimi: LIST pattern [FORBIDDEN] [NOEXPIRE] [SUSPENDED] [NOAUTH] Belirtilen parametreye uyan butun kayitli nick'leri ya nick - ya da user@host formatinda listeler. PRIVATE özelligi aktif + ya da user@host formatinda listeler. PRIVATE özelligi aktif olan nickler bu listede sadece services adminler tarafindan görülebilirler. @@ -3334,11 +3385,12 @@ gibi, "+" ile baslayanlar setlenen, "-" ile baslayanlar kaldirilan modlari belirtecek sekildedirler. - UYARI: Eger asagidaki ikinci ornek seklinde bir "MLOCK" - yapacaksaniz ek olarak RESTRICTED opsiyonunu da - kullanmalisiniz (bkz. HELP SET RESTRICTED).Aksi takdirde - kanal bos iken kanala giren herhangi biri kanal anahtarini - (KEY) gorebilecektir! + DIKKAT: Eger kanal icin bir anahtar modu kilitlernise, + bu kanali ayrica RESTRICTED opsiyonu ile güvenli bir hale + getirmeniz gerekir. (Daha fazla bilgi icin HELP SET RESTRICTED) + Aksi takdirde, bos kanala giren herkes kanal anahtarini + ögrenebilir, ve de +i modunun kilitlenmis olmasi bunu + degistirmez. Ornekler: diff -uNr ircservices-5.0.21/memory.c ircservices-5.0.22/memory.c --- ircservices-5.0.21/memory.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/memory.c 2003-09-16 04:17:48 +0900 @@ -14,22 +14,17 @@ /*************************************************************************/ /* - * To enable memory leak checks add the _MEMCHECKS define to the + * To enable memory leak checks add the MEMCHECKS define to the * config.h or the command line when compiling. * -- Kelmar (2001-01-13) - * Note that this is not very useful at present because Services does not - * clean up after itself on exit, so there will always be large amounts of - * memory "leaked". --AC 2001/2/15 */ /* - * WARNING: The following define will bloat your log files VERY quickly! + * WARNING: Defining SHOWALLOCS will bloat your log files VERY quickly! * Use at your own risk! * -- Kelmar (2001-01-16) */ -/* #define SHOWALLOCS */ - #ifdef SHOWALLOCS int showallocs = 1; /* Actually log allocations? */ #endif diff -uNr ircservices-5.0.21/modules/chanserv/access-levels.c ircservices-5.0.22/modules/chanserv/access-levels.c --- ircservices-5.0.21/modules/chanserv/access-levels.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/chanserv/access-levels.c 2003-09-16 04:17:48 +0900 @@ -393,6 +393,9 @@ if (!ci->levels) reset_levels(ci, 1); ci->levels[levelinfo[i].what] = level; + /* Special case: autoprotect ON -> autoowner ON */ + if (levelinfo[i].what == CA_AUTOPROTECT) + ci->levels[CA_AUTOOWNER] = ACCLEV_FOUNDER; notice_lang(s_ChanServ, u, CHAN_LEVELS_CHANGED, levelinfo[i].name, chan, level); put_channelinfo(ci); @@ -407,6 +410,9 @@ if (!ci->levels) reset_levels(ci, 1); ci->levels[levelinfo[i].what] = ACCLEV_INVALID; + /* Special case: autoprotect OFF -> autoowner OFF */ + if (levelinfo[i].what == CA_AUTOPROTECT) + ci->levels[CA_AUTOOWNER] = ACCLEV_INVALID; notice_lang(s_ChanServ, u, CHAN_LEVELS_DISABLED, levelinfo[i].name, chan); put_channelinfo(ci); diff -uNr ircservices-5.0.21/modules/chanserv/access.c ircservices-5.0.22/modules/chanserv/access.c --- ircservices-5.0.21/modules/chanserv/access.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/chanserv/access.c 2003-09-16 04:17:48 +0900 @@ -240,7 +240,10 @@ for (i = 0; levelinfo[i].what >= 0; i++) { int type = levelinfo[i].action & CL_TYPEMASK; int32 flags = levelinfo[i].target.cumode.flags; + int clevel = ci->levels ? ci->levels[levelinfo[i].what] + : def_levels[levelinfo[i].what]; if ((type == CL_SET_MODE || type == CL_CLEAR_MODE) + && clevel != ACCLEV_INVALID && (changemask & flags) && check_access(user, ci, levelinfo[i].what) ) { diff -uNr ircservices-5.0.21/modules/chanserv/check.c ircservices-5.0.22/modules/chanserv/check.c --- ircservices-5.0.21/modules/chanserv/check.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/chanserv/check.c 2003-09-16 04:17:49 +0900 @@ -347,9 +347,11 @@ /* When called on join, the user has not been added to our channel user * list yet, so we check whether the channel does not exist rather than * whether the channel has only one user in it. When called from AKICK - * ENFORCE, this will always be false, but that's okay because if - * someone tries to join again we'll just kickban them again. */ - stay = (c == NULL); + * ENFORCE, the user _will_ be in the list, so we need to check whether + * the list contains only this user. Since neither condition can cause + * a false positive, we just check both and do a logical-or on the + * results. */ + stay = (c == NULL) || (c->users->user == user && c->users->next == NULL); if (stay) { CSInhabitData *data; /* Only enter the channel if we're not already in it */ @@ -373,7 +375,7 @@ /* Clear any exceptions matching the user (this will also get all * exceptions which match the mask) */ if (c) - clear_channel(s_ChanServ, c, CLEAR_EXCEPTS, user); + clear_channel(c, CLEAR_EXCEPTS, user); /* Apparently invites can get around bans, so check for ban first */ if (!chan_has_ban(chan, mask)) { send_channel_cmd(s_ChanServ, "MODE %s +b %s", chan, mask); @@ -402,7 +404,7 @@ if (!ci || !(ci->flags & CI_TOPICLOCK)) return 0; c->topic_time = topic_time; /* because set_topic() may need it */ - set_topic(c, ci->last_topic, + set_topic(s_ChanServ, c, ci->last_topic, *ci->last_topic_setter ? ci->last_topic_setter : s_ChanServ, ci->last_topic_time); return 1; diff -uNr ircservices-5.0.21/modules/chanserv/main.c ircservices-5.0.22/modules/chanserv/main.c --- ircservices-5.0.21/modules/chanserv/main.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/chanserv/main.c 2003-09-16 04:17:49 +0900 @@ -791,14 +791,29 @@ } else if (!is_servadmin && (ci->flags & CI_VERBOTEN)) { notice_lang(s_ChanServ, u, CHAN_X_FORBIDDEN, chan); } else if (!is_servadmin && ci->suspendinfo) { - notice_lang(s_ChanServ, u, CHAN_X_SUSPENDED); + notice_lang(s_ChanServ, u, CHAN_X_SUSPENDED, chan); } else if (!is_servadmin && !is_identified(u, ci)) { notice_lang(s_ChanServ, u, CHAN_IDENTIFY_REQUIRED, s_ChanServ, chan); } else { + const char *founder; + char tmpbuf[64]; + if (readonly) /* in this case we know they're a Services admin */ notice_lang(s_ChanServ, u, READ_ONLY_MODE); - module_log("Channel %s dropped by %s!%s@%s", - ci->name, u->nick, u->username, u->host); + if (ci->founder) { + NickGroupInfo *ngi = get_ngi_id(ci->founder); + if (ngi) { + founder = ngi->nicks[ngi->mainnick]; + } else { + snprintf(tmpbuf, sizeof(tmpbuf), "", + ci->founder); + founder = tmpbuf; + } + } else { + founder = ""; + } + module_log("Channel %s (founder %s) dropped by %s!%s@%s", + ci->name, founder, u->nick, u->username, u->host); delchan(ci); if (chanmode_reg && (c = get_channel(chan))) { c->mode &= ~chanmode_reg; @@ -1240,7 +1255,7 @@ } else if (!u || !check_access_cmd(u, ci, "UNBAN", NULL)) { notice_lang(s_ChanServ, u, PERMISSION_DENIED); } else if (call_callback_3(module, cb_unban, u, c, ci) <= 0) { - clear_channel(s_ChanServ, c, CLEAR_BANS, u); + clear_channel(c, CLEAR_BANS, u); notice_lang(s_ChanServ, u, CHAN_UNBANNED, chan); } } @@ -1332,7 +1347,7 @@ notice_lang(s_ChanServ, u, PERMISSION_DENIED); } else { time_t now = time(NULL); - set_topic(c, topic, u->nick, now); + set_topic(s_ChanServ, c, topic, u->nick, now); record_topic(ci, topic, u->nick, now); } } @@ -1361,21 +1376,21 @@ } else if (call_callback_3(module, cb_clear, u, c, what) > 0) { return; } else if (stricmp(what, "BANS") == 0) { - clear_channel(s_ChanServ, c, CLEAR_BANS, NULL); + clear_channel(c, CLEAR_BANS, NULL); notice_lang(s_ChanServ, u, CHAN_CLEARED_BANS, chan); } else if (stricmp(what, "MODES") == 0) { - clear_channel(s_ChanServ, c, CLEAR_MODES, NULL); + clear_channel(c, CLEAR_MODES, NULL); notice_lang(s_ChanServ, u, CHAN_CLEARED_MODES, chan); } else if (stricmp(what, "OPS") == 0) { - clear_channel(s_ChanServ, c, CLEAR_UMODES, (void *)CUMODE_o); + clear_channel(c, CLEAR_UMODES, (void *)CUMODE_o); notice_lang(s_ChanServ, u, CHAN_CLEARED_OPS, chan); } else if (stricmp(what, "VOICES") == 0) { - clear_channel(s_ChanServ, c, CLEAR_UMODES, (void *)CUMODE_v); + clear_channel(c, CLEAR_UMODES, (void *)CUMODE_v); notice_lang(s_ChanServ, u, CHAN_CLEARED_VOICES, chan); } else if (stricmp(what, "USERS") == 0) { char buf[BUFSIZE]; snprintf(buf, sizeof(buf), "CLEAR USERS command from %s", u->nick); - clear_channel(s_ChanServ, c, CLEAR_USERS, buf); + clear_channel(c, CLEAR_USERS, buf); notice_lang(s_ChanServ, u, CHAN_CLEARED_USERS, chan); } else { syntax_error(s_ChanServ, u, "CLEAR", CHAN_CLEAR_SYNTAX); @@ -1484,7 +1499,7 @@ notice_lang(s_ChanServ, u, CHAN_FORBID_SUCCEEDED, chan); c = get_channel(chan); if (c) - clear_channel(s_ChanServ, c, CLEAR_USERS, + clear_channel(c, CLEAR_USERS, "Use of this channel has been forbidden"); } else { module_log("Valid FORBID for %s by %s!%s@%s failed", @@ -1536,7 +1551,7 @@ notice_lang(s_ChanServ, u, CHAN_SUSPEND_SUCCEEDED, chan); c = get_channel(chan); if (c) - clear_channel(s_ChanServ, c, CLEAR_USERS, + clear_channel(c, CLEAR_USERS, "Use of this channel has been forbidden"); if (readonly) notice_lang(s_ChanServ, u, READ_ONLY_MODE); @@ -1623,6 +1638,10 @@ static Command *cmd_REGISTER; static Command *cmd_GETPASS; +/* Previous value of clear_channel() sender */ +static char old_clearchan_sender[NICKMAX]; +static int old_clearchan_sender_set = 0; + /*************************************************************************/ static int check_config(void) @@ -1678,8 +1697,11 @@ } else { Command *cmd; /* After reconfiguration: handle value changes. */ - if (strcmp(old_s_ChanServ, s_ChanServ) != 0) + if (strcmp(old_s_ChanServ, s_ChanServ) != 0) { + if (strcmp(set_clear_channel_sender(PTR_INVALID),old_s_ChanServ)==0) + set_clear_channel_sender(s_ChanServ); send_nickchange(old_s_ChanServ, s_ChanServ); + } if (!old_desc_ChanServ || strcmp(old_desc_ChanServ,desc_ChanServ) != 0) send_namechange(s_ChanServ, desc_ChanServ); if (!old_ChanDBName || strcmp(old_ChanDBName, ChanDBName) != 0) { @@ -1825,6 +1847,10 @@ if (linked) introduce_chanserv(NULL); + strscpy(old_clearchan_sender, set_clear_channel_sender(s_ChanServ), + sizeof(old_clearchan_sender)); + old_clearchan_sender_set = 1; + return 1; } @@ -1836,6 +1862,11 @@ shutdown_unused = shutdown_unused; #endif + if (old_clearchan_sender_set) { + set_clear_channel_sender(old_clearchan_sender); + old_clearchan_sender_set = 0; + } + if (linked) send_cmd(s_ChanServ, "QUIT :"); diff -uNr ircservices-5.0.21/modules/chanserv/set.c ircservices-5.0.22/modules/chanserv/set.c --- ircservices-5.0.21/modules/chanserv/set.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/chanserv/set.c 2003-09-16 04:17:49 +0900 @@ -175,7 +175,7 @@ static void do_set_founder(User *u, ChannelInfo *ci, char *param) { NickInfo *ni = get_nickinfo(param); - NickGroupInfo *ngi; + NickGroupInfo *ngi, *oldngi; if (!ni) { notice_lang(s_ChanServ, u, NICK_X_NOT_REGISTERED, param); @@ -194,10 +194,12 @@ return; } uncount_chan(ci); + oldngi = get_ngi_id(ci->founder); + module_log("Changing founder of %s from %s to %s by %s!%s@%s", ci->name, + oldngi ? oldngi->nicks[oldngi->mainnick] : "", + param, u->nick, u->username, u->host); ci->founder = ngi->id; count_chan(ci); - module_log("Changing founder of %s to %s by %s!%s@%s", - ci->name, param, u->nick, u->username, u->host); if (ci->successor == ci->founder) { module_log("Successor for %s is same as new founder, clearing", ci->name); @@ -229,8 +231,16 @@ notice_lang(s_ChanServ, u, CHAN_SUCCESSOR_IS_FOUNDER); return; } - module_log("Changing successor of %s to %s by %s!%s@%s", - ci->name, param, u->nick, u->username, u->host); + if (ci->successor) { + NickGroupInfo *oldngi = get_ngi_id(ci->successor); + module_log("Changing successor of %s from %s to %s by %s!%s@%s", + ci->name, + oldngi ? oldngi->nicks[oldngi->mainnick] : "", + param, u->nick, u->username, u->host); + } else { + module_log("Setting successor of %s to %s by %s!%s@%s", + ci->name, param, u->nick, u->username, u->host); + } ci->successor = ngi->id; notice_lang(s_ChanServ, u, CHAN_SUCCESSOR_CHANGED, ci->name, param); } else { diff -uNr ircservices-5.0.21/modules/chanserv/util.c ircservices-5.0.22/modules/chanserv/util.c --- ircservices-5.0.21/modules/chanserv/util.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/chanserv/util.c 2003-09-16 04:17:49 +0900 @@ -262,11 +262,11 @@ { ChannelInfo *ci = c->ci; - if (!ci || !(ci->flags & CI_KEEPTOPIC)) - return; - set_topic(c, ci->last_topic, - *ci->last_topic_setter ? ci->last_topic_setter : s_ChanServ, - ci->last_topic_time); + if (ci && (ci->flags & CI_KEEPTOPIC) && ci->last_topic && *ci->last_topic){ + set_topic(s_ChanServ, c, ci->last_topic, + *ci->last_topic_setter ? ci->last_topic_setter : s_ChanServ, + ci->last_topic_time); + } } /*************************************************************************/ diff -uNr ircservices-5.0.21/modules/database/version4.c ircservices-5.0.22/modules/database/version4.c --- ircservices-5.0.21/modules/database/version4.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/database/version4.c 2003-09-16 04:17:49 +0900 @@ -37,9 +37,29 @@ /*************************************************************************/ -#define FILE_VERSION 11 +#define FILE_VERSION 11 /* Must remain constant */ #define LOCAL_VERSION 23 /* For extensions to database files */ +/* LOCAL_VERSION change history: + * 23: Added count to autokick entries in channel extension data + * 22: Fixed bug causing nickgroups with ID 0 to get written out + * 21: AUTODEOP and NOJOIN levels changed from -10/-20 to -1/-100 + * 20: Access levels changed; v5 level data and access entry levels + * added to channel extension data + * 19: Added last IDENTIFY stamp to nickname extension data + * 18: Added autojoin functionality; added autojoin list to nickgroup + * extension data + * 17: Added memo ignore functionality; added ignore list to nickgroup + * extension data + * 16: Added Unreal +L/+f handling; added respective fields to channel + * extension data + * 15: Added nick timezones; added timezone field to nickgroup extension + * data + * 14: Added autokick time and lastused fields (saved to channel + * extension data) + * 13: Added nickname privilege level to nickgroup extension data + */ + /* Default channel entries in version 4.5: */ #define CA_SIZE_4_5 18 @@ -75,7 +95,7 @@ /* Common routine to open a file for reading and check version number. */ -#define OPENDB_ERROR (dbFILE *)-1 +#define OPENDB_ERROR ((dbFILE *)PTR_INVALID) static dbFILE *my_open_db_r(const char *dbname, int32 *ver_ret) { @@ -875,6 +895,10 @@ if (i < CA_SIZE) ci->levels[i] = convert_old_level(lev); } + if (ci->levels[CA_AUTOPROTECT] == ACCLEV_INVALID) + ci->levels[CA_AUTOOWNER] = ACCLEV_INVALID; + else + ci->levels[CA_AUTOOWNER] = ACCLEV_FOUNDER; /* Check whether all levels are at the default, and if so, remove the * levels array */ if (is_default) @@ -1035,6 +1059,10 @@ if (ci->levels[CA_NOJOIN] == -20) ci->levels[CA_NOJOIN] = -100; } + if (ci->levels[CA_AUTOPROTECT] == ACCLEV_INVALID) + ci->levels[CA_AUTOOWNER] = ACCLEV_INVALID; + else + ci->levels[CA_AUTOOWNER] = ACCLEV_FOUNDER; } else { free(ci->levels); ci->levels = NULL; @@ -1442,7 +1470,7 @@ /* To avoid extraneous writes when using NickServ (which calls us with * NULL to write the DB after updating services_{admins,opers}): */ - static const char *last_dbname = (char *)-1; + static const char *last_dbname = PTR_INVALID; const char *last = last_dbname; last_dbname = dbname; if (last == NULL && dbname == NULL) { diff -uNr ircservices-5.0.21/modules/mail/sendmail.c ircservices-5.0.22/modules/mail/sendmail.c --- ircservices-5.0.21/modules/mail/sendmail.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/mail/sendmail.c 2003-09-16 04:17:49 +0900 @@ -13,6 +13,7 @@ #include "language.h" #include "mail.h" #include "mail-local.h" +#include /* for WIFEXITED(), etc. */ /*************************************************************************/ @@ -65,8 +66,12 @@ if (res == -1) { module_log_perror("pclose() failed"); } else if (res != 0) { - module_log("%s exited with code %d%s", SendmailPath, res, - res==127 ? " (unable to execute program?)" : ""); + if (debug >= 2) + module_log("debug: sendmail exit code = %04X\n", res); + module_log("%s exited with %s %d%s", SendmailPath, + WIFEXITED(res) ? "code" : "signal", + WIFEXITED(res) ? WEXITSTATUS(res) : WTERMSIG(res), + WIFEXITED(res) && WEXITSTATUS(res)==127 ? " (unable to execute program?)" : ""); return -1; } return 0; diff -uNr ircservices-5.0.21/modules/nickserv/autojoin.c ircservices-5.0.22/modules/nickserv/autojoin.c --- ircservices-5.0.21/modules/nickserv/autojoin.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/nickserv/autojoin.c 2003-09-16 04:17:49 +0900 @@ -68,6 +68,39 @@ } /*************************************************************************/ + +/* Handle autojoin help. */ + +static int do_help(User *u, const char *param) +{ + if (stricmp(param, "AJOIN") == 0) { + Module *mod; + notice_help(s_NickServ, u, NICK_HELP_AJOIN); + if ((mod = find_module("chanserv/main")) != NULL) { + const char *my_s_ChanServ; + const char **ptr = get_module_symbol(mod, "s_ChanServ"); + if (ptr) { + my_s_ChanServ = *ptr; + } else { + static int warned = 0; + if (!warned) { + module_log("HELP AJOIN: cannot retrieve symbol" + " `s_ChanServ' from module `chanserv/main'"); + warned = 1; + } + my_s_ChanServ = "ChanServ"; + } + notice_help(s_NickServ, u, NICK_HELP_AJOIN_END_CHANSERV, + my_s_ChanServ); + } else { + notice_help(s_NickServ, u, NICK_HELP_AJOIN_END); + } + return 1; + } + return 0; +} + +/*************************************************************************/ /*************************** Command functions ***************************/ /*************************************************************************/ @@ -232,6 +265,7 @@ if (!add_callback(NULL, "load module", do_load_module) || !add_callback(NULL, "unload module", do_unload_module) || !add_callback(module_nickserv, "identified", do_identified) + || !add_callback(module_nickserv, "HELP", do_help) ) { module_log("Unable to add callbacks"); exit_module(0); @@ -257,6 +291,7 @@ do_unload_module(module_chanserv); if (module_nickserv) { + remove_callback(module_nickserv, "HELP", do_help); remove_callback(module_nickserv, "identified", do_identified); unregister_commands(module_nickserv, cmds); unuse_module(module_nickserv); diff -uNr ircservices-5.0.21/modules/nickserv/main.c ircservices-5.0.22/modules/nickserv/main.c --- ircservices-5.0.21/modules/nickserv/main.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/nickserv/main.c 2003-09-16 04:17:49 +0900 @@ -55,6 +55,8 @@ time_t NSSuspendExpire; time_t NSSuspendGrace; static int NSHelpWarning; +static int NSEnableDropEmail; +static time_t NSDropEmailExpire; /*************************************************************************/ @@ -63,6 +65,8 @@ static void do_identify(User *u); static void do_drop(User *u); static void do_dropnick(User *u); +static void do_dropemail(User *u); +static void do_dropemail_confirm(User *u); static void do_info(User *u); static void do_listchans(User *u); static void do_list(User *u); @@ -117,6 +121,10 @@ { "DROPNICK", do_dropnick, is_services_admin, -1, -1, NICK_OPER_HELP_DROPNICK }, + { "DROPEMAIL",do_dropemail,is_services_admin, -1, + -1, NICK_OPER_HELP_DROPEMAIL }, + { "DROPEMAIL-CONFIRM", do_dropemail_confirm, is_services_admin, -1, + -1, NICK_OPER_HELP_DROPEMAIL }, { "GETPASS", do_getpass, is_services_admin, -1, -1, NICK_OPER_HELP_GETPASS }, { "FORBID", do_forbid, is_services_admin, -1, @@ -355,6 +363,8 @@ call_callback_2(module, cb_help_cmds, u, 0); if (is_oper(u)) { notice_help(s_NickServ, u, NICK_OPER_HELP_COMMANDS); + if (NSEnableDropEmail) + notice_help(s_NickServ, u, NICK_OPER_HELP_COMMANDS_DROPEMAIL); if (EnableGetpass) notice_help(s_NickServ, u, NICK_OPER_HELP_COMMANDS_GETPASS); notice_help(s_NickServ, u, NICK_OPER_HELP_COMMANDS_FORBID); @@ -377,6 +387,13 @@ if (find_module("nickserv/link") || find_module("nickserv/oldlink")) notice_help(s_NickServ, u, NICK_HELP_DROP_LINK); notice_help(s_NickServ, u, NICK_HELP_DROP_END); + } else if ((stricmp(cmd, "DROPEMAIL") == 0 + || stricmp(cmd, "DROPEMAIL-CONFIRM") == 0) + && NSEnableDropEmail + && is_oper(u) + ) { + notice_help(s_NickServ, u, NICK_OPER_HELP_DROPEMAIL, + maketime(u->ngi,NSDropEmailExpire,0)); } else if (stricmp(cmd, "SET") == 0) { notice_help(s_NickServ, u, NICK_HELP_SET); if (find_module("nickserv/link")) @@ -400,7 +417,10 @@ if (is_oper(u)) notice_help(s_NickServ, u, NICK_OPER_HELP_INFO); } else if (stricmp(cmd, "LIST") == 0) { - notice_help(s_NickServ, u, NICK_HELP_LIST); + if (is_oper(u)) + notice_help(s_NickServ, u, NICK_OPER_HELP_LIST); + else + notice_help(s_NickServ, u, NICK_HELP_LIST); if (NSListOpersOnly) notice_help(s_NickServ, u, NICK_HELP_LIST_OPERSONLY); } else if (stricmp(cmd, "RECOVER") == 0) { @@ -475,6 +495,14 @@ notice_lang(s_NickServ, u, MORE_OBSCURE_PASSWORD); } else if (email && !valid_email(email)) { + /* Display the syntax as well in case the user just got E-mail and + * password backwards. Don't use syntax_error(), because that also + * prints a "for more help" message which might just confuse the + * user more. */ + char buf[BUFSIZE]; + snprintf(buf, sizeof(buf), getstring(u->ngi,NICK_REGISTER_SYNTAX), + "REGISTER"); + notice_lang(s_NickServ, u, SYNTAX_ERROR, buf); notice_lang(s_NickServ, u, BAD_EMAIL); } else if (NSRegEmailMax && email && !is_services_admin(u) @@ -633,24 +661,18 @@ NICK_DROP_FAILED)) { /* nothing */ } else { - int i; - if (readonly) /* they must be a servadmin in this case */ notice_lang(s_NickServ, u, READ_ONLY_MODE); - module_log("%s!%s@%s dropped nickgroup %u:", - u->nick, u->username, u->host, ngi->id); - ARRAY_FOREACH (i, ngi->nicks) { - module_log(" -- %s!%s@%s dropped nick %s", - u->nick, u->username, u->host, ngi->nicks[i]); - } - delgroup(ngi); + drop_nickgroup(ngi, u, NULL); notice_lang(s_NickServ, u, NICK_DROPPED); } } /*************************************************************************/ -/* Services admin only function (privileges assumed to be pre-checked) */ +/* Services admin function to drop another user's nickname. Privileges + * assumed to be pre-checked. + */ static void do_dropnick(User *u) { @@ -672,18 +694,10 @@ !is_services_root(u)) { notice_lang(s_NickServ, u, PERMISSION_DENIED); } else { - int i; - if (readonly) notice_lang(s_NickServ, u, READ_ONLY_MODE); if (ni->nickgroup) { - module_log("%s!%s@%s dropped nickgroup %u as Services admin:", - u->nick, u->username, u->host, ngi->id); - ARRAY_FOREACH (i, ngi->nicks) { - module_log(" -- %s!%s@%s dropped nick %s", - u->nick, u->username, u->host, ngi->nicks[i]); - } - delgroup(ngi); + drop_nickgroup(ngi, u, PTR_INVALID); } else { module_log("%s!%s@%s dropped forbidden nick %s", u->nick, u->username, u->host, ni->nick); @@ -695,6 +709,137 @@ /*************************************************************************/ +/* Services admin function to drop all nicknames whose E-mail address + * matches the given mask. Privileges assumed to be pre-checked. + */ + +/* List of recent DROPEMAILs for CONFIRM */ +static struct { + char sender[NICKMAX]; /* Who sent the command (empty = no entry) */ + char mask[BUFSIZE]; /* What mask was used */ + int count; + time_t sent; /* When the command was sent */ +} dropemail_buffer[DROPEMAIL_BUFSIZE]; + +static void do_dropemail(User *u) +{ + char *mask = strtok(NULL, " "); + NickGroupInfo *ngi; + int count, i, found; + + /* Parameter check */ + if (!mask || strtok_remaining()) { + syntax_error(s_NickServ, u, "DROPEMAIL", NICK_DROPEMAIL_SYNTAX); + return; + } + if (strlen(mask) > sizeof(dropemail_buffer[0].mask)-1) { + notice_lang(s_NickServ, u, NICK_DROPEMAIL_PATTERN_TOO_LONG, + sizeof(dropemail_buffer[0].mask)-1); + return; + } + + /* Count nicks matching this mask; exit if none found */ + if (strcmp(mask,"-") == 0) + mask = NULL; + count = 0; + for (ngi = first_nickgroupinfo(); ngi; ngi = next_nickgroupinfo()) { + if ((mask && ngi->email && match_wild_nocase(mask,ngi->email)) + || (!mask && !ngi->email) + ) { + count += ngi->nicks_count; + } + } + if (!count) { + notice_lang(s_NickServ, u, NICK_DROPEMAIL_NONE); + return; + } + if (mask == NULL) + mask = "-"; + + /* Clear out any previous entries for this sender/mask */ + for (i = 0; i < DROPEMAIL_BUFSIZE; i++) { + if (irc_stricmp(u->nick, dropemail_buffer[i].sender) == 0 + && stricmp(mask, dropemail_buffer[i].mask) == 0 + ) { + memset(&dropemail_buffer[i], 0, sizeof(dropemail_buffer[i])); + } + } + + /* Register command in buffer */ + found = -1; + for (i = 0; i < DROPEMAIL_BUFSIZE; i++) { + if (!*dropemail_buffer[i].sender) { + found = i; + break; + } + } + if (found < 0) { + found = 0; + for (i = 1; i < DROPEMAIL_BUFSIZE; i++) { + if (dropemail_buffer[i].sent < dropemail_buffer[found].sent) + found = i; + } + } + memset(&dropemail_buffer[found], 0, sizeof(dropemail_buffer[found])); + strscpy(dropemail_buffer[found].sender, u->nick, + sizeof(dropemail_buffer[found].sender)); + strscpy(dropemail_buffer[found].mask, mask, + sizeof(dropemail_buffer[found].mask)); + dropemail_buffer[found].sent = time(NULL); + dropemail_buffer[found].count = count; + + /* Send count and prompt for confirmation */ + notice_lang(s_NickServ, u, NICK_DROPEMAIL_COUNT, count, s_NickServ, mask); +} + + +static void do_dropemail_confirm(User *u) +{ + char *mask = strtok(NULL, " "); + NickGroupInfo *ngi; + int i; + + /* Parameter check */ + if (!mask || strtok_remaining()) { + syntax_error(s_NickServ, u, "DROPEMAIL-CONFIRM", + NICK_DROPEMAIL_CONFIRM_SYNTAX); + return; + } + + /* Make sure this is a DROPEMAIL that (1) we've seen and (2) hasn't + * expired */ + for (i = 0; i < DROPEMAIL_BUFSIZE; i++) { + if (irc_stricmp(u->nick, dropemail_buffer[i].sender) == 0 + && stricmp(mask, dropemail_buffer[i].mask) == 0 + && time(NULL) - dropemail_buffer[i].sent < NSDropEmailExpire + ) { + break; + } + } + if (i >= DROPEMAIL_BUFSIZE) { + notice_lang(s_NickServ, u, NICK_DROPEMAIL_CONFIRM_UNKNOWN); + return; + } + + /* Okay, go ahead and delete */ + notice_lang(s_NickServ, u, NICK_DROPEMAIL_CONFIRM_DROPPING, + dropemail_buffer[i].count); + if (readonly) + notice_lang(s_NickServ, u, READ_ONLY_MODE); + if (strcmp(mask,"-") == 0) + mask = NULL; + for (ngi = first_nickgroupinfo(); ngi; ngi = next_nickgroupinfo()) { + if ((mask && ngi->email && match_wild_nocase(mask,ngi->email)) + || (!mask && !ngi->email) + ) { + drop_nickgroup(ngi, u, mask ? mask : "-"); + } + } + notice_lang(s_NickServ, u, NICK_DROPEMAIL_CONFIRM_DROPPED); +} + +/*************************************************************************/ + /* Show hidden info to nick owners and sadmins when the "ALL" parameter is * supplied. If a nick is online, the "Last seen address" changes to "Is * online from". @@ -1476,6 +1621,8 @@ { "NSDefMemoSignon", { { CD_SET, 0, &NSDefMemoSignon } } }, { "NSDefPrivate", { { CD_SET, 0, &NSDefPrivate } } }, { "NSDefSecure", { { CD_SET, 0, &NSDefSecure } } }, + { "NSDropEmailExpire",{ { CD_TIME, CF_DIRREQ, &NSDropEmailExpire } } }, + { "NSEnableDropEmail",{ { CD_SET, 0, &NSEnableDropEmail } } }, { "NSEnableRegister", { { CD_SET, 0, &NSEnableRegister } } }, { "NSEnforcerUser", { { CD_STRING, CF_DIRREQ, &temp_nsuserhost } } }, { "NSExpire", { { CD_TIME, 0, &NSExpire } } }, @@ -1497,6 +1644,8 @@ /* Pointer to command records (for EnableCommand) */ static Command *cmd_REGISTER; +static Command *cmd_DROPEMAIL; +static Command *cmd_DROPEMAIL_CONFIRM; static Command *cmd_GETPASS; /* Old message numbers */ @@ -1605,6 +1754,13 @@ cmd_REGISTER->name = "REGISTER"; else cmd_REGISTER->name = ""; + if (NSEnableDropEmail) { + cmd_DROPEMAIL->name = "DROPEMAIL"; + cmd_DROPEMAIL_CONFIRM->name = "DROPEMAIL-CONFIRM"; + } else { + cmd_DROPEMAIL->name = ""; + cmd_DROPEMAIL_CONFIRM->name = ""; + } if (EnableGetpass) cmd_GETPASS->name = "GETPASS"; else @@ -1651,6 +1807,18 @@ exit_module(0); return 0; } + cmd_DROPEMAIL = lookup_cmd(module, "DROPEMAIL"); + if (!cmd_DROPEMAIL) { + module_log("BUG: unable to find DROPEMAIL command entry"); + exit_module(0); + return 0; + } + cmd_DROPEMAIL_CONFIRM = lookup_cmd(module, "DROPEMAIL-CONFIRM"); + if (!cmd_DROPEMAIL_CONFIRM) { + module_log("BUG: unable to find DROPEMAIL-CONFIRM command entry"); + exit_module(0); + return 0; + } cmd_GETPASS = lookup_cmd(module, "GETPASS"); if (!cmd_GETPASS) { module_log("BUG: unable to find GETPASS command entry"); @@ -1659,6 +1827,10 @@ } if (!NSEnableRegister) cmd_REGISTER->name = ""; + if (!NSEnableDropEmail) { + cmd_DROPEMAIL->name = ""; + cmd_DROPEMAIL_CONFIRM->name = ""; + } if (!EnableGetpass) cmd_GETPASS->name = ""; @@ -1796,8 +1968,15 @@ unregister_callback(module, cb_help); unregister_callback(module, cb_command); - cmd_GETPASS->name = "GETPASS"; - cmd_REGISTER->name = "REGISTER"; + /* These are static, so the pointers don't need to be cleared */ + if (cmd_GETPASS) + cmd_GETPASS->name = "GETPASS"; + if (cmd_DROPEMAIL_CONFIRM) + cmd_DROPEMAIL_CONFIRM->name = "DROPEMAIL-CONFIRM"; + if (cmd_DROPEMAIL) + cmd_DROPEMAIL->name = "DROPEMAIL"; + if (cmd_REGISTER) + cmd_REGISTER->name = "REGISTER"; unregister_commands(module, cmds); del_commandlist(module); diff -uNr ircservices-5.0.21/modules/nickserv/nickserv.h ircservices-5.0.22/modules/nickserv/nickserv.h --- ircservices-5.0.21/modules/nickserv/nickserv.h 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/nickserv/nickserv.h 2003-09-16 04:17:49 +0900 @@ -156,7 +156,7 @@ /* Used when we can't retrieve the NickGroupInfo record for a nick, to * prevent the nick from being registered. */ -#define NICKGROUPINFO_INVALID ((NickGroupInfo *)-1) +#define NICKGROUPINFO_INVALID ((NickGroupInfo *)PTR_INVALID) /*************************************************************************/ diff -uNr ircservices-5.0.21/modules/nickserv/ns-local.h ircservices-5.0.22/modules/nickserv/ns-local.h --- ircservices-5.0.21/modules/nickserv/ns-local.h 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/nickserv/ns-local.h 2003-09-16 04:17:49 +0900 @@ -22,6 +22,12 @@ /*************************************************************************/ +/* Number of DROPEMAIL commands to buffer for DROPEMAIL-CONFIRM. */ + +#define DROPEMAIL_BUFSIZE 4 + +/*************************************************************************/ + #define TO_COLLIDE 0 /* Collide the user with this nick */ #define TO_RELEASE 1 /* Release a collided nick */ #define TO_SEND_433 2 /* Send a 433 numeric */ @@ -95,6 +101,7 @@ E NickInfo *makenick(const char *nick, NickGroupInfo **nickgroup_ret); E int delnick(NickInfo *ni); E int delgroup(NickGroupInfo *ngi); +E int drop_nickgroup(NickGroupInfo *ngi, const User *u, const char *dropemail); E void suspend_nick(NickGroupInfo *ngi, const char *reason, const char *who, const time_t expires); E void unsuspend_nick(NickGroupInfo *ngi, int set_time); diff -uNr ircservices-5.0.21/modules/nickserv/set.c ircservices-5.0.22/modules/nickserv/set.c --- ircservices-5.0.21/modules/nickserv/set.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/nickserv/set.c 2003-09-16 04:17:49 +0900 @@ -239,7 +239,8 @@ static void do_set_url(User *u, NickGroupInfo *ngi, char *param) { - /* FIXME: is this the best way to get the nick? (see also do_set_email, do_set_info) */ + /* FIXME: is this the best way to get the nick? (see also do_set_email, + * do_set_info, and etc in other files) */ const char *nick = ngi->nicks[ngi->mainnick]; if (param && !valid_url(param)) { @@ -263,6 +264,7 @@ static void do_set_email(User *u, NickGroupInfo *ngi, char *param) { const char *nick = ngi->nicks[ngi->mainnick]; + char oldemail[BUFSIZE]; if (param && !valid_email(param)) { notice_lang(s_NickServ, u, BAD_EMAIL); @@ -281,11 +283,21 @@ } } - free(ngi->email); + if (ngi->email) { + strscpy(oldemail, ngi->email, sizeof(oldemail)); + free(ngi->email); + } else { + *oldemail = 0; + } if (param) { ngi->email = sstrdup(param); - module_log("%s E-mail address changed to %s by %s!%s@%s", - nick, param, u->nick, u->username, u->host); + if (*oldemail) { + module_log("%s E-mail address changed from %s to %s by %s!%s@%s", + nick, oldemail, param, u->nick, u->username, u->host); + } else { + module_log("%s E-mail address set to %s by %s!%s@%s", + nick, param, u->nick, u->username, u->host); + } notice_lang(s_NickServ, u, NICK_SET_EMAIL_CHANGED, nick, param); if (!is_services_admin(u)) { /* FIXME (like mail-auth) this prolly wants a flag for self/other*/ @@ -296,8 +308,10 @@ } } else { ngi->email = NULL; - module_log("%s E-mail address cleared by %s!%s@%s", - nick, u->nick, u->username, u->host); + if (*oldemail) { + module_log("%s E-mail address cleared by %s!%s@%s (was %s)", + nick, u->nick, u->username, u->host, oldemail); + } notice_lang(s_NickServ, u, NICK_UNSET_EMAIL, nick); } put_nickgroupinfo(ngi); diff -uNr ircservices-5.0.21/modules/nickserv/util.c ircservices-5.0.22/modules/nickserv/util.c --- ircservices-5.0.21/modules/nickserv/util.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/nickserv/util.c 2003-09-16 04:17:49 +0900 @@ -591,6 +591,37 @@ /*************************************************************************/ +/* Drop a nickgroup, logging appropriate information about it first. `u' + * is the user dropping the nickgroup; `dropemail' should have one of the + * following values: + * - NULL for a user dropping their own nick + * - PTR_INVALID for a DROPNICK from a Services admin + * - The pattern used for a DROPEMAIL from a Services admin + * Returns the result of delgroup(ngi). + */ + +int drop_nickgroup(NickGroupInfo *ngi, const User *u, const char *dropemail) +{ + int i; + + module_log("%s!%s@%s dropped nickgroup %u%s%s%s%s%s%s%s:", + u->nick, u->username, u->host, ngi->id, + ngi->email ? " (E-mail " : "", + ngi->email ? ngi->email : "", + ngi->email ? ")" : "", + dropemail ? " as Services admin" : "", + (dropemail && dropemail!=PTR_INVALID) ? " (DROPEMAIL on " : "", + (dropemail && dropemail!=PTR_INVALID) ? dropemail : "", + (dropemail && dropemail!=PTR_INVALID) ? ")" : ""); + ARRAY_FOREACH (i, ngi->nicks) { + module_log(" -- %s!%s@%s dropped nick %s", + u->nick, u->username, u->host, ngi->nicks[i]); + } + return delgroup(ngi); +} + +/*************************************************************************/ + /* Create a new SuspendInfo structure and associate it with the given nick * group. */ diff -uNr ircservices-5.0.21/modules/operserv/main.c ircservices-5.0.22/modules/operserv/main.c --- ircservices-5.0.21/modules/operserv/main.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/modules/operserv/main.c 2003-09-16 04:17:49 +0900 @@ -795,11 +795,11 @@ wallops(s_OperServ, "%s used CLEARMODES%s on %s", u->nick, all ? " ALL" : "", chan); if (all) { - clear_channel(s_OperServ, c, CLEAR_UMODES, (void *)MODE_ALL); - clear_channel(s_OperServ, c, CLEAR_MODES | CLEAR_BANS, NULL); + clear_channel(c, CLEAR_UMODES, (void *)MODE_ALL); + clear_channel(c, CLEAR_MODES | CLEAR_BANS, NULL); notice_lang(s_OperServ, u, OPER_CLEARMODES_ALL_DONE, chan); } else { - clear_channel(s_OperServ, c, CLEAR_MODES | CLEAR_BANS, NULL); + clear_channel(c, CLEAR_MODES | CLEAR_BANS, NULL); notice_lang(s_OperServ, u, OPER_CLEARMODES_DONE, chan); } } @@ -826,7 +826,7 @@ if (WallOSChannel) wallops(s_OperServ, "%s used CLEARCHAN on %s", u->nick, chan); snprintf(buf, sizeof(buf), "CLEARCHAN by %s", u->nick); - clear_channel(s_OperServ, c, CLEAR_USERS, buf); + clear_channel(c, CLEAR_USERS, buf); notice_lang(s_OperServ, u, OPER_CLEARCHAN_DONE, chan); } } @@ -1584,6 +1584,10 @@ /* For enabling/disabling RAW command (AllowRaw) */ static Command *cmd_RAW = NULL; +/* Previous value of clear_channel() sender */ +static char old_clearchan_sender[NICKMAX]; +static int old_clearchan_sender_set = 0; + /*************************************************************************/ static int do_load_module(Module *mod, const char *modname) @@ -1654,8 +1658,11 @@ } else { Command *cmd; /* After reconfiguration: handle value changes. */ - if (strcmp(old_s_OperServ, s_OperServ) != 0) + if (strcmp(old_s_OperServ, s_OperServ) != 0) { + if (strcmp(set_clear_channel_sender(PTR_INVALID),old_s_OperServ)==0) + set_clear_channel_sender(s_OperServ); send_nickchange(old_s_OperServ, s_OperServ); + } if (!old_desc_OperServ || strcmp(old_desc_OperServ,desc_OperServ) != 0) send_namechange(s_OperServ, desc_OperServ); if (!old_OperDBName || strcmp(old_OperDBName, OperDBName) != 0) { @@ -1774,6 +1781,10 @@ if (linked) introduce_operserv(NULL); + strscpy(old_clearchan_sender, set_clear_channel_sender(s_OperServ), + sizeof(old_clearchan_sender)); + old_clearchan_sender_set = 1; + return 1; } @@ -1785,6 +1796,11 @@ shutdown_unused = shutdown_unused; #endif + if (old_clearchan_sender_set) { + set_clear_channel_sender(old_clearchan_sender); + old_clearchan_sender_set = 0; + } + if (linked) { send_cmd(s_OperServ, "QUIT :"); send_cmd(s_GlobalNoticer, "QUIT :"); diff -uNr ircservices-5.0.21/modules/protocol/bahamut.c ircservices-5.0.22/modules/protocol/bahamut.c --- ircservices-5.0.21/modules/protocol/bahamut.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/bahamut.c 2003-09-16 04:17:49 +0900 @@ -415,13 +415,13 @@ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (setter) return 0; c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, + send_cmd(source, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/modules/protocol/dalnet.c ircservices-5.0.22/modules/protocol/dalnet.c --- ircservices-5.0.21/modules/protocol/dalnet.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/dalnet.c 2003-09-16 04:17:49 +0900 @@ -207,15 +207,15 @@ /******************************* Callbacks *******************************/ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (c->topic_time && t >= c->topic_time) t = c->topic_time - 1; /* Force topic change */ if (setter) return 0; c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, + send_cmd(source, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/modules/protocol/dreamforge.c ircservices-5.0.22/modules/protocol/dreamforge.c --- ircservices-5.0.21/modules/protocol/dreamforge.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/dreamforge.c 2003-09-16 04:17:49 +0900 @@ -317,15 +317,15 @@ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (setter) return 0; if (c->topic_time && t >= c->topic_time) t = c->topic_time - 1; /* Force topic change */ c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, + send_cmd(source, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/modules/protocol/monkey.c ircservices-5.0.22/modules/protocol/monkey.c --- ircservices-5.0.21/modules/protocol/monkey.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/monkey.c 2003-09-16 04:17:49 +0900 @@ -361,13 +361,13 @@ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (setter) return 0; c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, + send_cmd(source, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/modules/protocol/ptlink.c ircservices-5.0.22/modules/protocol/ptlink.c --- ircservices-5.0.21/modules/protocol/ptlink.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/ptlink.c 2003-09-16 04:17:49 +0900 @@ -488,13 +488,13 @@ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (setter) return 0; c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, + send_cmd(source, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/modules/protocol/rfc1459.c ircservices-5.0.22/modules/protocol/rfc1459.c --- ircservices-5.0.21/modules/protocol/rfc1459.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/rfc1459.c 2003-09-16 04:17:49 +0900 @@ -209,13 +209,13 @@ /******************************* Callbacks *******************************/ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (setter) return 0; c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s :%s", c->name, + send_cmd(source, "TOPIC %s %s :%s", c->name, c->topic_setter, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/modules/protocol/trircd.c ircservices-5.0.22/modules/protocol/trircd.c --- ircservices-5.0.21/modules/protocol/trircd.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/trircd.c 2003-09-16 04:17:49 +0900 @@ -68,6 +68,8 @@ ModeData data; }; +#define MI_5_5 0x80000000 /* Mode available only in version 5.5+ */ + static const struct modedata_init new_usermodes[] = { {'g', {0x00000008}}, /* Receive globops */ {'h', {0x00000010}}, /* Helpop */ @@ -78,6 +80,20 @@ {'x', {0x00000100}}, /* Mask hostname */ {'R', {0x00000200}}, /* Do not receive text from unregged nicks */ {'L', {0x00000400}}, /* Nick language has been set */ + {'c', {0x00000800,0,0,0,MI_5_5}}, + /* No color in private messages */ + {'C', {0x00001000,0,0,0,MI_5_5}}, + /* No CTCPs in private messages */ + {'H', {0x00002000,0,0,0,MI_5_5}}, + /* User can see realhost, secret channels */ + {'p', {0x00004000,0,0,0,MI_5_5}}, + /* Hide idle time in /whois */ + {'P', {0x00008000,0,0,0,MI_5_5}}, + /* Do not receive private messages */ + {'t', {0x00010000,0,0,0,MI_5_5}}, + /* Greek->Greeklish translation active */ + {'z', {0x00020000,0,0,0,MI_5_5}}, + /* Dccallow all users */ }; static const struct modedata_init new_chanmodes[] = { @@ -87,15 +103,23 @@ {'c', {0x00000400,0,0}}, /* No ANSI colors in channel */ {'O', {0x00000800,0,0,0,MI_OPERS_ONLY}}, /* Only opers can join channel */ + {'T', {0x00001000,0,0}}, /* /topic only by protected (+a) */ + {'x', {0x00002000,0,0}}, /* Hide ops (show no .@%+ prefixes) */ + {'N', {0x00004000,0,0}}, /* No clients with unresolved hostnames */ + {'d', {0x00008000,0,0}}, /* Hide part/quit reasons */ + {'f', {0x00010000,1,0}}, /* Flood limit */ + {'C', {0x00020000,0,0,0,MI_5_5}}, + /* No CTCP in channel */ + {'g', {0x00040000,0,0,0,MI_5_5}}, + /* Only registered nicks can talk */ + {'j', {0x00080000,0,0,0,MI_5_5}}, + /* /names only by members */ + {'L', {0x00100000,1,0,0,MI_5_5}}, + /* Channel link */ {'I', {0x80000000,1,1,0,MI_MULTIPLE}}, /* INVITE hosts */ {'e', {0x80000000,1,1,0,MI_MULTIPLE}}, /* ban exceptions */ {'M', {0x80000000,1,1,0,MI_MULTIPLE}}, /* moderated hosts */ {'z', {0x80000000,1,1,0,MI_MULTIPLE}}, /* zapped channels */ - {'f', {0x00800000,1,0}}, /* Flood limit */ - {'T', {0x04000000,0,0}}, /* /topic only by protected (+a) */ - {'x', {0x08000000,0,0}}, /* Hide ops (show no .@%+ prefixes) */ - {'N', {0x10000000,0,0}}, /* No clients with unresolved hostnames */ - {'d', {0x20000000,0,0}}, /* Hide part/quit reasons (5.1 or later) */ }; static const struct modedata_init new_chanusermodes[] = { @@ -105,16 +129,23 @@ /* Channel owner */ }; -static void init_modes(void) +static void init_modes(int do_5_5) { int i; - for (i = 0; i < lenof(new_usermodes); i++) - usermodes[new_usermodes[i].mode] = new_usermodes[i].data; - for (i = 0; i < lenof(new_chanmodes); i++) - chanmodes[new_chanmodes[i].mode] = new_chanmodes[i].data; - for (i = 0; i < lenof(new_chanusermodes); i++) - chanusermodes[new_chanusermodes[i].mode] = new_chanusermodes[i].data; + for (i = 0; i < lenof(new_usermodes); i++) { + if ((do_5_5 != 0) == ((new_usermodes[i].data.info & MI_5_5) != 0)) + usermodes[new_usermodes[i].mode] = new_usermodes[i].data; + } + for (i = 0; i < lenof(new_chanmodes); i++) { + if ((do_5_5 != 0) == ((new_chanmodes[i].data.info & MI_5_5) != 0)) + chanmodes[new_chanmodes[i].mode] = new_chanmodes[i].data; + } + for (i = 0; i < lenof(new_chanusermodes); i++) { + if ((do_5_5 != 0) == ((new_chanusermodes[i].data.info & MI_5_5) != 0)) + chanusermodes[new_chanusermodes[i].mode] = + new_chanusermodes[i].data; + } mode_setup(); }; @@ -140,6 +171,7 @@ { LANG_NL, "Nederlands" }, { LANG_DE, "Deutsch" }, { LANG_IT, "Italian" }, + { LANG_HU, "Magyar" }, }; static void init_langhash() @@ -269,16 +301,22 @@ static void m_capab(char *source, int ac, char **av) { - int got_dtone = 0, got_trircd5 = 0; + int got_dtone = 0, got_nickip = 0, got_trircd5 = 0; int i; for (i = 0; i < ac; i++) { - if (stricmp(av[i], "NOQUIT") == 0) + if (stricmp(av[i], "NOQUIT") == 0) { protocol_features |= PF_NOQUIT; - else if (stricmp(av[i], "DT1") == 0) - got_dtone = 1; - else if (stricmp(av[i], "TRIRCD5") == 0) - got_trircd5 = 1; + } else if (stricmp(av[i], "DT1") == 0) { + got_dtone = 1; + } else if (stricmp(av[i], "NICKIP") == 0) { + got_nickip = 1; + } else if (stricmp(av[i], "TRIRCD5") == 0) { + got_trircd5 = 1; + } else if (stricmp(av[i], "EXCAP") == 0) { + /* This is a 5.5 server */ + init_modes(1); + } } if (!got_trircd5) { send_error("Only trircd 5.1 and later are supported"); @@ -287,11 +325,28 @@ } if (!got_dtone) { send_error("Need DT1 protocol"); - quitmsg = (char *)"Remote server doesn't support DT1 protocol change"; + quitmsg = (char *)"Remote server doesn't support DT1"; + quitting = 1; + } + if (!got_dtone) { + send_error("Need NICKIP protocol"); + quitmsg = (char *)"Remote server doesn't support NICKIP"; quitting = 1; } } +static void m_excap(char *source, int ac, char **av) +{ + char *s; + + if (ac < 1) + return; + for (s = strtok(av[0]," "); s != NULL; s = strtok(NULL," ")) { + if (stricmp(s, "CHANLINK") == 0) { + } + } +} + /*************************************************************************/ static void m_svinfo(char *source, int ac, char **av) @@ -304,17 +359,16 @@ */ send_cmd(NULL, "PING :%s", ServerName); -/* send_cmd(NULL, "TOPIC %s %s %lu :Services Logging channel", LOGCHANNEL, s_DevNull, time(NULL)); */ - + send_cmd(NULL, "TOPIC #services DevNull %lu :Services Logging channel", time(NULL)); } /*************************************************************************/ static void m_tmode(char *source, int ac, char **av) { - if (ac < 4) { + if (ac < 3) { if (debug) - module_log("debug: TMODE: expected >=4 params, got %d", ac); + module_log("debug: TMODE: expected >=3 params, got %d", ac); return; } memmove(av+1, av+2, sizeof(char *) * (ac-1)); @@ -329,11 +383,14 @@ { "CAPAB", m_capab }, { "CLIENT", NULL }, { "DENYTEXT", NULL }, + { "EWHOIS", NULL }, + { "EXCAP", m_excap }, { "EXCLUDE", NULL }, { "GLINE", NULL }, { "GLOBOPS", NULL }, { "GNOTICE", NULL }, { "GOPER", NULL }, + { "HASH", NULL }, { "JUPITER", NULL }, { "MYID", NULL }, { "NETHTM", NULL }, @@ -341,18 +398,22 @@ { "NICK", m_nick }, { "RAKILL", NULL }, { "REXCLUDE", NULL }, + { "REXCOM", NULL }, { "RNOTICE", NULL }, + { "RPING", NULL }, + { "RPUNG", NULL }, { "SADMINS", NULL }, + { "SGLINE", NULL }, { "SILENCE", NULL }, { "SJOIN", m_sjoin }, - { "SQLINE", NULL }, + { "SQLINE", NULL }, { "SVINFO", m_svinfo }, - { "SVSJOIN", NULL }, { "SZLINE", NULL }, { "TMODE", m_tmode }, { "UNDENYTEXT",NULL }, { "UNGLINE", NULL }, { "UNJUPITER", NULL }, + { "UNSGLINE", NULL }, { "UNSQLINE", NULL }, { "UNSZLINE", NULL }, { NULL } @@ -371,7 +432,7 @@ { ")", NULL }, { "*", NULL }, { "+", NULL }, - { ",", NULL }, + { ",", "EWHOIS" }, { "-", NULL }, { ".", NULL }, { "/", NULL }, @@ -461,7 +522,7 @@ { "y", "UNGLINE" }, { "z", "SVINFO" }, { "{", NULL }, - { "|", NULL }, + { "|", "REXCOM" }, { "}", NULL }, { "~", "TMODE" }, @@ -511,7 +572,8 @@ static void do_send_server(void) { send_cmd(NULL, "PASS %s :TS7", RemotePassword); - send_cmd(NULL, "CAPAB TS3 NOQUIT SSJOIN NICKIP DT1 EX-REX TOKEN1 TMODE"); + send_cmd(NULL, "CAPAB TS3 NOQUIT SSJOIN NICKIP DT1 EX-REX TOKEN1 TMODE EXCAP"); + send_cmd(NULL, "EXCAP :CHANLINK"); send_cmd(NULL, "SERVER %s 1 :%s", ServerName, ServerDesc); send_cmd(NULL, "SVINFO 3 3 0 :%ld", (long)time(NULL)); } @@ -657,6 +719,17 @@ int32 flag = mode_char_to_flag(modechar, MODE_CHANNEL); switch (modechar) { + case 'L': + free(channel->link); + if (add) { + channel->mode |= flag; + channel->link = sstrdup(av[0]); + } else { + channel->mode &= ~flag; + channel->link = NULL; + } + return 1; + case 'f': free(channel->flood); if (add) { @@ -700,13 +773,13 @@ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (setter) return 0; c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %ld :%s", c->name, + send_cmd(source, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } @@ -717,7 +790,17 @@ { if (add) { switch (mode_flag_to_char(flag, MODE_CHANNEL)) { - case 'f': + case 'L': + if (!ci->mlock_link) { + module_log("warning: removing +L from channel %s mode lock" + " (missing parameter)", ci->name); + ci->mlock_on &= ~mode_char_to_flag('L', MODE_CHANNEL); + } else { + if (!c->link || irc_stricmp(ci->mlock_link, c->link) != 0) + set_cmode(s_ChanServ, c, "+L", ci->mlock_link); + } + return 1; + case 'f': if (!ci->mlock_flood) { module_log("warning: removing +f from channel %s mode lock" " (missing parameter)", ci->name); @@ -726,7 +809,7 @@ if (!c->flood || irc_stricmp(ci->mlock_flood, c->flood) != 0) set_cmode(s_ChanServ, c, "+f", ci->mlock_flood); } - return 1; + return 1; } } return 0; @@ -736,12 +819,28 @@ static int do_set_mlock(User *u, ChannelInfo *ci, int mode, int add, char **av) { - if (!mode) + if (!mode) { + /* Final check of new mode lock--nothing to do */ return 0; + } /* Single mode set/clear */ if (add) { switch (mode) { + case 'L': + if (!valid_chan(av[0])) { + /* Invalid channel name */ + notice_lang(s_ChanServ, u, CHAN_SET_MLOCK_LINK_BAD, mode); + return 1; + } + if (irc_stricmp(av[0], ci->name) == 0) { + /* Trying to link to the same channel */ + notice_lang(s_ChanServ, u, CHAN_SET_MLOCK_LINK_SAME, mode); + return 1; + } + ci->mlock_link = sstrdup(av[0]); + break; + case 'f': { char *s, *t; /* Legal format for flood mode is "[*]digits:digits" */ @@ -954,7 +1053,7 @@ module = module_; protocol_name = "trircd"; - protocol_version = "5.1+"; + protocol_version = "5.5+"; protocol_features = PF_SZLINE | PF_SVSJOIN | PF_AKILL_EXCL | PF_HALFOP; protocol_nickmax = 30; @@ -990,7 +1089,7 @@ return 0; } - init_modes(); + init_modes(0); init_langhash(); irc_lowertable['['] = '['; @@ -1033,6 +1132,7 @@ exit_halfop(); exit_chanprot(); exit_banexcept(); + remove_callback(NULL, "set topic", do_set_topic); remove_callback(NULL, "clear channel", do_clear_ban); remove_callback(NULL, "user MODE", do_user_mode); diff -uNr ircservices-5.0.21/modules/protocol/ts8.c ircservices-5.0.22/modules/protocol/ts8.c --- ircservices-5.0.21/modules/protocol/ts8.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/ts8.c 2003-09-16 04:17:49 +0900 @@ -210,15 +210,15 @@ /******************************* Callbacks *******************************/ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (c->topic_time && t >= c->topic_time) t = c->topic_time - 1; /* Force topic change */ if (setter) return 0; c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, + send_cmd(source, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/modules/protocol/undernet-p9.c ircservices-5.0.22/modules/protocol/undernet-p9.c --- ircservices-5.0.21/modules/protocol/undernet-p9.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/undernet-p9.c 2003-09-16 04:17:49 +0900 @@ -204,13 +204,13 @@ /******************************* Callbacks *******************************/ /*************************************************************************/ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (setter) return 0; c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %lu :%s", c->name, c->topic_setter, + send_cmd(source, "TOPIC %s %s %lu :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/modules/protocol/unreal.c ircservices-5.0.22/modules/protocol/unreal.c --- ircservices-5.0.21/modules/protocol/unreal.c 2003-07-14 15:21:51 +0900 +++ ircservices-5.0.22/modules/protocol/unreal.c 2003-09-16 04:17:49 +0900 @@ -463,8 +463,12 @@ static void m_svsmode(char *source, int ac, char **av) { - if (*av[0] == '#' || *av[0] == '&') { - module_log("SVSMODE from %s for invalid target (channel %s): %s", + if (*av[0] == '#') { + /* FIXME: support this */ + module_log("SVS[2]MODE from %s for channel %s (not supported): %s", + source, av[0], merge_args(ac-1,av+1)); + } else if (*av[0] == '&') { + module_log("SVS[2]MODE from %s for invalid target (channel %s): %s", source, av[0], merge_args(ac-1,av+1)); } else { if (ac < 2) @@ -538,6 +542,7 @@ { "SMO", NULL }, { "SQLINE", NULL }, { "SVSMODE", m_svsmode }, + { "SVS2MODE", m_svsmode }, { "TKL", m_tkl }, { "UMODE2", m_umode2 }, { NULL } @@ -1016,15 +1021,15 @@ * force a topic change. */ -static int do_set_topic(Channel *c, const char *topic, const char *setter, - time_t t) +static int do_set_topic(const char *source, Channel *c, const char *topic, + const char *setter, time_t t) { if (setter) return 0; if (t <= c->topic_time) t = c->topic_time + 1; /* Force topic change */ c->topic_time = t; - send_cmd(ServerName, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, + send_cmd(source, "TOPIC %s %s %ld :%s", c->name, c->topic_setter, (long)c->topic_time, c->topic ? c->topic : ""); return 1; } diff -uNr ircservices-5.0.21/send.c ircservices-5.0.22/send.c --- ircservices-5.0.21/send.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/send.c 2003-09-16 04:17:48 +0900 @@ -214,11 +214,15 @@ va_end(args); s = buf; while (*s) { + char c; + if (*s == '\n') + s++; t = s; s += strcspn(s, "\n"); - if (*s) - *s++ = 0; + c = *s; + *s = 0; send_cmd(source, "NOTICE %s :%s", dest->nick, *t ? t : " "); + *s = c; } } @@ -249,11 +253,15 @@ va_end(args); s = buf; while (*s) { + char c; + if (*s == '\n') + s++; t = s; s += strcspn(s, "\n"); - if (*s) - *s++ = 0; + c = *s; + *s = 0; strscpy(outbuf, t, sizeof(outbuf)); + *s = c; strnrepl(outbuf, sizeof(outbuf), "\1\1", source); send_cmd(source, "NOTICE %s :%s", dest->nick, *outbuf ? outbuf : " "); } diff -uNr ircservices-5.0.21/users.c ircservices-5.0.22/users.c --- ircservices-5.0.21/users.c 2003-07-14 15:21:50 +0900 +++ ircservices-5.0.22/users.c 2003-09-16 04:17:48 +0900 @@ -317,6 +317,10 @@ strscpy(oldnick, user->nick, NICKMAX); call_callback_2(NULL, cb_nickchange1, user, av[0]); + /* Flush out all mode changes; necessary to avoid desynch (otherwise + * we can't find the user when the mode goes out later). The IRC + * servers will take care of translating the old nick to the new one */ + set_cmode(NULL, NULL); change_user_nick(user, av[0]); call_callback_2(NULL, cb_nickchange2, user, oldnick); } diff -uNr ircservices-5.0.21/version.sh ircservices-5.0.22/version.sh --- ircservices-5.0.21/version.sh 2003-07-14 15:13:02 +0900 +++ ircservices-5.0.22/version.sh 2003-09-16 04:14:15 +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.21 +VERSION=5.0.22 # Increment Services build number if [ -f version.c ] ; then