mirror of
https://github.com/osmarks/ngircd.git
synced 2025-09-23 20:54:02 +00:00
Compare commits
26 Commits
rel-26.1
...
branch-21.
Author | SHA1 | Date | |
---|---|---|---|
![]() |
48fcb97fa4 | ||
![]() |
713fd3f883 | ||
![]() |
19da9a0801 | ||
![]() |
ee28e76df2 | ||
![]() |
9a05c1145d | ||
![]() |
a3ad2927cc | ||
![]() |
6725f67cf1 | ||
![]() |
c0c9b1b8ac | ||
![]() |
1d3137ff69 | ||
![]() |
d20de38161 | ||
![]() |
9ecd8f616f | ||
![]() |
4525425879 | ||
![]() |
4286af08ce | ||
![]() |
bb3096b0d3 | ||
![]() |
9f090d7554 | ||
![]() |
ecb55704b7 | ||
![]() |
9a11ab0d1b | ||
![]() |
f55d03c153 | ||
![]() |
b86da5ed9a | ||
![]() |
d009df909b | ||
![]() |
74db76b792 | ||
![]() |
21ef762109 | ||
![]() |
e379a0881e | ||
![]() |
54a13350b1 | ||
![]() |
3b46356ce2 | ||
![]() |
ac127ff20a |
@@ -1,4 +0,0 @@
|
||||
-I./src
|
||||
-I./src/ipaddr
|
||||
-I./src/portab
|
||||
-I./src/tool
|
@@ -1,20 +0,0 @@
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2016 Alexander Barton (alex@barton.de) and Contributors.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
|
||||
# .editorconfig: Editor settings, see <http://editorconfig.org>.
|
||||
|
||||
root = true
|
||||
|
||||
[*]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
56
.gitignore
vendored
56
.gitignore
vendored
@@ -1,5 +1,4 @@
|
||||
Makefile
|
||||
Makefile.am
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
ansi2knr.1
|
||||
@@ -8,73 +7,18 @@ ansi2knr.h
|
||||
ar-lib
|
||||
autom4te.cache
|
||||
build-stamp-ngircd*
|
||||
build+*
|
||||
compile
|
||||
config.cache
|
||||
config.log
|
||||
config.status
|
||||
configure
|
||||
configure.ac
|
||||
configure.lineno
|
||||
cov-int
|
||||
cscope.out
|
||||
debian
|
||||
depcomp
|
||||
install-sh
|
||||
missing
|
||||
ngircd.dest
|
||||
.*.swp
|
||||
.deps
|
||||
.vscode
|
||||
*.a
|
||||
*.o
|
||||
doc/sample-ngircd.conf
|
||||
doc/src/html
|
||||
man/ngircd.8
|
||||
man/ngircd.conf.5
|
||||
src/config.h
|
||||
src/config.h.in
|
||||
src/config.h.in~
|
||||
src/stamp-h1
|
||||
src/ngircd/check-help
|
||||
src/ngircd/check-version
|
||||
src/ngircd/ngircd
|
||||
src/ngircd/ngircd.exe
|
||||
src/portab/portabtest
|
||||
src/portab/portabtest.exe
|
||||
src/testsuite/*.e_
|
||||
src/testsuite/channel-test
|
||||
src/testsuite/connect-ssl-cert1-test
|
||||
src/testsuite/connect-ssl-cert2-test
|
||||
src/testsuite/connect-test
|
||||
src/testsuite/connect-tls-cert1-test
|
||||
src/testsuite/connect-tls-cert2-test
|
||||
src/testsuite/invite-test
|
||||
src/testsuite/join-test
|
||||
src/testsuite/kick-test
|
||||
src/testsuite/logs
|
||||
src/testsuite/message-test
|
||||
src/testsuite/misc-test
|
||||
src/testsuite/mode-test
|
||||
src/testsuite/ngircd-test1.log
|
||||
src/testsuite/ngircd-test1.motd
|
||||
src/testsuite/ngircd-test2.log
|
||||
src/testsuite/ngircd-test2.motd
|
||||
src/testsuite/ngircd-test3.log
|
||||
src/testsuite/ngircd-test3.motd
|
||||
src/testsuite/opless-channel-test
|
||||
src/testsuite/server-link-test
|
||||
src/testsuite/server-login-test
|
||||
src/testsuite/ssl/cert.pem
|
||||
src/testsuite/ssl/dhparams.pem
|
||||
src/testsuite/ssl/key.pem
|
||||
src/testsuite/T-ngircd1
|
||||
src/testsuite/T-ngircd1.exe
|
||||
src/testsuite/T-ngircd2
|
||||
src/testsuite/T-ngircd2.exe
|
||||
src/testsuite/T-ngircd3
|
||||
src/testsuite/T-ngircd3.exe
|
||||
src/testsuite/tests
|
||||
src/testsuite/tests-skipped.lst
|
||||
src/testsuite/who-test
|
||||
src/testsuite/whois-test
|
||||
|
20
.mailmap
20
.mailmap
@@ -1,22 +1,4 @@
|
||||
# mailmap file for git-[short]log and git-blame
|
||||
# use "git shortlog -se" to see the list of all authors.
|
||||
|
||||
Alexander Barton <alex@barton.de> <anonymous>
|
||||
Alexander Barton <alex@barton.de> <alex@kfreebsd.barton.de>
|
||||
|
||||
Alexander Barton <anonymous>
|
||||
Ali Shemiran <ashemira@ucsd.edu>
|
||||
|
||||
Christoph Biedl <ngircd.anoy@manchmal.in-ulm.de> <debian.axhn@manchmal.in-ulm.de>
|
||||
|
||||
Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu> <dana@cs.ucsd.edu>
|
||||
Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu> <dana+70@cs.ucsd.edu>
|
||||
|
||||
DNS <dns@rbose.org>
|
||||
|
||||
Götz Hoffart <goetz@hoffart.de>
|
||||
|
||||
LucentW <lucent@zebes.info> <LucentW@users.noreply.github.com>
|
||||
|
||||
Michi <michi+ngircd@dataswamp.org>
|
||||
|
||||
Sam James <sam@cmpct.info> <11667869+thesamesam@users.noreply.github.com>
|
||||
|
13
.travis.yml
13
.travis.yml
@@ -1,14 +1,7 @@
|
||||
language: c
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libident-dev
|
||||
- libpam0g-dev
|
||||
- libssl-dev
|
||||
- libwrap0-dev
|
||||
- zlib1g-dev
|
||||
- expect
|
||||
- telnet
|
||||
before_install:
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq libident-dev libpam0g-dev libssl-dev libwrap0-dev zlib1g-dev expect telnet
|
||||
compiler:
|
||||
- gcc
|
||||
- clang
|
||||
|
40
AUTHORS
40
AUTHORS
@@ -2,18 +2,16 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2021 Alexander Barton and Contributors.
|
||||
(c)2001-2014 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- AUTHORS and CONTRIBUTORS --
|
||||
|
||||
|
||||
Note:
|
||||
If you have comments, patches or something else, please feel free to post
|
||||
a mail to the ngIRCd mailing list: <ngircd-ml@ngircd.barton.de> (please see
|
||||
<http://ngircd.barton.de/support.php> for details) or join the ngIRCd IRC
|
||||
channel "#ngircd" on irc.barton.de: <irc://irc.barton.de/ngircd>.
|
||||
Note: If you have critics, patches or something else, please feel free to
|
||||
post a mail to the ngIRCd mailing list: <ngircd-ml@arthur.barton.de> (please
|
||||
see <http://ngircd.barton.de/#ml> for details).
|
||||
|
||||
Don't mail the people listed here directly, if possible!
|
||||
|
||||
@@ -29,54 +27,32 @@ Contributors
|
||||
Ali Shemiran <ashemira@ucsd.edu>
|
||||
Ask Bjørn Hansen <ask@develooper.com>
|
||||
Benjamin Pineau <ben@zouh.org>
|
||||
Bernd Kuhls <bernd.kuhls@t-online.de>
|
||||
Brandon Beresini <beresini@google.com>
|
||||
Brett Smith <brett@w3.org>
|
||||
Brian Collins <bricollins@gmail.com>
|
||||
Bryan Caldwell <bcaldwel@ucsd.edu>
|
||||
Christian Aistleitner <christian@quelltextlich.at>
|
||||
Christoph Biedl <ngircd.anoy@manchmal.in-ulm.de>
|
||||
DNS <dns@rbose.org>
|
||||
Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu>
|
||||
David Kingston <deathking1337@aim.com>
|
||||
DNS <dns@rbose.org>
|
||||
Eric Grunow <egrunow@ucsd.edu>
|
||||
Fabrice Fontaine <fontaine.fabrice@gmail.com>
|
||||
Federico G. Schwindt <fgsch@lodoss.net>
|
||||
Gabor Adam Toth <tg@tgbit.net>
|
||||
Götz Hoffart <goetz@hoffart.de>
|
||||
Hilko Bengen <bengen@hilluzination.de>
|
||||
Ian Chard <ian@chard.org>
|
||||
Goetz Hoffart <goetz@hoffart.de>
|
||||
Ilja Osthoff <i.osthoff@gmx.net>
|
||||
ItsOnlyBinary <ItsOnlyBinary@users.noreply.github.com>
|
||||
James Lu <james@overdrivenetworks.com>
|
||||
Jari Aalto <jari.aalto@cante.net>
|
||||
Johann Hartwig Hauschild <git@hauschild.it>
|
||||
JRMU <jrmu@lecturify.com>
|
||||
LucentW <lucent@zebes.info>
|
||||
Mantas Mikulėnas <grawity@gmail.com>
|
||||
Michi <michi+ngircd@dataswamp.org>
|
||||
Neale Pickett <neale@woozle.org>
|
||||
Peter Powell <petpow@saberuk.com>
|
||||
Rolf Eike Beer <eike@sf-mail.de>
|
||||
Rosen Penev <rosenp@gmail.com>
|
||||
Roy Sindre Norangshol <roy.sindre@norangshol.no>
|
||||
Sam James <sam@cmpct.info>
|
||||
Scott Perry <scperry@ucsd.edu>
|
||||
Sean Reifschneider <jafo-rpms@tummy.com>
|
||||
Sebastian Köhler <sebkoehler@whoami.org.uk>
|
||||
shankari <shankari@eecs.berkeley.edu>
|
||||
Tassilo Schweyer <dev@welterde.de>
|
||||
Tom Ryder <tom@sanctum.geek.nz>
|
||||
Unit 193 <unit193@ubuntu.com>
|
||||
William Pitcock <nenolod@dereferenced.org>
|
||||
Windree <57554809+Windree@users.noreply.github.com>
|
||||
xnaas <8271327+xnaas@users.noreply.github.com>
|
||||
xor <xorboy@gmail.com>
|
||||
Yecheng Fu <cofyc.jackson@gmail.com>
|
||||
|
||||
|
||||
Code snippets
|
||||
~~~~~~~~~~~~~
|
||||
Andrew Tridgell & Martin Pool: strl{cpy|cat}()-functions
|
||||
John Kercheval: pattern matching functions
|
||||
J. Kercheval: pattern matching functions
|
||||
Patrick Powell <papowell@astart.com>: snprintf()-function
|
||||
Andrew Tridgell & Martin Pool: strl{cpy|cat}()-functions
|
||||
|
560
ChangeLog
560
ChangeLog
@@ -2,506 +2,12 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2021 Alexander Barton and Contributors.
|
||||
(c)2001-2014 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- ChangeLog --
|
||||
|
||||
ngIRCd 26.1 (2021-01-02)
|
||||
|
||||
- Fix a "format string" compiler warning (detected on OpenBSD).
|
||||
- No longer set "AI_ADDRCONFIG" when resolving host names, even when it
|
||||
exists: with this option set, on an IPv6-only host, we prevent 127.0.0.1
|
||||
to get translated properly, even when the loopback interface has this
|
||||
address configured! And as the test suite uses 127.0.0.1, it was broken
|
||||
on IPv6-only hosts.
|
||||
The drawback is that the resolver possibly returns more addresses now,
|
||||
even of an unsupported/not connected address family; but this shouldn't
|
||||
do much harm in practice, as ngIRCd iterates over all returned addresses
|
||||
while trying to establish an outgoing connection.
|
||||
Closes #281.
|
||||
- Revert "Show allowed channel types in ISUPPORT(005) numeric only", which
|
||||
was introduced in 26~rc1: This lead to some IRC clients assuming "oh, no
|
||||
channel prefix characters at all, so no channels at all, so no PRIVMSG can
|
||||
go to any channel" when "AllowedChannelTypes" was set to the empty string
|
||||
("") -- which is not the case when there are pre-defined channel set up or
|
||||
other servers still having channels!
|
||||
So "allowed channel types" != "supported channel types", and we always have
|
||||
to list all supported ones in the ISUPPORT(005) numeric!
|
||||
Closes #285.
|
||||
- Test suite: Wait 2 seconds after reloading the daemon, which is required
|
||||
because on reload, all listening ports are closed, configuration updated,
|
||||
and then opened again. This lead to subsequent tests running while the
|
||||
daemon isn't listening on any ports, and that's why some tests could fail.
|
||||
Closes #280.
|
||||
- platformtest.sh: Try to mangle CLang name more intelligently.
|
||||
- Documentation: Fixed URLs of Atheme IRC services, updated all mentions
|
||||
from CVS to Git, and updated Platforms.txt -- Oh, and it is 2021 now! ;-)
|
||||
|
||||
ngIRCd 26 (2020-06-20)
|
||||
|
||||
ngIRCd 26~rc2 (2020-06-11)
|
||||
- Add AppStream metadata file (contrib/de.barton.ngircd.metainfo.xml).
|
||||
- Don't send invalid CHANINFO commands when a channel has mode +k set but no
|
||||
key is known to the server. This can happen with a misconfigured predefined
|
||||
channel, for example, and looked like this: "CHANINFO #test +Pk 0 :" --
|
||||
note the unset key represented by the two spaces. Fix this by sending a
|
||||
"*" in this case and update the CHANINFO documentation, too.
|
||||
- ngircd.spec: Fix names of README.md and INSTALL.md, add ".md" extension.
|
||||
- Update description texts in the README.md file, the RPM and Debian package
|
||||
files and the manual page: bring them in line with the updated homepage.
|
||||
- Server-Server protocol: Fix use-after-free when unregistering a directly
|
||||
connected server sending a SQUIT for itself.
|
||||
- Server-Server protocol: Detect bogus SERVER commands lacking a prefix.
|
||||
Thanks Hilko Bengen (hillu) for finding & reporting this as well for the
|
||||
patch & pull request (even if fixed differently).
|
||||
Closes #275.
|
||||
- Fix the PING-PONG logic: In ngIRCd 26~rc1 this was completely broken (while
|
||||
trying to fix timeouts during server handshakes in bigger networks): the
|
||||
daemon never disconnected any stale peers but kept sending out PINGs over
|
||||
and over again ...
|
||||
- Test suite: Add missing files needed to test SSL support to "EXTRA_DIST",
|
||||
so that they are included in distribution archives: in rc1, "make check"
|
||||
fails when using sources from an archive and enabling SSL support.
|
||||
Thanks to Hilko Bengen <bengen@hilluzination.de> for the patch!
|
||||
|
||||
ngIRCd 26~rc1 (2020-05-10)
|
||||
- Tweak & update doc/HowToRelease.txt, .mailmap and AUTHORS files.
|
||||
- Allow up to 512 characters per line in MOTD and help text files (but keep
|
||||
in mind that lines can't get that long, because they have to be prefixed
|
||||
before being sent to the client). But this allows for more fancy MOTDs :-)
|
||||
Closes #271.
|
||||
- Show the actually allowed channel types in the ISUPPORT(005) numeric which
|
||||
are configured by the "AllowedChannelTypes" configuration variable.
|
||||
Closes #273.
|
||||
- Handle commands in the read buffer before reading more data and don't wait
|
||||
for the network in this case: If there are more bytes in the read buffer
|
||||
already than a single valid IRC command can get long (513 bytes), wait for
|
||||
this/those command(s) to be handled first and don't try to read even more
|
||||
data from the network (which most probably would overflow the read buffer
|
||||
of this connection soon).
|
||||
- Update Travis-CI configuration, "sudo" is deprecated.
|
||||
- Log G-/K-Line changes only when not initiated by a server: this prevents
|
||||
the log from becoming spammed during "net bursts".
|
||||
- Update test suite to include SSL tests, including checking for reloading
|
||||
certificates during runtime.
|
||||
- Makefile.am: Replace "make" with "${MAKE}". This fixes warnings like this:
|
||||
"warning: jobserver unavailable: using -j1. Add `+' to parent make rule."
|
||||
Thanks to Sam James (sam_c) <sam@cmpct.info>!
|
||||
Closes #270.
|
||||
- Add support for GnuTLS certificate reload, which is quite handy when using
|
||||
Let's Encrypt, for example. Until now this was only supported when linked
|
||||
with OpenSSL. Thanks a lot, Hilko Bengen <bengen@hilluzination.de>!
|
||||
- Remove deprecated legacy configuration options and related functions that
|
||||
have been marked for removal for quite some time:
|
||||
- PredefChannelsOnly (v22)
|
||||
- NoticeAuth (v24)
|
||||
- NoXXX (v19)
|
||||
- Old '[GLOBAL]' section handling (v19)
|
||||
Thanks to Michi <michi+ngircd@dataswamp.org> for the patch!
|
||||
- Fix recursion bug on write errors: Depending on the stack size, too many
|
||||
clients on the same channel quitting at the same time would trigger a crash
|
||||
due to too many recursive calls to Conn_Close(). Thanks to Michi
|
||||
<michi+ngircd@dataswamp.org> for the patch!
|
||||
- Fix builds using GCC option -fno-common, which is the default starting with
|
||||
GCC 10. Thanks to Michi <michi+ngircd@dataswamp.org> for the patch!
|
||||
Closes #266.
|
||||
- Convert INSTALL and README files to Markdown.
|
||||
- Allow setting arbitrary channel modes in the configuration file by handling
|
||||
them like in MODE commands, and allow multiple "Modes =" lines per [Channel]
|
||||
section. Thanks to Michi <michi+ngircd@dataswamp.org>!
|
||||
Closes #55.
|
||||
- Add "FNC" (forced nick changes) to ISUPPORT(005) numeric. Most probably
|
||||
this doesn't make any difference to any client, but it seems correct.
|
||||
See <http://www.irc.org/tech_docs/005.html> for details.
|
||||
- Reuse old SSL key if loading a new one failed.
|
||||
- Remove outdated OpenBSD/NetBSD systrace.policy.
|
||||
- Enhance handling of command line errors, and return with exit code 0 ("no
|
||||
error") when "--help" or "--version" is used (which resulted in exit code 1,
|
||||
"error" before). Exit with code 2 ("command line error") for all other
|
||||
invalid command line options, and show the error message itself on stderr
|
||||
(instead of stdout and exit code 1, "generic error", as before).
|
||||
This new behaviour is more in line with the GNU "coding standards",
|
||||
see <https://www.gnu.org/prep/standards/html_node/_002d_002dhelp.html>.
|
||||
- Fix and update Xcode project: Reference correct contrib/Makefile.am file,
|
||||
correctly sort contrib/nglog.sh and add "ORGANIZATIONNAME" setting.
|
||||
- contrib/ngindent.sh: Add more GNU indent options for better results, and
|
||||
add the ".sh" suffix to bring this script in line with the others in the
|
||||
contrib/ folder.
|
||||
- Add ./contrib/nglog.sh: This script parses the log output of ngircd(8),
|
||||
and colorizes the messages according to their log level. Example usage:
|
||||
ngircd -f $PWD/doc/sample-ngircd.conf -np | ./contrib/nglog.sh
|
||||
- Log received signals with their names using strsignal(3), when available.
|
||||
- Make test suite compatible with Haiku OS.
|
||||
- Fix host mask cloaking bug, don't cloak multiple times: Previously, each
|
||||
server would cloak every user's host mask. The problem is that if a network
|
||||
has more than one server, then a user's host mask would get cloaked twice.
|
||||
This patch ensures that a server only cloaks the host mask if it has not yet
|
||||
been cloaked (the period indicates it's still an IP address). Thanks to
|
||||
JRMU <jrmu@lecturify.com> for the patch!
|
||||
Closes #228.
|
||||
- Enlarge buffers of info texts to 128 bytes. This includes:
|
||||
- "Real name" of a client (4th filed of the USER command).
|
||||
- Server info text ("Info" configuration option).
|
||||
- Admin info texts and email address ("AdminInfo1", "AdminInfo2" and
|
||||
"AdminEmail" configuration options).
|
||||
- Network name ("Network" configuration option).
|
||||
The limit was 64 bytes before ...
|
||||
Closes #258.
|
||||
- Streamline handling of invalid and unset server name: Don't exit during
|
||||
runtime (REHASH command, HUP signal), because the server name can't be
|
||||
changed in this case anyway and the new invalid name will be ignored.
|
||||
- Fix and extend documentation: Fix some typos, fix syntax of LINKS and LIST
|
||||
commands, whitespace and spelling fixes, update dependencies and add some
|
||||
more information about IRCv3 support.
|
||||
Thanks to Thanks Windree, Étienne Mollier <etienne.mollier@mailoo.org> and
|
||||
Christoph Biedl <debian.axhn@manchmal.in-ulm.de>.
|
||||
Closes #264.
|
||||
- Slightly reorder startup steps, and enhance logging:
|
||||
- Show name of configuration file at the beginning of start up.
|
||||
- Add a message when ngIRCd is ready, including its host name.
|
||||
- Show name of configuration file on REHASH (SIGHUP), too.
|
||||
- Change level of "done message" to NOTICE, like "starting" & "ready".
|
||||
- Initialize IO functions before channels, connections, clients, ...
|
||||
- configure.ng: OpenSSL can depends on lz or latomic so use pkg-config to
|
||||
find those dependencies and fallback to existing mechanism.
|
||||
Closes #256.
|
||||
- ngircd.conf.5: Fix wording as suggested by lintian.
|
||||
|
||||
ngIRCd 25 (2019-01-23)
|
||||
|
||||
- Fix documentation of MotdPhrase length, which actually is 126 characters:
|
||||
update sample configuration file as well as the man page. Thanks to
|
||||
shankari <shankari@eecs.berkeley.edu>.
|
||||
Closes #254.
|
||||
- Implement new configuration option "MaxPenaltyTime", which configures the
|
||||
maximum penalty time increase in seconds, per penalty event. Set to -1 for
|
||||
no limit (the default), 0 to disable penalties altogether. ngIRCd doesn't
|
||||
use penalty increases higher than 2 seconds during normal operation, so
|
||||
values higher than 1 rarely make sense.
|
||||
Disabling (or reducing) penalties can greatly speed up "make check" runs
|
||||
for example, see below, but are mostly a debugging feature and normally
|
||||
not meant to be used on production systems!
|
||||
Some example timings running "make check" from my macOS workstation:
|
||||
- MaxPenaltyTime not set: 4:41,79s
|
||||
- "MaxPenaltyTime = 1": 3:14,71s
|
||||
- "MaxPenaltyTime = 0": 25,46s
|
||||
Closes #249 and #251.
|
||||
- Fix compilation without deprecated OpenSSL APIs. Thanks to Rosen Penev
|
||||
<rosenp@gmail.com> for the patch!
|
||||
Closes #252.
|
||||
- Update Xcode project for latest Xcode version (10.0)
|
||||
- Fix some compiler warnings of Apple Xcode/Clang
|
||||
- Allow a 5th parameter in WEBIRC. Thanks to "ItsOnlyBinary".
|
||||
Closes #247.
|
||||
- Update some more documentation files and source code comments.
|
||||
- Platforms.txt: Add and update systems.
|
||||
|
||||
ngIRCd 25~rc1 (2018-08-11)
|
||||
- Update config.guess (2018-03-08) and config.sub (2018-03-08) files.
|
||||
- Correctly retry to establish an outgoing connections when forking of the
|
||||
resolver sub-process failed (for example because of lack of free memory).
|
||||
Until now, such a connection was never retried once this error was hit.
|
||||
Thanks to Robert Obermeier for reporting this bug!
|
||||
Closes #243.
|
||||
- Fix a "use after free" bug which can be triggered on a newly established
|
||||
connection when the daemon handles an ERROR command received from the peer
|
||||
during client login. Thanks a lot to Joseph Bisch <joseph.bisch@gmail.com>
|
||||
for discovering and reporting this issue!
|
||||
- Only send TOPIC updates to a channel when the topic actually changed:
|
||||
This prevents the channel from becoming flooded by unnecessary TOPIC update
|
||||
messages, that can happen when IRC services try to enforce a certain topic
|
||||
but which is already set (at least on the local server), for example.
|
||||
Therefore still forward it to all servers, but don't inform local clients
|
||||
(still update setter and timestamp information, though).
|
||||
- Update Xcode project for latest Xcode version (9.2). This includes adding
|
||||
missing and deleting obsolete file references.
|
||||
- Handle user mode "C" ("Only users that share a channel are allowed to send
|
||||
messages") like user mode "b" ("block private messages and notices"): allow
|
||||
messages from servers, services, and IRC Operators, too. Change proposed by
|
||||
"wowaname" back in 2015 in #ngircd, thanks!
|
||||
- Fix some compiler warnings.
|
||||
- Add contrib/ngircd.logcheck: Some sample logcheck(8) rules.
|
||||
- Allow IRC Ops and remote servers to KILL service clients: such clients
|
||||
behave like regular users, therefore IRC operators and servers should be
|
||||
able to KILL them: for example to resolve nick collisions.
|
||||
Closes #242.
|
||||
- Don't forward KILLs to other servers if they've been blocked locally:
|
||||
This prevents clients from killing IRC services, for example.
|
||||
Closes #238 and #239.
|
||||
- Fix a cross-compiler issue related to the Get_Error() function.
|
||||
Closes #240 and #241.
|
||||
- Update ./doc/Services.txt, enhance configuration examples.
|
||||
|
||||
ngIRCd 24 (2017-01-20)
|
||||
|
||||
- Make sure that ./contrib/platformtest.sh aborts when ./autogen.sh fails.
|
||||
- Update config.guess (2016-10-02) and config.sub (2016-11-04) files.
|
||||
- Build Debian packages with OpenSSL instead of GnuTLS: OpenSSL allows
|
||||
to reload used certificates on runtime for example (which is very
|
||||
useful when using Let's Encrypt), and therefore is preferred. And
|
||||
explicitly specify the "source format".
|
||||
- Fix handling of connection pool allocation and enlargement: up to now,
|
||||
the daemon only enlarged its connection pool when accepting new incoming
|
||||
client or server connections, not when establishing new outgoing server
|
||||
links, which could lead to problems when hitting the configured limit,
|
||||
see "MaxConnections". Thanks to Lukas Braun (k00mi) for reporting this!
|
||||
Closes #231.
|
||||
|
||||
ngIRCd 24~rc1 (2017-01-07)
|
||||
- Enhance systemd service file, and install it in Debian package.
|
||||
- Update configuration of Debian package.
|
||||
- Log privilege violations and failed OPER request with log level "error"
|
||||
and send it to the "&SERVER" channel, too.
|
||||
- Immediately shut down connection when receiving an "ERROR" command,
|
||||
don't wait for the peer to close the connection. This allows the daemon
|
||||
to forward the received "ERROR" message in the network, instead of the
|
||||
very generic "client closed connection" message.
|
||||
- Fix sending of entry duration (no negative values!) when synchronizing
|
||||
"x-lines" (G-LINES).
|
||||
- List expiration (G-LINES): use same log level as when setting, and log
|
||||
this event to the &SERVER channel, too.
|
||||
- Explicitly forbid remote servers to modify "x-lines" (G-LINES) when the
|
||||
"AllowRemoteOper" configuration option isn't set, even when the command
|
||||
seems to originate from the remote server itself: this prevents GLINE's
|
||||
to become set during server handshake in this case (what wouldn't be
|
||||
possible during regular runtime when a remote IRC Op sends the command)
|
||||
and what can't be undone by IRC Ops later on (because of the missing
|
||||
"AllowRemoteOper" option) ...
|
||||
- Make scripts and init-files in ./contrib executable.
|
||||
- Fix building ngIRCd with OpenSSL 1.1. Thanks to Christoph Biedl
|
||||
<ngircd.anoy@manchmal.in-ulm.de> for the patch!
|
||||
- Fix code indentation warnings of gcc 6.2.
|
||||
- Update config.guess (2016-04-02) and config.sub (2016-03-30) files.
|
||||
- Fix warnings of the "shellcheck" linter in autogen.sh, contrib/ngindent
|
||||
and contrib/platformtest.sh.
|
||||
- Update Xcode project for latest Xcode version (8.0), and fix "duplicate
|
||||
symbols" error messages when building (linking) the binary.
|
||||
- Add "Documentation" variables to systemd configuration files.
|
||||
- Make sure that SYSCONFDIR is always set, which can be handy when
|
||||
using source code linters when ./configure hasn't been run already.
|
||||
- Add the new "PAMServiceName" configuration option to specify the name
|
||||
used as PAM service name. This setting allows to run multiple ngIRCd
|
||||
instances with different PAM configurations for each instance.
|
||||
Thanks to Christian Aistleitner <christian@quelltextlich.at> for the
|
||||
patch, closes #226.
|
||||
- Add an ".editorconfig" file to the project.
|
||||
- Travis-CI: use "container-based infrastructure".
|
||||
- Limit the number of message targets, and suppress duplicates: This
|
||||
prevents an user from flooding the server using commands like this:
|
||||
"PRIVMSG nick1,nick1,nick1,...".
|
||||
Duplicate targets are suppressed silently (channels and clients).
|
||||
In addition, the maximum number of targets per PRIVMSG, NOTICE, ...
|
||||
command are limited to MAX_HNDL_TARGETS (25). If there are more, the
|
||||
daemon sends the new 407 (ERR_TOOMANYTARGETS_MSG) numeric, containing
|
||||
the first target that hasn't been handled any more. Closes #187.
|
||||
- Test suite: Add new test for server-server logins.
|
||||
- contrib/ngindent: Fix shebang line.
|
||||
- Make contrib/platformtest.sh script more portable, and only show
|
||||
"runs=Y" when the test suite really has been passed successfully.
|
||||
- Code cleanup in the NJON handler and the function killing clients as
|
||||
well as the function sending messages to a "mask" (cleaner code, more
|
||||
fault tolerant, better code comments).
|
||||
- Update and enhance documentation: README file, doc/Platforms.txt,
|
||||
doc/Modes.txt, doc/Commands.txt, doc/PAM.txt.
|
||||
- Fix NJOIN not propagating "half ops" status: ngIRCd tested for the wrong
|
||||
prefix of "half ops" when processing NJOIN commands and therefore never
|
||||
classified a remote user as "half op".
|
||||
Thanks to wowaname for pointing this out on #ngircd!
|
||||
|
||||
ngIRCd 23 (2015-11-16)
|
||||
|
||||
- Explicitly cast time_t to long when printing it out: this prevents
|
||||
wrong sized data types on platforms where time_t doesn't equal a
|
||||
long any more, for example on OpenBSD (which would result in garbled
|
||||
output on those platforms).
|
||||
- contrib/Debian/changelog: Fix email address.
|
||||
- Documentation: Spelling fixes; update doc/Platforms.txt.
|
||||
|
||||
ngIRCd 23~rc1 (2015-09-06)
|
||||
- Add ".clang_complete" file, which is used by the "linter-clang" package
|
||||
of the Atom editor, for example.
|
||||
- Make server-to-server protocol more robust: ngIRCd now catches more
|
||||
errors on the server-to-server (S2S) protocol that could crash the
|
||||
daemon before. This hasn't been a real problem because the IRC S2S
|
||||
protocol is "trusted" by design, but the behavior is much better now.
|
||||
Thanks to wowaname on #ngircd for pointing this out!
|
||||
- Make platformtest.sh, autogen.sh, and ngircd.init more portable.
|
||||
- Enables "reproducible builds" for ngIRCd: Use the optional BIRTHTIME
|
||||
constant while building ngIRCd, which contains a time stamp for the
|
||||
"Birth Date" information, in seconds since the epoch.
|
||||
See <https://wiki.debian.org/ReproducibleBuilds>.
|
||||
- Update "contrib/ngircd.service" file for systemd.
|
||||
- INSTALL: Add deprecation notice for "PredefChannelsOnly" variable.
|
||||
- Use "NOTICE *" before registration instead of "NOTICE AUTH". "AUTH" is
|
||||
a valid nickname so sending notices to it is probably not a good idea.
|
||||
Use "*" as the target instead as done with numerics when the nick is not
|
||||
available. This mimics the behavior in Charybdis, IRCD-Hybrid, InspIRCd
|
||||
2.2, Plexus 4, etc. Closes #217.
|
||||
The "NoticeAuth" configuration variable (ngircd.conf) has been renamed
|
||||
to "NoticeBeforeRegistration" accordingly, but the old name is still
|
||||
supported for compatibility reasons.
|
||||
- Implement new channel mode "N" (regular users can't change their nick
|
||||
name while on this channel). Closes #214.
|
||||
- README, AUTHORS: Update mailing list and issue tracker URLs.
|
||||
- Remove doc/GIT.txt (it is outdated), update doc/Contributing.txt:
|
||||
ngIRCd uses GitHub, and Git itself is quite common today. So don't
|
||||
include an own Git "mini HowTo" any longer.
|
||||
- Specify session context for OpenSSL clients. This enables some OpenSSL
|
||||
clients, including Pidgin and stunnel 5.06, to reuse a session.
|
||||
Patch by Tom Ryder <tom@sanctum.geek.nz>, thanks! Closes #182.
|
||||
- Keep track of who placed bans, invites, and excepts.
|
||||
Idea and implementation by LucentW, Thanks! Closes #203.
|
||||
- Make setgroups(3) function optional: For example, Interix is missing
|
||||
this function, which prevented ngIRCd to build on this platform. When
|
||||
setgroups(3) isn't available, a warning message is issued on startup.
|
||||
- Implement numeric RPL_LISTSTART(321). lightIRC and other clients
|
||||
expecting RPL_LISTSTART should now behave correctly.
|
||||
Idea and implementation by LucentW, Thanks! Closes #207.
|
||||
- Update ngircd.conf.5: "CloakUserToNick" hides user _and_ real name.
|
||||
This closes #208.
|
||||
- Fix case insensitive pattern matching: Up to now, only the input
|
||||
string became lowercased and was then compared to the pattern -- which
|
||||
failed when the pattern itself wasn't all lowercase!
|
||||
- Streamline the effect of "MorePrivacy" option: Update documentation
|
||||
in ngircd.conf(5); don't hide channels for IRC Ops on LIST and don't
|
||||
hide IP addresses/hostnames on WHOIS when "MorePrivacy" is in effect.
|
||||
This closes #198.
|
||||
- IRC operators now can kick anyone when "OperCanMode" is set.
|
||||
Idea and implementation by LucentW, Thanks! Closes #202.
|
||||
- Implement user mode "I": Hide channels on WHOIS: this mode prevents
|
||||
ngIRCd from showing channels on WHOIS (IRC Operators can always see
|
||||
the channel list).
|
||||
Idea and implementation by LucentW, Thanks! Closes #197.
|
||||
- INVITE command: Implement ERR_USERNOTONSERV(504) numeric and make sure
|
||||
that the target user is on the same server when inviting other users
|
||||
to local ("&") channels.
|
||||
Idea by Cahata, thanks! Closes #183.
|
||||
- INVITE command: Enforce 1 second penalty time, which prevents flooding
|
||||
of the target client.
|
||||
This closes #186. Reported by Cahata, thanks!
|
||||
- MODE command: Always report channel creation time. Up to now when
|
||||
receiving a MODE command, ngIRCd only reported the channel creation
|
||||
time to clients that were members of the channel. This patch reports
|
||||
the channel creation time to all clients, regardless if they are joined
|
||||
to that channel or not. At least ircd-seven behaves like this.
|
||||
This closes #188. Reported by Cahata, thanks!
|
||||
- Update Xcode project for latest Xcode version (6.3).
|
||||
|
||||
ngIRCd 22.1 (2015-04-06)
|
||||
|
||||
- Update doc/Platforms.txt and doc/FAQ.txt.
|
||||
- Fix spelling of RPL_WHOISBOT message text.
|
||||
- Don't send nick name as default PART reason: No other IRC daemon seems
|
||||
to do this (today?). Closes #185.
|
||||
Reported by Cahata in #ngircd, thanks!
|
||||
- Fix "WHO #<chan>" showing invisible users and hiding all visible, the
|
||||
logic was reversed! This bug has been introduced by commit c74115f2,
|
||||
"Simplify mode checking on channels and users within a channel", ngIRCd
|
||||
releases 21, 21.1, and 22 are affected :-( Problem reported by Cahata
|
||||
in #ngircd, Thanks!
|
||||
- Fix typo in src/testsuite/README
|
||||
- Auth PING: Fix our information text for manual sending of "PONG". Up to
|
||||
now, ngIRCd doesn't send a valid IRC command at all, oops!
|
||||
- Auth PING: Fix internal time stamp conversion and don't send a prefix in
|
||||
our PING command. The prefix confuses WeeChat, at least, which doesn't
|
||||
send an appropriate PONG in the case ...
|
||||
Debugging and patch by "wowaname" on #ngircd, thanks!
|
||||
- Fix syntax of ERR_LISTFULL_MSG(478) numeric. Pointed out by "wowaname"
|
||||
in #ngircd, thanks!
|
||||
- Enhance debug messages while sending CHANINFO commands.
|
||||
- Reset "last try" timer when enabling a passive server. This results in
|
||||
a new connection attempt as soon as possible.
|
||||
- Change log message for "Can't resolve address" and for IP address
|
||||
forgeries.
|
||||
- doc/HowToRelease.txt: Add note about the bug tracker.
|
||||
- Update "CipherList" to not enable SSLv3 by default. Idea, initial patch,
|
||||
and testing by Christoph Biedl <ngircd.anoy@manchmal.in-ulm.de>.
|
||||
- Change ngIRCd test suite not to use DNS lookups: Different operating
|
||||
systems do behave quite differently when doing DNS lookups, for example
|
||||
"127.0.0.1" sometimes resolves to "localhost" and sometimes to
|
||||
"localhost.localdomain" (for example OpenBSD). And other OS resolve
|
||||
"localhost" to the real host name (for example Cygwin). So not using
|
||||
DNS at all makes the test site much more portable.
|
||||
|
||||
ngIRCd 22 (2014-10-11)
|
||||
|
||||
- Match all list patterns case-insensitive: this affects the invite-,
|
||||
ban-, and except lists, as well as G-Lines an K-Lines.
|
||||
Problem pointed out by "wowaname" on #ngircd, thanks!
|
||||
|
||||
ngIRCd 22~rc1 (2014-09-29)
|
||||
- Sync "except lists" between servers: Up to now, ban, invite, and G-Line
|
||||
lists have been synced between servers while linking -- but obviously
|
||||
nobody noticed that except list have been missing ever since. Until now.
|
||||
Thanks to "j4jackj", who reported this issue in #ngircd.
|
||||
- Allow longer user names (up to 63 characters) for authentication.
|
||||
- Correctly check that a server has a valid hostname and port, thanks to
|
||||
David Binderman <dcb314@hotmail.com> who reported this bug.
|
||||
- Fix the function which generates complete "IRC masks" from user input,
|
||||
don't destroy the source buffer and use all provided parts (nick, user,
|
||||
host name). This fixes GLINEs/KLINEs from not working in some situations.
|
||||
- Increase MAX_SERVERS from 16 to 64: There are installations out there
|
||||
that would like to configure more than 16 links per server, so increase
|
||||
this limit. Best would be to get rid of MAX_SERVERS altogether and make
|
||||
if fully dynamic, but start with this quick and dirty hack ...
|
||||
- Debian: Don't adjust path names that are correct by default and correctly
|
||||
set and use "docdir".
|
||||
- Update config.guess and config.sub to recent versions.
|
||||
- Test suite/platformtest.sh: Detect when tests have been skipped.
|
||||
- doc/Bopm.txt: Update "connregex" and "kline" for current ngIRCd.
|
||||
- Allow "DefaultUserModes" to set all possible modes, including modes only
|
||||
settable by IRC Operators.
|
||||
- Spoofed prefixes: Really kill connection on non-server links.
|
||||
- Implement user mode "F": "relaxed flood protection". Clients with mode
|
||||
"F" set are allowed to rapidly send data to the daemon. This mode is only
|
||||
settable by IRC Operators and can cause problems in the network -- so be
|
||||
careful and only set it on "trusted" clients!
|
||||
User mode "F" is used by Bahamut for this purpose, for example.
|
||||
- Handle "throttling" in a single function: ngIRCd implements "command
|
||||
throttling" and "bps throttling" (bytes per second). The states are
|
||||
detected in different functions, Conn_Handler() and Read_Request(), but
|
||||
handle the actual "throttling" in a common function: this enables us to
|
||||
guarantee consistent behavior and to disable throttling for special
|
||||
connections in only one place
|
||||
- Use server password when PAM is compiled in but disabled.
|
||||
- Streamline punctuation of log messages.
|
||||
- Return ISUPPORT(005) numerics on "VERSION". This is how ircd-seven,
|
||||
Charybdis, Hybrid, and InspIRCd behave, for example.
|
||||
- configure: Only link "contrib/Debian" if it exists, which isn't the case
|
||||
on "VPATH builds", for example.
|
||||
- Show the account name in WHOIS. This uses the same numeric as Charybdis
|
||||
and ircu families: WHOISLOGGEDIN(330).
|
||||
- Pattern matching: Remove "range matching" in our pattern matching code
|
||||
using the "[...]" syntax, because [ and ] are valid characters in nick
|
||||
names and one has to quote them currently using the "\" character, which
|
||||
is quite unexpected for users.
|
||||
- platformtest.sh: New option "-x", don't regenerate build system and
|
||||
allow using separate source and build trees.
|
||||
- Test suite: explicitly enable glibc memory checking.
|
||||
- Make "MODE -k" handling more robust and compatible, send "fake '*' key"
|
||||
in all replies.
|
||||
- Update configure.ng: ngIRCd requires GNU autoconf 2.61 for generating its
|
||||
build system, so update the build system accordingly and implement all
|
||||
changes that autoupdate(1) suggests: Update AC_PREREQ and AC_INIT, use
|
||||
AC_LINK_IFELSE, AC_RUN_IFELSE, and AC_COMPILE_IFELSE, and remove
|
||||
AC_TYPE_SIGNAL (we don't use RETSIGTYPE).
|
||||
- portabtest: Actually test the functions snprintf(), strlcpy(), strlcat(),
|
||||
and vsnprintf() for correctness, not only existence (which was quite
|
||||
useless, because if they weren't available, the program could not have
|
||||
been linked at all ...).
|
||||
- Implement new configuration option "Network": it is used to set the
|
||||
(completely optional) "network name", to which this instance of the
|
||||
daemon belongs. When set, this name is used in the ISUPPORT(005) numeric
|
||||
which is sent to all clients connecting to the server after logging in.
|
||||
- Update doc/Platforms.txt.
|
||||
- Various code cleanups, remove unused code, streamline error handling.
|
||||
Remove all imp.h and exp.h header files, support non-standard vsnprintf()
|
||||
return codes, and fix some K&R C portability issues. Streamline
|
||||
DEBUG_ARRAY, DEBUG_BUFFER, DEBUG_IO, DEBUG_ZIP definitions.
|
||||
- Increase penalty time to 10 seconds when handling OPER commands with an
|
||||
invalid password.
|
||||
|
||||
ngIRCd 21.1 (2014-03-25)
|
||||
|
||||
@@ -714,7 +220,7 @@ ngIRCd 20.3 (2013-08-23)
|
||||
ngIRCd 20.2 (2013-02-15)
|
||||
|
||||
- Security: Fix a denial of service bug in the function handling KICK
|
||||
commands that could be used by arbitrary users to crash the daemon
|
||||
commands that could be used by arbitrary users to to crash the daemon
|
||||
(CVE-2013-1747).
|
||||
- WHO command: Use the currently "displayed hostname" (which can be cloaked!)
|
||||
for hostname matching, not the real one. In other words: don't display all
|
||||
@@ -914,7 +420,7 @@ ngIRCd 20 (2012-12-17)
|
||||
the hash function. When "CloakHostSalt" is not set (the default), a
|
||||
random salt will be generated after each server restart. (Closes #133)
|
||||
|
||||
ngIRCd 19.2 (2012-06-19)
|
||||
ngIRCd Release 19.2 (2012-06-19)
|
||||
|
||||
- doc/Capabilities.txt: document "multi-prefix" capability
|
||||
|
||||
@@ -938,13 +444,13 @@ ngIRCd 19.2 (2012-06-19)
|
||||
"CC=xxx MAKE=yyy ./platformtest.sh" calling convention.
|
||||
- Add instructions for setting up Atheme IRC services.
|
||||
- Implement support for IRC capability handling, the new "CAP" command,
|
||||
and capability "multi-prefix" which allows both the NAME and WHO command
|
||||
and capablity "multi-prefix" which allows both the NAME and WHO command
|
||||
handlers to return more than one "class prefix" to the client.
|
||||
- Update Xcode project files: reference missing documentation files.
|
||||
- Fix: Don't ignore "permission denied" errors when enabling chroot.
|
||||
- FAQ: enhance description of chroot setup.
|
||||
|
||||
ngIRCd 19.1 (2012-03-19)
|
||||
ngIRCd Release 19.1 (2012-03-19)
|
||||
|
||||
- Fix gcc warning (v4.6.3), initialize "list" variable to NULL.
|
||||
- Fix typos: "recieved" -> "received", "Please not" -> "Please note",
|
||||
@@ -954,7 +460,7 @@ ngIRCd 19.1 (2012-03-19)
|
||||
- getpid.sh: Fix test case error for Debian using sbuild(1).
|
||||
- Don't log "ngIRCd hello message" two times when starting up.
|
||||
|
||||
ngIRCd 19 (2012-02-29)
|
||||
ngIRCd Release 19 (2012-02-29)
|
||||
|
||||
- Update build system: bump config.guess and config.sub files used by
|
||||
GNU autoconf/automake to recent versions.
|
||||
@@ -1104,7 +610,7 @@ ngIRCd 19 (2012-02-29)
|
||||
asynchronous nature of the IRC protocol. So don't break server-
|
||||
links, only log a message and ignore the command. (Closes #113)
|
||||
|
||||
ngIRCd 18 (2011-07-10)
|
||||
ngIRCd Release 18 (2011-07-10)
|
||||
|
||||
- Update timestamp of ngircd(8) manual page.
|
||||
- Add preliminary ngIRCd protocol module for Anope 1.9 to contrib/Anope/.
|
||||
@@ -1214,7 +720,7 @@ ngIRCd 18 (2011-07-10)
|
||||
only relevant when a trusted server on a server-server link sends invalid
|
||||
commands).
|
||||
|
||||
ngIRCd 17.1 (2010-12-19)
|
||||
ngIRCd Release 17.1 (2010-12-19)
|
||||
|
||||
- --configtest: remember if MOTD is configured by file or phrase
|
||||
- Enhance log messages when establishing server links a little bit
|
||||
@@ -1230,7 +736,7 @@ ngIRCd 17.1 (2010-12-19)
|
||||
- New numeric 329: get channel creation time on "MODE #chan" commands
|
||||
- Save channel creation time; new function Channel_CreationTime()
|
||||
|
||||
ngIRCd 17 (2010-11-07)
|
||||
ngIRCd Release 17 (2010-11-07)
|
||||
|
||||
- doc: change path names in sample-ngircd.conf depending on sysconfdir
|
||||
- Fix up generation and distribution of sample-ngircd.conf
|
||||
@@ -1238,7 +744,7 @@ ngIRCd 17 (2010-11-07)
|
||||
- contrib/platformtest.sh: make command name quoting consistent
|
||||
|
||||
ngIRCd 17~rc3 (2010-10-27)
|
||||
- Xcode builds: detect version number correctly, updated project file
|
||||
- Xcode builds: detect version number correctly, updateed project file
|
||||
to use the Mac OS X 10.5.x SDK, disable pam_fail_delay() because it
|
||||
is only available starting with Mac OS X 10.6, and generate a default
|
||||
PAM configuration for the Mac OS X Installer.app package of ngIRCd.
|
||||
@@ -1250,7 +756,7 @@ ngIRCd 17 (2010-11-07)
|
||||
ngIRCd 17~rc2 (2010-10-25)
|
||||
- ZeroConf: include header files missing since commit a988bbc86a.
|
||||
- Generate ngIRCd version number from GIT tag.
|
||||
- Make source code compatible with ansi2knr again. This allows to compile
|
||||
- Make sourcecode compatible with ansi2knr again. This allows to compile
|
||||
ngIRCd using a pre-ANSI K&R C compiler again.
|
||||
- ./configure: check if C compiler can compile ISO Standard C.
|
||||
- ./configure: check support for C prototypes again.
|
||||
@@ -1266,7 +772,7 @@ ngIRCd 17 (2010-11-07)
|
||||
Howl, Avahi or on Mac OS X).
|
||||
- New configuration option "SyslogFacility" to define the syslog "facility"
|
||||
(the "target"), to which ngIRCd should send its log messages.
|
||||
Possible values are system dependent, but most probably "auth", "daemon",
|
||||
Possible values are system dependant, but most probably "auth", "daemon",
|
||||
"user" and "local1" through "local7" are possible values; see syslog(3).
|
||||
Default is "local5" for historical reasons.
|
||||
- Dump the "internal server state" (configured servers, established
|
||||
@@ -1287,7 +793,7 @@ ngIRCd 17 (2010-11-07)
|
||||
- Make configure switch "--docdir" work (closes: #108).
|
||||
- Reformat and update FAQ.txt a little bit.
|
||||
- INSTALL: mention SSL, IPv6, and changed handling of MotdFile.
|
||||
- Change MOTD file handling: ngIRCd now caches the contents of the MOTD
|
||||
- Change MOTD file handling: ngIRCd now caches the contens of the MOTD
|
||||
file, so the daemon now requires a HUP signal or REHASH command to
|
||||
re-read the MOTD file when its content changed.
|
||||
- Startup: open /dev/null before chroot'ing the daemon.
|
||||
@@ -1311,7 +817,7 @@ ngIRCd 17 (2010-11-07)
|
||||
- Fix "beeing" typo ...
|
||||
- SSL/TLS: fix bogus "socket closed" error message.
|
||||
|
||||
ngIRCd 16 (2010-05-02)
|
||||
ngIRCd Release 16 (2010-05-02)
|
||||
|
||||
- doc/SSL: remove line continuation marker
|
||||
|
||||
@@ -1323,14 +829,14 @@ ngIRCd 16 (2010-05-02)
|
||||
- Include netinet/{in.h, in_systm.h} when checking for netinet/ip.h
|
||||
- Only include <netinet/in_systm.h> if it exists
|
||||
- Updated doc/Platforms.txt
|
||||
- Enhance connection statistics counters: display total number of served
|
||||
- Enhace connection statistics counters: display total number of served
|
||||
connections on daemon shutdown and when a new client connects using
|
||||
the new numeric RPL_STATSCONN (250).
|
||||
|
||||
ngIRCd 16~rc1 (2010-03-25)
|
||||
- Various fixes to the build system and code cleanups.
|
||||
- contrib/platformtest.sh: Only show latest commit.
|
||||
- Updated doc/Platforms.txt, added new README-Interix.txt documenting
|
||||
- Updatet doc/Platforms.txt, added new README-Interix.txt documenting
|
||||
how to tun ngIRCd on Microsoft Services for UNIX (MS SFU, MS SUA).
|
||||
- Updated links to the ngIRCd homepage (bug tracker, mailing list).
|
||||
- Added missing modes to USERMODES #define
|
||||
@@ -1351,14 +857,14 @@ ngIRCd 16 (2010-05-02)
|
||||
every channel, and c) remote clients using a server not supporting this
|
||||
mode are not checked either and therefore always allowed to join.
|
||||
|
||||
ngIRCd 15 (2009-11-07)
|
||||
ngIRCd Release 15 (2009-11-07)
|
||||
|
||||
- "ngircd --configtest": print SSL configuration options even when unset.
|
||||
|
||||
ngIRCd 15~rc1 (2009-10-15)
|
||||
- Do not add default listening port (6667) if SSL ports were specified, so
|
||||
ngIRCd can be configured to only accept SSL-encrypted connections now.
|
||||
- Enable IRC operators to use the IRC command SQUIT (instead of the already
|
||||
- Enable IRC operators to use the IRC command SQUIT (insted of the already
|
||||
implemented but non-standard DISCONNECT command).
|
||||
- New configuration option "AllowRemoteOper" (disabled by default) that
|
||||
enables remote IRC operators to use the IRC commands SQUIT and CONNECT
|
||||
@@ -1377,7 +883,7 @@ ngIRCd 15 (2009-11-07)
|
||||
- Fix a few error handling glitches for SSL/TLS connections.
|
||||
- Minor fixes to manual pages and documentation.
|
||||
|
||||
ngIRCd 14.1 (2009-05-05)
|
||||
ngIRCd Release 14.1 (2009-05-05)
|
||||
|
||||
- Security: fix remotely triggerable crash in SSL/TLS code.
|
||||
- BSD start script contrib/ngircd.sh has been renamed to ngircd-bsd.sh.
|
||||
@@ -1390,7 +896,7 @@ ngIRCd 14.1 (2009-05-05)
|
||||
- Fix server list announcement.
|
||||
- Do not remove host names from info text.
|
||||
|
||||
ngIRCd 14 (2009-04-20)
|
||||
ngIRCd Release 14 (2009-04-20)
|
||||
|
||||
- Display IPv6 addresses as "[<addr>]" when accepting connections.
|
||||
|
||||
@@ -1412,9 +918,9 @@ ngIRCd 14 (2009-04-20)
|
||||
- Fix memory leak when a encrypted and compressed server link goes down.
|
||||
(closes bug #95, reported by Christoph, fiesh@fiesh.homeip.net)
|
||||
- Fix handling of channels containing dots.
|
||||
(closes bug #93, reported by Gonosz Csiga)
|
||||
(closes ug #93, reported by Gonosz Csiga)
|
||||
|
||||
ngIRCd 13 (2008-12-25)
|
||||
ngIRCd Release 13 (2008-12-25)
|
||||
|
||||
- Updated documentation, especially doc/Services.txt and doc/SSL.txt.
|
||||
- Make the test suite work on OpenSolaris.
|
||||
@@ -1505,7 +1011,7 @@ ngIRCd 0.11.0 (2008-01-15)
|
||||
ngIRCd 0.11.0-pre2 (2008-01-07)
|
||||
- SECURITY: IRC_PART could reference invalid memory, causing
|
||||
ngircd to crash [from HEAD]. (CVE-2008-0285)
|
||||
|
||||
|
||||
ngIRCd 0.11.0-pre1 (2008-01-02)
|
||||
- Use dotted-decimal IP address if host name is >= 64.
|
||||
- Add support for /STAT u (server uptime) command.
|
||||
@@ -1539,7 +1045,7 @@ ngIRCd 0.10.4 (2008-01-07)
|
||||
|
||||
- SECURITY: IRC_PART could reference invalid memory, causing
|
||||
ngircd to crash [from HEAD]. (CVE-2008-0285)
|
||||
|
||||
|
||||
ngIRCd 0.10.3 (2007-08-01)
|
||||
|
||||
- SECURITY: Fixed a severe bug in handling JOIN commands, which could
|
||||
@@ -1642,7 +1148,7 @@ ngIRCd 0.9.0 (2005-07-24)
|
||||
- Fixed ./configure test for TCP Wrappers: now it runs on Mac OS X as well.
|
||||
- Enhanced configure script: now you can pass an (optional) search path
|
||||
to all --with-XXX parameters, e. g. "--with-ident=/opt/ident".
|
||||
- Removed typedefs for the native C data types.
|
||||
- Removed typedefs for the native C datatypes.
|
||||
Use stdbool.h / inttypes.h if available.
|
||||
- New configuration option "OperServerMode" to enable a workaround needed
|
||||
when running an network with ircd2 servers and "OperCanUseMode" enabled
|
||||
@@ -1823,7 +1329,7 @@ ngIRCd 0.7.0 (2003-05-01)
|
||||
to add a new server (ngIRCd tries to connect new servers only once!).
|
||||
- Added DISCONNECT command ("DISCONNECT <name>") to disable servers.
|
||||
- Restructured the documentation: Now the main language is English. The
|
||||
German documentation has been removed (until there is a maintainer).
|
||||
german documentation has been removed (until there is a maintainer).
|
||||
- Enhanced killing of users caused by a nickname collision.
|
||||
- Better error detection for status code ("numerics") forwarding.
|
||||
- Moved tool functions to own library: "libngtool".
|
||||
@@ -1845,7 +1351,7 @@ ngIRCd 0.7.0 (2003-05-01)
|
||||
- Documentation is now installed in $(datadir)/doc/ngircd.
|
||||
- Enhanced handling of NJOIN in case of nick collisions.
|
||||
|
||||
ngIRCd 0.6.1 (2003-01-21)
|
||||
ngIRCd 0.6.1, 2003-01-21
|
||||
|
||||
- Fixed KILL: you can't crash the server by killing yourself any more,
|
||||
ngIRCd no longer sends a QUIT to other servers after the KILL, and you
|
||||
@@ -1864,17 +1370,17 @@ ngIRCd 0.6.1 (2003-01-21)
|
||||
member when changing his channel user modes which could crash ngIRCd.
|
||||
|
||||
|
||||
Older changes (sorry, only available in German language):
|
||||
Older changes (sorry, only available in german language):
|
||||
|
||||
ngIRCd 0.6.0, 24.12.2002
|
||||
ngIRCd 0.6.0, 2002-12-24
|
||||
|
||||
ngIRCd 0.6.0-pre2, 23.12.2002
|
||||
ngIRCd 0.6.0-pre2, 2002-12-23
|
||||
- neuer Numeric 005 ("Features") beim Connect.
|
||||
- LUSERS erweitert: nun wird die maximale Anzahl der lokalen und globalen
|
||||
Clients, die dem Server bzw. im Netzwerk seit dem letzten (Re-)Start
|
||||
dem Server gleichzeitig bekannt waren, angezeigt.
|
||||
|
||||
ngIRCd 0.6.0-pre1, 18.12.2002
|
||||
ngIRCd 0.6.0-pre1, 2002-12-18
|
||||
- beim Schliessen einer Verbindung zeigt der Server nun vor dem ERROR
|
||||
noch eine Statistik ueber die empfangene und gesendete Datenmenge an.
|
||||
- der Server wartet bei einer eingehenden Verbindung nun laenger auf den
|
||||
@@ -1925,7 +1431,7 @@ ngIRCd 0.6.0, 24.12.2002
|
||||
|
||||
ngIRCd 0.5.4, 24.11.2002
|
||||
|
||||
- Fehler-Handling von connect() gefixed: der Server kann sich nun auch
|
||||
- Fehler-Handling von connect() gefixed: der Server kann sich nun auch
|
||||
unter A/UX wieder zu anderen verbinden.
|
||||
- in den Konfigurationsvariablen ServerUID und ServerGID kann nun nicht
|
||||
nur die numerische ID, sondern auch der Name des Users bzw. der Gruppe
|
||||
@@ -2037,7 +1543,7 @@ ngIRCd 0.5.0, 20.09.2002
|
||||
- ADMIN-Befehl implementiert. Die Daten hierzu werden in der Konfig-Datei
|
||||
im [Global]-Abschnitt mit den Variablen "AdminInfo1", "AdminInfo2" und
|
||||
"AdminEMail" konfiguriert.
|
||||
|
||||
|
||||
ngIRCd 0.4.3, 11.06.2002
|
||||
|
||||
- Bei PRIVMSG und NOTICE hat der ngIRCd nicht ueberpruft, ob das Ziel
|
||||
|
350
INSTALL
Normal file
350
INSTALL
Normal file
@@ -0,0 +1,350 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2014 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- INSTALL --
|
||||
|
||||
|
||||
I. Upgrade Information
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Differences to version 20.x
|
||||
|
||||
- Starting with ngIRCd 21, the ciphers used by SSL are configurable and
|
||||
default to HIGH:!aNULL:@STRENGTH (OpenSSL) or SECURE128 (GnuTLS).
|
||||
Previous version were using the OpenSSL or GnuTLS defaults, DEFAULT
|
||||
and NORMAL respectively.
|
||||
|
||||
- When adding GLINE's or KLINE's to ngIRCd 21 (or newer), all clients matching
|
||||
the new mask will be KILL'ed. This was not the case with earlier versions
|
||||
that only added the mask but didn't kill already connected users.
|
||||
|
||||
Differences to version 19.x
|
||||
|
||||
- Starting with ngIRCd 20, users can "cloak" their hostname only when the
|
||||
configuration variable "CloakHostModeX" (introduced in 19.2) is set.
|
||||
Otherwise, only IRC operators, other servers, and services are allowed to
|
||||
set mode +x. This prevents regular users from changing their hostmask to
|
||||
the name of the IRC server itself, which confused quite a few people ;-)
|
||||
|
||||
Differences to version 17
|
||||
|
||||
- Support for ZeroConf/Bonjour/Rendezvous service registration has been
|
||||
removed. The configuration option "NoZeroconf" is no longer available.
|
||||
|
||||
- The structure of ngircd.conf has been cleaned up and three new configuration
|
||||
sections have been introduced: [Limits], [Options], and [SSL].
|
||||
Lots of configuration variables stored in the [Global] section are now
|
||||
deprecated there and should be stored in one of these new sections (but
|
||||
still work in [Global]):
|
||||
"AllowRemoteOper" -> [Options]
|
||||
"ChrootDir" -> [Options]
|
||||
"ConnectIPv4" -> [Options]
|
||||
"ConnectIPv6" -> [Options]
|
||||
"ConnectRetry" -> [Limits]
|
||||
"MaxConnections" -> [Limits]
|
||||
"MaxConnectionsIP" -> [Limits]
|
||||
"MaxJoins" -> [Limits]
|
||||
"MaxNickLength" -> [Limits]
|
||||
"NoDNS" -> [Options], and renamed to "DNS"
|
||||
"NoIdent" -> [Options], and renamed to "Ident"
|
||||
"NoPAM" -> [Options], and renamed to "PAM"
|
||||
"OperCanUseMode" -> [Options]
|
||||
"OperServerMode" -> [Options]
|
||||
"PingTimeout" -> [Limits]
|
||||
"PongTimeout" -> [Limits]
|
||||
"PredefChannelsOnly" -> [Options]
|
||||
"SSLCertFile" -> [SSL], and renamed to "CertFile"
|
||||
"SSLDHFile" -> [SSL], and renamed to "DHFile"
|
||||
"SSLKeyFile" -> [SSL], and renamed to "KeyFile"
|
||||
"SSLKeyFilePassword" -> [SSL], and renamed to "KeyFilePassword"
|
||||
"SSLPorts" -> [SSL], and renamed to "Ports"
|
||||
"SyslogFacility" -> [Options]
|
||||
"WebircPassword" -> [Options]
|
||||
You should adjust your ngircd.conf and run "ngircd --configtest" to make
|
||||
sure that your settings are correct and up to date!
|
||||
|
||||
Differences to version 16
|
||||
|
||||
- Changes to the "MotdFile" specified in ngircd.conf now require a ngircd
|
||||
configuration reload to take effect (HUP signal, REHASH command).
|
||||
|
||||
Differences to version 0.9.x
|
||||
|
||||
- The option of the configure script to enable support for Zeroconf/Bonjour/
|
||||
Rendezvous/WhateverItIsNamedToday has been renamed:
|
||||
--with-rendezvous -> --with-zeroconf
|
||||
|
||||
Differences to version 0.8.x
|
||||
|
||||
- The maximum length of passwords has been raised to 20 characters (instead
|
||||
of 8 characters). If your passwords are longer than 8 characters then they
|
||||
are cut at an other position now.
|
||||
|
||||
Differences to version 0.6.x
|
||||
|
||||
- Some options of the configure script have been renamed:
|
||||
--disable-syslog -> --without-syslog
|
||||
--disable-zlib -> --without-zlib
|
||||
Please call "./configure --help" to review the full list of options!
|
||||
|
||||
Differences to version 0.5.x
|
||||
|
||||
- Starting with version 0.6.0, other servers are identified using asynchronous
|
||||
passwords: therefore the variable "Password" in [Server]-sections has been
|
||||
replaced by "MyPassword" and "PeerPassword".
|
||||
|
||||
- New configuration variables, section [Global]: MaxConnections, MaxJoins
|
||||
(see example configuration file "doc/sample-ngircd.conf"!).
|
||||
|
||||
|
||||
II. Standard Installation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
ngIRCd is developed for UNIX-based systems, which means that the installation
|
||||
on modern UNIX-like systems that are supported by GNU autoconf and GNU
|
||||
automake ("configure") should be no problem.
|
||||
|
||||
The normal installation procedure after getting (and expanding) the source
|
||||
files (using a distribution archive or GIT) is as following:
|
||||
|
||||
0) Satisfy prerequisites
|
||||
1) ./autogen.sh [only necessary when using GIT]
|
||||
2) ./configure
|
||||
3) make
|
||||
4) make install
|
||||
|
||||
(Please see details below!)
|
||||
|
||||
Now the newly compiled executable "ngircd" is installed in its standard
|
||||
location, /usr/local/sbin/.
|
||||
|
||||
The next step is to configure and afterwards starting the daemon. Please
|
||||
have a look at the ngircd(8) and ngircd.conf(5) manual pages for details
|
||||
and all possible options -- and don't forget to run "ngircd --configtest"
|
||||
to validate your configuration file!
|
||||
|
||||
If no previous version of the configuration file exists (the standard name
|
||||
is /usr/local/etc/ngircd.conf), a sample configuration file containing all
|
||||
possible options will be installed there. You'll find its template in the
|
||||
doc/ directory: sample-ngircd.conf.
|
||||
|
||||
|
||||
0): Satisfy prerequisites
|
||||
|
||||
When building from source, you'll need some other software to build ngIRCd:
|
||||
for example a working C compiler, make tool, GNU automake and autoconf (only
|
||||
when not using a distribution archive), and a few libraries depending on the
|
||||
features you want to compile in (like IDENT support, SSL, and PAM).
|
||||
|
||||
If you are using one of the "big" operating systems or Linux distributions,
|
||||
you can use the following commands to install all the required packages to
|
||||
build the sources including all optional features and to run the test suite:
|
||||
|
||||
* RedHat / Fedora based distributions:
|
||||
|
||||
yum install \
|
||||
autoconf automake expect gcc glibc-devel gnutls-devel \
|
||||
libident-devel make pam-devel tcp_wrappers-devel telnet zlib-devel
|
||||
|
||||
* Debian / Ubuntu based distributions:
|
||||
|
||||
apt-get install \
|
||||
autoconf automake build-essential expect libgnutls-dev \
|
||||
libident-dev libpam-dev libwrap0-dev libz-dev telnet
|
||||
|
||||
|
||||
1): "autogen.sh"
|
||||
|
||||
The first step, autogen.sh, is only necessary if the configure-script isn't
|
||||
already generated. This never happens in official ("stable") releases in
|
||||
tar.gz-archives, but when using GIT.
|
||||
|
||||
This step is therefore only interesting for developers.
|
||||
|
||||
autogen.sh produces the Makefile.in's, which are necessary for the configure
|
||||
script itself, and some more files for make. To run autogen.sh you'll need
|
||||
GNU autoconf and GNU automake: at least autoconf 2.61 and automake 1.10 are
|
||||
requird, newer is better. But don't use automake 1.12 or newer for creating
|
||||
distribution archives: it will work but lack "de-ANSI-fucation" support in the
|
||||
generated Makefile's! Stick with automake 1.11.x for this purpose ...
|
||||
So automake 1.11.x and autoconf 2.67+ is recommended.
|
||||
|
||||
Again: "end users" do not need this step and neither need GNU autoconf nor GNU
|
||||
automake at all!
|
||||
|
||||
|
||||
2): "./configure"
|
||||
|
||||
The configure-script is used to detect local system dependencies.
|
||||
|
||||
In the perfect case, configure should recognize all needed libraries, header
|
||||
files and so on. If this shouldn't work, "./configure --help" shows all
|
||||
possible options.
|
||||
|
||||
In addition, you can pass some command line options to "configure" to enable
|
||||
and/or disable some features of ngIRCd. All these options are shown using
|
||||
"./configure --help", too.
|
||||
|
||||
Compiling a static binary will avoid you the hassle of feeding a chroot dir
|
||||
(if you want use the chroot feature). Just do something like:
|
||||
CFLAGS=-static ./configure [--your-options ...]
|
||||
Then you can use a void directory as ChrootDir (like OpenSSH's /var/empty).
|
||||
|
||||
|
||||
3): "make"
|
||||
|
||||
The make command uses the Makefiles produced by configure and compiles the
|
||||
ngIRCd daemon.
|
||||
|
||||
|
||||
4): "make install"
|
||||
|
||||
Use "make install" to install the server and a sample configuration file on
|
||||
the local system. Normally, root privileges are necessary to complete this
|
||||
step. If there is already an older configuration file present, it won't be
|
||||
overwritten.
|
||||
|
||||
These files and folders will be installed by default:
|
||||
|
||||
- /usr/local/sbin/ngircd: executable server
|
||||
- /usr/local/etc/ngircd.conf: sample configuration (if not already present)
|
||||
- /usr/local/share/doc/ngircd/: documentation
|
||||
- /usr/local/share/man/: manual pages
|
||||
|
||||
|
||||
III. Additional features
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The following optional features can be compiled into the daemon by passing
|
||||
options to the "configure" script. Most options can handle a <path> argument
|
||||
which will be used to search for the required libraries and header files in
|
||||
the given paths ("<path>/lib/...", "<path>/include/...") in addition to the
|
||||
standard locations.
|
||||
|
||||
* Syslog Logging (autodetected by default):
|
||||
--with-syslog[=<path>] / --without-syslog
|
||||
|
||||
Enable (disable) support for logging to "syslog", which should be
|
||||
available on most modern UNIX-like operating systems by default.
|
||||
|
||||
* ZLib Compression (autodetected by default):
|
||||
--with-zlib[=<path>] / --without-zlib
|
||||
|
||||
Enable (disable) support for compressed server-server links.
|
||||
The Z compression library ("libz") is required for this option.
|
||||
|
||||
* IO Backend (autodetected by default):
|
||||
--with-select[=<path>] / --without-select
|
||||
--with-poll[=<path>] / --without-poll
|
||||
--with-devpoll[=<path>] / --without-devpoll
|
||||
--with-epoll[=<path>] / --without-epoll
|
||||
--with-kqueue[=<path>] / --without-kqueue
|
||||
|
||||
ngIRCd can use different IO "backends": the "old school" select() and poll()
|
||||
API which should be supported by most UNIX-like operating systems, or the
|
||||
more efficient and flexible epoll() (Linux >=2.6), kqueue() (BSD) and
|
||||
/dev/poll APIs.
|
||||
By default the IO backend is autodetected, but you can use "--without-xxx"
|
||||
to disable a more enhanced API.
|
||||
When using the epoll() API, support for select() is compiled in as well by
|
||||
default to enable the binary to run on older Linux kernels (<2.6), too.
|
||||
|
||||
* IDENT-Support:
|
||||
--with-ident[=<path>]
|
||||
|
||||
Include support for IDENT ("AUTH") lookups. The "ident" library is
|
||||
required for this option.
|
||||
|
||||
* TCP-Wrappers:
|
||||
--with-tcp-wrappers[=<path>]
|
||||
|
||||
Include support for Wietse Venemas "TCP Wrappers" to limit client access
|
||||
to the daemon, for example by using "/etc/hosts.{allow|deny}".
|
||||
The "libwrap" is required for this option.
|
||||
|
||||
* PAM:
|
||||
--with-pam[=<path>]
|
||||
|
||||
Enable support for PAM, the Pluggable Authentication Modules library.
|
||||
See doc/PAM.txt for details.
|
||||
|
||||
* SSL:
|
||||
--with-openssl[=<path>]
|
||||
--with-gnutls[=<path>]
|
||||
|
||||
Enable support for SSL/TLS using OpenSSL or gnutls libraries.
|
||||
See doc/SSL.txt for details.
|
||||
|
||||
* IPv6:
|
||||
--enable-ipv6
|
||||
|
||||
Adds support for version 6 of the Internet Protocol.
|
||||
|
||||
|
||||
IV. Useful make-targets
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The Makefile produced by the configure-script contains always these useful
|
||||
targets:
|
||||
|
||||
- clean: delete every product from the compiler/linker
|
||||
next step: -> make
|
||||
|
||||
- distclean: the above plus erase all generated Makefiles
|
||||
next step: -> ./configure
|
||||
|
||||
- maintainer-clean: erase all automatic generated files
|
||||
next step: -> ./autogen.sh
|
||||
|
||||
|
||||
V. Sample configuration file ngircd.conf
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In the sample configuration file, there are comments beginning with "#" OR
|
||||
";" -- this is only for the better understanding of the file.
|
||||
|
||||
The file is separated in five blocks: [Global], [Features], [Operator],
|
||||
[Server], and [Channel].
|
||||
|
||||
In the [Global] section, there is the main configuration like the server
|
||||
name and the ports, on which the server should be listening. Options in
|
||||
the [Features] section enable or disable functionality in the daemon.
|
||||
IRC operators of this server are defined in [Operator] blocks, remote
|
||||
servers are configured in [Server] sections, and [Channel] blocks are
|
||||
used to configure pre-defined ("persistent") IRC channels.
|
||||
|
||||
The meaning of the variables in the configuration file is explained in the
|
||||
"doc/sample-ngircd.conf", which is used as sample configuration file in
|
||||
/usr/local/etc after running "make install" (if you don't already have one)
|
||||
and in the ngircd.conf(5) manual page.
|
||||
|
||||
|
||||
VI. Command line options
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
These parameters could be passed to the ngIRCd:
|
||||
|
||||
-f, --config <file>
|
||||
The daemon uses the file <file> as configuration file rather than
|
||||
the standard configuration /usr/local/etc/ngircd.conf.
|
||||
|
||||
-n, --nodaemon
|
||||
ngIRCd should be running as a foreground process.
|
||||
|
||||
-p, --passive
|
||||
Server-links won't be automatically established.
|
||||
|
||||
-t, --configtest
|
||||
Reads, validates and dumps the configuration file as interpreted
|
||||
by the server. Then exits.
|
||||
|
||||
Use "--help" to see a short help text describing all available parameters
|
||||
the server understands, with "--version" the ngIRCd shows its version
|
||||
number. In both cases the server exits after the output.
|
||||
|
||||
Please see the ngircd(8) manual page for complete details!
|
419
INSTALL.md
419
INSTALL.md
@@ -1,419 +0,0 @@
|
||||
# [ngIRCd](https://ngircd.barton.de) - Internet Relay Chat Server
|
||||
|
||||
This document explains how to install ngIRCd, the lightweight Internet Relay
|
||||
Chat (IRC) server.
|
||||
|
||||
The first section lists noteworthy changes to earlier releases; you definitely
|
||||
should read this when upgrading your setup! But you can skip over this section
|
||||
when you do a fresh installation.
|
||||
|
||||
All the subsequent sections describe the steps required to install and
|
||||
configure ngIRCd.
|
||||
|
||||
## Upgrade Information
|
||||
|
||||
Differences to version 25
|
||||
|
||||
- **Attention**:
|
||||
All already deprecated legacy options (besides the newly deprecated *Key* and
|
||||
*MaxUsers* settings, see below) were removed in ngIRCd 26, so make sure to
|
||||
update your configuration before upgrading, if you haven't done so already
|
||||
(you got a warning on daemon startup when using deprecated options): you can
|
||||
check your configuration using `ngircd --configtest` -- which is a good idea
|
||||
anyway ;-)
|
||||
|
||||
- Setting modes for predefined channels in *[Channel]* sections has been
|
||||
enhanced: now you can set *all* modes, like in IRC "MODE" commands, and have
|
||||
this setting multiple times per *[Channel]* block. Modifying lists (ban list,
|
||||
invite list, exception list) is supported, too.
|
||||
|
||||
Both the *Key* and *MaxUsers* settings are now deprecated and should be
|
||||
replaced by `Modes = +l <limit>` and `Modes = +k <key>` respectively.
|
||||
|
||||
Differences to version 22.x
|
||||
|
||||
- The *NoticeAuth* `ngircd.conf` configuration variable has been renamed to
|
||||
*NoticeBeforeRegistration*. The old *NoticeAuth* variable still works but
|
||||
is deprecated now.
|
||||
|
||||
- The default value of the SSL *CipherList* variable has been changed to
|
||||
"HIGH:!aNULL:@STRENGTH:!SSLv3" (OpenSSL) and "SECURE128:-VERS-SSL3.0"
|
||||
(GnuTLS) to disable the old SSLv3 protocol by default.
|
||||
|
||||
To enable connections of clients still requiring the weak SSLv3 protocol,
|
||||
the *CipherList* must be set to its old value (not recommended!), which
|
||||
was "HIGH:!aNULL:@STRENGTH" (OpenSSL) and "SECURE128" (GnuTLS), see below.
|
||||
|
||||
Differences to version 20.x
|
||||
|
||||
- Starting with ngIRCd 21, the ciphers used by SSL are configurable and
|
||||
default to "HIGH:!aNULL:@STRENGTH" (OpenSSL) or "SECURE128" (GnuTLS).
|
||||
Previous version were using the OpenSSL or GnuTLS defaults, "DEFAULT"
|
||||
and "NORMAL" respectively.
|
||||
|
||||
- When adding GLINE's or KLINE's to ngIRCd 21 (or newer), all clients matching
|
||||
the new mask will be KILL'ed. This was not the case with earlier versions
|
||||
that only added the mask but didn't kill already connected users.
|
||||
|
||||
- The *PredefChannelsOnly* configuration variable has been superseded by the
|
||||
new *AllowedChannelTypes* variable. It is still supported and translated to
|
||||
the appropriate *AllowedChannelTypes* setting but is deprecated now.
|
||||
|
||||
Differences to version 19.x
|
||||
|
||||
- Starting with ngIRCd 20, users can "cloak" their hostname only when the
|
||||
configuration variable *CloakHostModeX* (introduced in 19.2) is set.
|
||||
Otherwise, only IRC operators, other servers, and services are allowed to
|
||||
set mode +x. This prevents regular users from changing their hostmask to
|
||||
the name of the IRC server itself, which confused quite a few people ;-)
|
||||
|
||||
Differences to version 17.x
|
||||
|
||||
- Support for ZeroConf/Bonjour/Rendezvous service registration has been
|
||||
removed. The configuration option *NoZeroconf* is no longer available.
|
||||
|
||||
- The structure of `ngircd.conf` has been cleaned up and three new configuration
|
||||
sections have been introduced: *[Limits]*, *[Options]*, and *[SSL]*.
|
||||
|
||||
Lots of configuration variables stored in the *[Global]* section are now
|
||||
deprecated there and should be stored in one of these new sections (but
|
||||
still work in *[Global]*):
|
||||
|
||||
- *AllowRemoteOper* -> [Options]
|
||||
- *ChrootDir* -> [Options]
|
||||
- *ConnectIPv4* -> [Options]
|
||||
- *ConnectIPv6* -> [Options]
|
||||
- *ConnectRetry* -> [Limits]
|
||||
- *MaxConnections* -> [Limits]
|
||||
- *MaxConnectionsIP* -> [Limits]
|
||||
- *MaxJoins* -> [Limits]
|
||||
- *MaxNickLength* -> [Limits]
|
||||
- *NoDNS* -> [Options], and renamed to *DNS*
|
||||
- *NoIdent* -> [Options], and renamed to *Ident*
|
||||
- *NoPAM* -> [Options], and renamed to *PAM*
|
||||
- *OperCanUseMode* -> [Options]
|
||||
- *OperServerMode* -> [Options]
|
||||
- *PingTimeout* -> [Limits]
|
||||
- *PongTimeout* -> [Limits]
|
||||
- *PredefChannelsOnly* -> [Options]
|
||||
- *SSLCertFile* -> [SSL], and renamed to *CertFile*
|
||||
- *SSLDHFile* -> [SSL], and renamed to *DHFile*
|
||||
- *SSLKeyFile* -> [SSL], and renamed to *KeyFile*
|
||||
- *SSLKeyFilePassword* -> [SSL], and renamed to *KeyFilePassword*
|
||||
- *SSLPorts* -> [SSL], and renamed to *Ports*
|
||||
- *SyslogFacility* -> [Options]
|
||||
- *WebircPassword* -> [Options]
|
||||
|
||||
You should adjust your `ngircd.conf` and run `ngircd --configtest` to make
|
||||
sure that your settings are correct and up to date!
|
||||
|
||||
Differences to version 16.x
|
||||
|
||||
- Changes to the *MotdFile* specified in `ngircd.conf` now require a ngIRCd
|
||||
configuration reload to take effect (HUP signal, *REHASH* command).
|
||||
|
||||
Differences to version 0.9.x
|
||||
|
||||
- The option of the configure script to enable support for Zeroconf/Bonjour/
|
||||
Rendezvous/WhateverItIsNamedToday has been renamed:
|
||||
|
||||
- `--with-rendezvous` -> `--with-zeroconf`
|
||||
|
||||
Differences to version 0.8.x
|
||||
|
||||
- The maximum length of passwords has been raised to 20 characters (instead
|
||||
of 8 characters). If your passwords are longer than 8 characters then they
|
||||
are cut at an other position now.
|
||||
|
||||
Differences to version 0.6.x
|
||||
|
||||
- Some options of the configure script have been renamed:
|
||||
|
||||
- `--disable-syslog` -> `--without-syslog`
|
||||
- `--disable-zlib` -> `--without-zlib`
|
||||
|
||||
Please call `./configure --help` to review the full list of options!
|
||||
|
||||
Differences to version 0.5.x
|
||||
|
||||
- Starting with version 0.6.0, other servers are identified using asynchronous
|
||||
passwords: therefore the variable *Password* in *[Server]*-sections has been
|
||||
replaced by *MyPassword* and *PeerPassword*.
|
||||
|
||||
- New configuration variables, section *[Global]*: *MaxConnections*, *MaxJoins*
|
||||
(see example configuration file `doc/sample-ngircd.conf`!).
|
||||
|
||||
## Standard Installation
|
||||
|
||||
*Note*: This sections describes installing ngIRCd *from sources*. If you use
|
||||
packages available for your operating system distribution you should skip over
|
||||
and continue with the *Configuration* section, see below.
|
||||
|
||||
ngIRCd is developed for UNIX-based systems, which means that the installation
|
||||
on modern UNIX-like systems that are supported by GNU autoconf and GNU
|
||||
automake ("`configure` script") should be no problem.
|
||||
|
||||
The normal installation procedure after getting (and expanding) the source
|
||||
files (using a distribution archive or Git) is as following:
|
||||
|
||||
1) Satisfy prerequisites
|
||||
2) `./autogen.sh` [only necessary when using "raw" sources with Git]
|
||||
3) `./configure`
|
||||
4) `make`
|
||||
5) `make install`
|
||||
|
||||
(Please see details below!)
|
||||
|
||||
Now the newly compiled executable "ngircd" is installed in its standard
|
||||
location, `/usr/local/sbin/`.
|
||||
|
||||
If no previous version of the configuration file exists (the standard name
|
||||
is `/usr/local/etc/ngircd.conf)`, a sample configuration file containing all
|
||||
possible options will be installed there. You'll find its template in the
|
||||
`doc/` directory: `sample-ngircd.conf`.
|
||||
|
||||
The next step is to configure and afterwards start the daemon. See the section
|
||||
*Configuration* below.
|
||||
|
||||
### Satisfy prerequisites
|
||||
|
||||
When building from source, you'll need some other software to build ngIRCd:
|
||||
for example a working C compiler, make tool, and a few libraries depending on
|
||||
the feature set you want to enable at compile time (like IDENT, SSL, and PAM).
|
||||
|
||||
And if you aren't using a distribution archive ("tar.gz" file), but cloned the
|
||||
plain source archive, you need a few additional tools to generate the build
|
||||
system itself: GNU automake and autoconf, as well as pkg-config.
|
||||
|
||||
If you are using one of the "big" operating systems or Linux distributions,
|
||||
you can use the following commands to install all the required packages to
|
||||
build the sources including all optional features and to run the test suite:
|
||||
|
||||
#### Red Hat / Fedora based distributions
|
||||
|
||||
``` shell
|
||||
yum install \
|
||||
autoconf automake expect gcc glibc-devel gnutls-devel \
|
||||
libident-devel make pam-devel pkg-config tcp_wrappers-devel \
|
||||
telnet zlib-devel
|
||||
```
|
||||
|
||||
#### Debian / Ubuntu based distributions
|
||||
|
||||
``` shell
|
||||
apt-get install \
|
||||
autoconf automake build-essential expect libgnutls28-dev \
|
||||
libident-dev libpam-dev pkg-config libwrap0-dev libz-dev telnet
|
||||
```
|
||||
|
||||
#### ArchLinux based distributions
|
||||
|
||||
``` shell
|
||||
pacman -S --needed \
|
||||
autoconf automake expect gcc gnutls inetutils libident libwrap \
|
||||
make pam pkg-config zlib
|
||||
```
|
||||
|
||||
### `./autogen.sh`
|
||||
|
||||
The first step, to run `./autogen.sh`, is *only* necessary if the `configure`
|
||||
script itself isn't already generated and available. This never happens in
|
||||
official ("stable") releases in "tar.gz" archives, but when cloning the source
|
||||
code repository using Git.
|
||||
|
||||
**This step is therefore only interesting for developers!**
|
||||
|
||||
The `autogen.sh` script produces the `Makefile.in`'s, which are necessary for
|
||||
the configure script itself, and some more files for `make(1)`.
|
||||
|
||||
To run `autogen.sh` you'll need GNU autoconf, GNU automake and pkg-config: at
|
||||
least autoconf 2.61 and automake 1.10 are required, newer is better. But don't
|
||||
use automake 1.12 or newer for creating distribution archives: it will work
|
||||
but lack "de-ANSI-fication" support in the generated Makefile's! Stick with
|
||||
automake 1.11.x for this purpose ...
|
||||
|
||||
So *automake 1.11.x* and *autoconf 2.67+* is recommended.
|
||||
|
||||
Again: "end users" do not need this step and neither need GNU autoconf nor GNU
|
||||
automake at all!
|
||||
|
||||
### `./configure`
|
||||
|
||||
The `configure` script is used to detect local system dependencies.
|
||||
|
||||
In the perfect case, `configure` should recognize all needed libraries, header
|
||||
files and so on. If this shouldn't work, `./configure --help` shows all
|
||||
possible options.
|
||||
|
||||
In addition, you can pass some command line options to `configure` to enable
|
||||
and/or disable some features of ngIRCd. All these options are shown using
|
||||
`./configure --help`, too.
|
||||
|
||||
Compiling a static binary will avoid you the hassle of feeding a chroot dir
|
||||
(if you want use the chroot feature). Just do something like:
|
||||
|
||||
``` shell
|
||||
CFLAGS=-static ./configure [--your-options ...]
|
||||
```
|
||||
|
||||
Then you can use a void directory as ChrootDir (like OpenSSH's `/var/empty`).
|
||||
|
||||
### `make`
|
||||
|
||||
The `make(1)` command uses the `Makefile`'s produced by `configure` and
|
||||
compiles the ngIRCd daemon.
|
||||
|
||||
### `make install`
|
||||
|
||||
Use `make install` to install the server and a sample configuration file on
|
||||
the local system. Normally, root privileges are necessary to complete this
|
||||
step. If there is already an older configuration file present, it won't be
|
||||
overwritten.
|
||||
|
||||
These files and folders will be installed by default:
|
||||
|
||||
- `/usr/local/sbin/ngircd`: executable server
|
||||
- `/usr/local/etc/ngircd.conf`: sample configuration (if not already present)
|
||||
- `/usr/local/share/doc/ngircd/`: documentation
|
||||
- `/usr/local/share/man/`: manual pages
|
||||
|
||||
### Additional features
|
||||
|
||||
The following optional features can be compiled into the daemon by passing
|
||||
options to the `configure` script. Most options can handle a `<path>` argument
|
||||
which will be used to search for the required libraries and header files in
|
||||
the given paths (`<path>/lib/...`, `<path>/include/...`) in addition to the
|
||||
standard locations.
|
||||
|
||||
- Syslog Logging (autodetected by default):
|
||||
|
||||
`--with-syslog[=<path>]` / `--without-syslog`
|
||||
|
||||
Enable (disable) support for logging to "syslog", which should be
|
||||
available on most modern UNIX-like operating systems by default.
|
||||
|
||||
- ZLib Compression (autodetected by default):
|
||||
|
||||
`--with-zlib[=<path>]` / `--without-zlib`
|
||||
|
||||
Enable (disable) support for compressed server-server links.
|
||||
The Z compression library ("libz") is required for this option.
|
||||
|
||||
- IO Backend (autodetected by default):
|
||||
|
||||
- `--with-select[=<path>]` / `--without-select`
|
||||
- `--with-poll[=<path>]` / `--without-poll`
|
||||
- `--with-devpoll[=<path>]` / `--without-devpoll`
|
||||
- `--with-epoll[=<path>]` / `--without-epoll`
|
||||
- `--with-kqueue[=<path>]` / `--without-kqueue`
|
||||
|
||||
ngIRCd can use different IO "backends": the "old school" `select(2)` and
|
||||
`poll(2)` API which should be supported by most UNIX-like operating systems,
|
||||
or the more efficient and flexible `epoll(7)` (Linux >=2.6), `kqueue(2)`
|
||||
(BSD) and `/dev/poll` APIs.
|
||||
|
||||
By default the IO backend is autodetected, but you can use `--without-xxx`
|
||||
to disable a more enhanced API.
|
||||
|
||||
When using the `epoll(7)` API, support for `select(2)` is compiled in as
|
||||
well by default, to enable the binary to run on older Linux kernels (<2.6),
|
||||
too.
|
||||
|
||||
- IDENT-Support:
|
||||
|
||||
`--with-ident[=<path>]`
|
||||
|
||||
Include support for IDENT ("AUTH") lookups. The "ident" library is
|
||||
required for this option.
|
||||
|
||||
- TCP-Wrappers:
|
||||
|
||||
`--with-tcp-wrappers[=<path>]`
|
||||
|
||||
Include support for Wietse Venemas "TCP Wrappers" to limit client access
|
||||
to the daemon, for example by using `/etc/hosts.{allow|deny}`.
|
||||
The "libwrap" is required for this option.
|
||||
|
||||
- PAM:
|
||||
|
||||
`--with-pam[=<path>]`
|
||||
|
||||
Enable support for PAM, the Pluggable Authentication Modules library.
|
||||
See `doc/PAM.txt` for details.
|
||||
|
||||
- SSL:
|
||||
|
||||
- `--with-openssl[=<path>]`
|
||||
- `--with-gnutls[=<path>]`
|
||||
|
||||
Enable support for SSL/TLS using OpenSSL or GnuTLS libraries.
|
||||
See `doc/SSL.txt` for details.
|
||||
|
||||
- IPv6:
|
||||
|
||||
`--enable-ipv6`
|
||||
|
||||
Adds support for version 6 of the Internet Protocol.
|
||||
|
||||
## Configuration
|
||||
|
||||
Please have a look at the `ngircd(8)` and `ngircd.conf(5)` manual pages for
|
||||
details and all possible command line and configuration options -- **and don't
|
||||
forget to run `ngircd --configtest` to validate your configuration file!**
|
||||
|
||||
After installing ngIRCd, a sample configuration file will be set up (if it
|
||||
does not exist already). By default, when installing from sources, the file is
|
||||
named `/usr/local/etc/ngircd.conf` (other common names, especially for
|
||||
distribution packages, are `/etc/ngircd.conf` or `/etc/ngircd/ngircd.conf`).
|
||||
|
||||
You can find the template of the sample configuration file in the `doc/`
|
||||
directory as `sample-ngircd.conf` and
|
||||
[online](https://ngircd.barton.de/doc/sample-ngircd.conf) on the homepage. It
|
||||
contains all available options.
|
||||
|
||||
In the sample configuration file, there are comments beginning with `#` *or*
|
||||
`;` -- this is only for the better understanding of the file, both comment
|
||||
styles are equal.
|
||||
|
||||
The file is separated in five blocks: *[Global]*, *[Features]*, *[Operator]*,
|
||||
*[Server]*, and *[Channel]*.
|
||||
|
||||
In the *[Global]* section, there is the main configuration like the server
|
||||
name and the ports, on which the server should be listening. Options in
|
||||
the *[Features]* section enable or disable functionality in the daemon.
|
||||
IRC operators of this server are defined in *[Operator]* blocks, remote
|
||||
servers are configured in *[Server]* sections, and *[Channel]* blocks are
|
||||
used to configure pre-defined ("persistent") IRC channels.
|
||||
|
||||
### Manual Pages Online
|
||||
|
||||
- Daemon: [ngircd.8](https://manpages.debian.org/ngircd.8)
|
||||
- Configutation file: [ngircd.conf.5](https://manpages.debian.org/ngircd.conf.5)
|
||||
|
||||
## Command line options
|
||||
|
||||
ngIRCd supports the following command line options:
|
||||
|
||||
- `-f`, `--config <file>`
|
||||
|
||||
The daemon uses the file `<file>` as configuration file rather than
|
||||
the standard configuration `/usr/local/etc/ngircd.conf`.
|
||||
|
||||
- `-n`, `--nodaemon`
|
||||
|
||||
ngIRCd should be running as a foreground process.
|
||||
|
||||
- `-p`, `--passive`
|
||||
|
||||
Server-links won't be automatically established.
|
||||
|
||||
- `-t`, `--configtest`
|
||||
|
||||
Reads, validates and dumps the configuration file as interpreted
|
||||
by the server. Then exits.
|
||||
|
||||
Use `--help` to see a short help text describing all available parameters
|
||||
the server understands, with `--version` the ngIRCd shows its version
|
||||
number. In both cases the server exits after the output.
|
||||
|
||||
Please see the `ngircd(8)` manual page for more details!
|
24
Makefile.am
24
Makefile.am
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -9,9 +9,11 @@
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
|
||||
AUTOMAKE_OPTIONS = gnu
|
||||
|
||||
SUBDIRS = doc src man contrib
|
||||
|
||||
EXTRA_DIST = README.md INSTALL.md autogen.sh configure.ng .clang_complete .mailmap
|
||||
EXTRA_DIST = autogen.sh configure.ng .mailmap
|
||||
|
||||
clean-local: osxpkg-clean
|
||||
rm -f build-stamp*
|
||||
@@ -23,13 +25,13 @@ maintainer-clean-local:
|
||||
rm -f config.log debian
|
||||
|
||||
testsuite:
|
||||
cd src/testsuite && ${MAKE} check
|
||||
cd src/testsuite && make check
|
||||
|
||||
lint:
|
||||
cd src/ngircd && ${MAKE} lint
|
||||
cd src/ngircd && make lint
|
||||
|
||||
srcdoc:
|
||||
cd doc && ${MAKE} srcdoc
|
||||
cd doc && make srcdoc
|
||||
|
||||
have-xcodebuild:
|
||||
@xcodebuild -project contrib/MacOSX/ngIRCd.xcodeproj -list \
|
||||
@@ -64,7 +66,7 @@ osxpkg: have-packagemaker osxpkg-dest
|
||||
--out ../../$(distdir).mpkg
|
||||
rm -f $(distdir).mpkg.zip
|
||||
zip -ro9 $(distdir).mpkg.zip $(distdir).mpkg
|
||||
${MAKE} osxpkg-clean
|
||||
make osxpkg-clean
|
||||
|
||||
osxpkg-clean:
|
||||
[ ! -r ngircd.dest ] || sudo -n rm -rf ngircd.dest
|
||||
@@ -72,12 +74,12 @@ osxpkg-clean:
|
||||
|
||||
osxpkg-dest: have-xcodebuild osxpkg-clean clean
|
||||
./configure --prefix=/opt/ngircd
|
||||
${MAKE} xcode
|
||||
${MAKE} -C contrib/MacOSX de.barton.ngircd.plist
|
||||
make xcode
|
||||
make -C contrib/MacOSX de.barton.ngircd.plist
|
||||
mkdir -p ngircd.dest/opt/ngircd/sbin
|
||||
DESTDIR="$$PWD/ngircd.dest" ${MAKE} -C doc install
|
||||
DESTDIR="$$PWD/ngircd.dest" ${MAKE} -C contrib install
|
||||
DESTDIR="$$PWD/ngircd.dest" ${MAKE} -C man install
|
||||
DESTDIR="$$PWD/ngircd.dest" make -C doc install
|
||||
DESTDIR="$$PWD/ngircd.dest" make -C contrib install
|
||||
DESTDIR="$$PWD/ngircd.dest" make -C man install
|
||||
cp contrib/MacOSX/build/Default/ngIRCd \
|
||||
ngircd.dest/opt/ngircd/sbin/ngircd
|
||||
rm ngircd.dest/opt/ngircd/etc/ngircd.conf
|
||||
|
294
NEWS
294
NEWS
@@ -2,262 +2,12 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2021 Alexander Barton and Contributors.
|
||||
(c)2001-2014 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- NEWS --
|
||||
|
||||
ngIRCd 26.1 (2021-01-02)
|
||||
|
||||
- This release is a bugfix release only, without new features.
|
||||
|
||||
ngIRCd 26 (2020-06-20)
|
||||
|
||||
ngIRCd 26~rc2 (2020-06-11)
|
||||
- Add AppStream metadata file (contrib/de.barton.ngircd.metainfo.xml).
|
||||
- Various bug fixes, see the ChangeLog. No new or changed functionality.
|
||||
|
||||
ngIRCd 26~rc1 (2020-05-10)
|
||||
- Allow up to 512 characters per line in MOTD and help text files (but keep
|
||||
in mind that lines can't get that long, because they have to be prefixed
|
||||
before being sent to the client). But this allows for more fancy MOTDs :-)
|
||||
Closes #271.
|
||||
- Show the actually allowed channel types in the ISUPPORT(005) numeric which
|
||||
are configured by the "AllowedChannelTypes" configuration variable.
|
||||
Closes #273.
|
||||
- Handle commands in the read buffer before reading more data and don't wait
|
||||
for the network in this case: If there are more bytes in the read buffer
|
||||
already than a single valid IRC command can get long (513 bytes), wait for
|
||||
this/those command(s) to be handled first and don't try to read even more
|
||||
data from the network (which most probably would overflow the read buffer
|
||||
of this connection soon).
|
||||
- Log G-/K-Line changes only when not initiated by a server: this prevents
|
||||
the log from becoming spammed during "net bursts".
|
||||
- Update test suite to include SSL tests, including checking for reloading
|
||||
certificates during runtime.
|
||||
- Add support for GnuTLS certificate reload, which is quite handy when using
|
||||
Let's Encrypt, for example. Until now this was only supported when linked
|
||||
with OpenSSL. Thanks a lot, Hilko Bengen <bengen@hilluzination.de>!
|
||||
- Allow setting arbitrary channel modes in the configuration file by handling
|
||||
them like in MODE commands, and allow multiple "Modes =" lines per [Channel]
|
||||
section. Thanks to Michi <michi+ngircd@dataswamp.org>!
|
||||
Closes #55.
|
||||
- Add "FNC" (forced nick changes) to ISUPPORT(005) numeric. Most probably
|
||||
this doesn't make any difference to any client, but it seems correct.
|
||||
See <http://www.irc.org/tech_docs/005.html> for details.
|
||||
- Enhance handling of command line errors, and return with exit code 0 ("no
|
||||
error") when "--help" or "--version" is used (which resulted in exit code 1,
|
||||
"error" before). Exit with code 2 ("command line error") for all other
|
||||
invalid command line options, and show the error message itself on stderr
|
||||
(instead of stdout and exit code 1, "generic error", as before).
|
||||
This new behaviour is more in line with the GNU "coding standards",
|
||||
see <https://www.gnu.org/prep/standards/html_node/_002d_002dhelp.html>.
|
||||
- Add ./contrib/nglog.sh: This script parses the log output of ngircd(8),
|
||||
and colorizes the messages according to their log level. Example usage:
|
||||
ngircd -f $PWD/doc/sample-ngircd.conf -np | ./contrib/nglog.sh
|
||||
- Enlarge buffers of info texts to 128 bytes. This includes:
|
||||
- "Real name" of a client (4th filed of the USER command).
|
||||
- Server info text ("Info" configuration option).
|
||||
- Admin info texts and email address ("AdminInfo1", "AdminInfo2" and
|
||||
"AdminEmail" configuration options).
|
||||
- Network name ("Network" configuration option).
|
||||
The limit was 64 bytes before ...
|
||||
Closes #258.
|
||||
- Streamline handling of invalid and unset server name: Don't exit during
|
||||
runtime (REHASH command, HUP signal), because the server name can't be
|
||||
changed in this case anyway and the new invalid name will be ignored.
|
||||
- Slightly reorder startup steps, and enhance logging:
|
||||
- Show name of configuration file at the beginning of start up.
|
||||
- Add a message when ngIRCd is ready, including its host name.
|
||||
- Show name of configuration file on REHASH (SIGHUP), too.
|
||||
- Change level of "done message" to NOTICE, like "starting" & "ready".
|
||||
- Initialize IO functions before channels, connections, clients, ...
|
||||
- configure.ng: OpenSSL can depends on lz or latomic so use pkg-config to
|
||||
find those dependencies and fallback to existing mechanism.
|
||||
Closes #256.
|
||||
|
||||
ngIRCd 25 (2019-01-23)
|
||||
|
||||
- Implement new configuration option "MaxPenaltyTime", which configures the
|
||||
maximum penalty time increase in seconds, per penalty event. Set to -1 for
|
||||
no limit (the default), 0 to disable penalties altogether. ngIRCd doesn't
|
||||
use penalty increases higher than 2 seconds during normal operation, so
|
||||
values higher than 1 rarely make sense.
|
||||
Disabling (or reducing) penalties can greatly speed up "make check" runs
|
||||
for example, see below, but are mostly a debugging feature and normally
|
||||
not meant to be used on production systems!
|
||||
Some example timings running "make check" from my macOS workstation:
|
||||
- MaxPenaltyTime not set: 4:41,79s
|
||||
- "MaxPenaltyTime = 1": 3:14,71s
|
||||
- "MaxPenaltyTime = 0": 25,46s
|
||||
Closes #249 and #251.
|
||||
- Update Xcode project for latest Xcode version (10.0)
|
||||
- Allow a 5th parameter in WEBIRC. Thanks to "ItsOnlyBinary".
|
||||
Closes #247.
|
||||
|
||||
ngIRCd 25~rc1 (2018-08-11)
|
||||
- Only send TOPIC updates to a channel when the topic actually changed:
|
||||
This prevents the channel from becoming flooded by unnecessary TOPIC update
|
||||
messages, that can happen when IRC services try to enforce a certain topic
|
||||
but which is already set (at least on the local server), for example.
|
||||
Therefore still forward it to all servers, but don't inform local clients
|
||||
(still update setter and timestamp information, though!).
|
||||
- Update Xcode project for latest Xcode version (9.2). This includes adding
|
||||
missing and deleting obsolete file references.
|
||||
- Handle user mode "C" ("Only users that share a channel are allowed to send
|
||||
messages") like user mode "b" ("block private messages and notices"): allow
|
||||
messages from servers, services, and IRC Operators, too. Change proposed by
|
||||
"wowaname" back in 2015 in #ngircd, thanks!
|
||||
- Allow IRC Ops and remote servers to KILL service clients: such clients
|
||||
behave like regular users, therefore IRC operators and servers should be
|
||||
able to KILL them: for example to resolve nick collisions.
|
||||
Closes #242.
|
||||
|
||||
ngIRCd 24 (2017-01-20)
|
||||
|
||||
ngIRCd 24~rc1 (2017-01-07)
|
||||
- Log privilege violations and failed OPER request with log level "error"
|
||||
and send it to the "&SERVER" channel, too.
|
||||
- Immediately shut down connection when receiving an "ERROR" command,
|
||||
don't wait for the peer to close the connection. This allows the daemon
|
||||
to forward the received "ERROR" message in the network, instead of the
|
||||
very generic "client closed connection" message.
|
||||
- Explicitly forbid remote servers to modify "x-lines" (G-LINES) when the
|
||||
"AllowRemoteOper" configuration option isn't set, even when the command
|
||||
seems to originate from the remote server itself: this prevents GLINE's
|
||||
to become set during server handshake in this case (what wouldn't be
|
||||
possible during regular runtime when a remote IRC Op sends the command)
|
||||
and what can't be undone by IRC Ops later on (because of the missing
|
||||
"AllowRemoteOper" option) ...
|
||||
- Update Xcode project for latest Xcode version (8.0), and fix "duplicate
|
||||
symbols" error messages when building (linking) the binary.
|
||||
- Add "Documentation" variables to systemd configuration files.
|
||||
- Make sure that SYSCONFDIR is always set, which can be handy when
|
||||
using source code linters when ./configure hasn't been run already.
|
||||
- Add the new "PAMServiceName" configuration option to specify the name
|
||||
used as PAM service name. This setting allows to run multiple ngIRCd
|
||||
instances with different PAM configurations for each instance.
|
||||
Thanks to Christian Aistleitner <christian@quelltextlich.at> for the
|
||||
patch, closes #226.
|
||||
- Add an ".editorconfig" file to the project.
|
||||
- Limit the number of message target, and suppress duplicates: This
|
||||
prevents an user from flooding the server using commands like this:
|
||||
"PRIVMSG nick1,nick1,nick1,...".
|
||||
Duplicate targets are suppressed silently (channels and clients).
|
||||
In addition, the maximum number of targets per PRIVMSG, NOTICE, ...
|
||||
command are limited to MAX_HNDL_TARGETS (25). If there are more, the
|
||||
daemon sends the new 407 (ERR_TOOMANYTARGETS_MSG) numeric, containing
|
||||
the first target that hasn't been handled any more. Closes #187.
|
||||
- Make contrib/platformtest.sh script more portable, and only show
|
||||
"runs=Y" when the test suite really has been passed successfully.
|
||||
|
||||
ngIRCd 23 (2015-11-16)
|
||||
|
||||
ngIRCd 23~rc1 (2015-09-06)
|
||||
- Use "NOTICE *" before registration instead of "NOTICE AUTH". "AUTH" is
|
||||
a valid nickname so sending notices to it is probably not a good idea.
|
||||
Use "*" as the target instead as done with numerics when the nick is not
|
||||
available. This mimics the behavior in Charybdis, IRCD-Hybrid, InspIRCd
|
||||
2.2, Plexus 4, etc. Closes #217.
|
||||
The "NoticeAuth" configuration variable (ngircd.conf) has been renamed
|
||||
to "NoticeBeforeRegistration" accordingly, but the old name is still
|
||||
supported for compatibility reasons.
|
||||
- Implement new channel mode "N" (regular users can't change their nick
|
||||
name while on this channel). Closes #214.
|
||||
- Keep track of who placed bans, invites, and excepts.
|
||||
Idea and implementation by LucentW, Thanks! Closes #203.
|
||||
- Implement numeric RPL_LISTSTART(321). lightIRC and other clients
|
||||
expecting RPL_LISTSTART should now behave correctly.
|
||||
Idea and implementation by LucentW, Thanks! Closes #207.
|
||||
- Streamline the effect of "MorePrivacy" option: Update documentation
|
||||
in ngircd.conf(5); don't hide channels for IRC Ops on LIST and don't
|
||||
hide IP addresses/hostnames on WHOIS when "MorePrivacy" is in effect.
|
||||
This closes #198.
|
||||
- IRC operators now can kick anyone when "OperCanMode" is set.
|
||||
Idea and implementation by LucentW, Thanks! Closes #202.
|
||||
- Implement user mode "I": Hide channels on WHOIS: this mode prevents
|
||||
ngIRCd from showing channels on WHOIS (IRC Operators can always see
|
||||
the channel list).
|
||||
Idea and implementation by LucentW, Thanks! Closes #197.
|
||||
- INVITE command: Implement ERR_USERNOTONSERV(504) numeric and make sure
|
||||
that the target user is on the same server when inviting other users
|
||||
to local ("&") channels.
|
||||
Idea by Cahata, thanks! Closes #183.
|
||||
- MODE command: Always report channel creation time. Up to now when
|
||||
receiving a MODE command, ngIRCd only reported the channel creation
|
||||
time to clients that were members of the channel. This patch reports
|
||||
the channel creation time to all clients, regardless if they are joined
|
||||
to that channel or not. At least ircd-seven behaves like this.
|
||||
This closes #188. Reported by Cahata, thanks!
|
||||
|
||||
ngIRCd 22.1 (2015-04-06)
|
||||
|
||||
- Update "CipherList" to not enable SSLv3 by default. Idea, initial patch,
|
||||
and testing by Christoph Biedl <ngircd.anoy@manchmal.in-ulm.de>.
|
||||
- Change ngIRCd test suite not to use DNS lookups: Different operating
|
||||
systems do behave quite differently when doing DNS lookups, for example
|
||||
"127.0.0.1" sometimes resolves to "localhost" and sometimes to
|
||||
"localhost.localdomain" (for example OpenBSD). And other OS resolve
|
||||
"localhost" to the real host name (for example Cygwin). So not using
|
||||
DNS at all makes the test site much more portable.
|
||||
|
||||
ngIRCd 22 (2014-10-11)
|
||||
|
||||
- Match all list patterns case-insensitive: this affects the invite-,
|
||||
ban-, and except lists, as well as G-Lines an K-Lines.
|
||||
Problem pointed out by "wowaname" on #ngircd, thanks!
|
||||
|
||||
ngIRCd 22~rc1 (2014-09-29)
|
||||
- Sync "except lists" between servers: Up to now, ban, invite, and G-Line
|
||||
lists have been synced between servers while linking -- but obviously
|
||||
nobody noticed that except list have been missing ever since. Until now.
|
||||
Thanks to "j4jackj", who reported this issue in #ngircd.
|
||||
- Allow longer user names (up to 63 characters) for authentication.
|
||||
- Increase MAX_SERVERS from 16 to 64: There are installations out there
|
||||
that would like to configure more than 16 links per server, so increase
|
||||
this limit. Best would be to get rid of MAX_SERVERS altogether and make
|
||||
if fully dynamic, but start with this quick and dirty hack ...
|
||||
- Test suite/platformtest.sh: Detect when tests have been skipped.
|
||||
- Allow "DefaultUserModes" to set all possible modes, including modes only
|
||||
settable by IRC Operators.
|
||||
- Implement user mode "F": "relaxed flood protection". Clients with mode
|
||||
"F" set are allowed to rapidly send data to the daemon. This mode is only
|
||||
settable by IRC Operators and can cause problems in the network -- so be
|
||||
careful and only set it on "trusted" clients!
|
||||
User mode "F" is used by Bahamut for this purpose, for example.
|
||||
- Use server password when PAM is compiled in but disabled.
|
||||
- Streamline punctuation of log messages.
|
||||
- Return ISUPPORT(005) numerics on "VERSION". This is how ircd-seven,
|
||||
Charybdis, Hybrid, and InspIRCd behave, for example.
|
||||
- configure: Only link "contrib/Debian" if it exists, which isn't the case
|
||||
on "VPATH builds", for example.
|
||||
- Show the account name in WHOIS. This uses the same numeric as Charybdis
|
||||
and ircu families: WHOISLOGGEDIN(330).
|
||||
- Pattern matching: Remove "range matching" in our pattern matching code
|
||||
using the "[...]" syntax, because [ and ] are valid characters in nick
|
||||
names and one has to quote them currently using the "\" character, which
|
||||
is quite unexpected for users.
|
||||
- platformtest.sh: New option "-x", don't regenerate build system and
|
||||
allow using separate source and build trees.
|
||||
- Test suite: explicitly enable glibc memory checking.
|
||||
- Make "MODE -k" handling more robust and compatible, send "fake '*' key"
|
||||
in all replies.
|
||||
- portabtest: Actually test the functions snprintf(), strlcpy(), strlcat(),
|
||||
and vsnprintf() for correctness, not only existence (which was quite
|
||||
useless, because if they weren't available, the program could not have
|
||||
been linked at all ...).
|
||||
- Implement new configuration option "Network": it is used to set the
|
||||
(completely optional) "network name", to which this instance of the
|
||||
daemon belongs. When set, this name is used in the ISUPPORT(005) numeric
|
||||
which is sent to all clients connecting to the server after logging in.
|
||||
- Update doc/Platforms.txt.
|
||||
- Various code cleanups, remove unused code, streamline error handling.
|
||||
Remove all imp.h and exp.h header files, support non-standard vsnprintf()
|
||||
return codes, and fix some K&R C portability issues. Streamline
|
||||
DEBUG_ARRAY, DEBUG_BUFFER, DEBUG_IO, DEBUG_ZIP definitions.
|
||||
- Increase penalty time to 10 seconds when handling OPER commands with an
|
||||
invalid password.
|
||||
|
||||
ngIRCd 21.1 (2014-03-25)
|
||||
|
||||
@@ -366,7 +116,7 @@ ngIRCd 20.2 (2013-02-15)
|
||||
|
||||
- This release is a bugfix release only, without new features.
|
||||
- Security: Fix a denial of service bug in the function handling KICK
|
||||
commands that could be used by arbitrary users to crash the daemon
|
||||
commands that could be used by arbitrary users to to crash the daemon
|
||||
(CVE-2013-1747).
|
||||
|
||||
ngIRCd 20.1 (2013-01-02)
|
||||
@@ -458,7 +208,7 @@ ngIRCd 20 (2012-12-17)
|
||||
the hash function. When "CloakHostSalt" is not set (the default), a
|
||||
random salt will be generated after each server restart.
|
||||
|
||||
ngIRCd 19.2 (2012-06-19)
|
||||
ngIRCd Release 19.2 (2012-06-19)
|
||||
|
||||
ngIRCd 19.2~rc1 (2012-06-13)
|
||||
- New configuration option "CloakHostModeX" to configure the hostname
|
||||
@@ -467,15 +217,15 @@ ngIRCd 19.2 (2012-06-19)
|
||||
which still is the default when "CloakHostModeX" isn't set.
|
||||
- Add instructions for setting up Atheme IRC services.
|
||||
- Implement support for IRC capability handling, the new "CAP" command,
|
||||
and capability "multi-prefix" which allows both the NAME and WHO command
|
||||
and capablity "multi-prefix" which allows both the NAME and WHO command
|
||||
handlers to return more than one "class prefix" to the client.
|
||||
|
||||
ngIRCd 19.1 (2012-03-19)
|
||||
ngIRCd Release 19.1 (2012-03-19)
|
||||
|
||||
- Really include _all_ patches to build the Anope module into the
|
||||
distribution archive ... ooops!
|
||||
|
||||
ngIRCd 19 (2012-02-29)
|
||||
ngIRCd Release 19 (2012-02-29)
|
||||
|
||||
ngIRCd 19~rc1 (2012-02-12)
|
||||
- Update preliminary ngIRCd protocol module for Anope 1.9.6, which now
|
||||
@@ -543,7 +293,7 @@ ngIRCd 19 (2012-02-29)
|
||||
argument. Like unknown user and channel modes, these modes are saved
|
||||
and forwarded to other servers, but ignored otherwise.
|
||||
|
||||
ngIRCd 18 (2011-07-10)
|
||||
ngIRCd Release 18 (2011-07-10)
|
||||
|
||||
- Add preliminary ngIRCd protocol module for Anope 1.9 to contrib/Anope/.
|
||||
|
||||
@@ -618,19 +368,19 @@ ngIRCd 18 (2011-07-10)
|
||||
vice-versa). The defaults are adjusted accordingly and the old variables
|
||||
in [Global] are still accepted, so there is no functional change.
|
||||
|
||||
ngIRCd 17.1 (2010-12-19)
|
||||
ngIRCd Release 17.1 (2010-12-19)
|
||||
|
||||
- Don't log critical (or worse) messages to stderr
|
||||
- Remove "error file" when compiled with debug code enabled
|
||||
- New numeric 329: get channel creation time on "MODE #chan" commands
|
||||
|
||||
ngIRCd 17 (2010-11-07)
|
||||
ngIRCd Release 17 (2010-11-07)
|
||||
|
||||
- doc: change path names in sample-ngircd.conf depending on sysconfdir
|
||||
|
||||
ngIRCd 17~rc2 (2010-10-25)
|
||||
- Generate ngIRCd version number from GIT tag.
|
||||
- Make source code compatible with ansi2knr again. This allows to compile
|
||||
- Make sourcecode compatible with ansi2knr again. This allows to compile
|
||||
ngIRCd using a pre-ANSI K&R C compiler again.
|
||||
|
||||
ngIRCd 17~rc1 (2010-10-11)
|
||||
@@ -639,7 +389,7 @@ ngIRCd 17 (2010-11-07)
|
||||
Howl, Avahi or on Mac OS X).
|
||||
- New configuration option "SyslogFacility" to define the syslog "facility"
|
||||
(the "target"), to which ngIRCd should send its log messages.
|
||||
Possible values are system dependent, but most probably "auth", "daemon",
|
||||
Possible values are system dependant, but most probably "auth", "daemon",
|
||||
"user" and "local1" through "local7" are possible values; see syslog(3).
|
||||
Default is "local5" for historical reasons.
|
||||
- Dump the "internal server state" (configured servers, established
|
||||
@@ -649,7 +399,7 @@ ngIRCd 17 (2010-11-07)
|
||||
signal SIGUSR1, when debug code is compiled in, not only on startup
|
||||
using the command line parameters.
|
||||
- Implement user mode "x": host name cloaking (closes: #102).
|
||||
- Change MOTD file handling: ngIRCd now caches the contents of the MOTD
|
||||
- Change MOTD file handling: ngIRCd now caches the contens of the MOTD
|
||||
file, so the daemon now requires a HUP signal or REHASH command to
|
||||
re-read the MOTD file when its content changed.
|
||||
- Allow IRC ops to change channel modes even without OperServerMode set.
|
||||
@@ -662,10 +412,10 @@ ngIRCd 17 (2010-11-07)
|
||||
this new mode requires the user to be an IRC operator.
|
||||
- Show SSL status in WHOIS output, numeric 275.
|
||||
|
||||
ngIRCd 16 (2010-05-02)
|
||||
ngIRCd Release 16 (2010-05-02)
|
||||
|
||||
ngIRCd 16~rc2 (2010-04-25)
|
||||
- Enhance connection statistics counters: display total number of served
|
||||
- Enhace connection statistics counters: display total number of served
|
||||
connections on daemon shutdown and when a new client connects using
|
||||
the new numeric RPL_STATSCONN (250).
|
||||
|
||||
@@ -682,12 +432,12 @@ ngIRCd 16 (2010-05-02)
|
||||
every channel, and c) remote clients using a server not supporting this
|
||||
mode are not checked either and therefore always allowed to join.
|
||||
|
||||
ngIRCd 15 (2009-11-07)
|
||||
ngIRCd Release 15 (2009-11-07)
|
||||
|
||||
ngIRCd 15~rc1 (2009-10-15)
|
||||
- Do not add default listening port (6667) if SSL ports were specified, so
|
||||
ngIRCd can be configured to only accept SSL-encrypted connections now.
|
||||
- Enable IRC operators to use the IRC command SQUIT (instead of the already
|
||||
- Enable IRC operators to use the IRC command SQUIT (insted of the already
|
||||
implemented but non-standard DISCONNECT command).
|
||||
- New configuration option "AllowRemoteOper" (disabled by default) that
|
||||
enables remote IRC operators to use the IRC commands SQUIT and CONNECT
|
||||
@@ -696,13 +446,13 @@ ngIRCd 15 (2009-11-07)
|
||||
a throttling scheme: an IRC client can send up to 3 commands or 256 bytes
|
||||
per second before a one second pause is enforced.
|
||||
|
||||
ngIRCd 14.1 (2009-05-05)
|
||||
ngIRCd Release 14.1 (2009-05-05)
|
||||
|
||||
- Security: fix remotely triggerable crash in SSL/TLS code.
|
||||
- Debian: build ngircd-full-dbg package.
|
||||
- Allow ping timeout quit messages to show the timeout value.
|
||||
|
||||
ngIRCd 14 (2009-04-20)
|
||||
ngIRCd Release 14 (2009-04-20)
|
||||
|
||||
ngIRCd 14~rc1 (2009-03-29)
|
||||
- Allow creation of persistent modeless channels.
|
||||
@@ -713,7 +463,7 @@ ngIRCd 14 (2009-04-20)
|
||||
individual channel keys for different users.
|
||||
- Remove limit on maximum number of predefined channels in ngircd.conf.
|
||||
|
||||
ngIRCd 13 (2008-12-25)
|
||||
ngIRCd Release 13 (2008-12-25)
|
||||
|
||||
ngIRCd 13~rc1 (2008-11-21):
|
||||
- New version number scheme :-)
|
||||
@@ -845,7 +595,7 @@ ngIRCd 0.7.5 (2003-07-11)
|
||||
(DoS), the default is 5 connections per client IP.
|
||||
- Added new configuration variable "Listen" to bind all listening
|
||||
sockets of the server to a single IP address.
|
||||
|
||||
|
||||
ngIRCd 0.7.1 (2003-07-18)
|
||||
|
||||
- Added support for GNU/Hurd.
|
||||
@@ -870,9 +620,9 @@ ngIRCd 0.7.0 (2003-05-01)
|
||||
- Documentation is now installed in $(datadir)/doc/ngircd.
|
||||
|
||||
|
||||
Older news (sorry, only available in German language):
|
||||
Older news (sorry, only available in german language):
|
||||
|
||||
ngIRCd 0.6.0, 24.12.2002
|
||||
ngIRCd 0.6.0, 2002-12-24
|
||||
|
||||
- beim Schliessen einer Verbindung zeigt der Server nun vor dem ERROR
|
||||
noch eine Statistik ueber die empfangene und gesendete Datenmenge an.
|
||||
|
93
README
Normal file
93
README
Normal file
@@ -0,0 +1,93 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2014 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- README --
|
||||
|
||||
|
||||
I. Introduction
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server for
|
||||
small or private networks, developed under the GNU General Public License
|
||||
(GPL; please see the file COPYING for details). It is simple to configure,
|
||||
can cope with dynamic IP addresses, and supports IPv6 as well as SSL. It is
|
||||
written from scratch and not based on the original IRCd.
|
||||
|
||||
The name ngIRCd means next generation IRC daemon, which is a little bit
|
||||
exaggerated: lightweight Internet Relay Chat server most probably would be a
|
||||
better name :-)
|
||||
|
||||
Please see the INSTALL document for installation and upgrade information!
|
||||
|
||||
|
||||
II. Status
|
||||
~~~~~~~~~~~
|
||||
|
||||
It is not the goal of ngIRCd to implement all the nasty behaviours of the
|
||||
original ircd, but to implement most of the useful commands and semantics
|
||||
specified by the RFCs.
|
||||
|
||||
In the meantime ngIRCd should be quite feature complete and stable to be
|
||||
used in real IRC networks.
|
||||
|
||||
Implemented IRC-commands are:
|
||||
|
||||
ADMIN, AWAY, CHANINFO, CONNECT, DIE, DISCONNECT, ERROR, GLINE, HELP, INFO,
|
||||
INVITE, ISON, JOIN, KICK, KILL, KLINE, LINKS, LIST, LUSERS, MODE, MOTD,
|
||||
NAMES, NICK, NJOIN, NOTICE, OPER, PART, PASS, PING, PONG, PRIVMSG, QUIT,
|
||||
REHASH, RESTART, SERVER, SERVICE, SERVLIST, SQUERY, SQUIT, STATS, SUMMON,
|
||||
TIME, TOPIC, TRACE, USER, USERHOST, USERS, VERSION, WALLOPS, WEBIRC, WHO,
|
||||
WHOIS, WHOWAS.
|
||||
|
||||
III. Features (or: why use ngIRCd?)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- well arranged (lean) configuration file
|
||||
- simple to build/install, configure and maintain
|
||||
- supports IPv6 and SSL
|
||||
- no problems with servers that have dynamic IP addresses
|
||||
- freely available, modern, portable and tidy C-source
|
||||
- wide field of supported platforms, including AIX, A/UX, FreeBSD, HP-UX,
|
||||
IRIX, Linux, Mac OS X, NetBSD, OpenBSD, Solaris, and Windows with Cygwin.
|
||||
- ngIRCd is being actively developed since 2001.
|
||||
|
||||
|
||||
IV. Documentation
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
More documentation can be found in the "doc/" directory and the homepage of
|
||||
the ngIRCd: <http://ngircd.barton.de/>.
|
||||
|
||||
|
||||
V. Download
|
||||
~~~~~~~~~~~
|
||||
|
||||
The homepage of the ngIRCd is: <http://ngircd.barton.de/>; you will find
|
||||
the newest information about the ngIRCd and the most recent ("stable")
|
||||
releases there.
|
||||
|
||||
If you are interested in the latest development versions (which are not
|
||||
always stable), then please read the section about "GIT" on the homepage and
|
||||
the file "doc/GIT.txt" which describes the use of GIT, the version control
|
||||
system used by ngIRCd (homepage: http://git-scm.com/).
|
||||
|
||||
|
||||
VI. Bugs
|
||||
~~~~~~~~
|
||||
|
||||
If you find bugs in the ngIRCd (which might be there :-), please report
|
||||
them at the following URL:
|
||||
|
||||
<http://ngircd.barton.de/bugtracker.php>
|
||||
|
||||
There you can read about known bugs and limitations, too.
|
||||
|
||||
If you have critics, patches or something else, please feel free to post a
|
||||
mail to the ngIRCd mailing list: <ngircd-ml@arthur.barton.de> (please see
|
||||
<http://ngircd.barton.de/support.php#ml> for details) or join the ngIRCd
|
||||
IRC channel: <irc://irc.barton.de/ngircd>.
|
78
README.md
78
README.md
@@ -1,78 +0,0 @@
|
||||
# [ngIRCd](https://ngircd.barton.de) - Internet Relay Chat Server
|
||||
|
||||
## Introduction
|
||||
|
||||
*ngIRCd* is a free, portable and lightweight *Internet Relay Chat* ([IRC])
|
||||
server for small or private networks, developed under the terms of the GNU
|
||||
General Public License ([GPL]); please see the file `COPYING` for licensing
|
||||
information.
|
||||
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of the IRCNet.
|
||||
|
||||
The name ngIRCd means *next-generation IRC daemon*, which is a little bit
|
||||
exaggerated: *lightweight Internet Relay Chat server* most probably would have
|
||||
been a better name :-)
|
||||
|
||||
Please see the `INSTALL.md` document for installation and upgrade information,
|
||||
online available here: <https://ngircd.barton.de/doc/INSTALL.md>!
|
||||
|
||||
## Status
|
||||
|
||||
ngIRCd should be quite feature-complete and stable to be used as a daemon in
|
||||
real-world IRC networks.
|
||||
|
||||
It is not the goal of ngIRCd to implement all the nasty behaviors of the
|
||||
original ircd, but to implement most of the useful commands and semantics
|
||||
specified by the RFCs that are used by existing clients.
|
||||
|
||||
## Features (or: why use ngIRCd?)
|
||||
|
||||
- Well arranged (lean) configuration file.
|
||||
- Simple to build, install, configure, and maintain.
|
||||
- Supports IPv6 and SSL.
|
||||
- Can use PAM for user authentication.
|
||||
- Lots of popular user and channel modes are implemented.
|
||||
- Supports "cloaking" of users.
|
||||
- No problems with servers that have dynamic IP addresses.
|
||||
- Freely available, modern, portable and tidy C source.
|
||||
- Wide field of supported platforms, including AIX, A/UX, FreeBSD, HP-UX,
|
||||
IRIX, Linux, macOS, NetBSD, OpenBSD, Solaris, and Windows with Cygwin.
|
||||
- ngIRCd is being actively developed since 2001.
|
||||
|
||||
## Documentation
|
||||
|
||||
The **homepage** of the ngIRCd project is <https://ngircd.barton.de>.
|
||||
|
||||
More documentation can be found in the `doc/` directory and
|
||||
[online](https://ngircd.barton.de/documentation).
|
||||
|
||||
## Downloads & Source Code
|
||||
|
||||
You can find the latest information about the ngIRCd and the most recent
|
||||
stable release on the [news](https://ngircd.barton.de/news) and
|
||||
[downloads](https://ngircd.barton.de/download) pages of the homepage.
|
||||
|
||||
Visit our source code repository at [GitHub](https://github.com) if you are
|
||||
interested in the latest development code: <https://github.com/ngircd/ngircd>.
|
||||
|
||||
## Problems, Bugs, Patches
|
||||
|
||||
Please don't hesitate to contact us if you encounter problems:
|
||||
|
||||
- On IRC: <irc://irc.barton.de/ngircd>
|
||||
- Via the mailing list: <ngircd-ml@ngircd.barton.de>
|
||||
|
||||
See <http://ngircd.barton.de/support> for details.
|
||||
|
||||
If you find any bugs in ngIRCd (which most probably will be there ...), please
|
||||
report them to our issue tracker at GitHub:
|
||||
|
||||
- Bug tracker: <https://github.com/ngircd/ngircd/issues>
|
||||
- Patches, "pull requests": <https://github.com/ngircd/ngircd/pulls>
|
||||
|
||||
[IRC]: https://wikipedia.org/wiki/Internet_Relay_Chat
|
||||
[GPL]: https://wikipedia.org/wiki/GNU_General_Public_License
|
47
autogen.sh
47
autogen.sh
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -95,7 +95,7 @@ Search()
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
minor=$(expr $minor - 1)
|
||||
minor=`expr $minor - 1`
|
||||
done
|
||||
return 1
|
||||
}
|
||||
@@ -103,15 +103,14 @@ Search()
|
||||
Notfound()
|
||||
{
|
||||
echo "Error: $* not found!"
|
||||
echo 'Please install supported versions of GNU autoconf, GNU automake'
|
||||
echo 'and pkg-config: see the INSTALL file for details.'
|
||||
echo "Please install recent versions of GNU autoconf and GNU automake."
|
||||
exit 1
|
||||
}
|
||||
|
||||
Run()
|
||||
{
|
||||
[ "$VERBOSE" = "1" ] && echo " - running \"$*\" ..."
|
||||
"$@"
|
||||
[ "$VERBOSE" = "1" ] && echo " - running \"$@\" ..."
|
||||
$@
|
||||
}
|
||||
|
||||
# Reset locale settings to suppress warning messages of Perl
|
||||
@@ -140,43 +139,42 @@ fi
|
||||
# Try to detect the needed tools when no environment variable already
|
||||
# specifies one:
|
||||
echo "Searching for required tools ..."
|
||||
[ -z "$ACLOCAL" ] && ACLOCAL=$(Search aclocal 1)
|
||||
[ -z "$ACLOCAL" ] && ACLOCAL=`Search aclocal 1`
|
||||
[ "$VERBOSE" = "1" ] && echo " - ACLOCAL=$ACLOCAL"
|
||||
[ -z "$AUTOHEADER" ] && AUTOHEADER=$(Search autoheader 2)
|
||||
[ -z "$AUTOHEADER" ] && AUTOHEADER=`Search autoheader 2`
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOHEADER=$AUTOHEADER"
|
||||
[ -z "$AUTOMAKE" ] && AUTOMAKE=$(Search automake 1)
|
||||
[ -z "$AUTOMAKE" ] && AUTOMAKE=`Search automake 1`
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE=$AUTOMAKE"
|
||||
[ -z "$AUTOCONF" ] && AUTOCONF=$(Search autoconf 2)
|
||||
[ -z "$AUTOCONF" ] && AUTOCONF=`Search autoconf 2`
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOCONF=$AUTOCONF"
|
||||
|
||||
AUTOCONF_VERSION=$(echo "$AUTOCONF" | cut -d'-' -f2-)
|
||||
[ -n "$AUTOCONF_VERSION" ] && [ "$AUTOCONF_VERSION" != "autoconf" ] \
|
||||
AUTOCONF_VERSION=`echo $AUTOCONF | cut -d'-' -f2-`
|
||||
[ -n "$AUTOCONF_VERSION" -a "$AUTOCONF_VERSION" != "autoconf" ] \
|
||||
&& export AUTOCONF_VERSION || unset AUTOCONF_VERSION
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOCONF_VERSION=$AUTOCONF_VERSION"
|
||||
AUTOMAKE_VERSION=$(echo $AUTOMAKE | cut -d'-' -f2-)
|
||||
[ -n "$AUTOMAKE_VERSION" ] && [ "$AUTOMAKE_VERSION" != "automake" ] \
|
||||
AUTOMAKE_VERSION=`echo $AUTOMAKE | cut -d'-' -f2-`
|
||||
[ -n "$AUTOMAKE_VERSION" -a "$AUTOMAKE_VERSION" != "automake" ] \
|
||||
&& export AUTOMAKE_VERSION || unset AUTOMAKE_VERSION
|
||||
[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE_VERSION=$AUTOMAKE_VERSION"
|
||||
|
||||
[ $# -gt 0 ] && CONFIGURE_ARGS=" $*" || CONFIGURE_ARGS=""
|
||||
[ -z "$GO" ] && [ -n "$CONFIGURE_ARGS" ] && GO=1
|
||||
[ $# -gt 0 ] && CONFIGURE_ARGS=" $@" || CONFIGURE_ARGS=""
|
||||
[ -z "$GO" -a -n "$CONFIGURE_ARGS" ] && GO=1
|
||||
|
||||
# Verify that all tools have been found
|
||||
command -v pkg-config >/dev/null || Notfound pkg-config
|
||||
[ -z "$ACLOCAL" ] && Notfound aclocal
|
||||
[ -z "$AUTOHEADER" ] && Notfound autoheader
|
||||
[ -z "$AUTOMAKE" ] && Notfound automake
|
||||
[ -z "$AUTOCONF" ] && Notfound autoconf
|
||||
|
||||
AM_VERSION=$($AUTOMAKE --version | head -n 1 | sed -e 's/.* //g')
|
||||
AM_VERSION=`$AUTOMAKE --version | head -n 1 | sed -e 's/.* //g'`
|
||||
ifs=$IFS; IFS="."; set $AM_VERSION; IFS=$ifs
|
||||
AM_MAJOR="$1"; AM_MINOR="$2"
|
||||
AM_MAJOR="$1"; AM_MINOR="$2"; AM_PATCHLEVEL="$3"
|
||||
echo "Detected automake $AM_VERSION ..."
|
||||
|
||||
AM_MAKEFILES="src/ipaddr/Makefile.ng src/ngircd/Makefile.ng src/testsuite/Makefile.ng src/tool/Makefile.ng"
|
||||
|
||||
# De-ANSI-fication?
|
||||
if [ "$AM_MAJOR" -eq "1" ] && [ "$AM_MINOR" -lt "12" ]; then
|
||||
if [ "$AM_MAJOR" -eq "1" -a "$AM_MINOR" -lt "12" ]; then
|
||||
# automake < 1.12 => automatic de-ANSI-fication support available
|
||||
echo " - Enabling de-ANSI-fication support."
|
||||
sed -e "s|^__ng_PROTOTYPES__|AM_C_PROTOTYPES|g" configure.ng >configure.ac
|
||||
@@ -190,20 +188,19 @@ else
|
||||
DEANSI_END=" (disabled by ./autogen.sh script)"
|
||||
fi
|
||||
# Serial test harness?
|
||||
if [ "$AM_MAJOR" -eq "1" ] && [ "$AM_MINOR" -ge "13" ]; then
|
||||
if [ "$AM_MAJOR" -eq "1" -a "$AM_MINOR" -ge "13" ]; then
|
||||
# automake >= 1.13 => enforce "serial test harness"
|
||||
echo " - Enforcing serial test harness."
|
||||
SERIAL_TESTS="serial-tests"
|
||||
else
|
||||
# automake < 1.13 => no new test harness, nothing to do
|
||||
# shellcheck disable=SC2034
|
||||
SERIAL_TEST=""
|
||||
fi
|
||||
|
||||
sed -e "s|^__ng_Makefile_am_template__|AUTOMAKE_OPTIONS = ${SERIAL_TESTS} ${DEANSI_START}ansi2knr${DEANSI_END}|g" \
|
||||
src/portab/Makefile.ng >src/portab/Makefile.am
|
||||
for makefile_ng in $AM_MAKEFILES; do
|
||||
makefile_am=$(echo "$makefile_ng" | sed -e "s|\.ng\$|\.am|g")
|
||||
makefile_am=`echo "$makefile_ng" | sed -e "s|\.ng\$|\.am|g"`
|
||||
sed -e "s|^__ng_Makefile_am_template__|AUTOMAKE_OPTIONS = ${SERIAL_TESTS} ${DEANSI_START}../portab/ansi2knr${DEANSI_END}|g" \
|
||||
$makefile_ng >$makefile_am
|
||||
done
|
||||
@@ -217,10 +214,10 @@ Run $ACLOCAL && \
|
||||
Run $AUTOHEADER && \
|
||||
Run $AUTOMAKE --add-missing --no-force
|
||||
|
||||
if [ $? -eq 0 ] && [ -x ./configure ]; then
|
||||
if [ $? -eq 0 -a -x ./configure ]; then
|
||||
# Success: if we got some parameters we call ./configure and pass
|
||||
# all of them to it.
|
||||
NAME=$(grep PACKAGE_STRING= configure | cut -d"'" -f2)
|
||||
NAME=`grep PACKAGE_STRING= configure | cut -d"'" -f2`
|
||||
if [ "$GO" = "1" ]; then
|
||||
[ -n "$PREFIX" ] && p=" --prefix=$PREFIX" || p=""
|
||||
c="./configure${p}${CONFIGURE_ARGS}"
|
||||
|
1142
config.guess
vendored
Executable file → Normal file
1142
config.guess
vendored
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
2861
config.sub
vendored
Executable file → Normal file
2861
config.sub
vendored
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
137
configure.ng
137
configure.ng
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -23,13 +23,14 @@ m4_ifdef([AM_SILENT_RULES],
|
||||
# -- Initialisation --
|
||||
|
||||
AC_PREREQ([2.61])
|
||||
AC_INIT([ngIRCd],[VERSION_ID],[ngircd-ml@ngircd.barton.de],[ngircd],[http://ngircd.barton.de/])
|
||||
AC_INIT([ngIRCd], VERSION_ID,
|
||||
[ngircd-ml@ngircd.barton.de], [ngircd], [http://ngircd.barton.de/])
|
||||
|
||||
AC_CONFIG_SRCDIR([src/ngircd/ngircd.c])
|
||||
AC_CONFIG_HEADER([src/config.h])
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
AM_INIT_AUTOMAKE([-Wall 1.10 foreign ]ng_color_tests)
|
||||
AM_INIT_AUTOMAKE([-Wall 1.10 ]ng_color_tests)
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||
|
||||
@@ -75,28 +76,27 @@ AC_C_CONST
|
||||
AC_C_INLINE
|
||||
__ng_PROTOTYPES__
|
||||
|
||||
# -- Function Definitions --
|
||||
# -- Hard coded system and compiler dependencies/features/options ... --
|
||||
|
||||
AC_DEFUN([GCC_STACK_PROTECT_CC],[
|
||||
ssp_cc=yes
|
||||
# Use -fstack-protector-all for the test to enfoce the use of the
|
||||
# guard variable
|
||||
AC_MSG_CHECKING([whether ${CC} accepts -fstack-protector])
|
||||
ssp_old_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fstack-protector-all"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],[],[ssp_cc=no])
|
||||
echo $ssp_cc
|
||||
CFLAGS="$ssp_old_cflags"
|
||||
if test "X$ssp_cc" = "Xyes"; then
|
||||
CFLAGS="$CFLAGS -fstack-protector"
|
||||
AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
|
||||
fi
|
||||
ssp_cc=yes
|
||||
# we use -fstack-protector-all for the test to enfoce the use of the guard variable
|
||||
AC_MSG_CHECKING([whether ${CC} accepts -fstack-protector])
|
||||
ssp_old_cflags="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fstack-protector-all"
|
||||
AC_TRY_LINK(,,, ssp_cc=no)
|
||||
echo $ssp_cc
|
||||
CFLAGS="$ssp_old_cflags"
|
||||
if test "X$ssp_cc" = "Xyes"; then
|
||||
CFLAGS="$CFLAGS -fstack-protector"
|
||||
AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
|
||||
fi
|
||||
])
|
||||
|
||||
AC_DEFUN([WORKING_GETADDRINFO],[
|
||||
AC_CHECK_FUNCS([getaddrinfo],[
|
||||
AC_MSG_CHECKING([whether getaddrinfo() works])
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[
|
||||
AC_TRY_RUN([
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
@@ -113,19 +113,15 @@ main(int argc, char **argv)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
]])],[
|
||||
],[
|
||||
AC_DEFINE([HAVE_WORKING_GETADDRINFO], 1, [getaddrinfo(0)])
|
||||
AC_MSG_RESULT(yes)
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
])
|
||||
])
|
||||
|
||||
# -- Hard coded system and compiler dependencies/features/options ... --
|
||||
|
||||
if test "$GCC" = "yes"; then
|
||||
# We are using the GNU C compiler. Good!
|
||||
CFLAGS="$CFLAGS -pipe -W -Wall -Wpointer-arith -Wstrict-prototypes"
|
||||
@@ -154,47 +150,33 @@ AC_HEADER_TIME
|
||||
|
||||
# Required header files
|
||||
AC_CHECK_HEADERS([ \
|
||||
fcntl.h \
|
||||
netdb.h \
|
||||
netinet/in.h \
|
||||
stdlib.h \
|
||||
string.h \
|
||||
strings.h \
|
||||
sys/socket.h \
|
||||
sys/time.h \
|
||||
sys/types.h \
|
||||
unistd.h \
|
||||
fcntl.h netdb.h netinet/in.h stdlib.h string.h \
|
||||
strings.h sys/socket.h sys/time.h unistd.h \
|
||||
],,AC_MSG_ERROR([required C header missing!]))
|
||||
|
||||
# Optional header files
|
||||
AC_CHECK_HEADERS_ONCE([ \
|
||||
arpa/inet.h \
|
||||
inttypes.h \
|
||||
malloc.h \
|
||||
netinet/in_systm.h \
|
||||
netinet/ip.h \
|
||||
stdbool.h \
|
||||
stddef.h \
|
||||
stdint.h \
|
||||
varargs.h \
|
||||
])
|
||||
arpa/inet.h inttypes.h malloc.h netinet/in_systm.h netinet/ip.h \
|
||||
stdbool.h stddef.h stdint.h varargs.h \
|
||||
])
|
||||
|
||||
# -- Datatypes --
|
||||
|
||||
AC_MSG_CHECKING(whether socklen_t exists)
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
AC_TRY_COMPILE([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
]],[[
|
||||
],[
|
||||
socklen_t a, b;
|
||||
a = 2; b = 4; a += b;
|
||||
]])],[
|
||||
],[
|
||||
AC_DEFINE(HAVE_socklen_t) AC_MSG_RESULT(yes)
|
||||
],[
|
||||
AC_MSG_RESULT(no)
|
||||
])
|
||||
|
||||
AC_TYPE_PID_T
|
||||
AC_TYPE_SIGNAL
|
||||
AC_TYPE_SIZE_T
|
||||
AC_TYPE_SSIZE_T
|
||||
AC_TYPE_UID_T
|
||||
@@ -227,50 +209,17 @@ AC_FUNC_STRFTIME
|
||||
|
||||
# Required functions
|
||||
AC_CHECK_FUNCS([ \
|
||||
alarm \
|
||||
dup2 \
|
||||
endpwent \
|
||||
gethostbyaddr \
|
||||
gethostbyname \
|
||||
gethostname \
|
||||
gettimeofday \
|
||||
inet_ntoa \
|
||||
memmove \
|
||||
memset \
|
||||
setsid \
|
||||
socket \
|
||||
strcasecmp \
|
||||
strchr \
|
||||
strcspn \
|
||||
strerror \
|
||||
strncasecmp \
|
||||
strrchr \
|
||||
strspn \
|
||||
strstr \
|
||||
alarm dup2 endpwent gethostbyaddr gethostbyname gethostname \
|
||||
gettimeofday inet_ntoa memmove memset setsid socket strcasecmp \
|
||||
strchr strcspn strerror strncasecmp strrchr strspn strstr \
|
||||
],,
|
||||
AC_MSG_ERROR([required function missing!]))
|
||||
|
||||
# Optional functions
|
||||
AC_CHECK_FUNCS_ONCE([
|
||||
arc4random \
|
||||
arc4random_stir \
|
||||
gai_strerror \
|
||||
getnameinfo \
|
||||
inet_aton \
|
||||
setgroups \
|
||||
sigaction \
|
||||
sigprocmask \
|
||||
snprintf \
|
||||
strdup \
|
||||
strlcat \
|
||||
strlcpy \
|
||||
strndup \
|
||||
strsignal \
|
||||
strtok_r \
|
||||
unsetenv \
|
||||
vsnprintf \
|
||||
waitpid \
|
||||
])
|
||||
arc4random arc4random_stir gai_strerror getnameinfo inet_aton \
|
||||
sigaction sigprocmask snprintf vsnprintf strdup strndup strlcpy strlcat \
|
||||
strtok_r unsetenv waitpid])
|
||||
|
||||
WORKING_GETADDRINFO
|
||||
|
||||
@@ -465,13 +414,9 @@ AC_ARG_WITH(openssl,
|
||||
CPPFLAGS="-I$withval/include $CPPFLAGS"
|
||||
LDFLAGS="-L$withval/lib $LDFLAGS"
|
||||
fi
|
||||
PKG_CHECK_MODULES([OPENSSL], [libssl libcrypto],
|
||||
[LIBS="$LIBS $OPENSSL_LIBS" CFLAGS="$CFLAGS $OPENSSL_CFLAGS"
|
||||
AC_DEFINE(HAVE_LIBSSL, 1)],
|
||||
[AC_CHECK_LIB(crypto, BIO_s_mem)
|
||||
AC_CHECK_LIB(ssl, SSL_new)]
|
||||
)
|
||||
AC_CHECK_FUNCS(SSL_new, x_ssl_openssl=yes,
|
||||
AC_CHECK_LIB(crypto, BIO_s_mem)
|
||||
AC_CHECK_LIB(ssl, SSL_library_init)
|
||||
AC_CHECK_FUNCS(SSL_library_init, x_ssl_openssl=yes,
|
||||
AC_MSG_ERROR([Can't enable openssl])
|
||||
)
|
||||
fi
|
||||
@@ -506,8 +451,6 @@ if test "$x_ssl_openssl" = "yes"; then
|
||||
x_ssl_lib=openssl
|
||||
fi
|
||||
|
||||
AM_CONDITIONAL(HAVE_SSL, [test $x_ssl_lib != "no"])
|
||||
|
||||
# use TCP wrappers?
|
||||
|
||||
x_tcpwrap_on=no
|
||||
@@ -524,15 +467,15 @@ AC_ARG_WITH(tcp-wrappers,
|
||||
saved_LIBS="$LIBS"
|
||||
LIBS="-lwrap $LIBS"
|
||||
LIBS_END="-lwrap $LIBS_END"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||
AC_TRY_LINK([
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <tcpd.h>
|
||||
int allow_severity = 0;
|
||||
int deny_severity = 0;
|
||||
]],[[
|
||||
],[
|
||||
tcpd_warn("link test");
|
||||
]])],[
|
||||
],[
|
||||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE(TCPWRAP, 1)
|
||||
x_tcpwrap_on=yes
|
||||
|
3
contrib/Debian/.gitignore
vendored
3
contrib/Debian/.gitignore
vendored
@@ -4,13 +4,10 @@
|
||||
files
|
||||
ngircd/
|
||||
ngircd-full/
|
||||
ngircd.service
|
||||
ngircd-full.default
|
||||
ngircd-full.init
|
||||
ngircd-full.postinst
|
||||
ngircd-full.service
|
||||
ngircd-full-dbg/
|
||||
ngircd-full-dbg.default
|
||||
ngircd-full-dbg.init
|
||||
ngircd-full-dbg.postinst
|
||||
ngircd-full-dbg.service
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2017 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -10,8 +10,7 @@
|
||||
#
|
||||
|
||||
EXTRA_DIST = rules changelog compat control copyright \
|
||||
ngircd.init ngircd.default ngircd.pam ngircd.postinst \
|
||||
source/format
|
||||
ngircd.init ngircd.default ngircd.pam ngircd.postinst
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in
|
||||
|
@@ -1,87 +1,3 @@
|
||||
ngircd (26.1-0ab1) unstable; urgency=medium
|
||||
|
||||
* New "upstream" release: ngIRCd 26.1.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 02 Jan 2021 14:31:51 +0100
|
||||
|
||||
ngircd (26-0ab1) unstable; urgency=medium
|
||||
|
||||
* New "upstream" release: ngIRCd 26.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 20 Jun 2020 15:26:46 +0200
|
||||
|
||||
ngircd (26~rc2-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 2 for ngIRCd Release 26.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Thu, 11 Jun 2020 17:21:17 +0200
|
||||
|
||||
ngircd (26~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 26.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 10 May 2020 17:13:17 +0200
|
||||
|
||||
ngircd (25-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 25.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Wed, 23 Jan 2019 23:13:03 +0100
|
||||
|
||||
ngircd (25~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 25.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 11 Aug 2018 21:35:08 +0200
|
||||
|
||||
ngircd (24-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 24.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Fri, 20 Jan 2017 16:43:09 +0100
|
||||
|
||||
ngircd (24~rc1-0ab2) unstable; urgency=low
|
||||
|
||||
* Use OpenSSL instead of GnuTLS for SSL-enabled packages.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Fri, 20 Jan 2017 15:20:07 +0100
|
||||
|
||||
ngircd (24~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 24.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 07 Jan 2017 18:58:02 +0100
|
||||
|
||||
ngircd (23-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 23.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 16 Nov 2015 21:27:03 +0100
|
||||
|
||||
ngircd (23~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 23.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sun, 06 Sep 2015 16:55:23 +0200
|
||||
|
||||
ngircd (22.1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 22.1.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 06 Apr 2015 14:34:50 +0200
|
||||
|
||||
ngircd (22-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release: ngIRCd 22.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Sat, 11 Oct 2014 20:29:03 +0200
|
||||
|
||||
ngircd (22~rc1-0ab1) unstable; urgency=low
|
||||
|
||||
* New "upstream" release candidate 1 for ngIRCd Release 22.
|
||||
|
||||
-- Alexander Barton <alex@barton.de> Mon, 29 Sep 2014 17:07:55 +0200
|
||||
|
||||
ngircd (21.1-0ab2) unstable; urgency=low
|
||||
|
||||
* Use correct package name in pathname to "HelpFile" (Command.txt)
|
||||
|
@@ -1 +1 @@
|
||||
9
|
||||
4
|
||||
|
@@ -2,15 +2,14 @@ Source: ngircd
|
||||
Section: net
|
||||
Priority: optional
|
||||
Maintainer: Alexander Barton <alex@barton.de>
|
||||
Build-Depends: debhelper (>> 9.0.0),
|
||||
Build-Depends: debhelper (>> 4.0.0),
|
||||
autotools-dev,
|
||||
dh-systemd (>= 1.5),
|
||||
expect,
|
||||
libident-dev,
|
||||
libpam0g-dev,
|
||||
libssl-dev,
|
||||
libwrap0-dev,
|
||||
libz-dev,
|
||||
libwrap0-dev,
|
||||
libident-dev,
|
||||
libgnutls-dev,
|
||||
libpam0g-dev,
|
||||
telnet | telnet-ssl,
|
||||
Standards-Version: 3.9.1
|
||||
|
||||
@@ -19,21 +18,16 @@ Architecture: any
|
||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Provides: ircd
|
||||
Description: lightweight Internet Relay Chat server
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server
|
||||
for small or private networks, developed under the GNU General Public
|
||||
License (GPL).
|
||||
.
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of IRCNet.
|
||||
This package provides ngIRCd, a portable and lightweight Internet Relay
|
||||
Chat server for small or private networks, developed under the GNU
|
||||
General Public License (GPL). It is simple to configure, can cope with
|
||||
dynamic IP addresses, and supports IPv6 as well as SSL. It is written
|
||||
from scratch and not based on the original IRCd.
|
||||
.
|
||||
This package contains the "standard distribution", including support for
|
||||
syslog logging and compressed server-links using zlib. Please have a look
|
||||
at the "ngircd-full" package if you need "more advanced" functionality like
|
||||
support for TCP wrappers, IDENT requests, the IPv6 protocol, PAM and
|
||||
SSL encrypted client and server links.
|
||||
at the "ngircd-full" package if you need advanced functionality like support
|
||||
for IPv6 or SSL.
|
||||
|
||||
Package: ngircd-full
|
||||
Architecture: any
|
||||
@@ -41,18 +35,14 @@ Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Provides: ircd
|
||||
Conflicts: ngircd, ngircd-dbg
|
||||
Description: lightweight Internet Relay Chat server
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server
|
||||
for small or private networks, developed under the GNU General Public
|
||||
License (GPL).
|
||||
.
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of IRCNet.
|
||||
This package provides ngIRCd, a portable and lightweight Internet Relay
|
||||
Chat server for small or private networks, developed under the GNU
|
||||
General Public License (GPL). It is simple to configure, can cope with
|
||||
dynamic IP addresses, and supports IPv6 as well as SSL. It is written
|
||||
from scratch and not based on the original IRCd.
|
||||
.
|
||||
In addition to the features of the "standard package", this package
|
||||
includes support for TCP wrappers, IDENT requests, the IPv6 protocol, PAM and
|
||||
includes support for TCP wrappers, IDENT requests, the IPv6 protocol and
|
||||
SSL encrypted client and server links.
|
||||
|
||||
Package: ngircd-full-dbg
|
||||
@@ -61,18 +51,14 @@ Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||
Provides: ircd
|
||||
Conflicts: ngircd, ngircd-full
|
||||
Description: lightweight Internet Relay Chat server
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server
|
||||
for small or private networks, developed under the GNU General Public
|
||||
License (GPL).
|
||||
.
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of IRCNet.
|
||||
This package provides ngIRCd, a portable and lightweight Internet Relay
|
||||
Chat server for small or private networks, developed under the GNU
|
||||
General Public License (GPL). It is simple to configure, can cope with
|
||||
dynamic IP addresses, and supports IPv6 as well as SSL. It is written
|
||||
from scratch and not based on the original IRCd.
|
||||
.
|
||||
In addition to the features of the "standard package", this package
|
||||
includes support for TCP wrappers, IDENT requests, the IPv6 protocol, PAM and
|
||||
includes support for TCP wrappers, IDENT requests, the IPv6 protocol and
|
||||
SSL encrypted client and server links.
|
||||
.
|
||||
And in addition to the "full" variant, the binaries contained in this
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ngIRCd start and stop script for Debian-based systems
|
||||
# Copyright 2008-2015 Alexander Barton <alex@barton.de>
|
||||
# Copyright 2008-2013 Alexander Barton <alex@barton.de>
|
||||
#
|
||||
|
||||
### BEGIN INIT INFO
|
||||
@@ -37,7 +37,7 @@ log_daemon_msg() {
|
||||
echo -n "$*"
|
||||
}
|
||||
log_end_msg() {
|
||||
[ "$1" = "0" ] && echo "." || echo " failed!"
|
||||
[ "$1" == "0" ] && echo "." || echo " failed!"
|
||||
}
|
||||
log_failure_msg() {
|
||||
echo "$*"
|
||||
|
@@ -1,6 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Debian post-installation script
|
||||
# $Id: ngircd.postinst,v 1.2 2006/12/26 14:44:40 alex Exp $
|
||||
#
|
||||
|
||||
set -e
|
||||
@@ -11,7 +12,6 @@ case "$1" in
|
||||
# make sure that the configuration file is not
|
||||
# world-readable, it contains passwords!
|
||||
chmod o= /etc/ngircd/ngircd.conf
|
||||
chgrp irc /etc/ngircd/ngircd.conf
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/make -f
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2016 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -55,7 +55,7 @@ configure-ngircd-full: configure
|
||||
--mandir=\$${prefix}/share/man \
|
||||
--docdir=\$${prefix}/share/doc/ngircd-full \
|
||||
--with-syslog --with-zlib \
|
||||
--with-openssl --with-iconv --with-ident --with-tcp-wrappers \
|
||||
--with-gnutls --with-iconv --with-ident --with-tcp-wrappers \
|
||||
--with-pam \
|
||||
--enable-ipv6
|
||||
|
||||
@@ -70,12 +70,12 @@ configure-ngircd-full-dbg: configure
|
||||
--docdir=\$${prefix}/share/doc/ngircd-full-dbg \
|
||||
--enable-debug --enable-sniffer \
|
||||
--with-syslog --with-zlib \
|
||||
--with-openssl --with-iconv --with-ident --with-tcp-wrappers \
|
||||
--with-gnutls --with-iconv --with-ident --with-tcp-wrappers \
|
||||
--with-pam \
|
||||
--enable-ipv6
|
||||
|
||||
build:
|
||||
dh_prep
|
||||
dh_clean -k
|
||||
|
||||
build-ngircd: build-stamp-ngircd
|
||||
build-stamp-ngircd: configure-ngircd
|
||||
@@ -111,15 +111,12 @@ clean:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
rm -f build-stamp*
|
||||
rm -f $(CURDIR)/debian/ngircd.service
|
||||
rm -f $(CURDIR)/debian/ngircd-full.default
|
||||
rm -f $(CURDIR)/debian/ngircd-full.init
|
||||
rm -f $(CURDIR)/debian/ngircd-full.postinst
|
||||
rm -f $(CURDIR)/debian/ngircd-full.service
|
||||
rm -f $(CURDIR)/debian/ngircd-full-dbg.default
|
||||
rm -f $(CURDIR)/debian/ngircd-full-dbg.postinst
|
||||
rm -f $(CURDIR)/debian/ngircd-full-dbg.init
|
||||
rm -f $(CURDIR)/debian/ngircd-full-dbg.service
|
||||
|
||||
# Add here commands to clean up after the build process:
|
||||
[ ! -f Makefile ] || $(MAKE) distclean
|
||||
@@ -143,6 +140,7 @@ install-ngircd: build-ngircd
|
||||
$(MAKE) install DESTDIR=$(CURDIR)/debian/ngircd
|
||||
rm $(CURDIR)/debian/ngircd/usr/share/doc/ngircd/INSTALL*
|
||||
rm $(CURDIR)/debian/ngircd/usr/share/doc/ngircd/COPYING*
|
||||
mkdir -p $(CURDIR)/debian/ngircd/var/run/ircd
|
||||
cat $(CURDIR)/debian/ngircd/usr/share/doc/ngircd/sample-ngircd.conf | \
|
||||
sed -e "s|;ServerUID = 65534|ServerUID = irc|g" | \
|
||||
sed -e "s|;ServerGID = 65534|ServerGID = irc|g" | \
|
||||
@@ -159,6 +157,7 @@ install-ngircd-full: build-ngircd-full
|
||||
$(MAKE) install DESTDIR=$(CURDIR)/debian/ngircd-full
|
||||
rm $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd-full/INSTALL*
|
||||
rm $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd-full/COPYING*
|
||||
mkdir -p $(CURDIR)/debian/ngircd-full/var/run/ircd
|
||||
cat $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd-full/sample-ngircd.conf | \
|
||||
sed -e "s|;ServerUID = 65534|ServerUID = irc|g" | \
|
||||
sed -e "s|;ServerGID = 65534|ServerGID = irc|g" | \
|
||||
@@ -177,6 +176,7 @@ install-ngircd-full-dbg: build-ngircd-full-dbg
|
||||
$(MAKE) install DESTDIR=$(CURDIR)/debian/ngircd-full-dbg
|
||||
rm $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd-full-dbg/INSTALL*
|
||||
rm $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd-full-dbg/COPYING*
|
||||
mkdir -p $(CURDIR)/debian/ngircd-full-dbg/var/run/ircd
|
||||
cat $(CURDIR)/debian/ngircd-full-dbg/usr/share/doc/ngircd-full-dbg/sample-ngircd.conf | \
|
||||
sed -e "s|;ServerUID = 65534|ServerUID = irc|g" | \
|
||||
sed -e "s|;ServerGID = 65534|ServerGID = irc|g" | \
|
||||
@@ -192,18 +192,12 @@ binary-indep:
|
||||
|
||||
# Build architecture-dependent files here.
|
||||
binary-arch: build install
|
||||
ln -s $(CURDIR)/contrib/ngircd.service \
|
||||
$(CURDIR)/debian/ngircd.service
|
||||
|
||||
ln -s $(CURDIR)/debian/ngircd.default \
|
||||
$(CURDIR)/debian/ngircd-full.default
|
||||
ln -s $(CURDIR)/debian/ngircd.init \
|
||||
$(CURDIR)/debian/ngircd-full.init
|
||||
ln -s $(CURDIR)/debian/ngircd.postinst \
|
||||
$(CURDIR)/debian/ngircd-full.postinst
|
||||
cp $(CURDIR)/contrib/ngircd.service \
|
||||
$(CURDIR)/debian/ngircd-full.service
|
||||
echo "Alias=ngircd.service" >>$(CURDIR)/debian/ngircd-full.service
|
||||
|
||||
ln -s $(CURDIR)/debian/ngircd.default \
|
||||
$(CURDIR)/debian/ngircd-full-dbg.default
|
||||
@@ -211,17 +205,12 @@ binary-arch: build install
|
||||
$(CURDIR)/debian/ngircd-full-dbg.init
|
||||
ln -s $(CURDIR)/debian/ngircd.postinst \
|
||||
$(CURDIR)/debian/ngircd-full-dbg.postinst
|
||||
cp $(CURDIR)/contrib/ngircd.service \
|
||||
$(CURDIR)/debian/ngircd-full-dbg.service
|
||||
echo "Alias=ngircd.service" >>$(CURDIR)/debian/ngircd-full-dbg.service
|
||||
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_installchangelogs -a -A ChangeLog
|
||||
dh_installdocs -a
|
||||
dh_systemd_enable -a
|
||||
dh_installinit -a
|
||||
dh_systemd_start -a
|
||||
dh_strip -a --no-package=ngircd-full-dbg
|
||||
dh_compress -a -XCommands.txt
|
||||
dh_fixperms -a
|
||||
@@ -233,6 +222,6 @@ binary-arch: build install
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
|
||||
.PHONY: build clean binary-indep binary-arch binary install
|
||||
.PHONY: build clean binary-indep binary-arch binary install
|
||||
|
||||
# -eof-
|
||||
|
@@ -1 +0,0 @@
|
||||
1.0
|
@@ -113,8 +113,6 @@
|
||||
#define HAVE_SIGACTION 1
|
||||
/* Define to 1 if you have the `setsid' function. */
|
||||
#define HAVE_SETSID 1
|
||||
/* Define to 1 if you have the `strsignal' function. */
|
||||
#define HAVE_STRSIGNAL 1
|
||||
|
||||
/* Define if socklen_t exists */
|
||||
#define HAVE_socklen_t 1
|
||||
|
@@ -51,6 +51,18 @@
|
||||
FAE5CC2E0CF2308A007D69B6 /* numeric.c in Sources */ = {isa = PBXBuildFile; fileRef = FAE5CC2D0CF2308A007D69B6 /* numeric.c */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
8DD76FAF0486AB0100D96B5E /* CopyFiles */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 8;
|
||||
dstPath = /usr/share/man/man1/;
|
||||
dstSubfolderSpec = 0;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 1;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
FA18A63E16CEDDCE00132F66 /* configure.ng */ = {isa = PBXFileReference; lastKnownFileType = text; name = configure.ng; path = ../../configure.ng; sourceTree = "<group>"; };
|
||||
FA18A63F16CEDE2300132F66 /* ngircd.service */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.service; sourceTree = "<group>"; };
|
||||
@@ -72,7 +84,7 @@
|
||||
FA2D564811EA158B00D37A35 /* pam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pam.h; sourceTree = "<group>"; };
|
||||
FA2D564911EA158B00D37A35 /* pam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pam.c; sourceTree = "<group>"; };
|
||||
FA2D567A11EA1AB300D37A35 /* libpam.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpam.dylib; path = usr/lib/libpam.dylib; sourceTree = SDKROOT; };
|
||||
FA322BBA0CEF72E4001761B3 /* ngircd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ngircd; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FA322BBA0CEF72E4001761B3 /* ngIRCd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; name = ngIRCd; path = ngircd; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
FA322CD60CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322CD90CEF74B1001761B3 /* array.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = array.c; sourceTree = "<group>"; };
|
||||
FA322CDA0CEF74B1001761B3 /* array.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = "<group>"; };
|
||||
@@ -126,6 +138,8 @@
|
||||
FA322D0D0CEF74B1001761B3 /* resolve.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = resolve.h; sourceTree = "<group>"; };
|
||||
FA322D100CEF74B1001761B3 /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = ansi2knr.1; sourceTree = "<group>"; };
|
||||
FA322D110CEF74B1001761B3 /* ansi2knr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = ansi2knr.c; sourceTree = "<group>"; };
|
||||
FA322D120CEF74B1001761B3 /* exp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = exp.h; sourceTree = "<group>"; };
|
||||
FA322D130CEF74B1001761B3 /* imp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = imp.h; sourceTree = "<group>"; };
|
||||
FA322D150CEF74B1001761B3 /* portab.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = portab.h; sourceTree = "<group>"; };
|
||||
FA322D160CEF74B1001761B3 /* portabtest.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = portabtest.c; sourceTree = "<group>"; };
|
||||
FA322D170CEF74B1001761B3 /* splint.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = splint.h; sourceTree = "<group>"; };
|
||||
@@ -154,10 +168,10 @@
|
||||
FA322D5E0CEF750F001761B3 /* config.guess */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = config.guess; path = ../../config.guess; sourceTree = SOURCE_ROOT; };
|
||||
FA322D5F0CEF750F001761B3 /* config.sub */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = config.sub; path = ../../config.sub; sourceTree = SOURCE_ROOT; };
|
||||
FA322D610CEF750F001761B3 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = COPYING; path = ../../COPYING; sourceTree = SOURCE_ROOT; };
|
||||
FA322D620CEF750F001761B3 /* INSTALL.md */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = net.daringfireball.markdown; name = INSTALL.md; path = ../../INSTALL.md; sourceTree = SOURCE_ROOT; };
|
||||
FA322D620CEF750F001761B3 /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = INSTALL; path = ../../INSTALL; sourceTree = SOURCE_ROOT; };
|
||||
FA322D630CEF750F001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../Makefile.am; sourceTree = SOURCE_ROOT; };
|
||||
FA322D640CEF750F001761B3 /* NEWS */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = NEWS; path = ../../NEWS; sourceTree = SOURCE_ROOT; };
|
||||
FA322D650CEF750F001761B3 /* README.md */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../../README.md; sourceTree = SOURCE_ROOT; };
|
||||
FA322D650CEF750F001761B3 /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = README; path = ../../README; sourceTree = SOURCE_ROOT; };
|
||||
FA322D6A0CEF7523001761B3 /* changelog */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = changelog; sourceTree = "<group>"; };
|
||||
FA322D6B0CEF7523001761B3 /* compat */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = compat; sourceTree = "<group>"; };
|
||||
FA322D6C0CEF7523001761B3 /* control */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = control; sourceTree = "<group>"; };
|
||||
@@ -167,10 +181,12 @@
|
||||
FA322D700CEF7523001761B3 /* ngircd.init */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngircd.init; sourceTree = "<group>"; };
|
||||
FA322D710CEF7523001761B3 /* ngircd.postinst */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngircd.postinst; sourceTree = "<group>"; };
|
||||
FA322D720CEF7523001761B3 /* rules */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = rules; sourceTree = "<group>"; };
|
||||
FA322D8D0CEF7523001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = MacOSX/Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D8E0CEF7523001761B3 /* ngIRCd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = ngIRCd.xcodeproj; sourceTree = "<group>"; };
|
||||
FA322D920CEF7523001761B3 /* ngindent.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngindent.sh; sourceTree = "<group>"; };
|
||||
FA322D920CEF7523001761B3 /* ngindent */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngindent; sourceTree = "<group>"; };
|
||||
FA322D940CEF7523001761B3 /* ngircd.spec */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.spec; sourceTree = "<group>"; };
|
||||
FA322D950CEF7523001761B3 /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
|
||||
FA322D960CEF7523001761B3 /* systrace.policy */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = systrace.policy; sourceTree = "<group>"; };
|
||||
FA322D9A0CEF752C001761B3 /* FAQ.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = FAQ.txt; sourceTree = "<group>"; };
|
||||
FA322D9B0CEF752C001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FA322D9C0CEF752C001761B3 /* Platforms.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Platforms.txt; sourceTree = "<group>"; };
|
||||
@@ -189,12 +205,11 @@
|
||||
FA322DC00CEF77CB001761B3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
|
||||
FA407F2C0DB159F400271AF1 /* ng_ipaddr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ng_ipaddr.c; path = ipaddr/ng_ipaddr.c; sourceTree = "<group>"; };
|
||||
FA407F2D0DB159F400271AF1 /* ng_ipaddr.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = ng_ipaddr.h; path = ipaddr/ng_ipaddr.h; sourceTree = "<group>"; };
|
||||
FA407F380DB15AC700271AF1 /* GIT.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = GIT.txt; sourceTree = "<group>"; };
|
||||
FA4B08E513E7F8FB00765BA3 /* ngircd-bsd.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ngircd-bsd.sh"; sourceTree = "<group>"; };
|
||||
FA4B08E613E7F91700765BA3 /* ngIRCd-Logo.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "ngIRCd-Logo.gif"; sourceTree = "<group>"; };
|
||||
FA4B08E713E7F91700765BA3 /* ngircd-redhat.init */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ngircd-redhat.init"; sourceTree = "<group>"; };
|
||||
FA4B08E813E7F91C00765BA3 /* platformtest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = platformtest.sh; sourceTree = "<group>"; };
|
||||
FA4B4F542055B47C00A04296 /* ngircd.logcheck */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.logcheck; sourceTree = "<group>"; };
|
||||
FA4B4F552055B4C800A04296 /* source */ = {isa = PBXFileReference; lastKnownFileType = folder; path = source; sourceTree = "<group>"; };
|
||||
FA4F1659164836B100DBD011 /* irc-metadata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "irc-metadata.c"; sourceTree = "<group>"; };
|
||||
FA4F165C164836BF00DBD011 /* irc-metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "irc-metadata.h"; sourceTree = "<group>"; };
|
||||
FA6BBC5F1605F0AB0004247A /* conn-encoding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "conn-encoding.c"; sourceTree = "<group>"; };
|
||||
@@ -203,8 +218,6 @@
|
||||
FA6BBC621605F0AC0004247A /* irc-encoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "irc-encoding.h"; sourceTree = "<group>"; };
|
||||
FA6BBC651605F6D60004247A /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = ../../../../../../../usr/lib/libiconv.dylib; sourceTree = "<group>"; };
|
||||
FA77849A133FB9FF00740057 /* sample-ngircd.conf.tmpl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "sample-ngircd.conf.tmpl"; sourceTree = "<group>"; };
|
||||
FA7E9FEE242FFC4500A04296 /* server-link-test.e */ = {isa = PBXFileReference; lastKnownFileType = text; path = "server-link-test.e"; sourceTree = "<group>"; };
|
||||
FA7E9FF0242FFC6C00A04296 /* server-login-test.e */ = {isa = PBXFileReference; lastKnownFileType = text; path = "server-login-test.e"; sourceTree = "<group>"; };
|
||||
FA85178A0FA061EC006A1F5A /* op.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = op.h; sourceTree = "<group>"; };
|
||||
FA85178B0FA061EC006A1F5A /* op.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = op.c; sourceTree = "<group>"; };
|
||||
FA99428A10E82A27007F27ED /* proc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = proc.h; sourceTree = "<group>"; };
|
||||
@@ -233,10 +246,8 @@
|
||||
FAA3D28B0F139D2E00B2447E /* preinstall.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = preinstall.sh; sourceTree = "<group>"; };
|
||||
FAA97C55124A271400D5BBA9 /* sighandlers.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = sighandlers.c; sourceTree = "<group>"; };
|
||||
FAA97C56124A271400D5BBA9 /* sighandlers.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = sighandlers.h; sourceTree = "<group>"; };
|
||||
FAA9C8162377186900A04296 /* nglog.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = nglog.sh; sourceTree = "<group>"; };
|
||||
FAACD5F314A6099C006ED74F /* class.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = class.c; sourceTree = "<group>"; };
|
||||
FAACD5F414A6099C006ED74F /* class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = class.h; sourceTree = "<group>"; };
|
||||
FAC4E5CD23A7DE2400A04296 /* Makefile.am */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
|
||||
FAD5852F15271A7800328741 /* Capabilities.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = Capabilities.txt; sourceTree = "<group>"; };
|
||||
FAD5853015271AAB00328741 /* client-cap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "client-cap.c"; sourceTree = "<group>"; };
|
||||
FAD5853115271AAB00328741 /* client-cap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "client-cap.h"; sourceTree = "<group>"; };
|
||||
@@ -279,9 +290,9 @@
|
||||
FA322D5A0CEF750F001761B3 /* AUTHORS */,
|
||||
FA322D5C0CEF750F001761B3 /* ChangeLog */,
|
||||
FA322D610CEF750F001761B3 /* COPYING */,
|
||||
FA322D620CEF750F001761B3 /* INSTALL.md */,
|
||||
FA322D620CEF750F001761B3 /* INSTALL */,
|
||||
FA322D640CEF750F001761B3 /* NEWS */,
|
||||
FA322D650CEF750F001761B3 /* README.md */,
|
||||
FA322D650CEF750F001761B3 /* README */,
|
||||
FA322D5B0CEF750F001761B3 /* autogen.sh */,
|
||||
FA322D5E0CEF750F001761B3 /* config.guess */,
|
||||
FA322D5F0CEF750F001761B3 /* config.sub */,
|
||||
@@ -301,7 +312,7 @@
|
||||
1AB674ADFE9D54B511CA2CBB /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA322BBA0CEF72E4001761B3 /* ngircd */,
|
||||
FA322BBA0CEF72E4001761B3 /* ngIRCd */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -412,6 +423,8 @@
|
||||
FA18A64716CEE14900132F66 /* Makefile.ng */,
|
||||
FA322D100CEF74B1001761B3 /* ansi2knr.1 */,
|
||||
FA322D110CEF74B1001761B3 /* ansi2knr.c */,
|
||||
FA322D120CEF74B1001761B3 /* exp.h */,
|
||||
FA322D130CEF74B1001761B3 /* imp.h */,
|
||||
FA322D150CEF74B1001761B3 /* portab.h */,
|
||||
FA322D160CEF74B1001761B3 /* portabtest.c */,
|
||||
FA322D170CEF74B1001761B3 /* splint.h */,
|
||||
@@ -428,34 +441,32 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FA18A64A16CEE18100132F66 /* Makefile.ng */,
|
||||
FA322D250CEF74B1001761B3 /* README */,
|
||||
FA322D1D0CEF74B1001761B3 /* channel-test.e */,
|
||||
FA322D1E0CEF74B1001761B3 /* check-idle.e */,
|
||||
FA322D1F0CEF74B1001761B3 /* connect-test.e */,
|
||||
FA322D200CEF74B1001761B3 /* functions.inc */,
|
||||
FA322D210CEF74B1001761B3 /* getpid.sh */,
|
||||
FAA3D2700F139CB300B2447E /* invite-test.e */,
|
||||
FAA3D2710F139CB300B2447E /* join-test.e */,
|
||||
FAA3D2720F139CB300B2447E /* kick-test.e */,
|
||||
FAA3D2730F139CB300B2447E /* message-test.e */,
|
||||
FA18A64E16CEE24B00132F66 /* misc-test.e */,
|
||||
FA18A64C16CEE1AC00132F66 /* mode-test.e */,
|
||||
FAA3D2740F139CB300B2447E /* ngircd-test1.conf */,
|
||||
FAA3D2750F139CB300B2447E /* ngircd-test2.conf */,
|
||||
FAA3D2760F139CB300B2447E /* opless-channel-test.e */,
|
||||
FA322D250CEF74B1001761B3 /* README */,
|
||||
FAA3D2770F139CB300B2447E /* server-link-test.e */,
|
||||
FA322D260CEF74B1001761B3 /* start-server.sh */,
|
||||
FA322D270CEF74B1001761B3 /* stop-server.sh */,
|
||||
FA322D280CEF74B1001761B3 /* stress-A.e */,
|
||||
FA322D290CEF74B1001761B3 /* stress-B.e */,
|
||||
FA7E9FEE242FFC4500A04296 /* server-link-test.e */,
|
||||
FA7E9FF0242FFC6C00A04296 /* server-login-test.e */,
|
||||
FA1A6BBD0D6857D900AA8F71 /* who-test.e */,
|
||||
FA18A64D16CEE1D900132F66 /* whois-test.e */,
|
||||
FA322D200CEF74B1001761B3 /* functions.inc */,
|
||||
FAA3D2740F139CB300B2447E /* ngircd-test1.conf */,
|
||||
FAA3D2750F139CB300B2447E /* ngircd-test2.conf */,
|
||||
FA322D210CEF74B1001761B3 /* getpid.sh */,
|
||||
FA322D260CEF74B1001761B3 /* start-server.sh */,
|
||||
FA322D270CEF74B1001761B3 /* stop-server.sh */,
|
||||
FA322D2A0CEF74B1001761B3 /* stress-server.sh */,
|
||||
FA322D2B0CEF74B1001761B3 /* test-loop.sh */,
|
||||
FA322D2C0CEF74B1001761B3 /* tests.sh */,
|
||||
FA322D2D0CEF74B1001761B3 /* wait-tests.sh */,
|
||||
FA1A6BBD0D6857D900AA8F71 /* who-test.e */,
|
||||
FA18A64D16CEE1D900132F66 /* whois-test.e */,
|
||||
);
|
||||
path = testsuite;
|
||||
sourceTree = "<group>";
|
||||
@@ -473,20 +484,19 @@
|
||||
FA322D660CEF7523001761B3 /* contrib */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
FAC4E5CD23A7DE2400A04296 /* Makefile.am */,
|
||||
FA322D8D0CEF7523001761B3 /* Makefile.am */,
|
||||
FA322D680CEF7523001761B3 /* Debian */,
|
||||
FA322D730CEF7523001761B3 /* MacOSX */,
|
||||
FA322D950CEF7523001761B3 /* README */,
|
||||
FA322D920CEF7523001761B3 /* ngindent.sh */,
|
||||
FA322D920CEF7523001761B3 /* ngindent */,
|
||||
FA4B08E513E7F8FB00765BA3 /* ngircd-bsd.sh */,
|
||||
FA4B08E613E7F91700765BA3 /* ngIRCd-Logo.gif */,
|
||||
FA4B08E713E7F91700765BA3 /* ngircd-redhat.init */,
|
||||
FA4B4F542055B47C00A04296 /* ngircd.logcheck */,
|
||||
FA18A63F16CEDE2300132F66 /* ngircd.service */,
|
||||
FA18A64016CEDE2300132F66 /* ngircd.socket */,
|
||||
FA322D940CEF7523001761B3 /* ngircd.spec */,
|
||||
FAA9C8162377186900A04296 /* nglog.sh */,
|
||||
FA4B08E813E7F91C00765BA3 /* platformtest.sh */,
|
||||
FA322D960CEF7523001761B3 /* systrace.policy */,
|
||||
);
|
||||
name = contrib;
|
||||
path = ..;
|
||||
@@ -505,7 +515,6 @@
|
||||
FA18A64116CEDE3500132F66 /* ngircd.pam */,
|
||||
FA322D710CEF7523001761B3 /* ngircd.postinst */,
|
||||
FA322D720CEF7523001761B3 /* rules */,
|
||||
FA4B4F552055B4C800A04296 /* source */,
|
||||
);
|
||||
path = Debian;
|
||||
sourceTree = "<group>";
|
||||
@@ -541,6 +550,7 @@
|
||||
FA18A64416CEDFCE00132F66 /* Commands.txt */,
|
||||
FAE22BD415270EA300F1A5AB /* Contributing.txt */,
|
||||
FA322D9A0CEF752C001761B3 /* FAQ.txt */,
|
||||
FA407F380DB15AC700271AF1 /* GIT.txt */,
|
||||
FAE22BD515270EB500F1A5AB /* HowToRelease.txt */,
|
||||
FAE22BD615270EB500F1A5AB /* Modes.txt */,
|
||||
FAE22BD715270EB500F1A5AB /* PAM.txt */,
|
||||
@@ -611,6 +621,7 @@
|
||||
buildPhases = (
|
||||
8DD76FAB0486AB0100D96B5E /* Sources */,
|
||||
8DD76FAD0486AB0100D96B5E /* Frameworks */,
|
||||
8DD76FAF0486AB0100D96B5E /* CopyFiles */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@@ -619,7 +630,7 @@
|
||||
name = ngIRCd;
|
||||
productInstallPath = "$(HOME)/bin";
|
||||
productName = ngIRCd;
|
||||
productReference = FA322BBA0CEF72E4001761B3 /* ngircd */;
|
||||
productReference = FA322BBA0CEF72E4001761B3 /* ngIRCd */;
|
||||
productType = "com.apple.product-type.tool";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
@@ -628,16 +639,17 @@
|
||||
08FB7793FE84155DC02AAC07 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1140;
|
||||
ORGANIZATIONNAME = "ngIRCd Development Team";
|
||||
LastUpgradeCheck = 0430;
|
||||
};
|
||||
buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "ngIRCd" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = en;
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 1;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
English,
|
||||
Japanese,
|
||||
French,
|
||||
German,
|
||||
);
|
||||
mainGroup = 08FB7794FE84155DC02AAC07 /* ngIRCd */;
|
||||
projectDirPath = "";
|
||||
@@ -707,102 +719,82 @@
|
||||
1DEB928708733DD80010E9CD /* Default */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_PEDANTIC = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = YES;
|
||||
GCC_WARN_UNUSED_VALUE = YES;
|
||||
INSTALL_PATH = /usr/local/bin;
|
||||
PRODUCT_NAME = ngircd;
|
||||
};
|
||||
name = Default;
|
||||
};
|
||||
1DEB928B08733DD80010E9CD /* Default */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_WARN_ASSIGN_ENUM = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||
CODE_SIGN_IDENTITY = "";
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_PEDANTIC = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
PRODUCT_NAME = ngircd;
|
||||
SDKROOT = "";
|
||||
};
|
||||
name = Default;
|
||||
};
|
||||
FAB0570C105D917F006AF9E2 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_WARN_ASSIGN_ENUM = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
ARCHS = "$(NATIVE_ARCH_ACTUAL)";
|
||||
GCC_DEBUGGING_SYMBOLS = full;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_VERSION = "";
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_PEDANTIC = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_NAME = ngircd;
|
||||
SDKROOT = "";
|
||||
STRIP_INSTALLED_PRODUCT = NO;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
FAB0570D105D917F006AF9E2 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
|
||||
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
|
||||
GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
|
||||
GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
|
||||
GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
|
||||
GCC_WARN_MISSING_PARENTHESES = YES;
|
||||
GCC_WARN_PEDANTIC = YES;
|
||||
GCC_WARN_SHADOW = YES;
|
||||
GCC_WARN_SIGN_COMPARE = YES;
|
||||
GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = NO;
|
||||
GCC_WARN_UNKNOWN_PRAGMAS = YES;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_LABEL = YES;
|
||||
GCC_WARN_UNUSED_PARAMETER = YES;
|
||||
GCC_WARN_UNUSED_VALUE = YES;
|
||||
INSTALL_PATH = /usr/local/bin;
|
||||
PRODUCT_NAME = ngircd;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2020 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -12,17 +12,15 @@
|
||||
SUBDIRS = Debian MacOSX
|
||||
|
||||
EXTRA_DIST = README \
|
||||
de.barton.ngircd.metainfo.xml \
|
||||
ngindent.sh \
|
||||
ngindent \
|
||||
ngircd-bsd.sh \
|
||||
ngIRCd-Logo.gif \
|
||||
ngircd-redhat.init \
|
||||
ngircd.logcheck \
|
||||
ngircd.service \
|
||||
ngircd.socket \
|
||||
ngircd.spec \
|
||||
nglog.sh \
|
||||
platformtest.sh
|
||||
platformtest.sh \
|
||||
systrace.policy
|
||||
|
||||
maintainer-clean-local:
|
||||
rm -f Makefile Makefile.in
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2020 Alexander Barton and Contributors.
|
||||
(c)2001-2013 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -12,16 +12,13 @@
|
||||
Debian/
|
||||
- Various files for building Debian GNU/Linux packages (".deb's").
|
||||
- ngircd.init; ngircd.default: init script for Debian-based systems.
|
||||
- ngircd.pam: example PAM configuration.
|
||||
- ngircd.pam: example PAM configuraton.
|
||||
|
||||
MacOSX/
|
||||
- Project files for XCode, the "project builder" of Apple Mac OS X.
|
||||
- de.barton.ngircd.plist[.tmpl]: launchd(8) property list.
|
||||
|
||||
de.barton.ngircd.metainfo.xml
|
||||
- AppStream metadata file.
|
||||
|
||||
ngindent.sh
|
||||
ngindent
|
||||
- Script to indent the code of ngIRCd in the "standard way".
|
||||
|
||||
ngircd-bsd.sh
|
||||
@@ -30,9 +27,6 @@ ngircd-bsd.sh
|
||||
ngircd-redhat.init
|
||||
- Start/stop script for RedHat-based distributions (like CentOS).
|
||||
|
||||
ngircd.logcheck
|
||||
- Sample rules for logcheck(8) to ignore "normal" log messages of ngIRCd.
|
||||
|
||||
ngircd.service
|
||||
- systemd(8) service unit configuration file.
|
||||
|
||||
@@ -42,8 +36,8 @@ ngircd.socket
|
||||
ngircd.spec
|
||||
- RPM "spec" file.
|
||||
|
||||
nglog.sh
|
||||
- Colorizes the log messages of ngircd(8) accoring to their log level.
|
||||
|
||||
platformtest.sh
|
||||
- Build ngIRCd and output a "result line" suitable for doc/Platforms.txt.
|
||||
|
||||
systrace.policy
|
||||
- Systrace policy file for OpenBSD (and probably NetBSD).
|
||||
|
@@ -1,127 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="service">
|
||||
<id>de.barton.ngircd</id>
|
||||
<name>ngIRCd</name>
|
||||
<summary>Lightweight Internet Relay Chat server</summary>
|
||||
<metadata_license>MIT</metadata_license>
|
||||
<project_license>GPL-2.0-or-later</project_license>
|
||||
<developer_name>Alexander Barton and Contributors</developer_name>
|
||||
<update_contact>alex@barton.de</update_contact>
|
||||
<description>
|
||||
<p>ngIRCd is a free, portable and lightweight Internet Relay Chat server for small or private networks, developed under the GNU General Public License (GPL).</p>
|
||||
<p>The server is quite easy to configure, can handle dynamic IP addresses, and optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for user authentication as well as character set conversion for legacy clients. The server has been written from scratch and is not based on the "forefather", the daemon of the IRCNet.</p>
|
||||
<p>The name ngIRCd means next-generation IRC daemon, which is a little bit exaggerated: lightweight Internet Relay Chat server most probably would have been a better name :-)</p>
|
||||
</description>
|
||||
<icon type="remote" width="300" height="300">https://ngircd.barton.de/common/ngircd-300x300.png</icon>
|
||||
<categories>
|
||||
<category>Network</category>
|
||||
</categories>
|
||||
<url type="homepage">https://ngircd.barton.de</url>
|
||||
<url type="bugtracker">https://ngircd.barton.de/bugtracker</url>
|
||||
<url type="help">https://ngircd.barton.de/support</url>
|
||||
<provides>
|
||||
<binary>ngircd</binary>
|
||||
</provides>
|
||||
<launchable type="service">ngircd</launchable>
|
||||
<releases>
|
||||
<release version="26.1" date="2021-01-02" />
|
||||
<release version="26" date="2020-06-20" />
|
||||
<release version="26~rc2" date="2020-06-11" type="development" />
|
||||
<release version="26~rc1" date="2020-05-10" type="development" />
|
||||
<release version="25" date="2019-01-23" />
|
||||
<release version="25~rc1" date="2018-08-11" type="development" />
|
||||
<release version="24" date="2017-01-20" />
|
||||
<release version="24~rc1" date="2017-01-07" type="development" />
|
||||
<release version="23" date="2015-11-16" />
|
||||
<release version="23~rc1" date="2015-09-06" type="development" />
|
||||
<release version="22.1" date="2015-04-06" />
|
||||
<release version="22" date="2014-10-11" />
|
||||
<release version="22~rc1" date="2014-09-29" type="development" />
|
||||
<release version="21.1" date="2014-03-25" />
|
||||
<release version="21" date="2013-10-30" />
|
||||
<release version="21~rc2" date="2013-10-20" type="development" />
|
||||
<release version="21~rc1" date="2013-10-05" type="development" />
|
||||
<release version="20.3" date="2013-08-23" />
|
||||
<release version="20.2" date="2013-02-15" />
|
||||
<release version="20.1" date="2013-01-02" />
|
||||
<release version="20" date="2012-12-17" />
|
||||
<release version="20~rc2" date="2012-12-02" type="development" />
|
||||
<release version="20~rc1" date="2012-11-11" type="development" />
|
||||
<release version="19.2" date="2012-06-19" />
|
||||
<release version="19.2~rc1" date="2012-06-13" type="development" />
|
||||
<release version="19.1" date="2012-03-19" />
|
||||
<release version="19" date="2012-02-29" />
|
||||
<release version="19~rc1" date="2012-02-12" type="development" />
|
||||
<release version="18" date="2011-07-10" />
|
||||
<release version="18~rc2" date="2011-06-29" type="development" />
|
||||
<release version="18~rc1" date="2011-06-27" type="development" />
|
||||
<release version="17.1" date="2010-12-19" />
|
||||
<release version="17" date="2010-11-07" />
|
||||
<release version="17~rc3" date="2010-10-27" type="development" />
|
||||
<release version="17~rc2" date="2010-10-25" type="development" />
|
||||
<release version="17~rc1" date="2010-10-11" type="development" />
|
||||
<release version="16" date="2010-05-02" />
|
||||
<release version="16~rc2" date="2010-04-25" type="development" />
|
||||
<release version="16~rc1" date="2010-03-25" type="development" />
|
||||
<release version="15" date="2009-11-07" />
|
||||
<release version="15~rc1" date="2009-10-15" type="development" />
|
||||
<release version="14.1" date="2009-05-05" />
|
||||
<release version="14" date="2009-04-20" />
|
||||
<release version="14~rc1" date="2009-03-29" type="development" />
|
||||
<release version="13" date="2008-12-25" />
|
||||
<release version="0.12.1" date="2008-07-09" />
|
||||
<release version="0.12.0" date="2008-05-13" />
|
||||
<release version="0.12.0-pre2" date="2008-04-29" type="development" />
|
||||
<release version="0.12.0-pre1" date="2008-04-20" type="development" />
|
||||
<release version="0.11.1" date="2008-02-26" />
|
||||
<release version="0.11.0" date="2008-01-15" />
|
||||
<release version="0.11.0-pre2" date="2008-01-07" type="development" />
|
||||
<release version="0.11.0-pre1" date="2008-01-02" type="development" />
|
||||
<release version="0.10.4" date="2008-01-07" />
|
||||
<release version="0.10.3" date="2007-08-01" />
|
||||
<release version="0.10.2" date="2007-06-08" />
|
||||
<release version="0.10.2-pre2" date="2007-05-19" type="development" />
|
||||
<release version="0.10.2-pre1" date="2007-05-05" type="development" />
|
||||
<release version="0.10.1" date="2006-12-17" />
|
||||
<release version="0.10.0" date="2006-10-01" />
|
||||
<release version="0.10.0-pre2" date="2006-09-09" type="development" />
|
||||
<release version="0.10.0-pre1" date="2006-08-02" type="development" />
|
||||
<release version="0.9.2" date="2005-10-15" />
|
||||
<release version="0.9.1" date="2005-08-03" />
|
||||
<release version="0.9.0" date="2005-07-24" />
|
||||
<release version="0.9.0-pre1" date="2005-07-09" type="development" />
|
||||
<release version="0.8.3" date="2005-02-03" />
|
||||
<release version="0.8.2" date="2005-01-26" />
|
||||
<release version="0.8.1" date="2004-12-25" />
|
||||
<release version="0.8.0" date="2004-06-26" />
|
||||
<release version="0.8.0-pre1" date="2004-05-07" type="development" />
|
||||
<release version="0.7.7" date="2004-02-05" />
|
||||
<release version="0.7.6" date="2003-12-05" />
|
||||
<release version="0.7.5" date="2003-11-07" />
|
||||
<release version="0.7.1" date="2003-07-18" />
|
||||
<release version="0.7.0" date="2003-05-01" />
|
||||
<release version="0.7.0-pre2" date="2003-04-27" type="development" />
|
||||
<release version="0.7.0-pre1" date="2003-04-22" type="development" />
|
||||
<release version="0.6.0" date="2002-12-24" />
|
||||
<release version="0.6.0-pre2" date="2002-12-23" type="development" />
|
||||
<release version="0.6.0-pre1" date="2002-12-18" type="development" />
|
||||
<release version="0.5.4" date="2002-11-24" />
|
||||
<release version="0.5.3" date="2002-11-08" />
|
||||
<release version="0.5.2" date="2002-10-04" />
|
||||
<release version="0.5.1" date="2002-10-03" />
|
||||
<release version="0.5.0" date="2002-09-20" />
|
||||
<release version="0.5.0-pre2" date="2002-09-17" type="development" />
|
||||
<release version="0.5.0-pre1" date="2002-09-16" type="development" />
|
||||
<release version="0.4.3" date="2002-06-11" />
|
||||
<release version="0.4.2" date="2002-04-29" />
|
||||
<release version="0.4.1" date="2002-04-08" />
|
||||
<release version="0.4.0" date="2002-04-01" />
|
||||
<release version="0.3.0" date="2002-03-02" />
|
||||
<release version="0.2.1" date="2002-02-17" />
|
||||
<release version="0.2.0" date="2002-02-15" />
|
||||
<release version="0.1.0" date="2002-01-29" />
|
||||
<release version="0.0.3" date="2002-01-16" />
|
||||
<release version="0.0.2" date="2002-01-06" />
|
||||
<release version="0.0.1" date="2001-12-31" />
|
||||
</releases>
|
||||
</component>
|
17
contrib/ngindent
Executable file
17
contrib/ngindent
Executable file
@@ -0,0 +1,17 @@
|
||||
#/bin/sh
|
||||
|
||||
INDENTARGS="-kr -i8 -ts8 -l80 -c3 -cd41 -ss -ncs -psl"
|
||||
|
||||
# check if indent(1) is available
|
||||
type indent >/dev/null 2>&1 && INDENT="indent"
|
||||
type gindent >/dev/null 2>&1 && INDENT="gindent"
|
||||
type gnuindent >/dev/null 2>&1 && INDENT="gnuindent"
|
||||
|
||||
if [ -z "$INDENT" ]; then
|
||||
echo "Error: GNU \"indent\" not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
$INDENT -v $INDENTARGS $*
|
||||
|
||||
# -eof-
|
@@ -1,46 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2019 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
# This script uses GNU indent(1) to format C source code files of ngIRCd.
|
||||
# Usage:
|
||||
# - ./contrib/ngindent.sh [<file> [<file> [...]]]
|
||||
# - cat ./src/ngircd/<c_file> | ./contrib/ngindent.sh
|
||||
|
||||
# Use a coding-style based on "Kernighan & Ritchie" (-kr):
|
||||
INDENTARGS="-kr
|
||||
-bad
|
||||
-c3
|
||||
-cd41
|
||||
-i8
|
||||
-l80
|
||||
-ncs
|
||||
-psl
|
||||
-sob
|
||||
-ss
|
||||
-ts8
|
||||
-blf
|
||||
-il0
|
||||
"
|
||||
|
||||
# check if indent(1) is available
|
||||
command -v indent >/dev/null 2>&1 && INDENT="indent"
|
||||
command -v gindent >/dev/null 2>&1 && INDENT="gindent"
|
||||
command -v gnuindent >/dev/null 2>&1 && INDENT="gnuindent"
|
||||
|
||||
if [ -z "$INDENT" ]; then
|
||||
echo "Error: GNU \"indent\" not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
$INDENT -v $INDENTARGS "$@"
|
||||
|
||||
# -eof-
|
0
contrib/ngircd-bsd.sh
Executable file → Normal file
0
contrib/ngircd-bsd.sh
Executable file → Normal file
0
contrib/ngircd-redhat.init
Executable file → Normal file
0
contrib/ngircd-redhat.init
Executable file → Normal file
@@ -1,61 +0,0 @@
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Accepted connection [0-9]+ from ".*:[0-9]+" on socket [0-9]+\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve address ".*": Name or service not known \[.*\]\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": host not found$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": Name or service not known$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": No address associated with hostname$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Can't connect\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Client closed connection\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Got QUIT command\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Read error\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): SSL accept error, closing socket\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client ".*" unregistered (connection [0-9]+): Timeout\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Timeout\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Write error\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized SSL3\.0 using cipher .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLS1\.[012] using cipher .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLSv1\.[012] using cipher .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLSv1 using cipher .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+ \(socket [0-9]+\) with ".*:[0-9]+" established\. Now logging in \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+ with ".*:[0-9]+" closed \(in: .*, out: .*\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Enabled link compression \(zlib\) on connection [0-9]+\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Establishing connection for ".*" to ".*:[0-9]+" \(.*\), socket [0-9]+ \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: IDENT lookup for connection [0-9]+: ".*"\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: IDENT lookup for connection [0-9]+: no result\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Now listening on .*:[0-9]+ \(socket [0-9]+\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: OpenSSL .* initialized\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Possible forgery: .* resolved to ".*", which has no IP address!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Preparing to establish a new server link for ".*" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Read error on connection [0-9]+ \(socket [0-9]+\): Connection reset by peer!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" registered \(via .*, connected to .*, [0-9]+ hops\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" unregistered: .* .*\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" unregistered: ".*" \(SQUIT from .*\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down all listening sockets \([0-9]+ total\) \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Can't connect\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Client closed connection\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Got QUIT command\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Ping timeout: [0-9]+ seconds\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Read error\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Server going down\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(SSL accept error, closing socket\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Timeout\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Write error\) with ".*:[0-9]+" \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection [0-9]+ shutting down \.\.\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection [0-9]+ with ".*:[0-9]+" established\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection on socket [0-9]+ failed!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: A TLS packet with unexpected length was received\. \[ConnSSL_Read\]\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: A TLS packet with unexpected length was received\. \[gnutls_handshake\]\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Broken pipe \[in ConnSSL_Write\(\)\]!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Connection reset by peer \[in ConnSSL_Read\(\)\]!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Connection reset by peer \[in SSL_connect\(\)\]!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL protocol error: SSL_accept \(.*\)$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" changed nick \(connection [0-9]+\): ".*" -> ".*"\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" registered \(connection [0-9]+\)\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Client closed connection\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Got QUIT command\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Ping timeout: [0-9]+ seconds\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Read error\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Server going down\.$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: warning: can't get client address: Connection reset by peer$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: warning: /etc/hosts\.allow, line [0-9]+: can't verify hostname: getaddrinfo\(.*, AF_INET\) failed$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Write error on connection [0-9]+ \(socket [0-9]+\): Broken pipe!$
|
||||
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Write error on connection [0-9]+ \(socket [0-9]+\): Connection reset by peer!$
|
@@ -1,43 +1,11 @@
|
||||
# ngIRCd systemd service unit.
|
||||
# See systemd(1), systemd.unit(5), systemd.service(5), systemd.exec(5).
|
||||
|
||||
[Unit]
|
||||
Description=Next Generation IRC Daemon
|
||||
Documentation=man:ngircd(8) man:ngircd.conf(5) https://ngircd.barton.de
|
||||
After=network.target
|
||||
Wants=anope.service atheme.service irc-services.service
|
||||
Wants=bopm.service
|
||||
Before=anope.service atheme.service irc-services.service
|
||||
Before=bopm.service
|
||||
|
||||
[Service]
|
||||
Type=forking
|
||||
User=irc
|
||||
Group=irc
|
||||
# Settings & limits:
|
||||
CapabilityBoundingSet=CAP_SYS_CHROOT CAP_NET_BIND_SERVICE
|
||||
MemoryDenyWriteExecute=yes
|
||||
NoNewPrivileges=yes
|
||||
PrivateDevices=yes
|
||||
PrivateTmp=yes
|
||||
ProtectControlGroups=yes
|
||||
ProtectHome=yes
|
||||
ProtectKernelModules=yes
|
||||
ProtectKernelTunables=yes
|
||||
ProtectSystem=full
|
||||
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX
|
||||
RestrictRealtime=yes
|
||||
RuntimeDirectory=ircd
|
||||
RuntimeDirectoryMode=750
|
||||
# Try to load "default files" from any Debian package variant to keep this
|
||||
# unit generic.
|
||||
EnvironmentFile=-/etc/default/ngircd
|
||||
EnvironmentFile=-/etc/default/ngircd-full
|
||||
EnvironmentFile=-/etc/default/ngircd-full-dbg
|
||||
# Start ngIRCd. Note: systemd doesn't allow to use $DAEMON here!
|
||||
ExecStart=/usr/sbin/ngircd $PARAMS
|
||||
ExecStart=/usr/sbin/ngircd
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
@@ -1,6 +1,5 @@
|
||||
[Unit]
|
||||
Description=Next Generation IRC Daemon (Socket)
|
||||
Documentation=man:ngircd(8) man:ngircd.conf(5)
|
||||
|
||||
[Socket]
|
||||
BindIPv6Only=ipv6-only
|
||||
|
@@ -1,5 +1,5 @@
|
||||
%define name ngircd
|
||||
%define version 26.1
|
||||
%define version 21.1
|
||||
%define release 1
|
||||
%define prefix %{_prefix}
|
||||
|
||||
@@ -15,15 +15,19 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: zlib-devel, openssl-devel
|
||||
|
||||
%description
|
||||
ngIRCd is a free, portable and lightweight Internet Relay Chat server for small
|
||||
or private networks, developed under the GNU General Public License (GPL).
|
||||
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the forefather, the
|
||||
daemon of IRCNet.
|
||||
This package provides ngIRCd, a portable and lightweight Internet Relay
|
||||
Chat server for small or private networks, developed under the GNU
|
||||
General Public License (GPL). It is simple to configure, can cope with
|
||||
dynamic IP addresses, and supports IPv6 as well as SSL. It is written
|
||||
from scratch and not based on the original IRCd.
|
||||
|
||||
Advantages:
|
||||
- well arranged (lean) configuration file
|
||||
- simple to build/install, configure and maintain
|
||||
- supports IPv6 and SSL
|
||||
- no problems with servers that have dynamic IP addresses
|
||||
- freely available, modern, portable and tidy C-source
|
||||
- ngIRCd is being actively developed since 11 years.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
@@ -50,7 +54,7 @@ make %{?_smp_mflags}
|
||||
|
||||
%files
|
||||
%defattr(755,root,root)
|
||||
%doc AUTHORS COPYING ChangeLog INSTALL.md NEWS README.md doc/*
|
||||
%doc AUTHORS COPYING ChangeLog INSTALL NEWS README doc/*
|
||||
%config(noreplace) /etc
|
||||
%{_prefix}/sbin
|
||||
%{_mandir}/man5/ngircd.conf*
|
||||
|
@@ -1,28 +0,0 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2020 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
# Please read the file COPYING, README and AUTHORS for more information.
|
||||
#
|
||||
# This script parses the log output of ngircd(8), and colorizes the messages
|
||||
# accoring to their log level. Example usage:
|
||||
# ./src/ngircd/ngircd -f $PWD/doc/sample-ngircd.conf -np | ./contrib/nglog.sh
|
||||
#
|
||||
|
||||
gawk '
|
||||
/^\[[[:digit:]]+:0 / {print "\033[1;95m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:1 / {print "\033[1;35m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:2 / {print "\033[1;91m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:3 / {print "\033[1;31m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:4 / {print "\033[1;33m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:5 / {print "\033[1m" $0 "\033[0m"}
|
||||
/^\[[[:digit:]]+:6 / {print $0}
|
||||
/^\[[[:digit:]]+:7 / {print "\033[90m" $0 "\033[0m"}
|
||||
' </dev/stdin &
|
||||
|
||||
wait
|
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2016 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -14,25 +14,20 @@
|
||||
# suitable for inclusion in doc/Platforms.txt -- please send reports
|
||||
# to the ngIRCd mailing list: <ngircd-ml@ngircd.barton.de>.
|
||||
|
||||
NAME=$(basename "$0")
|
||||
NAME=`basename "$0"`
|
||||
VERBOSE=
|
||||
CLEAN=1
|
||||
|
||||
PLATFORM=
|
||||
COMPILER="unknown"
|
||||
VERSION="unknown"
|
||||
DATE=$(date "+%y-%m-%d")
|
||||
DATE=`date "+%y-%m-%d"`
|
||||
COMMENT=
|
||||
|
||||
R_CONFIGURE=
|
||||
R_MAKE=
|
||||
R_CHECK=
|
||||
R_CHECK_Y="?"
|
||||
R_RUN=
|
||||
|
||||
SRC_D=$(dirname "$0")
|
||||
MY_D="$PWD"
|
||||
|
||||
[ -n "$MAKE" ] || MAKE="make"
|
||||
export MAKE CC
|
||||
|
||||
@@ -41,99 +36,54 @@ while [ $# -gt 0 ]; do
|
||||
"-v")
|
||||
VERBOSE=1
|
||||
;;
|
||||
"-x")
|
||||
CLEAN=
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $NAME [-v] [-x]"
|
||||
echo
|
||||
echo " -v Verbose output"
|
||||
echo " -x Don't regenerate build system, even when possible"
|
||||
echo
|
||||
echo "Usage: $NAME [-v]"
|
||||
exit 2
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
for cmd in telnet expect; do
|
||||
command -v "$cmd" >/dev/null 2>&1 \
|
||||
|| echo "$NAME: WARNING: $cmd(1) not found, \"make check\" won't run all tests!"
|
||||
done
|
||||
|
||||
echo "$NAME: Checking ngIRCd base source directory ..."
|
||||
grep "ngIRCd" "$SRC_D/ChangeLog" >/dev/null 2>&1
|
||||
grep "ngIRCd" ./ChangeLog >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
grep "ngIRCd" "$SRC_D/../ChangeLog" >/dev/null 2>&1
|
||||
grep "ngIRCd" ../ChangeLog >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "$NAME: ngIRCd base source directory not found!?"
|
||||
exit 1
|
||||
fi
|
||||
SRC_D="$SRC_D/.."
|
||||
cd ..
|
||||
fi
|
||||
echo "$NAME: - source directory: $SRC_D"
|
||||
echo "$NAME: - working directory: $MY_D"
|
||||
|
||||
echo "$NAME: Checking for GIT tree ..."
|
||||
if [ -d "$SRC_D/.git" ]; then
|
||||
if [ -d .git ]; then
|
||||
echo "$NAME: Checking for \"git\" command ..."
|
||||
git version >/dev/null 2>&1
|
||||
if [ $? -eq 0 ] && [ -n "$CLEAN" ]; then
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "$NAME: Running \"git clean\" ..."
|
||||
cd "$SRC_D" || exit 1
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
git clean -dxf
|
||||
else
|
||||
git clean -dxf >/dev/null
|
||||
fi
|
||||
cd "$MY_D" || exit 1
|
||||
[ -n "$VERBOSE" ] && git clean -dxf || git clean -dxf >/dev/null
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "$NAME: Checking for \"$SRC_D/configure\" script ..."
|
||||
if [ ! -r "$SRC_D/configure" ]; then
|
||||
echo "$NAME: Running \"$SRC_D/autogen.sh\" ..."
|
||||
cd "$SRC_D" || exit 1
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
./autogen.sh
|
||||
else
|
||||
./autogen.sh >/dev/null
|
||||
fi
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "$NAME: \"$SRC_D/autogen.sh\" script failed, aborting!"
|
||||
exit 1
|
||||
fi
|
||||
cd "$MY_D" || exit 1
|
||||
echo "$NAME: Checking for \"./configure\" script ..."
|
||||
if [ ! -r ./configure ]; then
|
||||
echo "$NAME: Running \"./autogen.sh\" ..."
|
||||
[ -n "$VERBOSE" ] && ./autogen.sh || ./autogen.sh >/dev/null
|
||||
fi
|
||||
|
||||
if [ -r "$SRC_D/configure" ]; then
|
||||
echo "$NAME: Running \"$SRC_D/configure\" script ..."
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
"$SRC_D/configure" -C
|
||||
else
|
||||
"$SRC_D/configure" -C >/dev/null
|
||||
fi
|
||||
if [ $? -eq 0 ] && [ -r ./Makefile ]; then
|
||||
if [ -r ./configure ]; then
|
||||
echo "$NAME: Running \"./configure\" script ..."
|
||||
[ -n "$VERBOSE" ] && ./configure || ./configure >/dev/null
|
||||
if [ $? -eq 0 -a -r ./Makefile ]; then
|
||||
R_CONFIGURE=1
|
||||
rm -f "src/ngircd/ngircd"
|
||||
echo "$NAME: Running \"$MAKE\" ..."
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
"$MAKE"
|
||||
else
|
||||
"$MAKE" >/dev/null
|
||||
fi
|
||||
if [ $? -eq 0 ] && [ -x src/ngircd/ngircd ]; then
|
||||
[ -n "$VERBOSE" ] && "$MAKE" || "$MAKE" >/dev/null
|
||||
if [ $? -eq 0 -a -x src/ngircd/ngircd ]; then
|
||||
R_MAKE=1
|
||||
echo "$NAME: Running \"$MAKE check\" ..."
|
||||
if [ -n "$VERBOSE" ]; then
|
||||
"$MAKE" check
|
||||
else
|
||||
"$MAKE" check >/dev/null
|
||||
fi
|
||||
[ -n "$VERBOSE" ] && "$MAKE" check || "$MAKE" check >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
R_CHECK=1
|
||||
R_RUN=$R_CHECK
|
||||
[ -r ./src/testsuite/tests-skipped.lst ] \
|
||||
&& R_CHECK_Y="y" || R_CHECK_Y="Y"
|
||||
else
|
||||
./src/ngircd/ngircd --help 2>/dev/null \
|
||||
| grep "^ngIRCd" >/dev/null
|
||||
@@ -145,13 +95,13 @@ fi
|
||||
|
||||
# Get target platform information
|
||||
if [ -r "src/config.h" ]; then
|
||||
CPU=$(grep "HOST_CPU" "src/config.h" | cut -d'"' -f2)
|
||||
OS=$(grep "HOST_OS" "src/config.h" | cut -d'"' -f2)
|
||||
VENDOR=$(grep "HOST_VENDOR" "src/config.h" | cut -d'"' -f2)
|
||||
CPU=`grep "HOST_CPU" "src/config.h" | cut -d'"' -f2`
|
||||
OS=`grep "HOST_OS" "src/config.h" | cut -d'"' -f2`
|
||||
VENDOR=`grep "HOST_VENDOR" "src/config.h" | cut -d'"' -f2`
|
||||
PLATFORM="$CPU/$VENDOR/$OS"
|
||||
fi
|
||||
if [ -z "$PLATFORM" ]; then
|
||||
PLATFORM="$(uname 2>/dev/null) $(uname -r 2>/dev/null), $(uname -m 2>/dev/null)"
|
||||
PLATFORM="`uname 2>/dev/null` `uname -r 2>/dev/null`, `uname -m 2>/dev/null`"
|
||||
fi
|
||||
|
||||
# Get compiler information
|
||||
@@ -174,7 +124,8 @@ if [ -r "Makefile" ]; then
|
||||
if [ $? -eq 0 ]; then
|
||||
COMPILER=$($CC --version 2>/dev/null | head -1 \
|
||||
| cut -d'(' -f1 | cut -d'-' -f1 \
|
||||
| sed -e 's/version //g; s/^\([A-Z]\)[A-Za-z]* clang/\1-clang/g; s/LLVM /clang /g')
|
||||
| sed -e 's/version //g' | sed -e 's/Apple /A-/g' \
|
||||
| sed -e 's/Debian //g' | sed -e 's/LLVM /clang /g')
|
||||
fi
|
||||
$CC -version 2>&1 | grep -i "tcc" >/dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
@@ -182,18 +133,18 @@ if [ -r "Makefile" ]; then
|
||||
| cut -d'(' -f1 | sed -e 's/version //g')
|
||||
fi
|
||||
if [ "$COMPILER" = "unknown" ]; then
|
||||
v="$($CC --version 2>/dev/null | head -1)"
|
||||
[ -z "$v" ] && v="$($CC -version 2>/dev/null | head -1)"
|
||||
v="`$CC --version 2>/dev/null | head -1`"
|
||||
[ -z "$v" ] && v="`$CC -version 2>/dev/null | head -1`"
|
||||
[ -n "$v" ] && COMPILER="$v"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Get ngIRCd version information
|
||||
eval "$(grep "^VERSION = " Makefile | sed -e 's/ //g')"
|
||||
eval $(grep "^VERSION = " Makefile | sed -e 's/ //g')
|
||||
case "$VERSION" in
|
||||
*~*-*)
|
||||
VERSION=$(echo "$VERSION" | cut -b1-10)
|
||||
*-*-*)
|
||||
VERSION=`echo "$VERSION" | cut -d'-' -f3 | cut -b2-`
|
||||
;;
|
||||
esac
|
||||
[ -n "$VERSION" ] || VERSION="unknown"
|
||||
@@ -212,13 +163,8 @@ fi
|
||||
|
||||
[ -n "$R_CONFIGURE" ] && C="Y" || C="N"
|
||||
[ -n "$R_MAKE" ] && M="Y" || M="N"
|
||||
[ -n "$R_CHECK" ] && T="$R_CHECK_Y" || T="N"
|
||||
if [ -n "$R_RUN" ]; then
|
||||
# Mark "runs" with "Y" only when the test suite succeeded:
|
||||
[ "$T" = "N" ] && R="?" || R="Y"
|
||||
else
|
||||
R="N"
|
||||
fi
|
||||
[ -n "$R_CHECK" ] && T="Y" || T="N"
|
||||
[ -n "$R_RUN" ] && R="Y" || R="N"
|
||||
[ -n "$COMMENT" ] && COMMENT=" $COMMENT"
|
||||
|
||||
echo
|
||||
@@ -229,29 +175,13 @@ echo " ./configure works --+ |
|
||||
echo " | | | |"
|
||||
echo "Platform Compiler ngIRCd Date Tester C M T R *"
|
||||
echo "--------------------------- ------------ ---------- -------- -------- - - - - -"
|
||||
command -v printf >/dev/null 2>&1
|
||||
type printf >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
printf "%-27s %-12s %-10s %s %-8s %s %s %s %s%s\n" \
|
||||
"$PLATFORM" "$COMPILER" "$VERSION" "$DATE" "$LOGNAME" \
|
||||
printf "%-27s %-12s %-10s %s %-8s %s %s %s %s%s" \
|
||||
"$PLATFORM" "$COMPILER" "$VERSION" "$DATE" "$USER" \
|
||||
"$C" "$M" "$T" "$R" "$COMMENT"
|
||||
else
|
||||
echo "$PLATFORM $COMPILER $VERSION $DATE $LOGNAME" \
|
||||
echo "$PLATFORM $COMPILER $VERSION $DATE $USER" \
|
||||
"$C" "$M" "$T" "$R" "$COMMENT"
|
||||
fi
|
||||
echo
|
||||
|
||||
double_check() {
|
||||
echo "Please double check that the ngIRCd daemon starts up, runs and handles IRC"
|
||||
echo "connections successfully!"
|
||||
}
|
||||
|
||||
if [ "$R_CHECK_Y" = "y" ]; then
|
||||
echo "WARNING: Some tests have been skipped!"
|
||||
double_check
|
||||
echo
|
||||
fi
|
||||
if [ "$R" = "?" ]; then
|
||||
echo "WARNING: The resulting binary passed simple tests, but the test suite failed!"
|
||||
double_check
|
||||
echo
|
||||
fi
|
||||
echo; echo
|
||||
|
77
contrib/systrace.policy
Normal file
77
contrib/systrace.policy
Normal file
@@ -0,0 +1,77 @@
|
||||
#
|
||||
# Sample systrace policy for ngIRCd on OpenBSD
|
||||
# Author: Benjamin Pineau <ben@zouh.org>
|
||||
#
|
||||
# $Id: systrace.policy,v 1.1 2004/04/28 12:16:59 alex Exp $
|
||||
#
|
||||
# Tune me, put me in /etc/systrace/usr_local_bin_ngircd and start ngIRCd
|
||||
# (with root privileges) as:
|
||||
#
|
||||
# systrace -a /usr/local/bin/ngircd
|
||||
#
|
||||
# I didn't tried this on NetBSD, but it should work as is.
|
||||
#
|
||||
# On systems with pf, it can be supplemented by strict firewall rules:
|
||||
# for a ngircd running as '$ircuser', binding on '$ircport' and accepting
|
||||
# 30 connections:
|
||||
#
|
||||
# block out log quick proto tcp from any port $ircport to any \
|
||||
# user != $ircuser
|
||||
# pass in inet proto tcp from any to any port $ircport user $ircuser \
|
||||
# keep state (max 30) flags S/SA
|
||||
#
|
||||
|
||||
Policy: /usr/local/bin/ngircd, Emulation: native
|
||||
native-__sysctl: permit
|
||||
native-fsread: filename eq "/etc/malloc.conf" then permit
|
||||
native-fsread: filename sub "/usr/share/zoneinfo/" then permit
|
||||
native-fsread: filename eq "/usr/local/etc/ngircd.conf" then permit
|
||||
native-fsread: filename eq "/usr/local/etc/ngircd.motd" then permit
|
||||
native-fsread: filename eq "/etc/ngircd.conf" then permit
|
||||
native-fsread: filename eq "/etc/ngircd.motd" then permit
|
||||
native-fsread: filename eq "/etc/spwd.db" then deny[eperm]
|
||||
native-fsread: filename eq "/etc/group" then permit
|
||||
native-fsread: filename eq "/etc/resolv.conf" then permit
|
||||
native-fsread: filename eq "/etc/localtime" then permit
|
||||
native-fsread: filename eq "/etc/hosts" then permit
|
||||
native-fsread: filename sub "<non-existent filename>" then deny[enoent]
|
||||
native-socket: sockdom eq "AF_UNIX" and socktype eq "SOCK_DGRAM" then permit
|
||||
native-socket: sockdom eq "AF_INET" and socktype eq "SOCK_STREAM" then permit
|
||||
native-bind: sockaddr match "inet-*:6667" then permit, if user != root
|
||||
native-connect: sockaddr eq "/dev/log" then permit, if user != root
|
||||
native-connect: sockaddr match "inet-*:53" then permit, if user != root
|
||||
native-setsockopt: permit, if user != root
|
||||
native-listen: permit, if user != root
|
||||
native-accept: permit, if user != root
|
||||
native-sendto: true then permit, if user != root
|
||||
native-recvfrom: permit, if user != root
|
||||
native-read: permit
|
||||
native-pread: permit
|
||||
native-write: permit, if user != root
|
||||
native-mmap: permit
|
||||
native-munmap: permit
|
||||
native-mprotect: permit
|
||||
native-break: permit
|
||||
native-umask: permit
|
||||
native-fork: permit
|
||||
native-setsid: permit
|
||||
native-chdir: permit
|
||||
native-chroot: permit
|
||||
native-setgid: gid neq "0" then permit
|
||||
native-setuid: uid neq "0" and uname neq "root" then permit
|
||||
native-getuid: permit
|
||||
native-getgid: permit
|
||||
native-gettimeofday: permit
|
||||
native-getpid: permit
|
||||
native-select: permit
|
||||
native-fcntl: permit
|
||||
native-fstat: permit
|
||||
native-issetugid: permit
|
||||
native-sigaction: permit
|
||||
native-pipe: permit
|
||||
native-sigreturn: permit
|
||||
native-close: permit
|
||||
native-exit: permit
|
||||
native-fswrite: deny[eperm]
|
||||
|
||||
# -eof-
|
1
doc/.gitignore
vendored
Normal file
1
doc/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
sample-ngircd.conf
|
16
doc/Bopm.txt
16
doc/Bopm.txt
@@ -1,8 +1,9 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2014 Alexander Barton and Contributors.
|
||||
(c)2001-2010 Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -17,7 +18,7 @@ monitor, designed for use with hybrid-based ircds, although it can be used
|
||||
with slight modification on any server which has the ability to show connects
|
||||
to opers and that supports KLINEs."
|
||||
|
||||
Starting with Release 17, ngIRCd supports all required log messages that
|
||||
And starting with Release 17, ngIRCd supports all required log messages that
|
||||
BOPM requires to be useful.
|
||||
|
||||
II. Installation
|
||||
@@ -36,12 +37,11 @@ a) BOPM "IRC" section:
|
||||
3) change "mode" to "+ci" or "+c".
|
||||
|
||||
4) Set "connregex" to the following string, everything in one line(!):
|
||||
"Client connecting: ([^ ]+) \\(([^@]+)@([^\\)]+)\\) \\[([0-9\\.]+)\\].*";
|
||||
and comment out all the other "connregex" examples (that is, prepend a
|
||||
"#" character).
|
||||
"\\*\\*\\* Notice -- Client connecting: ([^ ]+) \\(([^@]+)@([^\\)]+)\\) \\[([0-9\\.]+)\\].*";
|
||||
and comment all the other "connregex" examples (prepend a "#" character).
|
||||
|
||||
5) Set "kline" to "GLINE *@%h :Open proxy found on your host!";
|
||||
and comment out all the other "kline" examples.
|
||||
5) Set "kline" to "KILL %n :Open proxy found on your host!"; for example,
|
||||
and comment all the other "kline" examples.
|
||||
|
||||
b) BOPM "scanner" section:
|
||||
|
||||
|
@@ -13,7 +13,7 @@ This document lists and describes the "IRC capabilities" that ngIRCd supports
|
||||
and can be requested by a IRC/IRCv3 client that supports the "CAP" command.
|
||||
|
||||
ngIRCd implements the "IRC Client Capabilities Extension" as described here:
|
||||
<http://ircv3.net/specs/core/capability-negotiation-3.1.html>
|
||||
<http://www.leeh.co.uk/draft-mitchell-irc-capabilities-02.html>
|
||||
|
||||
|
||||
I. Supported Capabilities
|
||||
@@ -25,4 +25,4 @@ I. Supported Capabilities
|
||||
server to send all possible prefixes which apply to a user in NAMES and
|
||||
WHO output.
|
||||
|
||||
See <http://ircv3.net/specs/extensions/multi-prefix-3.1.html>.
|
||||
See <http://ircv3.atheme.org/extensions/multi-prefix-3.1>.
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2019 Alexander Barton and Contributors.
|
||||
(c)2001-2013 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -78,7 +78,7 @@ Connection Handling Commands
|
||||
like this: "CAP REQ :capability1 capability2 capability3" for example.
|
||||
|
||||
References:
|
||||
- <http://ircv3.net/specs/core/capability-negotiation-3.1.html>
|
||||
- <http://ircv3.atheme.org/specification/capability-negotiation-3.1>
|
||||
- <http://ngircd.barton.de/doc/Capabilities.txt>
|
||||
- doc/Capabilities.txt
|
||||
|
||||
@@ -324,7 +324,7 @@ General Commands
|
||||
In addition, IRC Ops can use these two forms to specify the <target>:
|
||||
.
|
||||
- #<hostmask>
|
||||
- $<servermask>
|
||||
- #<servermask>
|
||||
.
|
||||
The <mask> can contain the wildcard characters "*" and "?", but must
|
||||
contain at least one dot (".") and no wildcard after the last one.
|
||||
@@ -380,13 +380,13 @@ Status and Informational Commands
|
||||
|
||||
Please note that "all" IRC daemons even parse separate nicknames in
|
||||
a single parameter (like ":nick1 nick2"), and therefore ngIRCd
|
||||
implements this behavior, too.
|
||||
implements this behaviour, too.
|
||||
|
||||
References:
|
||||
- RFC 2812, 4.9 "Ison message"
|
||||
|
||||
- LINKS
|
||||
LINKS [[<target>] <mask>]
|
||||
LINKS [[<target>] [<mask>]
|
||||
.
|
||||
List all servers currently registered in the network matching <mask>,
|
||||
or all servers if <mask> has been omitted, as seen by the server
|
||||
@@ -617,10 +617,9 @@ Channel Commands
|
||||
- RFC 2812, 3.2.8 "Kick command"
|
||||
|
||||
- LIST
|
||||
LIST [<mask>[,<mask>[,...]] [<server>]]
|
||||
LIST [<channel>[,<channel>[,...]] [<server>]]
|
||||
.
|
||||
List all visible channels matching the <mask> (comma-separated list),
|
||||
or all channels when no <mask> was specified.
|
||||
List all visible <channels> (comma-separated list).
|
||||
.
|
||||
If <server> is given, the command will be forwarded to <server> for
|
||||
evaluation.
|
||||
@@ -874,10 +873,6 @@ Server Protocol Commands
|
||||
CHANINFO is used by servers to inform each other about a channel:
|
||||
its modes, channel key, user limits and its topic.
|
||||
.
|
||||
Note: even when <modes> don't include "k" (key) or "l" (limit), both
|
||||
parameters must be given when used; use "*" for "no key" and 0 for
|
||||
"no limit" for the unused parameter in this case.
|
||||
.
|
||||
The CHANINFO command is allowed on server-links only.
|
||||
|
||||
References:
|
||||
@@ -887,7 +882,7 @@ Server Protocol Commands
|
||||
- ERROR
|
||||
ERROR [<message> [<> [...]]]
|
||||
.
|
||||
Inform a client or a server about an error condition. The first
|
||||
Inform a client or a server about an error condition. The first
|
||||
parameter, if given, is logged by the server receiving the message,
|
||||
all other parameters are silently ignored.
|
||||
.
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2015 Alexander Barton and Contributors.
|
||||
(c)2001-2011 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -15,7 +15,7 @@ get an idea of how to do it the best :-)
|
||||
- Use GIT
|
||||
|
||||
The source code of ngIRCd is maintained using GIT, see doc/GIT.txt. So if
|
||||
remotely possible, use GIT for your work, too. It makes your and our lives
|
||||
remotely possible, use GIT for your work, too. It makes your and our lifes
|
||||
much easier ;-)
|
||||
|
||||
- Don't forget to include documentation
|
||||
@@ -52,9 +52,3 @@ get an idea of how to do it the best :-)
|
||||
|
||||
And this is open source, your work must not be 100% finished and perfect,
|
||||
work in progress is interesting, too: "release early, release often"!
|
||||
|
||||
- Use GitHub to create "Pull Requests"
|
||||
|
||||
ngIRCd is hosted on GitHub (<https://github.com/ngircd>), so please use the
|
||||
tools available there and open issues (comment!) and create pull requests!
|
||||
See <https://help.github.com/articles/using-pull-requests/> for details.
|
||||
|
21
doc/FAQ.txt
21
doc/FAQ.txt
@@ -29,20 +29,20 @@ A: ngIRCd offers several benefits: no problems with dynamic IPs, easy to
|
||||
II. Compilation
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
Q: I did a "Git checkout" but can't execute ./configure because the script
|
||||
Q: I did a "CVS checkout" but can't execute ./configure because the script
|
||||
is missing in the generated directory!?
|
||||
A: When using development versions via Git, the configure script as well as
|
||||
A: When using development versions via CVS, the configure script as well as
|
||||
the Makefile.in templates must be generated using GNU automake and GNU
|
||||
autoconf. To simplify this task run the ./autogen.sh script which will
|
||||
execute the required tools for you; then continue with executing the
|
||||
./configure script as usual.
|
||||
|
||||
Q: The ./autogen.sh script complains "aclocal: command not found".
|
||||
A: GNU automake is missing on your system but required for building Git
|
||||
A: GNU automake is missing on your system but required for building CVS
|
||||
versions of ngIRCd. Install GNU automake 1.6 or later and try again.
|
||||
|
||||
Q: The ./autogen.sh script stops with "autoheader: command not found".
|
||||
A: GNU autoconf is missing on your system but required for building Git
|
||||
A: GNU autoconf is missing on your system but required for building CVS
|
||||
versions of ngIRCd. Install GNU autoconf 2.52 or later and try again.
|
||||
|
||||
Q: The ./autogen.sh script fails and the message "automake: configure.in:
|
||||
@@ -89,21 +89,16 @@ A: You need to set 'OperCanUseMode = yes' in ngircd.conf, then IRC operators
|
||||
can use the MODE command for changing modes even when they are not joined
|
||||
to the specific channel.
|
||||
|
||||
Q: How can I "auto-op" users in channels?
|
||||
A: ngIRCd can't do this: you would have to use some "IRC Services", like
|
||||
Atheme (<http://atheme.net/atheme.html>) or Anope (<http://www.anope.org>).
|
||||
See "doc/Services.txt" for setup instructions.
|
||||
|
||||
|
||||
IV. Bugs!?
|
||||
~~~~~~~~~~
|
||||
|
||||
Q: Is there a list of known bugs and desired feature enhancements?
|
||||
A: Yes. Have a look at the bug tracking system (GitHub issues) for ngIRCd located
|
||||
at <https://github.com/ngircd/ngircd/issues>. There you can file bug
|
||||
A: Yes. Have a look at the bug tracking system (Bugzilla) for ngIRCd located
|
||||
at <http://ngircd.barton.de/bugzilla/index.cgi>. There you can file bug
|
||||
reports and feature requests as well as search the bug database.
|
||||
|
||||
Q: What should I do if I found a bug?
|
||||
A: Please file a bug report at <https://github.com/ngircd/ngircd/issues/new>!
|
||||
The author will be notified automagically :-)
|
||||
A: Please file a bug report at <http://ngircd.barton.de/bugzilla/index.cgi>!
|
||||
The author of the particular component will be notified automagically :-)
|
||||
|
||||
|
65
doc/GIT.txt
Normal file
65
doc/GIT.txt
Normal file
@@ -0,0 +1,65 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2011 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
-- GIT.txt --
|
||||
|
||||
|
||||
The source code of ngIRCd is maintained using GIT, an distributed version
|
||||
control system. Homepage including documentation: <http://git-scm.com/>.
|
||||
|
||||
|
||||
I. Viewing the source code online
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The ngIRCd "GITweb" interface allows you to browse the GIT repository and
|
||||
to see all individual files, tags, branches, commits etc.:
|
||||
|
||||
<http://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git>
|
||||
|
||||
|
||||
II. Getting the source code
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To access (copy, clone) the source tree repository anonymously, run:
|
||||
|
||||
$ git clone git://ngircd.barton.de/ngircd.git
|
||||
|
||||
Thereby a new folder "ngircd" will be created containing all the individual
|
||||
source files.
|
||||
|
||||
The newly created directory ("ngircd") is the "working directory", all
|
||||
GIT commands will be executed from within this directory in the future.
|
||||
|
||||
Please note: When checking out a fresh copy of ngIRCd using GIT, the
|
||||
configure script doesn't exist; you have to run the autogen.sh shell script
|
||||
(which is included in the source tree) to generate it. This requires you to
|
||||
have GNU automake and GNU autoconf installed on your system. Please see the
|
||||
file INSTALL for details!
|
||||
|
||||
To update the local GIT repository:
|
||||
|
||||
$ git pull
|
||||
|
||||
This retrieves all changes and merges them into the current branch.
|
||||
|
||||
|
||||
III. Contributing
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
Patches should be sent to the ngircd mailing list. List homepage:
|
||||
http://arthur.barton.de/mailman/listinfo/ngircd-ml
|
||||
|
||||
If you do not want to send them to the list, you can also mail them
|
||||
to Alex Barton, <alex@barton.de>.
|
||||
|
||||
|
||||
IV. Write Access
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
If you want to contribute a couple of patches and write access to the GIT
|
||||
repository would be handy, please contact Alex Barton, <alex@barton.de>.
|
@@ -1,8 +1,9 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2021 Alexander Barton and Contributors.
|
||||
(c)2001-2010 Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -35,27 +36,18 @@ up-to-date (e.g. using ./autogen.sh) before generating the archives!
|
||||
II. How to prepare a new ngIRCd release?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
a) Make sure you have working versions of GNU autoconf and GNU automake
|
||||
installed on the system you use for generating the release:
|
||||
as of May 2020 we are using GNU autoconf 2.69 and GNU automake 1.11.6
|
||||
which seem to work just fine.
|
||||
NOTE: new releases of GNU automake DO NOT work, as they lack support for
|
||||
the "ansi2knr" wrapper and "de-ANSI-fication" support!
|
||||
a) Make sure the source tree is in a releasable state ;-)
|
||||
|
||||
b) Make sure the source tree is in a releasable state ;-)
|
||||
- Are all branches & patches merged? Check GitHub issues, pull requests
|
||||
and milestones!
|
||||
- Run as many tests as you can!
|
||||
- Is the AUTHORS file up to date? This command may be helpful:
|
||||
"( grep '>$' AUTHORS; git shortlog -se | cut -c8- ) | grep -Ev \
|
||||
'(alex@barton.de|fw@strlen.de)' | LC_ALL=de_DE.UTF-8 sort -u"
|
||||
b) Make sure you have working versions of GNU autoconf and GNU automake
|
||||
installed on the system you use for generating the release:
|
||||
as of October 2010 we are using GNU autoconf 2.67 and GNU automake 1.11.1
|
||||
which seem to work just fine.
|
||||
|
||||
c) Update the files describing the new release:
|
||||
- ChangeLog
|
||||
- NEWS
|
||||
|
||||
d) Update the version numbers in the following files:
|
||||
- contrib/de.barton.ngircd.metainfo.xml
|
||||
- contrib/ngircd.spec
|
||||
|
||||
e) Generate a new Debian change log entry in the following file, e.g. using
|
||||
@@ -73,16 +65,13 @@ h) Run "./autogen.sh" to update the ./configure script with the correct
|
||||
|
||||
i) Run "./configure" to rebuild all generated Makefiles.
|
||||
|
||||
j) Run "make distcheck" (and "make dist-tarZ dist-xz") to generate all of the
|
||||
distribution archives.
|
||||
j) Run "make distcheck" to generate the distribution archives.
|
||||
|
||||
k) Sign the distribution archive(s) using GnuPG: "gpg -b <archivefile>"
|
||||
|
||||
l) Upload and distribute the newly generated ngIRCd release archive(s)
|
||||
and GnuPG signatures (to the website, its mirrors, and GitHub).
|
||||
and GnuPG signatures.
|
||||
|
||||
m) Update the ngIRCd website and its mirrors!
|
||||
m) Write an announcement to the mailing list, freshmeat, Twitter, ...
|
||||
|
||||
n) Write an announcement to the mailing list, Twitter, ...
|
||||
|
||||
o) Relax :-)
|
||||
n) Relax :-)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# ngIRCd -- The Next Generation IRC Daemon
|
||||
# Copyright (c)2001-2020 Alexander Barton (alex@barton.de) and Contributors
|
||||
# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -23,6 +23,7 @@ static_docs = \
|
||||
Commands.txt \
|
||||
Contributing.txt \
|
||||
FAQ.txt \
|
||||
GIT.txt \
|
||||
HowToRelease.txt \
|
||||
Modes.txt \
|
||||
PAM.txt \
|
||||
@@ -39,7 +40,7 @@ doc_templates = sample-ngircd.conf.tmpl
|
||||
|
||||
generated_docs = sample-ngircd.conf
|
||||
|
||||
toplevel_docs = ../AUTHORS ../COPYING ../ChangeLog ../INSTALL.md ../NEWS ../README.md
|
||||
toplevel_docs = ../AUTHORS ../COPYING ../ChangeLog ../INSTALL ../NEWS ../README
|
||||
|
||||
SUBDIRS = src
|
||||
|
||||
@@ -55,7 +56,7 @@ all: $(generated_docs)
|
||||
install-data-hook: $(static_docs) $(toplevel_docs) $(generated_docs)
|
||||
$(MKDIR_P) -m 755 $(DESTDIR)$(sysconfdir)
|
||||
@if [ ! -f $(DESTDIR)$(sysconfdir)/ngircd.conf ]; then \
|
||||
${MAKE} install-config; \
|
||||
make install-config; \
|
||||
fi
|
||||
$(MKDIR_P) -m 755 $(DESTDIR)$(docdir)
|
||||
for f in $(static_docs) $(toplevel_docs); do \
|
||||
@@ -75,7 +76,7 @@ install-config:
|
||||
uninstall-hook:
|
||||
rm -rf $(DESTDIR)$(docdir)
|
||||
@if cmp --silent sample-ngircd.conf $(DESTDIR)$(sysconfdir)/ngircd.conf; then \
|
||||
${MAKE} uninstall-config; \
|
||||
make uninstall-config; \
|
||||
else \
|
||||
echo; \
|
||||
echo " ** NOTE: Not uninstalling changed configuration file:"; \
|
||||
@@ -87,7 +88,7 @@ uninstall-config:
|
||||
rm -f $(DESTDIR)$(sysconfdir)/ngircd.conf
|
||||
|
||||
srcdoc:
|
||||
${MAKE} -C src srcdoc
|
||||
make -C src srcdoc
|
||||
|
||||
.PHONY: install-config uninstall-config srcdoc
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2015 Alexander Barton and Contributors.
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -26,9 +26,7 @@ channels he is using at the moment.
|
||||
B 20 User is flagged as a "bot".
|
||||
c 17 IRC operator wants to receive connect/disconnect NOTICEs.
|
||||
C 19 Only users that share a channel are allowed to send messages.
|
||||
F 22 Relaxed flood protection (only settable by IRC Operators).
|
||||
i 0.0.1 User is "invisible".
|
||||
I 23 No channels are shown on WHOIS (IRC Ops can always see those).
|
||||
o 0.0.1 User is IRC operator.
|
||||
q 20 User is protected, can not be kicked from a channel.
|
||||
r 0.0.1 User is restricted.
|
||||
@@ -56,7 +54,6 @@ users to lists (e.g. "invite list", "ban list"), others have parameters
|
||||
m 0.3.0 Channel is moderated, only "voiced" users can send messages.
|
||||
M 20 Only registered users (and IRC Ops) can send messages.
|
||||
n 0.3.0 Channel doesn't allow messages of users not being members.
|
||||
N 23 Users can't change their nickname while on this channel.
|
||||
O 18 Only IRC operators are allowed to join this channel.
|
||||
P 0.5.0 Channel is "persistent".
|
||||
Q 20 Nobody can be kicked from the channel.
|
||||
@@ -75,21 +72,17 @@ channel of which he is a member.
|
||||
|
||||
mode since description
|
||||
|
||||
q 20 User is channel owner. This mode can only be set by an IRC
|
||||
service, other owner or IRC operator. Channel owners can
|
||||
promote other users to all levels: q, a, o, h, v. Prefix: "~".
|
||||
a 20 User is channel admin and can promote other users to v, h, o.
|
||||
Prefix: "&".
|
||||
q 20 User is channel owner can only be set by a service, other
|
||||
owner and irc op. Can promote other users to q, a, o, h, v.
|
||||
a 20 User is channel admin and can promote other users to v, h, o
|
||||
o 0.2.0 User is channel operator and can op/kick/... other members.
|
||||
Prefix: "@".
|
||||
h 20 User is half op and can set channel modes imntvIbek and kick
|
||||
voiced and normal users. Prefix: "%".
|
||||
voiced and normal users.
|
||||
v 0.2.0 User is "voiced" and can speak even if channel is moderated.
|
||||
Prefix: "+".
|
||||
|
||||
|
||||
Notes
|
||||
~~~~~
|
||||
|
||||
(1) This mode is not set by ngIRCd itself but by services. ngIRCd handles
|
||||
the mode transparently and possibly adjusts its behavior.
|
||||
the mode transparently and possibly adjusts its behaviour.
|
||||
|
@@ -26,10 +26,6 @@ A very simple -- and quite useless ;-) -- example would be:
|
||||
Here the "pam_debug" module will be called each time a client connects to
|
||||
the ngIRCd and has sent its PASS, NICK, and USER commands.
|
||||
|
||||
The PAM library used by the ngIRCd daemon must be able to access its
|
||||
configuration file, so don't forget to check permissions and run something
|
||||
like this: "chmod 644 /etc/pam.d/ngircd".
|
||||
|
||||
Please note ONE VERY IMPORTANT THING:
|
||||
|
||||
All the PAM modules are executed with the privileges of the user ngIRCd
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2020 Alexander Barton and Contributors.
|
||||
(c)2001-2013 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -26,131 +26,92 @@ for inclusion here. Thanks for your help!
|
||||
| | | |
|
||||
Platform Compiler ngIRCd Date Tester C M T R *
|
||||
--------------------------- ------------ ---------- -------- -------- - - - - -
|
||||
aarch64/apple/darwin A-clang 12.0.0 26 20-12-10 goetz N Y Y Y 3
|
||||
alpha/unknown/netbsd3.0 gcc 3.3.3 CVSHEAD 06-05-07 fw Y Y Y Y 3
|
||||
armv6l/unk./linux-gnueabi gcc 4.7.2 20.2 13-03-08 goetz Y Y Y Y 5
|
||||
armv6l/unk./linux-gnueabihf gcc 4.6.3 21~rc2 13-10-26 pi Y Y Y Y 5
|
||||
armv7l/unk./linux-gnueabi gcc 4.4.3 19.1 12-04-29 goetz Y Y Y Y 5
|
||||
armv7l/unk./linux-gnueabihf gcc 4.6.3 22~rc1-3 14-10-10 alex Y Y Y Y 5
|
||||
armv7l/unk./linux-gnueabihf gcc 4.8.2 21.1 14-07-15 goetz Y Y Y Y 5
|
||||
armv7l/unk./linux-gnueabihf gcc 4.9.2 23 16-01-10 alex Y Y Y Y 5
|
||||
hppa/unknown/openbsd3.5 gcc 2.95.3 CVSHEAD 04-05-25 alex Y Y Y Y
|
||||
hppa/unknown/openbsd5.4 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y y Y 3
|
||||
hppa/unknown/openbsd5.4 gcc 4.2.1 21 13-11-10 alex Y Y Y Y 3
|
||||
hppa1.1/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
hppa2.0/unknown/linux-gnu gcc 3.3.5 13~rc1 08-12-02 alex Y Y Y Y
|
||||
hppa2.0w-hp-hpux11.11 gcc 4.2.3 14.1 09-07-22 goetz Y Y Y Y
|
||||
i386/apple/darwin9.7.0 gcc 4.0.1 14.1 09-08-04 alex Y Y Y Y 3
|
||||
i386/apple/darwin10.8.0 gcc 4.2.1 19 12-02-26 alex Y Y Y Y 3
|
||||
i386/apple/darwin11.3.0 gcc 4.2.1 19 12-02-26 alex Y Y Y Y 3
|
||||
i386/pc/linux-gnu gcc 4.1.2 13~rc1 08-12-05 alex Y Y Y Y 1
|
||||
i386/pc/linux-gnu gcc 4.4.5 22~rc1-3 14-10-10 alex Y Y Y Y 1
|
||||
i386/pc/minix clang 3.4 23 16-01-06 goetz Y Y N Y
|
||||
i386/pc/solaris2.9 gcc 3.2.2 CVSHEAD 04-02-24 alex Y Y Y Y
|
||||
i386/pc/solaris2.11 gcc 4.8.2 24 17-01-21 goetz Y Y Y Y 4
|
||||
i386/pc/solaris2.11 gcc 4.5.2 21~rc2 13-10-27 alex Y Y N Y 4
|
||||
i386/unknown/freebsd5.2.1 gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
i386/unknown/freebsd6.2 gcc 3.4.6 20~rc1 12-11-13 alex Y Y Y Y 3
|
||||
i386/unknown/freebsd7.3 gcc 4.2.1 24~rc1-7 17-01-20 alex Y Y Y Y 3
|
||||
i386/unknown/freebsd7.3 gcc 4.2.1 20~rc1 12-11-13 alex Y Y Y Y 3
|
||||
i686/pc/minix gcc 4.4.6 21~rc2 13-10-27 alex Y Y N N
|
||||
i686/unknown/gnu0.3 gcc 4.4.5 19 12-02-29 alex Y Y Y Y
|
||||
i686/unknown/gnu0.5 gcc 4.8.2 21 14-02-09 alex Y Y Y Y
|
||||
i686/unkn./kfreebsd7.2-gnu gcc 4.3.4 15 09-12-02 alex Y Y Y Y 3
|
||||
i386/unknown/netbsdelf1.5.2 egcs-1.1.2 21 13-11-25 goetz Y Y N Y
|
||||
i386/unknown/netbsdelf1.6.2 gcc 2.95.3 18 11-07-10 goetz Y Y Y Y
|
||||
i386/unknown/netbsdelf3.0.1 gcc 3.3.3 0.10.0-p1 06-08-30 alex Y Y Y Y 3
|
||||
i386/unknown/netbsdelf4.0 gcc 4.1.2 24~rc1-7 17-01-20 alex Y Y Y Y 3
|
||||
i386/unknown/netbsdelf4.0 gcc 4.1.2 19 12-02-29 alex Y Y Y Y 3
|
||||
i386/unknown/netbsdelf5.0.2 gcc 4.1.3 19 12-02-26 alex Y Y Y Y 3
|
||||
i386/unknown/openbsd3.5 gcc 2.95.3 23 15-11-27 goetz Y Y y Y 3
|
||||
i386/unknown/openbsd3.5 gcc 2.95.3 21 13-11-17 goetz Y Y Y Y 3
|
||||
i386/unknown/openbsd3.9 gcc 3.3.5 0.10.0-p1 06-08-30 alex Y Y Y Y 3
|
||||
i386/unknown/openbsd4.1 gcc 3.3.5 16 10-04-11 alex Y Y Y Y 3
|
||||
i386/unknown/openbsd5.3 gcc 4.2.1 21 13-11-28 goetz Y Y Y Y 3
|
||||
i386/unknown/openbsd5.4 gcc 4.2.1 21 13-11-28 goetz Y Y Y Y 3
|
||||
i586/pc/haiku gcc 2.95.3 19.2~138 12-10-11 user Y Y N N
|
||||
i586/pc/interix3.5 gcc 3.3 23 16-01-29 alex Y Y N Y
|
||||
i686/pc/cygwin gcc 4.9.3 23 16-01-06 alex Y Y Y Y
|
||||
i686/pc/linux-gnu gcc 2.6.3 23 16-01-06 goetz Y Y y Y 1
|
||||
i686/pc/linux-gnu gcc 2.7.2.1 23 15-11-30 goetz Y Y N Y 1
|
||||
i686/pc/linux-gnu gcc 2.95.2 23 15-12-23 goetz Y Y Y Y 1
|
||||
i586/pc/interix3.5 gcc 3.3 19 12-02-29 alex Y Y N Y
|
||||
i686/pc/cygwin gcc 4.8.2 21 14-01-02 alex Y Y N Y
|
||||
i686/pc/linux-gnu gcc 2.7.2 21~38 14-01-06 goetz Y Y Y Y 1
|
||||
i686/pc/linux-gnu gcc 2.95.4 0.8.0 04-05-30 alex Y Y Y Y 1
|
||||
i686/pc/linux-gnu gcc 3.3.5 14.1 09-08-04 alex Y Y Y Y 1
|
||||
i386/pc/linux-gnu gcc 4.1.2 13~rc1 08-12-05 alex Y Y Y Y 1
|
||||
i686/pc/linux-gnu gcc 4.3.2 14.1 09-08-04 alex Y Y Y Y 1
|
||||
i686/pc/minix gcc 4.4.6 21~rc2 13-10-27 alex Y Y N N
|
||||
i686/unknown/gnu0.3 gcc 4.4.5 19 12-02-29 alex Y Y Y Y
|
||||
i686/unknown/gnu0.5 gcc 4.9.1 22~rc1-3 14-10-11 alex Y Y Y Y
|
||||
i686/unkn./kfreebsd7.2-gnu gcc 4.3.4 15 09-12-02 alex Y Y Y Y 3
|
||||
m68k/apple/aux3.0.1 gcc 2.7.2 17 10-11-07 alex Y Y N Y
|
||||
m68k/apple/aux3.0.1 Orig. A/UX 17 10-11-07 alex Y Y N Y 2
|
||||
m68k/apple/aux3.1.1 gcc 2.7.2 19 12-02-26 alex Y Y N Y
|
||||
m68k/apple/aux3.1.1 Orig. A/UX 19 12-02-26 alex Y Y N Y 2
|
||||
m68k/hp/hp-ux9.10 Orig. HPUX 0.7.x-CVS 03-04-30 goetz Y Y Y Y
|
||||
m88k/dg/dgux5.4R3.10 gcc 2.5.8 CVSHEAD 04-03-15 alex Y Y ? ?
|
||||
mips/sgi/irix6.5 SGI 25 19-12-29 goetz Y Y ? ?
|
||||
mipsel/openwrt/linux-uclibc gcc 4.8 24~9-g619a 18-01-28 goetz - - - Y 6
|
||||
mipsel/unknown/linux-gnu gcc 4.1.2 18 11-07-05 goetz Y Y N Y 1
|
||||
mipsel/unknown/linux-gnu gcc 4.4.5 21 13-11-24 goetz Y Y Y Y 1
|
||||
mipsel/unknown/netbsd8.0 gcc 5.5.0 25 19-08-09 root Y Y y Y 3
|
||||
powerpc/apple/darwin6.8 gcc 3.1 21 14-01-03 goetz Y Y Y Y
|
||||
powerpc/apple/darwin7.9.0 gcc 3.3 22 15-03-22 goetz Y Y Y Y 3
|
||||
powerpc/apple/darwin8.11.0 gcc 4.0.1 26 20-07-08 goetz Y Y Y Y 3
|
||||
powerpc/apple/darwin7.9.0 gcc 3.3 21 14-01-11 goetz Y Y Y Y 3
|
||||
powerpc/apple/darwin8.11.0 gcc 4.0.1 18 11-07-02 goetz Y Y Y Y 3
|
||||
powerpc/apple/darwin9.8.0 gcc 4.0.1 21 14-01-04 goetz Y Y Y Y 3
|
||||
powerpc/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
powerpc/unknown/openbsd3.6 gcc 2.95.3 0.10.0 06-10-08 alex Y Y N Y
|
||||
sparc/sun/solaris2.6 gcc 2.95.3 0.7.x-CVS 03-04-22 alex Y Y Y Y
|
||||
sparc/sun/solaris2.7 gcc 3.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
sparc/unkn./netbsdelf1.6.1 gcc 2.95.3 0.8.0 04-05-30 alex Y Y Y Y
|
||||
sparc/unknown/openbsd5.5 gcc 4.2.1 21.1 14-05-03 goetz Y Y Y Y 3
|
||||
x86_64/apple/darwin10.8.0 gcc 4.2.1 21~rc2 13-10-30 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin12.3.0 gcc 4.2.1 20.2 13-04-01 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin13.0.0 A-clang 5.0 21 14-01-02 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin14.5.0 A-clang 6.1 23~rc1 15-09-06 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin15.6.0 A-clang 8.0 23~38-g455 16-11-04 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin16.5.0 A-clang 8.1 25~rc1-7-g 18-11-04 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin17.7.0 A-clang 10.0 25~rc1 18-11-04 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin18.2.0 A-clang 10.0 25~rc1-11 19-01-23 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin19.4.0 A-clang 11.0 26~rc1 20-05-10 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin19.6.0 A-clang 12.0.0 26 20-10-20 alex Y Y Y Y 3
|
||||
x86_64/apple/darwin20.1.0 A-clang 12.0.0 26 21-01-01 alex Y Y Y Y 3
|
||||
x86_64/unknown/dragonfly3.4 gcc 4.7.2 21 13-11-12 goetz Y Y N Y 3
|
||||
x86_64/unknown/freebsd8.4 gcc 4.2.1 21 14-01-02 alex Y Y Y Y 3
|
||||
x86_64/unknown/freebsd9.1 gcc 4.2.1 21 14-01-02 alex Y Y Y Y 3
|
||||
x86_64/unkn./freebsd8.1-gnu gcc 4.4.5 19 12-02-26 alex Y Y Y Y 3
|
||||
x86_64/unknown/freebsd8.4 gcc 4.2.1 24~rc1-7 17-01-20 alex Y Y Y Y 3
|
||||
x86_64/unknown/freebsd9.2 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y Y Y 3
|
||||
x86_64/unknown/freebsd10.3 F-clang 3.4 24 17-01-20 goetz Y Y Y Y 3
|
||||
x86_64/unknown/freebsd11.0 F-clang 3.8 24 17-01-21 goetz Y Y Y Y 3
|
||||
x86_64/unknown/freebsd12.1 F-clang 8.0.1 26 20-08-28 alex Y Y Y Y 3
|
||||
x86_64/unknown/haiku gcc 7.3.0 25~rc1-11 19-01-06 alex Y Y N Y
|
||||
x86_64/unknown/linux-gnu clang 3.3 21 14-01-07 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu clang 3.4 22~rc1-3 14-10-11 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 4.4.5 24~rc1-7 17-01-20 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu gcc 4.7.2 23~rc1-3 15-11-15 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 4.8.4 24~rc1-7 17-01-20 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 4.9.2 24~rc1-7 17-01-20 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu gcc 5.3.0 23 15-12-14 goetz Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu [WSL] gcc 5.4.0 24 18-03-07 goetz Y Y y Y 7
|
||||
x86_64/pc/linux-gnu gcc 6.2.1 24~rc1-7 17-01-20 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 6.3.0 25~rc1-11 19-01-23 alex Y Y Y Y 1
|
||||
x86_64/pc/linux-gnu gcc 8.3.0 26 20-08-28 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu icc 16 23 16-01-13 goetz Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu gcc 4.8.2 21 13-12-29 alex Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu nwcc 0.8.2 21 13-12-01 goetz Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu Open64 21.1 14-03-27 goetz Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu Sun C 5.12 21.1 14-03-27 goetz Y Y Y Y 1
|
||||
x86_64/unknown/netbsd9.0 gcc 7.4.0 26 20-08-28 alex Y Y y Y 3
|
||||
x86_64/unknown/linux-gnu Open64 21 13-11-30 goetz Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu Sun C 5.12 21 13-11-22 goetz Y Y Y Y 1
|
||||
x86_64/unknown/linux-gnu tcc 0.9.25 21 13-11-30 goetz Y Y Y Y 1
|
||||
x86_64/unknown/openbsd4.7 gcc 3.3.5 20~rc1 12-02-26 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd4.8 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y y Y 3
|
||||
x86_64/unknown/openbsd4.8 gcc 4.2.1 21 13-12-28 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd5.1 gcc 4.2.1 21 13-12-28 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd5.5 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd6.6 gcc 4.2.1 26 20-08-28 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd6.6 O-clang 8.0.1 26 20-08-28 alex Y Y Y Y 3
|
||||
x86_64/unknown/openbsd6.7 gcc 4.2.1 26 20-09-26 goetz Y Y y Y 3
|
||||
|
||||
|
||||
* Notes
|
||||
~~~~~~~
|
||||
|
||||
(1) */*/linux-gnu (Linux platforms):
|
||||
ngIRCd has been tested with various Linux distributions, such as ArchLinux,
|
||||
Debian, Gentoo, Red Hat (Fedora) and SuSE using Linux kernels 2.2.x, 2.4.x,
|
||||
2.6.x, 3.x, 4.x and 5.x, with various versions of the GNU C compiler
|
||||
(starting with 2.95.x) and Clang. The eldest glibc used was glibc-2.0.7.
|
||||
ngIRCd compiled and ran on all of these systems successfully.
|
||||
Current Linux kernels (starting with 2.6.x) and glibc's support the more
|
||||
efficient epoll() IO interface, see (5) below.
|
||||
ngIRCd has been tested with various Linux distributions, such as SuSE,
|
||||
RedHat, Debian, and Gentoo using Kernels 2.2.x, 2.4.x and 2.6.x with
|
||||
various versions of the GNU C compiler (starting with 2.95.x and up to
|
||||
version 4.3.x). The eldest glibc used was glibc-2.0.7. ngIRCd compiled
|
||||
and run on all these systems without problems.
|
||||
Actual Linux kernels (2.6.x) and glibc's support the epoll() IO interface.
|
||||
|
||||
(2) This compiler is a pre-ANSI C compiler (K&R), therefore the source code is
|
||||
(2) This compiler is an pre-ANSI C compiler, therefore the source code is
|
||||
automatically converted using the included ansi2knr tool while building.
|
||||
|
||||
(3) Using the kqueue() IO interface.
|
||||
@@ -158,9 +119,3 @@ x86_64/unknown/openbsd6.7 gcc 4.2.1 26 20-09-26 goetz Y Y y Y 3
|
||||
(4) Using the /dev/poll IO interface.
|
||||
|
||||
(5) Using the epoll() IO interface.
|
||||
|
||||
(6) ngIRCd has been cross-compiled with gcc 4.8 on Ubuntu x86-64 for
|
||||
MIPSEL Linux OpenWRT distribution (uclibc), for the target computer
|
||||
Vocore2, where the created binary ran well.
|
||||
|
||||
(7) This actually is Windows 10 running Windows Subsystem for Linux (WSL).
|
||||
|
@@ -2,7 +2,7 @@
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2019 Alexander Barton and Contributors.
|
||||
(c)2001-2012 Alexander Barton and Contributors.
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -26,12 +26,6 @@ clients are compatible with a server configured that way, some can't even
|
||||
connect at all! Therefore this option usually isn't desired for "normal
|
||||
server operation".
|
||||
|
||||
In addition, ngIRCd implements some "IRCv3" features. This includes:
|
||||
- IRCv3 Client Capability Negotiation
|
||||
- IRCv3.1 multi-prefix Extension
|
||||
- IRCv3.2 userhost-in-names Extension
|
||||
Please see the IRCv3 homepage for more information: <https://ircv3.net>.
|
||||
|
||||
|
||||
II. The IRC+ Protocol
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
@@ -182,7 +176,7 @@ channel mode). In this case <limit> should be "0".
|
||||
II.4 Update webchat/proxy client information
|
||||
|
||||
Command: WEBIRC
|
||||
Parameters: <password> <username> <hostname> <ip-address> [<ignored>]
|
||||
Parameters: <password> <username> <hostname> <ip-address>
|
||||
Used by: unregistered clients only
|
||||
|
||||
The WEBIRC command is used by some Web-to-IRC gateways to set the correct
|
||||
@@ -192,9 +186,6 @@ first command sent to the server, even before USER and NICK commands!
|
||||
The <password> must be set in the server configuration file to prevent
|
||||
unauthorized clients to fake their identity; it is an arbitrary string.
|
||||
|
||||
Optionally, a 5th parameter is accepted to comply with an IRCv3 extension,
|
||||
see <https://github.com/ircv3/ircv3-ideas/issues/12>, but ignored.
|
||||
|
||||
|
||||
II.5 Client character encoding conversion
|
||||
|
||||
|
@@ -22,7 +22,7 @@ The following software packages are needed:
|
||||
- GNU sed
|
||||
Source:
|
||||
http://www.rezepte-im-web.de/appleux/sed-3.02.tar.gz
|
||||
http://arthur.barton.de/pub/unix/aux/tools/sed-3.02.tar.gz
|
||||
ftp://arthur.barton.de/pub/unix/aux/tools/sed-3.02.tar.gz
|
||||
|
||||
A/UX comes with /bin/sed which isn't supporting all functions needed
|
||||
by GNU automake/autoconf.
|
||||
@@ -34,7 +34,7 @@ The following software packages are needed:
|
||||
- libUTIL.a
|
||||
Source:
|
||||
ftp://ftp.mayn.de/pub/really_old_stuff/apple/apple_unix/Sys_stuff/libUTIL-2.1.tar.gz>
|
||||
http://arthur.barton.de/pub/unix/aux/libraries/libUTIL-2.1.tar.gz
|
||||
ftp://arthur.barton.de/pub/unix/aux/libraries/libUTIL-2.1.tar.gz
|
||||
|
||||
This library contains functions that are common on other UNIX
|
||||
systems but not on A/UX e.g. memmove(), strerror() and strdup().
|
||||
@@ -50,7 +50,7 @@ A few hints in case of errors:
|
||||
(so 'configure' uses its own shell script) or use a fully functionable one.
|
||||
There's at least one binary "out there" causing problems. The one
|
||||
of the GNU fileutils works fine:
|
||||
http://arthur.barton.de/pub/unix/aux/tools/fileutils-4.0.tar.gz
|
||||
ftp://arthur.barton.de/pub/unix/aux/tools/fileutils-4.0.tar.gz
|
||||
|
||||
- The precompiled binary of the old 'bash' shouldn't be installed within
|
||||
/bin (better do this in /usr/local/bin) because 'configure' would
|
||||
|
13
doc/RFC.txt
13
doc/RFC.txt
@@ -1,8 +1,9 @@
|
||||
|
||||
ngIRCd - Next Generation IRC Server
|
||||
http://ngircd.barton.de/
|
||||
|
||||
(c)2001-2017 Alexander Barton and Contributors.
|
||||
(c)2001-2003 by Alexander Barton,
|
||||
alex@barton.de, http://www.barton.de/
|
||||
|
||||
ngIRCd is free software and published under the
|
||||
terms of the GNU General Public License.
|
||||
|
||||
@@ -10,8 +11,7 @@
|
||||
|
||||
|
||||
The Internet Relay Chat (IRC) protocol is documented in these Request for
|
||||
Comments (RFCs), which you can get via <http://www.faqs.org/rfcs/> or
|
||||
<https://www.ietf.org/rfc.html> for example.
|
||||
Comments (RFC), which you can get e.g. via <http://www.faqs.org/>:
|
||||
|
||||
1459 Oikarinen, J. & D. Reed, "Internet Relay Chat Protocol",
|
||||
May 1993, [IRC].
|
||||
@@ -28,5 +28,6 @@ Comments (RFCs), which you can get via <http://www.faqs.org/rfcs/> or
|
||||
2813 Kalt, C., "Internet Relay Chat: Server Protocol",
|
||||
April 2000, [IRC-SERVER].
|
||||
|
||||
7194 Hartmann, R., "Default Port for Internet Relay Chat (IRC) via TLS/SSL",
|
||||
August 2014.
|
||||
|
||||
--
|
||||
$Id: RFC.txt,v 1.6 2003/03/07 20:42:20 alex Exp $
|
||||
|
@@ -15,7 +15,7 @@ using the IRC protocol as defined in RFC 1459 or RFC 2812.
|
||||
|
||||
Support for Services has been tested using
|
||||
- Anope 1.9.8 or later (<http://www.anope.org/>)
|
||||
- Atheme 7.0.2 or later (<https://atheme.org/>)
|
||||
- Atheme 7.0.2 or later (<http://www.atheme.net>)
|
||||
- "IRC Services" 5.1.x by Andrew Church (<http://achurch.org/services/>)
|
||||
|
||||
This document describes setting up ngIRCd and these services.
|
||||
@@ -34,10 +34,6 @@ services instead of regular IRC users.
|
||||
|
||||
Example:
|
||||
|
||||
[GLOBAL]
|
||||
Name = server.irc.net
|
||||
Ports = 6667
|
||||
|
||||
[SERVER]
|
||||
Name = services.irc.net
|
||||
MyPassword = 123abc
|
||||
@@ -101,17 +97,13 @@ In conf/nickserv.conf:
|
||||
Setting up Atheme 7.0.2 or later
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Atheme 7.0.2 or later (<https://atheme.org/>) may be used with ngIRCd using
|
||||
Atheme 7.0.2 or later (<http://www.atheme.net>) may be used with ngIRCd using
|
||||
the "ngircd" protocol module.
|
||||
|
||||
The following settings need to be in atheme.conf:
|
||||
|
||||
loadmodule "modules/protocol/ngircd";
|
||||
|
||||
serverinfo {
|
||||
name = "services.irc.net";
|
||||
}
|
||||
|
||||
uplink "server.irc.net" {
|
||||
password = "123abc";
|
||||
port = 6667;
|
||||
@@ -131,7 +123,7 @@ Please note that versions up to and including 5.1.3 contain a bug that
|
||||
sometimes causes IRC Services to hang on startup. There are two workarounds:
|
||||
a) send the services process a HUP signal ("killall -HUP ircservices")
|
||||
b) apply this patch to the IRC Services source tree:
|
||||
<http://arthur.barton.de/pub/ngircd/contrib/IRCServices513-FlushBuffer.patch>
|
||||
<ftp://ngircd.barton.de/ngircd/contrib/IRCServices513-FlushBuffer.patch>
|
||||
|
||||
At least the following settings have to be tweaked, in addition to all the
|
||||
settings marked as required by IRC Services:
|
||||
|
@@ -51,15 +51,9 @@
|
||||
# be shown to all users connecting to the server:
|
||||
;MotdFile = :ETCDIR:/ngircd.motd
|
||||
|
||||
# A simple Phrase (<127 chars) if you don't want to use a motd file.
|
||||
# A simple Phrase (<256 chars) if you don't want to use a motd file.
|
||||
;MotdPhrase = "Hello world!"
|
||||
|
||||
# The name of the IRC network to which this server belongs. This name
|
||||
# is optional, should only contain ASCII characters, and can't contain
|
||||
# spaces. It is only used to inform clients. The default is empty,
|
||||
# so no network name is announced to clients.
|
||||
;Network = aIRCnetwork
|
||||
|
||||
# Global password for all users needed to connect to the server.
|
||||
# (Default: not set)
|
||||
;Password = abc
|
||||
@@ -117,12 +111,6 @@
|
||||
# maximum nickname length!
|
||||
;MaxNickLength = 9
|
||||
|
||||
# Maximum penalty time increase in seconds, per penalty event. Set to -1
|
||||
# for no limit (the default), 0 to disable penalties altogether. The
|
||||
# daemon doesn't use penalty increases higher than 2 seconds during
|
||||
# normal operation, so values greater than 1 rarely make sense.
|
||||
;MaxPenaltyTime = -1
|
||||
|
||||
# Maximum number of channels returned in response to a /list
|
||||
# command (0: unlimited):
|
||||
;MaxListSize = 100
|
||||
@@ -178,8 +166,8 @@
|
||||
;ConnectIPv4 = yes
|
||||
|
||||
# Default user mode(s) to set on new local clients. Please note that
|
||||
# only modes can be set that the client could set using regular MODE
|
||||
# commands, you can't set "a" (away) for example! Default: none.
|
||||
# only modes can be set that the client could set on itself, you can't
|
||||
# set "a" (away) or "o" (IRC Op), for example! Default: none.
|
||||
;DefaultUserModes = i
|
||||
|
||||
# Do DNS lookups when a client connects to the server.
|
||||
@@ -199,9 +187,9 @@
|
||||
;MorePrivacy = no
|
||||
|
||||
# Normally ngIRCd doesn't send any messages to a client until it is
|
||||
# registered. Enable this option to let the daemon send "NOTICE *"
|
||||
# registered. Enable this option to let the daemon send "NOTICE AUTH"
|
||||
# messages to clients while connecting.
|
||||
;NoticeBeforeRegistration = no
|
||||
;NoticeAuth = no
|
||||
|
||||
# Should IRC Operators be allowed to use the MODE command even if
|
||||
# they are not(!) channel-operators?
|
||||
@@ -232,15 +220,6 @@
|
||||
# character prepended to their respective user names!
|
||||
;PAMIsOptional = no
|
||||
|
||||
# When PAM is enabled, this value determines the used PAM
|
||||
# configuration.
|
||||
# This setting allows to run multiple ngIRCd instances with
|
||||
# different PAM configurations on each instance.
|
||||
# If you set it to "ngircd-foo", PAM will use
|
||||
# /etc/pam.d/ngircd-foo instead of the default
|
||||
# /etc/pam.d/ngircd.
|
||||
;PAMServiceName = ngircd
|
||||
|
||||
# Let ngIRCd send an "authentication PING" when a new client connects,
|
||||
# and register this client only after receiving the corresponding
|
||||
# "PONG" reply.
|
||||
@@ -274,9 +253,9 @@
|
||||
# See 'man 1ssl ciphers' (OpenSSL) or 'man 3 gnutls_priority_init'
|
||||
# (GnuTLS) for details.
|
||||
# For OpenSSL:
|
||||
;CipherList = HIGH:!aNULL:@STRENGTH:!SSLv3
|
||||
;CipherList = HIGH:!aNULL:@STRENGTH
|
||||
# For GnuTLS:
|
||||
;CipherList = SECURE128:-VERS-SSL3.0
|
||||
;CipherList = SECURE128
|
||||
|
||||
# Diffie-Hellman parameters
|
||||
;DHFile = :ETCDIR:/ssl/dhparams.pem
|
||||
@@ -309,7 +288,7 @@
|
||||
[Server]
|
||||
# Other servers are configured in [Server] sections. If you
|
||||
# configure a port for the connection, then this ngircd tries to
|
||||
# connect to the other server on the given port; if not it waits
|
||||
# connect to to the other server on the given port; if not it waits
|
||||
# for the other server to connect.
|
||||
# There may be more than one server block, one for each server.
|
||||
#
|
||||
@@ -385,16 +364,19 @@
|
||||
# Topic for this channel
|
||||
;Topic = a great topic
|
||||
|
||||
# Initial channel modes, as used in "MODE" commands. Modifying lists
|
||||
# (ban list, invite list, exception list) is supported.
|
||||
# This option can be specified multiple times, evaluated top to bottom.
|
||||
;Modes = +tnk mykey +l 5
|
||||
;Modes = +b nick!~user@bad.host.example.com
|
||||
# Initial channel modes
|
||||
;Modes = tnk
|
||||
|
||||
# initial channel password (mode k)
|
||||
;Key = Secret
|
||||
|
||||
# Key file, syntax for each line: "<user>:<nick>:<key>".
|
||||
# Default: none.
|
||||
;KeyFile = :ETCDIR:/#chan.key
|
||||
|
||||
# maximum users per channel (mode l)
|
||||
;MaxUsers = 23
|
||||
|
||||
[Channel]
|
||||
# More [Channel] sections, if you like ...
|
||||
|
||||
|
1
doc/src/.gitignore
vendored
Normal file
1
doc/src/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
html
|
2
man/.gitignore
vendored
Normal file
2
man/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
ngircd.8
|
||||
ngircd.conf.5
|
@@ -1,7 +1,7 @@
|
||||
.\"
|
||||
.\" ngircd(8) manual page template
|
||||
.\"
|
||||
.TH ngircd 8 "Jan 2021" ngIRCd "ngIRCd Manual"
|
||||
.TH ngircd 8 "Oct 2013" ngIRCd "ngIRCd Manual"
|
||||
.SH NAME
|
||||
ngIRCd \- the "next generation" IRC daemon
|
||||
.SH SYNOPSIS
|
||||
@@ -13,15 +13,12 @@ ngIRCd \- the "next generation" IRC daemon
|
||||
.BR ngIRCd
|
||||
is a free, portable and lightweight Internet Relay Chat server for small
|
||||
or private networks, developed under the GNU General Public License (GPL).
|
||||
.PP
|
||||
The server is quite easy to configure, can handle dynamic IP addresses, and
|
||||
optionally supports IDENT, IPv6 connections, SSL-protected links, and PAM for
|
||||
user authentication as well as character set conversion for legacy clients. The
|
||||
server has been written from scratch and is not based on the "forefather", the
|
||||
daemon of the IRCNet.
|
||||
It is easy to configure, can cope with dynamic IP addresses, and supports
|
||||
IPv6, SSL-protected connections as well as PAM for authentication.
|
||||
It is written from scratch and not based on the original IRCd.
|
||||
.PP
|
||||
The name ngIRCd means
|
||||
.IR "next-generation IRC daemon",
|
||||
.IR "next generation IRC daemon",
|
||||
which is a little bit exaggerated:
|
||||
.IR "lightweight Internet Relay Chat server"
|
||||
most probably would have been a better name :-)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
.\"
|
||||
.\" ngircd.conf(5) manual page template
|
||||
.\"
|
||||
.TH ngircd.conf 5 "Jan 2021" ngIRCd "ngIRCd Manual"
|
||||
.TH ngircd.conf 5 "Oct 2013" ngIRCd "ngIRCd Manual"
|
||||
.SH NAME
|
||||
ngircd.conf \- configuration file of ngIRCd
|
||||
.SH SYNOPSIS
|
||||
@@ -60,7 +60,7 @@ The main configuration of the server is stored in the
|
||||
section, like the server name, administrative information and the ports on
|
||||
which the server should be listening. The variables in this section have to be
|
||||
adjusted to the local requirements most of the time, whereas all the variables
|
||||
in the other sections can be left on their defaults very often.
|
||||
in the other sections can be left on there defaults very often.
|
||||
.PP
|
||||
Options in the
|
||||
.I [Limits]
|
||||
@@ -82,13 +82,12 @@ sections. And
|
||||
blocks are used to configure pre-defined ("persistent") IRC channels.
|
||||
.PP
|
||||
There can be more than one [Operator], [Server] and [Channel] section per
|
||||
configuration file, one for each operator, server, and channel. [Global],
|
||||
[Limits], [Options], and [SSL] sections can occur multiple times, too, but
|
||||
each variable overwrites itself, only the last assignment is relevant.
|
||||
configuration file (one for each operator, server, and channel), but only
|
||||
exactly one [Global], one [Limits], one [Options], and one [SSL] section.
|
||||
.SH [GLOBAL]
|
||||
The
|
||||
.I [Global]
|
||||
section is used to define the main configuration of the server,
|
||||
section of this file is used to define the main configuration of the server,
|
||||
like the server name and the ports on which the server should be listening.
|
||||
These settings depend on your personal preferences, so you should make sure
|
||||
that they correspond to your installation and setup!
|
||||
@@ -125,13 +124,7 @@ take effect when ngircd starts up or is instructed to re-read its
|
||||
configuration file.
|
||||
.TP
|
||||
\fBMotdPhrase\fR (string)
|
||||
A simple Phrase (<127 chars) if you don't want to use a MOTD file.
|
||||
.TP
|
||||
\fBNetwork\fR (string)
|
||||
The name of the IRC network to which this server belongs. This name is
|
||||
optional, should only contain ASCII characters, and can't contain spaces.
|
||||
It is only used to inform clients. The default is empty, so no network
|
||||
name is announced to clients.
|
||||
A simple Phrase (<256 chars) if you don't want to use a MOTD file.
|
||||
.TP
|
||||
\fBPassword\fR (string)
|
||||
Global password for all users needed to connect to the server. The default is
|
||||
@@ -140,16 +133,16 @@ if ngIRCd is using PAM!
|
||||
.TP
|
||||
\fBPidFile\fR (string)
|
||||
This tells ngIRCd to write its current process ID to a file. Note that the
|
||||
"PID file" is written AFTER chroot and switching the user ID, therefore the
|
||||
directory the file resides in must be writable by the ngIRCd user and exist
|
||||
in the chroot directory (if configured, see above).
|
||||
"PID file" is written AFTER chroot and switching the user ID, e.g. the directory
|
||||
the file resides in must be writable by the ngIRCd user and exist in the
|
||||
chroot directory (if configured, see above).
|
||||
.TP
|
||||
\fBPorts\fR (list of numbers)
|
||||
Port number(s) on which the server should listen for unencrypted connections.
|
||||
There may be more than one port, separated with commas (","). Default: 6667.
|
||||
Ports on which the server should listen for unencrypted connections. There
|
||||
may be more than one port, separated with commas (","). Default: 6667.
|
||||
.TP
|
||||
\fBServerGID\fR (string or number)
|
||||
Group ID under which the ngIRCd daemon should run; you can use the name of the
|
||||
Group ID under which the ngIRCd should run; you can use the name of the
|
||||
group or the numerical ID.
|
||||
.PP
|
||||
.RS
|
||||
@@ -159,8 +152,8 @@ For this to work the server must have been started with root privileges!
|
||||
.RE
|
||||
.TP
|
||||
\fBServerUID\fR (string or number)
|
||||
User ID under which the ngIRCd daemon should run; you can use the name of the
|
||||
user or the numerical ID.
|
||||
User ID under which the server should run; you can use the name of the user
|
||||
or the numerical ID.
|
||||
.PP
|
||||
.RS
|
||||
.B Attention:
|
||||
@@ -170,8 +163,8 @@ addition, the configuration and MOTD files must be readable by this user,
|
||||
otherwise RESTART and REHASH won't work!
|
||||
.RE
|
||||
.SH [LIMITS]
|
||||
This section is used to define some limits and timeouts for this ngIRCd
|
||||
instance. Default values should be safe, but it is wise to double-check :-)
|
||||
Define some limits and timeouts for this ngIRCd instance. Default values
|
||||
should be safe, but it is wise to double-check :-)
|
||||
.TP
|
||||
\fBConnectRetry\fR (number)
|
||||
The server tries every <ConnectRetry> seconds to establish a link to not yet
|
||||
@@ -201,12 +194,6 @@ Maximum length of an user nickname (Default: 9, as in RFC 2812). Please
|
||||
note that all servers in an IRC network MUST use the same maximum nickname
|
||||
length!
|
||||
.TP
|
||||
\fBMaxPenaltyTime\fR (number)
|
||||
Maximum penalty time increase in seconds, per penalty event. Set to -1 for no
|
||||
limit (the default), 0 to disable penalties altogether. ngIRCd doesn't use
|
||||
penalty increases higher than 2 seconds during normal operation, so values
|
||||
greater than 1 rarely make sense.
|
||||
.TP
|
||||
\fBMaxListSize\fR (number)
|
||||
Maximum number of channels returned in response to a LIST command. Default: 100.
|
||||
.TP
|
||||
@@ -219,8 +206,8 @@ If a client fails to answer a PING with a PONG within <PongTimeout>
|
||||
seconds, it will be disconnected by the server. Default: 20.
|
||||
.SH [OPTIONS]
|
||||
Optional features and configuration options to further tweak the behavior of
|
||||
ngIRCd are configured in this section. If you want to get started quickly, you
|
||||
most probably don't have to make changes here -- they are all optional.
|
||||
ngIRCd. If you want to get started quickly, you most probably don't have to
|
||||
make changes here -- they are all optional.
|
||||
.TP
|
||||
\fBAllowedChannelTypes\fR (string)
|
||||
List of allowed channel types (channel prefixes) for newly created channels
|
||||
@@ -229,9 +216,9 @@ Set this variable to the empty string to disallow creation of new channels
|
||||
by local clients at all. Default: #&+
|
||||
.TP
|
||||
\fBAllowRemoteOper\fR (boolean)
|
||||
If this option is active, IRC operators connected to remote servers are allowed
|
||||
to control this local server using administrative commands, for example like
|
||||
CONNECT, DIE, SQUIT etc. Default: no.
|
||||
Are IRC operators connected to remote servers allowed to control this server,
|
||||
e.g. are they allowed to use administrative commands like CONNECT, DIE,
|
||||
SQUIT, ... that affect this server? Default: no.
|
||||
.TP
|
||||
\fBChrootDir\fR (string)
|
||||
A directory to chroot in when everything is initialized. It doesn't need
|
||||
@@ -258,8 +245,8 @@ The Salt for cloaked hostname hashing. When undefined a random hash is
|
||||
generated after each server start.
|
||||
.TP
|
||||
\fBCloakUserToNick\fR (boolean)
|
||||
Set every clients' user name and real name to their nickname and hide the one
|
||||
supplied by the IRC client. Default: no.
|
||||
Set every clients' user name to their nickname and hide the one supplied
|
||||
by the IRC client. Default: no.
|
||||
.TP
|
||||
\fBConnectIPv4\fR (boolean)
|
||||
Set this to no if you do not want ngIRCd to connect to other IRC servers using
|
||||
@@ -273,8 +260,8 @@ Default: yes.
|
||||
.TP
|
||||
\fBDefaultUserModes\fR (string)
|
||||
Default user mode(s) to set on new local clients. Please note that only modes
|
||||
can be set that the client could set using regular MODE commands, you can't
|
||||
set "a" (away) for example!
|
||||
can be set that the client could set on itself, you can't set "a" (away) or
|
||||
"o" (IRC Op), for example!
|
||||
Default: none.
|
||||
.TP
|
||||
\fBDNS\fR (boolean)
|
||||
@@ -290,24 +277,23 @@ Users identified using IDENT are registered without the "~" character
|
||||
prepended to their user name.
|
||||
Default: yes.
|
||||
.TP
|
||||
.TP
|
||||
\fBIncludeDir\fR (string)
|
||||
Directory containing configuration snippets (*.conf), that should be read in
|
||||
after parsing the current configuration file.
|
||||
Default: none.
|
||||
.TP
|
||||
\fBMorePrivacy\fR (boolean)
|
||||
This will cause ngIRCd to censor user idle time, logon time as well as the
|
||||
PART/QUIT messages (that are sometimes used to inform everyone about which
|
||||
client software is being used). WHOWAS requests are also silently ignored,
|
||||
and NAMES output doesn't list any clients for non-members.
|
||||
part/quit messages (that are sometimes used to inform everyone about which
|
||||
client software is being used). WHOWAS requests are also silently ignored.
|
||||
This option is most useful when ngIRCd is being used together with
|
||||
anonymizing software such as TOR or I2P and one does not wish to make it
|
||||
too easy to collect statistics on the users.
|
||||
Default: no.
|
||||
.TP
|
||||
\fBNoticeBeforeRegistration\fR (boolean)
|
||||
\fBNoticeAuth\fR (boolean)
|
||||
Normally ngIRCd doesn't send any messages to a client until it is registered.
|
||||
Enable this option to let the daemon send "NOTICE *" messages to clients
|
||||
Enable this option to let the daemon send "NOTICE AUTH" messages to clients
|
||||
while connecting. Default: no.
|
||||
.TP
|
||||
\fBOperCanUseMode\fR (boolean)
|
||||
@@ -345,14 +331,6 @@ able to distinguish between Ident'ified and PAM-authenticated users: both
|
||||
don't have a "~" character prepended to their respective user names!
|
||||
Default: no.
|
||||
.TP
|
||||
\fBPAMServiceName\fR (string)
|
||||
When PAM is enabled, this value determines the used PAM configuration.
|
||||
This setting allows running multiple ngIRCd instances with different
|
||||
PAM configurations on each instance. If you set it to "ngircd-foo",
|
||||
PAM will use /etc/pam.d/ngircd-foo instead of the default
|
||||
/etc/pam.d/ngircd.
|
||||
Default: ngircd.
|
||||
.TP
|
||||
\fBRequireAuthPing\fR (boolean)
|
||||
Let ngIRCd send an "authentication PING" when a new client connects, and
|
||||
register this client only after receiving the corresponding "PONG" reply.
|
||||
@@ -390,7 +368,7 @@ SSL Certificate file of the private server key.
|
||||
.TP
|
||||
\fBCipherList\fR (string)
|
||||
Select cipher suites allowed for SSL/TLS connections. This defaults to
|
||||
"HIGH:!aNULL:@STRENGTH:!SSLv3" (OpenSSL) or "SECURE128:-VERS-SSL3.0" (GnuTLS).
|
||||
"HIGH:!aNULL:@STRENGTH" (OpenSSL) or "SECURE128" (GnuTLS).
|
||||
Please see 'man 1ssl ciphers' (OpenSSL) and 'man 3 gnutls_priority_init'
|
||||
(GnuTLS) for details.
|
||||
.TP
|
||||
@@ -432,7 +410,7 @@ Example: nick!ident@*.example.com
|
||||
Other servers are configured in
|
||||
.I [Server]
|
||||
sections. If you configure a port for the connection, then this ngIRCd
|
||||
tries to connect to the other server on the given port (active);
|
||||
tries to connect to to the other server on the given port (active);
|
||||
if not, it waits for the other server to connect (passive).
|
||||
.PP
|
||||
ngIRCd supports "server groups": You can assign an "ID" to every server
|
||||
@@ -510,12 +488,10 @@ Name of the channel, including channel prefix ("#" or "&").
|
||||
Topic for this channel.
|
||||
.TP
|
||||
\fBModes\fR (string)
|
||||
Initial channel modes, as used in "MODE" commands. Modifying lists (ban list,
|
||||
invite list, exception list) is supported.
|
||||
.PP
|
||||
.RS
|
||||
This option can be specified multiple times, evaluated top to bottom.
|
||||
.RE
|
||||
Initial channel modes.
|
||||
.TP
|
||||
\fBKey\fR (string)
|
||||
Sets initial channel key (only relevant if channel mode "k" is set).
|
||||
.TP
|
||||
\fBKeyFile\fR (string)
|
||||
Path and file name of a "key file" containing individual channel keys for
|
||||
@@ -559,6 +535,10 @@ The file is not reopened on each access, so you can modify and overwrite it
|
||||
without problems, but moving or deleting the file will have not effect until
|
||||
the daemon re-reads its configuration!
|
||||
.RE
|
||||
.TP
|
||||
\fBMaxUsers\fR (number)
|
||||
Set maximum user limit for this channel (only relevant if channel mode "l"
|
||||
is set).
|
||||
.SH HINTS
|
||||
It's wise to use "ngircd \-\-configtest" to validate the configuration file
|
||||
after changing it. See
|
||||
|
4
src/.gitignore
vendored
Normal file
4
src/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
config.h
|
||||
config.h.in
|
||||
config.h.in~
|
||||
stamp-h1
|
1
src/ipaddr/.gitignore
vendored
Normal file
1
src/ipaddr/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
Makefile.am
|
@@ -4,7 +4,6 @@
|
||||
|
||||
#ifndef NG_IPADDR_HDR
|
||||
#define NG_IPADDR_HDR
|
||||
|
||||
#include "portab.h"
|
||||
|
||||
/**
|
||||
@@ -13,7 +12,6 @@
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
|
5
src/ngircd/.gitignore
vendored
Normal file
5
src/ngircd/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
Makefile.am
|
||||
check-help
|
||||
check-version
|
||||
ngircd
|
||||
ngircd.exe
|
@@ -14,19 +14,16 @@
|
||||
* Functions to dynamically allocate arrays.
|
||||
*/
|
||||
|
||||
/* Additionan debug messages related to array handling: 0=off / 1=on */
|
||||
#define DEBUG_ARRAY 0
|
||||
|
||||
#include "array.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#if DEBUG_ARRAY
|
||||
# include "log.h"
|
||||
#endif
|
||||
#include "log.h"
|
||||
|
||||
/* Enable more Debug messages in alloc / append / memmove code. */
|
||||
/* #define DEBUG_ARRAY */
|
||||
|
||||
#define array_UNUSABLE(x) ( !(x)->mem )
|
||||
|
||||
@@ -67,7 +64,7 @@ array_alloc(array * a, size_t size, size_t pos)
|
||||
return NULL;
|
||||
|
||||
if (a->allocated < alloc) {
|
||||
#if DEBUG_ARRAY
|
||||
#ifdef DEBUG_ARRAY
|
||||
Log(LOG_DEBUG, "array_alloc(): changing size from %u to %u bytes.",
|
||||
a->allocated, alloc);
|
||||
#endif
|
||||
@@ -168,7 +165,7 @@ array_catb(array * dest, const char *src, size_t len)
|
||||
|
||||
assert(ptr != NULL);
|
||||
|
||||
#if DEBUG_ARRAY
|
||||
#ifdef DEBUG_ARRAY
|
||||
Log(LOG_DEBUG,
|
||||
"array_catb(): appending %u bytes to array (now %u bytes in array).",
|
||||
len, tmp);
|
||||
@@ -248,7 +245,7 @@ void
|
||||
array_free(array * a)
|
||||
{
|
||||
assert(a != NULL);
|
||||
#if DEBUG_ARRAY
|
||||
#ifdef DEBUG_ARRAY
|
||||
Log(LOG_DEBUG,
|
||||
"array_free(): %u bytes free'd (%u bytes still used at time of free()).",
|
||||
a->allocated, a->used);
|
||||
@@ -314,7 +311,7 @@ array_moveleft(array * a, size_t membersize, size_t pos)
|
||||
if (!bytepos)
|
||||
return; /* nothing to do */
|
||||
|
||||
#if DEBUG_ARRAY
|
||||
#ifdef DEBUG_ARRAY
|
||||
Log(LOG_DEBUG,
|
||||
"array_moveleft(): %u bytes used in array, starting at position %u.",
|
||||
a->used, bytepos);
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -18,34 +18,41 @@
|
||||
* Channel management
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn-func.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "channel.h"
|
||||
|
||||
#include "imp.h"
|
||||
#include "irc-write.h"
|
||||
#include "conf.h"
|
||||
#include "hash.h"
|
||||
#include "lists.h"
|
||||
#include "log.h"
|
||||
#include "messages.h"
|
||||
#include "match.h"
|
||||
#include "parse.h"
|
||||
#include "irc-mode.h"
|
||||
|
||||
#include "exp.h"
|
||||
|
||||
|
||||
#define REMOVE_PART 0
|
||||
#define REMOVE_QUIT 1
|
||||
#define REMOVE_KICK 2
|
||||
|
||||
|
||||
static CHANNEL *My_Channels;
|
||||
static CL2CHAN *My_Cl2Chan;
|
||||
|
||||
|
||||
static CL2CHAN *Get_Cl2Chan PARAMS(( CHANNEL *Chan, CLIENT *Client ));
|
||||
static CL2CHAN *Add_Client PARAMS(( CHANNEL *Chan, CLIENT *Client ));
|
||||
static bool Remove_Client PARAMS(( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const char *Reason, bool InformServer ));
|
||||
@@ -95,11 +102,9 @@ GLOBAL void
|
||||
Channel_InitPredefined( void )
|
||||
{
|
||||
CHANNEL *new_chan;
|
||||
REQUEST Req;
|
||||
const struct Conf_Channel *conf_chan;
|
||||
char *c;
|
||||
char modes[COMMAND_LEN], name[CHANNEL_NAME_LEN];
|
||||
size_t i, n, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
|
||||
const char *c;
|
||||
size_t i, channel_count = array_length(&Conf_Channels, sizeof(*conf_chan));
|
||||
|
||||
conf_chan = array_start(&Conf_Channels);
|
||||
|
||||
@@ -130,61 +135,21 @@ Channel_InitPredefined( void )
|
||||
conf_chan->name);
|
||||
continue;
|
||||
}
|
||||
Log(LOG_INFO, "Created pre-defined channel \"%s\".",
|
||||
conf_chan->name);
|
||||
|
||||
Channel_ModeAdd(new_chan, 'P');
|
||||
|
||||
if (conf_chan->topic[0])
|
||||
Channel_SetTopic(new_chan, NULL, conf_chan->topic);
|
||||
|
||||
/* Evaluate modes strings with fake requests */
|
||||
if (conf_chan->modes_num) {
|
||||
/* Prepare fake request structure */
|
||||
strlcpy(name, conf_chan->name, sizeof(name));
|
||||
Log(LOG_INFO, "Evaluating predefined channel modes for \"%s\".", name);
|
||||
Req.argv[0] = name;
|
||||
Req.prefix = Client_ID(Client_ThisServer());
|
||||
Req.command = "MODE";
|
||||
|
||||
/* Iterate over channel modes strings */
|
||||
for (n = 0; n < conf_chan->modes_num; n++) {
|
||||
Req.argc = 1;
|
||||
strlcpy(modes, conf_chan->modes[n], sizeof(modes));
|
||||
Log(LOG_DEBUG, "Evaluate \"MODE %s %s\".", name, modes);
|
||||
c = strtok(modes, " ");
|
||||
while (c && Req.argc < 15) {
|
||||
Req.argv[Req.argc++] = c;
|
||||
c = strtok(0, " ");
|
||||
}
|
||||
|
||||
if (Req.argc > 1) {
|
||||
/* Handling of legacy "Key" and "MaxUsers" settings:
|
||||
* Enforce setting the respective mode(s), to support
|
||||
* the legacy "Mode = kl" notation, which was valid but
|
||||
* is an invalid MODE string: key and limit are missing!
|
||||
* So set them manually when "k" or "l" are detected in
|
||||
* the first MODE parameter ... */
|
||||
if (Req.argc > 1 && strchr(Req.argv[1], 'k')) {
|
||||
Channel_SetKey(new_chan, conf_chan->key);
|
||||
Channel_ModeAdd(new_chan, 'k');
|
||||
}
|
||||
if (strchr(Req.argv[1], 'l')) {
|
||||
Channel_SetMaxUsers(new_chan, conf_chan->maxusers);
|
||||
Channel_ModeAdd(new_chan, 'l');
|
||||
}
|
||||
|
||||
IRC_MODE(Client_ThisServer(), &Req);
|
||||
}
|
||||
|
||||
/* Original channel modes srings are no longer needed */
|
||||
free(conf_chan->modes[n]);
|
||||
}
|
||||
}
|
||||
c = conf_chan->modes;
|
||||
while (*c)
|
||||
Channel_ModeAdd(new_chan, *c++);
|
||||
|
||||
Channel_SetKey(new_chan, conf_chan->key);
|
||||
Channel_SetMaxUsers(new_chan, conf_chan->maxusers);
|
||||
Set_KeyFile(new_chan, conf_chan->keyfile);
|
||||
|
||||
Log(LOG_INFO,
|
||||
"Created pre-defined channel \"%s\", mode \"%s\" (key \"%s\", limit %d).",
|
||||
new_chan->name, new_chan->modes, new_chan->key,
|
||||
new_chan->maxusers);
|
||||
}
|
||||
if (channel_count)
|
||||
array_free(&Conf_Channels);
|
||||
@@ -396,19 +361,14 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
|
||||
!Channel_UserHasMode(chan, Target, 'q') &&
|
||||
!Channel_UserHasMode(chan, Target, 'a'))
|
||||
can_kick = true;
|
||||
|
||||
/* Half Op can't kick owner | admin | op */
|
||||
|
||||
/* Half Op can't kick owner | admin | op */
|
||||
else if (Channel_UserHasMode(chan, Peer, 'h') &&
|
||||
!Channel_UserHasMode(chan, Target, 'q') &&
|
||||
!Channel_UserHasMode(chan, Target, 'a') &&
|
||||
!Channel_UserHasMode(chan, Target, 'o'))
|
||||
can_kick = true;
|
||||
|
||||
/* IRC operators & IRCd with OperCanMode enabled
|
||||
* can kick anyways regardless of privilege */
|
||||
else if(Client_HasMode(Origin, 'o') && Conf_OperCanMode)
|
||||
can_kick = true;
|
||||
|
||||
if(!can_kick) {
|
||||
IRC_WriteErrClient(Origin, ERR_CHANOPPRIVTOOLOW_MSG,
|
||||
Client_ID(Origin), Name);
|
||||
@@ -1088,7 +1048,7 @@ Remove_Client( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const ch
|
||||
switch( Type )
|
||||
{
|
||||
case REMOVE_QUIT:
|
||||
/* QUIT: other servers have already been notified,
|
||||
/* QUIT: other servers have already been notified,
|
||||
* see Client_Destroy(); so only inform other clients
|
||||
* in same channel. */
|
||||
assert( InformServer == false );
|
||||
@@ -1142,29 +1102,29 @@ Remove_Client( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const ch
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_AddBan(CHANNEL *c, const char *mask, const char *who )
|
||||
Channel_AddBan(CHANNEL *c, const char *mask )
|
||||
{
|
||||
struct list_head *h = Channel_GetListBans(c);
|
||||
LogDebug("Adding \"%s\" to \"%s\" ban list", mask, Channel_Name(c));
|
||||
return Lists_Add(h, mask, time(NULL), who, false);
|
||||
return Lists_Add(h, mask, false, NULL);
|
||||
}
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_AddExcept(CHANNEL *c, const char *mask, const char *who )
|
||||
Channel_AddExcept(CHANNEL *c, const char *mask )
|
||||
{
|
||||
struct list_head *h = Channel_GetListExcepts(c);
|
||||
LogDebug("Adding \"%s\" to \"%s\" exception list", mask, Channel_Name(c));
|
||||
return Lists_Add(h, mask, time(NULL), who, false);
|
||||
return Lists_Add(h, mask, false, NULL);
|
||||
}
|
||||
|
||||
|
||||
GLOBAL bool
|
||||
Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce, const char *who )
|
||||
Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce)
|
||||
{
|
||||
struct list_head *h = Channel_GetListInvites(c);
|
||||
LogDebug("Adding \"%s\" to \"%s\" invite list", mask, Channel_Name(c));
|
||||
return Lists_Add(h, mask, time(NULL), who, onlyonce);
|
||||
return Lists_Add(h, mask, onlyonce, NULL);
|
||||
}
|
||||
|
||||
|
||||
@@ -1181,9 +1141,7 @@ ShowChannelList(struct list_head *head, CLIENT *Client, CHANNEL *Channel,
|
||||
while (e) {
|
||||
if (!IRC_WriteStrClient(Client, msg, Client_ID(Client),
|
||||
Channel_Name(Channel),
|
||||
Lists_GetMask(e),
|
||||
Lists_GetReason(e),
|
||||
Lists_GetValidity(e)))
|
||||
Lists_GetMask(e)))
|
||||
return DISCONNECTED;
|
||||
e = Lists_GetNext(e);
|
||||
}
|
||||
|
@@ -127,10 +127,10 @@ GLOBAL char *Channel_TopicWho PARAMS(( CHANNEL *Chan ));
|
||||
GLOBAL unsigned int Channel_CreationTime PARAMS(( CHANNEL *Chan ));
|
||||
#endif
|
||||
|
||||
GLOBAL bool Channel_AddBan PARAMS((CHANNEL *c, const char *Mask, const char *who));
|
||||
GLOBAL bool Channel_AddExcept PARAMS((CHANNEL *c, const char *Mask, const char *who));
|
||||
GLOBAL bool Channel_AddBan PARAMS((CHANNEL *c, const char *Mask));
|
||||
GLOBAL bool Channel_AddExcept PARAMS((CHANNEL *c, const char *Mask));
|
||||
GLOBAL bool Channel_AddInvite PARAMS((CHANNEL *c, const char *Mask,
|
||||
bool OnlyOnce, const char *who));
|
||||
bool OnlyOnce));
|
||||
|
||||
GLOBAL bool Channel_ShowBans PARAMS((CLIENT *client, CHANNEL *c));
|
||||
GLOBAL bool Channel_ShowExcepts PARAMS((CLIENT *client, CHANNEL *c));
|
||||
|
@@ -16,13 +16,19 @@
|
||||
* User class management.
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "array.h"
|
||||
#include "conn.h"
|
||||
#include "client.h"
|
||||
#include "lists.h"
|
||||
#include "match.h"
|
||||
#include "stdio.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "class.h"
|
||||
|
||||
struct list_head My_Classes[CLASS_COUNT];
|
||||
@@ -105,7 +111,7 @@ Class_AddMask(const int Class, const char *Pattern, time_t ValidUntil,
|
||||
|
||||
Lists_MakeMask(Pattern, mask, sizeof(mask));
|
||||
return Lists_Add(&My_Classes[Class], mask,
|
||||
ValidUntil, Reason, false);
|
||||
ValidUntil, Reason);
|
||||
}
|
||||
|
||||
GLOBAL void
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -18,11 +18,15 @@
|
||||
* Functions to deal with IRC Capabilities
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn.h"
|
||||
#include "client.h"
|
||||
#include "log.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "client-cap.h"
|
||||
|
||||
GLOBAL int
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -18,16 +18,22 @@
|
||||
* Client management.
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "client.h"
|
||||
|
||||
#include <imp.h>
|
||||
#include "ngircd.h"
|
||||
#include "channel.h"
|
||||
#include "conf.h"
|
||||
@@ -38,6 +44,8 @@
|
||||
#include "match.h"
|
||||
#include "messages.h"
|
||||
|
||||
#include <exp.h>
|
||||
|
||||
#define GETID_LEN (CLIENT_NICK_LEN-1) + 1 + (CLIENT_USER_LEN-1) + 1 + (CLIENT_HOST_LEN-1) + 1
|
||||
|
||||
static CLIENT *This_Server, *My_Clients;
|
||||
@@ -72,7 +80,7 @@ GLOBAL void
|
||||
Client_Init( void )
|
||||
{
|
||||
struct hostent *h;
|
||||
|
||||
|
||||
This_Server = New_Client_Struct( );
|
||||
if( ! This_Server )
|
||||
{
|
||||
@@ -98,7 +106,7 @@ Client_Init( void )
|
||||
Client_SetInfo( This_Server, Conf_ServerInfo );
|
||||
|
||||
My_Clients = This_Server;
|
||||
|
||||
|
||||
memset( &My_Whowas, 0, sizeof( My_Whowas ));
|
||||
} /* Client_Init */
|
||||
|
||||
@@ -111,7 +119,7 @@ Client_Exit( void )
|
||||
|
||||
if( NGIRCd_SignalRestart ) Client_Destroy( This_Server, "Server going down (restarting).", NULL, false );
|
||||
else Client_Destroy( This_Server, "Server going down.", NULL, false );
|
||||
|
||||
|
||||
cnt = 0;
|
||||
c = My_Clients;
|
||||
while(c) {
|
||||
@@ -228,7 +236,7 @@ GLOBAL void
|
||||
Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool SendQuit )
|
||||
{
|
||||
/* remove a client */
|
||||
|
||||
|
||||
CLIENT *last, *c;
|
||||
char msg[COMMAND_LEN];
|
||||
const char *txt;
|
||||
@@ -337,11 +345,7 @@ Client_SetHostname( CLIENT *Client, const char *Hostname )
|
||||
assert(Client != NULL);
|
||||
assert(Hostname != NULL);
|
||||
|
||||
/* Only cloak the hostmask if it has not yet been cloaked.
|
||||
* The period or colon indicates it's still an IP address.
|
||||
* An empty string means a rDNS lookup did not happen (yet). */
|
||||
if (Conf_CloakHost[0] && (!Client->host[0] || strchr(Client->host, '.')
|
||||
|| strchr(Client->host, ':'))) {
|
||||
if (strlen(Conf_CloakHost)) {
|
||||
char cloak[GETID_LEN];
|
||||
|
||||
strlcpy(cloak, Hostname, GETID_LEN);
|
||||
@@ -385,7 +389,7 @@ Client_SetID( CLIENT *Client, const char *ID )
|
||||
{
|
||||
assert( Client != NULL );
|
||||
assert( ID != NULL );
|
||||
|
||||
|
||||
strlcpy( Client->id, ID, sizeof( Client->id ));
|
||||
|
||||
if (Conf_CloakUserToNick) {
|
||||
@@ -431,7 +435,7 @@ Client_SetOrigUser(CLIENT UNUSED *Client, const char UNUSED *User)
|
||||
assert(Client != NULL);
|
||||
assert(User != NULL);
|
||||
|
||||
#if defined(PAM)
|
||||
#if defined(PAM) && defined(IDENTAUTH)
|
||||
strlcpy(Client->orig_user, User, sizeof(Client->orig_user));
|
||||
#endif
|
||||
} /* Client_SetOrigUser */
|
||||
@@ -702,7 +706,7 @@ Client_ID( CLIENT *Client )
|
||||
if(Client->type == CLIENT_USER)
|
||||
assert(strlen(Client->id) < Conf_MaxNickLength);
|
||||
#endif
|
||||
|
||||
|
||||
if( Client->id[0] ) return Client->id;
|
||||
else return "*";
|
||||
} /* Client_ID */
|
||||
@@ -735,7 +739,15 @@ Client_User( CLIENT *Client )
|
||||
*/
|
||||
GLOBAL char *
|
||||
Client_OrigUser(CLIENT *Client) {
|
||||
#ifndef IDENTAUTH
|
||||
char *user = Client->user;
|
||||
|
||||
if (user[0] == '~')
|
||||
user++;
|
||||
return user;
|
||||
#else
|
||||
return Client->orig_user;
|
||||
#endif
|
||||
} /* Client_OrigUser */
|
||||
|
||||
#endif
|
||||
|
@@ -52,9 +52,8 @@ typedef struct _CLIENT
|
||||
char *cloaked; /* cloaked hostname of the client */
|
||||
char *ipa_text; /* textual representaton of IP address */
|
||||
char user[CLIENT_USER_LEN]; /* user name ("login") */
|
||||
#if defined(PAM)
|
||||
char orig_user[CLIENT_AUTHUSER_LEN];
|
||||
/* original user name supplied by USER command */
|
||||
#if defined(PAM) && defined(IDENTAUTH)
|
||||
char orig_user[CLIENT_USER_LEN];/* user name supplied by USER command */
|
||||
#endif
|
||||
char info[CLIENT_INFO_LEN]; /* long user name (user) / info text (server) */
|
||||
char modes[CLIENT_MODE_LEN]; /* client modes */
|
||||
|
@@ -13,10 +13,6 @@
|
||||
#ifdef HAVE_LIBSSL
|
||||
#define SSL_SUPPORT
|
||||
#include <openssl/ssl.h>
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
||||
#define OpenSSL_version SSLeay_version
|
||||
#define OPENSSL_VERSION SSLEAY_VERSION
|
||||
#endif
|
||||
#endif
|
||||
#ifdef HAVE_LIBGNUTLS
|
||||
#define SSL_SUPPORT
|
||||
@@ -40,7 +36,6 @@ struct ConnSSL_State {
|
||||
gnutls_session_t gnutls_session;
|
||||
void *cookie; /* pointer to server configuration structure
|
||||
(for outgoing connections), or NULL. */
|
||||
size_t x509_cred_idx; /* index of active x509 credential record */
|
||||
#endif
|
||||
char *fingerprint;
|
||||
};
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2019 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,7 +16,9 @@
|
||||
* Configuration management (reading, parsing & validation)
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#ifdef PROTOTYPES
|
||||
# include <stdarg.h>
|
||||
@@ -27,19 +29,23 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <dirent.h>
|
||||
|
||||
#include "array.h"
|
||||
#include "ngircd.h"
|
||||
#include "conn.h"
|
||||
#include "channel.h"
|
||||
#include "defines.h"
|
||||
#include "log.h"
|
||||
#include "match.h"
|
||||
#include "tool.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "conf.h"
|
||||
|
||||
|
||||
@@ -88,10 +94,10 @@ static void Init_Server_Struct PARAMS(( CONF_SERVER *Server ));
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LIBSSL
|
||||
#define DEFAULT_CIPHERS "HIGH:!aNULL:@STRENGTH:!SSLv3"
|
||||
#define DEFAULT_CIPHERS "HIGH:!aNULL:@STRENGTH"
|
||||
#endif
|
||||
#ifdef HAVE_LIBGNUTLS
|
||||
#define DEFAULT_CIPHERS "SECURE128:-VERS-SSL3.0"
|
||||
#define DEFAULT_CIPHERS "SECURE128"
|
||||
#endif
|
||||
|
||||
#ifdef SSL_SUPPORT
|
||||
@@ -328,7 +334,7 @@ Conf_Test( void )
|
||||
{
|
||||
struct passwd *pwd;
|
||||
struct group *grp;
|
||||
unsigned int i, j;
|
||||
unsigned int i;
|
||||
bool config_valid;
|
||||
size_t predef_channel_count;
|
||||
struct Conf_Channel *predef_chan;
|
||||
@@ -363,8 +369,7 @@ Conf_Test( void )
|
||||
printf(" MotdPhrase = %s\n", array_bytes(&Conf_Motd)
|
||||
? (const char*) array_start(&Conf_Motd) : "");
|
||||
}
|
||||
printf(" Network = %s\n", Conf_Network);
|
||||
if (!Conf_PAM)
|
||||
if (!Conf_PAM)
|
||||
printf(" Password = %s\n", Conf_ServerPwd);
|
||||
printf(" PidFile = %s\n", Conf_PidFile);
|
||||
printf(" Ports = ");
|
||||
@@ -388,7 +393,6 @@ Conf_Test( void )
|
||||
printf(" MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
|
||||
printf(" MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
|
||||
printf(" MaxNickLength = %u\n", Conf_MaxNickLength - 1);
|
||||
printf(" MaxPenaltyTime = %ld\n", (long)Conf_MaxPenaltyTime);
|
||||
printf(" MaxListSize = %d\n", Conf_MaxListSize);
|
||||
printf(" PingTimeout = %d\n", Conf_PingTimeout);
|
||||
printf(" PongTimeout = %d\n", Conf_PongTimeout);
|
||||
@@ -413,14 +417,13 @@ Conf_Test( void )
|
||||
#endif
|
||||
printf(" IncludeDir = %s\n", Conf_IncludeDir);
|
||||
printf(" MorePrivacy = %s\n", yesno_to_str(Conf_MorePrivacy));
|
||||
printf(" NoticeBeforeRegistration = %s\n", yesno_to_str(Conf_NoticeBeforeRegistration));
|
||||
printf(" NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth));
|
||||
printf(" OperCanUseMode = %s\n", yesno_to_str(Conf_OperCanMode));
|
||||
printf(" OperChanPAutoOp = %s\n", yesno_to_str(Conf_OperChanPAutoOp));
|
||||
printf(" OperServerMode = %s\n", yesno_to_str(Conf_OperServerMode));
|
||||
#ifdef PAM
|
||||
printf(" PAM = %s\n", yesno_to_str(Conf_PAM));
|
||||
printf(" PAMIsOptional = %s\n", yesno_to_str(Conf_PAMIsOptional));
|
||||
printf(" PAMServiceName = %s\n", Conf_PAMServiceName);
|
||||
#endif
|
||||
#ifndef STRICT_RFC
|
||||
printf(" RequireAuthPing = %s\n", yesno_to_str(Conf_AuthPing));
|
||||
@@ -483,8 +486,7 @@ Conf_Test( void )
|
||||
/* Valid "Channel" section */
|
||||
puts( "[CHANNEL]" );
|
||||
printf(" Name = %s\n", predef_chan->name);
|
||||
for(j = 0; j < predef_chan->modes_num; j++)
|
||||
printf(" Modes = %s\n", predef_chan->modes[j]);
|
||||
printf(" Modes = %s\n", predef_chan->modes);
|
||||
printf(" Key = %s\n", predef_chan->key);
|
||||
printf(" MaxUsers = %lu\n", predef_chan->maxusers);
|
||||
printf(" Topic = %s\n", predef_chan->topic);
|
||||
@@ -621,7 +623,6 @@ Conf_EnablePassiveServer(const char *Name)
|
||||
&& (Conf_Server[i].port > 0)) {
|
||||
/* BINGO! Enable server */
|
||||
Conf_Server[i].flags &= ~CONF_SFLAG_DISABLED;
|
||||
Conf_Server[i].lasttry = 0;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -713,6 +714,7 @@ Conf_NickIsService(int ConfServer, const char *Nick)
|
||||
/**
|
||||
* Check if the given nickname is blocked for "normal client" use.
|
||||
*
|
||||
* @param ConfServer The server index or NONE to check all configured servers.
|
||||
* @param Nick The nickname to check.
|
||||
* @returns true if the given nickname belongs to an "IRC service".
|
||||
*/
|
||||
@@ -746,7 +748,6 @@ Set_Defaults(bool InitServers)
|
||||
strcpy(Conf_ServerAdminMail, "");
|
||||
snprintf(Conf_ServerInfo, sizeof Conf_ServerInfo, "%s %s",
|
||||
PACKAGE_NAME, PACKAGE_VERSION);
|
||||
strcpy(Conf_Network, "");
|
||||
free(Conf_ListenAddress);
|
||||
Conf_ListenAddress = NULL;
|
||||
array_free(&Conf_ListenPorts);
|
||||
@@ -767,7 +768,6 @@ Set_Defaults(bool InitServers)
|
||||
Conf_MaxConnectionsIP = 5;
|
||||
Conf_MaxJoins = 10;
|
||||
Conf_MaxNickLength = CLIENT_NICK_LEN_DEFAULT;
|
||||
Conf_MaxPenaltyTime = -1;
|
||||
Conf_MaxListSize = 100;
|
||||
Conf_PingTimeout = 120;
|
||||
Conf_PongTimeout = 20;
|
||||
@@ -800,7 +800,7 @@ Set_Defaults(bool InitServers)
|
||||
#endif
|
||||
strcpy(Conf_IncludeDir, "");
|
||||
Conf_MorePrivacy = false;
|
||||
Conf_NoticeBeforeRegistration = false;
|
||||
Conf_NoticeAuth = false;
|
||||
Conf_OperCanMode = false;
|
||||
Conf_OperChanPAutoOp = true;
|
||||
Conf_OperServerMode = false;
|
||||
@@ -810,9 +810,8 @@ Set_Defaults(bool InitServers)
|
||||
Conf_PAM = false;
|
||||
#endif
|
||||
Conf_PAMIsOptional = false;
|
||||
strcpy(Conf_PAMServiceName, "ngircd");
|
||||
Conf_ScrubCTCP = false;
|
||||
#ifdef SYSLOG
|
||||
Conf_ScrubCTCP = false;
|
||||
#ifdef LOG_LOCAL5
|
||||
Conf_SyslogFacility = LOG_LOCAL5;
|
||||
#else
|
||||
@@ -847,13 +846,13 @@ no_listenports(void)
|
||||
*
|
||||
* This function is used to read the MOTD and help text file, for example.
|
||||
*
|
||||
* @param Filename Name of the file to read.
|
||||
* @param filename Name of the file to read.
|
||||
* @return true, when the file has been read in.
|
||||
*/
|
||||
static bool
|
||||
Read_TextFile(const char *Filename, const char *Name, array *Destination)
|
||||
{
|
||||
char line[COMMAND_LEN];
|
||||
char line[127];
|
||||
FILE *fp;
|
||||
int line_no = 1;
|
||||
|
||||
@@ -889,9 +888,9 @@ Read_TextFile(const char *Filename, const char *Name, array *Destination)
|
||||
* Please note that this function uses exit(1) on fatal errors and therefore
|
||||
* can result in ngIRCd terminating!
|
||||
*
|
||||
* @param IsStarting Flag indicating if ngIRCd is starting or not.
|
||||
* @returns true when the configuration file has been read
|
||||
* successfully; false otherwise.
|
||||
* @param ngircd_starting Flag indicating if ngIRCd is starting or not.
|
||||
* @returns true when the configuration file has been read
|
||||
* successfully; false otherwise.
|
||||
*/
|
||||
static bool
|
||||
Read_Config(bool TestOnly, bool IsStarting)
|
||||
@@ -903,8 +902,6 @@ Read_Config(bool TestOnly, bool IsStarting)
|
||||
FILE *fd;
|
||||
DIR *dh;
|
||||
|
||||
Config_Error(LOG_INFO, "Using configuration file \"%s\" ...", NGIRCd_ConfFile);
|
||||
|
||||
/* Open configuration file */
|
||||
fd = fopen( NGIRCd_ConfFile, "r" );
|
||||
if( ! fd ) {
|
||||
@@ -1290,6 +1287,116 @@ WarnPAM(const char UNUSED *File, int UNUSED Line)
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle legacy "NoXXX" options in [GLOBAL] section.
|
||||
*
|
||||
* TODO: This function and support for "NoXXX" could be removed starting
|
||||
* with ngIRCd release 19 (one release after marking it "deprecated").
|
||||
*
|
||||
* @param Var Variable name.
|
||||
* @param Arg Argument string.
|
||||
* @returns true if a NoXXX option has been processed; false otherwise.
|
||||
*/
|
||||
static bool
|
||||
CheckLegacyNoOption(const char *Var, const char *Arg)
|
||||
{
|
||||
if(strcasecmp(Var, "NoDNS") == 0) {
|
||||
Conf_DNS = !Check_ArgIsTrue( Arg );
|
||||
return true;
|
||||
}
|
||||
if (strcasecmp(Var, "NoIdent") == 0) {
|
||||
Conf_Ident = !Check_ArgIsTrue(Arg);
|
||||
return true;
|
||||
}
|
||||
if(strcasecmp(Var, "NoPAM") == 0) {
|
||||
Conf_PAM = !Check_ArgIsTrue(Arg);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle deprecated legacy options in [GLOBAL] section.
|
||||
*
|
||||
* TODO: This function and support for these options in the [Global] section
|
||||
* could be removed starting with ngIRCd release 19 (one release after
|
||||
* marking it "deprecated").
|
||||
*
|
||||
* @param Var Variable name.
|
||||
* @param Arg Argument string.
|
||||
* @returns true if a legacy option has been processed; false otherwise.
|
||||
*/
|
||||
static const char*
|
||||
CheckLegacyGlobalOption(const char *File, int Line, char *Var, char *Arg)
|
||||
{
|
||||
if (strcasecmp(Var, "AllowRemoteOper") == 0
|
||||
|| strcasecmp(Var, "ChrootDir") == 0
|
||||
|| strcasecmp(Var, "ConnectIPv4") == 0
|
||||
|| strcasecmp(Var, "ConnectIPv6") == 0
|
||||
|| strcasecmp(Var, "OperCanUseMode") == 0
|
||||
|| strcasecmp(Var, "OperChanPAutoOp") == 0
|
||||
|| strcasecmp(Var, "OperServerMode") == 0
|
||||
|| strcasecmp(Var, "PredefChannelsOnly") == 0
|
||||
|| strcasecmp(Var, "SyslogFacility") == 0
|
||||
|| strcasecmp(Var, "WebircPassword") == 0) {
|
||||
Handle_OPTIONS(File, Line, Var, Arg);
|
||||
return "[Options]";
|
||||
}
|
||||
if (strcasecmp(Var, "ConnectRetry") == 0
|
||||
|| strcasecmp(Var, "IdleTimeout") == 0
|
||||
|| strcasecmp(Var, "MaxConnections") == 0
|
||||
|| strcasecmp(Var, "MaxConnectionsIP") == 0
|
||||
|| strcasecmp(Var, "MaxJoins") == 0
|
||||
|| strcasecmp(Var, "MaxNickLength") == 0
|
||||
|| strcasecmp(Var, "PingTimeout") == 0
|
||||
|| strcasecmp(Var, "PongTimeout") == 0) {
|
||||
Handle_LIMITS(File, Line, Var, Arg);
|
||||
return "[Limits]";
|
||||
}
|
||||
#ifdef SSL_SUPPORT
|
||||
if (strcasecmp(Var, "SSLCertFile") == 0
|
||||
|| strcasecmp(Var, "SSLDHFile") == 0
|
||||
|| strcasecmp(Var, "SSLKeyFile") == 0
|
||||
|| strcasecmp(Var, "SSLKeyFilePassword") == 0
|
||||
|| strcasecmp(Var, "SSLPorts") == 0) {
|
||||
Handle_SSL(File, Line, Var + 3, Arg);
|
||||
return "[SSL]";
|
||||
}
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip "no" prefix of a string.
|
||||
*
|
||||
* TODO: This function and support for "NoXXX" should be removed starting
|
||||
* with ngIRCd release 19! (One release after marking it "deprecated").
|
||||
*
|
||||
* @param str Pointer to input string starting with "no".
|
||||
* @returns New pointer to string without "no" prefix.
|
||||
*/
|
||||
static const char *
|
||||
NoNo(const char *str)
|
||||
{
|
||||
assert(strncasecmp("no", str, 2) == 0 && str[2]);
|
||||
return str + 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invert "boolean" string.
|
||||
*
|
||||
* TODO: This function and support for "NoXXX" should be removed starting
|
||||
* with ngIRCd release 19! (One release after marking it "deprecated").
|
||||
*
|
||||
* @param arg "Boolean" input string.
|
||||
* @returns Pointer to inverted "boolean string".
|
||||
*/
|
||||
static const char *
|
||||
InvertArg(const char *arg)
|
||||
{
|
||||
return yesno_to_str(!Check_ArgIsTrue(arg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle variable in [Global] configuration section.
|
||||
@@ -1304,7 +1411,7 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
|
||||
struct passwd *pwd;
|
||||
struct group *grp;
|
||||
size_t len;
|
||||
char *ptr;
|
||||
const char *section;
|
||||
|
||||
assert(File != NULL);
|
||||
assert(Line > 0);
|
||||
@@ -1387,19 +1494,6 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
|
||||
Using_MotdFile = false;
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "Network") == 0) {
|
||||
len = strlcpy(Conf_Network, Arg, sizeof(Conf_Network));
|
||||
if (len >= sizeof(Conf_Network))
|
||||
Config_Error_TooLong(File, Line, Var);
|
||||
ptr = strchr(Conf_Network, ' ');
|
||||
if (ptr) {
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d: \"Network\" can't contain spaces!",
|
||||
File, Line);
|
||||
*ptr = '\0';
|
||||
}
|
||||
return;
|
||||
}
|
||||
if(strcasecmp(Var, "Password") == 0) {
|
||||
len = strlcpy(Conf_ServerPwd, Arg, sizeof(Conf_ServerPwd));
|
||||
if (len >= sizeof(Conf_ServerPwd))
|
||||
@@ -1443,6 +1537,36 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
|
||||
return;
|
||||
}
|
||||
|
||||
if (CheckLegacyNoOption(Var, Arg)) {
|
||||
/* TODO: This function and support for "NoXXX" could be
|
||||
* be removed starting with ngIRCd release 19 (one release
|
||||
* after marking it "deprecated"). */
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Global\"): \"No\"-Prefix is deprecated, use \"%s = %s\" in [Options] section!",
|
||||
File, Line, NoNo(Var), InvertArg(Arg));
|
||||
if (strcasecmp(Var, "NoIdent") == 0)
|
||||
WarnIdent(File, Line);
|
||||
else if (strcasecmp(Var, "NoPam") == 0)
|
||||
WarnPAM(File, Line);
|
||||
return;
|
||||
}
|
||||
if ((section = CheckLegacyGlobalOption(File, Line, Var, Arg))) {
|
||||
/** TODO: This function and support for these options in the
|
||||
* [Global] section could be removed starting with ngIRCd
|
||||
* release 19 (one release after marking it "deprecated"). */
|
||||
if (strncasecmp(Var, "SSL", 3) == 0) {
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Global\"): \"%s\" is deprecated here, move it to %s and rename to \"%s\"!",
|
||||
File, Line, Var, section,
|
||||
Var + 3);
|
||||
} else {
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Global\"): \"%s\" is deprecated here, move it to %s!",
|
||||
File, Line, Var, section);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
Config_Error_Section(File, Line, Var, "Global");
|
||||
}
|
||||
|
||||
@@ -1505,12 +1629,6 @@ Handle_LIMITS(const char *File, int Line, char *Var, char *Arg)
|
||||
Config_Error_NaN(File, Line, Var);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "MaxPenaltyTime") == 0) {
|
||||
Conf_MaxPenaltyTime = atol(Arg);
|
||||
if (Conf_MaxPenaltyTime < -1)
|
||||
Conf_MaxPenaltyTime = -1; /* "unlimited" */
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "PingTimeout") == 0) {
|
||||
Conf_PingTimeout = atoi(Arg);
|
||||
if (Conf_PingTimeout < 5) {
|
||||
@@ -1667,8 +1785,8 @@ Handle_OPTIONS(const char *File, int Line, char *Var, char *Arg)
|
||||
Conf_MorePrivacy = Check_ArgIsTrue(Arg);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "NoticeBeforeRegistration") == 0) {
|
||||
Conf_NoticeBeforeRegistration = Check_ArgIsTrue(Arg);
|
||||
if (strcasecmp(Var, "NoticeAuth") == 0) {
|
||||
Conf_NoticeAuth = Check_ArgIsTrue(Arg);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "OperCanUseMode") == 0) {
|
||||
@@ -1692,10 +1810,20 @@ Handle_OPTIONS(const char *File, int Line, char *Var, char *Arg)
|
||||
Conf_PAMIsOptional = Check_ArgIsTrue(Arg);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "PAMServiceName") == 0) {
|
||||
len = strlcpy(Conf_PAMServiceName, Arg, sizeof(Conf_PAMServiceName));
|
||||
if (len >= sizeof(Conf_PAMServiceName))
|
||||
Config_Error_TooLong(File, Line, Var);
|
||||
if (strcasecmp(Var, "PredefChannelsOnly") == 0) {
|
||||
/*
|
||||
* TODO: This section and support for "PredefChannelsOnly"
|
||||
* could be removed starting with ngIRCd release 22 (one
|
||||
* release after marking it "deprecated") ...
|
||||
*/
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Options\"): \"%s\" is deprecated, please use \"AllowedChannelTypes\"!",
|
||||
File, Line, Var);
|
||||
if (Check_ArgIsTrue(Arg))
|
||||
Conf_AllowedChannelTypes[0] = '\0';
|
||||
else
|
||||
strlcpy(Conf_AllowedChannelTypes, CHANTYPES,
|
||||
sizeof(Conf_AllowedChannelTypes));
|
||||
return;
|
||||
}
|
||||
#ifndef STRICT_RFC
|
||||
@@ -1987,12 +2115,8 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
|
||||
}
|
||||
if (strcasecmp(Var, "Modes") == 0) {
|
||||
/* Initial modes */
|
||||
if(chan->modes_num >= sizeof(chan->modes)) {
|
||||
Config_Error(LOG_ERR, "Too many Modes, option ignored.");
|
||||
return;
|
||||
}
|
||||
chan->modes[chan->modes_num++] = strndup(Arg, COMMAND_LEN);
|
||||
if(strlen(Arg) >= COMMAND_LEN)
|
||||
len = strlcpy(chan->modes, Arg, sizeof(chan->modes));
|
||||
if (len >= sizeof(chan->modes))
|
||||
Config_Error_TooLong(File, Line, Var);
|
||||
return;
|
||||
}
|
||||
@@ -2008,9 +2132,6 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
|
||||
len = strlcpy(chan->key, Arg, sizeof(chan->key));
|
||||
if (len >= sizeof(chan->key))
|
||||
Config_Error_TooLong(File, Line, Var);
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Channel\"): \"%s\" is deprecated here, use \"Modes = +k <key>\"!",
|
||||
File, Line, Var);
|
||||
return;
|
||||
}
|
||||
if( strcasecmp( Var, "MaxUsers" ) == 0 ) {
|
||||
@@ -2018,9 +2139,6 @@ Handle_CHANNEL(const char *File, int Line, char *Var, char *Arg)
|
||||
chan->maxusers = (unsigned long) atol(Arg);
|
||||
if (!chan->maxusers && strcmp(Arg, "0"))
|
||||
Config_Error_NaN(File, Line, Var);
|
||||
Config_Error(LOG_WARNING,
|
||||
"%s, line %d (section \"Channel\"): \"%s\" is deprecated here, use \"Modes = +l <limit>\"!",
|
||||
File, Line, Var);
|
||||
return;
|
||||
}
|
||||
if (strcasecmp(Var, "KeyFile") == 0) {
|
||||
@@ -2076,8 +2194,7 @@ Validate_Config(bool Configtest, bool Rehash)
|
||||
break;
|
||||
} while (*(++ptr));
|
||||
|
||||
if (!Conf_ServerName[0] || !strchr(Conf_ServerName, '.'))
|
||||
{
|
||||
if (!Conf_ServerName[0]) {
|
||||
/* No server name configured! */
|
||||
config_valid = false;
|
||||
Config_Error(LOG_ALERT,
|
||||
@@ -2091,6 +2208,20 @@ Validate_Config(bool Configtest, bool Rehash)
|
||||
}
|
||||
}
|
||||
|
||||
if (Conf_ServerName[0] && !strchr(Conf_ServerName, '.')) {
|
||||
/* No dot in server name! */
|
||||
config_valid = false;
|
||||
Config_Error(LOG_ALERT,
|
||||
"Invalid server name configured in \"%s\" (section 'Global': 'Name'): Dot missing!",
|
||||
NGIRCd_ConfFile);
|
||||
if (!Configtest) {
|
||||
Config_Error(LOG_ALERT,
|
||||
"%s exiting due to fatal errors!",
|
||||
PACKAGE_NAME);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef STRICT_RFC
|
||||
if (!Conf_ServerAdminMail[0]) {
|
||||
/* No administrative contact configured! */
|
||||
@@ -2120,11 +2251,6 @@ Validate_Config(bool Configtest, bool Rehash)
|
||||
"This server uses PAM, \"Password\" in [Global] section will be ignored!");
|
||||
#endif
|
||||
|
||||
if (Conf_MaxPenaltyTime != -1)
|
||||
Config_Error(LOG_WARNING,
|
||||
"Maximum penalty increase ('MaxPenaltyTime') is set to %ld, this is not recommended!",
|
||||
Conf_MaxPenaltyTime);
|
||||
|
||||
#ifdef DEBUG
|
||||
servers = servers_once = 0;
|
||||
for (i = 0; i < MAX_SERVERS; i++) {
|
||||
|
@@ -29,7 +29,7 @@
|
||||
|
||||
/**
|
||||
* Configured IRC operator.
|
||||
* Please note that the name of the IRC operator and his nick have nothing to
|
||||
* Please note the the name of the IRC operaor and his nick have nothing to
|
||||
* do with each other! The IRC operator is only identified by the name and
|
||||
* password configured in this structure.
|
||||
*/
|
||||
@@ -83,12 +83,11 @@ struct SSLOptions {
|
||||
/** Pre-defined channels */
|
||||
struct Conf_Channel {
|
||||
char name[CHANNEL_NAME_LEN]; /**< Name of the channel */
|
||||
char *modes[512]; /**< Initial channel modes to evaluate */
|
||||
char modes[CHANNEL_MODE_LEN]; /**< Initial channel modes */
|
||||
char key[CLIENT_PASS_LEN]; /**< Channel key ("password", mode "k" ) */
|
||||
char topic[COMMAND_LEN]; /**< Initial topic */
|
||||
char keyfile[512]; /**< Path and name of channel key file */
|
||||
unsigned long maxusers; /**< User limit for this channel, mode "l" */
|
||||
unsigned int modes_num; /**< Number of channel modes to evaluate */
|
||||
};
|
||||
|
||||
|
||||
@@ -110,9 +109,6 @@ GLOBAL char Conf_ServerAdmin1[CLIENT_INFO_LEN];
|
||||
GLOBAL char Conf_ServerAdmin2[CLIENT_INFO_LEN];
|
||||
GLOBAL char Conf_ServerAdminMail[CLIENT_INFO_LEN];
|
||||
|
||||
/** Network name (optional, no spaces allowed) */
|
||||
GLOBAL char Conf_Network[CLIENT_INFO_LEN];
|
||||
|
||||
/** Message of the day (MOTD) of this server */
|
||||
GLOBAL array Conf_Motd;
|
||||
|
||||
@@ -195,8 +191,8 @@ GLOBAL bool Conf_Ident;
|
||||
/** Enable "more privacy" mode and "censor" some user-related information */
|
||||
GLOBAL bool Conf_MorePrivacy;
|
||||
|
||||
/** Enable "NOTICE *" messages on connect */
|
||||
GLOBAL bool Conf_NoticeBeforeRegistration;
|
||||
/** Enable NOTICE AUTH messages on connect */
|
||||
GLOBAL bool Conf_NoticeAuth;
|
||||
|
||||
/** Enable all usage of PAM, even when compiled with support for it */
|
||||
GLOBAL bool Conf_PAM;
|
||||
@@ -204,9 +200,6 @@ GLOBAL bool Conf_PAM;
|
||||
/** Don't require all clients to send a password an to be PAM authenticated */
|
||||
GLOBAL bool Conf_PAMIsOptional;
|
||||
|
||||
/** The service name to use for PAM */
|
||||
GLOBAL char Conf_PAMServiceName[MAX_PAM_SERVICE_NAME_LEN];
|
||||
|
||||
/** Disable all CTCP commands except for /me ? */
|
||||
GLOBAL bool Conf_ScrubCTCP;
|
||||
|
||||
@@ -240,9 +233,6 @@ GLOBAL unsigned int Conf_MaxNickLength;
|
||||
/** Maximum number of channels returned to /list */
|
||||
GLOBAL int Conf_MaxListSize;
|
||||
|
||||
/** Maximium seconds to add per "penalty". -1 = unlimited. */
|
||||
GLOBAL time_t Conf_MaxPenaltyTime;
|
||||
|
||||
#ifndef STRICT_RFC
|
||||
|
||||
/** Require "AUTH PING-PONG" on login */
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -20,21 +20,25 @@
|
||||
* Functions to deal with character encodings and conversions
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn.h"
|
||||
#include "log.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "conn-encoding.h"
|
||||
|
||||
#ifdef ICONV
|
||||
|
||||
#include "log.h"
|
||||
#include "conn-encoding.h"
|
||||
|
||||
char Encoding_Buffer[COMMAND_LEN];
|
||||
|
||||
char *Convert_Message PARAMS((iconv_t Handle, char *Message));
|
||||
|
||||
|
||||
/**
|
||||
* Set client character encoding on a connection.
|
||||
*
|
||||
@@ -129,7 +133,7 @@ Convert_Message(iconv_t Handle, char *Message)
|
||||
return Encoding_Buffer;
|
||||
}
|
||||
|
||||
#endif /* ICONV */
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Convert encoding of a message received from a connection.
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -18,17 +18,18 @@
|
||||
* Connection management: Global functions
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include "log.h"
|
||||
|
||||
#ifdef DEBUG
|
||||
# include "log.h"
|
||||
#endif
|
||||
#include "conn.h"
|
||||
#include "client.h"
|
||||
|
||||
#include "conf.h"
|
||||
#include "exp.h"
|
||||
#include "conn-func.h"
|
||||
|
||||
|
||||
/**
|
||||
* Update "idle timestamp", the time of the last visible user action
|
||||
* (e. g. like sending messages, joining or leaving channels).
|
||||
@@ -45,17 +46,13 @@ Conn_UpdateIdle(CONN_ID Idx)
|
||||
/**
|
||||
* Update "ping timestamp", the time of the last outgoing PING request.
|
||||
*
|
||||
* the value 0 signals a newly connected client including servers during the
|
||||
* initial "server burst"; and 1 means that no PONG is pending for a PING.
|
||||
*
|
||||
* @param Idx Connection index.
|
||||
* @param TimeStamp 0, 1, or time stamp.
|
||||
*/
|
||||
GLOBAL void
|
||||
Conn_UpdatePing(CONN_ID Idx, time_t TimeStamp)
|
||||
Conn_UpdatePing(CONN_ID Idx)
|
||||
{
|
||||
assert(Idx > NONE);
|
||||
My_Connections[Idx].lastping = TimeStamp;
|
||||
My_Connections[Idx].lastping = time(NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -76,6 +73,7 @@ Conn_GetIdle( CONN_ID Idx )
|
||||
return time( NULL ) - My_Connections[Idx].lastprivmsg;
|
||||
} /* Conn_GetIdle */
|
||||
|
||||
|
||||
GLOBAL time_t
|
||||
Conn_LastPing( CONN_ID Idx )
|
||||
{
|
||||
@@ -83,6 +81,7 @@ Conn_LastPing( CONN_ID Idx )
|
||||
return My_Connections[Idx].lastping;
|
||||
} /* Conn_LastPing */
|
||||
|
||||
|
||||
/**
|
||||
* Add "penalty time" for a connection.
|
||||
*
|
||||
@@ -90,7 +89,7 @@ Conn_LastPing( CONN_ID Idx )
|
||||
* is read. This function only increases the penalty, it is not possible to
|
||||
* decrease the penalty time.
|
||||
*
|
||||
* @param Idx Connection index.
|
||||
* @param Idex Connection index.
|
||||
* @param Seconds Seconds to add.
|
||||
* @see Conn_ResetPenalty
|
||||
*/
|
||||
@@ -102,14 +101,6 @@ Conn_SetPenalty(CONN_ID Idx, time_t Seconds)
|
||||
assert(Idx > NONE);
|
||||
assert(Seconds >= 0);
|
||||
|
||||
/* Limit new penalty to maximum configured, when less than 10 seconds. *
|
||||
The latter is used to limit brute force attacks, therefore we don't *
|
||||
want to limit that! */
|
||||
if (Conf_MaxPenaltyTime >= 0
|
||||
&& Seconds > Conf_MaxPenaltyTime
|
||||
&& Seconds < 10)
|
||||
Seconds = Conf_MaxPenaltyTime;
|
||||
|
||||
t = time(NULL);
|
||||
if (My_Connections[Idx].delaytime < t)
|
||||
My_Connections[Idx].delaytime = t;
|
||||
@@ -125,6 +116,7 @@ Conn_SetPenalty(CONN_ID Idx, time_t Seconds)
|
||||
#endif
|
||||
} /* Conn_SetPenalty */
|
||||
|
||||
|
||||
GLOBAL void
|
||||
Conn_ClearFlags( void )
|
||||
{
|
||||
@@ -133,6 +125,7 @@ Conn_ClearFlags( void )
|
||||
for( i = 0; i < Pool_Size; i++ ) My_Connections[i].flag = 0;
|
||||
} /* Conn_ClearFlags */
|
||||
|
||||
|
||||
GLOBAL int
|
||||
Conn_Flag( CONN_ID Idx )
|
||||
{
|
||||
@@ -140,6 +133,7 @@ Conn_Flag( CONN_ID Idx )
|
||||
return My_Connections[Idx].flag;
|
||||
} /* Conn_Flag */
|
||||
|
||||
|
||||
GLOBAL void
|
||||
Conn_SetFlag( CONN_ID Idx, int Flag )
|
||||
{
|
||||
@@ -147,11 +141,12 @@ Conn_SetFlag( CONN_ID Idx, int Flag )
|
||||
My_Connections[Idx].flag = Flag;
|
||||
} /* Conn_SetFlag */
|
||||
|
||||
|
||||
GLOBAL CONN_ID
|
||||
Conn_First( void )
|
||||
{
|
||||
CONN_ID i;
|
||||
|
||||
|
||||
for( i = 0; i < Pool_Size; i++ )
|
||||
{
|
||||
if( My_Connections[i].sock != NONE ) return i;
|
||||
@@ -159,13 +154,14 @@ Conn_First( void )
|
||||
return NONE;
|
||||
} /* Conn_First */
|
||||
|
||||
|
||||
GLOBAL CONN_ID
|
||||
Conn_Next( CONN_ID Idx )
|
||||
{
|
||||
CONN_ID i = NONE;
|
||||
|
||||
assert( Idx > NONE );
|
||||
|
||||
|
||||
for( i = Idx + 1; i < Pool_Size; i++ )
|
||||
{
|
||||
if( My_Connections[i].sock != NONE ) return i;
|
||||
@@ -173,6 +169,7 @@ Conn_Next( CONN_ID Idx )
|
||||
return NONE;
|
||||
} /* Conn_Next */
|
||||
|
||||
|
||||
GLOBAL UINT16
|
||||
Conn_Options( CONN_ID Idx )
|
||||
{
|
||||
@@ -180,6 +177,7 @@ Conn_Options( CONN_ID Idx )
|
||||
return My_Connections[Idx].options;
|
||||
} /* Conn_Options */
|
||||
|
||||
|
||||
/**
|
||||
* Set connection option.
|
||||
*/
|
||||
@@ -190,6 +188,7 @@ Conn_SetOption(CONN_ID Idx, int Option)
|
||||
Conn_OPTION_ADD(&My_Connections[Idx], Option);
|
||||
} /* Conn_SetOption */
|
||||
|
||||
|
||||
/**
|
||||
* Get the start time of the connection.
|
||||
* The result is the start time in seconds since 1970-01-01, as reported
|
||||
@@ -225,6 +224,7 @@ Conn_SendQ( CONN_ID Idx )
|
||||
return array_bytes(&My_Connections[Idx].wbuf);
|
||||
} /* Conn_SendQ */
|
||||
|
||||
|
||||
/**
|
||||
* return number of messages sent on this connection so far
|
||||
*/
|
||||
@@ -236,6 +236,7 @@ Conn_SendMsg( CONN_ID Idx )
|
||||
return My_Connections[Idx].msg_out;
|
||||
} /* Conn_SendMsg */
|
||||
|
||||
|
||||
/**
|
||||
* return number of (uncompressed) bytes sent
|
||||
* on this connection so far
|
||||
@@ -247,6 +248,7 @@ Conn_SendBytes( CONN_ID Idx )
|
||||
return My_Connections[Idx].bytes_out;
|
||||
} /* Conn_SendBytes */
|
||||
|
||||
|
||||
/**
|
||||
* return number of bytes pending in read buffer
|
||||
*/
|
||||
@@ -262,6 +264,7 @@ Conn_RecvQ( CONN_ID Idx )
|
||||
return array_bytes(&My_Connections[Idx].rbuf);
|
||||
} /* Conn_RecvQ */
|
||||
|
||||
|
||||
/**
|
||||
* return number of messages received on this connection so far
|
||||
*/
|
||||
@@ -272,6 +275,7 @@ Conn_RecvMsg( CONN_ID Idx )
|
||||
return My_Connections[Idx].msg_in;
|
||||
} /* Conn_RecvMsg */
|
||||
|
||||
|
||||
/**
|
||||
* return number of (uncompressed) bytes received on this
|
||||
* connection so far
|
||||
@@ -293,16 +297,19 @@ Conn_IPA(CONN_ID Idx)
|
||||
return ng_ipaddr_tostr(&My_Connections[Idx].addr);
|
||||
}
|
||||
|
||||
|
||||
GLOBAL void
|
||||
Conn_ResetWCounter( void )
|
||||
{
|
||||
WCounter = 0;
|
||||
} /* Conn_ResetWCounter */
|
||||
|
||||
|
||||
GLOBAL long
|
||||
Conn_WCounter( void )
|
||||
{
|
||||
return WCounter;
|
||||
} /* Conn_WCounter */
|
||||
|
||||
|
||||
/* -eof- */
|
||||
|
@@ -30,7 +30,7 @@
|
||||
|
||||
|
||||
GLOBAL void Conn_UpdateIdle PARAMS((CONN_ID Idx));
|
||||
GLOBAL void Conn_UpdatePing PARAMS((CONN_ID Idx, time_t TimeStamp));
|
||||
GLOBAL void Conn_UpdatePing PARAMS((CONN_ID Idx));
|
||||
|
||||
GLOBAL time_t Conn_GetSignon PARAMS((CONN_ID Idx));
|
||||
GLOBAL time_t Conn_GetIdle PARAMS(( CONN_ID Idx ));
|
||||
|
@@ -1,13 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2005-2008 Florian Westphal (fw@strlen.de).
|
||||
* Copyright (c)2008-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
* Please read the file COPYING, README and AUTHORS for more information.
|
||||
* Copyright (c) 2005-2008 Florian Westphal <fw@strlen.de>
|
||||
*/
|
||||
|
||||
#include "portab.h"
|
||||
@@ -17,6 +10,7 @@
|
||||
* SSL wrapper functions
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include "conf-ssl.h"
|
||||
|
||||
#ifdef SSL_SUPPORT
|
||||
@@ -35,6 +29,7 @@
|
||||
#include "conn-ssl.h"
|
||||
#include "log.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "defines.h"
|
||||
|
||||
extern struct SSLOptions Conf_SSLOptions;
|
||||
@@ -42,7 +37,6 @@ extern struct SSLOptions Conf_SSLOptions;
|
||||
#ifdef HAVE_LIBSSL
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/dh.h>
|
||||
|
||||
static SSL_CTX * ssl_ctx;
|
||||
static DH *dh_params;
|
||||
@@ -62,17 +56,9 @@ static bool ConnSSL_LoadServerKey_openssl PARAMS(( SSL_CTX *c ));
|
||||
|
||||
#define MAX_HASH_SIZE 64 /* from gnutls-int.h */
|
||||
|
||||
typedef struct {
|
||||
int refcnt;
|
||||
gnutls_certificate_credentials_t x509_cred;
|
||||
gnutls_dh_params_t dh_params;
|
||||
} x509_cred_slot;
|
||||
|
||||
static array x509_creds = INIT_ARRAY;
|
||||
static size_t x509_cred_idx;
|
||||
|
||||
static gnutls_certificate_credentials_t x509_cred;
|
||||
static gnutls_dh_params_t dh_params;
|
||||
static gnutls_priority_t priorities_cache = NULL;
|
||||
static gnutls_priority_t priorities_cache;
|
||||
static bool ConnSSL_LoadServerKey_gnutls PARAMS(( void ));
|
||||
#endif
|
||||
|
||||
@@ -274,21 +260,6 @@ void ConnSSL_Free(CONNECTION *c)
|
||||
gnutls_bye(sess, GNUTLS_SHUT_RDWR);
|
||||
gnutls_deinit(sess);
|
||||
}
|
||||
x509_cred_slot *slot = array_get(&x509_creds, sizeof(x509_cred_slot), c->ssl_state.x509_cred_idx);
|
||||
assert(slot != NULL);
|
||||
assert(slot->refcnt > 0);
|
||||
assert(slot->x509_cred != NULL);
|
||||
slot->refcnt--;
|
||||
if ((c->ssl_state.x509_cred_idx != x509_cred_idx) && (slot->refcnt <= 0)) {
|
||||
Log(LOG_INFO, "Discarding X509 certificate credentials from slot %zd.",
|
||||
c->ssl_state.x509_cred_idx);
|
||||
gnutls_certificate_free_keys(slot->x509_cred);
|
||||
gnutls_certificate_free_credentials(slot->x509_cred);
|
||||
slot->x509_cred = NULL;
|
||||
gnutls_dh_params_deinit(slot->dh_params);
|
||||
slot->dh_params = NULL;
|
||||
slot->refcnt = 0;
|
||||
}
|
||||
#endif
|
||||
assert(Conn_OPTION_ISSET(c, CONN_SSL));
|
||||
/* can't just set bitmask to 0 -- there are other, non-ssl related flags, e.g. CONN_ZIP. */
|
||||
@@ -307,12 +278,10 @@ ConnSSL_InitLibrary( void )
|
||||
#ifdef HAVE_LIBSSL
|
||||
SSL_CTX *newctx;
|
||||
|
||||
#if OPENSSL_API_COMPAT < 0x10100000L
|
||||
if (!ssl_ctx) {
|
||||
SSL_library_init();
|
||||
SSL_load_error_strings();
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!RAND_status()) {
|
||||
Log(LOG_ERR, "OpenSSL PRNG not seeded: /dev/urandom missing?");
|
||||
@@ -334,18 +303,8 @@ ConnSSL_InitLibrary( void )
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ConnSSL_LoadServerKey_openssl(newctx)) {
|
||||
/* Failed to read new key but an old ssl context
|
||||
* already exists -> reuse old context */
|
||||
if (ssl_ctx) {
|
||||
SSL_CTX_free(newctx);
|
||||
Log(LOG_WARNING,
|
||||
"Re-Initializing of SSL failed, using old keys!");
|
||||
return true;
|
||||
}
|
||||
/* No preexisting old context -> error. */
|
||||
if (!ConnSSL_LoadServerKey_openssl(newctx))
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (SSL_CTX_set_cipher_list(newctx, Conf_SSLOptions.CipherList) == 0) {
|
||||
Log(LOG_ERR, "Failed to apply OpenSSL cipher list \"%s\"!",
|
||||
@@ -353,14 +312,13 @@ ConnSSL_InitLibrary( void )
|
||||
goto out;
|
||||
}
|
||||
|
||||
SSL_CTX_set_session_id_context(newctx, (unsigned char *)"ngircd", 6);
|
||||
SSL_CTX_set_options(newctx, SSL_OP_SINGLE_DH_USE|SSL_OP_NO_SSLv2);
|
||||
SSL_CTX_set_mode(newctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
|
||||
SSL_CTX_set_verify(newctx, SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE,
|
||||
Verify_openssl);
|
||||
SSL_CTX_free(ssl_ctx);
|
||||
ssl_ctx = newctx;
|
||||
Log(LOG_INFO, "%s initialized.", OpenSSL_version(OPENSSL_VERSION));
|
||||
Log(LOG_INFO, "%s initialized.", SSLeay_version(SSLEAY_VERSION));
|
||||
return true;
|
||||
out:
|
||||
SSL_CTX_free(newctx);
|
||||
@@ -371,21 +329,22 @@ out:
|
||||
int err;
|
||||
static bool initialized;
|
||||
|
||||
if (!initialized) {
|
||||
err = gnutls_global_init();
|
||||
if (err) {
|
||||
Log(LOG_ERR, "Failed to initialize GnuTLS: %s",
|
||||
gnutls_strerror(err));
|
||||
goto out;
|
||||
}
|
||||
if (initialized) {
|
||||
/* TODO: cannot reload gnutls keys: can't simply free x509
|
||||
* context -- it may still be in use */
|
||||
return false;
|
||||
}
|
||||
|
||||
err = gnutls_global_init();
|
||||
if (err) {
|
||||
Log(LOG_ERR, "Failed to initialize GnuTLS: %s",
|
||||
gnutls_strerror(err));
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!ConnSSL_LoadServerKey_gnutls())
|
||||
goto out;
|
||||
|
||||
if (priorities_cache != NULL) {
|
||||
gnutls_priority_deinit(priorities_cache);
|
||||
}
|
||||
if (gnutls_priority_init(&priorities_cache, Conf_SSLOptions.CipherList,
|
||||
NULL) != GNUTLS_E_SUCCESS) {
|
||||
Log(LOG_ERR,
|
||||
@@ -411,9 +370,6 @@ ConnSSL_LoadServerKey_gnutls(void)
|
||||
int err;
|
||||
const char *cert_file;
|
||||
|
||||
x509_cred_slot *slot = NULL;
|
||||
gnutls_certificate_credentials_t x509_cred;
|
||||
|
||||
err = gnutls_certificate_allocate_credentials(&x509_cred);
|
||||
if (err < 0) {
|
||||
Log(LOG_ERR, "Failed to allocate certificate credentials: %s",
|
||||
@@ -444,43 +400,6 @@ ConnSSL_LoadServerKey_gnutls(void)
|
||||
gnutls_strerror(err));
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Free currently active x509 context (if any) unless it is still in use */
|
||||
slot = array_get(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
|
||||
if ((slot != NULL) && (slot->refcnt <= 0) && (slot->x509_cred != NULL)) {
|
||||
Log(LOG_INFO, "Discarding X509 certificate credentials from slot %zd.", x509_cred_idx);
|
||||
gnutls_certificate_free_keys(slot->x509_cred);
|
||||
gnutls_certificate_free_credentials(slot->x509_cred);
|
||||
slot->x509_cred = NULL;
|
||||
gnutls_dh_params_deinit(slot->dh_params);
|
||||
slot->dh_params = NULL;
|
||||
slot->refcnt = 0;
|
||||
}
|
||||
|
||||
/* Find free slot */
|
||||
x509_cred_idx = (size_t) -1;
|
||||
size_t i;
|
||||
for (slot = array_start(&x509_creds), i = 0;
|
||||
i < array_length(&x509_creds, sizeof(x509_cred_slot));
|
||||
slot++, i++) {
|
||||
if (slot->refcnt <= 0) {
|
||||
x509_cred_idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* ... allocate new slot otherwise. */
|
||||
if (x509_cred_idx == (size_t) -1) {
|
||||
x509_cred_idx = array_length(&x509_creds, sizeof(x509_cred_slot));
|
||||
slot = array_alloc(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
|
||||
if (slot == NULL) {
|
||||
Log(LOG_ERR, "Failed to allocate new slot for certificate credentials");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Log(LOG_INFO, "Storing new X509 certificate credentials in slot %zd.", x509_cred_idx);
|
||||
slot->x509_cred = x509_cred;
|
||||
slot->refcnt = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
@@ -582,13 +501,8 @@ ConnSSL_Init_SSL(CONNECTION *c)
|
||||
(gnutls_transport_ptr_t) (long) c->sock);
|
||||
gnutls_certificate_server_set_request(c->ssl_state.gnutls_session,
|
||||
GNUTLS_CERT_REQUEST);
|
||||
|
||||
Log(LOG_INFO, "Using X509 credentials from slot %zd", x509_cred_idx);
|
||||
c->ssl_state.x509_cred_idx = x509_cred_idx;
|
||||
x509_cred_slot *slot = array_get(&x509_creds, sizeof(x509_cred_slot), x509_cred_idx);
|
||||
slot->refcnt++;
|
||||
ret = gnutls_credentials_set(c->ssl_state.gnutls_session,
|
||||
GNUTLS_CRD_CERTIFICATE, slot->x509_cred);
|
||||
GNUTLS_CRD_CERTIFICATE, x509_cred);
|
||||
if (ret != 0) {
|
||||
Log(LOG_ERR, "Failed to set SSL credentials: %s",
|
||||
gnutls_strerror(ret));
|
||||
@@ -825,7 +739,7 @@ ConnSSL_InitCertFp( CONNECTION *c )
|
||||
gnutls_x509_crt_deinit(cert);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
if (gnutls_x509_crt_import(cert, &cert_list[0],
|
||||
GNUTLS_X509_FMT_DER) != GNUTLS_E_SUCCESS) {
|
||||
gnutls_x509_crt_deinit(cert);
|
||||
@@ -992,3 +906,5 @@ ConnSSL_InitLibrary(void)
|
||||
|
||||
#endif /* SSL_SUPPORT */
|
||||
/* -eof- */
|
||||
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2007 Alexander Barton (alex@barton.de)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -9,8 +9,6 @@
|
||||
* Please read the file COPYING, README and AUTHORS for more information.
|
||||
*/
|
||||
|
||||
#define CONN_MODULE
|
||||
|
||||
#include "portab.h"
|
||||
|
||||
/**
|
||||
@@ -18,11 +16,14 @@
|
||||
* Connection compression using ZLIB
|
||||
*/
|
||||
|
||||
/* Additionan debug messages related to ZIP compression: 0=off / 1=on */
|
||||
#define DEBUG_ZIP 0
|
||||
#define CONN_MODULE
|
||||
|
||||
#ifdef ZLIB
|
||||
|
||||
/* enable more zlib related debug messages: */
|
||||
/* #define DEBUG_ZLIB */
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <zlib.h>
|
||||
@@ -30,8 +31,9 @@
|
||||
#include "conn.h"
|
||||
#include "conn-func.h"
|
||||
#include "log.h"
|
||||
#include "array.h"
|
||||
|
||||
#include "array.h"
|
||||
#include "exp.h"
|
||||
#include "conn-zip.h"
|
||||
|
||||
|
||||
@@ -141,7 +143,7 @@ Zip_Flush( CONN_ID Idx )
|
||||
out->next_out = zipbuf;
|
||||
out->avail_out = (uInt)sizeof zipbuf;
|
||||
|
||||
#if DEBUG_ZIP
|
||||
#ifdef DEBUG_ZIP
|
||||
Log(LOG_DEBUG, "out->avail_in %d, out->avail_out %d",
|
||||
out->avail_in, out->avail_out);
|
||||
#endif
|
||||
@@ -164,7 +166,7 @@ Zip_Flush( CONN_ID Idx )
|
||||
assert(out->avail_out <= WRITEBUFFER_SLINK_LEN);
|
||||
|
||||
zipbuf_used = WRITEBUFFER_SLINK_LEN - out->avail_out;
|
||||
#if DEBUG_ZIP
|
||||
#ifdef DEBUG_ZIP
|
||||
Log(LOG_DEBUG, "zipbuf_used: %d", zipbuf_used);
|
||||
#endif
|
||||
if (!array_catb(&My_Connections[Idx].wbuf,
|
||||
@@ -175,7 +177,7 @@ Zip_Flush( CONN_ID Idx )
|
||||
}
|
||||
|
||||
My_Connections[Idx].bytes_out += zipbuf_used;
|
||||
My_Connections[Idx].zip.bytes_out += array_bytes(&My_Connections[Idx].zip.wbuf);
|
||||
My_Connections[Idx].zip.bytes_out += array_bytes(&My_Connections[Idx].zip.wbuf);
|
||||
array_trunc(&My_Connections[Idx].zip.wbuf);
|
||||
|
||||
return true;
|
||||
@@ -198,7 +200,7 @@ Unzip_Buffer( CONN_ID Idx )
|
||||
int unzipbuf_used = 0;
|
||||
unsigned int z_rdatalen;
|
||||
unsigned int in_len;
|
||||
|
||||
|
||||
z_stream *in;
|
||||
|
||||
assert( Idx > NONE );
|
||||
@@ -216,7 +218,7 @@ Unzip_Buffer( CONN_ID Idx )
|
||||
in->next_out = unzipbuf;
|
||||
in->avail_out = (uInt)sizeof unzipbuf;
|
||||
|
||||
#if DEBUG_ZIP
|
||||
#ifdef DEBUG_ZIP
|
||||
Log(LOG_DEBUG, "in->avail_in %d, in->avail_out %d",
|
||||
in->avail_in, in->avail_out);
|
||||
#endif
|
||||
@@ -231,7 +233,7 @@ Unzip_Buffer( CONN_ID Idx )
|
||||
assert(z_rdatalen >= in->avail_in);
|
||||
in_len = z_rdatalen - in->avail_in;
|
||||
unzipbuf_used = READBUFFER_LEN - in->avail_out;
|
||||
#if DEBUG_ZIP
|
||||
#ifdef DEBUG_ZIP
|
||||
Log(LOG_DEBUG, "unzipbuf_used: %d - %d = %d", READBUFFER_LEN,
|
||||
in->avail_out, unzipbuf_used);
|
||||
#endif
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -105,17 +105,9 @@ typedef struct _Connection
|
||||
#endif
|
||||
} CONNECTION;
|
||||
|
||||
|
||||
#ifdef CONN_MODULE_GLOBAL_INIT
|
||||
CONNECTION *My_Connections;
|
||||
CONN_ID Pool_Size;
|
||||
long WCounter;
|
||||
#else
|
||||
extern CONNECTION *My_Connections;
|
||||
extern CONN_ID Pool_Size;
|
||||
extern long WCounter;
|
||||
#endif
|
||||
|
||||
GLOBAL CONNECTION *My_Connections;
|
||||
GLOBAL CONN_ID Pool_Size;
|
||||
GLOBAL long WCounter;
|
||||
|
||||
#define CONNECTION2ID(x) (long)(x - My_Connections)
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -53,7 +53,7 @@
|
||||
/* Size of structures */
|
||||
|
||||
/** Max. count of configurable servers. */
|
||||
#define MAX_SERVERS 64
|
||||
#define MAX_SERVERS 16
|
||||
|
||||
/** Max. number of WHOWAS list items that can be stored. */
|
||||
#define MAX_WHOWAS 64
|
||||
@@ -61,9 +61,6 @@
|
||||
/** Size of default connection pool. */
|
||||
#define CONNECTION_POOL 100
|
||||
|
||||
/** Size of buffer for PAM service name. */
|
||||
#define MAX_PAM_SERVICE_NAME_LEN 64
|
||||
|
||||
|
||||
/* Hard-coded (default) options */
|
||||
|
||||
@@ -112,10 +109,6 @@
|
||||
#else
|
||||
# define CLIENT_USER_LEN 10
|
||||
#endif
|
||||
/** Max. length of user names saved for authentication (used by PAM) */
|
||||
#ifdef PAM
|
||||
# define CLIENT_AUTHUSER_LEN 64
|
||||
#endif
|
||||
|
||||
/** Max. length of "real names" (including NULL). */
|
||||
#define CLIENT_NAME_LEN 32
|
||||
@@ -130,7 +123,7 @@
|
||||
#define CLIENT_MODE_LEN 21
|
||||
|
||||
/** Max. length of server info texts (including NULL). */
|
||||
#define CLIENT_INFO_LEN 128
|
||||
#define CLIENT_INFO_LEN 64
|
||||
|
||||
/** Max. length of away messages (including NULL). */
|
||||
#define CLIENT_AWAY_LEN 128
|
||||
@@ -180,7 +173,7 @@
|
||||
#endif
|
||||
|
||||
/** Supported user modes. */
|
||||
#define USERMODES "abBcCFiIoqrRswx"
|
||||
#define USERMODES "abBcCioqrRswx"
|
||||
|
||||
/** Supported channel modes. */
|
||||
#define CHANMODES "abehiIklmMnoOPqQrRstvVz"
|
||||
@@ -209,9 +202,6 @@
|
||||
/** Max. number of channel modes with arguments per MODE command. */
|
||||
#define MAX_HNDL_MODES_ARG 5
|
||||
|
||||
/** Max. number of targets per PRIVMSG/NOTICE/... command. */
|
||||
#define MAX_HNDL_TARGETS 25
|
||||
|
||||
/** Max. number of WHO replies. */
|
||||
#define MAX_RPL_WHO 25
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,12 +16,14 @@
|
||||
* Hash calculation
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "tool.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "hash.h"
|
||||
|
||||
static UINT32 jenkins_hash PARAMS((UINT8 *k, UINT32 length, UINT32 initval));
|
||||
|
@@ -1,13 +1,11 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2005-2006 Florian Westphal (westphal@foo.fh-furtwangen.de)
|
||||
* Copyright (c)2006-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
* Please read the file COPYING, README and AUTHORS for more information.
|
||||
*
|
||||
* Copyright (c) 2005 Florian Westphal (westphal@foo.fh-furtwangen.de)
|
||||
*/
|
||||
|
||||
#include "portab.h"
|
||||
@@ -17,20 +15,21 @@
|
||||
* I/O abstraction interface.
|
||||
*/
|
||||
|
||||
/* Extra debug messages in event add/delete/callback code: 0=off / 1=on */
|
||||
#define DEBUG_IO 0
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "array.h"
|
||||
#include "io.h"
|
||||
#include "log.h"
|
||||
|
||||
/* Enables extra debug messages in event add/delete/callback code. */
|
||||
/* #define DEBUG_IO */
|
||||
|
||||
typedef struct {
|
||||
#ifdef PROTOTYPES
|
||||
void (*callback)(int, short);
|
||||
@@ -120,7 +119,6 @@ static bool io_event_change_devpoll(int fd, short what);
|
||||
#endif
|
||||
|
||||
#ifdef IO_USE_SELECT
|
||||
#include <sys/time.h>
|
||||
#include "defines.h" /* for conn.h */
|
||||
#include "proc.h" /* for PROC_STAT (needed by conf.h) */
|
||||
#include "conn.h" /* for CONN_ID (needed by conf.h) */
|
||||
@@ -144,7 +142,7 @@ static array io_events;
|
||||
|
||||
static void io_docallback PARAMS((int fd, short what));
|
||||
|
||||
#if DEBUG_IO
|
||||
#ifdef DEBUG_IO
|
||||
static void
|
||||
io_debug(const char *s, int fd, int what)
|
||||
{
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,19 +16,22 @@
|
||||
* Handler for IRC capability ("CAP") commands
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn.h"
|
||||
#include "channel.h"
|
||||
#include "client-cap.h"
|
||||
#include "irc-macros.h"
|
||||
#include "irc-write.h"
|
||||
#include "log.h"
|
||||
#include "login.h"
|
||||
#include "messages.h"
|
||||
#include "parse.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-cap.h"
|
||||
|
||||
/* Local functions */
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,11 +16,13 @@
|
||||
* IRC channel commands
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn.h"
|
||||
#include "channel.h"
|
||||
#include "conn-func.h"
|
||||
@@ -35,6 +37,7 @@
|
||||
#include "irc-write.h"
|
||||
#include "conf.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-channel.h"
|
||||
|
||||
/**
|
||||
@@ -320,9 +323,11 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
|
||||
channame = strtok_r(channame, ",", &lastchan);
|
||||
|
||||
/* Make sure that "channame" is not the empty string ("JOIN :") */
|
||||
if (!channame)
|
||||
if (!channame) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
while (channame) {
|
||||
flags = NULL;
|
||||
@@ -442,13 +447,15 @@ IRC_PART(CLIENT * Client, REQUEST * Req)
|
||||
chan = strtok(Req->argv[0], ",");
|
||||
|
||||
/* Make sure that "chan" is not the empty string ("PART :") */
|
||||
if (!chan)
|
||||
if (!chan) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
while (chan) {
|
||||
Channel_Part(target, Client, chan,
|
||||
Req->argc > 1 ? Req->argv[1] : "");
|
||||
Req->argc > 1 ? Req->argv[1] : Client_ID(target));
|
||||
chan = strtok(NULL, ",");
|
||||
}
|
||||
|
||||
@@ -477,6 +484,8 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
|
||||
chan = Channel_Search(Req->argv[0]);
|
||||
@@ -497,7 +506,7 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
|
||||
topic_power = true;
|
||||
|
||||
if (Req->argc == 1) {
|
||||
/* Request current topic */
|
||||
/* Request actual topic */
|
||||
topic = Channel_Topic(chan);
|
||||
if (*topic) {
|
||||
r = IRC_WriteStrClient(from, RPL_TOPIC_MSG,
|
||||
@@ -532,6 +541,8 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
|
||||
Channel_Name(chan));
|
||||
}
|
||||
|
||||
/* Set new topic */
|
||||
Channel_SetTopic(chan, from, Req->argv[1]);
|
||||
LogDebug("%s \"%s\" set topic on \"%s\": %s",
|
||||
Client_TypeText(from), Client_Mask(from), Channel_Name(chan),
|
||||
Req->argv[1][0] ? Req->argv[1] : "<none>");
|
||||
@@ -543,17 +554,9 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
|
||||
if (!Channel_IsLocal(chan))
|
||||
IRC_WriteStrServersPrefix(Client, from, "TOPIC %s :%s",
|
||||
Req->argv[0], Req->argv[1]);
|
||||
IRC_WriteStrChannelPrefix(Client, chan, from, false, "TOPIC %s :%s",
|
||||
Req->argv[0], Req->argv[1]);
|
||||
|
||||
/* Infrom local clients, but only when the topic really changed. */
|
||||
if (strcmp(Req->argv[1], Channel_Topic(chan)) != 0)
|
||||
IRC_WriteStrChannelPrefix(Client, chan, from, false,
|
||||
"TOPIC %s :%s", Req->argv[0],
|
||||
Req->argv[1]);
|
||||
|
||||
/* Update topic, setter, and timestamp. */
|
||||
Channel_SetTopic(chan, from, Req->argv[1]);
|
||||
|
||||
/* Send confirmation when the local client is a user. */
|
||||
if (Client_Type(Client) == CLIENT_USER)
|
||||
return IRC_WriteStrClientPrefix(Client, Client, "TOPIC %s :%s",
|
||||
Req->argv[0], Req->argv[1]);
|
||||
@@ -579,6 +582,8 @@ IRC_LIST( CLIENT *Client, REQUEST *Req )
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 2);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
|
||||
if (Req->argc > 0)
|
||||
@@ -603,10 +608,6 @@ IRC_LIST( CLIENT *Client, REQUEST *Req )
|
||||
}
|
||||
}
|
||||
|
||||
/* Send list head */
|
||||
if (!IRC_WriteStrClient(from, RPL_LISTSTART_MSG, Client_ID(from)))
|
||||
return DISCONNECTED;
|
||||
|
||||
while (pattern) {
|
||||
/* Loop through all the channels */
|
||||
if (Req->argc > 0)
|
||||
@@ -618,7 +619,9 @@ IRC_LIST( CLIENT *Client, REQUEST *Req )
|
||||
/* Gotcha! */
|
||||
if (!Channel_HasMode(chan, 's')
|
||||
|| Channel_IsMemberOf(chan, from)
|
||||
|| Client_HasMode(from, 'o'))
|
||||
|| (!Conf_MorePrivacy
|
||||
&& Client_HasMode(Client, 'o')
|
||||
&& Client_Conn(Client) > NONE))
|
||||
{
|
||||
if ((Conf_MaxListSize > 0)
|
||||
&& IRC_CheckListTooBig(from, count,
|
||||
@@ -666,9 +669,11 @@ IRC_CHANINFO( CLIENT *Client, REQUEST *Req )
|
||||
assert( Req != NULL );
|
||||
|
||||
/* Bad number of parameters? */
|
||||
if (Req->argc < 2 || Req->argc == 4 || Req->argc > 5)
|
||||
if (Req->argc < 2 || Req->argc == 4 || Req->argc > 5) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
/* Compatibility kludge */
|
||||
if (Req->argc == 5)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,8 +16,7 @@
|
||||
* IRC encoding commands
|
||||
*/
|
||||
|
||||
#ifdef ICONV
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -29,8 +28,11 @@
|
||||
#include "parse.h"
|
||||
#include "tool.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-encoding.h"
|
||||
|
||||
#ifdef ICONV
|
||||
|
||||
/**
|
||||
* Handler for the IRC+ "CHARCONV" command.
|
||||
*
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,12 +16,13 @@
|
||||
* IRC info commands
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "ngircd.h"
|
||||
#include "conn-func.h"
|
||||
@@ -29,9 +30,12 @@
|
||||
#include "channel.h"
|
||||
#include "class.h"
|
||||
#include "conf.h"
|
||||
#include "defines.h"
|
||||
#include "lists.h"
|
||||
#include "log.h"
|
||||
#include "messages.h"
|
||||
#include "match.h"
|
||||
#include "tool.h"
|
||||
#include "parse.h"
|
||||
#include "irc.h"
|
||||
#include "irc-macros.h"
|
||||
@@ -39,6 +43,7 @@
|
||||
#include "client-cap.h"
|
||||
#include "op.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-info.h"
|
||||
|
||||
/* Local functions */
|
||||
@@ -147,6 +152,8 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
|
||||
assert( Client != NULL );
|
||||
assert( Chan != NULL );
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
is_member = Channel_IsMemberOf(Chan, Client);
|
||||
|
||||
/* Secret channel? */
|
||||
@@ -162,7 +169,7 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
|
||||
if (OnlyOps && !is_ircop)
|
||||
continue;
|
||||
|
||||
is_visible = !Client_HasMode(c, 'i');
|
||||
is_visible = Client_HasMode(c, 'i');
|
||||
if (is_member || is_visible) {
|
||||
memset(flags, 0, sizeof(flags));
|
||||
|
||||
@@ -184,7 +191,7 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
|
||||
}
|
||||
}
|
||||
|
||||
/* If there are a lot of clients, increase the penalty a bit */
|
||||
/* If there are a lot of clients, augment penalty a bit */
|
||||
if (count > MAX_RPL_WHO)
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
@@ -313,50 +320,48 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
|
||||
Client_Info(Client_Introducer(c))))
|
||||
return DISCONNECTED;
|
||||
|
||||
/* Channels, show only if client has no +I or if from is oper */
|
||||
if(!(Client_HasMode(c, 'I')) || Client_HasMode(from, 'o')) {
|
||||
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
|
||||
Client_ID(from), Client_ID(c));
|
||||
cl2chan = Channel_FirstChannelOf(c);
|
||||
while (cl2chan) {
|
||||
chan = Channel_GetChannel(cl2chan);
|
||||
assert(chan != NULL);
|
||||
/* Channels */
|
||||
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
|
||||
Client_ID(from), Client_ID(c));
|
||||
cl2chan = Channel_FirstChannelOf(c);
|
||||
while (cl2chan) {
|
||||
chan = Channel_GetChannel(cl2chan);
|
||||
assert(chan != NULL);
|
||||
|
||||
/* next */
|
||||
cl2chan = Channel_NextChannelOf(c, cl2chan);
|
||||
/* next */
|
||||
cl2chan = Channel_NextChannelOf(c, cl2chan);
|
||||
|
||||
/* Secret channel? */
|
||||
if (Channel_HasMode(chan, 's')
|
||||
&& !Channel_IsMemberOf(chan, Client))
|
||||
continue;
|
||||
/* Secret channel? */
|
||||
if (Channel_HasMode(chan, 's')
|
||||
&& !Channel_IsMemberOf(chan, Client))
|
||||
continue;
|
||||
|
||||
/* Local channel and request is not from a user? */
|
||||
if (Client_Type(Client) == CLIENT_SERVER
|
||||
&& Channel_IsLocal(chan))
|
||||
continue;
|
||||
/* Local channel and request is not from a user? */
|
||||
if (Client_Type(Client) == CLIENT_SERVER
|
||||
&& Channel_IsLocal(chan))
|
||||
continue;
|
||||
|
||||
/* Concatenate channel names */
|
||||
if (str[strlen(str) - 1] != ':')
|
||||
strlcat(str, " ", sizeof(str));
|
||||
/* Concatenate channel names */
|
||||
if (str[strlen(str) - 1] != ':')
|
||||
strlcat(str, " ", sizeof(str));
|
||||
|
||||
who_flags_qualifier(Client, Channel_UserModes(chan, c),
|
||||
str, sizeof(str));
|
||||
strlcat(str, Channel_Name(chan), sizeof(str));
|
||||
who_flags_qualifier(Client, Channel_UserModes(chan, c),
|
||||
str, sizeof(str));
|
||||
strlcat(str, Channel_Name(chan), sizeof(str));
|
||||
|
||||
if (strlen(str) > (COMMAND_LEN - CHANNEL_NAME_LEN - 4)) {
|
||||
/* Line becomes too long: send it! */
|
||||
if (!IRC_WriteStrClient(Client, "%s", str))
|
||||
return DISCONNECTED;
|
||||
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
|
||||
Client_ID(from), Client_ID(c));
|
||||
}
|
||||
}
|
||||
if(str[strlen(str) - 1] != ':') {
|
||||
/* There is data left to send: */
|
||||
if (strlen(str) > (COMMAND_LEN - CHANNEL_NAME_LEN - 4)) {
|
||||
/* Line becomes too long: send it! */
|
||||
if (!IRC_WriteStrClient(Client, "%s", str))
|
||||
return DISCONNECTED;
|
||||
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
|
||||
Client_ID(from), Client_ID(c));
|
||||
}
|
||||
}
|
||||
if(str[strlen(str) - 1] != ':') {
|
||||
/* There is data left to send: */
|
||||
if (!IRC_WriteStrClient(Client, "%s", str))
|
||||
return DISCONNECTED;
|
||||
}
|
||||
|
||||
/* IRC-Services? */
|
||||
if (Client_Type(c) == CLIENT_SERVICE &&
|
||||
@@ -398,16 +403,9 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
|
||||
Client_ID(from), Client_ID(c)))
|
||||
return DISCONNECTED;
|
||||
|
||||
/* Account name metadata? */
|
||||
if (Client_AccountName(c) &&
|
||||
!IRC_WriteStrClient(from, RPL_WHOISLOGGEDIN_MSG,
|
||||
Client_ID(from), Client_ID(c),
|
||||
Client_AccountName(c)))
|
||||
return DISCONNECTED;
|
||||
|
||||
/* Local client and requester is the user itself or an IRC Op? */
|
||||
if (Client_Conn(c) > NONE &&
|
||||
(from == c || Client_HasMode(from, 'o'))) {
|
||||
(from == c || (!Conf_MorePrivacy && Client_HasMode(from, 'o')))) {
|
||||
/* Client hostname */
|
||||
if (!IRC_WriteStrClient(from, RPL_WHOISHOST_MSG,
|
||||
Client_ID(from), Client_ID(c),
|
||||
@@ -502,6 +500,8 @@ IRC_ADMIN(CLIENT *Client, REQUEST *Req )
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(prefix, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, prefix)
|
||||
|
||||
@@ -544,6 +544,8 @@ IRC_INFO(CLIENT * Client, REQUEST * Req)
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 2);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(prefix, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, prefix)
|
||||
|
||||
@@ -558,15 +560,7 @@ IRC_INFO(CLIENT * Client, REQUEST * Req)
|
||||
NGIRCd_Version))
|
||||
return DISCONNECTED;
|
||||
|
||||
#if defined(BIRTHDATE)
|
||||
char t_str[60];
|
||||
time_t t = BIRTHDATE;
|
||||
(void)strftime(t_str, sizeof(t_str), "%a %b %d %Y at %H:%M:%S (%Z)",
|
||||
localtime(&t));
|
||||
snprintf(msg, sizeof(msg), "Birth Date: %s", t_str);
|
||||
if (!IRC_WriteStrClient(Client, RPL_INFO_MSG, Client_ID(prefix), msg))
|
||||
return DISCONNECTED;
|
||||
#elif defined(__DATE__) && defined(__TIME__)
|
||||
#if defined(__DATE__) && defined(__TIME__)
|
||||
snprintf(msg, sizeof(msg), "Birth Date: %s at %s", __DATE__, __TIME__);
|
||||
if (!IRC_WriteStrClient(Client, RPL_INFO_MSG, Client_ID(prefix), msg))
|
||||
return DISCONNECTED;
|
||||
@@ -637,6 +631,8 @@ IRC_LINKS(CLIENT *Client, REQUEST *Req)
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
|
||||
/* Get pointer to server mask or "*", if none given */
|
||||
@@ -689,6 +685,8 @@ IRC_LUSERS( CLIENT *Client, REQUEST *Req )
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 1, from)
|
||||
|
||||
@@ -718,6 +716,8 @@ IRC_SERVLIST(CLIENT *Client, REQUEST *Req)
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
if (Req->argc < 2 || strcmp(Req->argv[1], "0") == 0) {
|
||||
for (c = Client_First(); c!= NULL; c = Client_Next(c)) {
|
||||
if (Client_Type(c) != CLIENT_SERVICE)
|
||||
@@ -753,6 +753,8 @@ IRC_MOTD( CLIENT *Client, REQUEST *Req )
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
IRC_SetPenalty(Client, 3);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, from)
|
||||
|
||||
@@ -783,6 +785,8 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req )
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 1, from)
|
||||
|
||||
@@ -867,6 +871,8 @@ IRC_STATS( CLIENT *Client, REQUEST *Req )
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 2);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 1, from)
|
||||
|
||||
@@ -894,16 +900,16 @@ IRC_STATS( CLIENT *Client, REQUEST *Req )
|
||||
list = Class_GetList(CLASS_GLINE);
|
||||
else
|
||||
list = Class_GetList(CLASS_KLINE);
|
||||
list_item = Lists_GetFirst(list);
|
||||
while (list_item) {
|
||||
if (!IRC_WriteStrClient(from, RPL_STATSXLINE_MSG,
|
||||
list_item = Lists_GetFirst(list);
|
||||
while (list_item) {
|
||||
if (!IRC_WriteStrClient(from, RPL_STATSXLINE_MSG,
|
||||
Client_ID(from), query,
|
||||
Lists_GetMask(list_item),
|
||||
Lists_GetValidity(list_item),
|
||||
Lists_GetReason(list_item)))
|
||||
return DISCONNECTED;
|
||||
list_item = Lists_GetNext(list_item);
|
||||
}
|
||||
return DISCONNECTED;
|
||||
list_item = Lists_GetNext(list_item);
|
||||
}
|
||||
break;
|
||||
case 'L': /* Link status (servers and user links) */
|
||||
if (!Op_Check(from, Req))
|
||||
@@ -1007,6 +1013,8 @@ IRC_TIME( CLIENT *Client, REQUEST *Req )
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, from)
|
||||
|
||||
@@ -1040,6 +1048,8 @@ IRC_USERHOST(CLIENT *Client, REQUEST *Req)
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
if (Req->argc > 5)
|
||||
max = 5;
|
||||
else
|
||||
@@ -1100,6 +1110,8 @@ IRC_VERSION( CLIENT *Client, REQUEST *Req )
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(prefix, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, prefix)
|
||||
|
||||
@@ -1111,19 +1123,10 @@ IRC_VERSION( CLIENT *Client, REQUEST *Req )
|
||||
}
|
||||
|
||||
/* send version information */
|
||||
if (!IRC_WriteStrClient(Client, RPL_VERSION_MSG, Client_ID(prefix),
|
||||
PACKAGE_NAME, PACKAGE_VERSION,
|
||||
NGIRCd_DebugLevel, Conf_ServerName,
|
||||
NGIRCd_VersionAddition))
|
||||
return DISCONNECTED;
|
||||
|
||||
#ifndef STRICT_RFC
|
||||
/* send RPL_ISUPPORT(005) numerics */
|
||||
if (!IRC_Send_ISUPPORT(prefix))
|
||||
return DISCONNECTED;
|
||||
#endif
|
||||
|
||||
return CONNECTED;
|
||||
return IRC_WriteStrClient(Client, RPL_VERSION_MSG, Client_ID(prefix),
|
||||
PACKAGE_NAME, PACKAGE_VERSION,
|
||||
NGIRCd_DebugLevel, Conf_ServerName,
|
||||
NGIRCd_VersionAddition);
|
||||
} /* IRC_VERSION */
|
||||
|
||||
/**
|
||||
@@ -1142,12 +1145,15 @@ IRC_WHO(CLIENT *Client, REQUEST *Req)
|
||||
assert (Client != NULL);
|
||||
assert (Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
only_ops = false;
|
||||
if (Req->argc == 2) {
|
||||
if (strcmp(Req->argv[1], "o") == 0)
|
||||
only_ops = true;
|
||||
#ifdef STRICT_RFC
|
||||
else {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client,
|
||||
ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client),
|
||||
@@ -1171,6 +1177,7 @@ IRC_WHO(CLIENT *Client, REQUEST *Req)
|
||||
}
|
||||
|
||||
/* No channel or (valid) mask given */
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WHO_Mask(Client, NULL, only_ops);
|
||||
} /* IRC_WHO */
|
||||
|
||||
@@ -1193,6 +1200,8 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
|
||||
/* Wrong number of parameters? */
|
||||
if (Req->argc < 1)
|
||||
return IRC_WriteErrClient(Client, ERR_NONICKNAMEGIVEN_MSG,
|
||||
@@ -1254,7 +1263,6 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
|
||||
continue;
|
||||
}
|
||||
got_wildcard = true;
|
||||
/* Increase penalty for wildcard queries */
|
||||
IRC_SetPenalty(Client, 3);
|
||||
|
||||
for (c = Client_First(); c; c = Client_Next(c)) {
|
||||
@@ -1560,10 +1568,6 @@ IRC_Send_NAMES(CLIENT * Client, CHANNEL * Chan)
|
||||
GLOBAL bool
|
||||
IRC_Send_ISUPPORT(CLIENT * Client)
|
||||
{
|
||||
if (Conf_Network[0] && !IRC_WriteStrClient(Client, RPL_ISUPPORTNET_MSG,
|
||||
Client_ID(Client),
|
||||
Conf_Network))
|
||||
return DISCONNECTED;
|
||||
if (!IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client),
|
||||
CHANTYPES, CHANTYPES, Conf_MaxJoins))
|
||||
return DISCONNECTED;
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,14 +16,15 @@
|
||||
* Login and logout
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "conn-func.h"
|
||||
#include "class.h"
|
||||
#include "conf.h"
|
||||
#include "channel.h"
|
||||
#include "log.h"
|
||||
@@ -31,9 +32,11 @@
|
||||
#include "messages.h"
|
||||
#include "parse.h"
|
||||
#include "irc.h"
|
||||
#include "irc-info.h"
|
||||
#include "irc-macros.h"
|
||||
#include "irc-write.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-login.h"
|
||||
|
||||
static void Change_Nick PARAMS((CLIENT * Origin, CLIENT * Target, char *NewNick,
|
||||
@@ -77,6 +80,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
|
||||
} else if (Client_Type(Client) == CLIENT_UNKNOWN ||
|
||||
Client_Type(Client) == CLIENT_UNKNOWNSERVER) {
|
||||
/* Unregistered connection, but wrong number of arguments: */
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
} else {
|
||||
@@ -89,7 +93,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
|
||||
|
||||
/* Protocol version */
|
||||
if (Req->argc >= 2 && strlen(Req->argv[1]) >= 4) {
|
||||
char c2, c4;
|
||||
int c2, c4;
|
||||
|
||||
c2 = Req->argv[1][2];
|
||||
c4 = Req->argv[1][4];
|
||||
@@ -172,7 +176,6 @@ GLOBAL bool
|
||||
IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||
{
|
||||
CLIENT *intr_c, *target, *c;
|
||||
CHANNEL *chan;
|
||||
char *nick, *user, *hostname, *modes, *info;
|
||||
int token, hops;
|
||||
|
||||
@@ -196,7 +199,6 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||
|
||||
/* Search "target" client */
|
||||
if (Client_Type(Client) == CLIENT_SERVER) {
|
||||
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
|
||||
target = Client_Search(Req->prefix);
|
||||
if (!target)
|
||||
return IRC_WriteErrClient(Client,
|
||||
@@ -245,7 +247,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||
#else
|
||||
Conn_SetAuthPing(Client_Conn(Client), rand());
|
||||
#endif
|
||||
Conn_WriteStr(Client_Conn(Client), "PING :%ld",
|
||||
IRC_WriteStrClient(Client, "PING :%ld",
|
||||
Conn_GetAuthPing(Client_Conn(Client)));
|
||||
LogDebug("Connection %d: sent AUTH PING %ld ...",
|
||||
Client_Conn(Client),
|
||||
@@ -261,22 +263,6 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||
Client_SetType( Client, CLIENT_GOTNICK );
|
||||
} else {
|
||||
/* Nickname change */
|
||||
|
||||
/* Check that the user isn't on any channels set +N */
|
||||
if(Client_Type(Client) == CLIENT_USER &&
|
||||
!Client_HasMode(Client, 'o')) {
|
||||
chan = Channel_First();
|
||||
while (chan) {
|
||||
if(Channel_HasMode(chan, 'N') &&
|
||||
Channel_IsMemberOf(chan, Client))
|
||||
return IRC_WriteErrClient(Client,
|
||||
ERR_NONICKCHANGE_MSG,
|
||||
Client_ID(Client),
|
||||
Channel_Name(chan));
|
||||
chan = Channel_Next(chan);
|
||||
}
|
||||
}
|
||||
|
||||
Change_Nick(Client, target, Req->argv[0],
|
||||
Client_Type(Client) == CLIENT_USER ? true : false);
|
||||
IRC_SetPenalty(target, 2);
|
||||
@@ -288,9 +274,11 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
|
||||
/* Server or service introduces new client */
|
||||
|
||||
/* Bad number of parameters? */
|
||||
if (Req->argc != 2 && Req->argc != 7)
|
||||
if (Req->argc != 2 && Req->argc != 7) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
if (Req->argc >= 7) {
|
||||
/* RFC 2813 compatible syntax */
|
||||
@@ -380,8 +368,6 @@ IRC_SVSNICK(CLIENT *Client, REQUEST *Req)
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
|
||||
|
||||
/* Search the originator */
|
||||
from = Client_Search(Req->prefix);
|
||||
if (!from)
|
||||
@@ -389,9 +375,10 @@ IRC_SVSNICK(CLIENT *Client, REQUEST *Req)
|
||||
|
||||
/* Search the target */
|
||||
target = Client_Search(Req->argv[0]);
|
||||
if (!target || Client_Type(target) != CLIENT_USER)
|
||||
if (!target || Client_Type(target) != CLIENT_USER) {
|
||||
return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
|
||||
Client_ID(Client), Req->argv[0]);
|
||||
}
|
||||
|
||||
if (Client_Conn(target) <= NONE) {
|
||||
/* We have to forward the message to the server handling
|
||||
@@ -484,7 +471,6 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
|
||||
Client_Type(Client) == CLIENT_SERVICE) {
|
||||
/* Server/service updating an user */
|
||||
_IRC_ARGC_EQ_OR_RETURN_(Client, Req, 4)
|
||||
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
|
||||
|
||||
c = Client_Search(Req->prefix);
|
||||
if (!c)
|
||||
@@ -657,8 +643,6 @@ IRC_QUIT( CLIENT *Client, REQUEST *Req )
|
||||
|
||||
if (Client_Type(Client) == CLIENT_SERVER) {
|
||||
/* Server */
|
||||
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
|
||||
|
||||
target = Client_Search(Req->prefix);
|
||||
if (!target) {
|
||||
Log(LOG_WARNING,
|
||||
@@ -747,10 +731,9 @@ IRC_PING(CLIENT *Client, REQUEST *Req)
|
||||
|
||||
if (target != Client_ThisServer()) {
|
||||
/* Ok, we have to forward the PING */
|
||||
if (Client_Type(Client) == CLIENT_SERVER) {
|
||||
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
|
||||
if (Client_Type(Client) == CLIENT_SERVER)
|
||||
from = Client_Search(Req->prefix);
|
||||
} else
|
||||
else
|
||||
from = Client;
|
||||
if (!from)
|
||||
return IRC_WriteErrClient(Client,
|
||||
@@ -822,8 +805,6 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
|
||||
|
||||
/* Forward? */
|
||||
if (Req->argc == 2 && Client_Type(Client) == CLIENT_SERVER) {
|
||||
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
|
||||
|
||||
target = Client_Search(Req->argv[0]);
|
||||
if (!target)
|
||||
return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG,
|
||||
@@ -858,14 +839,14 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
|
||||
if (auth_ping) {
|
||||
LogDebug("AUTH PONG: waiting for token \"%ld\", got \"%s\" ...",
|
||||
auth_ping, Req->argv[0]);
|
||||
if (auth_ping == atol(Req->argv[0])) {
|
||||
if (auth_ping == atoi(Req->argv[0])) {
|
||||
Conn_SetAuthPing(conn, 0);
|
||||
if (Client_Type(Client) == CLIENT_WAITAUTHPING)
|
||||
Login_User(Client);
|
||||
} else
|
||||
if (!IRC_WriteStrClient(Client,
|
||||
"NOTICE %s :To connect, type /QUOTE PONG %ld",
|
||||
Client_ID(Client), auth_ping))
|
||||
"To connect, type /QUOTE PONG %ld",
|
||||
auth_ping))
|
||||
return DISCONNECTED;
|
||||
}
|
||||
#endif
|
||||
@@ -873,24 +854,14 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
|
||||
if (Client_Type(Client) == CLIENT_SERVER && Conn_LastPing(conn) == 0) {
|
||||
Log(LOG_INFO,
|
||||
"Synchronization with \"%s\" done (connection %d): %ld second%s [%ld users, %ld channels].",
|
||||
Client_ID(Client), conn,
|
||||
(long)(time(NULL) - Conn_GetSignon(conn)),
|
||||
Client_ID(Client), conn, time(NULL) - Conn_GetSignon(conn),
|
||||
time(NULL) - Conn_GetSignon(conn) == 1 ? "" : "s",
|
||||
Client_UserCount(), Channel_CountVisible(NULL));
|
||||
}
|
||||
#ifdef DEBUG
|
||||
else {
|
||||
if (Conn_LastPing(conn) > 1)
|
||||
LogDebug("Connection %d: received PONG. Lag: %ld seconds.",
|
||||
conn, (long)(time(NULL) - Conn_LastPing(conn)));
|
||||
else
|
||||
LogDebug("Got unexpected PONG on connection %d. Ignored.",
|
||||
conn);
|
||||
}
|
||||
#endif
|
||||
Conn_UpdatePing(conn);
|
||||
} else
|
||||
LogDebug("Connection %d: received PONG. Lag: %ld seconds.",
|
||||
conn, time(NULL) - Conn_LastPing(conn));
|
||||
|
||||
/* We got a PONG, so signal that none is pending on this connection. */
|
||||
Conn_UpdatePing(conn, 1);
|
||||
return CONNECTED;
|
||||
} /* IRC_PONG */
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -25,7 +25,8 @@
|
||||
*/
|
||||
#define _IRC_ARGC_EQ_OR_RETURN_(Client, Req, Count) \
|
||||
if (Req->argc != Count) { \
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
IRC_SetPenalty(Client, 2); \
|
||||
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
Client_ID(Client), Req->command); \
|
||||
}
|
||||
|
||||
@@ -37,7 +38,8 @@ if (Req->argc != Count) { \
|
||||
*/
|
||||
#define _IRC_ARGC_LE_OR_RETURN_(Client, Req, Max) \
|
||||
if (Req->argc > Max) { \
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
IRC_SetPenalty(Client, 2); \
|
||||
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
Client_ID(Client), Req->command); \
|
||||
}
|
||||
|
||||
@@ -49,7 +51,8 @@ if (Req->argc > Max) { \
|
||||
*/
|
||||
#define _IRC_ARGC_GE_OR_RETURN_(Client, Req, Min) \
|
||||
if (Req->argc < Min) { \
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
IRC_SetPenalty(Client, 2); \
|
||||
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
Client_ID(Client), Req->command); \
|
||||
}
|
||||
|
||||
@@ -61,19 +64,8 @@ if (Req->argc < Min) { \
|
||||
*/
|
||||
#define _IRC_ARGC_BETWEEN_OR_RETURN_(Client, Req, Min, Max) \
|
||||
if (Req->argc < Min || Req->argc > Max) { \
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
Client_ID(Client), Req->command); \
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure that the command has a prefix.
|
||||
*
|
||||
* If there is no prefix, send an error to the client and return from
|
||||
* the function.
|
||||
*/
|
||||
#define _IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req) \
|
||||
if (!Req->prefix) { \
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
IRC_SetPenalty(Client, 2); \
|
||||
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
Client_ID(Client), Req->command); \
|
||||
}
|
||||
|
||||
@@ -85,17 +77,13 @@ if (!Req->prefix) { \
|
||||
* send an error to the client and return from the function.
|
||||
*/
|
||||
#define _IRC_GET_SENDER_OR_RETURN_(Sender, Req, Client) \
|
||||
if (Client_Type(Client) == CLIENT_SERVER) { \
|
||||
if (!Req->prefix) \
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
|
||||
Client_ID(Client), Req->command); \
|
||||
if (Client_Type(Client) == CLIENT_SERVER) \
|
||||
Sender = Client_Search(Req->prefix); \
|
||||
} else \
|
||||
else \
|
||||
Sender = Client; \
|
||||
if (!Sender) \
|
||||
return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG, \
|
||||
Client_ID(Client), \
|
||||
Req->prefix ? Req->prefix : "(none)");
|
||||
return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, \
|
||||
Client_ID(Client), Req->prefix);
|
||||
|
||||
/**
|
||||
* Get target of an IRC command and make sure that it is a server.
|
||||
@@ -113,7 +101,7 @@ if (!Req->prefix) { \
|
||||
if (!Target) \
|
||||
Target = Client_SearchServer(Req->argv[Argc]); \
|
||||
if (!Target) \
|
||||
return IRC_WriteErrClient(From, ERR_NOSUCHSERVER_MSG, \
|
||||
return IRC_WriteStrClient(From, ERR_NOSUCHSERVER_MSG, \
|
||||
Client_ID(From), Req->argv[Argc]); \
|
||||
if (Client_Type(Target) != CLIENT_SERVER) \
|
||||
Target = Client_Introducer(Target); \
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -18,18 +18,21 @@
|
||||
* IRC metadata commands
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <strings.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "conn-func.h"
|
||||
#include "channel.h"
|
||||
#include "irc-macros.h"
|
||||
#include "conn-encoding.h"
|
||||
#include "irc-write.h"
|
||||
#include "log.h"
|
||||
#include "messages.h"
|
||||
#include "parse.h"
|
||||
#include "tool.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-metadata.h"
|
||||
|
||||
/**
|
||||
@@ -48,8 +51,6 @@ IRC_METADATA(CLIENT *Client, REQUEST *Req)
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
|
||||
|
||||
prefix = Client_Search(Req->prefix);
|
||||
if (!prefix)
|
||||
return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,11 +16,13 @@
|
||||
* IRC commands for mode changes (like MODE, AWAY, etc.)
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn.h"
|
||||
#include "channel.h"
|
||||
#include "irc-macros.h"
|
||||
@@ -31,6 +33,7 @@
|
||||
#include "messages.h"
|
||||
#include "conf.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-mode.h"
|
||||
|
||||
static bool Client_Mode PARAMS((CLIENT *Client, REQUEST *Req, CLIENT *Origin,
|
||||
@@ -68,13 +71,6 @@ IRC_MODE( CLIENT *Client, REQUEST *Req )
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(origin, Req, Client)
|
||||
|
||||
/* Test for "fake" MODE commands injected by this local instance,
|
||||
* for example when handling the "DefaultUserModes" settings.
|
||||
* This doesn't harm real commands, because prefixes of regular
|
||||
* clients are checked in Validate_Prefix() and can't be faked. */
|
||||
if (Req->prefix && Client_Search(Req->prefix) == Client_ThisServer())
|
||||
Client = Client_Search(Req->prefix);
|
||||
|
||||
/* Channel or user mode? */
|
||||
cl = NULL; chan = NULL;
|
||||
if (Client_IsValidNick(Req->argv[0]))
|
||||
@@ -206,7 +202,6 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|
||||
case 'b': /* Block private msgs */
|
||||
case 'C': /* Only messages from clients sharing a channel */
|
||||
case 'i': /* Invisible */
|
||||
case 'I': /* Hide channel list from WHOIS */
|
||||
case 's': /* Server messages */
|
||||
case 'w': /* Wallops messages */
|
||||
x[0] = *mode_ptr;
|
||||
@@ -230,7 +225,6 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|
||||
break;
|
||||
case 'c': /* Receive connect notices */
|
||||
case 'q': /* KICK-protected user */
|
||||
case 'F': /* disable flood protection */
|
||||
/* (only settable by IRC operators!) */
|
||||
if (!set || Client_Type(Client) == CLIENT_SERVER
|
||||
|| Client_HasMode(Origin, 'o'))
|
||||
@@ -363,6 +357,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
|
||||
Client_Modes(Target));
|
||||
}
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
return ok;
|
||||
} /* Client_Mode */
|
||||
|
||||
@@ -379,44 +374,37 @@ Channel_Mode_Answer_Request(CLIENT *Origin, CHANNEL *Channel)
|
||||
char the_modes[COMMAND_LEN], the_args[COMMAND_LEN], argadd[CLIENT_PASS_LEN];
|
||||
const char *mode_ptr;
|
||||
|
||||
if (!Channel_IsMemberOf(Channel, Origin)) {
|
||||
/* Not a member: "simple" mode reply */
|
||||
if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
|
||||
Client_ID(Origin), Channel_Name(Channel),
|
||||
Channel_Modes(Channel)))
|
||||
return DISCONNECTED;
|
||||
} else {
|
||||
/* The sender is a member: generate extended reply */
|
||||
strlcpy(the_modes, Channel_Modes(Channel), sizeof(the_modes));
|
||||
mode_ptr = the_modes;
|
||||
the_args[0] = '\0';
|
||||
/* Member or not? -- That's the question! */
|
||||
if (!Channel_IsMemberOf(Channel, Origin))
|
||||
return IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
|
||||
Client_ID(Origin), Channel_Name(Channel), Channel_Modes(Channel));
|
||||
|
||||
while(*mode_ptr) {
|
||||
switch(*mode_ptr) {
|
||||
case 'l':
|
||||
snprintf(argadd, sizeof(argadd), " %lu",
|
||||
Channel_MaxUsers(Channel));
|
||||
strlcat(the_args, argadd, sizeof(the_args));
|
||||
break;
|
||||
case 'k':
|
||||
strlcat(the_args, " ", sizeof(the_args));
|
||||
strlcat(the_args, Channel_Key(Channel),
|
||||
sizeof(the_args));
|
||||
break;
|
||||
}
|
||||
mode_ptr++;
|
||||
/* The sender is a member: generate extended reply */
|
||||
strlcpy(the_modes, Channel_Modes(Channel), sizeof(the_modes));
|
||||
mode_ptr = the_modes;
|
||||
the_args[0] = '\0';
|
||||
|
||||
while(*mode_ptr) {
|
||||
switch(*mode_ptr) {
|
||||
case 'l':
|
||||
snprintf(argadd, sizeof(argadd), " %lu", Channel_MaxUsers(Channel));
|
||||
strlcat(the_args, argadd, sizeof(the_args));
|
||||
break;
|
||||
case 'k':
|
||||
strlcat(the_args, " ", sizeof(the_args));
|
||||
strlcat(the_args, Channel_Key(Channel), sizeof(the_args));
|
||||
break;
|
||||
}
|
||||
if (the_args[0])
|
||||
strlcat(the_modes, the_args, sizeof(the_modes));
|
||||
|
||||
if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
|
||||
Client_ID(Origin), Channel_Name(Channel),
|
||||
the_modes))
|
||||
return DISCONNECTED;
|
||||
mode_ptr++;
|
||||
}
|
||||
if (the_args[0])
|
||||
strlcat(the_modes, the_args, sizeof(the_modes));
|
||||
|
||||
if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
|
||||
Client_ID(Origin), Channel_Name(Channel),
|
||||
the_modes))
|
||||
return DISCONNECTED;
|
||||
#ifndef STRICT_RFC
|
||||
/* Channel creation time */
|
||||
if (!IRC_WriteStrClient(Origin, RPL_CREATIONTIME_MSG,
|
||||
Client_ID(Origin), Channel_Name(Channel),
|
||||
Channel_CreationTime(Channel)))
|
||||
@@ -580,7 +568,6 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
|
||||
case 'M': /* Only identified nicks can write */
|
||||
case 'm': /* Moderated */
|
||||
case 'n': /* Only members can write */
|
||||
case 'N': /* Can't change nick while on this channel */
|
||||
case 'Q': /* No kicks */
|
||||
case 't': /* Topic locked */
|
||||
if(is_oper || is_machine || is_owner ||
|
||||
@@ -596,13 +583,9 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
|
||||
goto chan_exit;
|
||||
if (!set) {
|
||||
if (is_oper || is_machine || is_owner ||
|
||||
is_admin || is_op || is_halfop) {
|
||||
is_admin || is_op || is_halfop)
|
||||
x[0] = *mode_ptr;
|
||||
if (Channel_HasMode(Channel, 'k'))
|
||||
strlcpy(argadd, "*", sizeof(argadd));
|
||||
if (arg_arg > mode_arg)
|
||||
arg_arg++;
|
||||
} else
|
||||
else
|
||||
connected = IRC_WriteErrClient(Origin,
|
||||
ERR_CHANOPRIVSNEEDED_MSG,
|
||||
Client_ID(Origin),
|
||||
@@ -630,6 +613,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
|
||||
#ifdef STRICT_RFC
|
||||
/* Only send error message in "strict" mode,
|
||||
* this is how ircd2.11 and others behave ... */
|
||||
IRC_SetPenalty(Origin, 2);
|
||||
connected = IRC_WriteErrClient(Origin,
|
||||
ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Origin), Req->command);
|
||||
@@ -674,6 +658,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
|
||||
#ifdef STRICT_RFC
|
||||
/* Only send error message in "strict" mode,
|
||||
* this is how ircd2.11 and others behave ... */
|
||||
IRC_SetPenalty(Origin, 2);
|
||||
connected = IRC_WriteErrClient(Origin,
|
||||
ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Origin), Req->command);
|
||||
@@ -775,6 +760,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
|
||||
* mode, because most other servers don't do
|
||||
* it as well and some clients send "wired"
|
||||
* MODE commands like "MODE #chan -ooo nick". */
|
||||
IRC_SetPenalty(Origin, 2);
|
||||
connected = IRC_WriteErrClient(Origin,
|
||||
ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Origin), Req->command);
|
||||
@@ -935,6 +921,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
|
||||
}
|
||||
}
|
||||
|
||||
IRC_SetPenalty(Client, 1);
|
||||
return connected;
|
||||
} /* Channel_Mode */
|
||||
|
||||
@@ -1018,15 +1005,15 @@ Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
|
||||
|
||||
switch (what) {
|
||||
case 'I':
|
||||
if (!Channel_AddInvite(Channel, mask, false, Client_ID(Client)))
|
||||
if (!Channel_AddInvite(Channel, mask, false))
|
||||
return CONNECTED;
|
||||
break;
|
||||
case 'b':
|
||||
if (!Channel_AddBan(Channel, mask, Client_ID(Client)))
|
||||
if (!Channel_AddBan(Channel, mask))
|
||||
return CONNECTED;
|
||||
break;
|
||||
case 'e':
|
||||
if (!Channel_AddExcept(Channel, mask, Client_ID(Client)))
|
||||
if (!Channel_AddExcept(Channel, mask))
|
||||
return CONNECTED;
|
||||
break;
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,9 +16,12 @@
|
||||
* Channel operator commands
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn.h"
|
||||
#include "channel.h"
|
||||
#include "irc-macros.h"
|
||||
@@ -28,6 +31,7 @@
|
||||
#include "messages.h"
|
||||
#include "parse.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-op.h"
|
||||
|
||||
/* Local functions */
|
||||
@@ -118,6 +122,7 @@ IRC_KICK(CLIENT *Client, REQUEST *Req)
|
||||
nickCount--;
|
||||
}
|
||||
} else {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
@@ -150,14 +155,6 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
|
||||
return IRC_WriteErrClient(from, ERR_NOSUCHNICK_MSG,
|
||||
Client_ID(Client), Req->argv[0]);
|
||||
|
||||
if (Req->argv[1][0] == '&') {
|
||||
/* Local channel. Make sure the target user is on this server! */
|
||||
if (Client_Conn(target) == NONE)
|
||||
return IRC_WriteErrClient(from, ERR_USERNOTONSERV_MSG,
|
||||
Client_ID(Client),
|
||||
Req->argv[0]);
|
||||
}
|
||||
|
||||
chan = Channel_Search(Req->argv[1]);
|
||||
if (chan) {
|
||||
/* Channel exists. Is the user a valid member of the channel? */
|
||||
@@ -174,8 +171,7 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
|
||||
|
||||
/* Is the channel "invite-only"? */
|
||||
if (Channel_HasMode(chan, 'i')) {
|
||||
/* Yes. The user issuing the INVITE command must be
|
||||
* channel owner/admin/operator/halfop! */
|
||||
/* Yes. The user must be channel owner/admin/operator/halfop! */
|
||||
if (!Channel_UserHasMode(chan, from, 'q') &&
|
||||
!Channel_UserHasMode(chan, from, 'a') &&
|
||||
!Channel_UserHasMode(chan, from, 'o') &&
|
||||
@@ -200,7 +196,7 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
|
||||
if (remember) {
|
||||
/* We must remember this invite */
|
||||
if (!Channel_AddInvite(chan, Client_MaskCloaked(target),
|
||||
true, Client_ID(from)))
|
||||
true))
|
||||
return CONNECTED;
|
||||
}
|
||||
}
|
||||
@@ -209,22 +205,21 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
|
||||
Req->argv[0], Req->argv[1]);
|
||||
|
||||
/*
|
||||
* RFC 2812 states:
|
||||
* 'There is no requirement that the channel [..] must exist or be a
|
||||
* valid channel'. The problem with this is that this allows the
|
||||
* "channel" to contain spaces, in which case we must prefix its name
|
||||
* with a colon to make it clear that it is only a single argument.
|
||||
* RFC 2812 says:
|
||||
* 'There is no requirement that the channel [..] must exist or be a valid channel'
|
||||
* The problem with this is that this allows the "channel" to contain spaces,
|
||||
* in which case we must prefix its name with a colon to make it clear that
|
||||
* it is only a single argument.
|
||||
*/
|
||||
colon_if_necessary = strchr(Req->argv[1], ' ') ? ":":"";
|
||||
/* Inform target client */
|
||||
IRC_WriteStrClientPrefix(target, from, "INVITE %s %s%s", Req->argv[0],
|
||||
colon_if_necessary, Req->argv[1]);
|
||||
colon_if_necessary, Req->argv[1]);
|
||||
|
||||
if (Client_Conn(target) > NONE) {
|
||||
/* The target user is local, so we have to send the status code */
|
||||
if (!IRC_WriteStrClientPrefix(from, target, RPL_INVITING_MSG,
|
||||
Client_ID(from), Req->argv[0],
|
||||
colon_if_necessary, Req->argv[1]))
|
||||
Client_ID(from), Req->argv[0], colon_if_necessary, Req->argv[1]))
|
||||
return DISCONNECTED;
|
||||
|
||||
if (Client_HasMode(target, 'a') &&
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,12 +16,12 @@
|
||||
* IRC operator commands
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "ngircd.h"
|
||||
#include "conn-func.h"
|
||||
@@ -38,6 +38,7 @@
|
||||
#include "messages.h"
|
||||
#include "op.h"
|
||||
|
||||
#include <exp.h>
|
||||
#include "irc-oper.h"
|
||||
|
||||
/**
|
||||
@@ -47,11 +48,9 @@
|
||||
static bool
|
||||
Bad_OperPass(CLIENT *Client, char *errtoken, char *errmsg)
|
||||
{
|
||||
Log(LOG_ERR|LOG_snotice, "Got invalid OPER from \"%s\": \"%s\" -- %s!",
|
||||
Log(LOG_WARNING, "Got invalid OPER from \"%s\": \"%s\" -- %s",
|
||||
Client_Mask(Client), errtoken, errmsg);
|
||||
/* Increase penalty to slow down possible brute force attacks */
|
||||
IRC_SetPenalty(Client, 10);
|
||||
return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG,
|
||||
return IRC_WriteErrClient(Client, ERR_PASSWDMISMATCH_MSG,
|
||||
Client_ID(Client));
|
||||
} /* Bad_OperPass */
|
||||
|
||||
@@ -209,14 +208,18 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
|
||||
|
||||
/* Bad number of parameters? */
|
||||
if (Req->argc != 1 && Req->argc != 2 && Req->argc != 3 &&
|
||||
Req->argc != 5 && Req->argc != 6)
|
||||
Req->argc != 5 && Req->argc != 6) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
/* Invalid port number? */
|
||||
if ((Req->argc > 1) && atoi(Req->argv[1]) < 1)
|
||||
if ((Req->argc > 1) && atoi(Req->argv[1]) < 1) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
if (Client_Type(Client) != CLIENT_SERVER
|
||||
&& !Client_HasMode(Client, 'o'))
|
||||
@@ -359,7 +362,6 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req )
|
||||
from = Client;
|
||||
break;
|
||||
case CLIENT_SERVER:
|
||||
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
|
||||
from = Client_Search(Req->prefix);
|
||||
break;
|
||||
default:
|
||||
@@ -394,20 +396,13 @@ IRC_xLINE(CLIENT *Client, REQUEST *Req)
|
||||
assert(Req != NULL);
|
||||
|
||||
/* Bad number of parameters? */
|
||||
if (Req->argc != 1 && Req->argc != 3)
|
||||
if (Req->argc != 1 && Req->argc != 3) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
if (!Conf_AllowRemoteOper && Client_Type(Client) == CLIENT_SERVER) {
|
||||
/* Explicitely forbid remote servers to modify "x-lines" when
|
||||
* the "AllowRemoteOper" configuration option isn't set, even
|
||||
* when the command seems to originate from the remote server
|
||||
* itself: this prevents GLINE's to become set during server
|
||||
* handshake in this case (what wouldn't be possible during
|
||||
* regular runtime when a remote IRC Op sends the command). */
|
||||
from = NULL;
|
||||
} else
|
||||
from = Op_Check(Client, Req);
|
||||
from = Op_Check(Client, Req);
|
||||
if (!from)
|
||||
return Op_NoPrivileges(Client, Req);
|
||||
|
||||
@@ -447,11 +442,10 @@ IRC_xLINE(CLIENT *Client, REQUEST *Req)
|
||||
if (Class_AddMask(class, Req->argv[0],
|
||||
timeout,
|
||||
Req->argv[2])) {
|
||||
if (Client_Type(from) != CLIENT_SERVER)
|
||||
Log(LOG_NOTICE|LOG_snotice,
|
||||
"\"%s\" added \"%s\" to %c-Line list: \"%s\" (%ld seconds).",
|
||||
Client_Mask(from), Req->argv[0], class_c,
|
||||
Req->argv[2], atol(Req->argv[1]));
|
||||
Log(LOG_NOTICE|LOG_snotice,
|
||||
"\"%s\" added \"%s\" to %c-Line list: \"%s\" (%ld seconds).",
|
||||
Client_Mask(from), Req->argv[0], class_c,
|
||||
Req->argv[2], atol(Req->argv[1]));
|
||||
if (class == CLASS_GLINE) {
|
||||
/* Inform other servers */
|
||||
IRC_WriteStrServersPrefix(Client, from,
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,26 +16,31 @@
|
||||
* IRC commands for server links
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn.h"
|
||||
#include "conn-func.h"
|
||||
#include "conn-zip.h"
|
||||
#include "conf.h"
|
||||
#include "channel.h"
|
||||
#include "lists.h"
|
||||
#include "log.h"
|
||||
#include "messages.h"
|
||||
#include "parse.h"
|
||||
#include "numeric.h"
|
||||
#include "ngircd.h"
|
||||
#include "irc.h"
|
||||
#include "irc-info.h"
|
||||
#include "irc-macros.h"
|
||||
#include "irc-write.h"
|
||||
#include "op.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-server.h"
|
||||
|
||||
/**
|
||||
@@ -67,10 +72,12 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
|
||||
LogDebug("Connection %d: got SERVER command (new server link) ...",
|
||||
Client_Conn(Client));
|
||||
|
||||
if (Req->argc != 2 && Req->argc != 3)
|
||||
if (Req->argc != 2 && Req->argc != 3) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client),
|
||||
Req->command);
|
||||
}
|
||||
|
||||
/* Get configuration index of new remote server ... */
|
||||
for (i = 0; i < MAX_SERVERS; i++)
|
||||
@@ -178,23 +185,16 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
|
||||
{
|
||||
/* New server is being introduced to the network */
|
||||
|
||||
if (Req->argc != 4)
|
||||
if (Req->argc != 4) {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
/* check for existing server with same ID */
|
||||
if (!Client_CheckID(Client, Req->argv[0]))
|
||||
return DISCONNECTED;
|
||||
|
||||
if (!Req->prefix) {
|
||||
/* We definitely need a prefix here! */
|
||||
Log(LOG_ALERT, "Got SERVER command without prefix! (on connection %d)",
|
||||
Client_Conn(Client));
|
||||
Conn_Close(Client_Conn(Client), NULL,
|
||||
"SERVER command without prefix", true);
|
||||
return DISCONNECTED;
|
||||
}
|
||||
|
||||
from = Client_Search( Req->prefix );
|
||||
if (! from) {
|
||||
/* Uh, Server, that introduced the new server is unknown?! */
|
||||
@@ -235,9 +235,11 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
|
||||
Client_MyToken(c), Client_Info(c));
|
||||
|
||||
return CONNECTED;
|
||||
} else
|
||||
} else {
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
} /* IRC_SERVER */
|
||||
|
||||
/*
|
||||
@@ -255,96 +257,66 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req )
|
||||
CHANNEL *chan;
|
||||
CLIENT *c;
|
||||
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
strlcpy(nick_in, Req->argv[1], sizeof(nick_in));
|
||||
strcpy(nick_out, "");
|
||||
strlcpy( nick_in, Req->argv[1], sizeof( nick_in ));
|
||||
strcpy( nick_out, "" );
|
||||
|
||||
channame = Req->argv[0];
|
||||
|
||||
ptr = strtok(nick_in, ",");
|
||||
while (ptr) {
|
||||
ptr = strtok( nick_in, "," );
|
||||
while( ptr )
|
||||
{
|
||||
is_owner = is_chanadmin = is_op = is_halfop = is_voiced = false;
|
||||
|
||||
/* cut off prefixes */
|
||||
while ((*ptr == '~') || (*ptr == '&') || (*ptr == '@') ||
|
||||
(*ptr == '%') || (*ptr == '+')) {
|
||||
if (*ptr == '~')
|
||||
is_owner = true;
|
||||
if (*ptr == '&')
|
||||
is_chanadmin = true;
|
||||
if (*ptr == '@')
|
||||
is_op = true;
|
||||
if (*ptr == '%')
|
||||
is_halfop = true;
|
||||
if (*ptr == '+')
|
||||
is_voiced = true;
|
||||
while(( *ptr == '~') || ( *ptr == '&' ) || ( *ptr == '@' ) ||
|
||||
( *ptr == '%') || ( *ptr == '+' ))
|
||||
{
|
||||
if( *ptr == '~' ) is_owner = true;
|
||||
if( *ptr == '&' ) is_chanadmin = true;
|
||||
if( *ptr == '@' ) is_op = true;
|
||||
if( *ptr == 'h' ) is_halfop = true;
|
||||
if( *ptr == '+' ) is_voiced = true;
|
||||
ptr++;
|
||||
}
|
||||
|
||||
c = Client_Search(ptr);
|
||||
if (!c) {
|
||||
/* Client not found? */
|
||||
Log(LOG_ERR,
|
||||
"Got NJOIN for unknown nick \"%s\" for channel \"%s\"!",
|
||||
ptr, channame);
|
||||
goto skip_njoin;
|
||||
c = Client_Search( ptr );
|
||||
if( c )
|
||||
{
|
||||
Channel_Join( c, channame );
|
||||
chan = Channel_Search( channame );
|
||||
assert( chan != NULL );
|
||||
|
||||
if( is_owner ) Channel_UserModeAdd( chan, c, 'q' );
|
||||
if( is_chanadmin ) Channel_UserModeAdd( chan, c, 'a' );
|
||||
if( is_op ) Channel_UserModeAdd( chan, c, 'o' );
|
||||
if( is_halfop ) Channel_UserModeAdd( chan, c, 'h' );
|
||||
if( is_voiced ) Channel_UserModeAdd( chan, c, 'v' );
|
||||
|
||||
/* announce to channel... */
|
||||
IRC_WriteStrChannelPrefix( Client, chan, c, false, "JOIN :%s", channame );
|
||||
|
||||
/* set Channel-User-Modes */
|
||||
strlcpy( modes, Channel_UserModes( chan, c ), sizeof( modes ));
|
||||
if( modes[0] )
|
||||
{
|
||||
/* send modes to channel */
|
||||
IRC_WriteStrChannelPrefix( Client, chan, Client, false, "MODE %s +%s %s", channame, modes, Client_ID( c ));
|
||||
}
|
||||
|
||||
if( nick_out[0] != '\0' ) strlcat( nick_out, ",", sizeof( nick_out ));
|
||||
if( is_owner ) strlcat( nick_out, "~", sizeof( nick_out ));
|
||||
if( is_chanadmin ) strlcat( nick_out, "&", sizeof( nick_out ));
|
||||
if( is_op ) strlcat( nick_out, "@", sizeof( nick_out ));
|
||||
if( is_halfop ) strlcat( nick_out, "%", sizeof( nick_out ));
|
||||
if( is_voiced ) strlcat( nick_out, "+", sizeof( nick_out ));
|
||||
strlcat( nick_out, ptr, sizeof( nick_out ));
|
||||
}
|
||||
else Log( LOG_ERR, "Got NJOIN for unknown nick \"%s\" for channel \"%s\"!", ptr, channame );
|
||||
|
||||
if (!Channel_Join(c, channame)) {
|
||||
/* Failed to join channel. Ooops!? */
|
||||
Log(LOG_ALERT,
|
||||
"Failed to join client \"%s\" to channel \"%s\" (NJOIN): killing it!",
|
||||
ptr, channame);
|
||||
IRC_KillClient(NULL, NULL, ptr, "Internal NJOIN error!");
|
||||
Log(LOG_DEBUG, "... done.");
|
||||
goto skip_njoin;
|
||||
}
|
||||
|
||||
chan = Channel_Search(channame);
|
||||
assert(chan != NULL);
|
||||
|
||||
if (is_owner)
|
||||
Channel_UserModeAdd(chan, c, 'q');
|
||||
if (is_chanadmin)
|
||||
Channel_UserModeAdd(chan, c, 'a');
|
||||
if (is_op)
|
||||
Channel_UserModeAdd(chan, c, 'o');
|
||||
if (is_halfop)
|
||||
Channel_UserModeAdd(chan, c, 'h');
|
||||
if (is_voiced)
|
||||
Channel_UserModeAdd(chan, c, 'v');
|
||||
|
||||
/* Announce client to the channel */
|
||||
IRC_WriteStrChannelPrefix(Client, chan, c, false,
|
||||
"JOIN :%s", channame);
|
||||
|
||||
/* Announce "channel user modes" to the channel, if any */
|
||||
strlcpy(modes, Channel_UserModes(chan, c), sizeof(modes));
|
||||
if (modes[0])
|
||||
IRC_WriteStrChannelPrefix(Client, chan, Client, false,
|
||||
"MODE %s +%s %s", channame,
|
||||
modes, Client_ID(c));
|
||||
|
||||
/* Build nick list for forwarding command */
|
||||
if (nick_out[0] != '\0')
|
||||
strlcat(nick_out, ",", sizeof(nick_out));
|
||||
if (is_owner)
|
||||
strlcat(nick_out, "~", sizeof(nick_out));
|
||||
if (is_chanadmin)
|
||||
strlcat(nick_out, "&", sizeof(nick_out));
|
||||
if (is_op)
|
||||
strlcat(nick_out, "@", sizeof(nick_out));
|
||||
if (is_halfop)
|
||||
strlcat(nick_out, "%", sizeof(nick_out));
|
||||
if (is_voiced)
|
||||
strlcat(nick_out, "+", sizeof(nick_out));
|
||||
strlcat(nick_out, ptr, sizeof(nick_out));
|
||||
|
||||
skip_njoin:
|
||||
/* Get next nick, if any ... */
|
||||
ptr = strtok(NULL, ",");
|
||||
/* search for next Nick */
|
||||
ptr = strtok( NULL, "," );
|
||||
}
|
||||
|
||||
/* forward to other servers */
|
||||
@@ -367,7 +339,7 @@ IRC_SQUIT(CLIENT * Client, REQUEST * Req)
|
||||
{
|
||||
char msg[COMMAND_LEN], logmsg[COMMAND_LEN];
|
||||
CLIENT *from, *target;
|
||||
CONN_ID con, client_con;
|
||||
CONN_ID con;
|
||||
int loglevel;
|
||||
|
||||
assert(Client != NULL);
|
||||
@@ -407,7 +379,6 @@ IRC_SQUIT(CLIENT * Client, REQUEST * Req)
|
||||
return CONNECTED;
|
||||
}
|
||||
|
||||
client_con = Client_Conn(Client);
|
||||
con = Client_Conn(target);
|
||||
|
||||
if (Req->argv[1][0])
|
||||
@@ -429,7 +400,7 @@ IRC_SQUIT(CLIENT * Client, REQUEST * Req)
|
||||
Req->argv[0], Client_ID(from),
|
||||
Req->argv[1][0] ? Req->argv[1] : "-");
|
||||
Conn_Close(con, NULL, msg, true);
|
||||
if (con == client_con)
|
||||
if (con == Client_Conn(Client))
|
||||
return DISCONNECTED;
|
||||
} else {
|
||||
/* This server is not directly connected, so the SQUIT must
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,6 +16,7 @@
|
||||
* Sending IRC commands over the network
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#ifdef PROTOTYPES
|
||||
# include <stdarg.h>
|
||||
@@ -23,10 +24,13 @@
|
||||
# include <varargs.h>
|
||||
#endif
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "conn-func.h"
|
||||
#include "channel.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc-write.h"
|
||||
|
||||
#define SEND_TO_USER 1
|
||||
@@ -66,7 +70,7 @@ va_dcl
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf(buffer, 1000, Format, ap);
|
||||
va_end(ap);
|
||||
|
||||
IRC_SetPenalty(Client, 2);
|
||||
@@ -103,7 +107,7 @@ va_dcl
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf(buffer, 1000, Format, ap);
|
||||
va_end(ap);
|
||||
|
||||
return IRC_WriteStrClientPrefix(Client, Client_ThisServer(),
|
||||
@@ -144,7 +148,7 @@ va_dcl
|
||||
#else
|
||||
va_start( ap );
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf( buffer, 1000, Format, ap );
|
||||
va_end( ap );
|
||||
|
||||
return Conn_WriteStr(Client_Conn(Client_NextHop(Client)), ":%s %s",
|
||||
@@ -186,7 +190,7 @@ va_dcl
|
||||
#else
|
||||
va_start( ap );
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf( buffer, 1000, Format, ap );
|
||||
va_end( ap );
|
||||
|
||||
IRC_WriteStrChannelPrefix(Client, Chan, Client_ThisServer(),
|
||||
@@ -235,7 +239,7 @@ va_dcl
|
||||
#else
|
||||
va_start( ap );
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf( buffer, 1000, Format, ap );
|
||||
va_end( ap );
|
||||
|
||||
Conn_ClearFlags( );
|
||||
@@ -292,7 +296,7 @@ va_dcl
|
||||
#else
|
||||
va_start( ap );
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf( buffer, 1000, Format, ap );
|
||||
va_end( ap );
|
||||
|
||||
IRC_WriteStrServersPrefix(ExceptOf, Client_ThisServer(), "%s", buffer);
|
||||
@@ -329,7 +333,7 @@ va_dcl
|
||||
#else
|
||||
va_start( ap );
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf( buffer, 1000, Format, ap );
|
||||
va_end( ap );
|
||||
|
||||
IRC_WriteStrServersPrefixFlag( ExceptOf, Prefix, '\0', "%s", buffer );
|
||||
@@ -369,7 +373,7 @@ va_dcl
|
||||
#else
|
||||
va_start( ap );
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf( buffer, 1000, Format, ap );
|
||||
va_end( ap );
|
||||
|
||||
IRC_WriteStrServersPrefixFlag_CB(ExceptOf, Prefix, Flag,
|
||||
@@ -380,10 +384,11 @@ va_dcl
|
||||
* Send a message to all the servers in the network using a specific prefix
|
||||
* and matching a "client flag" using a callback function.
|
||||
*
|
||||
* @param ExceptOf The sending client, excluded while forwarding the message.
|
||||
* @param Client The sending client, excluded while forwarding the message.
|
||||
* @param Prefix The prefix to use.
|
||||
* @param Flag Client flag that must be set on the target.
|
||||
* @param callback Callback function.
|
||||
* @param Format Format string.
|
||||
*/
|
||||
GLOBAL void
|
||||
IRC_WriteStrServersPrefixFlag_CB(CLIENT *ExceptOf, CLIENT *Prefix, char Flag,
|
||||
@@ -446,7 +451,7 @@ va_dcl
|
||||
#else
|
||||
va_start( ap );
|
||||
#endif
|
||||
vsnprintf(buffer, sizeof(buffer), Format, ap);
|
||||
vsnprintf( buffer, 1000, Format, ap );
|
||||
va_end( ap );
|
||||
|
||||
Conn_ClearFlags( );
|
||||
@@ -508,7 +513,7 @@ va_dcl
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
vsnprintf(msg, sizeof(msg), Format, ap);
|
||||
vsnprintf(msg, 1000, Format, ap);
|
||||
va_end(ap);
|
||||
|
||||
for (to=Client_First(); to != NULL; to=Client_Next(to)) {
|
||||
@@ -520,12 +525,12 @@ va_dcl
|
||||
if (Client_HasMode(to, 'w'))
|
||||
IRC_WriteStrClientPrefix(to, From,
|
||||
"WALLOPS :%s", msg);
|
||||
break;
|
||||
break;
|
||||
case CLIENT_SERVER:
|
||||
if (to != Client)
|
||||
IRC_WriteStrClientPrefix(to, From,
|
||||
"WALLOPS :%s", msg);
|
||||
break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} /* IRC_SendWallops */
|
||||
|
148
src/ngircd/irc.c
148
src/ngircd/irc.c
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* ngIRCd -- The Next Generation IRC Daemon
|
||||
* Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
|
||||
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -16,19 +16,17 @@
|
||||
* IRC commands
|
||||
*/
|
||||
|
||||
#include "imp.h"
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "ngircd.h"
|
||||
#include "conn-func.h"
|
||||
#include "conf.h"
|
||||
#include "channel.h"
|
||||
#ifdef ICONV
|
||||
# include "conn-encoding.h"
|
||||
#endif
|
||||
#include "conn-encoding.h"
|
||||
#include "defines.h"
|
||||
#include "irc-macros.h"
|
||||
#include "irc-write.h"
|
||||
#include "log.h"
|
||||
@@ -36,7 +34,9 @@
|
||||
#include "messages.h"
|
||||
#include "parse.h"
|
||||
#include "op.h"
|
||||
#include "tool.h"
|
||||
|
||||
#include "exp.h"
|
||||
#include "irc.h"
|
||||
|
||||
static char *Option_String PARAMS((CONN_ID Idx));
|
||||
@@ -85,8 +85,6 @@ IRC_CheckListTooBig(CLIENT *From, const int Count, const int Limit,
|
||||
GLOBAL bool
|
||||
IRC_ERROR(CLIENT *Client, REQUEST *Req)
|
||||
{
|
||||
char *msg;
|
||||
|
||||
assert( Client != NULL );
|
||||
assert( Req != NULL );
|
||||
|
||||
@@ -101,20 +99,12 @@ IRC_ERROR(CLIENT *Client, REQUEST *Req)
|
||||
return CONNECTED;
|
||||
}
|
||||
|
||||
if (Req->argc < 1) {
|
||||
msg = "Got ERROR command";
|
||||
if (Req->argc < 1)
|
||||
Log(LOG_NOTICE, "Got ERROR from \"%s\"!",
|
||||
Client_Mask(Client));
|
||||
} else {
|
||||
msg = Req->argv[0];
|
||||
else
|
||||
Log(LOG_NOTICE, "Got ERROR from \"%s\": \"%s\"!",
|
||||
Client_Mask(Client), msg);
|
||||
}
|
||||
|
||||
if (Client_Conn(Client) != NONE) {
|
||||
Conn_Close(Client_Conn(Client), NULL, msg, false);
|
||||
return DISCONNECTED;
|
||||
}
|
||||
Client_Mask(Client), Req->argv[0]);
|
||||
|
||||
return CONNECTED;
|
||||
} /* IRC_ERROR */
|
||||
@@ -234,6 +224,8 @@ IRC_TRACE(CLIENT *Client, REQUEST *Req)
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 3);
|
||||
|
||||
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
|
||||
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, from)
|
||||
|
||||
@@ -250,7 +242,7 @@ IRC_TRACE(CLIENT *Client, REQUEST *Req)
|
||||
PACKAGE_VERSION, Client_ID(target),
|
||||
Client_ID(Client_NextHop(target)),
|
||||
Option_String(idx2),
|
||||
(long)(time(NULL) - Conn_StartTime(idx2)),
|
||||
time(NULL) - Conn_StartTime(idx2),
|
||||
Conn_SendQ(idx), Conn_SendQ(idx2)))
|
||||
return DISCONNECTED;
|
||||
|
||||
@@ -309,6 +301,8 @@ IRC_HELP(CLIENT *Client, REQUEST *Req)
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
|
||||
IRC_SetPenalty(Client, 2);
|
||||
|
||||
if ((Req->argc == 0 && array_bytes(&Conf_Helptext) > 0)
|
||||
|| (Req->argc >= 1 && strcasecmp(Req->argv[0], "Commands") != 0)) {
|
||||
/* Help text available and requested */
|
||||
@@ -349,12 +343,9 @@ GLOBAL bool
|
||||
IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reason)
|
||||
{
|
||||
const char *msg;
|
||||
CONN_ID my_conn = NONE, conn;
|
||||
CONN_ID my_conn, conn;
|
||||
CLIENT *c;
|
||||
|
||||
assert(Nick != NULL);
|
||||
assert(Reason != NULL);
|
||||
|
||||
/* Do we know such a client in the network? */
|
||||
c = Client_Search(Nick);
|
||||
if (!c) {
|
||||
@@ -362,8 +353,12 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
|
||||
return CONNECTED;
|
||||
}
|
||||
|
||||
if (Client_Type(c) != CLIENT_USER && Client_Type(c) != CLIENT_GOTNICK
|
||||
&& Client_Type(c) != CLIENT_SERVICE) {
|
||||
/* Inform other servers */
|
||||
IRC_WriteStrServersPrefix(From ? Client : NULL,
|
||||
From ? From : Client_ThisServer(),
|
||||
"KILL %s :%s", Nick, Reason);
|
||||
|
||||
if (Client_Type(c) != CLIENT_USER && Client_Type(c) != CLIENT_GOTNICK) {
|
||||
/* Target of this KILL is not a regular user, this is
|
||||
* invalid! So we ignore this case if we received a
|
||||
* regular KILL from the network and try to kill the
|
||||
@@ -384,15 +379,8 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
|
||||
Client_Type(c), Nick);
|
||||
}
|
||||
|
||||
/* Inform other servers */
|
||||
IRC_WriteStrServersPrefix(From ? Client : NULL,
|
||||
From ? From : Client_ThisServer(),
|
||||
"KILL %s :%s", Nick, Reason);
|
||||
|
||||
|
||||
/* Save ID of this connection */
|
||||
if (Client)
|
||||
my_conn = Client_Conn(Client);
|
||||
my_conn = Client_Conn(Client);
|
||||
|
||||
/* Kill the client NOW:
|
||||
* - Close the local connection (if there is one),
|
||||
@@ -415,7 +403,7 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
|
||||
* Send help for a given topic to the client.
|
||||
*
|
||||
* @param Client The client requesting help.
|
||||
* @param Topic The help topic requested.
|
||||
* @param Topoc The help topic requested.
|
||||
* @return CONNECTED or DISCONNECTED.
|
||||
*/
|
||||
static bool
|
||||
@@ -483,8 +471,11 @@ Help(CLIENT *Client, const char *Topic)
|
||||
* @return Pointer to static (global) string buffer.
|
||||
*/
|
||||
static char *
|
||||
#if defined(SSL_SUPPORT) || defined(ZLIB)
|
||||
#ifdef ZLIB
|
||||
Option_String(CONN_ID Idx)
|
||||
#else
|
||||
Option_String(UNUSED CONN_ID Idx)
|
||||
#endif
|
||||
{
|
||||
static char option_txt[8];
|
||||
UINT16 options;
|
||||
@@ -502,27 +493,11 @@ Option_String(CONN_ID Idx)
|
||||
if(options & CONN_ZIP) /* zlib compression enabled */
|
||||
strlcat(option_txt, "z", sizeof(option_txt));
|
||||
#endif
|
||||
LogDebug(" *** %d: %d = %s", Idx, options, option_txt);
|
||||
|
||||
return option_txt;
|
||||
#else
|
||||
Option_String(UNUSED CONN_ID Idx)
|
||||
{
|
||||
return "";
|
||||
#endif
|
||||
} /* Option_String */
|
||||
|
||||
/**
|
||||
* Send a message to target(s).
|
||||
*
|
||||
* This function is used by IRC_{PRIVMSG|NOTICE|SQUERY} to actualy
|
||||
* send the message(s).
|
||||
*
|
||||
* @param Client The client from which this command has been received.
|
||||
* @param Req Request structure with prefix and all parameters.
|
||||
* @param ForceType Required type of the destination of the message(s).
|
||||
* @param SendErrors Whether to report errors back to the client or not.
|
||||
* @return CONNECTED or DISCONNECTED.
|
||||
*/
|
||||
static bool
|
||||
Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
|
||||
{
|
||||
@@ -530,10 +505,8 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
|
||||
CL2CHAN *cl2chan;
|
||||
CHANNEL *chan;
|
||||
char *currentTarget = Req->argv[0];
|
||||
char *strtok_last = NULL;
|
||||
char *lastCurrentTarget = NULL;
|
||||
char *message = NULL;
|
||||
char *targets[MAX_HNDL_TARGETS];
|
||||
int i, target_nr = 0;
|
||||
|
||||
assert(Client != NULL);
|
||||
assert(Req != NULL);
|
||||
@@ -553,11 +526,12 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
|
||||
if (Req->argc > 2) {
|
||||
if (!SendErrors)
|
||||
return CONNECTED;
|
||||
IRC_SetPenalty(Client, 2);
|
||||
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
|
||||
Client_ID(Client), Req->command);
|
||||
}
|
||||
|
||||
if (Client_Type(Client) == CLIENT_SERVER && Req->prefix)
|
||||
if (Client_Type(Client) == CLIENT_SERVER)
|
||||
from = Client_Search(Req->prefix);
|
||||
else
|
||||
from = Client;
|
||||
@@ -573,19 +547,10 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
|
||||
message = Req->argv[1];
|
||||
|
||||
/* handle msgtarget = msgto *("," msgto) */
|
||||
currentTarget = strtok_r(currentTarget, ",", &strtok_last);
|
||||
currentTarget = strtok_r(currentTarget, ",", &lastCurrentTarget);
|
||||
ngt_UpperStr(Req->command);
|
||||
|
||||
/* Please note that "currentTarget" is NULL when the target contains
|
||||
* the separator character only, e. g. "," or ",,,," etc.! */
|
||||
while (currentTarget) {
|
||||
/* Make sure that there hasn't been such a target already: */
|
||||
targets[target_nr++] = currentTarget;
|
||||
for(i = 0; i < target_nr - 1; i++) {
|
||||
if (strcasecmp(currentTarget, targets[i]) == 0)
|
||||
goto send_next_target;
|
||||
}
|
||||
|
||||
/* Check for and handle valid <msgto> of form:
|
||||
* RFC 2812 2.3.1:
|
||||
* msgto = channel / ( user [ "%" host ] "@" servername )
|
||||
@@ -694,10 +659,7 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
|
||||
goto send_next_target;
|
||||
}
|
||||
|
||||
if (Client_HasMode(cl, 'C') &&
|
||||
!Client_HasMode(from, 'o') &&
|
||||
!(Client_Type(from) == CLIENT_SERVER) &&
|
||||
!(Client_Type(from) == CLIENT_SERVICE)) {
|
||||
if (Client_HasMode(cl, 'C')) {
|
||||
cl2chan = Channel_FirstChannelOf(cl);
|
||||
while (cl2chan) {
|
||||
chan = Channel_GetChannel(cl2chan);
|
||||
@@ -732,14 +694,14 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
|
||||
return DISCONNECTED;
|
||||
} else if (ForceType != CLIENT_SERVICE
|
||||
&& (chan = Channel_Search(currentTarget))) {
|
||||
/* Target is a channel */
|
||||
if (!Channel_Write(chan, from, Client, Req->command,
|
||||
SendErrors, message))
|
||||
return DISCONNECTED;
|
||||
} else if (ForceType != CLIENT_SERVICE
|
||||
/* $#: server/target mask, RFC 2812, sec. 3.3.1 */
|
||||
&& strchr("$#", currentTarget[0])
|
||||
&& strchr(currentTarget, '.')) {
|
||||
/* $#: server/host mask, RFC 2812, sec. 3.3.1 */
|
||||
/* targetmask */
|
||||
if (!Send_Message_Mask(from, Req->command, currentTarget,
|
||||
message, SendErrors))
|
||||
return DISCONNECTED;
|
||||
@@ -752,35 +714,14 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
|
||||
}
|
||||
|
||||
send_next_target:
|
||||
currentTarget = strtok_r(NULL, ",", &strtok_last);
|
||||
if (!currentTarget)
|
||||
break;
|
||||
|
||||
Conn_SetPenalty(Client_Conn(Client), 1);
|
||||
|
||||
if (target_nr >= MAX_HNDL_TARGETS) {
|
||||
/* Too many targets given! */
|
||||
return IRC_WriteErrClient(Client,
|
||||
ERR_TOOMANYTARGETS_MSG,
|
||||
currentTarget);
|
||||
}
|
||||
currentTarget = strtok_r(NULL, ",", &lastCurrentTarget);
|
||||
if (currentTarget)
|
||||
Conn_SetPenalty(Client_Conn(Client), 1);
|
||||
}
|
||||
|
||||
return CONNECTED;
|
||||
} /* Send_Message */
|
||||
|
||||
/**
|
||||
* Send a message to "target mask" target(s).
|
||||
*
|
||||
* See RFC 2812, sec. 3.3.1 for details.
|
||||
*
|
||||
* @param from The client from which this command has been received.
|
||||
* @param command The command to use (PRIVMSG, NOTICE, ...).
|
||||
* @param targetMask The "target mask" (will be verified by this function).
|
||||
* @param message The message to send.
|
||||
* @param SendErrors Whether to report errors back to the client or not.
|
||||
* @return CONNECTED or DISCONNECTED.
|
||||
*/
|
||||
static bool
|
||||
Send_Message_Mask(CLIENT * from, char * command, char * targetMask,
|
||||
char * message, bool SendErrors)
|
||||
@@ -804,15 +745,17 @@ Send_Message_Mask(CLIENT * from, char * command, char * targetMask,
|
||||
* dot (".") and no wildcards ("*", "?") following the last one.
|
||||
*/
|
||||
check_wildcards = strrchr(targetMask, '.');
|
||||
if (!check_wildcards || check_wildcards[strcspn(check_wildcards, "*?")]) {
|
||||
assert(check_wildcards != NULL);
|
||||
if (check_wildcards &&
|
||||
check_wildcards[strcspn(check_wildcards, "*?")])
|
||||
{
|
||||
if (!SendErrors)
|
||||
return true;
|
||||
return IRC_WriteErrClient(from, ERR_WILDTOPLEVEL_MSG,
|
||||
targetMask);
|
||||
return IRC_WriteErrClient(from, ERR_WILDTOPLEVEL, targetMask);
|
||||
}
|
||||
|
||||
/* #: hostmask, see RFC 2812, sec. 3.3.1 */
|
||||
if (targetMask[0] == '#') {
|
||||
/* #: hostmask, see RFC 2812, sec. 3.3.1 */
|
||||
for (cl = Client_First(); cl != NULL; cl = Client_Next(cl)) {
|
||||
if (Client_Type(cl) != CLIENT_USER)
|
||||
continue;
|
||||
@@ -823,8 +766,7 @@ Send_Message_Mask(CLIENT * from, char * command, char * targetMask,
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
/* $: server mask, see RFC 2812, sec. 3.3.1 */
|
||||
assert(targetMask[0] == '$');
|
||||
assert(targetMask[0] == '$'); /* $: server mask, see RFC 2812, sec. 3.3.1 */
|
||||
for (cl = Client_First(); cl != NULL; cl = Client_Next(cl)) {
|
||||
if (Client_Type(cl) != CLIENT_USER)
|
||||
continue;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user