About

InspIRCd is a modular Internet Relay Chat (IRC) server written in C++ for Linux, BSD, Windows and Mac OS X systems which was created from scratch to be stable, modern and lightweight.

As InspIRCd is one of the few IRC servers written from scratch, it avoids a number of design flaws and performance issues that plague other more established projects, such as UnrealIRCd, while providing the same level of feature parity.

InspIRCd is one of only a few IRC servers to provide a tunable number of features through the use of an advanced but well documented module system. By keeping core functionality to a minimum we hope to increase the stability, security and speed of InspIRCd while also making it customisable to the needs of many different users.

InspIRCd was designed primarily for use on the ChatSpike IRC Network but has been released under version 2 of the GNU General Public License so that the IRC community as a whole can benefit from our work.

If you have any questions about InspIRCd then you can contact our development team by visiting the #InspIRCd channel on ChatSpike.

To begin, take a look at our installation guide followed by our configuration guide.

News Atom Feed
v2.0.18 released!

InspIRCd v2.0.18 is now available, download it from the releases page.

This release fixes the issues discovered since 2.0.17.

Several new config options are now available for OpenSSL making it possible to disable SSLv3 among other things. For details please see the updated OpenSSL wiki page.

See the issue tracker for a list of reported bugs that got fixed in this version and for the pull requests that were merged.

View the complete changelog here.

Thanks to the following people for their work on this release:

Adam (4):

  • Do not use the result of the dns cache when the query type of the result is different from the type of the query. #66
  • Remove IPv6 address compaction.
  • Fix watch away numerics, #937
  • Fix m_banredirect causing bans added for hosts being rewritten as nicks

Attila Molnar (32):

  • m_sqlite3 Fix cleanup of unsuccessful database connections
  • Don’t try to set a mode in Channel::SetDefaultModes() if it needs a parameter but does not have one
  • Reject parameters that begin with a colon in Channel::SetDefaultModes()
  • m_ssl_gnutls Re-set DH params when the gnutls_certificate_credentials_t struct is reallocated
  • m_ssl_openssl Clear the error queue before every SSL_* call
  • m_ssl_openssl Enable single (EC)DH use and disable SSL v2
  • m_ssl_openssl Disable session caching and session tickets
  • m_ssl_openssl Allow configuring raw OpenSSL context options
  • m_nationalchars Rebuild core hashmaps when the national_case_insensitive_map changes
  • m_nationalchars Rebuild the hash map in m_watch when the national_case_insensitive_map changes
  • m_spanningtree Rebuild serverlist and sidlist when receiving a specific Request
  • m_nationalchars Ask m_spanningtree to rebuild its hashmaps when the national_case_insensitive_map changes
  • m_ssl_openssl Add user-friendly config options for setting a few OpenSSL context options
  • m_ssl_openssl Return an error from the IOHook read and write functions if the handshake returns 0
  • m_ssl_openssl Remove bogus errno assignment from CloseSession()
  • m_ssl_openssl Free the ssl_cert object as soon as the session is closed instead of waiting for the next VerifyCertificate() or new connection
  • m_ssl_openssl Reset data_to_write for new sessions
  • m_ssl_openssl Fix debug message
  • m_ssl_gnutls Refcount GnuTLS objects, free them when they are no longer in use instead of at /rehash ssl time
  • Add interface to SSL modules that allows other modules to obtain the raw SSL session of a socket
  • Initialize all fields of issl_session on module load in SSL modules
  • m_delayjoin Only send JOIN on mode change if the mode being changed is a prefix mode
  • Update tag documentation
  • m_ssl_gnutls Add compile time option for allowing sha256 certificate fingerprints
  • m_ssl_openssl Add compile time option to enable ECDH
  • m_ssl_openssl Add compile time option that allows disabling renegotiations
  • Set the parameter of -b to the banmask actually removed
  • Check the return value of getnameinfo() on Windows in insp_inet_ntop() and return NULL if it fails
  • Fail AAAA DNS queries if inet_ntop() fails
  • m_delaymsg Add option to disallow NOTICEs too
  • Remove some dead code found by Coverity
  • Release v2.0.18

Peter Powell (13):

  • Fix listmodes when the config does not specify a wildcard size entry.
  • Fix pkg-config not being used for OpenSSL on non-FreeBSD systems.
  • Add a work around for trampling over PKG_CONFIG_PATH.
  • Fix unit-cc not loading configure cache when building files.
  • Fix hash_map.h on non-GNU C++ standard library implementations.
  • Fix various warnings when building with LLVM 3.5.
  • Avoid calling methods on NULL pointers wherever possible.
  • Replace dodgy use of const char* and memcpy with std::string.
  • Kill some logically dead code detected by Coverity.
  • Add a workaround for compiling modules with Windows line endings.
  • Fix some small bugs in the makefile template.
  • Use clang++ on FreeBSD 10 instead of g++.
  • Use gnutls_rnd instead of gcry_randomize on newer GnuTLS versions.

