Alexander Barton [Fri, 27 Jun 2008 03:55:45 +0000 (05:55 +0200)]
autogen.sh: Don't set AUTO{CONF|MAKE}_VERSION and WANT_AUTO{CONF|MAKE}
On some systems (for example Gentoo Linux, FreeBSD, and OpenBSD), these
variables are used to select which version of GNU automake and autoconf
to use, but we shouldn't depend on a specific version -- instead we
should use the "system default". So probably it is up to the user to
set these variables accordingly to set up some wrapper scripts of his
operating system distribution.
Alexander Barton [Mon, 16 Jun 2008 11:07:50 +0000 (13:07 +0200)]
Fix GCC warnings for possibly uninitialized variables in IRC_JOIN
This patch fixes the following two warnings of GCC 4.2.4:
irc-channel.c: In function "IRC_JOIN":
irc-channel.c:185:
warning: "lastkey" may be used uninitialized in this function
irc-channel.c:185:
warning: "lastchan" may be used uninitialized in this function
Alexander Barton [Wed, 11 Jun 2008 14:00:38 +0000 (16:00 +0200)]
Allow mixed line terminations (CR+LF/CR/LF) in non-RFC-compliant mode
Up to now ngIRCd accepted CR+LF as well as a single CR or LF in "non RFC
compliant" mode (the default). But ngIRCd became confused when it received
data containing mixed line endings (e. g. "111\r222\n333\r\n").
This patch enables ngIRCd (in "non RFC compliant" mode) to detect CR+LF,
CR, and LF as equally good line termination sequences and to always end the
command after the first one detected.
Some clients (for exmaple Trilian) are that ... broken to send such mixed
line terminations ...
First patch proposed by Scott Perry <scperry@ucsd.edu>,
Thanks to Ali Shemiran <ashemira@ucsd.edu> for testing!
Alexander Barton [Fri, 30 May 2008 12:49:56 +0000 (14:49 +0200)]
Don't allow stray \r or \n in command parameters
If ngircd receives an input line like "COMMAND arg\nIRRELEVANT\r\n",
"arg\nIRRELEVANT" is passed as an argument to COMMAND. This can lead
to output like:
:ngircd.test.server 322 nick #chan 1 :
topicwithprecedingnewline
:ngircd.test.server 322 nick #nxtchan 1 :
[..]
Worse, this allows clients to piggyback irc commands, e.g.
"TOPIC #a :test\n:fake!~a@nonexistant JOIN :#a\r\n", which
causes the client to receive a JOIN command during /LIST output.
Bug reported by Scott Perry, first patch by Florian Westphal.
In addition, the "timeout" variable has been removed because it is
unnecessary today: Handle_Buffer() handles all the data it can handle,
and io_dispatch() returns immediately when new data is available. So
we don't have to double-check but better sleep. Pointed out by Florian.
Scott Perry [Mon, 26 May 2008 10:38:15 +0000 (12:38 +0200)]
Use strtok_r instead of strchr in IRC_JOIN.
This patch does significant cleanup on the join code by using strtok_r
instead of mangling strchr to parse channel names and keys in parallel when
a JOIN command contains a list of channels and keys.
Also adds an strtok_r implementation to libportab.
Scott Perry [Mon, 12 May 2008 10:59:55 +0000 (12:59 +0200)]
This patch implements a (maybe) compliant WHOWAS command.
It is hard to test this in the test suite because we 1) shouldn't rely on
previous tests populating WHOWAS and 2) don't connect a user for more than 30
seconds.
Also makes WHOWAS return ERR_NONICKNAMEGIVEN_MSG as implied by RFC.
Alexander Barton [Sun, 11 May 2008 13:17:22 +0000 (15:17 +0200)]
Fixes to who-test: accept "localhost.<domain>" as well as "localhost"
Some operating systems, for example OpenBSD, use "localhost.<domain>"
instead of "localhost", so the "who-test" expecting "localhost" failed
on such systems.
Implement IRC commands SERVICE, SERVLIST, and SQUERY as dummy functions
SERVICE, SERVLIST, and SQUERY are required by RFC 2812 (it states in
section 3 that "all commands described in this section MUST be implemented
by any server for this protocol." -- So we implement them without (much)
actual functionality ...
Dana Dahlstrom [Sat, 3 May 2008 22:46:02 +0000 (00:46 +0200)]
tests for JOIN and various replies
Brandon Beresini sent me a patch yesterday adding tests for JOIN under
various circumstances, which I believe he worked on with Bryan Caldwell
and Ali Shemiran. I made a few modifications; the result is below.
Handle 1-character messages terminated with CR or LF correctly
Code cleanup and fix for Bug #83, "ngIRCd chokes on 1-character messages" in
function Handle_Buffer(): the buffer is now correctly cleared when ngIRCd
receives 1-character messages terminated with either CR or LF (in violation
to RFC 2812, section 2.3 "Messages", 5th paragraph).
Modeless channels (+channels) are described in RFC 2811;
so my modifications to 530112b114ffa7d5352c0733790ddf90253f41f9
('Add support for modeless channels')
to disable +channels for --strict-rfc configurations
were wrong. This reverts those changes.
Ali Shemiran [Thu, 1 May 2008 13:19:31 +0000 (15:19 +0200)]
Add support for modeless channels
Add support for modeless channels (+channels).
[fw@strlen.de:
- integrate test cases
- don't support +channels when compiled with --strict-rfc
- do not set +o mode for channel creator
- force +nt mode when channel is created ]
Testsuite: remove erroneous ConfUID setting in config file.
The config file for ngircds test suite contained obsolete
ConfUID/ConfGID settings, causing ngircd to needlesly complain when
started as non-root (which is hopefully the _normal_ case...)
Alexander Barton [Thu, 24 Apr 2008 21:52:54 +0000 (23:52 +0200)]
Report ERR_NOTONCHANNEL when trying to part a channel one is not member of.
When trying to part a channel ("PART #channel") the client is not member of
the daemon now correctly reports the numeric ERR_NOTONCHANNEL (442) insted
of ERR_NOSUCHCHANNEL (403).
Alexander Barton [Sat, 12 Apr 2008 21:29:58 +0000 (23:29 +0200)]
GIT should ignore user preferences files inside Xcode projects.
Added filter for GIT to ignore Xcode user preferences files (*.mode1v3 and
*.pbxuser) which are automatically generated inside the project bundle when
opened in Xcode.
client.c:72:6: warning: symbol 'Max_Users' was not declared. Should it be static?
client.c:72:21: warning: symbol 'My_Max_Users' was not declared. Should it be static?
Florian Westphal [Tue, 18 Mar 2008 20:12:47 +0000 (20:12 +0000)]
Do not exit unconditionally if config file cannot be opened
ngircd will exit if the config file cannot be opened. While
thats okay if ngircd starts up for the first time, it isn't
when we are re-reading the config file after a /REHASH or SIGHUP.
Alexander Barton [Tue, 11 Mar 2008 14:05:27 +0000 (14:05 +0000)]
Fix #include's: search log.h locally, include string.h. The latter is required because we include conn.h, which includes resolve.h, which includes ng_ipaddr.h, which contains a macro using strlcpy() ...
Florian Westphal [Tue, 26 Feb 2008 22:50:35 +0000 (23:50 +0100)]
IPv6 support.
all references to struct sockaddr/in_addr have been
removed from src/ngircd.
libngipaddr (in src/ipaddr/) hides all the gory details.
See src/ipaddr/ng_ipaddr.h for API description.
This does hit only operators that join a channel with at least 2 servers active in the net
the server the oper connects to sends "channel^Go" to the other servers
the other server first searches for the channel and then strips the modes from the channel name
he has to do the other way round: first strip and then check the channel name.
Dana Dahlstrom [Sat, 16 Feb 2008 11:27:48 +0000 (11:27 +0000)]
Don't send trailing space in MODE messages
Under some circumstances ngIRCd currently issues a channel MODE message
with a trailing space after the last parameter, which isn't permitted by
the grammar in RFC 2812 section 2.3.1:
http://tools.ietf.org/html/rfc2812#section-2.3.1
The following patch modifies mode-test.e to expose this, and modifies
irc-mode.c to correct it.