Commits


Respect RFC 1459 compatibility mode when announcing channels (no NJOIN).


Make real use of the CLIENT_SERVICE client type. This patch enables ngIRCd to handle IRC services as real services, and not as "fake users": - Set correct client type CLIENT_SERVICE for services, - Change log messages to include correct client type, - PRIVMSG: allow users to send messages to services, - Send services nick names to other servers (as users). Please note that this patch doesn't announce services as services in the network, but as regular users (as before). Only the local server knows of services as services (see LUSERS command, for example). It is up to one of the next patches to fix this and to introduce the SERVICE command in server to server communication. The propagation of services as regular users between servers doesn't limit the functionality of the IRC services and will be the fallback for servers that don't support "real" services propagation in the future.


Return 461 (syntax error) on "JOIN :" and "PART :" Up to this patch ngIRCd did not return any result (GIT master) or a badly formated 403 (":irc.server 403 test :No such channel" [note the two spaces!], branch-0-12-x) on the above commands, this patch changes the behaviour to reflect ircd 2.11 which returns 461 in both cases.


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


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.


Reset client idle time on NICK, JOIN, and PART


Allow IRC ops to ignore channel limits when joining Allow IRC ops to ignore any channel limit (bans, invite only etc.) when they want to join a channel.


Always enable modeless channels. 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.


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 ]


IRC_PART(): code and comment cleanup.


Fix sending of JOINs between servers. 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.


IRC_JOIN cleanups. - put sending of mode and forwarding of JOIN to other clients into seperate function. - put sending of topic/channel names into seperate function. - put access check into seperate function. - translate/remove remaining german comments. - stop if JOIN to a channel in a list (JOIN #a,#,b,#c...) fails (This doesn't change the behaviour: skip-to-next-channel-on-error did never work as intended)


Remove duplicate Channel_FirstChannelOf(). noticed there's a way to make the loop slightly more elegant. [fw@strlen.de: Extra () to silence gcc.]


Implement RFC 2812 handling of "0" argument to JOIN The students in my software-engineering class are writing IRC clients in Java, and I'm running ngIRCd as a sandbox for them to play in. We noticed ngIRCd doesn't obey the "JOIN 0" command specified in RFC 2812: JOIN 0 ; Leave all currently joined channels. http://tools.ietf.org/html/rfc2812#section-3.2.1 I believe the following patch addresses this. Cheers! [fw@strlen.de: put it into a seperate function]


IRC_PART could reference invalid memory.


SECURITY: Fixed a severe bug in handling JOIN commands, which could cause the server to crash. Thanks to Sebastian Vesper, <net@veoson.net>.


moved invite/ban lists to channel structure


New configuration option "PredefChannelsOnly": if set, make all JOINs to-non existants channel return ERR_BANNEDFROMCHAN_MSG, restricting users to those channels defined in the config file.


channel maxusers now unsigned long


Channel_Join was severely broken.


corrected return value


removed silly if (foo) { if (foo){ }} statement


Removed obsolete debug message.


JOIN now supports more than one channel key at a time.


Implementec numeric "333": Time and user name who set a channel topic.


IRC_LIST(): Added missing calls of Client_ID() and cleand up the code.


Remove INT, LONG, BOOLEAN, STATIC, CONST, CHAR datatypes. use stdbool.h / inttypes.h if available.


Implemented support for "secret channels" (channel mode "s").


Servers other than the destination server didn't clean up the invite list of an "invite-only" channel properly when an INVITE'd user joined.


Fixed some warnings of non-gcc-compilers (e. g. original Apple compiler on A/UX): "warning: illegal pointer combination, op =".


- Enhanced (and fixed) CHANINFO command (channel keys, user limits).


- fixed up propagation of modes with arguments between servers.


- Fixed up command forwarding: only to servers!


- replaced a lot of strcpy() calls with strlcpy() which is more secure.


- Implemented channel modes k (key) and l (user limit).


- fixed up Conf_MaxJoins test on JOIN.


- maximum channels per user limit implemented.


- new file header format (in english); - new file ident semantics.


- neues Source-Modul "irc-info"; neuer Befehl STATS.


- Parser auf Befehlstabelle umgestellt.


- LIST kann nun auch an andere Server geforwarded werden.


- ein "banned client" darf in einen Channel, wenn er "invited" ist.


- neuen Befehl CHANINFO implementiert: IRC_CHANINFO().


- an Clients wurden Modes mit fuehrendem ":" geliefert. Das ist zwar RFC- konform (IMO), macht aber leider grosse(!!) Probleme :-/


- Bei einem JOIN in einen persistenten Channel werden nun evtl. zu setzende User-Modes korrekt in den Channel gemeldet.


- IRC_LIST ruft nun Match() auf und beherrscht somit nun Patterns.


- Code-Stelle in IRC_JOIN "klarer" gemacht :-)


- JOIN: Invite- und Ban-Lists werden nun beachtet.


- fehlerhaften Fehlercode in IRC_TOPIC() gefixed.


- Anpassungen an pre-ANSI-Compiler, - Includes aufgeraumt: Header includieren keine anderen mehr.


- persistente und vordefinierte Channels implementiert.


- Neue Funktion IRC_LIST() begonnen zu implementieren.


- alle Client_GetFromID() durch Client_Search() ersetzt.


- externe portab-Header werden nicht mehr benoetigt/benutzt, dadurch einige Aenderungen an diversen Source-Dateien und Headern. - Dateien enthalten keine CVS-History mehr.


- Source in weitere Module fuer IRC-Befehle aufgesplitted.