Robin Burchell (2):

  • Fix an off-by-one on registration timeout handling.
  • Revert “Fix an off-by-one on registration timeout handling.”
v2.0.17 released!

InspIRCd v2.0.17 is now available, download it from the releases page.

This is a bugfix-only release, bringing several improvements and fixes for the Windows version, better compiler support and stability and correctness related improvements. An issue has been fixed that caused m_joinflood to wrongly lock down channels on netbursts in some cases.

Upgrading is strongly recommended.

See the issue tracker for a list of reported bugs that got fixed in this version and for the pull requests that were merged.

View the complete changelog here.

Thanks to the following people for their work on this release:

Adam (5):

  • Change Windows libraries to be dynamically linked
  • Do not export callers
  • Fix m_permchannels and m_xline_db on Windows
  • m_hideoper: Hide hidden opers from /stats P. #874
  • Update aliases/anope.conf.example

Attila Molnar (21):

  • m_watch Be more strict when checking whether the watch list of a user is full
  • Filter out newlines from error messages on Windows
  • Change FormatMessage() usage in DLLManager::RetrieveLastError() to match SocketEngine::LastError()
  • m_ojoin Remove pointless FindChan() call
  • Ignore NULL callbacks in ModuleManager::Reload()
  • m_auditorium Handle NULL return from Channel::GetUser() in OnSendWhoLine()
  • Allow uppercase letters in IPv6 CIDR masks
  • m_ssl_openssl Avoid Applink on Windows by calling PEM_read_bio_DHparams() instead of PEM_read_DHparams()
  • Compress the Windows installer with zlib to reduce AV false positives
  • Fix undefined symbol error on module load if compiled with Clang 3.4
  • m_spanningtree Set the bursting flag in the FJOIN handler based on whether the source of the FJOIN is bursting or not
  • m_spanningtree Advertise the availability of m_globops in CAPAB CAPABILITIES
  • m_cgiirc Call User::InvalidateCache() after changing host and dhost in OnCheckReady()
  • Update year in resource file for Windows
  • m_spanningtree Fix cleanup of connections when unloading a module that provides an IOHook
  • m_spanningtree Forward NICK messages when they cause a collision with the new nick param rewritten to the uuid
  • m_chghost Allow ulined servers to change the host of unregistered users (for SASL)
  • Make sure the DN strings obtained from the SSL mods are always valid
  • m_spanningtree Always treat the remote client as the winner on nick collision if the nick is used by a (local) client that isn’t fully registered
  • Update example configuration files, fix typos and case
  • Release v2.0.17

Dan Parsons (1):

  • Update server.cpp

Peter Powell (4):

  • Backport questions from master’s genssl tool.
  • Replace deprecated entry in launchd config with the modern equivalent.
  • Fix copy/paste error in m_denychans.
  • Fix various small problems with configure.

Robby- (2):

  • Correct the syntax messages of a few modules.
  • Some more helpop config updates.

Tim Heckman (1):

  • remove unneeded whitespace from the docs/examples

Manuel Leiner (satmd) (1):

  • Fix harmless loop off-by-ones found by Moonlightning
v2.0.16 released!

InspIRCd v2.0.16 is now available, downloads are here.

This is a bugfix-only release, containing several stability related and correctness improvements. An issue has also been fixed that prevented clients using NSS for SSL/TLS such as Pidgin (via libpurple), ChatZilla, Instantbird, etc. from reconnecting to a server using OpenSSL after disconnection. See this bug report for more information.

Upgrading is strongly recommended.

The example configuration and the helpop text received a huge update as well, hopefully the new explanations will make things easier to understand. Let us know if you find something in the documentation that is unclear to you.

The issue tracker contains a list of the reported bugs which got fixed in this version. View the complete changelog here.

Thanks to the following people for their efforts that made this release possible:

Adam (3):

  • Set a session id on our server ssl context in m_ssl_openssl. It is required for some clients which try to restore SSL sessions.
  • Fix new file descriptor debug log message in socketengine_poll to show the correct events
  • Fix /who on opers incorrectly showing +i opers to users without the privilege to see them

