Commits


ngIRCd Release 22~rc1


Update NEWS and ChangeLog for ngIRCd 22 once more ...


Sync "except lists" between servers Up to now, ban, invite, and G-Line lists have been synced between servers while linking -- but obviously nobody noticed that except list have been missing ever since. Until now. Thanks to "j4jackj", who reported this issue in #ngircd.


Allow longer usernames for authentication


Correctly check that a server has a valid hostname and port David Binderman <dcb314@hotmail.com> reported the following compiler warning, which is a real bug in ngIRCd, thanks! conn.c:2077:55: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]


Fix spelling and whitespaces in INSTALL


Update NEWS and ChangeLog for ngIRCd 22


Lists_MakeMask: Don't destroy source buffer


Initialize Conf_ScrubCTCP even when SYSLOG isn't #define'd The "SYSLOG" #define isn't related to "Conf_ScrubCTCP" at all, so initialize the latter even when "SYSLOG" isn't #define'd. Pointed out by wowaname on #ngircd, thanks!


Platforms.txt: Add and update systems - Add armv7l/unk./linux-gnueabihf - Add x86_64/apple/darwin14.0.0 Thanks to Götz Hoffart <goetz@hoffart.de>!


Increase MAX_SERVERS from 16 to 64 There are installations out there that would like to configure more than 16 links per server, so increase this limit. Best would be to get rid of MAX_SERVERS altogether and make if fully dynamic, but start with this quick and dirty hack ...


New "Debian release" 21.1-0ab2 (cherry picked from commit 48fcb97fa4a2762a873d9d693c7a126588a1811d)


Debian: Don't adjust path names that are correct by default


Debian: Correctly set and use "docdir"


Update config.guess and config.sub to recent versions - config.guess: 2014-03-23 - config.sub: 2014-05-01


Add "tests-skipped.lst" to src/testsuite/.gitignore


Test suite/platformtest.sh: Detect when tests have been skipped Detect if some tests have been skipped, for example when telnet(1) or expect(1) is missing: ./contrib/platformtest.sh will echo a warning message now.


Platforms.txt: Add and update systems - Add sparc/unknown/openbsd5.5 - Update powerpc/apple/darwin7.9.0 - Update x86_64/unknown/linux-gnu, Open64 - Update x86_64/unknown/linux-gnu, Sun C 5.12/Solaris Studio 12.3 - Update x86_64/unknown/linux-gnu, tcc 0.9.25 Thanks to Götz Hoffart <goetz@hoffart.de>!


Add "cov-int" directory (Coverity test tool) to .gitignore file


Test suite: Update file headers and comments


Update links to "Arthur" to use the HTTP protocol


ngIRCd Release 21.1 (cherry picked from commit ee28e76df2a73f3bb4bcf69c644eae9a10298a58)


Platforms.txt: Update i686/unknown/gnu0.5


Platforms.txt: Update powerpc/apple/darwin7.9.0 - Update powerpc/apple/darwin7.9.0, gcc 3.3 Thanks to Götz Hoffart <goetz@hoffart.de>!


Platforms.txt: Update x86_64/unkn./linux-gnu, clang 3.x - Update x86_64/unknown/linux-gnu, clang 3.2 => clang 3.3


Platforms.txt: Add and update more systems - update i686/pc/linux-gnu, gcc 2.7.2 - update powerpc/apple/darwin6.8, gcc 3.1 - add powerpc/apple/darwin9.8.0, gcc 4.0.1 Thanks to Götz Hoffart <goetz@hoffart.de>!


doc/Bopm.txt: Update file header


doc/Bopm.txt: Update "connregex" and "kline" for current ngIRCd Thanks to "kerin" on IRC for pointing this out!


Allow "DefaultUserModes" to set all possible modes Let IRC_MODE() detect that the "fake" MODE command originated on the local sever, which enables all modes to be settable using "DefaultUserModes" that can be set by regular MODE commands, including modes only settable by IRC Operators.


Spoofed prefixes: Really kill connection on non-server links This fixes commit 6cbe1308 which only killed the connection when the spoofed prefix itself belonged to a non-server client.


Implement user mode "F": "relaxed flood protection" ngIRCd relaxes its flood protection for users having the user mode "F" set and allows them to rapidly send data to the daemon. This mode is only settable by IRC Operators and can cause problems in the network -- so be careful and only set it on "trusted" clients! User mode "F" is used by Bahamut for this purpose, for example, see <http://docs.dal.net/docs/modes.html#4.9>.


Handle "throttling" in a single function ngIRCd uses "command throttling" and "bps throttling" (bytes per second). The states are detected in different functions, Conn_Handler() and Read_Request(), but handle the actual "throttling" in a common function: this enables us to guarantee consistent behavior and to disable throttling for special connections in only one place, eventually.


Updated config.{guess|sub} to version 2014-03-13


Streamline DEBUG_ARRAY, DEBUG_BUFFER, DEBUG_IO, DEBUG_ZIP Change all #define's to follow the form #define DEBUG_xxx {0|1} to disable (0, default) or enable (1) additional debug messages. And somewhat enhance some DEBUG_BUFFER messages.


conn.c: Code cleanup Reformat and restructure some code, move all SSL related code into one single #ifdef block, for example.


Xcode: remove imp.h and exp.h from project file These files have been removed from ngIRCd in commit 259c314d, "Remove imp.h and exp.h header files".


Re-add #include's for header files of the C file itself This partially reverts commit b130b35f4, "Update #include's: remove unused and add missing ones", but fixes the following compiler and analyzer warnings of Apple Xcode 5: "Semantic issue: No previous prototype for function 'yyy'"


Update copyright notices of recently changed files


Update #include's: remove unused and add missing ones The "deheader" tool (<http://www.catb.org/~esr/deheader/>) has been used to find unused #include directives as well as missing ones. Tested on: - A/UX 3.1.1 - ArchLinux (2014-03-17) - Debian GNU/Hurd - Debian GNU/Linux 6.0.9 - Debian GNU/Linux 7.4 - Fedora 20 - FreeBSD 9.2 - OpenBSD 4.8 - OpenBSD 5.1 - OS X 10.9 - Solaris 11


portab.h: Restructure and clean up code - Don't use HAVE_SYS_TYPES_H, <sys/types.h> is a required header now. - Streamline check for boolean data types. - Better indent #ifdef constructs.


configure[.ng]: <sys/types.h> is a required header file ngIRCd already includes <sys/types.h> in a lot of places without checking for its existence (for example in "ngircd.c", "io.c", ...), therefore make it a required header file.


io.c: <sys/time.h> is only needed when using select() Only include the <sys/time.h> header when using the select() IO API, it isn't required otherwise.


Remove imp.h and exp.h header files These include files don't have a function any more, remove them.


strdup.c: Code cleanup


Don't define SSL_Want{Read|Write}() when SSL is disabled Not even call the "dummy" functions.


Code cleanup, remove blank lines


Fix two K&R C portability issues Fix the following two errors emitted by the Apple K&R C compiler on Apple A/UX: "./class.c", line 47: no automatic aggregate initialization "./class.c", line 47: illegal lhs of assignment operator "./conf.c", line 1052: syntax error Tested on A/UX 3.1.1.


Merge pull request #6 from norrs/pam_server_password_fix Validate server password when PAM is disabled.


Use server password when PAM is compiled in but disabled


CHARCONV: Fix handling conversion errors Don't overwrite already converted text!


Streamline punctuation of log messages See commit d38d153f for details.


Services.txt: Update information for Anope 2.x


IRC_INVITE(): Code cleanup


Streamline punctuation of log messages See commit d38d153f for details.


Correctly use cloaked IRC masks on "INVITE nickname" The cloaked IRC mask of a user is his visible mask, so the daemon has to use it for generating the "one time" entries for the invite list of the given channel. Without this patch, ngIRCd records the real IRC mask which will never match while the target client is "+x", and even worse, will disclose the real mask on "MODE #channel +I" commands :-/ Bug reported by Cahata on #ngircd, thanks!


Use correct sender as target for ISUPPORT replies on "VERSION" This fixes commit 2e168c78 ("Return ISUPPORT(005) numerics on 'VERSION'") and make sure, that the 005 numerics are correctly routed back to the sender.


Return ISUPPORT(005) numerics on "VERSION" This is how ircd-seven, Charybdis, Hybrid, and InspIRCd behave, for example.


configure: Only link "contrib/Debian" if it exists This isn't the case on "VPATH builds", for example.


Merge pull request #5 from grawity/accountname-whois Show account name in WHOIS


Show account name in WHOIS This uses the same numeric as Charybdis and ircu families.


ngircd.conf.5: Update manual page


Merge branch 'no-range-matching' of git://arthur.barton.de/ngircd-alex * 'no-range-matching' of git://arthur.barton.de/ngircd-alex: Remove "range matching" functionality


Use $(MKDIR_P) instead of $(mkinstalldirs) in Makefile's And test for "mkdir -p" using AC_PROG_MKDIR_P in "configure".


Remove "range matching" functionality Don't support "range marching" in our pattern matching code using the "[...]" syntax, because [ and ] are valid characters in nick names and one has to quote them currently using the "\" character, which is quite unexpected. For example: Nick "te[st" => "MODE #channel +b te\[st" And remove quoting altogether, too, because "*" and "?" don't need to be quoted because these characters are not allowed in IRC masks, nicks, and hostnames. Reported by "hifi" (Toni Spets) on IRC, thanks!


Fix configure script and "make check" for TCP Wrappers Add missing #include's and static variables. Problem spotted on OpenBSD.


platformtest.sh: Allow using separate source and build trees Now you can call platformtest.sh using its complete path name from an other directory which is then used for building. See <http://www.gnu.org/software/automake/manual/html_node/VPATH-Builds.html> Please not that the build system itself is still (re-)genrated in the original source tree. This can be avoided by passing the "-x" switch to the platformtest.sh script.


Add libwrap at the end of the configure run If libwrap becomes added earlier, other tests may fail because of not all external variables required by libwrap are available when linking: for example allow_severity and deny_severity. This patch adds generic support for the LDFLAGS_END and LIBS_END variables (CFLAGS_END has been implemented already). Problem spotted on OpenBSD.


platformtest.sh: Show only up to 10 bytes of version information


platformtest.sh: New option "-x", don't renegerate build system


Client_SetHostname(): Don't use strlen() to test for value


Test suite: explicitely enable glibc memory checking


Send "fake '*' key" in "MODE -k" replies According to RFC 2812 3.2.3 "Channel mode message" and the examples there, it looks like clients should use "MODE -k <key>" to unset channel keys; and that's how other servers and services behave and do expect it. (But please note that this is NOT the case for "MODE -l"!) In the end, it doesn't make sense to specify a key when UNsetting it at all, and different services behave diffrently when clients do not send the currently set key to unset it - some ignore such calls, for example! But this implementation is quite relaxed, it accepts any key when unsetting channel mode "k" and even accepts no key at all. But the reply will always include an "*" character for every "-k" parameter.


Add "config.cache" to .gitignore file


platformtest.sh: don't use "test -e", it isn't portable


Makefile.am: don't use "test -e", it isn't portable


Support non-standard vsnprintf() return code C99 states that vsnprintf() "returns the number of characters that would have been printed if the n were unlimited"; but according to the Linux manual page "glibc until 2.0.6 would return -1 when the output was truncated" -- so we have to handle both cases ...


Partially revert bc098794: don't require autoconf 2.67 GNU autoconf 2.61 is still sufficient to generate the configure script, even after updating configure.{ng|in}, so don't require a newer version.


doc/Platforms.txt: Update some systems to ngIRCd 21 - update i686/pc/cygwin, gcc 4.8.2 - update x86_64/apple/darwin13.0.0, Apple clang 5.0 - update x86_64/unknown/freebsd8.4, gcc 4.2.1 - update x86_64/unknown/freebsd9.1, gcc 4.2.1 - update x86_64/unknown/linux-gnu, gcc 4.8.2 - update x86_64/unknown/linux-gnu, Open64 - update x86_64/unknown/openbsd4.8, gcc 4.2.1 - update x86_64/unknown/openbsd5.1, gcc 4.2.1


