├── .appveyor-build.sh ├── .appveyor.yml ├── .gitignore ├── .mailmap ├── .travis.yml ├── CREDITS ├── LICENSE ├── Makefile.am ├── NEWS.md ├── README.md ├── authd ├── Makefile.am ├── authd.c ├── authd.h ├── dns.c ├── dns.h ├── getaddrinfo.c ├── getaddrinfo.h ├── getnameinfo.c ├── getnameinfo.h ├── notice.c ├── notice.h ├── provider.c ├── provider.h ├── providers │ ├── dnsbl.c │ ├── ident.c │ ├── opm.c │ └── rdns.c ├── res.c ├── res.h ├── reslib.c ├── reslib.h └── reslist.c ├── autogen.sh ├── bandb ├── Makefile.am ├── bandb.c ├── bantool.c ├── rsdb.h ├── rsdb_snprintf.c ├── rsdb_sqlite3.c ├── sqlite3.c └── sqlite3.h ├── configure.ac ├── doc ├── Makefile.am ├── credits-past.txt ├── features │ ├── account-notify.txt │ ├── away-notify.txt │ ├── challenge.txt │ ├── collision_fnc.txt │ ├── extban.txt │ ├── extended-join.txt │ ├── index.txt │ ├── modeg.txt │ ├── monitor.txt │ ├── sasl.txt │ ├── services.txt │ └── tgchange.txt ├── index.txt ├── ircd.conf.example ├── ircd.motd ├── logfiles.txt ├── modes.txt ├── oper-guide │ ├── .gitignore │ ├── Makefile │ ├── cmodes.rst │ ├── commands.rst │ ├── conf.py │ ├── config.rst │ ├── index.rst │ ├── intro.rst │ ├── make.bat │ ├── oprivs.rst │ ├── ucommands.rst │ └── umodes.rst ├── reference.conf ├── server-version-info.txt └── technical │ ├── capab.txt │ ├── cluster.txt │ ├── euid.txt │ ├── event.txt │ ├── hooks.txt │ ├── hostmask.txt │ ├── index.txt │ ├── linebuf.txt │ └── ts6-protocol.txt ├── extensions ├── Makefile.am ├── README ├── chantype_dummy.c ├── chm_adminonly.c ├── chm_insecure.c ├── chm_nonotice.c ├── chm_operonly.c ├── chm_operonly_compat.c ├── chm_operpeace.c ├── chm_quietunreg_compat.c ├── chm_sslonly.c ├── chm_sslonly_compat.c ├── createauthonly.c ├── createoperonly.c ├── drain.c ├── example_module.c ├── extb_account.c ├── extb_canjoin.c ├── extb_channel.c ├── extb_combi.c ├── extb_extgecos.c ├── extb_hostmask.c ├── extb_oper.c ├── extb_realname.c ├── extb_server.c ├── extb_ssl.c ├── extb_usermode.c ├── filter.c ├── force_user_invis.c ├── helpops.c ├── hide_uncommon_channels.c ├── hurt.c ├── invite_notify.c ├── ip_cloaking.c ├── ip_cloaking_3.0.c ├── ip_cloaking_4.0.c ├── ip_cloaking_old.c ├── m_adminwall.c ├── m_echotags.c ├── m_extendchans.c ├── m_findforwards.c ├── m_identify.c ├── m_locops.c ├── m_mkpasswd.c ├── m_ojoin.c ├── m_okick.c ├── m_omode.c ├── m_opme.c ├── m_remove.c ├── m_roleplay.c ├── m_sendbans.c ├── m_webirc.c ├── no_kill_services.c ├── no_locops.c ├── no_oper_invis.c ├── override.c ├── override_kick_immunity.c ├── restrict-unauthenticated.c ├── sasl_usercloak.c ├── sno_channelcreate.c ├── sno_farconnect.c ├── sno_globalkline.c ├── sno_globalnickchange.c ├── sno_globaloper.c ├── sno_whois.c ├── spy_admin_notice.c ├── spy_info_notice.c ├── spy_links_notice.c ├── spy_motd_notice.c ├── spy_stats_notice.c ├── spy_stats_p_notice.c ├── spy_trace_notice.c └── umode_noctcp.c ├── help ├── Makefile.am ├── opers │ ├── accept │ ├── admin │ ├── away │ ├── capab │ ├── challenge │ ├── chantrace │ ├── close │ ├── cmode │ ├── connect │ ├── credits │ ├── die │ ├── dline │ ├── error │ ├── etrace │ ├── extban │ ├── grant │ ├── help │ ├── index │ ├── info │ ├── invite │ ├── ison │ ├── join │ ├── kick │ ├── kill │ ├── kline │ ├── knock │ ├── links │ ├── list │ ├── locops │ ├── lusers │ ├── map │ ├── masktrace │ ├── modlist │ ├── modload │ ├── modreload │ ├── modrestart │ ├── modunload │ ├── monitor │ ├── motd │ ├── names │ ├── nick │ ├── notice │ ├── oper │ ├── operspy │ ├── operwall │ ├── part │ ├── pass │ ├── ping │ ├── pong │ ├── post │ ├── privmsg │ ├── privs │ ├── quit │ ├── rehash │ ├── restart │ ├── resv │ ├── scan │ ├── server │ ├── set │ ├── sjoin │ ├── snomask │ ├── squit │ ├── stats │ ├── svinfo │ ├── testgecos │ ├── testline │ ├── testmask │ ├── time │ ├── topic │ ├── trace │ ├── uhelp │ ├── umode │ ├── undline │ ├── unkline │ ├── unreject │ ├── unresv │ ├── unxline │ ├── user │ ├── userhost │ ├── users │ ├── version │ ├── wallops │ ├── who │ ├── whois │ ├── whowas │ └── xline └── users │ ├── index │ ├── info │ ├── notice │ ├── privmsg │ ├── stats │ └── umode ├── include ├── authproc.h ├── bandbi.h ├── cache.h ├── capability.h ├── certfp.h ├── channel.h ├── chmode.h ├── class.h ├── client.h ├── defaults.h ├── dns.h ├── hash.h ├── hook.h ├── hostmask.h ├── inline │ └── stringops.h ├── ircd.h ├── ircd_defs.h ├── ircd_getopt.h ├── ircd_linker.h ├── ircd_signal.h ├── listener.h ├── logger.h ├── m_info.h ├── match.h ├── messages.h ├── modules.h ├── monitor.h ├── msg.h ├── msgbuf.h ├── newconf.h ├── numeric.h ├── operhash.h ├── packet.h ├── parse.h ├── patchlevel.h ├── privilege.h ├── ratelimit.h ├── reject.h ├── restart.h ├── s_assert.h ├── s_conf.h ├── s_newconf.h ├── s_serv.h ├── s_stats.h ├── s_user.h ├── scache.h ├── send.h ├── snomask.h ├── sslproc.h ├── stdinc.h ├── substitution.h ├── supported.h ├── tgchange.h ├── whowas.h └── wsproc.h ├── ircd ├── Makefile.am ├── authproc.c ├── bandbi.c ├── cache.c ├── capability.c ├── channel.c ├── chmode.c ├── class.c ├── client.c ├── dns.c ├── extban.c ├── getopt.c ├── hash.c ├── hook.c ├── hostmask.c ├── ircd.c ├── ircd_lexer.l ├── ircd_parser.y ├── ircd_signal.c ├── listener.c ├── logger.c ├── main.c ├── match.c ├── modules.c ├── monitor.c ├── msgbuf.c ├── newconf.c ├── operhash.c ├── packet.c ├── parse.c ├── privilege.c ├── ratelimit.c ├── reject.c ├── restart.c ├── s_conf.c ├── s_newconf.c ├── s_serv.c ├── s_user.c ├── scache.c ├── send.c ├── snomask.c ├── sslproc.c ├── substitution.c ├── supported.c ├── tgchange.c ├── version.c.SH ├── whowas.c └── wsproc.c ├── librb ├── COPYING ├── CREDITS ├── Makefile.am ├── README.md ├── TODO ├── acinclude.m4 ├── autogen.sh ├── configure.ac ├── include │ ├── arc4random.h │ ├── commio-int.h │ ├── commio-ssl.h │ ├── event-int.h │ ├── rb_balloc.h │ ├── rb_commio.h │ ├── rb_dictionary.h │ ├── rb_event.h │ ├── rb_helper.h │ ├── rb_lib.h │ ├── rb_linebuf.h │ ├── rb_memory.h │ ├── rb_patricia.h │ ├── rb_radixtree.h │ ├── rb_rawbuf.h │ └── rb_tools.h ├── install-sh ├── librb.pc.in └── src │ ├── Makefile.am │ ├── arc4random.c │ ├── balloc.c │ ├── commio.c │ ├── crypt.c │ ├── devpoll.c │ ├── dictionary.c │ ├── epoll.c │ ├── event.c │ ├── export-syms.txt │ ├── gnutls.c │ ├── gnutls_ratbox.h │ ├── helper.c │ ├── kqueue.c │ ├── linebuf.c │ ├── mbedtls.c │ ├── mbedtls_ratbox.h │ ├── nossl.c │ ├── openssl.c │ ├── openssl_ratbox.h │ ├── patricia.c │ ├── poll.c │ ├── ports.c │ ├── radixtree.c │ ├── rawbuf.c │ ├── rb_lib.c │ ├── rb_memory.c │ ├── select.c │ ├── sigio.c │ ├── tools.c │ ├── unix.c │ ├── version.c.SH │ └── win32.c ├── m4 ├── charybdis.m4 └── pkg.m4 ├── modules ├── Makefile.am ├── cap_account_tag.c ├── cap_server_time.c ├── chm_nocolour.c ├── chm_noctcp.c ├── core │ ├── m_ban.c │ ├── m_die.c │ ├── m_error.c │ ├── m_join.c │ ├── m_kick.c │ ├── m_kill.c │ ├── m_message.c │ ├── m_mode.c │ ├── m_modules.c │ ├── m_nick.c │ ├── m_part.c │ ├── m_quit.c │ ├── m_server.c │ └── m_squit.c ├── m_accept.c ├── m_admin.c ├── m_alias.c ├── m_away.c ├── m_cap.c ├── m_capab.c ├── m_certfp.c ├── m_challenge.c ├── m_chghost.c ├── m_close.c ├── m_connect.c ├── m_dline.c ├── m_encap.c ├── m_etrace.c ├── m_grant.c ├── m_help.c ├── m_info.c ├── m_invite.c ├── m_ison.c ├── m_kline.c ├── m_knock.c ├── m_links.c ├── m_list.c ├── m_lusers.c ├── m_map.c ├── m_monitor.c ├── m_motd.c ├── m_names.c ├── m_oper.c ├── m_operspy.c ├── m_pass.c ├── m_ping.c ├── m_pong.c ├── m_post.c ├── m_privs.c ├── m_rehash.c ├── m_restart.c ├── m_resv.c ├── m_sasl.c ├── m_scan.c ├── m_services.c ├── m_set.c ├── m_signon.c ├── m_snote.c ├── m_starttls.c ├── m_stats.c ├── m_svinfo.c ├── m_tb.c ├── m_testline.c ├── m_testmask.c ├── m_tginfo.c ├── m_time.c ├── m_topic.c ├── m_trace.c ├── m_unreject.c ├── m_user.c ├── m_userhost.c ├── m_users.c ├── m_version.c ├── m_wallops.c ├── m_who.c ├── m_whois.c ├── m_whowas.c ├── m_xline.c ├── sno_routing.c ├── um_callerid.c └── um_regonlymsg.c ├── scripts ├── application.sh └── makerelease.sh ├── shtool ├── ssld ├── Makefile.am └── ssld.c ├── tests ├── Makefile.am ├── README ├── TESTS ├── client_util.c ├── client_util.h ├── hostmask1.c ├── ircd_util.c ├── ircd_util.h ├── msgbuf_parse1.c ├── msgbuf_unparse1.c ├── rb_dictionary1.c ├── rb_snprintf_append1.c ├── rb_snprintf_try_append1.c ├── runtests.c ├── runtime │ ├── bin │ │ ├── authd │ │ ├── bandb │ │ ├── ssld │ │ └── wsockd │ ├── help │ ├── modules │ │ ├── autoload │ │ │ ├── cap_account_tag.so │ │ │ ├── cap_server_time.so │ │ │ ├── chantype_dummy.so │ │ │ ├── chm_adminonly.so │ │ │ ├── chm_insecure.so │ │ │ ├── chm_nocolour.so │ │ │ ├── chm_noctcp.so │ │ │ ├── chm_nonotice.so │ │ │ ├── chm_operonly.so │ │ │ ├── chm_operonly_compat.so │ │ │ ├── chm_operpeace.so │ │ │ ├── chm_quietunreg_compat.so │ │ │ ├── chm_sslonly.so │ │ │ ├── chm_sslonly_compat.so │ │ │ ├── createauthonly.so │ │ │ ├── createoperonly.so │ │ │ ├── example_module.so │ │ │ ├── extb_account.so │ │ │ ├── extb_canjoin.so │ │ │ ├── extb_channel.so │ │ │ ├── extb_combi.so │ │ │ ├── extb_extgecos.so │ │ │ ├── extb_hostmask.so │ │ │ ├── extb_oper.so │ │ │ ├── extb_realname.so │ │ │ ├── extb_server.so │ │ │ ├── extb_ssl.so │ │ │ ├── extb_usermode.so │ │ │ ├── force_user_invis.so │ │ │ ├── helpops.so │ │ │ ├── hide_uncommon_channels.so │ │ │ ├── hurt.so │ │ │ ├── m_accept.so │ │ │ ├── m_admin.so │ │ │ ├── m_adminwall.so │ │ │ ├── m_alias.so │ │ │ ├── m_away.so │ │ │ ├── m_cap.so │ │ │ ├── m_capab.so │ │ │ ├── m_certfp.so │ │ │ ├── m_challenge.so │ │ │ ├── m_chghost.so │ │ │ ├── m_close.so │ │ │ ├── m_connect.so │ │ │ ├── m_dline.so │ │ │ ├── m_echotags.so │ │ │ ├── m_encap.so │ │ │ ├── m_etrace.so │ │ │ ├── m_extendchans.so │ │ │ ├── m_findforwards.so │ │ │ ├── m_grant.so │ │ │ ├── m_help.so │ │ │ ├── m_identify.so │ │ │ ├── m_info.so │ │ │ ├── m_invite.so │ │ │ ├── m_ison.so │ │ │ ├── m_kline.so │ │ │ ├── m_knock.so │ │ │ ├── m_links.so │ │ │ ├── m_list.so │ │ │ ├── m_locops.so │ │ │ ├── m_lusers.so │ │ │ ├── m_map.so │ │ │ ├── m_mkpasswd.so │ │ │ ├── m_monitor.so │ │ │ ├── m_motd.so │ │ │ ├── m_names.so │ │ │ ├── m_ojoin.so │ │ │ ├── m_okick.so │ │ │ ├── m_omode.so │ │ │ ├── m_oper.so │ │ │ ├── m_operspy.so │ │ │ ├── m_opme.so │ │ │ ├── m_pass.so │ │ │ ├── m_ping.so │ │ │ ├── m_pong.so │ │ │ ├── m_post.so │ │ │ ├── m_privs.so │ │ │ ├── m_rehash.so │ │ │ ├── m_remove.so │ │ │ ├── m_restart.so │ │ │ ├── m_resv.so │ │ │ ├── m_roleplay.so │ │ │ ├── m_sasl.so │ │ │ ├── m_scan.so │ │ │ ├── m_sendbans.so │ │ │ ├── m_services.so │ │ │ ├── m_set.so │ │ │ ├── m_signon.so │ │ │ ├── m_snote.so │ │ │ ├── m_starttls.so │ │ │ ├── m_stats.so │ │ │ ├── m_svinfo.so │ │ │ ├── m_tb.so │ │ │ ├── m_testline.so │ │ │ ├── m_testmask.so │ │ │ ├── m_tginfo.so │ │ │ ├── m_time.so │ │ │ ├── m_topic.so │ │ │ ├── m_trace.so │ │ │ ├── m_unreject.so │ │ │ ├── m_user.so │ │ │ ├── m_userhost.so │ │ │ ├── m_users.so │ │ │ ├── m_version.so │ │ │ ├── m_wallops.so │ │ │ ├── m_webirc.so │ │ │ ├── m_who.so │ │ │ ├── m_whois.so │ │ │ ├── m_whowas.so │ │ │ ├── m_xline.so │ │ │ ├── no_kill_services.so │ │ │ ├── no_locops.so │ │ │ ├── no_oper_invis.so │ │ │ ├── override.so │ │ │ ├── restrict-unauthenticated.so │ │ │ ├── sno_channelcreate.so │ │ │ ├── sno_farconnect.so │ │ │ ├── sno_globalkline.so │ │ │ ├── sno_globalnickchange.so │ │ │ ├── sno_globaloper.so │ │ │ ├── sno_routing.so │ │ │ ├── sno_whois.so │ │ │ ├── spy_admin_notice.so │ │ │ ├── spy_info_notice.so │ │ │ ├── spy_links_notice.so │ │ │ ├── spy_motd_notice.so │ │ │ ├── spy_stats_notice.so │ │ │ ├── spy_stats_p_notice.so │ │ │ ├── spy_trace_notice.so │ │ │ └── umode_noctcp.so │ │ ├── m_ban.so │ │ ├── m_die.so │ │ ├── m_error.so │ │ ├── m_join.so │ │ ├── m_kick.so │ │ ├── m_kill.so │ │ ├── m_message.so │ │ ├── m_mode.so │ │ ├── m_modules.so │ │ ├── m_nick.so │ │ ├── m_part.so │ │ ├── m_quit.so │ │ ├── m_server.so │ │ └── m_squit.so │ └── motd ├── sasl_abort1.c ├── sasl_abort1.conf ├── send1.c ├── send1.conf ├── serv_connect1.c ├── serv_connect1.conf ├── substitution1.c └── tap │ ├── basic.c │ ├── basic.h │ ├── float.c │ ├── float.h │ ├── libtap.sh │ └── macros.h ├── testsuite ├── ircd.conf.1 ├── ircd.conf.2 ├── ircd.conf.3 └── startall.sh ├── tools ├── Makefile.am ├── README.mkpasswd ├── genssl.in ├── mkfingerprint.c ├── mkpasswd.c └── smoketest.sh └── wsockd ├── Makefile.am ├── sha1.c ├── sha1.h └── wsockd.c /.appveyor-build.sh: -------------------------------------------------------------------------------- 1 | set -v 2 | 3 | export MSYSTEM=MINGW64 4 | export PATH=/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/c/Windows/system32:/c/Windows:/c/Windows/System32/Wbem:/c/Windows/System32/WindowsPowerShell/v1.0:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl 5 | 6 | sh ./autogen.sh 7 | ./configure --prefix=c:/projects/charybdis/build --enable-openssl=/mingw64 8 | make -j2 9 | make install 10 | -------------------------------------------------------------------------------- /.appveyor.yml: -------------------------------------------------------------------------------- 1 | version: 4_{build} 2 | clone_depth: 10 3 | install: 4 | - c:\msys64\usr\bin\sh.exe -lc "pacman -Sy --noconfirm git" 5 | - c:\msys64\usr\bin\sh.exe -lc "uname -a" 6 | - c:\msys64\usr\bin\sh.exe -lc "cat /proc/cpuinfo" 7 | - c:\msys64\usr\bin\sh.exe -lc "cat /proc/meminfo" 8 | - c:\msys64\usr\bin\sh.exe -lc "cygcheck -s -v > $APPVEYOR_BUILD_FOLDER/cygcheck.log 2>&1" 9 | - ps: Push-AppveyorArtifact cygcheck.log 10 | build_script: 11 | - c:\msys64\usr\bin\sh.exe -lc "cd $APPVEYOR_BUILD_FOLDER; sh .appveyor-build.sh" 12 | # - c:\msys64\usr\bin\sh.exe -lc "cd $APPVEYOR_BUILD_FOLDER/build/bin; ./charybdis -version" 13 | on_failure: 14 | - ps: Push-AppveyorArtifact config.log 15 | - ps: Push-AppveyorArtifact librb\include\librb-config.h 16 | branches: 17 | except: 18 | - release/3.5 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | tags 2 | Makefile 3 | *~ 4 | *.a 5 | *.o 6 | *.so 7 | *.lo 8 | *.la 9 | *.orig 10 | *.log 11 | *.sw? 12 | .deps 13 | .dirstamp 14 | .libs 15 | authd/authd 16 | bandb/bandb 17 | bandb/bantool 18 | autom4te.cache 19 | aclocal.m4 20 | compile 21 | confdefs.h 22 | config.guess 23 | config.sub 24 | depcomp 25 | ltmain.sh 26 | missing 27 | config.log 28 | config.status 29 | configure 30 | stamp-h1 31 | libltdl/ 32 | librb/configure 33 | librb/compile 34 | librb/depcomp 35 | librb/aclocal.m4 36 | librb/include/librb_config.h 37 | librb/include/librb_config.h.in 38 | librb/include/librb-config.h 39 | librb/include/serno.h 40 | librb/librb.pc 41 | librb/ltmain.sh 42 | librb/missing 43 | librb/libratbox.pc 44 | librb/libtool 45 | librb/src/version.c 46 | librb/src/version.c.last 47 | scripts/*.tar.bz2 48 | scripts/*.tar.gz 49 | include/setup.h 50 | include/setup.h.in 51 | ircd/charybdis 52 | ircd/ircd_parser.c 53 | ircd/ircd_parser.h 54 | ircd/ircd_lexer.c 55 | ircd/version.c 56 | ircd/version.c.last 57 | ssld/ssld 58 | wsockd/wsockd 59 | tests/core 60 | tests/msgbuf_parse1 61 | tests/msgbuf_unparse1 62 | tests/rb_dictionary1 63 | tests/rb_snprintf_append1 64 | tests/rb_snprintf_try_append1 65 | tests/sasl_abort1 66 | tests/send1 67 | tests/serv_connect1 68 | tests/substitution1 69 | tests/runtests 70 | tests/*.c.ban.db 71 | tests/*.c.ban.db-journal 72 | tests/*.c.log 73 | tests/*.c.pid 74 | !tests/runtime/modules/*.so 75 | !tests/runtime/modules/autoload/*.so 76 | testsuite/ircd.pid.* 77 | tools/charybdis-mkpasswd 78 | tools/charybdis-mkfingerprint 79 | tools/genssl 80 | tools/mkpasswd 81 | tools/viconf 82 | include/serno.h 83 | ircd/charybdis 84 | ircd/version.c 85 | ircd/version.c.last 86 | /libtool 87 | Makefile.in 88 | m4/argz.m4 89 | m4/libtool.m4 90 | m4/ltargz.m4 91 | m4/ltdl.m4 92 | m4/ltoptions.m4 93 | m4/ltsugar.m4 94 | m4/ltversion.m4 95 | m4/lt~obsolete.m4 96 | *.dSYM/ 97 | *.exe 98 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Aaron Sethman androsyn 2 | Alexander Færøy Alexander F?r?y 3 | Brett Greenham B.Greenham 4 | Chris Mills TheChrisAM 5 | Chris Mills freenode!ChrisAM 6 | Elizabeth Myers 7 | Elizabeth Myers 8 | Elizabeth Myers 9 | Elly Fong-Jones Elly 10 | Jilles Tjoelker jilles 11 | Nathan Phillip Brink 12 | Stephen Bennett 13 | Valeriy Yatsko 14 | Valeriy Yatsko 15 | Valeriy Yatsko 16 | Valeriy Yatsko 17 | Valeriy Yatsko 18 | William Pitcock 19 | William Pitcock nenolod 20 | Christine Dodrill 21 | Christine Dodrill 22 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # Travis-CI Build for charybdis 2 | # see travis-ci.org for details 3 | 4 | language: c 5 | 6 | # Use the faster container-based infrastructure. 7 | dist: bionic 8 | sudo: false 9 | 10 | notifications: 11 | irc: 12 | channels: 13 | - "chat.freenode.net#charybdis" 14 | 15 | matrix: 16 | include: 17 | - os: linux 18 | compiler: gcc-7 19 | addons: 20 | apt: 21 | packages: ['gcc-7', 'automake', 'autoconf', 'libtool', 'shtool', 'libsqlite3-dev', 'python-sphinx', 'texinfo', 'libhyperscan-dev'] 22 | 23 | - os: linux 24 | compiler: gcc-8 25 | addons: 26 | apt: 27 | packages: ['gcc-8', 'automake', 'autoconf', 'libtool', 'shtool', 'libsqlite3-dev', 'python-sphinx', 'texinfo', 'libhyperscan-dev'] 28 | 29 | - os: linux 30 | compiler: clang-7 31 | addons: 32 | apt: 33 | packages: ['clang-7', 'automake', 'autoconf', 'libtool', 'shtool', 'libsqlite3-dev', 'python-sphinx', 'texinfo', 'libhyperscan-dev'] 34 | 35 | - os: linux 36 | compiler: clang-8 37 | addons: 38 | apt: 39 | packages: ['clang-8', 'automake', 'autoconf', 'libtool', 'shtool', 'libsqlite3-dev', 'python-sphinx', 'texinfo', 'libhyperscan-dev'] 40 | 41 | - os: osx 42 | osx_image: xcode7.3 43 | compiler: clang 44 | env: LIBTOOLIZE=glibtoolize 45 | 46 | cache: 47 | apt: 48 | ccache: 49 | 50 | script: 51 | - bash autogen.sh 52 | - "if [ ${TRAVIS_OS_NAME} != 'osx' ]; then CFLAGS=\"-Werror -Wno-unused-value -Wno-unused-parameter\" ./configure --with-shared-sqlite --with-assert=hard --enable-warnings; fi" 53 | - "if [ ${TRAVIS_OS_NAME} = 'osx' ]; then ./configure --with-shared-sqlite; fi" 54 | - make -j4 55 | - "if [ ${TRAVIS_OS_NAME} != 'osx' ]; then make check; fi" 56 | - make install 57 | - "if [ ${TRAVIS_OS_NAME} != 'osx' ]; then make -C doc/oper-guide html man info; fi" 58 | -------------------------------------------------------------------------------- /CREDITS: -------------------------------------------------------------------------------- 1 | Charybdis started as an evolution from ircd-ratbox. Its development 2 | is led by a team of dedicated developers who have put a lot of time 3 | into the project and it has seen use on a variety of different 4 | network configurations. 5 | 6 | The Charybdis core team, listed in nick-alphabetical order: 7 | 8 | amdj, Aaron Jones 9 | Elizafox, Elizabeth Myers 10 | jilles, Jilles Tjoelker 11 | kaniini, William Pitcock 12 | mr_flea, Keith Buck 13 | 14 | The following people are also project members, listed in nick-alphabetical 15 | order: 16 | 17 | jdhore, JD Horelick 18 | viatsko, Valerii Iatsko 19 | 20 | The following people have made contributions to the Charybdis releases, 21 | in nick-alphabetical order: 22 | 23 | AndroSyn, Aaron Sethman 24 | anfl, Lee Hardy 25 | beu, Elfyn McBratney 26 | BlindSight, Matt Ullman 27 | Entrope, Michael Poole 28 | grawity, Mantas Mikulėnas 29 | gxti, Michael Tharp 30 | mniip 31 | Simon, Simon Arlott 32 | spb, Stephen Bennett 33 | Taros, Brett Greenham 34 | ThaPrince, Jon Christopherson 35 | twincest, River Tarnell 36 | w00t, Robin Burchell 37 | 38 | For a list of contributors to ircd-ratbox, ircd-hybrid, and ircd2.8 (the 39 | predecessors to Charybdis), see the doc/credits-past.txt file in the Charybdis 40 | distribution. 41 | 42 | Visit the Charybdis website at: http://www.charybdis.io/ 43 | Visit us on IRC at: irc.charybdis.io #charybdis 44 | -------------------------------------------------------------------------------- /Makefile.am: -------------------------------------------------------------------------------- 1 | AUTOMAKE_OPTIONS = foreign 2 | ACLOCAL_AMFLAGS = -I m4 3 | 4 | SUBDIRS = librb 5 | 6 | if BUILD_LTDL 7 | SUBDIRS += libltdl 8 | endif 9 | 10 | SUBDIRS += ircd \ 11 | ssld \ 12 | wsockd \ 13 | authd \ 14 | bandb \ 15 | tests \ 16 | tools \ 17 | modules \ 18 | extensions \ 19 | help \ 20 | doc 21 | 22 | logdir = @prefix@/logs 23 | 24 | BUILT_SOURCES = include/serno.h 25 | 26 | include/serno.h: 27 | @if [ -d .git ]; then \ 28 | revh=`git log -1 --date=format:%Y%m%d --pretty=format:%cd-%h`; \ 29 | datecode=`git log -1 --pretty=format:%ct`; \ 30 | if [ -n "$$revh" ]; then \ 31 | echo '#define SERNO "'$$revh'"' >include/serno.h ; \ 32 | echo "#define DATECODE $${datecode}UL" >>include/serno.h; \ 33 | fi \ 34 | fi 35 | @if [ ! -f include/serno.h ]; then \ 36 | echo '#define SERNO "unknown"' >include/serno.h; \ 37 | echo '#define DATECODE 0UL' >>include/serno.h; \ 38 | fi 39 | 40 | install-data-hook: 41 | test -d ${DESTDIR}${logdir} || mkdir -p ${DESTDIR}${logdir} 42 | 43 | install-exec-hook: 44 | rm -f ${DESTDIR}${moduledir}/*.la 45 | rm -f ${DESTDIR}${moduledir}/autoload/*.la 46 | rm -f ${DESTDIR}${moduledir}/extensions/*.la 47 | rm -f ${DESTDIR}${moduledir}/*.dll.a 48 | rm -f ${DESTDIR}${moduledir}/autoload/*.dll.a 49 | rm -f ${DESTDIR}${moduledir}/extensions/*.dll.a 50 | 51 | distclean-local: 52 | rm -f librb/include/librb-config.h 53 | 54 | clean-local: 55 | rm -f include/serno.h 56 | rm -f ircd/ircd_lexer.c 57 | rm -f ircd/ircd_parser.c 58 | rm -f ircd/ircd_parser.h 59 | rm -f ircd/version.c 60 | rm -f ircd/version.c.last 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # charybdis 2 | 3 | Charybdis was an IRCv3 server designed to be highly scalable. It implements IRCv3.1 and some parts of IRCv3.2. 4 | 5 | It was meant to be used with an IRCv3-capable services implementation such as [Atheme][atheme] or [Anope][anope]. 6 | 7 | [atheme]: http://www.atheme.net/ 8 | [anope]: http://www.anope.org/ 9 | 10 | It is no longer maintained due to the scope of refactoring needed to support modern IRCv3 features. 11 | 12 | These days, you should use [Solanum][solanum] instead. For almost all real-world deployments of Charybdis, 13 | it is better. 14 | 15 | [solanum]: https://github.com/solanum-ircd/solanum -------------------------------------------------------------------------------- /authd/Makefile.am: -------------------------------------------------------------------------------- 1 | pkglibexec_PROGRAMS = authd 2 | AM_CFLAGS=$(WARNFLAGS) 3 | AM_CPPFLAGS = -I../include -I../librb/include 4 | 5 | authd_SOURCES = \ 6 | authd.c \ 7 | dns.c \ 8 | getaddrinfo.c \ 9 | getnameinfo.c \ 10 | notice.c \ 11 | provider.c \ 12 | res.c \ 13 | reslib.c \ 14 | reslist.c \ 15 | providers/dnsbl.c \ 16 | providers/ident.c \ 17 | providers/rdns.c \ 18 | providers/opm.c 19 | 20 | authd_LDADD = ../librb/src/librb.la 21 | -------------------------------------------------------------------------------- /authd/notice.h: -------------------------------------------------------------------------------- 1 | /* authd/notice.h - send notices back to the ircd and to clients 2 | * Copyright (c) 2016 Elizabeth Myers 3 | * 4 | * Permission to use, copy, modify, and/or distribute this software for any 5 | * purpose with or without fee is hereby granted, provided that the above 6 | * copyright notice and this permission notice is present in all copies. 7 | * 8 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 9 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 10 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 11 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 12 | * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 13 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 14 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 15 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 16 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 17 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 18 | * POSSIBILITY OF SUCH DAMAGE. 19 | */ 20 | 21 | #ifndef __CHARYBDIS_AUTHD_NOTICE_H__ 22 | #define __CHARYBDIS_AUTHD_NOTICE_H__ 23 | 24 | typedef enum 25 | { 26 | L_DEBUG = 'D', 27 | L_INFO = 'I', 28 | L_WARN = 'W', 29 | L_CRIT ='C', 30 | } notice_level_t; 31 | 32 | void notice_client(uint32_t cid, const char *fmt, ...); 33 | void warn_opers(notice_level_t level, const char *fmt, ...); 34 | void stats_result(uint32_t cid, char letter, const char *fmt, ...); 35 | void stats_error(uint32_t cid, char letter, const char *fmt, ...); 36 | void stats_done(uint32_t cid, char letter); 37 | 38 | #endif /* __CHARYBDIS_AUTHD_NOTICE_H__ */ 39 | -------------------------------------------------------------------------------- /authd/res.h: -------------------------------------------------------------------------------- 1 | /* 2 | * res.h for referencing functions in res.c, reslib.c 3 | * 4 | */ 5 | 6 | #ifndef _CHARYBDIS_RES_H 7 | #define _CHARYBDIS_RES_H 8 | 9 | /* Maximum number of nameservers in /etc/resolv.conf we care about 10 | * In hybrid, this was 2 -- but in Charybdis, we want to track 11 | * a few more than that ;) --nenolod 12 | */ 13 | #define IRCD_MAXNS 10 14 | #define RESOLVER_HOSTLEN 255 15 | 16 | struct DNSReply 17 | { 18 | char *h_name; 19 | struct rb_sockaddr_storage addr; 20 | }; 21 | 22 | struct DNSQuery 23 | { 24 | void *ptr; /* pointer used by callback to identify request */ 25 | void (*callback)(void* vptr, struct DNSReply *reply); /* callback to call */ 26 | }; 27 | 28 | extern struct rb_sockaddr_storage irc_nsaddr_list[]; 29 | extern int irc_nscount; 30 | 31 | extern void init_resolver(void); 32 | extern void restart_resolver(void); 33 | extern void gethost_byname_type(const char *, struct DNSQuery *, int); 34 | extern void gethost_byaddr(const struct rb_sockaddr_storage *, struct DNSQuery *); 35 | extern void build_rdns(char *, size_t, const struct rb_sockaddr_storage *, const char *); 36 | 37 | #endif 38 | -------------------------------------------------------------------------------- /bandb/Makefile.am: -------------------------------------------------------------------------------- 1 | pkglibexec_PROGRAMS = bandb 2 | bin_PROGRAMS = bantool 3 | AM_CFLAGS=$(WARNFLAGS) 4 | 5 | AM_CPPFLAGS = -I../include -I../librb/include @SQLITE_INCLUDES@ 6 | AM_CPPFLAGS += -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION 7 | 8 | bandb_SOURCES = bandb.c rsdb_sqlite3.c rsdb_snprintf.c 9 | EXTRA_bandb_SOURCES = sqlite3.c 10 | bandb_LDADD = ../librb/src/librb.la @SQLITE_LD@ @SQLITE_OBJ@ 11 | bandb_DEPENDENCIES = @SQLITE_OBJ@ 12 | 13 | bantool_SOURCES = bantool.c rsdb_sqlite3.c rsdb_snprintf.c 14 | EXTRA_bantool_SOURCES = sqlite3.c 15 | bantool_LDADD = ../librb/src/librb.la @SQLITE_LD@ @SQLITE_OBJ@ 16 | bantool_DEPENDENCIES = @SQLITE_OBJ@ 17 | -------------------------------------------------------------------------------- /bandb/rsdb.h: -------------------------------------------------------------------------------- 1 | #ifndef INCLUDED_rsdb_h 2 | #define INCLUDED_rsdb_h 3 | 4 | /* error handler callback */ 5 | typedef void rsdb_error_cb(const char *); 6 | 7 | typedef int (*rsdb_callback) (int, const char **); 8 | 9 | typedef enum rsdb_transtype 10 | { 11 | RSDB_TRANS_START, 12 | RSDB_TRANS_END 13 | } 14 | rsdb_transtype; 15 | 16 | struct rsdb_table 17 | { 18 | char ***row; 19 | int row_count; 20 | int col_count; 21 | void *arg; 22 | }; 23 | 24 | int rsdb_init(rsdb_error_cb *); 25 | void rsdb_shutdown(void); 26 | 27 | const char *rsdb_quote(const char *src); 28 | 29 | void rsdb_exec(rsdb_callback cb, const char *format, ...); 30 | 31 | void rsdb_exec_fetch(struct rsdb_table *data, const char *format, ...); 32 | void rsdb_exec_fetch_end(struct rsdb_table *data); 33 | 34 | void rsdb_transaction(rsdb_transtype type); 35 | /* rsdb_snprintf.c */ 36 | 37 | int rs_vsnprintf(char *dest, const size_t bytes, const char *format, va_list args); 38 | int rs_snprintf(char *dest, const size_t bytes, const char *format, ...); 39 | 40 | 41 | #endif 42 | -------------------------------------------------------------------------------- /doc/Makefile.am: -------------------------------------------------------------------------------- 1 | prefix = @prefix@ 2 | exec_prefix = @exec_prefix@ 3 | exec_suffix = @exec_suffix@ 4 | bindir = @bindir@ 5 | libexecdir = @libexecdir@ 6 | sysconfdir = @sysconfdir@ 7 | localstatedir = @localstatedir@ 8 | 9 | # Local to the etc Makefile 10 | 11 | CONFS = ircd.conf.example reference.conf 12 | 13 | install-mkdirs: 14 | -@if test ! -d $(DESTDIR)$(sysconfdir); then \ 15 | echo "mkdir -p $(sysconfdir)"; \ 16 | mkdir -p $(DESTDIR)$(sysconfdir); \ 17 | fi 18 | 19 | install: install-mkdirs 20 | @echo "ircd: installing example config files ($(CONFS))" 21 | @for i in $(CONFS); do \ 22 | if test -f $(DESTDIR)$(sysconfdir)/$$i; then \ 23 | $(MV) $(DESTDIR)$(sysconfdir)/$$i $(DESTDIR)$(sysconfdir)/$$i.old; \ 24 | fi; \ 25 | $(INSTALL_DATA) $$i $(DESTDIR)$(sysconfdir); \ 26 | done 27 | 28 | -@if test ! -f $(DESTDIR)$(sysconfdir)/ircd.motd; then \ 29 | echo "ircd: installing motd file (ircd.motd)"; \ 30 | $(INSTALL_DATA) ircd.motd $(DESTDIR)$(sysconfdir); \ 31 | fi 32 | 33 | -@if test -f $(DESTDIR)$(sysconfdir)/links.txt; then \ 34 | $(RM) $(DESTDIR)$(sysconfdir)/links.txt; \ 35 | fi 36 | 37 | -------------------------------------------------------------------------------- /doc/credits-past.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/charybdis-ircd/charybdis/56d5e9f34106665bc2e6d4db006f1fa0bceeec1b/doc/credits-past.txt -------------------------------------------------------------------------------- /doc/features/away-notify.txt: -------------------------------------------------------------------------------- 1 | away-notify client capability specification 2 | ---------------------------------------------- 3 | 4 | Copyright (c) 2012 Keith Buck . 5 | 6 | Unlimited redistribution and modification of this document is allowed 7 | provided that the above copyright notice and this permission notice 8 | remains in tact. 9 | 10 | The away-notify client capability allows a client to specify that it 11 | would like to be notified when users are marked/unmarked as away. This 12 | capability is referred to as 'away-notify' at capability negotiation 13 | time. 14 | 15 | This capability is designed to replace polling of WHO as a more 16 | efficient method of tracking the away state of users in a channel. The 17 | away-notify capability both conserves bandwidth as WHO requests are 18 | not continually sent and allows the client to be notified immediately 19 | upon a user setting or removing their away state (as opposed to when 20 | WHO is next polled). 21 | 22 | When this capability is enabled, clients will be sent an AWAY message 23 | when a user sharing a channel with them sets or removes their away 24 | state, as well as when a user joins and has an away message set. 25 | (Note that AWAY will not be sent for joining users with no away 26 | message set.) 27 | 28 | The format of the AWAY message is as follows: 29 | 30 | :nick!user@host AWAY [:message] 31 | 32 | If the message is present, the user (specified by the nick!user@host 33 | mask) is going away. If the message is not present, the user is 34 | removing their away message/state. 35 | 36 | To fully track the away state of users, clients should: 37 | 38 | 1) Enable the away-notify capability at negotiation time. 39 | 40 | 2) Execute WHO when joining a channel to capture the current away 41 | state of all users in that channel. 42 | 43 | 3) Update state appropriately upon receiving an AWAY message. 44 | -------------------------------------------------------------------------------- /doc/features/extended-join.txt: -------------------------------------------------------------------------------- 1 | extended-join client capability specification 2 | --------------------------------------------- 3 | 4 | Copyright (c) 2011 Kiyoshi Aman 5 | 6 | Unlimited redistribution and modification of this document is allowed 7 | provided that the above copyright notice and this permission notice 8 | remains intact. 9 | 10 | The extended-join capability extends the JOIN message to include the 11 | account name, or a placeholder if the user hasn't identified with 12 | services. This capability MUST be referred to as 'extended-join' at 13 | capability negotiation time. 14 | 15 | When enabled, the JOIN message will designate the account name of the 16 | user when he/she joins a channel. 17 | 18 | The JOIN message is one of the following: 19 | 20 | :nick!user@host JOIN #channelname accountname :Real Name 21 | 22 | This message represents that the user identified by nick!user@host has 23 | logged in to an acount prior to channel ingress. The penultimate 24 | parameter is the display name of that account. The last parameter is 25 | the user's GECOS. 26 | 27 | :nick!user@host JOIN #channelname * :Real Name 28 | 29 | This message represents that the user has not logged in to an account 30 | prior to channel ingress. As the penultimate parameter is an asterisk, 31 | this means that an asterisk is not a valid account name (which it is 32 | not in P10 or TS6 or ESVID). 33 | 34 | Please see the documentation in account-notify.txt for how to take 35 | advantage of this capability. 36 | 37 | -------------------------------------------------------------------------------- /doc/features/index.txt: -------------------------------------------------------------------------------- 1 | Here is an overview of the docs in the doc/features directory. 2 | 3 | account-notify.txt - Description of the account-notify system 4 | away-notify.txt - Description of the away-notify system 5 | challenge.txt - Overview of the challenge/response system for 6 | obtaining operator status 7 | collision_fnc.txt - Overview of the SAVE nick collision method 8 | extban.txt - Description of extended bans 9 | extended-join.txt - Description of the extended-join system 10 | modeg.txt - Description of UMODE +g, the caller ID system 11 | monitor.txt - Description of the MONITOR system 12 | sasl.txt - Description of the SASL services authentication 13 | system 14 | services.txt - Overview of features added by services 15 | tgchange.txt - Overview of the target change system 16 | -------------------------------------------------------------------------------- /doc/index.txt: -------------------------------------------------------------------------------- 1 | Here is the overview of the documents in the doc/ directory. 2 | 3 | Subdirectories: 4 | 5 | features/ - Documents about features and standards 6 | technical/ - Technical documents about ircd internals and 7 | protocol information 8 | sgml/ - SGML documentation 9 | 10 | Files: 11 | 12 | ircd.conf.example - An example ircd.conf file describing most of the 13 | user settable options 14 | ircd.motd - A default ircd.motd used by make install 15 | credits-past.txt - Credits for the predecessors to Charybdis 16 | logfiles.txt - Description of formatting of some logfiles 17 | server-version-info.txt - Overview of the flags shown in /version 18 | 19 | Also in the contrib/ directory you will find: 20 | example_module.c - An example module, detailing what the code in a module 21 | does. Useful for building your own modules. 22 | -------------------------------------------------------------------------------- /doc/ircd.motd: -------------------------------------------------------------------------------- 1 | This is charybdis MOTD you might replace it, but if not your friends will 2 | laugh at you. 3 | -------------------------------------------------------------------------------- /doc/logfiles.txt: -------------------------------------------------------------------------------- 1 | Charybdis logfiles - Lee H 2 | --------------------------- 3 | 4 | fname_killlog 5 | ------------- 6 |