InspIRCd 1.1.0 Beta 5 review

Download
by rbytes.net on

InspIRCdInspIRCd is a modular C++ IRC Daemon for Linux, BSD and Windows systems created to prov

License: GPL (GNU General Public License)
File size: 326K
Developer: ChatSpike Development Team
0 stars award from rbytes.net

InspIRCdInspIRCd is a modular C++ IRC Daemon for Linux, BSD and Windows systems created to provide a stable, modern, lightweight ircd (irc server) from scratch and provide a vast number of features in a modularised form using an advanced module API.

By keeping the functionality of the main core to a minimum we hope to increase the stability and speed of our project and make it customisable to the needs of many users. InspIRCd is designed primarily to be a custom irc server for the chatspike irc network (irc.chatspike.net) but we are releasing it into the public domain under GPL so that you may benifit yourself from our work.

InspIRCd is written from scratch, avoiding the inherent instability under large loads which can be seen in many other irc server distributions which have the same featureset.

Requirements:
GCC (at least version 3.0)
Perl (at least version 5.6)
Optional: pcre, openssl, mysql, gnutls

What's New in 1.0.6 Stable Release:
Fix for bug which can lock up ircd if someone adds a timed ban when the banlist is full
Fix for issues related to bug #127
Added some detail to the socket() and bind() log messages
Fix to not hide invisible users non-common channels in whois (rfc doesnt state this)
Made all the private methods of InspSocket protected instead
Remove numeric which makes some clients (Xchat, more?) think their nick is in use. Apparently it's not needed
Exclude LUSERS lines with zero counts (NO WE WONT CHANGE THE SPELLING OF connection(s)!)
Prevent notice loop on NOTICE $*
Allow PRIVMSG and NOTICE targets of $ to the module events (this wasnt trivial and is almost a damn feature)
Fix NOTICE $* to go between servers
Remove dependency on gnu make
Remove hook on sigsegv, hopefully dump cores, finally.
Special checking for muppet providers that make their reverse resolution resolve back to the same reverse resolution., *WHY* DO PEOPLE IN CONTROL OF THE RDNS RECORDS EVEN *ALLOW* SUCH LUNACY?!
Only attempt forward lookup if the user still exists
Update m_antibear to use a different hook for ADDED goodness.
Fix the dns issue with 1_0_stable. The issue is easier to resolve here than in trunk
Removal of all gcc2 checks (there sure was a lot of craq in here)
Removed #ifdef stuff, this should be fine on both 3.3 and 3.4
Don't allow SAQUIT, SANICK, SAPART and SAJOIN on ulined clients smile.gif
Different way of dealing with netsplits, seems we're getting duff data in the hash somehow by trying to track these seperately
Fix sometimes-leaking dns sockets when user quits between the two lookups (forward and reverse)
Being as -modupdate already existed and just didnt work, this counts as a fix. Congrats epinephrine its your lucky day smile.gif
Removed a bunch of SSL debug messages that popped up every time a user on SSL did anything. Now we're going to find some massive bug in m_ssl_* and have to add them all back in...
Check for stdint.h
Make configure detect stdint.h - this will be used for a fix later and to move opersha256 out of extra/ at last
Update docs to indicate use of _ in opertpes translates to space when displayed
Spacify() function translates _ in opertypes to spaces (only when displayed, however)
Fix the only mangled comment thats important, the tree diagram in here wink.gif
FEAR THE POWER OF VIM AND THE ALMIGHTY "%s/ / /g"
Fix for +f not propogating +b out to other servers (including services) using new send_mode event
Backport of send_mode system from trunk - for preliminary info on this search the source file for send_mode.
Made Add*Line automatically apply the new line

What's New in 1.1.0 Beta 5 Development Release:
Another week, another release in the hectic realm that is InspIRCd 1.1. The usual tweaks and fixes are in, along with the addition of a few new features like m_restrictbanned, a module to prevent banned users in a channel from changing nicks, messaging the channel, or setting the topic, and the addition of comma-seperated support to KILL (/kill lamer1,lamer2 go lame somewhere else.). Also included is a fix for 3.3 GCC on debian.