Update configure.ng for autoconf 2.67 We already require GNU autoconf 2.67 for generating our build system (at least this is what the INSTALL document states), so update the build system accordingly and implement all changes that autoupdate(1) suggests: - Update AC_PREREQ and AC_INIT - Use AC_LINK_IFELSE, AC_RUN_IFELSE, and AC_COMPILE_IFELSE - Remove AC_TYPE_SIGNAL (we don't use RETSIGTYPE)


Update Copyright notices for 2014


Merge branch 'bug167-WebircIPAnoDNS' of git://arthur.barton.de/ngircd-alex * 'bug167-WebircIPAnoDNS' of git://arthur.barton.de/ngircd-alex: WEBIRC: Don't respect hostname when DNS is disabled


Merge branch 'bug165-005-NETWORK' of git://arthur.barton.de/ngircd-alex * 'bug165-005-NETWORK' of git://arthur.barton.de/ngircd-alex: Implement new configuration option "Network"


WEBIRC: Don't respect hostname when DNS is disabled When DNS lookups are disabled, don't set the hostname received by the WEBIRC command, but use the IP address instead. Reported by Toni Spets <toni.spets@iki.fi>, thanks! Closes bug #167.


portabtest: Add checks for strdup(), strndup(), and strtok_r()


Implement new configuration option "Network" The new configuration variable "Network" is used to set the (completely optional) "network name", to which this instance of the daemon belongs. When set, this name is used in the ISUPPORT(005) numeric which is sent to all clients connecting to the server after logging in. Closes bug #165.


OS X has a working getaddrinfo() implementation


portabtest: Actually test functions Test functions snprintf(), strlcpy(), strlcat(), vsnprintf() for correctness, not only existance (which was quite useless, because if they weren't available, the program could not have been linked at all ...).


Check for working getaddrinfo() function At least AIX 4.3.3 and 5.1 have a broken implementation of getaddrinfo() which doesn't handle "0" as numeric service correctly. This patch adds a configure check for this case and changes all calling functions to only use getaddrinfo() if it "works". See <http://www.stacken.kth.se/lists/heimdal-discuss/2004-05/msg00059.html>


portabtest: Only use one exit code to indicate errors


Fix spelling


portabtest: Code cleanup


doc/Platforms.txt: Add and update more systems - add i386/unknown/netbsdelf1.5.2, egcs-1.1.2 - update i386/unknown/openbsd5.3, gcc 4.2.1 - add i386/unknown/openbsd5.4, gcc 4.2.1 - add x86_64/unknown/linux-gnu, nwcc 0.8.2 - update x86_64/unknown/linux-gnu, tcc 0.9.25 Thanks to Götz Hoffart <goetz@hoffart.de>!


Fix permanent k/gline Reported by Toni Spets (hifi - at - jnz - dot - fi).


doc/Platforms.txt: Add and update more systems - add i386/unknown/openbsd3.5, gcc 2.95.3 - add x86_64/unknown/linux-gnu, Sun C 5.12 - update mipsel/unknown/linux-gnu, gcc 4.4.5 Thanks to Götz Hoffart <goetz@hoffart.de>!


doc/Platforms.txt: add DragonflyBSD 3.4 on x86_64 Thanks to Götz Hoffart <goetz@hoffart.de>!


doc/Platforms.txt: add OpenBSD 5.4 on HPPA


configure: clean up function definitions


Only use unsetenv() when it is available AIX 4.3 dosn't support it, for example.


conf-ssl.h: make code compatible with pre-ANSI C compilers


vsnprintf.c: make code compatible with ansi2knr tool


Remove unused vsnprintf.c test function


Add comments around some IRC_SetPenalty() calls


Rework the penalty handling slightly Increase the penalty for a command before checking its arguments. This makes the handling more consistent and allow us to move more penalties to Handle_Request().


Move IRC_SetPenalty() to Handle_Request() when possible This centralizes the penalty handling. It also exposes some commands that lack it for our attention.


Introduce a macro to define the command list This will pave the way to other changes and simplifies the entries somewhat.


When sending an error use the IRC_WriteErrClient() variant This ensures that all errors have a 2 second penalty.


On bad /oper set the penalty to 10 seconds This helps against brute-force attempts.


Remove unneded IRC_SetPenalty() calls IRC_WriteErrClient() already calls IRC_SetPenalty(). While here convert some IRC_SetPenalty() + IRC_WriteStrClient() to IRC_WriteErrClient().


Use sizeof() intead of the explicit size


Remove wrong #ifdef in Option_String() This fixes the following error when compiling without zlib support: irc.c: In function ‘Option_String’: irc.c:487: error: ‘options’ undeclared (first use in this function) Reported by "der_baer" on #ngircd.


NEWS/ChangeLog: Clean up version numbers and release dates


ngIRCd Release 21


doc/Platforms.txt: add Mac OS X 10.6.8


Update doc/Platforms.txt


ngircd.init: Make sure no stale PID file is left over


platformtest.sh/Platforms.txt: allow user names up to 8 characters


Check and call arc4random_stir() if present FreeBSD prior to 10.0 does not automatically stir on fork(). Same with current NetBSD. If arc4random_stir() is present assume is needed and call it instead of srand().


Debian: Fix sed(1) rules adjusting "ngircd-full" package Error introduced by last commit :-/


Debian: Fix default "HelpFile" file name in ngircd.conf The "full" package variants must use "/usr/share/doc/ngircd-full/Commands.txt" and "/usr/share/doc/ngircd-full-dbg/Commands.txt" respectively.


ngIRCd Release 21~rc2


platformtest.sh: Detect clang compilers


Add support for longer config lines With the introduction of CipherList we could have longer config lines. Handle up to 1024 bytes and warn if the line will be truncated.


Report the correct file on error


doc/Platforms.txt: Add Open64 and tcc C compilers on Linux Thanks to Götz Hoffart!


platformtest.sh: Detect tcc compiler


Add support for arc4random If arc4random is present it will be used over the srand/rand interface. This fixes some warnings in OpenBSD-current.


Fix another strcat warning missed in commit 4c5b43


platformtest.sh: Clean up GIT source tree, when possible


platformtest.sh: Detect Apple LLVM (clang) compiler


Update (date of) manual pages


ChnageLog file: even more spelling fixes ...


INSTALL file: Update "Upgrade Information"


Fix spelling in NEWS and ChangeLog files


ngircd.c, main(): use strlcat() instead of strcat() This fixes the following warning on OpenBSD 5.3: ngircd.o(.text+0xeb4): In function `main': src/ngircd/ngircd.c:300: warning: strcat() is almost always misused, please use strlcat() Thanks to Götz Hoffart for reporting this!


ngIRCd Release 21~rc1


Update NEWS and ChangeLog files


Actually KILL clients on GLINE/KLINE Kill all clients that match a new GLINE/KLINE mask and genrate apropriate KILL commands. These KILL commands can be superfluous, but are required when the IRC Operator isn't allowd to set remote G-Lines or if there are older servers in the network that don't kill clients on GLINE/KLINE. Closes bug #156.


Don't forward KILL commands for unknown clients


New function IRC_KillClient() to kill clients The old local function Kill_Nick() in irc.c has been an ugly hack. This patch implements a generic function for killing clients. Adjust all callers of Kill_Nick() and respect the return code!


Adjust log messages for invalid and spoofed prefixes Now invalid prefixes aren't logged no more when originating from an other server (besides in debug mode), and spoofed prefixes are correctly logged using LOG_WARNING (from an other server) or LOG_ERR (from a client) levels. In addition, the log message texts have been adjusted to better reflect what will happen: commands with invalid prefixes are ignored and logged, commands with spoofed prefixes will result in the client being disconncted (regular users) or the command being ignored (other servers). This cleans up logging of commands related to already KILL'ed clients.


Remove CLIENT.oper_by_my, Client_SetOperByMe() and Client_OperByMe() All places where Client_OperByMe() is used can either be converted to Client_HasMode(Client, 'o') or Op_Check(). And Op_Check() itself can use the connection handle for deciding whether the IRC Operator is a local user or not.


Add support to show user links using "STATS L" Change "stats L" to show servers and user links and restrict it to IRC Operators.


Log an error (not info) when working directory can't be changed


doc/PAM.txt: add a slightly more useful example


Change the certificate fingerprint digest to sha256 While here correct some indentation.


Change cipher defaults Switch cipher defaults to HIGH:!aNULL:@STRENGTH (OpenSSL) or SECURE128 (GnuTLS).


Merge remote-tracking branch 'alex/bug162-SSLCipherList' * alex/bug162-SSLCipherList: Cipher list selection for GnuTLS ConnSSL_Init_SSL(): correctly set CONN_SSL flag Cipher list selection for OpenSSL ConnSSL_InitLibrary(): Code cleanup


Fix server reconnection In some error cases conn_id will be left as SERVER_WAIT and subsequently ignored in Check_Servers(). Ensure conn_id is set to NONE before returning from New_Server() if we couldn't establish the connection. Prompted by a report from gabrielgi-at-gmail-dot-com.


Cipher list selection for GnuTLS This patch implements the missing functionality for cipher list selection using GnuTLS (our OpenSSL code has this already).


Don't ignore SSL-related errors during startup Without this patch, ngIRCd ignores SSL-related messages and continues to start up but only listens on plain text communication ports -- and this most probably isn't what the administrator wanted ... Closes bug #163.


ConnSSL_Init_SSL(): correctly set CONN_SSL flag The CONN_SSL flag must be set before any calls to ConnSSL_Free()!


Cipher list selection for OpenSSL This patch introduces the possibility to arbitrarily select ciphers which should be promoted resp. declined when establishing a SSL connection with a client by implementing the new configuration option "CipherList". By default, OpenSSL would accept low and medium strength and RC-4 ciphers, which nowadays are known to be broken. This patch only implements the feature for OpenSSL. A GnuTLS counterpart has to be implemented in another patch ... Original patch by Bastian <bastian-ngircd@t6l.de>. Closes bug #162.


TRACE: fix error message when there are too many parameters ircd 2.11 ignores additional parameters silently, but I don't think that this is the correct behaviour either ...


ConnSSL_InitLibrary(): Code cleanup


IRC_SetPenalty(): Code cleanup


Add more penalty times Ensure before every numeric 461 there is a call to IRC_SetPenalty().


Rework check for number of parameters Move most of the checks that return numeric 461 into Handle_Request().


Reorder checks Move oper and Conf_MorePrivacy checks after checking the number of parameters.


Move the IRC_SetPenalty() call after the asserts


Correct numeric returned by whois As per RFC whois should return 431 if no nick is provided. While here convert upper check to use irc-macros. As a bonus we get to set the penalty for free.


Minor cosmetic change Add a define to indicate any client. While I'm here use hex values instead of decimal, it's somewhat clearer that they could be OR'ed together.


Commands.txt: Document proprietary DIE <message> parameter


getpid.sh: use /bin/pidof when available


Don't enforce channel types for other servers The configuration option "AllowedChannelTypes" must only be enforced for regular clients and not for remote servers. Channels created by other servres are always allowed, because they already exist and the daemon must stay in sync with the network.


Only log "IDENT ... no result" when IDENT was looked up Without this patch, ngIRCd logged the "IDENT lookup for connection X: no result"-message even when IDENT lookups have been disabled using the "Ident = no" configuration option, which is a little bit misleading. Reported by "btwe" in #ngircd.


ngircd: use setgid/setuid errno value in error path Need to use saved errno value as strerror argument, else you get bogus output ('success') in the log message.


Show connection flag "s" (SSL) in RPL_TRACE{LINK|SERVER} Now you can check if a server-to-server link is SSL-encrypted or not using the IRC "TRACE" command. Idea by Götz Hoffart, thanks!


Change away to be allocated dynamically


Ignore "operation not permitted" while dropping groups Without this exception, you can't start ngIRCd as user any more, it is analog to setting the user and group ID.


ngircd: discard supplementary group ids on startup The intention was to switch to JUST uid:gid, but setgid is not sufficient. Reported-by: Michael Scherer <misc@zarb.org>


Xcode: update project settings for Xcode 5


Merge branch 'bug159-WebircIPA' * bug159-WebircIPA: Introduce Free_Client() function to free CLIENT structure Save client IP address text for "WebIRC" users


Introduce Free_Client() function to free CLIENT structure


Implement new configuration option "DefaultUserModes" The new configuration option "DefaultUserModes" lists user modes that become automatically set on new local clients right after login. Please note that only modes can be set that the client could set on itself, you can't set "a" (away) or "o" (IRC Op), for example! User modes "i" (invisible) or "x" (cloaked) etc. are "interesting", though. Default: set no modes (like without this patch). Closes bug #160.


Save client IP address text for "WebIRC" users This patch introduces a new field in the CLIENT structure, "ipa_text", which points to an optional textual representation of the client IP address (or NULL) which can be used to store the "real" IP address information of a client using the "WEBIRC" protocol. Without this patch, ngIRCd ignored the <ip-address> paramater ... In addition, the functions Client_SetIPAText() and Client_IPAText() have been introduced to set and get the textual representation of the client IP address. Client_IPAText() can be used even when no "IP address text" has been set before, it then returns the real IP address of the connection. Closes bug #159.


Change strdup() to strndup()


private strndup() implementation in case libc does not provide it


Cosmetic changes to METADATA Update certfp and sort entries.


Silence warning Cast the result of the operation to long, not the time(NULL) call. On systems where sizeof(time_t) is other than long this will produce a warning.


Plug memory leak


Implement account login support This is done via the `accountname' METADATA command and used to automatically identify users after netsplits or across service restarts.


Fix spelling


ngIRCd Release 20.3 (cherry picked from commit bb6e2779636aa6d74bbff474880829f0183a3c94) Conflicts: ChangeLog NEWS


Correctly handle return code of Handle_Write() There have been code paths that ignored the return code of Handle_Write() when sending "notice auth" messages to new clients connecting to the server. But because Handle_Write() would have closed the client connection again if an error occurred, this would have resulted in new errors and assert()'s later on that could have crashed the server (denial of service). Only setups having the configuration option "NoticeAuth" enabled are affected, which is not the default. CVE-2013-5580.


Enhance log messages on "recursive" connection errors


Add some assert() calls to ng_ipaddr library


Update ChangeLog file


Debian init script: test for binary after reading defaults This allows the system administrator to overwrite the DAEMON variable in /etc/defaults/<name> and to use this init script even when the default "/usr/sbin/ngircd" doesn't exist on the system.


Merge branch 'ssl-log-messages' * ssl-log-messages: Make SSL-related log messages more readable ConnSSL_HandleError: Code cleanup, more documentation


Make SSL-related log messages more readable - Don't use internal function names but describe the error. - Streamline wording, use "SSL" for SSL and TLS. - Streamline punctuation.


Use _IRC_ARGC_BETWEEN_OR_RETURN_ when possible


ConnSSL_HandleError: Code cleanup, more documentation


Change log level of "SSL connection shutting down"


Fix 2 bugs introduced in 74514b8c23 Channel_Modes() and Channel_Topic() return static memory that is zeroed at creation time. Fix checking for empty modes and topic so they're propagated correctly.


configure: Don't quote IO backend type(s) It's not needed and inconsistent compared to the other settings. Reported by "allerbest" (Götz Hoffart) on #ngircd, thanks!


IRC_SERVER(): Code cleanup


Introduce new function IRC_WriteErrClient() This function is used to send "error messages", including numerics, back to clients and to automatically enforce a 2 second penalty. With this patch, all error results enforces a delay for the client. All callers of IRC_WriteStrClient(ERR_xxx) have been converted. Please note that this patch prolongs the time "make check" needs to complete its tests, because of lots of new enforced penalties ...


irc-macros.h: Update copyright, don't forget contributors!


irc-write.c: Clean up code and add more documentation comments


Fix return code of some IRC_WriteXXX() functions These functions usually write to more than one target, and therefore can't return value indicating success or failure in a sane way. And, even more omportant, these functions should send to as much as possible clients and not stop at the first client which isn't reachable any more!


Streamline punctuation of log messages See commit d38d153f for details.


Update NEWS and ChangeLog files


More spelling corrections


Inline who_flags_status


Convert more code to use Channel_HasMode


Simplify mode checking on channels and users within a channel Add Channel_HasMode() and Channel_UserHasMode() and use it where possible.


Use Client_HasMode and Client_HasFlag where appropriate


Merge branch 'bug152-AllowedChannelTypes' * bug152-AllowedChannelTypes: Implement new configuration option "AllowedChannelTypes" Introduce "CHANTYPES" #define


Implement new configuration option "AllowedChannelTypes" The new configuration variable "AllowedChannelTypes" lists all allowed channel types (channel prefixes) for newly created channels on the local server. By default, all supported channel types are allowed. If set to the empty string, local clients can't create new channels at all, which equals the old "PredefChannelsOnly = yes" setting. This patch deprecates the "PredefChannelsOnly" variable, too, but it is still supported and translated to the apropriate "AllowedChannelTypes" setting. When "PredefChannelsOnly" is processed, a warning message is logged. Closes bug #152.


More spelling fixes Remove superflous comments, mostly in German. Fix spelling and use american variants for consistency.


Change cloaked hostname to be malloc'd on demand This shaves a few bytes when cloaked hostnames are not used and restricts the cloakhost announcement iif there is something to send.


Introduce "CHANTYPES" #define This #define lists all the prefix characters of all supported channel types, this is "#&+" at the moment.


Add Client_HasFlag() to check if a client has certain flag


Merge remote-tracking branch 'fgsch/certfp' * fgsch/certfp: Simplify MOTD handling Add certificate fingerprint support


Fix spelling


Simplify MOTD handling Merge Show_MOTD_Start, Show_MOTD_Sendline and Show_MOTD_End into IRC_Show_MOTD.


Update irc-server.c to use irc-macros.h And add some comments :-)


Rename XXX_Fingerprint to XXX_CertFp


Add certificate fingerprint support


Commands.txt: Update more descriptions Update description of "CHANINFO", "METADATA", "NJOIN", "SERVER", "SQUIT", "GET", and "POST".


Improved client announcement Move Announce_User() to client.c and rename it to Client_Announce(). Use this in cb_introduceClient() instead of duplicating the code. This fix the certificate fingerprint announcement for new clients. Also ensure the certificate fingerprint is only announced if the client supports it (`M' flag).


Update irc-oper.c to use irc-macros.h


Add penalty times in error paths of generic IRC helper macros Add a 2 second penalty time when the number of parameters is invalid.


Commands.txt: Update more descriptions Update description of "CONNECT", "DIE", "DISCONNECT", "GLINE", "KILL", "KLINE", "OPER", "REHASH", "RESTART" and "WALLOPS".


Add more penalty times in error paths This patch changes the handlers of the "PASS", "NICK", "USER", and "SERVICE" commands to enforce a 2 second penalty when an error like "need more/other parameters" occurs. More functions should follow, I think ...


Commands.txt: Fix <target> description of TRACE command


Update irc-login.c to use irc-macros.h This includes code cleanups, too :-)


Update irc-mode.c to use irc-macros.h This includes code cleanups and more comments, too.


Commands.txt: Update more descriptions Update descriptions of "NICK", "PASS", "PING", "PONG", "QUIT", "USER", "WEBIRC", "SERVICE", and "SVSNICK".


Update irc-channel.c to use irc-macros.h This includes code cleanups, too :-)


Commands.txt: Update description of "PRIVMSG", "NOTICE", and "SQUERY"


Commands.txt: Update more descriptions Update descriptions of "AWAY", "JOIN", "LIST", "MODE", "PART", "TOPC", and "TRACE".


Add "compile" to .gitignore file


Commands.txt: Streamline references to IRC+ protocol


Commands.txt: Update description of the "ERROR" command


Show IRC Operator name when logging a successful OPER command


Update irc.c to use irc-macros.h This includes code cleanups and better documentation for some functions, too.


Merge pull request #4 from fgsch/master Changes for ngircd 21.


Handle services in IRC_WHOIS_SendReply() If the target is a service, advertise it as such and ignore operator mode.


Slightly update ngircd.8 manual page


Fix spelling


Travis-CI: Enable OpenSSL and libiconv support


Updated NEWS and ChangeLog files


Enhance Travis-CI configuration file It now configures the sandbox to build ngIRCd with IPv6, IDENT, PAM, TCP-Wrappers, and zlib support. And it installs expect(1) and telnet(1) for the test suite.


Merge pull request #3 from Cofyc/master irc-info.c: some commands use LINE_LEN as command buffer len


LINE_LEN -> COMMAND_LEN LINE_LEN is configuration file line length


IncludeDir: default to "$SYSCONFDIR/ngircd.conf.d" Now "IncludeDir" defaults to "$SYSCONFDIR/ngircd.conf.d" instead of no directory, but a missing directory is only reported as an error if it has explicitely configured in the main configuration file and simply ignored otherwise. Therefore it is now possible not to touch the default (sample) configuration file at all, and set all distribution and/or system specific configuration options in "*.conf" files stored in "$SYSCONFDIF/ngircd.conf.d/". Thanks to "Elmasloco" for the idea!


"IncludeDir" can't be overwritten by included files


Rename "Mask" variables into "Pattern" in assert() statements This completes commit 3ab00e3a11 which broke debug builds.


Implement new configuration option "IncludeDir" The option "IncludeDir" in the [Options] section can be used to specify a directory which can contain further configuration files and configuration file snippets matching the pattern "*.conf" that should be read in after the main configuration file ("ngircd.conf" by default) has been parsed. Closes bug #157.


Ensure there is enough space for the mask As pointed by Alex while strl{cat,cpy} take the full length we need to leave space to ensure a proper mask is always created so revert the removal of - N from my last change.


conf.c: New function Read_Config_File() This function reads in and parses a single configuration file. Adjust all other functions to display the correct name of the file being read in currently.


Better description for Lists_CheckReason()


Change Lists_MakeMask() to receive a buffer for the mask Change callers accordingly so they don't rely on a global buffer and rename Mask to Pattern where it makes sense since some functions where indeed receiving a pattern and not a mask.


Fix use-after-free on Lists_CheckReason() Change Lists_CheckReason() to receive a buffer where the reason will be stored and its length. Change callers accordingly. Change Class_GetMemberReason() (and its callers) in a similar way so it doesn't rely on a global buffer for the rejected reason.


Update doc/Platforms.txt a little bit ...


Build OS X package with correct file permissions This requires to have the correct permissions in the source tree, which is "root:wheel", which in turn requires root privileges. Therefore the Makefile now tries to become root on "make osxpkg-dest" but tries hard not to require root privileges on "clean" etc.


Xcode: fix detection of host OS, vendor, and CPU


PackageMaker: use relativ path names


Add Travis-CI configuration file


Make configure[.ng] compatible with autoconf 1.10 again The incompatibility has been introduced by commit d0c9f4a6, "configure: search for iconv_open as well as libiconv_open".


Lists_CheckReason(): Check for Client_MaskCloaked() Look for possible cloaked Masks in Lists. Users with +x usermode can be banned with their cloaked hostname now.


Services.txt: Anope 1.9.8 has been released now


Commands.txt: Update description of the "KILL" command


Conn_Handler(): Don't test for penalty times The Conn_Handler() main loop calls Handle_Buffer() which checks for the "penalty time" of each client itself, so don't do it twice.


Don't read SSL client data before DNS resolver is finished Fix the cb_clientserver_ssl() callback function to not read in and store SSL encrypted client data before the asynchronous DNS resolver sub-process has finished: This could have resulted in discarding the resolved client hostname and IDENT reply afterwards, because in some situations (timing dependent) the NICK and USER commands could have already been read in from the client, stored in the buffer, and been processed. Thanks to Julian Brost for reporting the issue and testing, and to Federico G. Schwindt <fgsch@lodoss.net> for helping to debug it!


Increase password length limit to 64 characters Closes bug #154.


doc/Services.txt: Update Anope status and URL


Commands.txt: Update description of the "KICK" command


Commands.txt: Update description of the "INVITE" command


irc-op.c: use irc-macros.h


irc-cap.c: use irc-macros.h


irc-op.c: Update source code documentation


irc-cap.c: Update source code documentation


Add new _IRC_ARGC_EQ_OR_RETURN_ macro to irc-macros.h


Add new _IRC_ARGC_BETWEEN_OR_RETURN_ macro to irc-macros.h


irc-cap.c: move static functions to the top of the file And remove now unnecessary (local) prototypes.


Update Doxygen configuration


Clean up Xcode project file, remove outdated files, add missing


src/testsuite/README: add whois-test.e


irc-login.c: conenction -> connection Introduced by commit d3ef2239 as of Sun Jan 16 2011 ... Thanks to Patrik Schindler <poc@pocnet.net> for reporting this!


Merge branch 'bug151-iconv' into master * bug151-iconv: configure: search for iconv_open as well as libiconv_open


Merge branch 'bug153-ServerMask' into master * bug153-ServerMask: Update irc-info.c to use irc-macros.h Add new irc-macros.h to project irc-info.c: add/streamline function documentation comments irc-info: move static functions at the top of the file Implement new function Client_SearchServer() Conflicts: src/ngircd/irc-info.c


configure: search for iconv_open as well as libiconv_open On some installations iconv_open() is actually libiconv_open(). iconv_open() is the glibc version while libiconv_open() is the libiconv version. This patch enables ngIRCd to detect both cases. Tested on OpenBSD 5.1. Closes bug #151.


configure: conversation -> conversion


Update irc-info.c to use irc-macros.h This includes: - move IRC_SetPenalty() at the beginning of the handler functions, - use macros provided by irc-macros.h, - code cleanup. The main benefits of this patch are core size reduction, streamlined structure of the handler functions, and enhanced functionality: because of the _IRC_GET_TARGET_SERVER_OR_RETURN_() macro using the Client_SearchServer() function, the target of the specific IRC command can now be given server names, server mask, or the nickname of a user connected to the server. Closes bug #153.


ngIRCd Release 20.2 (cherry picked from commit c45d9dd1f08fddb95fa01d62c69848cd753a3161)


Add new irc-macros.h to project This file prvides some macros for common tasks required by functions implementing handlers for IRC commands: * _IRC_ARGC_LE_OR_RETURN_ * _IRC_ARGC_GE_OR_RETURN_ * _IRC_GET_SENDER_OR_RETURN_ * _IRC_GET_TARGET_SERVER_OR_RETURN_


KICK: Fix denial of service bug Test if the user that it is to be kicked is on the channel before user channel modes are tested. Otherwise assert( cl2chan != NULL ); in line 742 would fail and stop the service.


irc-info.c: add/streamline function documentation comments Add missing comments, streamline wording, and remove references to the RFCs: this will be added to ./doc/Commands.txt with an other patch and we want to avoid redundancy ...


sighandlers.c: Update some log messages


irc-info: move static functions at the top of the file


my_sd_listen_fds(): really return an "int" This fixes the following warning using Apple LLVM version 4.2 (clang-425.0.24) on OS X: src/ngircd/conn.c:157:9: Implicit conversion loses integer precision: 'long' to 'int'


Implement new function Client_SearchServer() This function returns the server structure of a client or a given "mask"; it is useful for implemention handlers for commands like "COMMAND *.net", which should work on a server matching "*.net". Please note that the local server is always returned when it matches the mask, but besides that, the order is completely arbitrary.


Merge branch 'bug155-allowAtInUser' * bug155-allowAtInUser: Allow "@" character in user names for authentication


Exit message: use singular & plural :-)


Allow "@" character in user names for authentication The "@" character isn't allowed in IRC usernames, because it is the separator between user name and hostname in IRC masks: <nickname>!<username>@<hostname> This patch accepts user names including "@" characters, saves the unmodified name for authentication but stores only the part in front of the "@" character as "IRC user name". And the latter is how ircd2.11, Bahamut, and irc-seven behave as well. Closes bug #155.


Merge branch 'systemd' * systemd: ngircd.sock: explicitely bind to IPv4 and IPv6 addresses Show address and port of sockets passed-in by systemd(8) Check type of sockets passed-in by systemd(8) Adjust severity levels of some log messages New configuration option "IdleTimeout": exit daemon when idle Implement support for systemd(8) "socket activation" contrib/README: add more files


autogen.sh: Check for autoconf/automake wrapper scripts For example OpenBSD uses a "autoconf" and "automake" wrapper script which tells the user to set AUTOCONF_VERSION and AUTOMAKE_VERSION environment variables. This patch enhances autogen.sh to not detect these wrapper scripts as regular autoconf/automake commands but to set the required environment variables after detecting the real "command-X.Y" commands. Tested on OpenBSD 5.1.


ngircd.sock: explicitely bind to IPv4 and IPv6 addresses


Commands.txt: spelling fixes ...


"WHO <hostmask>": use displayed hostname for matching Use the currently "displayed hostname" (which can be cloaked!) for hostname matching, not the real one. In other words: don't display all the cloaked users on a specific real hostname! Thanks to DNS <dns@rbose.org> for reporting this issue.


autogen.sh: Don't use "egrep -o", use "sed" "egrep -o" isn't portable and not available on OpenBSD, for example. So let's use sed instead to get the automake version. The expression used now is less specific but should work as well ...


Show address and port of sockets passed-in by systemd(8)


Merge branch 'HelpText' * HelpText: (22 commits) Commands.txt: Update description of the "USERS" command Commands.txt: Update description of the "SUMMON" command Commands.txt: Update description of the "SERVLIST" command Commands.txt: Update description of the "WHOWAS" command Commands.txt: Update description of the "WHOIS" command Commands.txt: Update description of the "WHO" command Commands.txt: Update description of the "VERSION" command Commands.txt: Update description of the "USERHOST" command Commands.txt: Update description of the "TIME" command Commands.txt: Update description of the "STATS" command Commands.txt: Update description of the "NAMES" command Commands.txt: Update description of the "MOTD" command Commands.txt: Update description of the "LUSERS" command Commands.txt: Update description of the "LINKS" command Commands.txt: Update description of the "ISON" command Commands.txt: Update description of the "INFO" command Commands.txt: Update description of the "ADMIN" command Commands.txt: Add description for the "CHARCONV" command Commands.txt: Add description for the "CAP" command Commands.txt: Import descriptions from "rbose/command_help" ...


Rename ports_initlisteners() to Init_Listeners()


IRC_WHO_Channel(): Use strlcpy() instead of strcpy() This fixes the following warning, at least on OpenBSD 4.8: irc-info.o(.text+0x2427): In function `IRC_WHO': src/ngircd/irc-info.c:896: warning: strcpy() is almost always misused, please use strlcpy()


Check type of sockets passed-in by systemd(8) This patch makes sure that ngIRCd doesn't try to handle sockets of unsupported types, for example of AF_INET6 sockets when ngIRCd isn't compiled with support for IPv6 ...


Commands.txt: Update description of the "USERS" command


NewListener(): Code cleanup


Streamline punctuation of log messages Make sure that all log messages end with a correct punctuation mark. The rules for formatting log messages are: 1. Add punctuation marks to all messages passed to the actual logging functions like Log() and LogDebug(). 2. Don't add any punctuation marks to messages that are stored in variables for later use or are passed over the network. 3. IP addresses, DNS host names and IRC server names should be quoted. 4. Messages originating in the network should be quoted (at least if they are "untrusted" or variable). Most probably this patch doesn't fix all mistakes, but it should be a good starting point ...


Adjust severity levels of some log messages


Commands.txt: Update description of the "SUMMON" command


Enable WHOIS to display information about IRC Services This patch introduces the new numeric 310(RPL_WHOISSERVICE) and enables WHOIS to display information about IRC services. This numeric is used for this purpose by InspIRCd, for example -- but as usual, other numerics are in use, too, like 613 in UltimateIRCd ... Please note that neither the Operator (+o) not the "bot status" (+B) of an IRC service id displayed in the output. Change suggested by Federico G. Schwindt <fgsch@lodoss.net>, Thanks.


configure: "netinet/in_systm.h" is optional The header file "netinet/in_systm.h" already is optional in ngIRCd, so don't require it in the configure script. Now ngIRCd can be built on Minix 3 again :-)


Commands.txt: Update description of the "SERVLIST" command


New configuration option "IdleTimeout": exit daemon when idle This patch implements a new configuration option "IdleTimeout" in the [Limits] section of the configuration file which can be used to set a timeout (in seconds) after which the whole daemon will shutdown when no more connections are left active after handling at least one client. The default is 0, "never". This can be useful for testing or when ngIRCd is started using "socket activation" with systemd(8), for example.


contrib/Debian/rules: Do no compress Commands.txt This is required, because ngIRCd can't use a compressed file as help text ... (cherry picked from commit 6d09b4f366f656f6d2732ea96a653e086380e458)


Commands.txt: Update description of the "WHOWAS" command


Implement support for systemd(8) "socket activation" This patch enables ngIRCd to work with listening sockets already initialized and passed-in by systemd(8) and hereby to support on-demand "socket activation". systemd(8) uses two environment variables to pass information about the sockets to ngIRCd, LISTEN_PID and LISTEN_FDS, and this mechanism only kicks in when both variables are set. In all other cases, and therefore in most installations out there, nothing changes at all. Please note: If socket activation is in effect, ngIRCd will not initialize any (other) soeckets on its own! All sockets must be configured in the systemd(8) socket unit configuration file in this case, see ./contrib/ngircd.socket for example. Probably it would be interesting to match passed-in sockets to configured listening sockets and to initialize all the remaining ones not already set up by systemd(8), but this is kept back for an other patch ... See - <http://0pointer.de/blog/projects/socket-activation.html> - <http://0pointer.de/blog/projects/socket-activation2.html> - <http://www.freedesktop.org/software/systemd/man/systemd.socket.html>


AUTHORS: Update list of contributors


Commands.txt: Update description of the "WHOIS" command


contrib/README: add more files


AUTHORS: Use "email address syntax"


Commands.txt: Update description of the "WHO" command


ngircd.service: Use "forking" service type Don't run ngIRCd in forground mode but let it daemonize itself. This enhances the log output of "systemctl status ngircd.service", because now ngIRCd doesn't print out its PID and timestamp on each log message which is redundant: it becomes logged by systemd/journald already.


Commands.txt: Update description of the "VERSION" command


Return better "Connection not registered as server link" errors Now ngIRCd returns a more specific error message for numeric ERR_NOTREGISTERED(451) when a regular user tries to use a command that isn't allowed for users but for servers: ERR_NOTREGISTEREDSERVER(451).


Commands.txt: Update description of the "USERHOST" command


MODE: don't report error on "more modes than parameters" Don't report ERR_NEEDMOREPARAMS(461) when a MDOE command with more modes than nicknames is handled, as well as for channel limit and key changes without specifying the limit or key parameters. This is how a lot (all?) other IRC servers behave, including ircd2.11, InspIRCd, and ircd-seven. And because of clients (tested with Textual and mIRC) sending bogus MODE commands like "MODE -ooo nick", end-users got the expected result as well as correct but misleading error messages ... If ngIRCd is compiled using "strict mode", these errors are still reported. Reported-by: Tim <tim@stackwatch.net>


Commands.txt: Update description of the "TIME" command


Correctly detect when SSL subsystem must be initialized This patch introduces the new function Conf_SSLInUse() to check when the current server configuration requires the SSL subsystem to be initialized and accounts incoming as well as outgoing connections -- so this fixes commit bb20aeb9 ("Initialize SSL when needed only, and disable SSL on errors") which only handled the inbound case ... Tested-by: Brett Smith <brett@w3.org>


Commands.txt: Update description of the "STATS" command


configure: use AS_HELP_STRING for --with-iconv


Commands.txt: Update description of the "NAMES" command


autogen.sh: Enforce serial test harness on automake >=1.13


Commands.txt: Update description of the "MOTD" command


autogen.sh: Reformat messages.


Commands.txt: Update description of the "LUSERS" command


Merge branch 'bug145-ProvideHelp' * bug145-ProvideHelp: Use "${docdir}/Commands.txt" as help text file Add a note that "help file" is updated on startup and REHASH only Add doc/Commands.txt which should document all commands Implement Help() function parsing and returning the help text Document "HelpFile" in sample-ngircd.conf and ngircd.conf.5 Implement new configuration option "HelpFile" IRC_HELP(): Code cleanup Refactor Read_Motd() into Read_TextFile()


Commands.txt: Update description of the "LINKS" command


ngIRCd Release 20.1


Use "${docdir}/Commands.txt" as help text file


Commands.txt: Update description of the "ISON" command


Update Copyright notices for 2013


Add a note that "help file" is updated on startup and REHASH only


Commands.txt: Update description of the "INFO" command


Add doc/Commands.txt which should document all commands This document can be used as "help text", too, see configuration option "HelpFile" in ngircd.conf(5). Please note that this file in its current state is far from complete, only a few commands are documented, but you should get an idea how it works. So please send in patches adding the remaining parts! :-)


Allow ERROR command on server and service links only Ignore it and add a penalty time on all other link types.


Commands.txt: Update description of the "ADMIN" command


Implement Help() function parsing and returning the help text This function parses the already read in help text and sends the requested portions to the user. Parsing is done as following when a user user issues a "HELP <cmd>" command: 1. Search the file for a line "- <cmd>", 2. Output all subsequent lines that start with a TAB (ASCII 9) character to the client using NOTICE commands, treat lines containing a single "." after the TAB as empty lines. 3. Break at the first line not starting with a TAB character. This format allows to have information to each command stored in this file which will not be sent to an IRC user requesting help which enables us to have additional annotations stored here which further describe the origin, implementation details, or limits of the specific command. A special "Intro" block is returned to the user when the HELP command is used without a command name.


Get rid of Conn_ResetPenalty(), it is unused


Commands.txt: Add description for the "CHARCONV" command


Document "HelpFile" in sample-ngircd.conf and ngircd.conf.5


Mode setting: only check channel user modes when on channel Only check the channel user modes of the initiator if he is joined to this channel and not an IRC operator enforcing modes (which requires the configuration option "OperCanUseMode" to be enabled), because trying to check channel user modes of a non-member results in this assertion: Assertion failed: (cl2chan != NULL), function Channel_UserModes, file channel.c, line 742. This closes bug #147, thanks to James Kirwill <james.kirwill@bk.ru> for tracking this down!


Commands.txt: Add description for the "CAP" command


Implement new configuration option "HelpFile" This new configuration option allows to specify a specially formatted text file which can be used by the HELP command to provide information about the commands and their syntaxes.


Add some more casts in assert() statemens This fixes the following warning messages of gcc 4.5.3 on Cygwin when building with debug code enabled: ng_ipaddr.c: In function ‘ng_ipaddr_init’: ng_ipaddr.c:52:2: warning: comparison between signed and unsigned integer expressions ng_ipaddr.c:53:20: warning: comparison between signed and unsigned integer expressions resolve.c: In function ‘ForwardLookup’: resolve.c:271:3: warning: comparison between signed and unsigned integer expressions


Commands.txt: Import descriptions from "rbose/command_help" Import command description texts from the "rbose/command_help" branch, which have been written by DNS <dns@rbose.org> -- thanks a lot!


IRC_HELP(): Code cleanup


Makefiles: Correctly quote sed expressions Now the Makefiles support spaces in "$sysconfdir", which isn't uncommon for Cygwin for example, when $HOME contains whitespaces ("/home/User Name") and ngIRCd is installed into the user home ("./configure --prefix=$HOME").


Commands.txt: Reorder some commands Reorder some commands and introduce new section "Connection Handling". Idea by DNS <dns@rbose.org>, thanks!


Refactor Read_Motd() into Read_TextFile() Now this function allows to read arbitrary text files into arrays.


Add Cygwin binaries (*.exe) to .gitignore files


Commands.txt: Fix some wording and spelling


Add a cast in ForwardLookup() to fix a gcc warning on Cygwin This fixes the following warning message of 4.5.3 on Cygwin: resolve.c: In function ‘ForwardLookup’: resolve.c:273:21: warning: comparison between signed and unsigned integer expressions


ngIRCd Release 20


Update NEWS and ChangeLog files


Allow user names up to 20 characters This patch allows user names up to 20 characters when ngIRCd has not been configured for "strict RFC mode". Patch suggested by Brett Smith <brett@w3.org>, see <http://arthur.barton.de/pipermail/ngircd-ml/2012-October/000579.html>.


ngIRCd 20~rc2


Update NEWS and ChangeLog files


Update doc/Platforms.txt


Rework cloaked hostname handling, implement "METADATA cloakhost" Now ngIRCd uses two fields internally, one to store the "real" hostname and one to save the "cloaked" hostname. And both fields can be set independently using the "METADATA host" and "METADATA cloakhost" commands. This allows "foreign servers" (aka "IRC services") to alter the real and cloaked hostnames of clients without problems, even when the user itself issues additional "MODE +x" and "MODE -x" commands.


RPL_UMODEIS: send correct target name, even on server links


Client_HostnameCloaked() -> Client_HostnameDisplayed()


platformtest.sh: Only generate configure script when missing


Update platformtest.sh to follow autoconf changes


Test suite: correctly execute tests when stdout is redirected


Add a few casts, fix compiler warnings on NetBSD 5 This fixes a few warnings of this type: XXX.c: In function 'AAA': XXX.c:YY: warning: array subscription has type 'char' Tested on NetBSD 5.0.2 with gcc 4.1.3.


irc-info.c: Use strlcpy() instead of strcpy() This fixes the following warning of gcc (tested on OpenBSD 5.0:) irc-info.c:990: warning: strcpy() is almost always misused, please use strlcpy


ngIRCd 20~rc1


Update Xcode project files


conf.c: Use strlcpy() instead of strcpy() This fixes the following warning of gcc on OpenBSD 5.0: conf.c:728: warning: strcpy() is almost always misused, please use strlcpy()


tool.h: Don't check for and #define PF_INET This is correctly handled by ipaddr/ng_ipaddr.h today, and the check in tool.h isn't required any more -- and caused errors on OpenBSD 5.0: In file included from ./../tool/tool.h:23: /usr/include/arpa/inet.h:74: warning: "struct in_addr" declared inside parameter list


conf-ssl.h: Use "gnutls_session_t" instead of "gnutls_session" This fixes the following warning with current versions of GnuTLS: conf-ssl.h:36: warning: "gnutls_session" is deprecated


Add new IRC+ server flag "X": "XOP modes supported" This flag indicates, that the server supports the enhanced "xop channel user modes", like channel owner, admin, and halfop. This information is used to make sure that no unsupported CHANINFO commands are sent to servers not supporting such mode prefixes, for example.


Update autoconf/automake version numbers in doc/HowToRelease.txt


Update NEWS and ChangeLog files


Remove Anope "ngircd" protocol module patches Starting with Anope 1.9.8, the ngIRCd protocol module is included in the Anope distribution, so there's no longer any need to support our own (but now heavily outdated!) patches. Therefore remove them.


doc/Services.txt: Update documentation for Anope 1.9.8 Starting with Anope 1.9.8, the ngIRCd protocol module is rewritten from scratch by "DukePyrolator" and included in the Anope distribution. So no patching is required any more, yeah! Drawback: Anope 1.9.8 is in development and not yet released ...


Correctly add irc-metadata.{c|h} to Makefile.ng ...


doc/Protocol.txt: Document METADATA command


Generate "METADATA host" commands on "MODE +/-x" Use "METADATA host" commands to let servers supporting this command know which (possibly cloaked) hostname is in effect for a specific client. This prevents "double cloaking" of hostnames and even cloaked hostnames are in sync on all servers supporting "METADATA" now.


Don't cloak already cloaked hostname when using METADATA A client for which a METADATA command has been received from one of its peers got the client flag "M" set. So it's safe to assume that such a client gets "METADATA host" commands for its cloaked hostname and the server must not cloak the hostname on its own, even when the client mode "+x" is set.


Implement METADATA command to update client metadata The METADATA command can be used by other servers to update "metadata" of registered clients, like the client info text ("real name"), user name, and hostname: :<prefix> METADATA <target> <key> :<value> It is distributed in the network, unknown <key> names are silently ignored and passed on, too. This allows for further extensions.


doc/Protocol.txt: add/fix CHARCONV description


PredefChannelsOnly: Fix message for non pre-defined channels If PredefChannelsOnly is enabled, and if someone tries to create a channel which does not exist, then the error message is a 474. The 474 Error message changed recently and does not match anymore: 'Cannot join channel (+b) -- You are banned'. Changed the error message to numeric 403 'No such channel'. Bug introduced by commit 9a82304a. (cherry picked from commit 2c2e08f34187a33c1da745995c5f213e33a91410)


Test suite: add some "remote checks" to whois-test.e


Send NICK commands with prefix of (target) user Now NICK commands are always generated using the prefix of the target user, even when the nickname change has been initiated by some other (pseudo) server or using the SVSNICK command. In this case, the prefix of the initiator has been used, but this isn't compatible with clients (at least weechat and irssi don't handle such NICK commands correctly).