Attila Molnar (22):

  • m_ssl_openssl Fix memory leaks on /rehash ssl, unload and in VerifyCertificate()
  • m_banredirect Fix typo in a message (transfered -> transferred)
  • socketengine_epoll Initialize CurrentSetSize (only used by m_httpd_stats)
  • socketengine_select Reset the values in the timeval struct on *nix before select()
  • Fix NULL dereference on rehash when there is a fatal error in the configuration of connect classes
  • m_spanningtree Don’t send snotices to servers about remote servers splitting
  • m_spanningtree Do pointer comparison before deleting one of the pointers in TreeSocket::Squit()
  • Improve detection for non-cidr masks to prevent unwanted matches
  • cmd_names Allow opers having the channels/auspex priv to view the NAMES list of +s channels from outside
  • Backport “Refactor Channel::UserList() to use std::string”
  • Fix NAMES list getting truncated on servers having an excessively long server name
  • m_operprefix Don’t set +y on the oper if hideoper is being unset due to deopering
  • m_httpd Fix typo noticed by @SaberUK
  • m_globalload Don’t pass a callback to ModuleManager::Reload() if reloading m_globalload
  • m_watch Validate targ before use, noticed while rewriting m_watch for 2.2
  • Major example configuration and helpop update
  • Fix typos and update text in the configure script
  • Add REG_ALL checks to treat unregistered users as nonexistent in more cases
  • Fix snotice about disabled command usage being sent to the wrong snomask
  • Fix typo in helpop-full that prevented it from loading and other minor helpop issues
  • Fix IPv6 address handling in 6aaf7047297b739377e7d509cb914f32447fb281
  • Release 2.0.16

Peter Powell (2):

  • Fix various problems detected by Clang 3.4.
  • Fix Solaris not being able to find modules without pkg-config.

Daniel Vassdal (1):

  • Fix build problem on Solaris
v2.0.15 released!

InspIRCd v2.0.15 is now available, downloads are here.

This is a bugfix release addressing minor issues discovered since 2.0.14.

One notable change is that m_svshold can now be silent, if set in the config; see updated example config for details.

The issue tracker contains a list of the reported bugs which got fixed in this version.

View the complete changelog here.

Thanks to the following people for their efforts that made this release possible:

Adam (3):

  • Fix issue #657, fix sending FNAME with spaces
  • Fix parsing ADDLINE with expiration or creation dates past ~2038 probably
  • Use case insensitive comparison for server names for (auto)connects, issue #662

Attila Molnar (25):

  • Don’t CoreExport reference, fixes m_dnsbl on Windows
  • m_spanningtree Fix timestamp in AWAY
  • m_showwhois Require 2 parameters for WHOISNOTICE
  • m_httpd Close all open http sockets on unload
  • Fix ConvToStr(char)
  • Work around STB_GNU_UNIQUE symbols not allowing module unmap
  • m_spanningtree Fix nick TS desync on SVSNICK
  • Show +i users on a channel to opers having the channels/auspex priv who do /NAMES from outside of the chan
  • Fix possible use of invalid iterator on module unload
  • m_mlock Only deny the mlocked mode from being changed instead of denying the entire mode change if it contains a single mlocked mode
  • m_sajoin Send global snotice when the join happens
  • m_alias Fix out of bounds string access that happened with certain replace strings
  • m_dccallow Increase penalty for /DCCALLOW help
  • Use FindNickOnly() in a few more places if a local user is performing an action to prevent UID walking
  • m_joinflood Fix remote joins affecting local joinflood state when the channel is locked
  • m_dnsbl Don’t send snotice when the {G K Z}line already exists
  • m_services_account Add workaround for wrong host being displayed in numeric when cgiirc users log in using SASL
  • Update example configs/helpop
  • m_httpd Add timeout option; remove timed out connections
  • m_svshold Add config option to hide snotices
  • m_joinflood Unset the mode on unload
  • Increase the penalty for a few core commands
  • m_httpd_stats Be more conservative when escaping data
  • Bump API version because of 3f4d54eb031f1cd6b016dfe1f768ed86303e3856
  • Release 2.0.15

ChrisTX (3):

  • Improve support for rarely used compilers, EKOPath in this case.
  • Fix a crash when running as systemd service
  • Fix a shadow warning created by ConfigTag::create

Daniel Vassdal (5):

  • Fix remote /MODULES bug
  • Fix ACCEPT propagation bug when it got a nick prefixed with +
  • Fix m_override refusing to override modes if the user holds halfop or higher in the channel
  • Allow ranges beginning with 0 in m_channames
  • Fix OOB error in sa2cidr()

Mantas Mikulėnas (3):

  • Handle SASL failures during SASL_INIT (wrong mechanism, etc.)
  • Support SASL messages other than ‘C’ and ‘D’
  • Use standard example addresses in configs

Peter Powell (5):

  • Improve error reporting for <security:runas{user,group}>.
  • Fix m_silence looking for maxentries in instead of .
  • Fix various problems with ModuleManager.
  • Fix the HELPOP database being destroyed when a rehash fails.
  • Fix some logically dead code which was found by Coverity.
v2.0.14 released!

InspIRCd v2.0.14 has been released, downloads are here.

This is mostly a bugfix-only release, the only new feature is that m_permchannels is now able to save list modes (see the updated example config).

The issue tracker contains a list of the reported bugs which got fixed in this version.

View the complete changelog here.

« Previous
Next »
Page 1 of 4