<---> Changes in version 0.8.2 - August 26th, 2010 * Fixed critical string formatting vulnerability in irc_SendWhois() <---> Changes in version 0.8.1 - July 22th, 2010 * Added ip reverse lookups for proper host names (deactivate with ResolvedHosts=false, see example conf) * Added "ConnectThrottling" config option to disable connect throttling, enabled per default * Added "ResolvedHosts" config option to disable host resolving (described below), enabled per default * Fixed ipv6 addresses not properly displayed (now correctly shown with square brackets) * Fixed channel mode +O not properly showing up when requesting channel modes * Fixed NoOpChans not working properly due to mask check failing for two similar strings without * mask chars * Fixed ChanServ's autoop/-halfop/-voice being broken due to changes in 0.8 * Fixed setup.sh's check conditions for automake/autoconf/libtool not working properly on many systems (I hope they will work better now) * Changed maximum mode parameter count from 12 to 15 * Changed 378 numeric syntax to something more client-friendly <---> Changes in version 0.8 - June 10th, 2010 WARNING: This release fixes a crash issue! Please upgrade. * Added ChanServ drop command * Fixed channel ops/halfops unable to talk when banned although they can just easily unban themselves at any time * Fixed config loader sometimes not unloading modules loaded for examination and config value validation * Fixed maximum mode parameter count not being honoured * Fixed memory corruption in ISON * Fixed new IRC command parser not being able to deal with a full length channel name as a parameter (truncated) * Fixed long (but valid) PRIVMSGs sometimes being truncated because the resulting event message would exceed 512 bytes (this will still break CTCPs so far, including /me) * Fixed TOPIC changes not properly saved by ChanServ * Fixed 'The ... service is currently unavailable.' message * Fixed root startup sequence not setting file access rights correctly on a couple of things (including databases) which causes issues if database files already exist but someone messed around with the access rights afterwards * Raised maximum possible IRC parameter count (so it basically works with many mode parameters up to... loads :p [limit is the generic IRC parser here, but as much as 20 should be possible]) * Changed maximum mode parameter count from 5 to 12 * Improved performance when adding new users <---> Changes in version 0.7.5 - December 19th, 2009 * Added graphical settings pane for administration panel * Added INVITE command * Added RPL_WHOISHOST to whois when WHOIS'ing yourself or having IRC op privilegues * Fixed a smaller memory leak when deleting users * Fixed USERHOST not returning real host when used on oneself <---> Changes in version 0.7.2 - November 9th, 2009 WARNING: Old config files need to be updated. See shipped example config for reference (regarding the new listen { } block) * Added chanserv flags system for user privilegues for autoop and others * Added chanserv op/deop/halfop/dehalfop/voice/devoice commands for channel status control * Added a graphical administration panel * Added mixed ipv4/ipv6 capability (needs new listen config block for port binding!) * Fixed fake user send queue problems (affecting services) * Fixed broken WHO not sending the proper channel status * Rewrote/improved some of the string functions * Split up weircdservices.c into several sub files * Changed Server: BindIp/Port options into a separate listen { } block <---> Changes in version 0.7 - September 21th, 2009 * Added a new numeric 650 RPL_CONNECT to notify services users of clients connecting (syntax: :Connected) * Added a new numeric 984 ERR_TOOMANYPARAMS which is responded if a cmd takes less parameters than those given (used for REHASH and others) * Added new fake users which have no real tcp connection (can be used for any built-in bots) * Added support for command line options (you can use --help --version --allow-root (not recommended for other purposes than testing) and --no-flood (dangerous if used by unexperienced users!) so far) * Added config option "Password" in block Server for a server-wide password * Added config option "Level" in block FloodProtection which can be specified as soft, medium and strict (changes the flood detection policy) * Added USERHOST command * Added weircd_linkedlists.c which provides functions for managing linked lists (currently used by weircd_readconf_varmanager_listdata.c) * Added 416 ERR_TOOMANYMATCHES for WHO command (no parameters or "*") * Added TOPICLEN value to the 005 numeric * Added actual functionality to channelmodes +cm (no colours and moderated) * Added SVSNICK command to rename users (only available to services users) [TODO!] * Added usermode +S to mark services users (which are able to use the new SVSNICK command and can see all join/part activity on all channels and get RPL_CONNECT numerics and all QUIT events) * Added the SERVICE command which you can use to login as a service (in most cases deactivated for every user except fake users of the new modules) * Added config parser now finally being able to deal with block comments! /* ... Yay! */ * Added some includes for true runtime-loaded modules for linking and services * Added possibility of as much users as your hardware can deal with by recoding user management * Added possibility of unlimited channels until your hardware gives up by recoding the channel management * Added possible endless amount of channels joined by one single user simultaneously by recoding the respective user data management parts * Added support for dynamic modules * Added NoOpChans functionality to specify channels where users don't get op on join even when they are empty * Added channel mode +mckl now finally doing something * Added implementation of Shane Mc Cormack's LISTMODE extension * Added MODE now prompting an error message for modes missing parameters * Added proper handling of SIGHUP (reloading configs) and SIGINT (safe shutdown) * Changed 005 CHANMODES: mode +l (limit) is now treated as B-mode (changing a setting and always heaving a parameter). Furthermore, the missing channel modes +rO and user modes +Br have been added * Changed the way the services are integrated greatly: they aren't hacked in anymore but interface through the new fake users and can be treated similar to normal users by most functions * Changed nickname validation to be less restrictive (just try a bit around) * Changed 251 RPL_LUSERCLIENT not to include invisible users anymore (as response to the LUSERS command) * Removed user modes +wis as they are currently essentially useless * Recoded the config parser and the config system in big parts * Recoded the socket code and the user managing code * Recoded and reorganized the mode parser in large parts * Reorganized the complete code to be build in seperate object files which are finally linked together * Deactivated flood protection for the commands KILL, GLINE and KLINE for IRC operators (mainly to be able to kill many users simultaneously for defending against heavier attacks etc) * Fixed a small glitch in the 252 RPL_LUSEROP numeric * Fixed TCC compiler incompatibility * Fixed some small bugs in the GLINE/KLINE command parser * Fixed some memory leaks * Fixed some possible integer overruns in parsetime() * Fixed some legacy string processing code in weircd_strings.c * Fixed ISON now able to deal with multiple users at once <---> Changes in version 0.6.0.2 - March 11th, 2009 * Fixed away reason being cut off at first space char * Fixed major crash issue when saving klines while rehashing the config (only possible to be triggered by irc ops) * Fixed broken gline-/kline event notice to opers <---> Changes in version 0.6.0.1 - February 28th, 2009 WARNING: This new release is still subject to some changes. Especially the database layout for the services and the linking interface might still get altered a lot in the following release. WARNING 2: Chan.db/nick.db files older than from WeIRCd 0.6.0.0 are INCOMPATIBLE with this version and need to be deleted before starting up!! WARNING 3: Linking support is both highly experimental and unfinished. Don't use it, it won't work properly (unless you are curious). * Added a windows installer to make using WeIRCd on windows easier * Added "MAXBANS" and "MODES" values to 005 message (thanks to DMDirc developers for pointing this out) * Fixed wrong content of "copying" file which contained more than just the license <---> Changes in version 0.6.0.0 - February 27th, 2009 WARNING: This new release is still subject to some changes. Especially the database layout for the services and the linking interface might still get altered a lot in the following release. WARNING 2: Older chan.db/nick.db files are incompatible with this version and need to be deleted before starting up!! WARNING 3: Linking support is both highly experimental and unfinished. Don't use it, it won't work properly (unless you are curious). * Added support for MS Windows operating system (native sockets including select()) * Added multibind support (allowing multiple ports for client listener binding) * Added compile time operationg system detection for linux, solaris, netbsd, freebsd, openbsd, mac os x and windows * Added usage of select() which should improve performance/lower CPU usage * Added SRAW command (deactivated per default, compile with the command line switch -DSRAW to activate it) * Added weircd_users.h which contains structs and defines which have previously been in weircd_users.c * Added weircd_linkdata.h which contains structs for storing general link information * Added weircd_links.c to manage anything basic on passive and active links * Added weircd_links_tcp.c to manage all the tcp connections belonging to the links and weircd_links_tcp.h to store related information * Added weircd_links_tcp_send.c for managing the links' send buffers * Added weircd_links_modulewrapper.h which contains all the function headers which should be used by modules, weircd_links_modulewrapper.c contains the assigned functions * Added md5.c containing the md5 hashing algorithm by RSA Data Security, Inc. to the project * Added weircd_sockets.h containing some global vars important for sockets and select() handling * Added weircd_serversockets.c for general multibind handling and weircd_serversockets.h which contains the array of listener sockets and other multibind-related information * Added modules/serverlinking/weircd_modules_linking.h, containing the bridge functions to the added server linking modules * Added wlinksv1.c as first server linking module, implementing the "WeIRCd links v1" linking protocol. Added a lot of basic functionality, see the source code file for details (basically it syncs users & servers, including indirectly linked ones, and enables remote motd, whois, msg and notice commands and does nick collision with time stamping etc; the module is plain text based but has slightly improved server login security through a bit of md5 hashing - again, see the code for details) * Added KLINE command which prompts the gline command with argument global=0 * Added cmd_gline() taking an addition argument "int global" for specifying K-lines or G-lines * Added weircd_glines.c's functions all having an additional argument for chosing k-lines/g-lines or seperate functions for k-lines * Added "bool globop" to struct weircd_user which specifies if, in case the user is IRC operator, the user has global rights and can kill users which are not on the local server or set/remove glines * Added "bool servicesop" to struct weircd_user which specifies if, in case the user is IRC operator, the user has services rights and can command the local built-in services/linked services' servers * Added "ReservedNicks" block in config file being parsed and stored and used when a user attempts to change his nickname * Added INFO command which displays some info about the server software * Added MOTD command which repeats the initially sent message of the day and works also with linked servers as argument * Added the whole linking interface. See source code for the full functionality (it is a LOT, too much to describe here) * Added authdone() now sending information to linked servers about the new user * Added user quit sending off an IRC event to linked servers * Added NICK now sending information on nick changes to linked servers * Added PRIVMSG and NOTICE now sending queries to linked servers if the targeted user is non-local * Added config parser now parsing link blocks and a new (compulsory) value named "description" inside the server block * Added WHOIS being able to request a whois of a user on another server and to use the new server description in numeric 312 * Added vsnd() now named usnd() and taking "..." as parameter (can fill in %s %d %lld and others, see function itself in weircd_usersendbuffer.c) which makes local sprintf-buffers in many cases obsolete * Added usnd() automatically redirecting messages to a linked server if the targeted user is non-local * Added value "BindIp" in block "server" in config file also takes "any" as value * Added "int hopcount" to struct weircd_channel so that channels can be marked as being nonlocal with a certain hopcount. "int linktcpdata" then holds the tcp handle for the linked server and "unsigned char* servname" the name of the server * Added IPv6 support (only Unix systems so far, no MS Windows support) - Thanks to Tribes for code contributions & support! * Fixed OperServ help page "say" asking the user to use /msg nickserv instead of /msg operserv * Fixed OperServ command "say" not saying things through global but through operserv and missing the : char at the beginning of the event line * Fixed /gline parsing single time unit values of the expiration time incorrectly when they are greater than 9 * Fixed possible forcerename()-hangup in some cases * Fixed 004 numeric having a slight syntax error * Fixed possible memory leak in Nickserv's "identify" under rare circumstances * Fixed NickServ ChangePass wrongly accessing the user's nickname instead of his account name * Fixed generate_vhost_user() not placing a valid nullterminator, leading to strange and invalid user hosts * Fixed small possibility of memory leak in vsnd() * Fixed config reader not rejecting !-characters in server name * Fixed config reader not closing the config file properly when some errors occur (mainly regarding the IRC op entries) * Cleaned up weircd.h a bit and added (more) comments * Changed cmd_whois2 no longer containing the built-in services whois answer lines, but calling sendserviceswhois() instead * Changed built-in services checking for servicesop instead of ircop user property for the IRC operator rights to command the services * Changed NickServ to use md5 hashes instead of plain text for passwords (makes older nick.db files unusable) * Changed weircd_confoptions.h's struct configoptions to be able to store the necessary information for linking and multibind * Changed 005 now containing CHANMODE information * Changed 351 to include the operating system if known * Changed NOTICE AUTH to fit other servers' authentication notices better * Changed chan.db layout to fit the new flag list concept (makes older chan.db files unusable); * Changed all functions accessing internal ts() function in new cofde file weircd_time.c instead of time(NULL) to get a timestamp which returns UTC time and has the ability of applying internal offsets for adjustments which can be done without touching the system's time * Changed layout for startup sequence a little bit * Changed LIST command returning 263 (server load too heavy) if used too often * Changed the string function's name "allesnachzeichen" to "allbehindchar" so non-German users can deal with it * Changed the string function's name "allesvorzeichen" to "allbeforechar" for the same reason * Changed cmd_join() using not moveintochan() directly but the localjoin() function instead which then decides if executing the join directly when the channel is local or send a WANTJOIN request out to the corresponding linked server <---> Changes in version 0.4.5a - November 1st, 2008 * Fixed generate_vhost_user() hanging up when vhost is invalid * Fixed delivered example configs containing an invalid vhost for registered users <---> Changes in version 0.4.5 - October 12th, 2008 * Renamed ChanServ access command to ChanServ flags command and implemented it including the necessary database functions * Modified isOppedOnJoin to access chanserv_autoop for auto op which accesses the new ChanServ flags system * Implemented OperServ privmsg pipe (routing queries sent to the user "operserv" to the weircd_services.c gateway) * Implemented OperServ commands help and say, including help pages on general help and "say" * Implemented NickServ changepass command * Implemented NickServ logout command * Implemented register flood limit for ChanServ (one registration per ip per 300 seconds) * Implemented STATS stub (always returns 481 numeric) * Implemented REHASH command for reloading config file * Implemented user mode +B for bots and added a whois entry (335) * Changed 320 services bot numeric (RPL_WHOISSPECIAL) to 335 bot numeric (RPL_WHOISBOT) * Added "weircd_glines.c" for processing and loading/saving glines * Added NickServ help pages for "info", "logout", "identify" and "changepass" * Added ChanServ help pages for "flags" and "chanflags" and removed obsolete pages for "access" and "levels" * Implemented GLINE command (setting glines (ban masks with expiration times & reasons), check on user connect and removing glines) * Fixed NickServ still force renaming if a registered user renames from a registered nick which is not his/her own back to his/her own to which he or she is logged in * Fixed NICK sending a nickchange event even if the given targeted nick was exactly the same as the current one * Fixed memory leak when getting kicked from the server for too many failed login attempts (NickServ) * Fixed memory leak on all users when quitting and a particular one only affecting NickServ-logged in users on quitting * Fixed wrong license text in "weircd_masks.c" * Fixed owner name of registered channel saved as lowercase string * Fixed 004 numeric internally prepared but never actually shown * Made compile options look nicer * Improved the installation Makefile (it helps the user a bit now and can deal with two scenarios of enabled and disabled services including appropriate config files) and added a README file <---> Changes in version 0.4.0.2.1 - August 19th, 2008 * Fixed NICK not checking maximum nick len [CRITICAL] <---> Changes in version 0.4.0.2 - August 12th, 2008 * Implemented AWAY * Implemented KICK * Added "iamprotected" which can be set by built-in services for protected users. Bans and kicks on users marked this way do not work * Fixed privmsg/notice bug with "no such user" being triggered by too long messages * Fixed kick kicking the wrong user * Fixed memory leak in builtin-NickServ's enforced protection PASS check routine * Fixed NickServ allowing double registrations * Fixed ChanServ changing logged in account name on register * Split up "weircd_ips.c" into "weircd_ips.c" and "weircd_ips.h" * Disabled enforced NickServ protection by making use of server password by default and added the normal identify NickServ behaviour * Implemented bans now being enforced * Implemented Ping timeout now not throwing off users when they do not pong fast enough but still send other messages * Implemented force-rename after some seconds of not-identifying when using NickServ identify-behaviour (can be turned off by setting the compile switch SERVICES_LOGINTIMEOUT to zero) * Implemented a "nick lock" for a short amount of time after having been force renamed which prevents from renaming again * Implemented too many failed NickServ identify attempts leading to disconnect * Added "lastnickfail1" "lastnickfail2" "lastnickfail3" to struct weircd_ipdata to track down the last three failed nickserv logins for built-in services/identify * Added "nicklock" to struct weircd_ipdata to lock all nicks of that ip after a force-rename * Added "weircd_hostcloaking.c" which generates hosts for unregistered and registered users using the masks given by the config file * Added "needstimeout" to struct weircd_user indicate the need for a forced rename * Added "notifyregistered" to struct weircd_user to indicate the need for a notice that this nick is registered after sending the startup messages (001 numeric etc.) * Raised max flood points from 8 to 10 <---> Changes in version 0.4.0.1 - July 28th, 2008 * Changed CPU brake a bit * Added s_mode.c of WeIRCd 0.3.6 dev branch which contains the MODE parser including setting channel bans etc. and modified it to be able to deal with WeIRCd 0.4's data structures (now named "weircd_mode.c") - bans not enforced yet * Added s_masks.c of WeIRCd 0.3.6 dev branch which contains functions to parse masks and * placeholder (now named "weircd_masks.c") * Added config block "NoOpChans" which replace sub block "NoRegisterChans" of config block "Services". By defining channels where users don't receive channel operator status when joining, the users cannot register these channels even with other services in use and can't even use them properly without registering them (channel mode +t for topic lock will be autoset) * Added config option "MOTDfile" in block "server" * Added "weircd_motd.c" covering functions to load a motd from a specific file and have it send to a user (including the necessary numerics) and made the config parser prompting the motd loader after successfully parsing a new config file * Added LIST ignoring xchat /list parameters like ">0,<1000" and similar (detected via isxchatstuff()) * Added "unsigned char* awayreason" to user struct for holding the /away-specified reason * Renamed "weircd_confoptions.c" to "weircd_confoptions.h" * Fixed socketsStartup() returning wrong values in certain situations * Fixed readconfig() in weircd_readconf.c sometimes not checking if char pointers of config options are already pointing somewhere. This could lead to a memory leak for config options which were being stored in char pointers when they were accidentially added twice to the config file by the user (this lets the server now prompt an error) * Fixed non-existant channel mode +a still being listed in 005 * Fixed NickServ help page "commands" having a wrong title * Fixed WHOIS always claiming the whois'ed user's server to be irc.eloxoph.net instead of the servername set in the current config options * Fixed NickServ's "unknown command"-message telling the user that "msg nickserv help" would show a command list which it doesn't, it just shows general help in getting more information * Fixed OPER not working for any account except the first * Fixed NAMES sometimes sending "no such chan"-numeric instead of a correct 366 and not sending 366 in other cases aswell * Fixed WHOIS having no limit and no flood protection * Implemented MODE command * Implemented ChanServ command "help" and help pages for: general help, "commands", "register", "access" and "access levels" * Implemented ChanServ command "register" * Implemented WHO (can list users of a chan or the specific who entry of one user) * Implemented WHOWAS stub which always returns "There was no such nickname." (expansion not planned) * Implemented ISON * Changed the nick.db path from /etc/weircd/nick.db to ./nick.db * Changed 004 numeric now actually reporting the modes that are supported through /mode (most of them don't do anything yet, but they can be set/removed) * Changed ping timeout from 20 to 40 seconds * Implemented TOPIC and made channelmode +t work * Implemented LIST which obeys channelmode +s <---> Changes in version 0.4.0.0 - July 5th, 2008 * Fixed WHOIS accessing own data in some cases instead of targeting user and therefore showing crap * Fixed LUSERS always showing 4 users instead of the real user count * Fixed NickServ having a glitch in the wrong register command syntax-message and showing status "registered" for nickname "" <---> Changes in version 0.4.0.0a - July 5th, 2008 * Fixed missing space char in front of "NETWORK"-value in 005 message * Added compile option "ACTIVATEDEBUG" to activate extensive debugging output (received lines etc..) * Added compile option SERVICES_ENABLED for activating/deactivating built-in services support (if compiled without services support, WeIRCd will now reject a "true" for the "enabled" config option in "services" block), compiling with -DNOSERVICES ("make noserv") deactivates services support * Added config option "HelpChan" to config block "Server" which represents the network-wide support chan * Added config block "FloodProtect" with anti flood options * Added config block "HostCloaking" for configuring cloaked user hosts (sub block of "FloodProtect" block) - entries have NO effect yet! * Added config block "ReservedNicks" for blocking potentially dangerous nicks - entries have NO effect yet! * Added config block "NoRegisterChans" (sub block of "Services" block) which contains names of channels that can't be registered (only relevant for built-in services) - entries have NO effect yet! * Added config option "NickWaitTime" to "Services" block to offer a basic protection against nick register flooding * Added config option "LimitChanChars" to "Services block, this prevents users from registering chans which contain too many strange characters/extremely long sequences of special chars to steal the user's attention - entries have NO effect yet (because ChanServ is still unusable)! * Added "weircd_services.c" for built-in services * Added "weircd_signals.c" for signal processing handlers and added sigterm handling (proper shutdown of SQlite database) * Added important functions tellallusersinchan() tellallusersinchan_exclude() and tellaffectedusers() * Added weircd_user.accountname (only present if compiled with SERVICES_ENABLED) * Improved weircdInit() a bit * Implemented channel data structures and JOIN and NAMES command * Implemented PRIVMSG and NOTICE now working for channels * Implemented QUIT and NICK sending event messages to other users in same chans * Implemented SQlite database support (only activated when SERVICES_ENABLED is defined) and added basic functions for dealing with the user database in weircd_services.c * Implemented connect throttling and added "weircd_ips.c" for ip-related information * Implemented ping timeout * Implemented excess flood * Implemented quit messages * Implemented PASS command and weircd_user.pass var * Implemented PASS being checked with weircd_services.c functions for user account * Implemented isfakeuser(), made IRC functions use it (for faking local services users) and added special conditions for the fake services for showing a proper /whois * Implemented LUSERS adding the count of fake services users in case built-in services are activated via "enabled" in "services" block * Implemented PRIVMSGs to the fakenicks returned by isfakeservicesuser() have been redirected to services_gateway_privmsg() * Implemented NOTICEs to the fakenicks returned by isfakeservicesuser() have been redirected to services_gateway_notice() * Implemented NickServ command "help" & help pages for: general help, command listing, register command * Implemented NickServ command "register" * Implemented NickServ command "info" which shows if a nickname is registered and, to IRC ops only, the e-mail address * Implemented OPER and parsing of the IRC op entries in the config file * Implemented KILL command * Implemented PART to leave channels * Changed version messages in 001-005 numerics a bit and implemented "VERSION" command * Fixed/Finished sendstuffbeforeremove functionality and hence the USERQUIT_ERROR quit method * Fixed removed user instances not being free()'d * Fixed LUSERS reporting the maximum value of users since server startup correctly instead of current user count * Fixed WeIRCd not compiling on Mac OS X because of MSG_NOSIGNAL not being present - using signal masking in main() instead <---> Changes in version 0.4-prealpha2 - June 15th, 2008 * Changed config options now being grouped together in a struct (thanks Sheepeep!) * Implemented chunked sendbuffer, send routines and auth notice on connect * Implemented client's host now being created from its ip * Implemented receive buffers and receiving itself * Implemented nicknamevalid() from old 0.3.6 * Implemented NICK, USER, PRIVMSG/NOTICE for queries only and no multiple targets, PING/PONG, LUSERS, WHOIS and QUIT * Added source code files for holding IRC user commands and responses/execution code <---> Started 0.4.* dev branch with 0.4-prealpha1 * CHANGED LICENSE TO GPL * New dev branch completely developed from scratch again * This version isn't even able to send/receive stuff and can only parse the config a bit and has the most basic data structures for users and socket data. It is more of a nice start than an actually working program <---> Changes in version 0.3.7 - (Never released) * CHANGED LICENSE TO GPL * Fixed /invite sending a wrong 341 message * Fixed /invite testing the IRC operator for the wrong user id when inviting services * Implemented an additional layer between the user data and the functions accessing it (see s_userdatafunctions.c) * Implemented a nicer Makefile which helps the users a bit * Implemented /sajoin which can be turned on using a build switch in source code file "s.c" * Moved general command parser into s_proceed.c (from s.c) and renamed it from fverarbeitestring() to generalcommandparser() <---> Changes in version 0.3.6 - January 5th, 2008 * Fixed motdpath() modifying the passed string instead of using a local string copy * Fixed EOF not detected correctly * Fixed /part for multiple chans not working * Fixed channelmode +c blocking the char "4" in messages instead of the ascii colour code 3 (which results in noone being able to say 4 with mode +c set) * Fixed /mode for channels sending multiple 482, 472 and 468 messages instead of sending it once for all affected modes * Fixed fSetChanMode() comparing isplus with bool "true" instead of int "1" * Fixed /invite using a wrong id to test the inviting user on IRC operator privilegues * Fixed numbers not being allowed at the beginning of idents * Moved the client socket read function out of the mainloop into s_clientloop.c * Started implementing EPOLL() usage for better performance (don't activate it yet, your server will not work properly then) * Implemented channelmode +k (password) * Implemented channelmode +l (user limit) * Implemented /mode usermodes in general and the usermodes +oswi * Implemented a config file option for filering colour codes out of part and quit messages <---> Changes in version 0.3.5.0.1 - January 4th, 2008 * Fixed PRIVMSG channel messages not working properly in last version <---> Changes in version 0.3.5 - January 4th, 2008 * "Fixed" /lusers to meet the requierements of some bots who can't parse it if it isn't exactly written like on other big nets (including a single space char which is obsolete) * Fixed /join rejecting the chars . and - in channelnames * Fixed /who not sending & prefix for channel administrator status * Fixed /away displaying the wrong message when used to return from away status with a colon (e.g. "away :") * Fixed /lusers listing the services as one normal users instead of 4 invisible users and added some other details to include the services into the displayed user amount correctly * Fixed gibuserid() only working on authed users * Fixed /stats already accessible when not logged in to the IRC yet * Fixed /names not splitting the names list up in case there are too many users in the chan * Fixed makevalidmask() not inserting a * at the place of missing clientids on ban masks * Fixed users still being able to talk in a channel when they have been banned * Fixed users still being able to talk when banned in a channel * Fixed GetChannelModes() not returning all of the implemented channel modes * Increased sendbuffer from 200 to 2000 lines per client * Raised the MAXKILLSATONCE value from 30 to 100 * Removed unused MAXGLINESATONCE * Readjusted CPU brake * Moved the built setting "bindip" to the config option "bind" which takes now an ip address instead of "local" or "server" * Implemented a string termination per default on the following functions which shouldn't be necessary but good for additional security (against buffer overrun): /whowas /ison /userhost /list /kick (only the nickname and channel here) /topic (only channel here) /part (only channel here) /names /notice (only the notice target here) /privmsg (only privmsg target here) processwhois() (only the nickname) * Changed the 004 message to show what the server is actually capable of * Changed the 005 message to show the possible amount of modes with parameter which can be used in one /mode command, the amount of possible bans in one channel and the correct maximum channel name len, which is 22 and not 15 * Implemented the /invite command * Implemented channelmode +c (block colours) * Implemented channelmode +i (invite only) * Implemented the sending of multiple lines through send() at once in case they are short enough * Implemented a connections-per-ip limit which is as default 25 connections per client * Implemented a build setting for the maximum amount of channels which can be joined by a single user and set it to the default of 15 instead of former 10 <---> Changes in version 0.3.3.9 - January 1st, 2008 * Fixed /list to show only the information about a specific channel when given the channel name as parameter * Fixed /join printing multiple 405 messages with "too many channels open" instead of only once and cancelling then * Implemented /links * Implemented set and removed channel bans now being saved, including the time and the actor (the person who set the ban) * Implemented channel bans now affecting users * Finished implementing of viewing the channel ban list <---> Changes in version 0.3.3.2 - December 24th, 2007 * Fixed "Some buffer overrun or memory leak issue" from previous version (christmas crash issue) <---> Changes in version 0.3.3 - December 24th, 2007 * Fixed buffer overrun in USER parsing function * Fixed IRC operators not being able to give users with channel admin status channel voice too without having channel operator status themselves * Fixed gline taking a word as expiration time * Fixed users with administrator channel status (prefix &) not being able to kick users without having channel operator or halfoperator flags (@%) at the same time * Fixed /names function not asking gibSVname() for the proper writing of the chanserv-nickname * Fixed /rehash already being accessible when not logged in to the IRC yet * Fixed maximum values in /lusers being null * Implemented IRC op entries in the configuration file Known issues: * Some buffer overrun or memory leak issue <---> Changes in version 0.3.2.2 - December 23th, 2007 * Fixed all the nicknames getting lowercase when connecting or joining new channels (Bug partly reported by Sheepeep) * Fixed broken mask kill/gline-quit message of victims * Fixed users with administrator channel status (prefix &) not being able to change the channel topic without having channel operator or halfoperator flags (@%) at the same time when channelmode +t was set (Bug reported by Sheepeep) * Implemented setting and removing channel bans (doesn't affect anything yet, they just don't appear in the ban list) * Implemented /lusers * Implemented a limit of the modes with parameters in one single mode command * Implemented a limit of all the modes in total in one single mode command (Sheepeep reported the need for that) * Started implementing of viewing the channel ban list