Update doc/Services.txt, sort services alphabetically


Implement SVSNICK command to change remote nicknames The SVSNICK command allows other servers (and services on "pseudo-servers") to forcefully change nicknames of remote users. Syntax: ":<from> SVSNICK <oldnick> <newnick>" The SVSNICK command itself doesn't change the nickname, but it becomes forwarded to the server to which the user is connected to. And then this server initiates the real nickname changing using regular NICK commands. This allows to still run networks with old servers not supporting the SVSNICK command, because SVSNICK commands for nicknames on such servers are silently ignored and don't cause a desync of the network.


IRC_NICK(): Code cleanup, new function Change_Nick()


Spelling fix: "nick name" -> "nickname"


Xcode: correctly #define PACKAGE and PACKAGE_NAME


Fix warning message introduced when cleaning up IRC_SERVER() This reverts a not intentional code change and fixes the following compiler warning message (tested with gcc 4.4.5): irc-server.c: In function "IRC_SERVER": irc-server.c:142: warning: suggest parentheses around operand of "!" or change "&" to "&&" or "!" to "~"


Make server reconnect time a little bit more random Add randomly up to 15 seconds to the reconnect delay for outgoing server links when the connection has been "short" and therefore the "ConnectRetry" delay is being enforced. This should make it even more unlikely that two servers deadlock each other when both are trying to connect to the other one at the same time, for example in test environments.