We hope you enjoy this the latest release, it's looking quite promising with less and less issues coming in, and the low severity of all reports recieved.

Thanks for your support!
The InspIRCd Team

Changes:

Slight hax. When bursting a channel - in the fmode, if we dont have +n or +t set this side, explicitly put -n or -t into the mode string., This is because the other side will ass-u-me +nt set because this is the default.
If a new channel is created, after sending the FJOIN for the first user in, send an FMODE #chan < ts > +nt, to sync the +nt on all remote servers explicitly.
Show chanrec::age in MODE #chan, not the deprecated chanrec::created
Added a notice that all people bumping the protocol version should edit a page in the wiki.
Protocl-Version bump to 1102
More funky stuff, SNONOTICE, MODENOTICE to go with OPERNOTICE, (OPERNOTICE can be considered to be "MODENOTICE os", but it saves bandwidth and cpu to send OPERNOTICE where possible)
Whoops, stuff in the wrong place
And change < 64 to < = 64, the length limit is 64 - not 63
Make OPERNOTICE work right
Fix off-by-one error in userrec::ChangeDisplayedHost, some hosts were truncated
Add send_opers event and OPERNOTICE command to send remote server NOTICE
Yes, we do want to propogate the server mode
Notice back to oper on invalid SAMODE
Needs testing: SAMODE doesnt send the actual SAMODE text any more, instead it sends a server-origin MODE
Allow normal MODE from a server prefix
Dont propogate failed mode changes
Add m_restrictbanned to example conf.
Add m_restrictbanned.so, disalows banned users on a channel from messaging the channel, changing nick, or changing the topic, if loaded.
We now have only one string copy for remote topics. We still need two for local though (ick) -- see comments
Enable removal of debug info for tiny systems
Eliminate two trivial compile warnings pointed out by a few people
A few lines here are loglevel DEFAULT and should be DEBUG.
Dont allow overlapped ports in these files
Allow checking of overlapped ports. A bit of sensible thought prevents this from being O(n^2)
Document irc::portparser with comments :-)
Handle out of range port numbers without stopping parsing the whole set
Add irc::portparser, a class to parse port ranges in the form "6660,6661,6662-6669,7000"., Needs testing, watch next few commits.
Make these properly detect port ranges., TODO: Make a port range parser class
Document port range stuff
Support hybrid-style port ranges in spanningtree, too
Allow port ranges for client ports (this is still todo in spanningtree)
Oops, add special-case for user killing themselves (their userrec is gone when the function returns), Also put checks in LoopCall to check that the user didnt vanish half way through the comma seperated list, if they did, abort at that element of the list., This means if your nick is 'a' and you do "/kill b,c,a,f,g die" only you, b and c will be removed from irc. (this is to be expected, really)
Yay, comma seperated /kill, same limits as PRIVMSG etc.
Improve quit messages caused by filtering, now prefixed by "Filtered: "
Also dont try and filter remote users. This is ick.
Filtering should leave ulines alone, and not filter uline notices.
Add fix for patch #166 (this is a reasonably big one)
Implement a change for bug #171. It might not be pretty in the /list output, but the rfc DOES say we must do something like this.
These should now be VF_COMMON, they sync data
Make /stats s more detailed, fix a grammar error
Add /stats s
Whoops, properly handle rehash now that new filters might be added by /FILTER
Document changes to m_filter and m_filter_pcre a little., Actually add the metadata stuff to Implements()
Implement on-burst synching of filters
Implement the /filter command. Note that this is currently untested, and propogation of filters between servers on burst isnt implemented yet (This is next on my todo)
Add gline type, and < filter:duration > value to say how long to ban for.
Inherit m_filter.cpp and m_filter_pcre.cpp from a base set of classes, so that changes for /filter command and gline actions etc only need to be made in one place (the base classes header)
Move peaveydk to core developers, jamie to contributors as he appears to be AWOL. Well done, peavey. Smilie
Patch from peavey to fix GCC3.3 crash correctly, without breaking other stuff randomly (< 3.)
This should fix the empty iterator crash with gcc3.3 - thanks yet again to peaveydk for spending hours finding the issue and for the patch
Fixed broken syncing for glines and elines using idents - thanks to dotslasher for finding and peaveydk for finding the fix
Apply patch for bug #165 (compile warning for users.cpp) by peaveydk
Fix IPv4 resolution, spank satmd if you were affected by this
Fixed bug #164 by peaveydk
Modified the server-to-server TIME command to report the real time (without delta), and display the delta in the output from m_alltime
Whoops, make targets case insensitive when cutting down a comma seperated list
Older gcc gets confused when the only parameter has a default value? O_o, Changed an Instance- >Time() to Instance- >Time(false)
Change message to indicate that the count only includes client ports
Fix the 'not all ports could be bound' warning to not count server ports at this point
Added < options:notimesync > to the example config
Made the 'force' parameter to BURST and TIMESET uppercase to satisfy the pedantic brain
Added the < options:notimesync > flag to disable time syncing
Added time syncing! This is fairly simple - servers exchange timestamps and use the lowest - but should get rid of the annoying bounces for those of us who can't depend on ntpd.
one line tweak, if the prefix is empty, dont echo 'unknown prefix' to the debug log
Smart voodoo to weed out duplicates in a comma seperated list for LoopCall. voooodooo!, Thanks for the suggestion of using std::map, w00tie Smilie
Fix remote quit notices (some were in the wrong snomask)
Show ident when expiring g and k lines
Fix comma-seperated list handling by CommandParser::LoopCall, should fix /amsg etc.
As requested by satmd, inspircd will now run with no client ports configured
Merge peaveys patch, tracker #162
Merge peaveydk's example conf change., Guess what Om, we broke alphabetical order on purpose!, (actually, it makes sense, sqlauth must come before any sql modules, due to load order, or we're essentially distributing a broken config file which will confuse users as to why its broken)
Took out a header we needed to keep. Im done stick a fork in me
Revert special's sqloper change, nice try but only half a biscuit., With the old fix, it would echo out all the oper failure notices first then try again, annoying all the opers., The new version uses a CommandParser method i added, to again use OnPreCommand, halt the /oper command, but after doing the sql lookup call the original handler of the OPER command with the original user and pass, so the original handler handles the definitive failure message.
Switched m_sqloper to use OnPostCommand instead of OnPreCommand, meaning the config tags are checked before MySQL
When we get an event on a userrec of EVENT_ERROR, and errornum is 0, send the error message "EOF from client" rather than using strerror and getting: Quit (Unknown error: 0)
Please in the future everyone: DO NOT submit patches via nopaste. Nopaste is not designed for this, and mangles your patch so we cant apply it. gzip it instead!
Apply patch by satmd which performs ipv4 lookup on 4in6 users
Someone forgot to add m_alltime to the example conf :p
More pipe. Everyone likes pipe
This is tidier, we dont need a seperate bool and int
LoadModule will now also return false if the glob pattern matches no modules and loads nothing
Allow wildcards in LoadModule calls. If a filename contains either * or ? it will attempt to readdir() the currently configured module dir and load all modules which match., If any one module fails, LoadModule then returns false.
Added m_alltime
Added the send_push event to m_spanningtree (send raw text to a remote user)
New events for special. Event id's "new_server" and "lost_server". The data is a pointer to a char* containing the server name., Eventally, i might expand this to include more data about the server such as its 'gecos' field etc, but not just yet. Let me know what data you want first., Event source is valid and will point at the protocol module.
Fixed another overflow, identical to the last one
Fixed a little overflow, noticed by satmd
Remove < helpop file >
Remove < censor file > directive, we've had < include > for years now, make use of it.
Fix broken notice (relatively minor, the notice can be turned off)

InspIRCd 1.1.0 Beta 5 keywords