Don't accept connections for servers already beeing linked If two servers try to link each other, there was a time frame that could result in one connection overwriting the other, e. g. the incoming connection overwriting the status of the outgoing one. And this could lead to all kind of weirdness (even crashes!) later on. So now such incoming connections are dropped. But this most probably prevents the two servers from linking until timing changes somehow (network latency?) because each server drops the incoming connection of the other one, so no connection survives in the end. But this has to be addressed by an other patch ...


IRC_SERVER(): Code cleanup


Use lowercase "package name" for syslog logging again This is how ngIRCd up to release 19.2 behaved; "bug" introduced by commit 67e882, "configure.in: require autoconf 2.67 and automake 1.11", which changed the "PACKAGE_NAME" to "ngIRCd"; so use "PACKAGE" which still is the lowercase version for initializing syslog logging.


Document new configuration option "MaxListSize"


Make the maximum /list reply length a configurable limit.


Update NEWS and ChangeLog files


Allow remote servers and IRC Ops to change channel topics Remote servers are always allowed to change all channel topics, and IRC Operators are allowed to change all channel topics if the configuration option "OperCanUseMode" is enabled. Bug introduced by commit 7b01bb8 and reported by DNS777.


Increased maximum number of possible user and channel modes Currntly ngIRCd supports 13 user and 15 channel modes, because there have been quite a few additions since our last release. But our data structures can only hold 15 user and -- even worse! -- only 9 channel modes! So enlarge the buffers to 20 bytes (actually 21 including NULL) to allow storing of all mode characters and to have some space left for more modes to come ... (cherry picked from commit 8996d777621d88d4bcc439ab4792b2814920687f)


Update error messages for user mode +b and channel Mode +M. Replaced error message for channel mode +M with ERR_NEEDREGGEDNICK_MSG (used by Bahamut, inspircd, ircu & Unreal too) and using numeric 477 and the msg simliar like inspircd. Replaced the error message ERR_CANNOTSENDTONICK_MSG for user mode +b with ERR_NONONREG_MSG and using numeric 486, similar like unrealircd. (cherry picked from commit 55a61ab17f63a9e757b7c7598c31b98ce5a132e8 and commit 3737d9ab7da1ea0485cefc07c65dc5308bf0db02)


Test suite: add more checks to whois-test.e


Add "i586/pc/haiku" to doc/Platforms.txt


Disable UID/GID checks on "single user OS" Don't abort on "single user operating systems" that don't know more than one user account and therefore can't change user and group IDs. Currently, the only such system supported by ngIRCd is Haiku, a BeOS clone.


Search gethostbyname() in libbind and libnetwork This is required for Haiku (BeOS clone) at least.


Update manual pages Among other little things, bring project description in line with website.


Test suite: add test for user mode "b"


Implement user mode "b": block messages When a user has set mode "b", all private messages and notices to this user are blocked if they don't originate from a registered user, an IRC Op, server or service. The originator gets an error numeric sent back in this case, ERR_CANNOTSENDTONICK_MSG(976), which is/was(?) used by KineIRCd, too. This closes bug #144.


Fix ERR_CANNOTSENDTOCHAN_MSG message This error message is not only used if one can not send to a channel because it is moderated, but for _all_ reasons when a message can not be delivered (moderated, banned, no external messages, ...), so strip the "(+m) -- Moderated" part of the error message again. Bug introduced by commit 9a82304a.


Shorten filenames of Anope protocol module patchfiles Filenames have been too long and couldn't be stored in all tar archive formats ...


WHOIS: show RPL_WHOISHOST_MSG to all IRC Ops in the network Not only show RPL_WHOISHOST_MSG to local IRC opreators, but show it to all IRC operators in the network. And don't show it to anybody if the "more privacy" configuration option is enabled. This closes bug #134.


Test suite: make expect scripts more verbose Now tests.sh transforms each expect script it executes using sed(1) and inserts a 'puts -nonewline stderr "."' in front of each "expect" command.


Test suite: remove indentation of messages


Merge branch 'bug141-ModesQq' This closes bug #141. * bug141-ModesQq: KICK-protect IRC services Implement channel mode "Q" and user mode "q" Conflicts: src/ngircd/defines.h src/ngircd/messages.h


Show active user modes in WHOIS reply Implement numeric RPL_WHOISMODES_MSG(379) and show user modes in the reply of the WHOIS command for the user himself or, if MorePrivacy isn't set, for request initiated by an IRC operator. Numeric 379 is used by Unreal and InspIRCd for this purpose, too. Closes bug #129.


KICK-protect IRC services


Implement channel mode 'V' (invite disallow) If the new channel mode "V" is set, the INVITE command becomes invalid and all clients get the new ERR_NOINVITE_MSG(518) reply. Unreal and InspIRCd uses this mode, too. This closes bug #143.


Implement channel mode "Q" and user mode "q" Both modes protect users from channel kicks: only IRC operators and servers can kick users having mode "q" or in channels with mode "Q". Original patch by DNS777 <dns@rbose.org>, thanks! This closes bug #141.


Allow channel admins to "de-admin" channel members This patch fixes unsetting of channel user mode "+a" (channel admin) and adds a better error message: without this patch, a channel admin is unable to unset this mode. This closes bug #142.


Define HAVE_SETSID for Mac OS X Xcode builds


Merge branch 'bug109-CHARCONV' This closes bug #109. * bug109-CHARCONV: Debian: require "telnet" or "telnet-ssl" for building Debian ngircd-full[-dbg]: enable CHARCONV Add "CHARCONV" to "feature string" when enabled Implement new IRC+ "CHARCONV" command Added new configure option "--with-iconv" Conflicts: src/ngircd/messages.h


Fix spelling: ERR_CHANOPPRIVTOLOW_MSG -> ERR_CHANOPPRIVTOOLOW_MSG Thanks to DNS for pointing this out, see bug #126!


Debian: require "telnet" or "telnet-ssl" for building


Makefile.am: don't use "make -C", it isn't portable


Debian ngircd-full[-dbg]: enable CHARCONV


Test suite: don't use "mkdir -p" "mkdir -p" is not supported on all platforms. Tested with Apple A/UX 3.1.x.


ERR_CHANNELISFULL_MSG: better wording (cherry picked from commit 0fcfa7e00fa8e098dd3724c7188c88ac82a52881)


Add "CHARCONV" to "feature string" when enabled


Fix getpid.sh to work on Apple A/UX again


Implement new IRC+ "CHARCONV" command See bug 109 and doc/Protocol.txt for details and documentation.


Send RPL_REHASHING if rehash was accepted (cherry picked from commit f1b171a09cd076f743a7fff221fa7aa752abb374)


Added new configure option "--with-iconv" The iconv library should be used for implementing the new CHARCONV IRC command discussed in bug 109. And because CHARCONV will be an IRC+ feature, we only test for libiconv if IRC+ is enabled as well.


Change variable name "SSLDHFile" to "DHFile" in log messages (cherry picked from commit d96db0a2e56d310177edb45d0a8b164a37992ab1)


Sort "feature string" alphabetically


Move ConnSSL_InitLibrary() "dummy" from header into C file (cherry picked from commit 5fd88c81a70d0c9e627f08522e57d251586288eb)


Include CAP command even when using "strict RFC mode"


NJOIN: correctly reset channel level flags This fixes commit 7b01bb83. Bug reported by DNS777 <dns@rbose.org>, thanks!


Merge branch 'autoconf-update' Update GNU autoconf and automake infrastructure. Tested on modern systems as well as Apple A/UX :-) * autoconf-update: AUTOMAKE_OPTIONS: fix ansi2knr option, include path Don't use AC_FUNC_MALLOC and AC_FUNC_REALLOC Make our own targets "silent", if enabled configure.in: use AC_CHECK_{FUNCS|HEADERS}_ONCE Updated config.{guess|sub} to version 2012-08-14 Make autogen.sh more verbose when VERBOSE=1 is set configure.in: use AC_SEARCH_LIBS (not AC_CHECK_LIB) configure.in: use AS_HELP_STRING macro configure.in: use AC_CANONICAL_HOST (not AC_CANONICAL_TARGET) configure.in: inttypes.h is an optional header file Use HAVE_SETSID #define when testing for setsid() Don't include <stdint.h>, it is included by "portab.h" Don't check type.h availability, it is required configure.in: Use AC_CONFIG_FILES macro configure.in: Don't use AC_C_PROTOTYPES configure.in: Update checks for required and optional features configure.in: require autoconf 2.67 and automake 1.11 configure.in: sort some lists (templates, output, ...)


Simplify check for valid user names in IRC_USER(). Patches from Federico G. Schwindt, thanks! (cherry picked from commit a44b7126227ba1118ec02b399e31b08102af5e8c and 6fbe9583753b2620da275676cde46a89cb4d06c2)


AUTOMAKE_OPTIONS: fix ansi2knr option, include path Set correct relative path to ansi2knr.c in AUTOMAKE_OPTIONS, so that ansi2knr.{1|c} is only included once in the distribution archive.


Allow limited punctuation in usernames, for better PAM integration.


Allow user mode +x only when "CloakHostModeX" is set Allow users to "cloak" their hostname only when the configuration variable "CloakHostModeX" (introduced in 19.2) is set. Otherwise, only IRC opertators, other servers, and services are allowed to set mode +x. This prevents regular users from changing their hostmask to the name of the IRC server itself, which confused quite a few people ;-) This fixes bug #133.


Don't use AC_FUNC_MALLOC and AC_FUNC_REALLOC We don't expect the GNU'ish behaviour of of malloc() and realloc() and never implemented the replacement functions rpl_malloc()/rpl_realloc() -- so these test result in linking failues on systems that don't have a GNU'ish malloc() and realloc() even though we don't require it! Introduced by commit 47ad9afc.


Merge pull request #2 from briancollins/master Fix IRC_Send_NAMES not sending correct prefix for certain clients.


New configuration option "OperChanPAutoOp" If disabled, IRC operators don't become channel operators in persistent channels when joining. Enabled by default, which has been the behavior of ngIRCd up to this patch. Closes bug #135. (Cosmetic fixes by Alex.)


Make our own targets "silent", if enabled


Correctly re-initialize signal handlers on RESTART This fixes part 2 of bug #127 :-)


Fix NAMES response when client has multi-prefix Two fixes here: IRC_Send_NAMES was checking the capability of the wrong client when responding, and it didn't return any prefix for clients that had either +v or +o but not both.


Allow opers to see secret (+s) channels in LIST command As long as 'MorePrivacy' isn't enabled in the configuration file, local IRC operators can see secret (+s) channels when using the LIST command. Closes bug #136.


configure.in: use AC_CHECK_{FUNCS|HEADERS}_ONCE


New_Connection(): mark "IsSSL" parameter as UNUSED This fixes the following warning message when building without SSL support: conn.c: In function "New_Connection": conn.c:1365: warning: unused parameter "IsSSL" Introduced by commit 01b62202.


Merge branch 'better-chan-errors' By Alexander Barton (1) and DNS777 (1) * better-chan-errors: Remove unused ERR_CANNOTSENDTOCHAN2_MSG message Add some more information to channel error numerics


configure: only use AM_PROG_AR when available This fixes commit 78d189fb on systems with older automake ...


Updated config.{guess|sub} to version 2012-08-14


Show a warning on startup if config file is not a full path ngIRCd is a long-running process and changes its working directory to "/" to not block mounted filesystems and the like when running as daemon ("not in the foreground"); therefore the path to the configuration file must be relative to "/" (or the chroot() directory), which basically is "not relative", to ensure that "kill -HUP" and the "REHASH" command work as expected later on. This fixes parts of bug #127.


Merge branch 'move-connection-password' of git://arthur.barton.de/ngircd-alex This patch series converts the statically allocated password buffer in the CLIENT structure into a dynamically (and only when needed) allocated buffer which is referenced by the CONNECTION structure. This a) saves memory for clients not using passwords at all and b) allows for "arbitrarily" long passwords. By Brett Smith (5) and Alexander Barton (2). * 'move-connection-password' of git://arthur.barton.de/ngircd-alex: Login_User(): use "conn" insted of calling Client_Conn(Client) Free already saved password when storing a new one Indentation and style fixes. Connection password is not constant. Implementation clean-ups. Dynamically allocate memory for connection password. Move client password from the Client to the Connection struct.


Remove unused ERR_CANNOTSENDTOCHAN2_MSG message


Remove all geneerated Makefile.am on "make maintainer-clean"


Make autogen.sh more verbose when VERBOSE=1 is set


Create &SERVER channel after predefined channels This patch allows you to define &SERVER in a [Channel] block yourself and to overwrite the built-in topic and channel modes. Fixes bug #131.


Login_User(): use "conn" insted of calling Client_Conn(Client)


Add some more information to channel error numerics


Enhance "ServiceMask" to handle a list of masks The "ServiceMask" variable in "Server" blocks now can handle more than one mask using the new MatchCaseInsensitiveList() function. This makes marking "service clients" much more specific, which is a good thing per se, but which is the prerequisite for reasonably blocking these nick names, too (see commit a6dd2e3 for details).


Rename configure.in to configure.ac This fixes automake: warning: autoconf input should be named 'configure.ac', not 'configure.in' when running the autogen.sh script.


configure.in: use AC_SEARCH_LIBS (not AC_CHECK_LIB) Use the AC_SEARCH_LIBS macro to test for "sometimes but not always" required libraries, not AC_CHECK_LIB.


WHO #channel: don't limit list size It makes no sense to limit the list size when doing WHO for a channel and not to return all the users in that channel, so I removed the check. But if there are more than MAX_RPL_WHO(25) replies, the client requesting the list will be "penalized" one second more (then 2 in total). This fixes bug #125.


Free already saved password when storing a new one This shouldn't happen (clients aren't allowed to send more than one PASS command), but who knows ...


New function MatchCaseInsensitiveList() to check list of patterns


configure.ng: use AM_PROG_AR to check ar(1) command This fixes automake-1.12/am/library.am: warning: 'libngipaddr.a': linking libraries using a non-POSIX .../automake-1.12/am/library.am: archiver requires 'AM_PROG_AR' in 'configure.in' src/ipaddr/Makefile.am:12: while processing library 'libngipaddr.a' and similar warnings of automake.


configure.in: use AS_HELP_STRING macro


Define EV_SET() for kqueue() on systems that don't have it Some systems, notably FreeBSD 4.x, do have the kqueue() function but lack the definition of EV_SET() in their header files -- but don't worry, we can #define it on our own ;-) Definition taken from /usr/include/sys/event.h of FreeBSD 8.1. Patch tested on FreeBSD 4.1 by Götz Hoffart. Thanks!


Block nicknames that are reserved for services This patch introduces the new function Conf_NickIsBlocked() which checks if a given nick name matches with the "service mask" of a configured server. And Client_CheckNick() uses this information to deny such names for regular IRC users. So nick names intended for IRC services are more protected and can't be used by regular users even when the "services pseudo-server" isn't connected to the network. But please note: Up to now, there can be only one "ServiceMask" pattern per server, which most probably blocks much more nick names than really required ... So "ServiceMask" should allow more than one pattern which can be more specific, and most probably it should be possible to block nick names in the global server configuration as well. Nick names introduced by other servers/services are never restricted.


Indentation and style fixes.


Merge branch 'automake-am11-am12' * automake-am11-am12: autogen.sh: detect automake version format a.b.c and a.b configure.ng: don't require GIT tree to detect version string Include .mailmap file in distribution archives Include all build-system files into distribution archives Change build system to support new and old GNU automake


configure.in: use AC_CANONICAL_HOST (not AC_CANONICAL_TARGET) See the autoconf manual for details: http://www.gnu.org/software/autoconf/manual/autoconf.html#Specifying-Target-Triplets


Fix contrib/Makefile.am to list all files in EXTRA_DIST


Rename Conf_IsService() to Conf_NickIsService()


Connection password is not constant. Saying otherwise makes a warning when we assign this to conv.appdata_ptr in pam.c.


autogen.sh: detect automake version format a.b.c and a.b


INSTALL: update GNU automake/autoconf requirements


configure.in: inttypes.h is an optional header file


Update project description


Check_Connections(): code cleanup


Implementation clean-ups. * Have Conn_Password return an empty string when no password has been set, to play better with pam.c. * Use strdup in Conn_SetPassword.


configure.ng: don't require GIT tree to detect version string


automake: don't use INCLUDES, it's AM_CPPFLAGS nowadays


Use HAVE_SETSID #define when testing for setsid()


New function Conn_StartLogin() to finish connection initialization Conn_StartLogin() is called after the connection has been established and fully innitialized, including the SSL handshake, for example. Up to this patch, the "NoticeAuth" option broke the SSL handshake ...


Dynamically allocate memory for connection password.


Xcode: use certificate of Alex for code signing When doing non-debug Xcode builds, use the "Developer ID Application: Alexander Barton" certificate for code signing by default.


Include .mailmap file in distribution archives


automake: enable colored test output, if available The "color-tests" option can't be checked for, but is available starting with automake 1.11 which introduced AM_SILENT_RULES -- so we check this ...


Don't include <stdint.h>, it is included by "portab.h"


Convert CONN_ID and Conf_MaxConnections to "int" datatype We can't handle more connections than accept(2) can supply, and accept(2) returns an "int" ...


Move client password from the Client to the Connection struct. This is a relatively naive implementation, basically doing the bare minimum necessary to make the switchover go. Subsequent commits can focus on improving the implementation.


"make uninstall": remove ngircd.conf if not modified Now "make uninstall" removes the installed "ngircd.conf" file, if it is still equal to our "sample-ngircd.conf" file and therefore hasn't been modified by the user. If it has been modified, it isn't removed and a notice is displayed to the user. In addition, "make install" now displays a message when no ngircd.conf file exists and the "sample-ngircd.conf" file will be installed as a starting point.


Add doc/Contributing.txt to distribution archive


Include all build-system files into distribution archives


Don't check type.h availability, it is required


Introduce numeric RPL_HOSTHIDDEN_MSG(396) This numeric is sent to the client each time it changes its displayed hostname using "MODE +/-x", and if "CloakHost" is set right after the MOTD has been sent.


contrib/ngircd.service: systemd service file for ngircd Thanks to Kyle Keen <keenerd@gmail.com>: Date: Sat, 18 Aug 2012 08:28:22 -0400 Message-ID: <CAAKTTKNNmrB=8XtxcV6w1Q-RQ6J_xTTDGD4MHQFaDy6V3=B19Q@mail.gmail.com> From: keenerd <keenerd@gmail.com> To: ngircd-ml@ngircd.barton.de Subject: [ngIRCd-ML] systemd service Hello all. Linked is a service file for ngircd. Please add this to your source tree so other people don't have to learn to write service files ;-) https://projects.archlinux.org/svntogit/community.git/plain/trunk/ngircd.service?h=packages/ngircd -Kyle Keen Arch Linux TU http://kmkeen.com


Loose GNU autoconf / automake requirements a bit Now ngIRCd requires at least GNU autoconf 2.61 and automake 1.10, the requirements of commit 67e882d4 have been too restrictive: 19.2 67e882d4 now ---------- --------- --------- --------- autoconf >=2.50 >=2.67 >=2.61 automake >=1.6 >=1.11 >=1.10 The tools required now are supported by Debian GNU/Linux 4.0 "Etch", RedHat Enterprise Linux 5, and Mac OS X 10.6.x for example. I read the changelogs of autoconf and automake, and I think ther's nothing that prevents it from working with these older versions; and we don't want to force users to upgrade without real benefits. Please note: the recommended versions are still autoconf 1.11.x and the most recent autoconf release that works with automake 1.11.x!


Change build system to support new and old GNU automake Starting with GNU automake 1.12, the "de-ANSI-fication support" has been removed, which ngIRCd used to enable building itself on very old systems. Now the problem is, that using automake >= 1.12 isn't working because of the now unsupported M4 macros. Therefore the solution that this patch implements is to dynamically generate the automake input files with our own ./autogen.sh script: configure.ng => configure.in Makefile.ng => Makefile.am This is quite an ugly approach, but it works and enables us to: 1. use current automake >= 1.12 for development and "private builds", 2. still build distribution archives using automake 1.11.x that have "de-ANSI-fication support" enabled in the generated Makefile's. And if you are using Makefile's generated with a automake version newer than 1.11.x (without "de-ANSI-fication support"), the ./configure script warns you not to use this generated build system to generate distribution archives. Drawback of this patch: you MUST use our autogen.sh script, you can't call the autoconf/automake commands directly any more; but autoreconf should still work ...


configure.in: Use AC_CONFIG_FILES macro


Always cloak client hostname, if needed Not only cloak the hostname in Client_MaskCloaked(), but also in Client_HostnameCloaked() -- so move the actual cloaking to this function and call it in Client_MaskCloaked() to get the (cloaked) hostname. This fixes USERHOST not displaying the correctly cloaked hostname, for example.


ngt_RandomStr(): Add implicit cast to "unsigned". This fixes the following warning of Xcode 4.5: src/tool/tool.c:150:19: Implicit conversion loses integer precision: 'long' to 'unsigned int'


Merge branch 'bug92-xop' By Alexander Barton (5) and Sebastian Köhler (2) * bug92-xop: Fix NAMES/WHO response when client has multi-prefix Fix prefix of "halfop" when "multi-prefix" is active Clean up doc/.gitignore doc/Modes.txt: add version number to new channel modes Fix some "whitespace glitches" Tests and documentation for xop Implemented xop support Conflicts (because of "multi-prefix fix"): src/ngircd/irc-info.c This fixes bug #92 "ngircd does not support XOP usermodes".


configure.in: Don't use AC_C_PROTOTYPES Don't use AC_C_PROTOTYPES, AM_C_PROTOTYPES is already used.


NoticeAuth: make sure messages are flushed immediately


Fix a buffer overflow when initializing the random salt for "+x" This "off by one" buffer overflow has been introduced in commit 49385a98, "Implemented hashed cloaked hostnames for +x".


Fix NAMES/WHO response when client has multi-prefix This has been fixed by commit 16f94546 "Fix NAMES response when client has multi-prefix" in the master branch, fix it in this patch series, too.


Free all listen ports on initialization Now you can reconfigure listen ports and reload the server configuration on runtime. Without this patch, no ports could be removed.


configure.in: Update checks for required and optional features Update checks for required and optional header files, data types, and functions.


Merge branch 'umode-B' This patch series allows ngIRCd to support the user mode "B" ("Bot flasg"): it is settable and unsettable by every (non-restricted) client. According to DNS777, this is how Unreal and InspIRCd do behave, so do we :-) By Alexander Barton (1) and DNS777 (1) * umode-B: Add new user mode "B" to doc/Modes.txt Implement an Unreal-like user mode "B" ("Bot mode")


configure.in: Use AC_CONFIG_HEADER instead of AM_CONFIG_HEADER AM_CONFIG_HEADER is marked obsolete and will be removed in Automake 1.13.


Fix prefix of "halfop" when "multi-prefix" is active


Initialize SSL when needed only, and disable SSL on errors With this patch, the SSL subsystem will only be initialized if at least one SSL ports is configured; so you won't get "SSL initialization failed" messages if you didn't configured it at all. And if SSL initialization fails, no SSL listen ports will be enabled later which never could establish a working SSL connection at all ...


configure.in: require autoconf 2.67 and automake 1.11 And use newer features such as bug reporting address and project URL.


Merge branch 'recognize-umode-R' By Alexander Barton (1) and DNS777 (1) * recognize-umode-R: Only allow IRC services to modify user mode "R" Recognize user mode "R"


Add new user mode "B" to doc/Modes.txt


Fix compiler warning when not building with ZLIB support This fixes: irc.c: In function ‘Option_String’: irc.c:333:9: error: variable ‘options’ set but not used


Clean up doc/.gitignore


configure.in: sort some lists (templates, output, ...)


Only allow IRC services to modify user mode "R"


ngt_RandomStr(): : make it buildable with pre-ANSI C compilers


Implement an Unreal-like user mode "B" ("Bot mode")


Update NEWS and ChangeLog files for hashed cloaked hostnames


doc/Modes.txt: add version number to new channel modes


Get_CAP_String(): make it buildable with pre-ANSI C compilers


Recognize user mode "R" This allows users to unset the user mode "R".


Hashed hostnames for CloakHost Implemented support for hashed hostnames for CloakHost. The admin can use '%x' in both the CloakHost and CloakHostModeX setting. The config option CloakHostModeX was renamed to CloakHostSalt. This salt is used for both cloaking options.


Fix some "whitespace glitches" Some have been introduced by commit 7b01bb83, some are older.


Enhance "NOTICE AUTH": show hostname and IDENT reply


Implemented hashed cloaked hostnames for +x CloakHostModeX can now contain '%x'. It will be replace by the hash of the original client hostname. The new config option CloakHostModeXSalt defines the salt for the hash function. When CloakHostModeXSalt is not set a random salt will be generated after each server restart. Spelling fix in defines.h


Merge branch 'xop' of https://github.com/kart0ffelsack/ngircd into bug92-xop * 'xop' of https://github.com/kart0ffelsack/ngircd: Tests and documentation for xop Implemented xop support Conflicts (because of merge of the 'cmode-M' branch): src/ngircd/channel.c src/ngircd/defines.h src/ngircd/messages.h


Merge branch 'cmode-M' By Alexander Barton (2) and DNS777 (1) * cmode-M: Add new channel mode "M" to doc/Modes.txt Remove Can_Send_To_Channel_Identified() Implement channel mode "M"


ngIRCd release 19.2


Add new channel mode "M" to doc/Modes.txt


Tests and documentation for xop


doc/Capabilities.txt: document "multi-prefix" capability


Remove Can_Send_To_Channel_Identified() Move the functionality directly into Can_Send_To_Channel() function. There should be no functional change ...


Implemented xop support 3 new channel user modes have been added. Half Op: +h(Prefix: %) can set the channel modes +imntvIbek and kick all +v and normal users. Admin: +a(Prefix: &) can set channel modes +imntvIbekoRsz and kick all +o, +h, +v and normal users. Owner: +q(Prefix: ~) can set channel modes +imntvIbekoRsz and kick all +a, +o, +h, +v and normal users


ngIRCd release 19.2~rc1


Implement channel mode "M" Only the server, identified users and IRC operators are able to talk.


Merge branch 'bug124-CloakHostModeX' * bug124-CloakHostModeX: Describe "CloakHostModeX" in sample-ngircd.conf an ngircd.conf(5) Rename "CloakModeHost" option to "CloakHostModeX" Introduce new configuration option "CloakModeHost" This closes bug #124.


Update ChangeLog and NEWS files


Describe "CloakHostModeX" in sample-ngircd.conf an ngircd.conf(5)


Rename "CloakModeHost" option to "CloakHostModeX"


Correctly handle asynchronously re-established server links Don't try to establish an outgoing server link after DNS lookup when this server re-connected on its own in the meantime. In addition, log a warning message if we try to update the connection index of an already connected server structure -- and ignore it. Up to now, both behaviour could lead to a race when the remote server connects to this daemon while it still prepares the outgoing connection: - The local server prepares the new outgoing connection ... - in the meantime the remote server becomes connected and registered. - Now the new outgoing connection overwrites the (correct) socket handle, - then the 2nd connection becomes disconnected: "already registered", - and the 1st connection becomes unhandled ("gets lost") because the configuration structure is reset because of the wrong socket handle. This patch hopefully fixes all these problems.


Introduce new configuration option "CloakModeHost" This closes bug #124.


Log a debug message when SIGUSR2 is handled


doc/Platforms.txt: more updates Added: - armv6l/unkn./linux-gnueabi, gcc 4.4.5 - i686/pc/linux-gnu, gcc 2.7.2 Updated: - i386/pc/solaris2.11, gcc 4.2.3 Thanks to Götz Hoffart!


NoticeAuth: Fix test if IDENT reply has been invalid This fixes conn.c: In function ‘cb_Read_Resolver_Result’: conn.c:2252: warning: comparison between pointer and integer


IDENT reply: only allow alphanumeric characters in user name Only alphanumeric characters are allowed in the user name, so ignore all IDENT replies that would violate this rule and use the one supplied by the USER command.


USER command: only allow alphanumeric characters in user name Only alphanumeric characters are allowed in the user name, so terminate the connection if any "strage" characters have been supplied by the user. This is how other IRC daemons (like ircd2.11 and ircd-seven) behave ...


doc/Platforms.txt: add powerpc/apple/darwin7.9.0


Change wording of "TLS initialized" message Don't use the word "socket" to identify the connection number, but use the word "connection" like on all the other messages logged.


Pidfile_Create(): Don't leak file descriptor on error path Detected by cppcheck: [src/ngircd/ngircd.c:502]: (error) Resource leak: pidfd


INSTALL: Add "satisfy prerequisites" section Include information for RedHat/Fedora and Debian/Ubuntu based Linux distributions.


NEWS, ChangeLog: fixed some misspellings


Numeric 005 (ISUPPORT), CHANMODES: add missing mode "r"


doc/Platforms.txt: add "armv7l/unknown/linux-gnueabi"


Add instructions for setting up Atheme.


irc-cap.c: mark arguments of Handle_CAP_ACK() as "unused" This fixes irc-cap.c: In function ‘Handle_CAP_ACK’: irc-cap.c:163: warning: unused parameter ‘Client’ irc-cap.c:163: warning: unused parameter ‘Arg’


irc-login.c, login.c: add missing include of "string.h" This fixes the following warnings with GCC 4.4.5 on Linux: irc-login.c: In function ‘IRC_PASS’: irc-login.c:92: warning: implicit declaration of function ‘strlen’ irc-login.c:92: warning: incompatible implicit declaration of built-in function ‘strlen’ irc-login.c:113: warning: incompatible implicit declaration of built-in function ‘strlen’ irc-login.c:129: warning: implicit declaration of function ‘strchr’ irc-login.c:129: warning: incompatible implicit declaration of built-in function ‘strchr’ irc-login.c:133: warning: implicit declaration of function ‘strcmp’ irc-login.c: In function ‘IRC_SERVICE’: irc-login.c:556: warning: incompatible implicit declaration of built-in function ‘strchr’ login.c: In function ‘Login_User’: login.c:131: warning: implicit declaration of function ‘strcmp’


doc/Modes.txt: Document missing channel mode "e"


Merge branch 'master' of /srv/git/ngircd * 'master' of /srv/git/ngircd: "multi-prefix" capability 2/2: adjust NAME and WHO handlers "multi-prefix" capability 1/2: implement complete CAP infrastructure IRC_Send_NAMES(): Code cleanup New function Client_CapSet() in addition to Client_Cap{Add|Del} "CAP REQ" starts capability negotiation and delays user registration Xcode: update project file for Xcode 4.3 Correctly handle "CAP END", new client type CLIENT_WAITCAPEND Implement core IRC capability handling and "CAP" command New "login" source file Introduce_Client() => Client_Introduce(), and move it to client.c


contrib/platformtest.sh: support "CC=xxx MAKE=yyy ./platformtest.sh" Now you can use contrib/platformtest.sh on platforms that require a "special" make (not "make") or compiler (not cc/gcc) binary.


Merge branch 'capabilities' * capabilities: "multi-prefix" capability 2/2: adjust NAME and WHO handlers "multi-prefix" capability 1/2: implement complete CAP infrastructure IRC_Send_NAMES(): Code cleanup New function Client_CapSet() in addition to Client_Cap{Add|Del} "CAP REQ" starts capability negotiation and delays user registration Correctly handle "CAP END", new client type CLIENT_WAITCAPEND Implement core IRC capability handling and "CAP" command New "login" source file Introduce_Client() => Client_Introduce(), and move it to client.c


"multi-prefix" capability 2/2: adjust NAME and WHO handlers The NAME and WHO commands now return multiple usermode prfixes when the "multi-prefix" capability is in effect for the requesting client. See <http://ircv3.atheme.org/extensions/multi-prefix-3.1>


Xcode: update project file for Xcode 4.3 (No changes needed)


platformtest.sh: Detect Open64 C compiler


"multi-prefix" capability 1/2: implement complete CAP infrastructure Now ngIRCd is able to handle "CAP LS", "CAP REQ", "CAP LIST", and "CAP CLEAR" commands. "multi-prefix" can be set/unset, but has no functionality - yet!


Fix 8ec17063: "Lists_Add(): use size of destination when copying data" Thanks to Florian Westphal for spotting my silliness ...


IRC_Send_NAMES(): Code cleanup


Xcode: correctly sort conn-ssl.{c|h} files in file list


New function Client_CapSet() in addition to Client_Cap{Add|Del}


Lists_Add(): use size of destination when copying data This fixes the following warning of clang: /src/ngircd/lists.c:152:44: warning: size argument in 'strlcpy' call appears to be size of the source; expected the size of the destination [-Wstrlcpy-strlcat-size] But it isn't a real problem, because the size of the source always is the same than the size of the destination ...


"CAP REQ" starts capability negotiation and delays user registration New helper function Set_CAP_Negotiation().


Makefiles: list each source files on a separate line Patches that add/remove source files become much nicer this way :-)


Correctly handle "CAP END", new client type CLIENT_WAITCAPEND


Add missing documentation files to Xcode project


Implement core IRC capability handling and "CAP" command This patch implements the core functions to support "IRC Capabilities" and the IRC "CAP" command as used by other servers and specified here: <http://www.leeh.co.uk/draft-mitchell-irc-capabilities-02.html>. It enables ngIRCd to support the defined handshake, but it doesn't implement any capabilities, so "CAP LS" and "CAP LIST" always return the empty set and "CAP REQ ..." always fails with "CAP NAK".


Don't ignore "permission denied" errors when enabling chroot Up to now, ngIRCd silently ignored permission denied errors when trying to enable a chroot setup: only the "not running chrooted" message became logged later on. This patch lets ngIRCd exit with a fatal error when the chroot can't be enabled on startup -- this is the much safer bevahiour!


New "login" source file Rename Hello_User[_PostAuth] to Login_User[_PostAuth] and move it to the new login.c; and move cb_Read_Auth_Result(), too. This will enable further code to easily call Login_User() when required.


FAQ: enhance description of chroot setup


Introduce_Client() => Client_Introduce(), and move it to client.c


ngIRCd Release 19.1


Update ChangeLog for upcoming ngIRCd 19.1 release


Fix gcc warning, initialize "list" variable to NULL This fixes the following warning with gcc 4.6.3.: irc-mode.c: In function "Channel_Mode": irc-mode.c:947:26: error: "list" may be used uninitialized in this function irc-mode.c:884:25: error: "list" may be used uninitialized in this function (The variable has never been used uninitialized, so don't worry)


Fix manual page "hyphen-used-as-minus-sign" error (lintian) Thanks to Christoph Biedl for reporting this!


Fix typo: Please not -> Please note Thanks to Götz Hoffart!


Fix typo: recieved -> received Thanks to Christoph Biedl.


Update NEWS and ChangeLog files


Really include _all_ patches to build the Anope module


getpid.sh: Fix testcase error for Debian using sbuild When * building the ngircd Debian package (on Linux at least) and * using the sbuild build system, the command "ps -af" does not include the commands running inside the sbuild system. Therefore, start-server.sh will report a fail as getpid.sh cannot not find the ./T-ngircd1 just started although it's actually running. This results in a funny build log ... starting server 1 ... failure! FAIL: start-server1 running connect-test ... ok. PASS: connect-test The self-test of getpid.sh however will likely succeed as it's happy if it sees any process with "sh" somewhere in the name. Things go downhill from there. The confusing things are: * The alternative cowbuilder/pbuilder does not have this problem. * The alternative usage "ps ax" does fine. So, as a quick hack, the patch attached adds another switch to getpid.sh.


Don't log "ngIRCd hello message" two times Start "regular" logging not until the configuration file has been read in and "SyslolgFacility" is set, and log all configuration errors using the generic "daemon" facility. So if there are no configuration errors, logging starts right after parsing the configuration and we log the configuration file used _after_ reading it. But this is no problem because every configuration error message includes the configuration file name as well. (The "double hello" has been introduced by commit 3641e5110952)


ngIRCd release 19


Merge branch 'master' of /srv/git/ngircd * 'master' of /srv/git/ngircd: Update doc/Platforms.txt for ngIRCd 19 doc/README-Interix.txt: note that GNU make should be used


Update doc/Platforms.txt for ngIRCd 19


Update config.guess and config.sub to recent versions


doc/README-Interix.txt: note that GNU make should be used


Don't accept "[SSL]" in config when no SSL support is built in


Fix C syntax: duplicate ";;" should be ";" Using gcc 2.7.2, this fixes: irc-channel.c: In function `join_allowed': irc-channel.c:86: parse error before `const'


Correctly re-open syslog logging after reading of configuration Syslog logging has been initialized before reading the configuraton file, so ngIRCd always used the default facility and ignored the "SyslogFacility" configuration option. Thanks to Patrik Schindler for reporting this issue!


Logging: remove "Activating ..." info message


ngIRCd release 19~rc1


Update RPM spec file description to match Debian "control file"


Update NEWS and ChangeLog files


Fix forwarding of LIST commands Bug reported by Cahata, thanks!


Update preliminary ngIRCd protocol module for Anope 1.9.6


New_Connection(): don't set the client hostname twice Setting the hostname twice doesn't do much harm a lot, but isn't elegant. And for IPv6 addresses, it isn't correct the first time (missing []) ...


Client_SetHostname(): Code cleanup, more debug logging


io: use define for number of possible events


io: remove outer do {} while loops for epoll/kqueue/devpoll backends simplifies things a bit. io_dispatch() is called repeatedly from the main loop.


Enhance server command limits This patch updates the limits for handling commands from a remote server: - "<user count> / 5 + <min>" using "<min>=10" during normal operation, - the above count multiplied with 5 while servers are syncing. The intention is to a) make the limit dependent of the number of users in the network (the more users, the more commands required to sync) and b) to significantly rise this limit while servers are joining the network to make the login and synchronization faster.


Send a PING at the end of the server sync to detect it At the end of sending all "state" to the remote server, a PING command is sent to request a PONG reply. Until then, no "regual" PING was sent, so Conn_LastPing(<connection>) is null and now becomes non-null in the PONG command handler. So the servers are still synchronizing when Conn_LastPing(<connection>) is 0, which could easily be tested.


New function Conn_UpdatePing() to update the "ping timestamp"


Conn_UpdateIdle(): Code cleanup


RPL_ISUPPORT_MSG(005): add "EXCEPTS=e INVEX=I" Thanks to Cahata for the idea!


Fix "MAXLIST=beI:50": the limit is the sum of all lists "Modes which are specified in the same pair share the same maximum size", so "beI:50" means a total of 50 entries, regardless of the list. See <http://www.irc.org/tech_docs/draft-brocklesby-irc-isupport-03.txt>, thanks to Cahata for reporting this!


Update NEWS and ChangeLog files


New RPL_WHOISHOST_MSG(378): show hostname and IP address The numeric RPL_WHOISHOST_MSG(378) returns the DNS hostname (if available) and the IP address of a client in the WHOIS reply. Only the user itself and local IRC operators get this numeric.


New function Conn_GetIPAInfo(): get IP address of a connection


G/K-Lines: only add and delete valid IRC masks


Check G/K-Lines before the client has been registered, too This allows to use "*!<user>@<host>" or "*!*@<host>" masks to reject clients even before receiving PASS, NICK and USER commands and before forking authentication child processes which reduces resource usage.


Streamline handling of connection rejects (bad password, G/K-line) - Use Client_Reject(), get rid of Reject_Client(). - Refactor Class_IsMember() to Class_GetMemberReason(), - New function Class_HandleServerBans().


New function Client_Reject() to reject clients on connect


New function Lists_CheckReason() to get reason of list entries


Update NEWS and ChangeLog files


Fix ERR_{SUMMON|USERS}DISABLED: don't repeat command name in reply


Implement channel exception list (mode 'e') This allows a channel operator to define exception masks that allow users to join the channel even when a "ban" would match and prevent them from joining: the exception list (e) overrides the ban list (b).


{Add|Del}_Ban_Invite > {Add_To|Del_From}_List(): more generic


Rename ShowInvitesBans() to ShowChannelList(), make it more flexible


PRIVMSG/NOTICE: handle nick!user@host masks case-insensitive And enhance our test suite to check this a little bit better :-)


PRIVMSG/NOTICE: don't stop list processing on invalid target Process further targets, even if one has been a server ID: just skip this one with an error message and continue.


Implement user mode 'C': require "same channel" to send message If the target user of a PRIVMSG or NOTICE command has the user mode 'C' set, it is required that both sender and receiver are on the same channel. This prevents private flooding by completely unknown clients.


New RPL_WHOISREGNICK_MSG(307) numeric: indicate if nick is registered


IRC_WHOIS_SendReply(): Code cleanup


Limit channel invite and ban lists to 50 entries - New function Lists_Count(). - New limit #define MAX_HNDL_CHANNEL_LISTS = 50. - New numeric #define ERR_LISTFULL_MSG(478). - Adjust numeric RPL_ISUPPORT2_MSG(005) accordingly ("MAXLIST")


Make Send_ListChange() a little bit more generic


Remove unused prototype of Lists_AlreadyRegistered() This prototype has been introduced by commit fa7bb279 in 2006, but as far as I can see, this function never existed ...


Channel lists: Fix duplicate check and error messages - Check correct list for duplicates when adding items. - Don't generate any messages when adding duplicates or removing non-existing items (this is how ircd-seven and ircu behave). - Code cleanup: Add_Ban_Invite(), Del_Ban_Invite().


Don't enforce MAX_HNDL_MODES_ARG on server and service links


Update documentation (fix some URL, update some info)


Update NEWS and ChangeLog for next ngIRCd release once more


Don't stop join handling on faulty channel, skip it (part #2) Commit 565523cb allowed processing of further channel names given to the JOIN command when a single name was invalid. After this patch, the JOIN command handler continues to process channel name lists even after errors like "channel is full", "too many channels", and the like and generates appropriate error messages for all the channels given by the client.


JOIN command: don't check channel limit if already member Don't check the channel limit and don't report "too many channels" when trying to join a channel that the client is already a member of.


Return ERR_UNKNOWNMODE(472) for unknown channel modes The daemon reported ERR_UMODEUNKNOWNFLAG(501), which is wrong.


Numberic 005 (ISUPPORT), CHANMODES: add "O", "R", "z" modes


Limit list replies of LIST, WHO, WHOIS, and MAX_RPL_WHOWAS Introduce new #define's MAX_RPL_LIST(100), MAX_RPL_WHO(25), MAX_RPL_WHOIS(10), and MAX_RPL_WHOWAS(25).


New function IRC_CheckListTooBig() to check size of list replies It the limit is reached, a NOTICE is sent to the client and list processing should stop.


LIST command: compare pattern case insensitive


IRC_LIST(): Code cleanup


DEFAULT_WHOWAS->DEF_RPL_WHOWAS; MAX_CMODES_ARG->MAX_HNDL_MODES_ARG To streamline naming, in preparation for MAX_RPL_WHO and MAX_RPL_WHOWAS :-)


defines.h: Code cleanup and (a little bit) more documentation


RPL_ISUPPORT (numeric 005): Report MODES=<MAX_CMODES_ARG> "Maximum number of channel modes with parameter allowed per MODE command." See <http://www.irc.org/tech_docs/005.html> for details.


Channel modes: really break handling when MAX_CMODES_ARG is hit This fixes 98493077.


channel modes: only handle MAX_CMODES_ARG modes with arguments Limit the MODE command to handle a maximum of MAX_CMODES_ARG (5) channel modes that require an argument (+Ibkl) per call. Please note: Further modes that require arguments are silently ignored and end the handling of any further modes. This is similar to the behavior of ircd2.11 (silently ignores but seems to handle other modes) as well as ircd-seven (silently ignores but handles some(!) other modes) ...


Fix handling of channel mode sequence with/without arguments For example, don't generate wrong error messages when handling "MODE #chan +IIIIItn *!aa@b *!bb@c *!cc@d *!dd@e *!ee@f".


Conn_Write(): Make sure there is a client when detecting its type The assert(client != NULL) got triggered during our tests, so there is an error path that resulted in the connection being still established (sock >= 0) but the client structure already freed. So Conn_Write() should handle it!


Proc_Close(): Only close socket if it is still valid It could be invalid when calling Proc_Close() a 2nd time, for exmaple, which could happen when we hit a timeout doing IDENT requests :-(


WHOIS command: make sure matching is case-insensitive And make sure that RPL_ENDOFWHOIS replies with the unmodified mask like it has been received from the client.


WHOIS command: don't anser queries for IRC servers Thanks to Cahata for spotting this!


WHOIS command: make sure the reply ends with RPL_ENDOFWHOIS Up to now, each reply for itself ended in RPL_ENDOFWHOIS and queries for unknown nick names lacked the RPL_ENDOFWHOIS -- both is wrong.


README: update features list, borrow from list on our website


LINKS command: support <mask> parameter The <mask> can be used to limit the servers shown in the listing.


IRC_LINKS(): Code cleanup; more documentation


Add 1 second penalty for every further target on PRIVMSG/NOTICE This reduces the possibility of flooding channels with commands like "PRIVMSG/NOTICE #a,#n,#c,... :message" a little bit. Problem noticed by Cahata -- thanks!


Conn_SetPenalty(): Add new "penalty time" on each function call Until now, the penalty time has only been set when longer as the already set one, so it didn't accumulate. And add documentation for and clean up code in Conn_SetPenalty() and Conn_ResetPenalty() functions.


Enhance log messages when setting user and group


NGIRCd_getNobodyID(): Code cleanup


Display correct error message when "Server{UID|GID}" is invalid This partly closes bug #118. ngIRCd still starts up even when Server{UID|GID} is invalid: then the daemon falls back to "nobody" when running with root(0) privileges (as before).


NGIRCd_Init(): Code cleanup


main(): Code cleanup


README: point to included COPYING file, not gnu.org


Update Copyright notices for 2012


lists: don't crash if reason ptr is NULL commit 15fec92ed75c3de0b32c40d005e93e3f61aef77e (Update list item, if it already exists) can make ngircd crash because 'Reason' can be NULL, as reported by Cahata on the ngircd mailing list. Doesn't affect any released ngircd versions. Also, make sure that we do not pass NULL as arguments to a '%s' printf-like function.


Don't stop join handling on faulty channel, skip it When JOIN is received with more than one channel name, don't stop processing on the first error (e.g. bad name, wrong channel key, ...) but report an error and continue with the other given channel names. Reported by Cahata -- thanks!


IRC_JOIN(): Code cleanup


ISON command: reply with correct upper-/lowercase nick names Reported by Cahata -- thanks!


IRC_ISON(): Code cleanup


Remove unused "bool have_arg" from IRC_WHO() This fixes: irc-info.c: In function ‘IRC_WHO’: irc-info:936:18: warning: variable ‘have_arg’ set but not used


Update NEWS and ChangeLog for next ngIRCd release


ngircd.conf.5: reword description of "Ports" variable


New configuration option "PAMIsOptional" When "PAMIsOptional" is set, clients not sending a password are still allowed to connect: they won't become "identified" and keep the "~" character prepended to their supplied user name.


PAM: don't use global password buffer for conv struct Use the pointer of the password of the client directly. Eventually we can get rid of the global password again ...


doc/Modes.txt: document channel mode "r" And make clear, that user mode "r" and channel mode "r" are not set by ngIRCd itself but by IRC services.


Fixed handling of WHO commands This fixes two bugs: - "WHO <nick>" returned nothing at all if the user was "+i" (reported by Cahata, thanks). - "WHO <nick|nickmask>" returned channel names instead of "*" when the user was member of a (visible) channel. Clean up code and add documentation as well.


Remove unused "time_t now" from Lists_Check() This fixes: lists.c: In function ‘Lists_Check’: lists.c:330:9: warning: variable ‘now’ set but not used


Fixed some spelling errors in documentation and code comments Thanks to Christoph Biedl!


contrib/Debian/control: Update and complete "Build-Depends"


Update our Debian package descriptions with "official" ones See Debian Bug #648241 for details.


Fixed typo in two error messages Thanks to Christoph Biedl!


LUSERS reply: only count "visible" channels Rename Channel_Count() to Channel_CountVisible() and only count channels that are visible to the requesting client, so the existence of secret channels is no longer revealed by using LUSERS. Reported by Cahata -- thanks!


IRC_Send_LUSERS(): Code cleanup


Don't stop mode handling on unknown modes; skip it Unknown user and channel modes no longer stop the mode parser, but are simply ignored. Therefore modes after the unknown one are now handled. This is how ircd2.10/ircd2.11/ircd-seven behave, at least. Reported by Cahata -- thanks!


IRC_xLINE(): output an error message for unexpected "lines" This fixes: irc-oper.c: In function ‘IRC_xLINE’: irc-oper.c:429: warning: ‘class’ may be used uninitialized in this function irc-oper.c:430: warning: ‘class_c’ may be used uninitialized in this function


README: Update list of implemented commands


Update list item, if it already exists This updates the "validity" (timeout) as well as the "reason" text, if given.


Lists_CheckDupeMask(): return pointer to already existing item The old behavior of returning true/false is compatible to this change, so there are no other code changes required.


Log better error messages when rejecting clients


Synchronize G-Lines on server login


Op_Check(): always accept commands from a remote server itself


Class_GetList() now retuns a pointer to list_head structure


Check G-Line and K-Line lists after authenticating clients


New functions Lists_Expire() and Class_Expire() GLINE and KLINE lists are cleared automatically now, not when they are checked. So "STATS g" and "STATS k" no longer show expired entries :-)


Implement IRC_xLINE(): handler for "GLINE" and "KLINE" commands


Op_Check(): return client that initiated the request or NULL The old behavior of returning true/false is compatible to this change, so there are no other code changes required.


irc-oper.c: code cleanup; more documentation


Implement IRC "STATS g" and "STATS k" command


New function Class_GetList()


lists.{c|h}: code cleanup; more documentation


List and class handling: add optional "reason" text Adjust Lists_Add() and Class_AddMask() accordingly, implement Lists_GetReason() and Lists_GetValidity().


Add new class.{c|h} module to Xcode project


Add new class.{c|h} to project Implement Class_{AddMask|DeleteMask|IsMember}() functions.


Lists: change "only once" property into "valid until" The old "only once" true/false behavior is still supported, so there are no other code changes required.


Xcode: update project file for Xcode 4.2


define HAVE_GAI_STRERROR for Mac OS X Xcode builds On Mac OS X 10.7 Lion, this fixes In file included from .../contrib/MacOSX/../../src/ngircd/client.c:28: /Developer/SDKs/MacOSX10.7.sdk/usr/include/netdb.h:272:13: error: expected identifier or '('


Configuration: get rid of Conf_Oper_Count and Conf_Channel_Count Count elements dynamically when needed.


./configure: Fix logic and quoting of poll() detection code This fixes commit 8e193df ...


Suppress 'Can't create pre-defined channel: invalid name: ""' messages Skip predefined channel structures that have configured no name, like the "--configtest" does.


Only use poll() when poll.h exists as well


Not only check for poll(), make sure poll.h exists as well This fixes building ngIRCd on Debian GNU/Linux 1.3 "Bo" :-)


whois-test: handle local hostname = "localhost.localdomain" Use the pattern "localhost*" for valid local hostnames.


sample-ngircd.conf: show correct default for "PAM" variable The default of "PAM" is "yes" when ngIRCd has been configured to use it, so show the correct default value in the sample configuration file. Closes #119.


Update GPL 2 license text to current version See <http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt>.


Test for gai_strerror() If gai_strerror() isn't available, use a macro that simply returns a static error message (regardless of the real error code). For example, GNU libc 2.0.7 doesn't implement gai_strerror().


Only use AI_NUMERICHOST if it is #define'd It isn't using GNU libc 2.0.7, for example ...


defines.h: fix comment: "lenth" -> "length" Reported by Christoph Biedl in #ngircd. Thanks!


Init_Server_Struct(): correctly zero Server->bind_addr Don't use the size of the pointer, use the size of the variable!


Clean up and fix comments of Check_ArgIsTrue() Thanks to kaFux for pointing this out! And fix code formatting as well ...


Update doc/GIT.txt


Only close "unrelated" sockets in forked child processes This fixes the problem that ngIRCd can't do any IDENT lookups because of the socket has already been closed in the child process. The bug has been introduced starting with ngIRCd 17 ... :-( (commit ID 6ebb31ab35e)


Added doc/Modes.txt: document modes supported by ngIRCd


Implemented user mode "R" and channel mode "R" - User mode "R": indicates that the nick name of this user is "registered". This mode isn't handled by ngIRCd itself, but must be set and unset by IRC services like Anope. - Channel mode "R": only registered users (having the user mode "R" set) are allowed to join this channel.


Use Proc_Close() to remove no longer unused pipes to child processes This removes spurious (but harmless) debug messages.


New function Proc_Close() to shutdown pipes to child processes


Introduce DEBUG_BUFFER, rework some debug messages DEBUG_BUFFER is off by default and therefore disables these messages: - "Handle_Write() called for connection XX, YY bytes pending ..." - "Connection XX: ZZ bytes left in read buffer."


Testsuite: bind to loopback (127.0.0.1) interface only


doc/Platforms.txt: ngIRCd 18 on Nexenta works Thanks to Götz Hoffart for testing!


New 2nd message "Nickname too long" for error code 432


Client_CheckNick(), Client_IsValidNick(): code cleanup


Merge branch 'ServerMode' * ServerMode: Handle channel user modes 'a', 'h', and 'q' from remote servers Handle unknown channel modes on server links Handle unknown user modes on server links IRC_MODE(), Client_Mode(): code cleanup [2/2] Enlarge client user mode buffer, reduce client flags buffer Infom clients when other servers change their user modes IRC_MODE(), Client_Mode(): code cleanup [1/2]


Merge branch 'bug113-SrvPrefix' * bug113-SrvPrefix: Slightly change (and document!) IRC_KILL() calling convention Spoofed prefixes: close connection on non-server links only


Handle channel user modes 'a', 'h', and 'q' from remote servers These channel user modes aren't used for anything at the moment, but ngIRCd knows that these three modes are "channel user modes" and not "channel modes", that is that these modes take an "nick name" argument. Like unknown user and channel modes, these modes are saved and forwarded, but ignored otherwise.


Xcode: update project file to Xcode 3.2 or newer Xcode requires Mac OS X 10.6 or newer; Xcode 4 supports this project format as well, so effectively you can use Mac OS X 10.6.x or 10.7.x for building ngIRCd with the Apple Xcode IDE.


Handle unknown channel modes on server links


Slightly change (and document!) IRC_KILL() calling convention


Xcode: Mac OS X config.h: support 10.5 as well as 10.6/10.7 SDK


Handle unknown user modes on server links


Spoofed prefixes: close connection on non-server links only On server-links, spoofed prefixes can happen because of the asynchronous nature of the IRC protocol. So don't break server-links, only log a message and ignore the command. This fixes bug 113, see: <https://arthur.barton.de/bugzilla/show_bug.cgi?id=113>


Xcode: exclude more Xcode 4 specific directories in ".gitignore"


IRC_MODE(), Client_Mode(): code cleanup [2/2]


Fix typo in doc/Platforms.txt; make Linux footnote more generic


Cast getpid() and time() results for srand() input This fixes: src/ngircd/ngircd.c:596: warning: implicit conversion shortens 64-bit value into a 32-bit value (i686-apple-darwin11-llvm-gcc-4.2)


Enlarge client user mode buffer, reduce client flags buffer We have to enlage our user mode buffer, so we can handle even unknown user modes in the future; and reduce the client flags buffer, because I can't imagine why we ever would need ~100 flags!? Now we support up to 15 user modes (was: 8) and up to 15 flags (was: 99). So in the end, we even save 99-15+8-15=77 bytes for each client structure!


ngIRCd release 18


Xcode: update and add missing files to project


Infom clients when other servers change their user modes


Update ChangeLog and NEWS for ngIRCd release 18


IRC_QUIT(): disconnect directly linked servers sending QUIT Without this patch, the server becomes removed from the network and the client structures, but the connection isn't shut down at all ...


IRC_MODE(), Client_Mode(): code cleanup [1/2]


Updated doc/Platforms.txt for ngIRCd release 18


contrib/ngindent: detect "gindent" as GNU indent


Testsuite: make getpid.sh work even when run as root Use ps(1) flag "-a" (as well as "-f"): "Select all processes except both session leaders (see getsid(2)) and processes not associated with a terminal." Thanks to Götz Hoffart for reporting this problem!


MorePrivacy: Don't register WHOWAS information Citing an email from Florian to the ngIRCd mailing list: "I wonder what the expected behaviour is when Conf_MorePrivacy is changed from 'yes' to 'no' and the config is reloaded. At the moment, WHOWAS will start giving out information on Users that were connected during Conf_MorePrivacy=yes period. If this is not wanted, Client_RegisterWhowas() should be changed to not store a record when Conf_MorePrivacy is enabled." And I think it is "not wanted" :-)


doc/Platforms.txt: re-add mipsel/unknown/linux-gnu with gcc 4.1.2


Add preliminary ngIRCd protocol module for Anope 1.9 See contrib/Anope/README and doc/Services.txt for more details and installation instructions!


Updated doc/Platforms.txt: mipsel/unknown/linux-gnu


Update timestamp of ngircd(8) manual page


ngIRCd release 18~rc2


GnuTLS: use 1024 (DH_BITS_MIN) as minimum size of the DH prime For outgoing connections, we use 2048 (DH_BITS) since commit 49b2d0e. This patch enables ngIRCd to accept incoming connections from other servers and clients that use at least 1024 bits (and no longer requires 2048 for incoming connections, too). Patch proposed by Florian Westphal.


ngircd.8: document debugging options


ngircd.conf.5: strip "SSL" prefix from variables in [SSL] section


Fix some wording, use spellchecker ;-)


doc/SSL.txt: adopt to new configuration file layout


ngIRCd release 18~rc1


hash: Use UINT32 instead of uint32_t


Update NEWS and ChangeLog file for our upcoming next release


hash: use more recent lookup3 algorithm instead of lookup2 Bob Jenkins published a newer hash function in May 2006, it has better distribution. See http://burtleburtle.net/bob/hash/doobs.html for lengthy comparisions.


Use srand()/rand() instead of srandom()/random(); seems to be more portable


Merge branch 'MorePrivacy' * MorePrivacy: New configuration opion "MorePrivacy" to "censor" some user information


sample-ngircd.conf: remove "SSL" prefix from SSL-related variables


New configuration opion "MorePrivacy" to "censor" some user information this patch contains: * Fix for Conf_CloakUserToNick to make it conceal user details * Adds MorePrivacy-feature MorePrivacy censors some user information from being reported by the server. Signon time and idle time is censored. Part and quit messages are made to look the same. WHOWAS requests are silently dropped. All of this is useful if one wish to conceal users that access the ngircd servers from TOR or I2P.


Merge branch 'ScrubCTCP' * ScrubCTCP: Add documentation for "ScrubCTCP" configuration option New option to scrub incoming CTCP commands


INSTALL: document changed location of configuration variables


Merge branch 'newconfig' * newconfig: sample-ngircd.conf: "SyslogFacility" should be commented out Move SSL-related configuration variables to new [SSL] section CheckFileReadable(): only check when a filename is given ... PAM: make clear which "Password" config option is ignored Really remove [Features] in our manual pages INSTALL: document changed location of configuration variables Update sample config file and manual page for new config structure Testsuite: update configuration files for new config file format Display configuration errors more prominent on "--configtest" conf.c: code cleanup Check for redability of SSL-related files like for MOTD file Restructure ngIRCd configuration, introduce [Limits] and [Options]


Add documentation for "ScrubCTCP" configuration option


Update sample config file and manual page for new config structure


sample-ngircd.conf: "SyslogFacility" should be commented out


New option to scrub incoming CTCP commands This patch makes it possible to scrub incomming CTCP commands from other servers and clients alike. The ngircd oper can enable it from the config file, by adding "ScrubCTCP = yes" under [OPTIONS]. It is default off. CTCP can be used to profile IRC users (get user clients name and version, and also their IP addresses). This is not something we like to happen when user pseudonymity/secrecy is important. The server silently drops incomming CTCP requests from both other servers and from users. The server that scrubs CTCP will not forward the CTCP requests to other servers in the network either, which can spell trouble if not every oper knows about the CTCP-scrubbing. Scrubbing CTCP commands also means that it is not possible to send files between users. There is one exception to the CTCP scrubbing performed: ACTION ("/me commands") requests are not scrubbed. ACTION is not dangerous to users (unless they use OTR, which does not encrypt CTCP requests) and most users would be confused if they were just dropped. A CTCP request looks like this: ctcp_char, COMMAND, arg0, arg1, arg2, .. argN, ctcp_char ctcp_char is 0x01. (just like bold is 0x02 and color is 0x03.) They are sent as part of a message and can be delivered to channels and users alike.


Testsuite: update configuration files for new config file format


New documentation: "how to contribute"


Move SSL-related configuration variables to new [SSL] section


Display configuration errors more prominent on "--configtest"


conn: fix error handling when connecting to server The io_event_create error handling seems to miss a 'return' statement. Fix this by moving io_event_create() call around so we do not need the Conn_Close/Init calls in the error case.


CheckFileReadable(): only check when a filename is given ...


conf.c: code cleanup


ssl: gnutls: bump dh bitsize to 2048 problem is that some clients refuse to connect to severs that only offer 1024. For interoperability it would be best to just use 4096, but that takes minutes, even on current hardware.


PAM: make clear which "Password" config option is ignored


Check for redability of SSL-related files like for MOTD file Remove functions ssl_print_configvar() and ConfSSL_Puts(), introduce new function CheckFileReadable().


Mac OS X: split up make targets New targets are: "have-packagemaker", "osxpkg-dest"


Really remove [Features] in our manual pages


Restructure ngIRCd configuration, introduce [Limits] and [Options] The intention of this restructuring is to make the [Global] section much cleaner, so that it only contains variables that most installations must adjust to the local requirements. All the optional variables are moved to [Limits], for configurable limits and timers of ngIRCd, and [Options], for optional features. The old variables in the [Global] section are deprecated now, but still recognized.


fix clang warning about dead stores clang 'scan-build': Value stored to 'r' is never read Value stored to 'fd' is never read


contrib/platformtest.sh: fix gcc version detection Now the version of GNU C is detected correctly on SuSE Linux, too ...


parse: fix logical expression testing for non RFC1459 links parse.c:284: warning: suggest parentheses around operand of '!' or change '&' to '&&' or '!' to '~' The expression looks dubious, this should probably be an if-not-set, then... test.


conn: avoid needlesly scary 'buffer overflow' messages When the write buffer space grows too large, ngircd has to disconnect the client to avoid wasting too much memory. ngircd logs this with a scary 'write buffer overflow' message. Change this to a more descriptive wording.


Only require server prefixes on non RFC1459 links Not all servers (and services!) using the RFC1459 protocol style send prefixes on all commands; so don't require them to do so. This relaxes the requirements introduced by commit 15775e679.


Merge branch 'master' of git://arthur.barton.de/ngircd-alex * 'master' of git://arthur.barton.de/ngircd-alex: Do reverse lookups using the AF of the incoming connection resolve: fix reverse lookups of client connections with ConnectIPv6=no


Do reverse lookups using the AF of the incoming connection This fixes errors like this one: Address mismatch: 2001:1234:abcd:1::1 != 192.168.1.1


Mac OS X: install on root volume only, and set correct permissions Update Mac OS X Installer.app description bundle, so that the ngIRCd package can only be installed on the root volume ("/"); and make sure that all installed files and directories have correct ownership and permissions.


resolve: fix reverse lookups of client connections with ConnectIPv6=no We re-use the same helper function for both forward lookups (when we want to connect to a peer server) and for validation of reverse loopups (where we make a lookup on the hostname returned by a reverse lookup on the IP address that connected). Problem: When ConnectIPv6=no, the forward lookup helper sets the adderss family to AF_INET, and, if out client connected via ipv6, we fail to validate the result. Thus move the ConnectIPvX check out of the helper.


Mac OS X: update installer texts and add logo.


Doxygen'ify conf.c


New function Config_Error_Section(); and code cleanup


Add some type casts to random() and srandom() functions This fixes two gcc warnings (on Mac OS X): "warning: implicit conversion shortens 64-bit value into a 32-bit value"


ngircd: improve rng initialisation we do not need this for cryptographic purposes, but we can do better than plain srandom(getpid()). Also, keep in mind that rng state is inherited across fork(), so re-init it in the child.


Merge branch 'AuthPing' * AuthPing: Add documentation for "RequireAuthPing" configuration option New configuration option "RequireAuthPing": PING-PONG on login


Merge branch 'NoticeAuth' * NoticeAuth: Add documentation for "NoticeAuth" configuration option Configuration: move "NoticeAuth" to GLOBAL section New configuration option "NoticeAuth": send NOTICE AUTH on connect


Add documentation for "RequireAuthPing" configuration option


ngircd.conf.5: Add variable type to "CloakHost" and "CloakUserToNick"


Add documentation for "NoticeAuth" configuration option


New configuration option "RequireAuthPing": PING-PONG on login When enabled, this configuration option lets ngIRCd send a PING with an numeric "token" to clients logging in; and it will not become registered in the network until the client responds with the correct PONG. This is used by QuakeNet for example (ircu/snircd), and looks like this: NICK nick :irc.example.net PING :1858979527 USER user . . :real name PONG 1858979527 :irc.example.net 001 nick :Welcome to the Internet Relay Network ...


Xcode: don't list sample-ngircd.conf, use sample-ngircd.conf.tmpl


Configuration: move "NoticeAuth" to GLOBAL section


Warn when unknown variables are found in [Features] section


New configuration option "NoticeAuth": send NOTICE AUTH on connect When enabling "NoticeAuth" in the [Features] section, ngircd will send "NOTICE AUTH" messages on client connect like e.g. snircd (QuakeNet) does.


Update doc/GIT.txt


Update INSTALL text


Generate WALLOPS message on SQUIT from IRC operator So SQUIT now behaves like CONNECT and DISCONNECT commands, when called by an IRC operator (and not received from an other server).


Commands received from other servers must have prefixes Make sure that all commands received from other servers do have valid prefixes. Only exceptions are PING and ERROR commands that can occure without prefixes when generated by the remote peer itself.


Allow servers to send more commands in the first 10 secods This helps to speed up server login and network synchronisation.


IRC_CHANINFO(): Code cleanup


Handle_GLOBAL(): don't use multi-line strings They aren't supported by elder C compilers ...


Merge branches 'CloakUserHost', 'QuitOnHTTP' and 'bug72-WHOIS-List' * CloakUserHost: Add a note not to use a percent sign ("%") in CloakHost variable Rename ClientHost to CloakHost, and ClientUserNick to CloakUserToNick Don't use "the.net" in sample-ngircd.conf, use "example.net" ngircd.conf.5: document "ClientHost" and "ClientUserNick" Move "ClientHost" and "ClientUserNick" to end of [Global] section ClientUserNick setting ClientHost setting * QuitOnHTTP: Only "handle" HTTP commands on unregistered connections Don't use IRC_QUIT_HTTP() if STRICT_RFC is #define'd IRC_QUIT_HTTP(): enhance error message Move IRC_QUIT_HTTP() below IRC_QUIT() quit on HTTP commands: GET & POST * bug72-WHOIS-List: Add "whois-test" to testsuite and distribution archive Add support for up to 3 targets in WHOIS queries.


Add a note not to use a percent sign ("%") in CloakHost variable The percent sign is reserved for future extensions, for example to expand some variables like %H to a hash value of the real host name ... Idea by kaFux in #ngircd.


Add "whois-test" to testsuite and distribution archive Test script proposed by Dana Dahlstrom, 2008-02-17. See <https://arthur.barton.de/bugzilla/show_bug.cgi?id=72> ...


Only "handle" HTTP commands on unregistered connections


Rename ClientHost to CloakHost, and ClientUserNick to CloakUserToNick


Add support for up to 3 targets in WHOIS queries. also allow up to one wildcard query from local hosts. Follows ircd 2.10 implementation rather than RFC 2812. At most 10 entries are returned per wildcard expansion. WHOIS test cases by Dana Dahlstrom.


Don't use IRC_QUIT_HTTP() if STRICT_RFC is #define'd


Doxygen: Remove header.inc.html and ngircd-doc.css from distribution


Don't use "the.net" in sample-ngircd.conf, use "example.net" "the.net" is an existing domain of the Texas Higher Education Network ... See RFC 2606.


IRC_QUIT_HTTP(): enhance error message


ngircd.conf.5: describe types of variables Describe the possible types of variables in ngircd.conf: booleans, text strings, integer numbers. And add type information to each variable description.


Move IRC_QUIT_HTTP() below IRC_QUIT()


ngircd.conf.5: document "ClientHost" and "ClientUserNick"


Move "ClientHost" and "ClientUserNick" to end of [Global] section


quit on HTTP commands: GET & POST


channel: always reject zero-length channel key previously, any client could join in this configuration: [Channel] Name = #test Modes = tnk KeyFile = /tmp/foobar fix this by checking for zero-length key before comparing key to channel key.


ClientUserNick setting


PAM-Auth child: log if result can't be reported This fixes the followin GCC warning on modern Linux systems as well: irc-login.c: In function ‘Hello_User’: irc-login.c:876: warning: ignoring return value of ‘write’, declared with attribute warn_unused_result


ClientHost setting


Protocol.txt: Update description of CHANINFO command


Add cscope.out to .gitignore file


Correctly detect errors when handling "MODE x" commands


Enhance documentation for the WEBIRC command


Doxygen'ify irc-login.c


Doxygen'ify irc-channel.c


Doxygen'ify conn.c


Doxygen'ify proc.h


Doxygen'ify parse.h


Doxygen'ify and update comments in ngircd.{c|h}


Doxygen'ify and update comments in match.c


Update and translate comments in hash.c


Doxygen'ify conf.h


Add missong Doxygen @file tags to ngircd.h and irc-op.h


Code cleanup: mostly removing empty lines


Doxygen: define ZLIB, PAM, and ZEROCONF


Add Doxygen @file documentation to each source and header file


Updated Doxygen configuration file Removed unnecessary variables DETAILS_AT_TOP, EXTRACT_PRIVATE, EXTRACT_LOCAL_CLASSES, added SHOW_DIRECTORIES=YES, STRIP_CODE_COMMENTS=NO, REFERENCED_BY_RELATION=YES, REFERENCES_RELATION=YES, HTML_DYNAMIC_SECTIONS=YES and GENERATE_DOCSET=NO; updated PREDEFINED.


Doxygen: remove own header and CSS file Use the ones of Doxygen instead, this has the advantage that we benefit of new functionality of Doxygen without having to make changes.


Make write buffers bigger, but flush early This patch - makes the server write buffer bigger: 64k, - makes the regular write buffer bigger: 32k, - tries to flush the write buffer starting at 4K. Before this patch, a client got disconnected if the buffer flushing at 4k failed, now regular clients can store up to 32k and servers up 64k even if flushing is not possible at the moment (e.g. on slow links).


Enhance logging on "write buffer overflow"


Clean up Validate_Prefix(); don't send punctuation in ERROR commands


Better check for invalid IRC+ PASS command Don't do a NULL-pointer dereference when a remote server using the IRC+ protocol sends an invalid PASS command without the required <serverversion> parameter ...


Read_Request(): don't access possibly free'd CLIENT structure Handle_Buffer() can shut down connections and remove clients, so after calling it, we have to make sure that our CLIENT pointer is still valid.


ngircd-test2.conf: really disable Ident and PAM ...


Log "Can't read MOTD file" as "configuration error" Now this error message is displayed in the console without debug prefix when running the configuration test (--configtest).


Allow "Port = 0" in [Server] blocks Port number 0 marks remote servers that try to connect to this daemon, but where this daemon never tries to establis a connection on its own: only incoming connections are allowed.


conf: fix 'Value of "..." is not a number!' for negative values Don't use isdigit() function any more, because it only checks the first character of the variable value and because it doesn't know about the minus sign which is required e.g. for "Group = -1".


Don't read MOTD file twice The MOTD file is read in Read_Config(), so don't read it when handling the "MotdFile" configuration variable. Instead make sure that it is initialized properly when (re-)reading the configuration.


Add [Features] section to ngircd-test{1|2}.conf Fix commit 5a34bb203a: It is not enough to strip the "No" prefix from "Ident" and "PAM", but we have to introduce the new [Features] section to fix all warning messages of ngIRCd. Variables "Ident" and "PAM" in [Global] are completely wrong :-(


Enable WHOIS command to return information about services


Update testsuite configuration: strip No... prefixes


Add connection/socket information to some log messages


Implement channel mode 'O': "IRC operators only" This channel mode is used on DALnet (bahamut), for example.


Remove ZeroConf variable from sample-ngircd.conf


Remove support for ZeroConf/Bonjour/Rendezvous service registration


TOPIC command: test for channel admin rights correctly This enables other servers, services and IRC operators to change channel topics, even when the client is not joined to this channel. Now the handler for TOPIC behaves like the one for MODE.


Channel_CheckAdminRights(): test if client can admin a channel This generic function tests if a client is allowed to do administrative tasks to a specific channel: - servers and services are always truested ("allowed everything"), - channel operators are allowed, - IRC operarors are allowed if OperCanUseMode is set in the config.


conf: fix 'unknown section' FEATURES parse error pointed out by Alex: ngircd.conf, line 105: Unknown section "[Features]"!


IRC_TOPIC(): code cleanup


conf: move 'run-time-feature-disable' options to new FEATURE section


array: remove check for allocated == 0 allocated can only be zero if ->mem is NULL.


array: remove alignment of requested size libc should know better than us. Also, this helps debugging with tools like valgrind: When you allocate an array of size x, and then erronoulsy use x+1 valgrind cannot detect the bug because due to ALIGN_() made by array.c we might have allocated more than size x...


conf: Warn if PAM=true when ngircd was built without PAM support


conf: add missing static qualifier internal helper, so it should be static. also, add UNUSED to 'Line'.


Update copyright notices for 2010 :) And update the NEWS and ChangeLog file as well.


Make NoZeroConf option work with Howl


config: deprecate NoXX-Options ngircd unfortunately uses several options using double-negation, e.g. NoIdent = No, NoPam = No, etc. This renames all options by dropping the "No" prefix, e.g. "NoIdent = no" becomes "Ident = yes". The old options will continue to work, but will cause a warning message. Also update man pages and default config. To prevent silly 'Ident = yes' from appearing in --configtest output in the 'ident support not compiled in and Ident Option not used' case, make default value depend on feature availability. If feature is available, enable by default, otherwise disable. We might consider moving these options to a new [Feature] section, or something like that, because none of these options are essential. Another possible improvement: 'Ident = yes' option in ngircd.conf causes a warning if ngircd was built without ident support. This does not happen with e.g. zeroconf....


channel: fix confusing "adding to invite list" debug output adding entries to ban list produced 'invite list' debug output...


Command throttling: introduce MAX_COMMANDS_SERVICE New MAX_COMMANDS_SERVICE (currently set to MAX_COMMANDS_SERVER[10]), so that services are handled like servers (and not regular users).


Don't throttle services and servers beeing registered


Xcode: correctly sort files


Don't assert() when serching a client for an invalid server token This is only relevant when a trusted server on a server-server link sends invalid commands.


ngIRCd release 17.1


--configtest: remember if MOTD is configured by file or phrase Configuration variables "MotdFile" and "MotdPhrase" are mutually exclusive; so don't display content in both of them when running "ngircd --configtest": instead remember which one is beeing used.


Enhance log messages when establishing server links a little bit


Reset ID of outgoing server link on DNS error correctly Not resetting the ID prevents the daemon from trying to re-establish outgoing server links when the DNS resolver failed to resole a hostname.


Don't log critical (or worse) messages to stderr stderr isn't redirected to the "error file" any more, so there is no point in trying to log to it ...


Manual page ngircd(8): add SIGNALS section


Manual pages: update and simplyfy AUTHORS section


Remove "error file" when compiled with debug code enabled The information written to the "error file" (/tmp/ngircd-<PID>.err) when ngIRCd is compiled with debug code enabled isn't that usefule, so don't create this file at all.


README: Updated list of implemented commands


add doc/README-Interix.txt and doc/Bopm.txt to distribution tarball


Merge branch 'numeric-329' * numeric-329: New numeric 329: get channel creation time on "MODE #chan" commands Save channel creation time; new function Channel_CreationTime()


add doc/PAM.txt to distribution tarball doc/PAM.txt was not included in the release tarball. reported by Christoph Biedl.


New numeric 329: get channel creation time on "MODE #chan" commands


Save channel creation time; new function Channel_CreationTime()


ngIRCd release 17


Updated doc/Platforms.txt for upcoming release 17


contrib/platformtest.sh: make command name quoting consistent


contrib/ngircd-redhat.init: updated email address of Naoya Nakazawa


Fix up generation and distribution of sample-ngircd.conf - Add generated sample-ngircd.conf to new .gitignore file, - refactor Makefile.am to generate sample-ngircd.conf on "make all", to clean it up on "make clean", and to install it to the correct place. - Make sure path names in sample-ngircd.conf are separated by "/".


doc: change path names in sample-ngircd.conf depending on sysconfdir


ngIRCd Release 17~rc3


Fix connect attempts to further IP addresses of outgoing server links If a hostname resolves to more than one IP address (round-robin DNS, IPv4 and IPv6) and an attempt to connect to the first address fails, ngIRCd should try to connect to the 2nd address, 3rd address etc. But because of a wrong variable used in the call to New_Server(), the wrong server structure has been used in further connection attemps which possibly lead to connection attempts to already connected servers.


Debian: Install default /etc/pam.d/ngircd allowing all logins This is required for backwards compatibility when installing the -full or -full-dbg package variant: PAM is enabled now but no configuration present, so all login attempts would be denied ... Creating /etc/pam.d/ngircd including "auth required pam_permit.so" restores the old behaviour of allowing all connections.


Debian: update standards to 3.9.1; add libpam0g-dev dependency


Make contrib/platformtest.sh more portable


Mac OS X package ("make osxpkg"): generate PAM configuration


Xcode builds ("make xcode"): disable pam_fail_delay() disable pam_fail_delay() only is available starting with Mac OS X 10.6; but we use the 10.5 SDK for campatibility, so don't use this function at all when building using Xcode.


Xcode: update project file, use 10.5.x SDK This is required for universal 32 bit and 64 bit builds: now code for ppc, i386, and x86_64 is generated (which requires 10.5 or newer).


Xcode builds ("make xcode"): detect version number correctly


ngIRCd release 17~rc2


Updated contrib/platformtest.sh (new version scheme) - handle version numbers generated by "git describe" - detect gcc compiler version correctly when "-std=xxx" is used


New doc/HowToRelease.txt file describing the release process


ZeroConf: include header files missing since commit a988bbc86a


Generate ngIRCd version number from GIT tag Now the ngIRCd release/version number is deduced from the "current" annotated GIT tag; see "git describe --help" for details. This is the same scheme the Linux kernel uses and gives much more details version numbers for interim releases and inofficial source archives generated using "make dist". Please note: the version number is only updated it the autogen.sh script is run; so after pulling in and pushing out new commits, you should run ./autogen.sh!


Make sourcecode compatible with ansi2knr again This allows to compile ngIRCd using a pre-ANSI K&R C compiler again: all source files are automatically converted by the included ansi2knr program (of GNU automake/autoconf) before compiling them with the K&R C compiler, but a few coding standards must be met. Tested on Apple A/UX 3.x. Regression testing on Linux and Mac OS X.


./configure: check if C compiler can compile ISO Standard C This is required for enabling ansi2knr on systems that don't have an ANSI C compiler installed (e.g. on A/UX with Apple standard C compiler).


./configure: check support for C prototypes again


Don't use PARAMS() macro for function implementations The PARAMS() macro is only needed for function prototypes; don't use it for the actual implementations.


Added m68k/apple/aux3.0.1 (gcc 2.7.2) to doc/Platforms.txt


Only try to set FD_CLOEXEC if this flag is defined A/UX 3.x doesn't implement this constant, for example.


Only use "__attribute__ ((unused))" if GCC >=2.8 is used At least GCC 2.7.2 doesn't support this attribute.


doc/Makefile.am: don¹t set docdir, automake handles it already And elder make(1) programs don¹t like "x ?= y" ...


ngIRCd release 17~rc1


New configuration option "NoZeroConf" to disable ZeroConf registration If ngIRCd is compiled to register its services using ZeroConf (e.g. using Howl, Avahi or on Mac OS X) this parameter can be used to disable service registration at runtime.


Xcode: only build current architecture in "Debug" target


doc/Platforms.txt: added NetBSD 5.0.2


Updated doc/Platforms.txt


Make sure sighandlers.h is listed in noinst_HEADERS ... because it must be included in the distribution archive :-)


const'ify ngt_SyslogFacilityName() function This fixes the following gcc compiler warning: tool.c: In function 'ngt_SyslogFacilityName': tool.c:195: warning: return discards qualifiers from pointer target type


Debian packages: build "-full" and "-full-dbg" with support for PAM


New configuration option "SyslogFacility" The new option "SyslogFacility" deines the syslog "facility" to which ngIRCd should send log messages. Possible values are system dependant, but most probably "auth", "daemon", "user" and "local1" through "local7" are possible values; see syslog(3). Default is "local5" for historical reasons.


New functions ngt_SyslogFacilityName() and ngt_SyslogFacilityID() These both functions translate syslog facility names to ID numbers and vice versa. On systems that don't define the facilitynames[] array in syslog.h, we try to build one ourself.


Explicitly cast return value of read(2) to "int" This fixes the following gcc warning, emitted by Xcode: src/ngircd/sighandlers.c: In function 'Signal_Callback': src/ngircd/sighandlers.c:239: warning: implicit conversion shortens 64-bit value into a 32-bit value


Add sighandlers.{c|h} to Xcode project And update static Mac OS X config.h used by the Xcode project.


Don't call sigaction() if it is not available on the system


Fix signalpipe file descriptor leak on RESTART Signals_Init() must only be called once. This does not affect any ngircd release version. Earlier version of this patch moved the io and sighandler initialization before the while() loop, but as Alexander Barton noticed that broke all systems without builtin select support in io.c...


sighandlers.{c|h}: Code cleanup - declare signals_catch[] array not between the function implementations. - rename now local function NGIRCd_Rehash() to Rehash(). - remove empty and therefore not used "catch SIGHUP; break;".


Make sighandlers.{c|h} compatible with ansi2knr


Updated ChangeLog to include signal handler changes


Bump version number to "17-dev"


Update ChangeLog and NEWS: include SIGUSR1/SIGUSR2 changes


Output connection status when dumping the internal server state


Reformat "server state" debug messages a little bit


Enable the daemon to dump its internal state in debug-mode. This patch allows ngIRCd to dump its internal state (connected clients, actual configuration) when compiled with --enable-debug. The daemon catches two more signals: - SIGUSR1: toggle debug mode (on/off), - SIGUSR2: dump internal state to console/syslog.


signalhandlers: add fallback to deprecated sysv API


remove NGIRCd_SignalRehash now that the main signal handling is done from the dispatcher loop we can call NGIRCD_Rehash() directly. the /REHASH handler can queue the Rehash() function for execution by sending a SIGHUP. It will be run when we return back to the dispatch loop.


Add new 'delayed' signal handlers. Allows to defer/queue signal processing for execution on the next event dispatch call, i.e. we can perform any signal action in normal, non-signal context. Example uses: - Reload everything on HUP without writing a global "SIGHUP_received" variable - Dump status of internal Lists on SIGUSR1, etc.


io: add io_cloexec to set close-on-exec flag.


ng_ipaddr.h: include assert.h We use assert() in this header, so we should include assert.h.


Conn_SyncServerStruct(): test all connections; and work case insensitive Fix synchronization of established connections and configured server structures after a configuration update: - Not only test servers that already have a connection, but also check and update configured servers to which a new connection is beeing established (SERVER_WAIT state). - And do the server name comparision case-insensitive.


Check_Servers(): skip servers already beeing connected Let CheckServers() not only skip servers that already have a connection, but also skip servers to which a new connection is already beeing established (SERVER_WAIT state).


Check_Servers(): Code cleanup


Update ChangeLog and NEWS in preparation for the next release ...


Fix linebreak in INSTALL text to fit in 80 columns


configure: correctly indent IPv6 yes/no summary output


Don't reset My_Connections[Idx].lastping when reading data This fixes PING-PONG lag calculation (which resulted in "0" before). The "lastping" time is still reset it if a time shift backwards has been detected to prevent the daemon from miscalculating ping timeouts.


write_whoreply(): respect hostname cloaking


IRC_USERHOST(): respect hostname cloaking