1
0
mirror of https://github.com/osmarks/ngircd.git synced 2025-09-23 04:34:03 +00:00

Compare commits

..

2 Commits

Author SHA1 Message Date
Alexander Barton
2a3ec21702 Version 0.8.0-pre1 2004-05-07 11:56:19 +00:00
Alexander Barton
9f9576ce31 New "chroot" feature (from Benjamin Pineau), introducing new configuration
variables "ChrootDir" and "MotdPhrase". [from HEAD]
2004-05-07 11:24:17 +00:00
236 changed files with 15019 additions and 38176 deletions

View File

@@ -1,4 +0,0 @@
-I./src
-I./src/ipaddr
-I./src/portab
-I./src/tool

View File

@@ -1 +0,0 @@
.gitignore

View File

@@ -1,81 +0,0 @@
name: ngIRCd CI
on:
push:
branches:
- master
paths-ignore:
- 'COPYING'
- 'ChangeLog'
- 'NEWS'
- 'contrib/**'
- 'doc/**'
- 'man/**'
- '**.md'
- '**.txt'
pull_request:
branches:
- master
paths-ignore:
- 'COPYING'
- 'ChangeLog'
- 'NEWS'
- 'contrib/**'
- 'doc/**'
- 'man/**'
- '**.md'
- '**.txt'
jobs:
build_and_distcheck:
name: build+test
strategy:
matrix:
os:
- ubuntu
- macos
toolchain:
- gcc
- llvm
include:
- os: ubuntu
toolchain: gcc
install_cmd: |
sudo apt update
sudo apt install build-essential expect libident-dev libpam0g-dev libssl-dev libwrap0-dev pkg-config telnet zlib1g-dev gcc
configure_cmd: |
./configure CC=gcc --enable-ipv6 --with-iconv --with-ident --with-openssl --with-pam --with-tcp-wrappers --with-zlib
- os: ubuntu
toolchain: llvm
install_cmd: |
sudo apt update
sudo apt install build-essential expect libident-dev libpam0g-dev libssl-dev libwrap0-dev pkg-config telnet zlib1g-dev clang
configure_cmd: |
./configure CC=clang --enable-ipv6 --with-iconv --with-ident --with-openssl --with-pam --with-tcp-wrappers --with-zlib
- os: macos
toolchain: gcc
install_cmd: |
brew update
brew install autoconf automake expect openssl@3 pkg-config telnet zlib gcc
configure_cmd: |
./configure CC=gcc --enable-ipv6 --with-iconv --with-openssl --with-zlib
- os: macos
toolchain: llvm
install_cmd: |
brew update
brew install autoconf automake expect openssl@3 pkg-config telnet zlib llvm
configure_cmd: |
./configure CC=clang --enable-ipv6 --with-iconv --with-openssl --with-zlib
runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: ${{ matrix.install_cmd }}
- name: Generate build system files
run: ./autogen.sh
- name: Configure the build system
run: ${{ matrix.configure_cmd }}
- name: Build everything
run: make all
- name: Create distribution archive and run tests
run: make distcheck

54
.gitignore vendored
View File

@@ -1,54 +0,0 @@
.*.swp
.deps
.trunk
.vscode
*.a
*.e_
*.exe
*.log
*.o
*~
Makefile
Makefile.in
aclocal.m4
ansi2knr.1
ansi2knr.c
ansi2knr.h
ar-lib
autom4te.cache
build-stamp-ngircd*
build+*
compile
config.cache
config.status
configure
configure.ac
configure.lineno
cov-int
cscope.out
debian
depcomp
install-sh
missing
ngircd.dest
doc/sample-ngircd.conf
doc/src/html
man/ngircd.8
man/ngircd.conf.5
src/*/Makefile.am
src/config.h
src/config.h.in
src/stamp-h1
src/ngircd/check-help
src/ngircd/check-version
src/ngircd/ngircd
src/portab/portabtest
src/testsuite/*-test
src/testsuite/logs
src/testsuite/ngircd-*.motd
src/testsuite/ssl/cert.pem
src/testsuite/ssl/dhparams.pem
src/testsuite/ssl/key.pem
src/testsuite/T-ngircd?
src/testsuite/tests
src/testsuite/tests-skipped.lst

View File

@@ -1,22 +0,0 @@
# 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>
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>

34
AUTHORS Normal file
View File

@@ -0,0 +1,34 @@
ngIRCd - Next Generation IRC Server
(c)2001-2004 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.
-- AUTHORS and CONTRIBUTORS --
Main Authors
~~~~~~~~~~~~
Alexander Barton, <alex@barton.de> (alex)
Contributors
~~~~~~~~~~~~
Goetz Hoffart, <goetz@hoffart.de> (goetz)
Ilja Osthoff, <i.osthoff@gmx.net> (ilja)
Benjamin Pineau, <ben@zouh.org>
Sean Reifschneider, <jafo-rpms@tummy.com>
Code snippets
~~~~~~~~~~~~~
J. Kercheval: pattern matching functions
Patrick Powell, <papowell@astart.com>: snprintf()-function
Andrew Tridgell & Martin Pool: strl{cpy|cat}()-functions
--
$Id: AUTHORS,v 1.8.2.1 2004/05/07 11:24:17 alex Exp $

View File

@@ -1,82 +0,0 @@
# [ngIRCd](https://ngircd.barton.de) - Authors & Contributors
Please feel free to post an email to the ngIRCd users mailing list
<ngircd@lists.barton.de> (see <https://ngircd.barton.de/support> for details)
if you have comments, patches, suggestions or questions.
Or join the "#ngircd" channel in IRC on irc.barton.de:
<irc://irc.barton.de/ngircd>.
*Please do not email the people listed here directly, if possible!*
## Main Authors
- Alexander Barton <alex@barton.de>
- Florian Westphal <fw@strlen.de>
## Contributors
- 9pfs <hellosmile6@tilde.pink>
- 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>
- Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu>
- David Kingston <deathking1337@aim.com>
- DNS <dns@rbose.org>
- Eric Grunow <egrunow@ucsd.edu>
- ewired <37567272+ewired@users.noreply.github.com>
- Fabrice Fontaine <fontaine.fabrice@gmail.com>
- Federico G. Schwindt <fgsch@lodoss.net>
- Florian Weimer <fweimer@redhat.com>
- Gabor Adam Toth <tg@tgbit.net>
- Götz Hoffart <goetz@hoffart.de>
- hello-smile6 <73048226+hello-smile6@users.noreply.github.com>
- Hilko Bengen <bengen@hilluzination.de>
- Ian Chard <ian@chard.org>
- Ilja Osthoff <i.osthoff@gmx.net>
- ItsOnlyBinary <ItsOnlyBinary@users.noreply.github.com>
- Ivan Agarkov <i_agarkov@wargaming.net>
- James Lu <james@overdrivenetworks.com>
- Jari Aalto <jari.aalto@cante.net>
- Johann Hartwig Hauschild <git@hauschild.it>
- JRMU <jrmu@lecturify.com>
- Jules Maselbas <jmaselbas@zdiv.net>
- Katherine Peeters <katherine.peeters@leagueh.xyz>
- 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>
- salaaad2 <47527723+salaaad2@users.noreply.github.com>
- Sam James <sam@cmpct.info>
- Scott Perry <scperry@ucsd.edu>
- Sean Reifschneider <jafo-rpms@tummy.com>
- Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
- 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>
- Valentin Lorentz <progval+git@progval.net>
- Val Lorentz <progval+git@progval.net>
- 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
- Patrick Powell <papowell@astart.com>: snprintf()-function

39
COPYING
View File

@@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -303,9 +303,10 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
@@ -335,5 +336,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

1928
ChangeLog

File diff suppressed because it is too large Load Diff

166
INSTALL Normal file
View File

@@ -0,0 +1,166 @@
ngIRCd - Next Generation IRC Server
(c)2001-2004 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.
-- INSTALL --
I. Upgrade Information
~~~~~~~~~~~~~~~~~~~~~~
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 CVS) is as following:
1) ./autogen.sh [only necessary when using CVS]
2) ./configure
3) make
4) make install
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 CVS.
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 (use recent versions! autoconf 2.53 and
automake 1.6.1 are known to work).
Again: "end users" do not need this step!
2): "./configure"
The configure-script is used to detect local system dependencies.
In the perfect case, configure should recognise 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.
This files 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
II. 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
III. 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 four blocks: [Global], [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. IRC operators
of this server are defined in [Operator] blocks. [Server] is the section
where server links are configured. 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" manual page.
IV. 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.
--
$Id: INSTALL,v 1.18.2.1 2004/05/07 11:24:17 alex Exp $

View File

@@ -1,411 +0,0 @@
# [ngIRCd](https://ngircd.barton.de) - Installation
This document describes 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 are working on a fresh installation.
The subsequent sections describe the steps required to build and install ngIRCd
_from sources_. The information given here is not relevant when you are using
packages provided by your operating system vendor or third-party repositories!
Please see the file `doc/QuickStart.md` in the `doc/` directory or on
[GitHub](https://github.com/ngircd/ngircd/blob/master/doc/QuickStart.md) for
information about _setting up_ and _running_ ngIRCd, including some real-world
configuration examples.
## Upgrade Information
This section lists important updates and breaking changes that you should be
aware of *before* starting the upgrade:
Differences to version 26
- **Attention**:
Starting with release 27, ngIRCd validates SSL/TLS certificates on outgoing
server-server links by default and drops(!) connections when the remote
certificate is invalid (for example self-signed, expired, not matching the
host name, ...). Therefore you have to make sure that all relevant
*certificates are valid* (or to disable certificate validation on this
connection using the new `SSLVerify = false` setting in the affected
`[Server]` block, where the remote certificate is not valid and you can not
fix this issue).
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
```
*Note:* More recent versions use the DNF package manager; so substitute "yum"
with "dnf" in the command above. And neither "libident-devel" (IDENT support)
nor "tcp_wrappers-devel" (TCP Wrappers) are provided any more!
So the resulting command looks like this:
``` shell
dnf install \
autoconf automake expect gcc glibc-devel gnutls-devel \
make pam-devel pkg-config 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
```
#### macOS with Homebrew
To build ngIRCd on Apple macOS, you need either Xcode or the command line
development tools. You can install the latter with the `xcode-select --install`
command.
Additional tools and libraries that are not part of macOS itself are best
installed with the [Homebrew](https://brew.sh) package manager:
``` shell
brew install autoconf automake gnutls libident pkg-config
```
Note: To actually use the GnuTLS and IDENT libraries installed by Homebrew, you
need to pass the installation path to the `./configure` command (see below). For
example like this:
``` shell
./configure --with-gnutls=$(brew --prefix) --with-ident=$(brew --prefix) [...]
```
### `./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.md` for details.
- IPv6 (autodetected by default):
`--enable-ipv6` / `--disable-ipv6`
Enable (disable) support for version 6 of the Internet Protocol, which should
be available on most modern UNIX-like operating systems by default.

View File

@@ -1,6 +1,6 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2003 by 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
@@ -8,41 +8,27 @@
# (at your option) any later version.
# Please read the file COPYING, README and AUTHORS for more information.
#
# $Id: Makefile.am,v 1.14 2004/01/01 22:24:48 alex Exp $
#
AUTOMAKE_OPTIONS = gnu
SUBDIRS = doc src man contrib
EXTRA_DIST = \
AUTHORS.md \
INSTALL.md \
README.md \
autogen.sh \
configure.ng \
.clang_complete \
.dockerignore \
.mailmap
clean-local:
rm -f build-stamp*
maintainer-clean-local:
rm -rf autom4te.cache
rm -f Makefile.in Makefile aclocal.m4 configure configure.ac
rm -f ar-lib mkinstalldirs missing depcomp install-sh
rm -f config.log debian
rm -f Makefile.in Makefile aclocal.m4 configure
rm -f mkinstalldirs missing depcomp install-sh
rm -f config.log build-stamp* debian
testsuite:
${MAKE} -C src/testsuite check
srcdoc:
${MAKE} -C doc/src srcdoc
lint:
make -C src/ngircd lint
rpm: distcheck
rpmbuild -ta ngircd-$(VERSION).tar.gz
rpm -ta ngircd-*.tar.gz
deb:
[ -f debian/rules ] || ln -s contrib/Debian debian
dpkg-buildpackage --build=binary
.PHONY: deb rpm srcdoc testsuite
dpkg-buildpackage -rfakeroot
# -eof-

940
NEWS
View File

@@ -1,932 +1,16 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2024 Alexander Barton and Contributors.
(c)2001-2004 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.
-- NEWS --
ngIRCd 27 (2024-04-26)
- Add an example filter file for "Fail2Ban": contrib/ngircd-fail2ban.conf.
ngIRCd 27~rc1 (2024-04-13)
- Validate certificates on server links. Up to now, ngIRCd optionally used
SSL/TLS encrypted server-server links but never checked and validated any
certificates. Now ngIRCd validates SSL/TLS certificates on outgoing
server-server links by default and drops(!) connections when the remote
certificate is invalid (for example self-signed, expired, not matching the
host name, ...). Therefore you have to make sure that all relevant
*certificates are valid* (or to disable certificate validation on this
connection using the new `SSLVerify = false` setting in the affected
`[Server]` block, where the remote certificate is not valid and you can not
fix this issue).
The original patch for OpenSSL dates back to 2009 and was written by Florian
Westphal and was extended for GnuTLS in 2014 by Christoph Biedl. But it took
us another 10 years to bring it to life ... oh my! Many thanks to both
Florian and Christoph!
Closes #120.
- Add support for the "sd_notify" protocol of systemd(8): Periodically
"ping" the service manager (every 3 seconds) and set a status message
showing current connection statistics which then is included in "systemctl
status ngircd.service" output. In addition, this enables using the
systemd(8) watchdog functionality ("WatchdogSec") for the "ngircd.service"
unit and allows it to use the "notify" service type, which results in
better status tracking by the service manager.
- Try to set file descriptor limit to its maximum and show info on startup:
The number of possible parallel connections is limited by the file
descriptor limit of the process (among other things). Therefore try to
upgrade the current "soft" limit to its "hard" maximum (but limited to
100000 instead of "infinite"), and show an information or even warning when
the limit is still less than the configured "MaxConnections" setting. Please
note that ngIRCd and its linked libraries (like PAM) need file descriptors
not only for incoming and outgoing IRC connections, but for reading files
and inter-process communication, too! Therefore the actual connection limit
is less(!) than the file descriptor limit!
- Add a "Docker file" (contrib/Dockerfile) and corresponding documentation
(doc/Container.md) to the project. The resulting container is based on the
latest Debian "stable-slim" container and built using a "build container".
- No longer use a default built-in value for the "IncludeDir" directive when
a configuration file was explicitly specified on the command line using
"--config"/"-f": This way no default include directory is scanned when a
possibly non-default configuration file is used which (intentionally) did
not specify an "IncludeDir" directive. So now you can use "-f /dev/null"
for checking all built-in defaults, regardless of any local configuration
files in the default drop-in directory (which would have been read in
until this change).
- The server "Name" in the "[Global]" section of the configuration file no
longer needs to be set: When not set (or empty), ngIRCd now tries to
deduce a valid IRC server name from the local host name ("node name"),
possibly adding a ".host" extension when the host name does not contain a
dot (".") which is required in an IRC server name ("ID").
This new behavior, with all configuration parameters now being optional,
allows running ngIRCd without any configuration file at all.
- Autodetect support for IPv6 by default: Until now, IPv6 support was disabled
by default, which seems a bit outdated in 2024. Note: You still can pass
"--enable-ipv6"/"--disable-ipv6" to the ./configure script to forcefully
activate or deactivate IPv6 support.
- Do IDENT requests even when DNS lookups are disabled: Up to now disabling
DNS in the configuration disabled IDENT lookups as well (for no good
reason). Now you can activate/deactivate DNS lookups and IDENT requests
completely separately. Thanks for reporting this, Miniontoby!
Closes #291.
- Allow SSL client-only configurations without keys/certificates: You don't
need to configure certificates/keys as long as you don't configure
SSL-enabled listening ports. This can make sense when you want to only link
your local daemon to an uplink server using SSL and only have clients on
your local host or in your fully trusted network, where SSL is not required.
- Respect "SSLConnect" option for incoming connections and do not accept
incoming plain-text ("non SSL") server connections for servers configured
with "SSLConnect" enabled. This change prevents an authenticated
client-server being able to force the server-server to send its password
on a plain-text connection when SSL/TLS was intended.
- Add a new option "Autojoin" to [Channel] blocks: When it is set, ngIRCd
automatically joins all local users to this channel on connect. Note: The
users must have permissions to access the channel, otherwise joining them
will fail!
Thanks Ivan Agarkov <i_agarkov@wargaming.net> for the initial patch!
- Hide invisible (+i) users on "WHOIS <pattern>": Let's behave like most(?)
other IRC daemons (at least ircd2.11) and hide all +i users when WHOIS is
used with a pattern. Otherwise privacy of this users is not guaranteed and
the +i mode a bit useless ...
Reported by Cahata on #ngircd, thanks!
- Make the debug log level ("--debug"/-"d" command line option) always
available, not only when ./configure'd with "--enable-debug": the latter
now only enables additional checks (like the tests done using assert(2))
and is signalled by adding "+DEBUG" to the version "feature string". This
change enables everyone to get even more detailed logging when required.
- Allow IRC Operators to use the WHO command on any channel.
- Send the NAMES list and channel topic to users "forcefully" joined to a
channel using NJOIN, like they joined on their own using JOIN, and
streamline the order of NAMES list and channel topic messages.
Closes #288.
- Added a new command line option "-y"/"--syslog", with which logging to
syslog can be activated/deactivated separately from running on the console
(using "--nodaemon") or in the background.
Thanks Katherine Peeters for the patch and pull request!
Closes #294.
- Update, enhance and extend our documentation in README.md, INSTALL.md,
doc/HowToRelease.txt and the manual pages ngircd(8) and ngircd.conf(5), add
a new doc/QuickStart.md document, and convert some more documentation files
to Markdown (AUTHORS.md, contrib/README.md, doc/FAQ.md, doc/SSL.md).
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 behavior 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)
- Don't ignore but use the server password when PAM is compiled in but
disabled. Thanks to Roy Sindre Norangshol <roy.sindre@norangshol.no>!
- doc/Platforms.txt: Update from master branch.
- doc/Services.txt: Update information for Anope 2.x.
- configure: add support for the LDFLAGS_END and LIBS_END variables to add
linker flags and libraries at the end of the configure run (CFLAGS_END has
been implemented already).
- Update Copyright notices for 2014 :-)
ngIRCd 21 (2013-10-30)
- Call arc4random_stir() in forked subprocesses, when available. This
is required by FreeBSD <10 and current NetBSD at least to correctly
initialize the "arc4" random number generator on these platforms.
ngIRCd 21~rc2 (2013-10-20)
- Report the correct configuration file name on configuration errors,
support longer configuration lines, and warn when lines are truncated.
ngIRCd 21~rc1 (2013-10-05)
- Actually KILL clients on GLINE/KLINE. (Closes bug #156)
- Add support to show all user links using the "STATS L" (uppercase)
command (restricted to IRC Operators).
- Implement configurable SSL cipher list selection for GnuTLS and OpenSSL
using the new configuration option "CipherList". In addition, this
changes the defaults to more secure values: "HIGH:!aNULL:@STRENGTH" for
OpenSSL, and "SECURE128" for GnuTLS.
- Show connection flag "s" (SSL) in RPL_TRACE{LINK|SERVER} messages: now
you can check if a server-to-server link is SSL-encrypted or not using
the IRC "TRACE" command.
- Implement the new configuration option "DefaultUserModes" which lists
user modes that become automatically set on new local clients right
after login. Please note that only modes can be set that the client
could set on itself, so you can't set "a" (away) or "o" (IRC Op),
for example! User modes "i" (invisible) or "x" (cloaked) etc. are
"interesting", though. (Closes bug #160)
- Add support for the new METADATA "account" property, which allows
services to automatically identify users after netsplits and across
service restarts.
- Implement a new configuration option "AllowedChannelTypes" that lists
all allowed channel types (channel prefixes) for newly created channels
on the local server. By default, all supported channel types are allowed.
If set to the empty string, local clients can't create new channels at
all, which equals the old "PredefChannelsOnly = yes" setting.
This change deprecates the "PredefChannelsOnly" variable, too, but it is
still supported and translated to the appropriate "AllowedChannelTypes"
setting. When the old "PredefChannelsOnly" variable is processed, a
warning message is logged. (Closes bug #152)
- Add support for "client certificate fingerprinting". When a client
passes an SSL certificate to the server, the "fingerprint" will be
forwarded in the network which enables IRC services to identify the
user using this certificate and not using passwords.
- Implement a new configuration option "IncludeDir" in the "[Options]"
section that can be used to specify a directory which can contain
further configuration files and configuration file snippets matching
the pattern "*.conf". These files are read in after the main server
configuration file ("ngircd.conf" by default) has been read in and
parsed. The default is "$SYSCONFDIR/ngircd.conf.d", so that it is
possible to adjust the configuration only by placing additional files
into this directory. (Closes bug #157)
- Add Travis-CI configuration file (".travis.yml") to project.
- ngIRCd now accepts user names including "@" characters, saves the
unmodified name for authentication but stores only the part in front
of the "@" character as "IRC user name". And the latter is how
ircd2.11, Bahamut, and irc-seven behave as well. (Closes bug #155)
- Lots of IRC "information functions" like ADMIN, INFO, ... now accept
server masks and names of connected users (in addition to server names)
for specifying the target server of the command. (Closes bug #153)
- Implement a new configuration option "IdleTimeout" in the "[Limits]"
section of the configuration file which can be used to set a timeout
in seconds after which the whole daemon will shutdown when no more
connections are left active after handling at least one client.
The default is 0, "never".
This can be useful for testing or when ngIRCd is started using "socket
activation" with systemd(8), for example.
- Implement support for systemd(8) "socket activation".
- Enable WHOIS to display information about IRC Services using the new
numeric 310(RPL_WHOISSERVICE) This numeric is used for this purpose by
InspIRCd, for example -- but as usual, other numerics are in use, too,
like 613 in UltimateIRCd ...
Please note that neither the Operator (+o) not the "bot status" (+B)
of an IRC service is displayed in the output.
- Update systemd(8) example configuration files in ./contrib/ directory:
the "ngircd.service" file now uses the "forking" service type which
enhances the log messages shown by "systemctl status ngircd.service",
and the new "ngircd.socket" file configures a systemd socket that
configures a socket for ngIRCd and launches the daemon on demand.
- Enhance help system and the HELP command: now a "help text file" can be
set using the new configuration option "HelpFile" ("global" section),
which is read in and parsed on server startup and configuration reload,
and then is used to output individual help texts to specific topics.
Please see the file ./doc/Commands.txt for details.
ngIRCd 20.3 (2013-08-23)
- This release is a bugfix release only, without new features.
- Security: Fix a denial of service bug (server crash) which could happen
when the configuration option "NoticeAuth" is enabled (which is NOT the
default) and ngIRCd failed to send the "notice auth" messages to new
clients connecting to the server (CVE-2013-5580).
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
(CVE-2013-1747).
ngIRCd 20.1 (2013-01-02)
- This release is a bugfix release only, without new features.
ngIRCd 20 (2012-12-17)
- Allow user names ("INDENT") up to 20 characters when ngIRCd has not
been configured for "strict RFC mode". This is useful if you are using
external (PAM) authentication mechanisms that require longer user names.
Patch suggested by Brett Smith <brett@w3.org>, see
<http://arthur.barton.de/pipermail/ngircd-ml/2012-October/000579.html>.
ngIRCd 20~rc2 (2012-12-02)
- Rework cloaked hostname handling and implement the "METADATA cloakhost"
subcommand: Now ngIRCd uses two fields internally, one to store the
"real" hostname and one to save the "cloaked" hostname. This allows
"foreign servers" (aka "IRC services") to alter the real and cloaked
hostnames of clients without problems, even when the user itself issues
additional "MODE +x" and "MODE -x" commands.
ngIRCd 20~rc1 (2012-11-11)
- Update doc/Services.txt: describe the upcoming version of Anope 1.9.8,
then including a protocol module for ngIRCd. And remove our own patches
in ./contrib/Anope because they aren't supported any more ...
- Implement new "METADATA" command which can be used by remote servers
and IRC services to update client metadata like the client info text
("real name"), user name, and hostname, and use this command to
configure an cloaked hostname (user mode "+x") on remote servers:
This prevents "double cloaking" of hostnames and even cloaked
hostnames are in sync on all servers supporting "METADATA" now.
- Implement new IRC "SVSNICK" command to allow remote servers (and IRC
services) to change nicknames of already registered users. The SVSNICK
command itself doesn't change the nickname, but it becomes forwarded
to the server to which the user is connected to. And then this server
initiates the real nickname changing using regular NICK commands.
This allows to run mixed networks with old servers not supporting the
SVSNICK command, because SVSNICK commands for nicknames on such servers
are silently ignored and don't cause a desynchronization of the network.
- New configuration option "MaxListSize" to configure the maximum number
of channels returned by a LIST command. The default is 100, as before.
- Implement user mode "b", "block messages": when a user has set mode "b",
all private messages and notices to this user are blocked if they don't
originate from a registered user, an IRC Op, server or service. The
originator gets an error numeric sent back in this case,
ERR_NONONREG_MSG (486), which is used by UnrealIRCd, too. (Closes #144)
- Implement channel mode "V" (invite disallow): If the new channel mode
"V" is set, the INVITE command becomes invalid and all clients get the
new ERR_NOINVITE_MSG (518) reply. (Closes #143)
- Implement channel mode "Q" and user mode "q": Both modes protect users
from channel kicks: only IRC operators and servers can kick users having
mode "q" or in channels with mode "Q". (Closes #141)
- Allow users to "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 the user
mode "+x": this prevents regular users from changing their hostmask to
the name of the IRC server itself, which confused quite a few people ;-)
(Closes #133)
- New configuration option "OperChanPAutoOp": If disabled, IRC operators
don't become channel operators in persistent channels when joining.
Enabled by default, which has been the behavior of ngIRCd up to this
patch. (Closes #135)
- Allow IRC operators to see secret (+s) channels in LIST command as long
as the "MorePrivacy" configuration option isn't enabled in the
configuration file. (Closes #136)
- Implement new (optional) IRC+ "CHARCONV" command to set a client
character set that the server translates all messages to/from UTF-8.
This feature requires the "libiconv" library and must be enabled using
the new "--with-iconv" option of the ./configure script. See
doc/Protocol.txt for details. (Closes #109)
- Implement user mode "B" ("Bot flag"): it is settable and unsettable by
every (non-restricted) client. This is how Unreal and InspIRCd do
behave, and so do we :-)
- Implement channel mode "M": Only the server, identified users and IRC
operators are able to talk in such a channel.
- Block nicknames that are reserved for services and are defined using the
configuration variable "ServiceMask" in "Server" blocks; And this
variable now can handle more than one mask separated by commas.
- Implemented XOP channel user modes: "Half Op" ("+h", prefix "%") can set
the channel modes +imntvIbek and kick all +v and normal users; "Admin"
("+a", prefix "&") can set channel modes +imntvIbekoRsz and kick all +o,
+h, +v and normal users; and "Owner" ("+q", prefix "~") can set channel
modes +imntvIbekoRsz and kick all +a, +o, +h, +v and normal users.
- Implement hashed cloaked hostnames for both the "CloakHost" and
"CloakHostModeX" configuration options: now the admin can use the new
'%x' placeholder to insert a hashed version of the clients hostname,
and the new configuration option "CloakHostSalt" defines the salt for
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 19.2~rc1 (2012-06-13)
- New configuration option "CloakHostModeX" to configure the hostname
that gets used for IRC clients which have user mode "+x" enabled.
Up to now, the name of the IRC server itself has been used for this,
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
handlers to return more than one "class prefix" to the client.
ngIRCd 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 19~rc1 (2012-02-12)
- Update preliminary ngIRCd protocol module for Anope 1.9.6, which now
is the only supported version.
- New numeric RPL_WHOISHOST_MSG(378), which returns the DNS host name
(if available) and the IP address of a client in the WHOIS reply.
Only the user itself and local IRC operators get this numeric.
- Implement channel exception list (mode 'e'). This allows a channel
operator to define exception masks that allow users to join the
channel even when a "ban" would match and prevent them from joining:
the exception list (e) overrides the ban list (b).
- Implement user mode 'C': If the target user of a PRIVMSG or NOTICE
command has the user mode 'C' set, it is required that both sender
and receiver are on the same channel. This prevents private flooding
by completely unknown clients.
- New RPL_WHOISREGNICK_MSG(307) numeric in WHOIS command replies: it
indicates if a nickname is registered (if user mode 'R' set).
- Limit channel invite, ban, and exception lists to 50 entries and fix
duplicate check and error messages when adding already listed entries
or deleting no (longer) existing ones.
- Limit the number of list items in the reply of LIST (100), WHO (25),
WHOIS (10), and WHOWAS (25) commands.
- Limit the MODE command to handle a maximum number of 5 channel modes
that require an argument (+Ibkl) per call and report this number
in the ISUPPORT(005) numeric: "MODES=5".
- LINKS command: support <mask> parameter to limit the reply.
- Add 1 second penalty for every further target on PRIVMSG/NOTICE
commands: this reduces the possibility of flooding channels with
commands like "PRIVMSG/NOTICE #a,#n,#c,... :message" a little bit.
Problem noticed by Cahata, thanks!
- New configuration option "PAMIsOptional": when set, clients not
sending a password are still allowed to connect: they won't become
"identified" and keep the "~" character prepended to their supplied
user name. See "man 5 ngircd.conf" for details.
- Fixed handling of WHO commands. This fixes two bugs: "WHO <nick>"
returned nothing at all if the user was "+i" (reported by Cahata,
thanks) and "WHO <nick|nickmask>" returned channel names instead
of "*" when the user was member of a (visible) channel.
- LUSERS reply: only count channels that are visible to the requesting
client, so the existence of secret channels is no longer revealed by
using LUSERS. Reported by Cahata, thanks!
- Unknown user and channel modes no longer stop the mode parser, but
are simply ignored. Therefore modes after the unknown one are now
handled. This is how ircd2.10/ircd2.11/ircd-seven behave, at least.
Reported by Cahata, thanks!
- Implement IRC commands "GLINE" and "KLINE" to ban users. G-Lines are
synchronized between server on peering, K-Lines are local only.
If you use "*!<user>@<host>" or "*!*@<host>" masks, these connections
are blocked even before the user is fully logged in (before PASS,
NICK, and USER commands have been processed) and before the child
processes for authentication are forked, so resource usage is smaller.
- Added doc/Modes.txt: document modes supported by ngIRCd.
- Implement user mode "R": indicates that the nickname of this user
is "registered". This mode isn't handled by ngIRCd itself, but must
be set and unset by IRC services like Anope.
- Implement channel mode "R": only registered users (having the user
mode "R" set) are allowed to join this channel.
- Test suite: bind to loopback (127.0.0.1) interface only.
- Handle unknown user and channel modes: these modes are saved and
forwarded to other servers, but ignored otherwise.
- Handle channel user modes 'a', 'h', and 'q' from remote servers.
These channel user modes aren't used for anything at the moment,
but ngIRCd knows that these three modes are "channel user modes"
and not "channel modes", that is that these modes take an "nickname"
argument. Like unknown user and channel modes, these modes are saved
and forwarded to other servers, but ignored otherwise.
ngIRCd 18 (2011-07-10)
- Add preliminary ngIRCd protocol module for Anope 1.9 to contrib/Anope/.
ngIRCd 18~rc2 (2011-06-29)
- GnuTLS: use 1024 bits as minimum size of the DH prime. This enables
ngIRCd to accept incoming connections from other servers and clients
that "only" use at least 1024 bits again, like ngIRCd 17 did (and no
longer requires 2048 bits for incoming connections).
ngIRCd 18~rc1 (2011-06-27)
- New configuration option "MorePrivacy" to "censor" some user information.
When enabled, signon time and idle time is left out. Part and quit
messages are made to look the same. WHOWAS requests are silently dropped.
All of this is useful if one wish to conceal users that access the ngircd
servers from TOR or I2P.
- New configuration option "ScrubCTCP" to scrub incoming CTCP commands. If
activated, the server silently drops incoming CTCP requests from both
other servers and from users. The server that scrubs CTCP will not forward
the CTCP requests to other servers in the network either, which can spell
trouble if not every oper knows about the CTCP-scrubbing. Scrubbing CTCP
commands also means that it is not possible to send files between users.
There is one exception to the CTCP scrubbing performed: ACTION ("/me
commands") requests are not scrubbed.
- Restructure ngIRCd configuration file: introduce new [Limits], [Options],
and [SSL] sections. The intention of this restructuring is to make the
[Global] section much cleaner, so that it only contains variables that
most installations must adjust to the local requirements. All the optional
variables are moved to [Limits], for configurable limits and timers of
ngIRCd, and [Options], for optional features. All SSL-related variables
are moved to [SSL] and the "SSL"-prefix is stripped. The old variables in
the [Global] section are deprecated now, but are still recognized.
=> Don't forget to check your configuration, use "ngircd --configtest"!
- New documentation "how to contribute": doc/Contributing.txt.
- Avoid needlessly scary 'buffer overflow' messages: When the write buffer
space grows too large, ngIRCd has to disconnect the client to avoid
wasting too much memory, which is logged with a scary 'write buffer
overflow' message. Change this to a more descriptive wording.
- New configuration option "RequireAuthPing": PING-PONG on login. When
enabled, this configuration option lets ngIRCd send a PING with an numeric
"token" to clients logging in; and it will not become registered in the
network until the client responds with the correct PONG.
- New configuration option "NoticeAuth": send NOTICE AUTH on connect. When
active, ngircd will send "NOTICE AUTH" messages on client connect time
like e.g. snircd (QuakeNet) does.
- Add support for up to 3 targets in WHOIS queries, also allow up to one
wildcard query from local hosts. Follows ircd 2.10 implementation rather
than RFC 2812. At most 10 entries are returned per wildcard expansion.
- ngircd.conf(5) manual page: describe types of configuration variables
(booleans, text strings, integer numbers) and add type information to each
variable description.
- Terminate incoming connections on HTTP commands "GET" and "POST".
- New configuration option "CloakHost": when set, this host name is used for
every client instead of the real DNS host name (or IP address).
- New configuration option "CloakUserToNick": when enabled, ngIRCd sets
every clients' user name to their nickname and hides the user name
supplied by the IRC client.
- Make write buffers bigger, but flush early. Before this change, a client
got disconnected if the buffer flushing at 4k failed, now regular clients
can store up to 32k and servers up 64k even if flushing is not possible at
the moment. This enhances reliability on slow links.
- Allow "Port = 0" in [Server] blocks. Port number 0 marks remote servers
that try to connect to this daemon, but where this daemon never tries to
establish a connection on its own: only incoming connections are allowed.
- Enable WHOIS command to return information about services.
- Implement channel mode 'O': "IRC operators only". This channel mode is
used on DALnet (bahamut), for example.
- Remove support for ZeroConf/Bonjour/Rendezvous service registration
including the "[No]ZeroConf" configuration option.
- Deprecate NoXX-Options in ngircd.conf and move new variants into our new
[Options] section: 'NoDNS=no' => 'DNS=yes', 'NoIdent=no' => 'Ident=yes',
'NoPAM=no' => 'PAM=yes', and 'NoZeroConf=no' => 'ZeroConf=yes' (and
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)
- 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)
- 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
ngIRCd using a pre-ANSI K&R C compiler again.
ngIRCd 17~rc1 (2010-10-11)
- New configuration option "NoZeroConf" to disable service registration at
runtime even if ngIRCd is compiled with support for ZeroConf (e.g. using
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",
"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
connections and known clients) to the console or syslog when receiving
the SIGUSR2 signal and debug mode is enabled.
- Enable the daemon to disable and enable "debug mode" on runtime using
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
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.
- Allow IRC operators to use MODE command on any channel (closes: #100).
- New configuration option "NoPAM" to disable PAM.
- Implement asynchronous user authentication using PAM, please see the
file doc/PAM.txt for details.
- Add some documentation for using BOPM with ngIRCd, see doc/Bopm.txt.
- Implement user mode "c": receive connect/disconnect NOTICEs. Note that
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 16~rc2 (2010-04-25)
- Enhance 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)
- Implement WEBIRC command used by some Web-IRC frontends. The password
required to secure this command must be configured using the new
"WebircPassword" variable in the ngircd.conf file.
- Remove limit on max number of configured irc operators.
- A new channel mode "secure connections only" (+z) has been implemented:
Only clients using a SSL encrypted connection to the server are allowed
to join such a channel.
But please note three things: a) already joined clients are not checked
when setting this mode, b) IRC operators are always allowed to join
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 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
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
on the local server.
- Enforce upper limit on maximum number of handled commands. This implements
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)
- 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 14~rc1 (2009-03-29)
- Allow creation of persistent modeless channels.
- The INFO command reports the compile time now (if available).
- Support individual channel keys for pre-defined channels: introduce
new configuration variable "KeyFile" in [Channel] sections in ngircd.conf,
here a file can be configured for each pre-defined channel which contains
individual channel keys for different users.
- Remove limit on maximum number of predefined channels in ngircd.conf.
ngIRCd 13 (2008-12-25)
ngIRCd 13~rc1 (2008-11-21):
- New version number scheme :-)
- Initial support for IRC services, using a RFC1459 style interface,
tested with IRCServices (http://www.ircservices.za.net/) version 5.1.13.
For this to work, ngIRCd now supports server-server links conforming
to RFC 1459. New ngircd.conf(5) option: ServiceMask.
- Support for SSL-encrypted server-server and client-server links using
OpenSSL (configure: --with-openssl) or GNUTLS (configure: --with-gnutls).
New ngircd.conf(5) options: SSLPorts, SSLKeyFile, SSLKeyFilePassword,
SSLCertFile, SSLDHFile, and SSLConnect.
- Server local channels have been implemented, prefix "&", that are only
visible to users of the same server and are not visible in the network.
In addition ngIRCd creates a "special" channel &SERVER on startup and logs
all the messages to it that a user with mode +s receives.
- New make target "osxpkg" to build a Mac OS X installer package.
- New configuration option "NoIdent" to disable IDENT lookups even if the
daemon is compiled with IDENT support.
ngIRCd 0.12.1 (2008-07-09)
- Add option aliases -V (for --version) and -h (for --help).
- Make Listen parameter a comma-separated list of addresses. This also
obsoletes ListenIPv4 and ListenIPv6 options. If Listen is unset, it
is treated as Listen="::,0.0.0.0".
Note: ListenIPv4 and ListenIPv6 options are still recognized,
but ngircd will print a warning if they are used in the config file.
ngIRCd 0.12.0 (2008-05-13)
ngIRCd 0.12.0-pre2 (2008-04-29)
- IPv6: Add config options to disable ipv4/ipv6 support.
ngIRCd 0.12.0-pre1 (2008-04-20)
- Add IPv6 support.
- Install a LaunchDaemon script to start/stop ngIRCd on Mac OS X.
- Implemented IRC commands INFO, SUMMON (dummy), and USERS (dummy) and
enhanced test suite to check these commands. (Dana Dahlstrom)
- IRC_WHO now supports search patterns and will test this against user
nickname/server name/host name, etc. as required by RFC 2812, Section 3.6.1.
(reported by Dana Dahlstrom)
- Implement RFC 2812 handling of "0" argument to 'JOIN': must be treated
as if the user had sent PART commands for all channels the user is a
member of. (Dana Dahlstrom)
- Allow NOTICEs to be sent to a channel. (Fabian Schlager)
ngIRCd 0.11.0 (2008-01-15)
- Add support for /STAT u (server uptime) command.
- New [Server] configuration Option "Bind" allows to specify
the source IP address to use when connecting to remote server.
- New configuration option "MaxNickLength" to specify the allowed maximum
length of user nicknames. Note: must be unique in an IRC network!
- Numeric 317: implemented "signon time" (displayed in WHOIS result).
- Added new server configuration option "Passive" for "Server" blocks to
disable automatic outgoing connections (similar to -p option to ngircd,
but only for the specified server). (Tassilo Schweyer)
- Added support for the WALLOPS command. Usage is restricted to IRC
operators.
ngIRCd 0.10.2 (2007-06-08)
- Predefined channel configuration now allows specification of channel key
(mode k) and maximum user count (mode l): variables "Key" and "MaxUsers".
- When using the epoll() IO interface, compile in the select() interface as
well and fall back to it when epoll() isn't available on runtime.
- Added support for IO APIs "poll()" and "/dev/poll".
ngIRCd 0.10.1 (2006-12-17)
- Allow PASS syntax defined in RFC 1459 for server links, too.
- New configuration option "PredefChannelsOnly": if set, clients can only
join predefined channels.
ngIRCd 0.10.0 (2006-10-01)
ngIRCd 0.10.0-pre1 (2006-08-02)
- Enhanced DIE to accept a single parameter ("comment text") which is sent
to all locally connected clients before the server goes down.
- JOIN now supports more than one channel key at a time.
- Implemented numeric "333": Time and user name who set a channel topic.
- Channel topics are no longer limited to 127 characters: now the only limit
is the maximum length of an IRC command, i. e. 512 bytes (in practice, this
limits the topic to about 490 characters due to protocol overhead).
- Reverse DNS lookup code now checks the result by doing an additional
lookup to prevent spoofing.
- Added new IO layer which (optionally) supports epoll() and kqueue() in
addition to the select() interface.
ngIRCd 0.9.0 (2005-07-24)
- Never run with root privileges but always switch the user ID.
- Make "netsplit" messages RFC compliant.
- Implemented the IRC function "WHOWAS".
- New configuration option "OperServerMode" to enable a workaround needed
when running an network with ircd2 servers and "OperCanUseMode" enabled
to prevent the ircd2 daemon to drop mode changes of IRC operators.
Patch by Florian Westphal, <westphal@foo.fh-furtwangen.de>.
- Implemented support for "secret channels" (channel mode "s").
- New configuration option "Mask" for [Operator] sections to limit OPER
commands to users with a specific IRC mask. Patch from Florian Westphal.
- New configuration variable "PidFile", section "[Global]": if defined,
the server writes its process ID (PID) to this file. Default: off.
Idea of Florian Westphal, <westphal@foo.fh-furtwangen.de>.
- Added support for the Howl (http://www.porchdogsoft.com/products/howl/)
Rendezvous API, in addition to the API of Apple (Mac OS X). The available
API will be autodetected when you call "./configure --with-rendezvous".
ngIRCd 0.8.0 (2004-06-26)
ngIRCd 0.8.0-pre1 (2004-05-07)
- Two new configuration options: "ChrootDir" and "MotdPhrase", thanks to
Benjamin Pineau <ben@zouh.org>. Now you can force the daemon to change
@@ -949,7 +33,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.
@@ -968,15 +52,15 @@ ngIRCd 0.7.0 (2003-05-01)
- Added support for TCP Wrappers library: pass "--with-tcp-wrappers" to
configure to enable it.
- Changed some configure options to use "--with"/"--without" as prefix
instead of "--enable"/"--disable": "--without-syslog", "--without-zlib",
insetead of "--enable"/"--disable": "--without-syslog", "--without-zlib",
"--with-tcp-wrappers", and "--with-rendezvous".
- Enhanced manual pages ngircd(8) and ngircd.conf(5).
- 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.
@@ -990,7 +74,7 @@ ngIRCd 0.6.0, 24.12.2002
ausgehende Verbindung zu diesem auufzubauen. Dadurch kann nun auf beiden
Servern in der Konfiguration ein Port fuer den Connect konfiguriert
werden (beide Server versuchen sich dann gegenseitig zu connectieren).
- Server identifizieren sich nun mit asynchronen Passwoertern, d.h. das
- Server identifizieren sich nun mit asyncronen Passwoertern, d.h. das
Passwort, welches A an B schickt, kann ein anderes sein als das, welches
B als Antwort an A sendet. In der Konfig.-Datei, Abschnitt "Server",
wurde "Password" dazu durch "MyPassword" und "PeerPassword" ersetzt.
@@ -1016,7 +100,7 @@ ngIRCd 0.5.0, 20.09.2002
Konfiguration "sample-ngircd.conf") und bleiben auch dann bestehen,
wenn kein User mehr im Channel ist.
- neue IRC-Befehle: KICK, INVITE, ADMIN, CHANINFO; LIST wurde erweitert.
Mit dem neuen Befehl CHANINFO synchronisieren Server, die das IRC+-
Mit dem neuen Befehl CHANINFO syncronisieren Server, die das IRC+-
Protokoll unterstuetzen, Channel-Modes und Topics. Fuer den ADMIN-Befehl
gibt es neue Konfigurationsoptionen (Sektion "Global"): "AdminInfo1",
"AdminInfo2" und "AdminEMail".
@@ -1102,3 +186,7 @@ ngIRCd 0.0.2, 06.01.2002
ngIRCd 0.0.1, 31.12.2001
- erste oeffentliche Version von ngIRCd als "public preview" :-)
--
$Id: NEWS,v 1.64.2.2 2004/05/07 11:56:19 alex Exp $

87
README Normal file
View File

@@ -0,0 +1,87 @@
ngIRCd - Next Generation IRC Server
(c)2001-2004 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.
-- README --
Ilja Osthoff, <ilja@glide.ath.cx>
I. Introduction
~~~~~~~~~~~~~~~
ngIRCd is an Open-Source server for the Internet Relay Chat (IRC), which
is developed and published under the terms of the GNU General Public
Licence (URL: http://www.gnu.org/licenses/gpl.html). ngIRCd means "next
generation IRC daemon", it's written from scratch and not deduced from the
"grandfather of IRC daemons", the daemon of the IRCNet.
II. Status
~~~~~~~~~~~
At present, the ngIRCd is under active development, some features are not
implemented, some only partly.
Till today (more or less complete) implemented IRC-commands:
ADMIN, AWAY, CHANINFO, CONNECT, DIE, DISCONNECT, ERROR, HELP, INVITE, ISON,
JOIN, KICK, KILL, LINKS, LIST, LUSERS, MODE, MOTD, NAMES, NICK, NJOIN,
NOTICE, OPER, PART, PASS, PING, PONG, PRIVMSG, QUIT, REHASH, RESTART, SERVER,
SQUIT, STATS, TIME, TOPIC, TRACE, USER, USERHOST, VERSION, WHO, WHOIS.
III. Features (or: why use ngIRCd?)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- no problems with servers which have dynamic IP addresses
- simple, easy understandable configuration file,
- freely published open-source C source code,
- ngIRCd will be developed on in the future.
- supported platforms (tested versions): AIX (3.2.5), A/UX (3.0.1), FreeBSD
(4.5), HP-UX (10.20), IRIX (6.5), Linux (2.x), Mac OS X (10.x), NetBSD
(1.5.2/i386, 1.5.3/m68k), Solaris (2.5.1, 2.6), Windows with Cygwin, and
OpenBSD (3.4/i386).
IV. Documentation
~~~~~~~~~~~~~~~~~
More documentation can be found in the "doc/" directory and the homepage of
the ngIRCd: <http://arthur.ath.cx/~alex/ngircd/>.
V. Download
~~~~~~~~~~~
The homepage of the ngIRCd is: <http://arthur.ath.cx/~alex/ngircd>; 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 "CVS" on the homepage and
the file "doc/CVS.txt" which describes the use of CVS, the "Concurrent
Versioning System".
VI. Bugs
~~~~~~~~
If you find bugs in the ngIRCd (which might be there :-), please report
them at the following URL:
<http://arthur.ath.cx/~alex/ngircd/#bugs>
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: <alex@barton.de> or <alex@arthur.ath.cx>
--
$Id: README,v 1.18.2.1 2004/05/07 11:24:17 alex Exp $

101
README.md
View File

@@ -1,101 +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 and runs as a single-node server or can
be part of a network of ngIRCd servers in a LAN or across the internet. It
optionally supports the IPv6 protocol, SSL/TLS-protected client-server and
server-server links, the Pluggable Authentication Modules (PAM) system for user
authentication, IDENT requests, and character set conversion for legacy
clients.
The name ngIRCd stands for *next-generation IRC daemon*, which is a little bit
exaggerated: *lightweight Internet Relay Chat server* most probably would have
been a better name :-)
## Status
Development of *ngIRCd* started back in 2001: The server has been written from
scratch in C, tries to follow all relevant standards, and is not based on the
forefather, the daemon of the IRCNet.
It is not the goal of ngIRCd to implement all the nasty behaviors of the
original `ircd` or corner-cases in the RFCs, but to implement most of the useful
commands and semantics that are used by existing clients.
*ngIRCd* is used as the daemon in real-world in-house and public IRC networks
and included in the package repositories of various operating systems.
## Advantages and strengths
- 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 WSL or Cygwin.
## Documentation
The **homepage** of the ngIRCd project is <https://ngircd.barton.de>.
The `INSTALL.md` document describes how to _install_ and _upgrade_ ngIRCd. It
is included in all distribution archives and available online on
[GitHub](https://github.com/ngircd/ngircd/blob/master/INSTALL.md).
Please see the file `doc/QuickStart.md` in the `doc/` directory or on
[GitHub](https://github.com/ngircd/ngircd/blob/master/doc/QuickStart.md) for
information about _setting up_ and _running_ ngIRCd, including some real-world
configuration examples.
More information can be found in a couple of files in the `doc/` directory
(online on [GitHub](https://github.com/ngircd/ngircd/tree/master/doc)) and in
the [documentation section](https://ngircd.barton.de/documentation) on the
[homepage of ngIRCd](https://ngircd.barton.de).
In addition, ngIRCd comes with two _manual pages_: `ngircd(8)` (for the daemon)
and `ngircd.conf(5)` (for its configuration file). They have even more details
and list all possible command line parameters and configuration options. You
can read them with the `man` command (when they are installed locally on your
system, e.g. `man 8 ngircd` and `man 5 ngircd.conf`) or online here:
- Daemon:
[ngircd(8)](https://ngircd.barton.de/man/ngircd.8.html)
- Configuration file:
[ngircd.conf(5)](https://ngircd.barton.de/man/ngircd.conf.5.html)
## 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/ngircd/ngircd)
if you are interested in the latest development code.
## 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@lists.barton.de>
See <https://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

View File

@@ -1,7 +1,7 @@
#!/bin/sh
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2004 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,18 +9,16 @@
# (at your option) any later version.
# Please read the file COPYING, README and AUTHORS for more information.
#
# Usage:
# [VAR=<value>] ./autogen.sh [<configure-args>]
# $Id: autogen.sh,v 1.12 2004/04/05 12:02:21 alex Exp $
#
#
# Usage: [VAR=<value>] ./autogen.sh [<configure-args>]
#
# This script generates the ./configure script using GNU automake and
# GNU autoconf. It tries to be smart in finding the correct/usable/available
# installed versions of these tools on your system.
#
# In addition, it enables or disables the "de-ANSI-fication" support of GNU
# automake, which is supported up to autoconf 1.11.x an has been removed
# in automake 1.12 -- make sure to use a version of automake supporting it
# when generating distribution archives!
#
# The following strategy is used for each of aclocal, autoheader, automake,
# and autoconf: first, "tool" (the regular name of the tool, e. g. "autoconf"
# or "automake") is checked. If this fails, "tool<major><minor>" (for example
@@ -60,58 +58,38 @@
# and runs it with these arguments: "./configure --prefix=$HOME".
#
Check_Tool()
{
searchlist="$1"
major="$2"
minor="$3"
for name in $searchlist; do
$EXIST "${name}${major}${minor}" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "${name}${major}${minor}"
return 0
fi
$EXIST "${name}-${major}.${minor}" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "${name}-${major}.${minor}"
return 0
fi
done
return 1
}
Search()
{
[ $# -lt 2 ] && return 1
[ $# -gt 3 ] && return 1
[ $# -eq 2 ] || exit 1
searchlist="$1"
major="$2"
minor_pref="$3"
minor=99
[ -n "$PREFIX" ] && searchlist="${PREFIX}/$1 ${PREFIX}/bin/$1 $searchlist"
if [ -n "$minor_pref" ]; then
Check_Tool "$searchlist" "$major" "$minor_pref" && return 0
fi
for name in $searchlist; do
$EXIST "${name}" >/dev/null 2>&1
if [ $? -eq 0 ]; then
"${name}" --version 2>&1 \
| grep -v "environment variable" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "${name}"
return 0
fi
echo "${name}"
return 0
fi
done
while [ $minor -ge 0 ]; do
Check_Tool "$searchlist" "$major" "$minor" && return 0
minor=$(expr $minor - 1)
for name in $searchlist; do
$EXIST "${name}${major}${minor}" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "${name}${major}${minor}"
return 0
fi
$EXIST "${name}-${major}.${minor}" >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "${name}-${major}.${minor}" >/dev/null 2>&1
return 0
fi
done
minor=`expr $minor - 1`
done
return 1
}
@@ -119,17 +97,10 @@ 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 \"$*\" ..."
"$@"
}
# Reset locale settings to suppress warning messages of Perl
unset LC_ALL
unset LANG
@@ -153,100 +124,54 @@ if [ -z "$EXIST" ]; then
fi
[ "$VERBOSE" = "1" ] && echo "Using \"$EXIST\" to test for tools."
# We want to use GNU automake 1.7, if available (WANT_AUTOMAKE is used by
# the wrapper scripts of Gentoo Linux):
WANT_AUTOMAKE=1.7
export WANT_AUTOMAKE
# Try to detect the needed tools when no environment variable already
# specifies one:
echo "Searching for required tools ..."
[ -z "$ACLOCAL" ] && ACLOCAL=$(Search aclocal 1 11)
[ "$VERBOSE" = "1" ] && echo " - ACLOCAL=$ACLOCAL"
[ -z "$AUTOHEADER" ] && AUTOHEADER=$(Search autoheader 2)
[ "$VERBOSE" = "1" ] && echo " - AUTOHEADER=$AUTOHEADER"
[ -z "$AUTOMAKE" ] && AUTOMAKE=$(Search automake 1 11)
[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE=$AUTOMAKE"
[ -z "$AUTOCONF" ] && AUTOCONF=$(Search autoconf 2)
[ "$VERBOSE" = "1" ] && echo " - AUTOCONF=$AUTOCONF"
# spezifies one:
echo "Searching tools ..."
[ -z "$ACLOCAL" ] && ACLOCAL=`Search aclocal 1`
[ "$VERBOSE" = "1" ] && echo "ACLOCAL=$ACLOCAL"
[ -z "$AUTOHEADER" ] && AUTOHEADER=`Search autoheader 2`
[ "$VERBOSE" = "1" ] && echo "AUTOHEADER=$AUTOHEADER"
[ -z "$AUTOMAKE" ] && AUTOMAKE=`Search automake 1`
[ "$VERBOSE" = "1" ] && echo "AUTOMAKE=$AUTOMAKE"
[ -z "$AUTOCONF" ] && AUTOCONF=`Search autoconf 2`
[ "$VERBOSE" = "1" ] && echo "AUTOCONF=$AUTOCONF"
AUTOCONF_VERSION=$(echo "$AUTOCONF" | cut -d'-' -f2-)
[ -n "$AUTOCONF_VERSION" ] && [ "$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" ] \
&& 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
# Call ./configure when parameters have been passed to this script and
# GO isn't already defined.
[ -z "$GO" -a $# -gt 0 ] && GO=1
# Verify that all tools have been found
command -v pkg-config >/dev/null || Notfound pkg-config
[ -z "$ACLOCAL" ] && Notfound aclocal
[ -z "$AUTOCONF" ] && Notfound autoconf
[ -z "$AUTOHEADER" ] && Notfound autoheader
[ -z "$AUTOMAKE" ] && Notfound automake
[ -z "$AUTOCONF" ] && Notfound autoconf
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"
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
# 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
DEANSI_START=""
DEANSI_END=""
else
# automake >= 1.12 => no de-ANSI-fication support available
echo " - Disabling de-ANSI-fication support."
sed -e "s|^__ng_PROTOTYPES__|AC_C_PROTOTYPES|g" configure.ng >configure.ac
DEANSI_START="#"
DEANSI_END=" (disabled by ./autogen.sh script)"
fi
# Serial test harness?
if [ "$AM_MAJOR" -eq "1" ] && [ "$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")
sed -e "s|^__ng_Makefile_am_template__|AUTOMAKE_OPTIONS = ${SERIAL_TESTS} ${DEANSI_START}../portab/ansi2knr${DEANSI_END}|g" \
$makefile_ng >$makefile_am
done
export ACLOCAL AUTOHEADER AUTOMAKE AUTOCONF
export AUTOCONF AUTOHEADER AUTOMAKE AUTOCONF
# Generate files
echo "Generating files using \"$AUTOCONF\" and \"$AUTOMAKE\" ..."
Run $ACLOCAL && \
Run $AUTOCONF && \
Run $AUTOHEADER && \
Run $AUTOMAKE --add-missing --no-force
echo "Generating files ..."
$ACLOCAL && \
$AUTOHEADER && \
$AUTOMAKE --add-missing && \
$AUTOCONF
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)
if [ "$GO" = "1" ]; then
[ -n "$PREFIX" ] && p=" --prefix=$PREFIX" || p=""
c="./configure${p}${CONFIGURE_ARGS}"
echo "Okay, autogen.sh for $NAME done."
[ -n "$*" ] && a=" $*" || a=""
c="./configure${p}${a}"
echo "Calling \"$c\" ..."
$c
exit $?
else
echo "Okay, autogen.sh for $NAME done."
echo "Now run the \"./configure\" script."
echo "Okay, autogen.sh done; now run the \"configure\" script."
exit 0
fi
else

2045
config.guess vendored Executable file → Normal file

File diff suppressed because it is too large Load Diff

2825
config.sub vendored Executable file → Normal file

File diff suppressed because it is too large Load Diff

365
configure.in Normal file
View File

@@ -0,0 +1,365 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2004 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
# 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.
#
# $Id: configure.in,v 1.102.2.1 2004/05/07 11:56:19 alex Exp $
#
# -- Initialisation --
AC_PREREQ(2.50)
AC_INIT(ngircd, 0.8.0-pre1)
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE(1.6)
AM_CONFIG_HEADER(src/config.h)
# -- Templates for config.h --
AH_TEMPLATE([DEBUG], [Define if debug-mode should be enabled])
AH_TEMPLATE([HAVE_socklen_t], [Define if socklen_t exists])
AH_TEMPLATE([SNIFFER], [Define if IRC sniffer should be enabled])
AH_TEMPLATE([STRICT_RFC], [Define if ngIRCd should behave strict RFC compliant])
AH_TEMPLATE([SYSLOG], [Define if syslog should be used for logging])
AH_TEMPLATE([ZLIB], [Define if zlib compression should be enabled])
AH_TEMPLATE([TCPWRAP], [Define if TCP wrappers should be used])
AH_TEMPLATE([IRCPLUS], [Define if IRC+ protocol should be used])
AH_TEMPLATE([RENDEZVOUS], [Define if Rendezvous support should be included])
AH_TEMPLATE([IDENTAUTH], [Define if the server should do IDENT requests])
AH_TEMPLATE([TARGET_OS], [Target operating system name])
AH_TEMPLATE([TARGET_VENDOR], [Target system vendor])
AH_TEMPLATE([TARGET_CPU], [Target CPU name])
# -- C Compiler --
AC_PROG_CC
# -- Helper programs --
AC_PROG_AWK
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_RANLIB
# -- Compiler Features --
AM_C_PROTOTYPES
AC_C_CONST
# -- 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"
fi
case "$target_os" in
hpux*)
# This is HP/UX, we need to define _XOPEN_SOURCE_EXTENDED
# (tested with HP/UX 11.11)
CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED"
;;
esac
# Add additional CFLAGS, eventually specified on the command line:
test -n "$CFLAGS_ADD" && CFLAGS="$CFLAGS $CFLAGS_ADD"
CFLAGS="$CFLAGS -DSYSCONFDIR='\"\$(sysconfdir)\"'"
# -- Headers --
AC_HEADER_STDC
AC_HEADER_TIME
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS([ \
ctype.h errno.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!]))
AC_CHECK_HEADERS([arpa/inet.h ctype.h malloc.h stdint.h varargs.h])
# -- Datatypes --
AC_MSG_CHECKING(whether socklen_t exists)
AC_TRY_COMPILE([
#include <sys/socket.h>
#include <sys/types.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_SIGNAL
AC_TYPE_SIZE_T
# -- Libraries --
AC_CHECK_LIB(UTIL,memmove)
AC_CHECK_LIB(socket,bind)
AC_CHECK_LIB(nsl,gethostent)
# -- Functions --
AC_FUNC_FORK
AC_FUNC_STRFTIME
AC_CHECK_FUNCS([ \
bind gethostbyaddr gethostbyname gethostname inet_ntoa malloc memmove \
memset realloc setsid setsockopt socket strcasecmp strchr strerror \
strstr waitpid],,AC_MSG_ERROR([required function missing!]))
AC_CHECK_FUNCS(inet_aton isdigit sigaction snprintf vsnprintf strlcpy strlcat)
AC_CHECK_FUNCS(select,[AC_CHECK_HEADERS(sys/select.h)],
AC_MSG_ERROR([required function select() is missing!])
)
# -- Configuration options --
x_syslog_on=no
AC_ARG_WITH(syslog,
[ --without-syslog disable syslog (autodetected by default)],
[ if test "$withval" = "yes"; then
AC_CHECK_LIB(be, syslog)
AC_CHECK_FUNCS(syslog, x_syslog_on=yes,
AC_MSG_ERROR([Can't enable syslog!])
)
fi
],
[
AC_CHECK_LIB(be, syslog)
AC_CHECK_FUNCS(syslog, x_syslog_on=yes)
]
)
if test "$x_syslog_on" = "yes"; then
AC_DEFINE(SYSLOG, 1)
AC_CHECK_HEADERS(syslog.h)
fi
x_zlib_on=no
AC_ARG_WITH(zlib,
[ --without-zlib disable zlib compression (autodetected by default)],
[ if test "$withval" = "yes"; then
AC_CHECK_LIB(z, deflate)
AC_CHECK_FUNCS(deflate, x_zlib_on=yes,
AC_MSG_ERROR([Can't enable zlib!])
)
fi
],
[ AC_CHECK_LIB(z, deflate)
AC_CHECK_FUNCS(deflate, x_zlib_on=yes)
]
)
if test "$x_zlib_on" = "yes"; then
AC_DEFINE(ZLIB, 1)
AC_CHECK_HEADERS(zlib.h)
fi
x_tcpwrap_on=no
AC_ARG_WITH(tcp-wrappers,
[ --with-tcp-wrappers enable TCP wrappers support],
[ if test "$withval" = "yes"; then
AC_CHECK_LIB(wrap, tcpd_warn)
AC_MSG_CHECKING(for hosts_access)
AC_TRY_LINK([
#include <tcpd.h>
],[
void *ptr;
ptr = hosts_access;
],[
AC_MSG_RESULT(yes)
AC_DEFINE(TCPWRAP, 1)
x_tcpwrap_on=yes
],[
AC_MSG_RESULT(no)
AC_MSG_ERROR([Can't enable TCP wrappers!])
])
fi
]
)
x_rendezvous_on=no
AC_ARG_WITH(rendezvous,
[ --with-rendezvous enable support for "Rendezvous"],
[ if test "$withval" = "yes"; then
AC_CHECK_FUNCS(DNSServiceRegistrationCreate, x_rendezvous_on=yes,
AC_MSG_ERROR([Can't enable Rendezvous!])
)
fi
]
)
if test "$x_rendezvous_on" = "yes"; then
AC_DEFINE(RENDEZVOUS, 1)
AC_CHECK_HEADERS(DNSServiceDiscovery/DNSServiceDiscovery.h mach/port.h)
fi
x_identauth_on=no
AC_ARG_WITH(ident,
[ --with-ident enable "IDENT" ("AUTH") protocol support],
[ if test "$withval" = "yes"; then
AC_CHECK_LIB(ident, ident_id)
AC_CHECK_FUNCS(ident_id, x_identauth_on=yes,
AC_MSG_ERROR([Can't enable IDENT support!])
)
fi
]
)
if test "$x_identauth_on" = "yes"; then
AC_DEFINE(IDENTAUTH, 1)
AC_CHECK_HEADERS(ident.h)
fi
x_ircplus_on=yes
AC_ARG_ENABLE(ircplus,
[ --disable-ircplus disable IRC+ protocol],
if test "$enableval" = "no"; then x_ircplus_on=no; fi
)
if test "$x_ircplus_on" = "yes"; then
AC_DEFINE(IRCPLUS, 1)
fi
x_sniffer_on=no; x_debug_on=no
AC_ARG_ENABLE(sniffer,
[ --enable-sniffer enable IRC traffic sniffer (enables debug mode)],
if test "$enableval" = "yes"; then
AC_DEFINE(SNIFFER, 1)
x_sniffer_on=yes; x_debug_on=yes
fi
)
AC_ARG_ENABLE(debug,
[ --enable-debug show additional debug output],
if test "$enableval" = "yes"; then x_debug_on=yes; fi
)
if test "$x_debug_on" = "yes"; then
AC_DEFINE(DEBUG, 1)
test "$GCC" = "yes" && CFLAGS="-pedantic $CFLAGS"
fi
x_strict_rfc_on=no
AC_ARG_ENABLE(strict-rfc,
[ --enable-strict-rfc strict RFC conformance -- may break clients!],
if test "$enableval" = "yes"; then
AC_DEFINE(STRICT_RFC, 1)
x_strict_rfc_on=yes
fi
)
# -- Definitions --
AC_DEFINE_UNQUOTED(TARGET_CPU, "$target_cpu" )
AC_DEFINE_UNQUOTED(TARGET_VENDOR, "$target_vendor" )
AC_DEFINE_UNQUOTED(TARGET_OS, "$target_os" )
# Add additional CFLAGS, eventually specified on the command line, but after
# running this configure script. Useful for "-Werror" for example.
test -n "$CFLAGS_END" && CFLAGS="$CFLAGS $CFLAGS_END"
# -- Generate files --
AC_OUTPUT([ \
Makefile \
doc/Makefile \
src/Makefile \
src/portab/Makefile \
src/tool/Makefile \
src/ngircd/Makefile \
src/testsuite/Makefile \
man/Makefile \
contrib/Makefile \
contrib/Debian/Makefile \
contrib/MacOSX/Makefile \
])
type dpkg >/dev/null 2>&1
if test $? -eq 0; then
# Generate debian/ link if the dpkg command exists
# (read: if we are running on a debian compatible system)
echo "creating Debian-specific links ..."
test -f debian/rules || ln -s contrib/Debian debian
fi
# -- Result --
echo
echo "ngIRCd has been configured with the following options:"
echo
# Someone please show me a better way :) [borrowed by OpenSSH]
B=`eval echo ${bindir}` ; B=`eval echo ${B}`
S=`eval echo ${sbindir}` ; S=`eval echo ${S}`
C=`eval echo ${sysconfdir}` ; C=`eval echo ${C}`
M=`eval echo ${mandir}` ; M=`eval echo ${M}`
D=`eval echo ${datadir}/doc/${PACKAGE}` ; D=`eval echo ${D}`
echo " Target: ${target}"
test "$target" != "$host" && echo " Host: ${host}"
echo " Compiler: ${CC}"
test -n "$CFLAGS" && echo " Compiler flags: ${CFLAGS}"
test -n "$CPPFLAGS" && echo " Preprocessor flags: ${CPPFLAGS}"
test -n "$LDFLAGS" && echo " Linker flags: ${LDFLAGS}"
test -n "$LIBS" && echo " Libraries: ${LIBS}"
echo
echo " 'ngircd' binary: $S"
echo " Configuration file: $C"
echo " Manual pages: $M"
echo " Documentation: $D"
echo
echo $ECHO_N " Syslog support: $ECHO_C"
test "$x_syslog_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " Enable debug code: $ECHO_C"
test "$x_debug_on" = "yes" \
&& echo "yes" \
|| echo "no"
echo $ECHO_N " zlib compression: $ECHO_C"
test "$x_zlib_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " IRC sniffer: $ECHO_C"
test "$x_sniffer_on" = "yes" \
&& echo "yes" \
|| echo "no"
echo $ECHO_N " Use TCP Wrappers: $ECHO_C"
test "$x_tcpwrap_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " Strict RFC mode: $ECHO_C"
test "$x_strict_rfc_on" = "yes" \
&& echo "yes" \
|| echo "no"
echo $ECHO_N " Rendezvous support: $ECHO_C"
test "$x_rendezvous_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " IRC+ protocol: $ECHO_C"
test "$x_ircplus_on" = "yes" \
&& echo "yes" \
|| echo "no"
echo $ECHO_N " IDENT support: $ECHO_C"
test "$x_identauth_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo; echo
# -eof-

View File

@@ -1,850 +0,0 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2024 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.
#
define(VERSION_ID,esyscmd([
V=`git describe 2>/dev/null | sed -e 's/rel-//g' | sed -e 's/-/~/'`;
[ -z "$V" -a -r configure ] \
&& V=`grep "PACKAGE_STRING=" configure | cut -d"'" -f2 | cut -d' ' -f2`
( [ -n "$V" ] && echo "$V" || echo "??" ) | tr -d '\n';
]))
m4_ifdef([AM_SILENT_RULES],
[m4_define([ng_color_tests], [color-tests])],
[m4_define([ng_color_tests], [])])
# -- Initialisation --
AC_PREREQ([2.61])
AC_INIT([ngIRCd],[VERSION_ID],[ngircd@lists.barton.de],[ngircd],[https://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)
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
# -- Templates for config.h --
AH_TEMPLATE([DEBUG], [Define if debug-mode should be enabled])
AH_TEMPLATE([HAVE_sockaddr_in_len], [Define if sockaddr_in.sin_len exists])
AH_TEMPLATE([HAVE_socklen_t], [Define if socklen_t exists])
AH_TEMPLATE([ICONV], [Define if libiconv can be used, e.g. for CHARCONV])
AH_TEMPLATE([IDENTAUTH], [Define if the server should do IDENT requests])
AH_TEMPLATE([IRCPLUS], [Define if IRC+ protocol should be used])
AH_TEMPLATE([PAM], [Define if PAM should be used])
AH_TEMPLATE([SNIFFER], [Define if IRC sniffer should be enabled])
AH_TEMPLATE([STRICT_RFC], [Define if ngIRCd should behave strict RFC compliant])
AH_TEMPLATE([SYSLOG], [Define if syslog should be used for logging])
AH_TEMPLATE([TCPWRAP], [Define if TCP wrappers should be used])
AH_TEMPLATE([WANT_IPV6], [Define if IPV6 protocol should be enabled])
AH_TEMPLATE([ZLIB], [Define if zlib compression should be enabled])
AH_TEMPLATE([HOST_OS], [Target operating system name])
AH_TEMPLATE([HOST_VENDOR], [Target system vendor])
AH_TEMPLATE([HOST_CPU], [Target CPU name])
# -- C Compiler --
AC_PROG_CC
AC_PROG_CC_STDC
# -- Helper programs --
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
AC_PROG_AWK
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
AC_PROG_MKDIR_P
AC_PROG_RANLIB
# -- Compiler Features --
AC_C_CONST
AC_C_INLINE
__ng_PROTOTYPES__
# -- Function Definitions --
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
])
AC_DEFUN([WORKING_GETADDRINFO],[
AC_CHECK_FUNCS([getaddrinfo],[
AC_MSG_CHECKING([whether getaddrinfo() works])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>
int
main(int argc, char **argv)
{
struct addrinfo hints, *ai;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_PASSIVE;
hints.ai_socktype = SOCK_STREAM;
hints.ai_family = PF_UNSPEC;
if(getaddrinfo(NULL, "0", &hints, &ai) != 0)
return 1;
return 0;
}
]])],[
AC_DEFINE([HAVE_WORKING_GETADDRINFO], 1, [getaddrinfo(0)])
AC_MSG_RESULT(yes)
],[
AC_MSG_RESULT(no)
],[
AC_MSG_RESULT(no)
])
])
])
AC_DEFUN([GCC_W_NO_FORMAT_TRUNC],[
result=yes
AC_MSG_CHECKING([whether ${CC} accepts -Wno-format-truncation])
old_cflags="$CFLAGS"
CFLAGS="$CFLAGS -Werror -Wno-format-truncation"
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],[],[result=no])
echo $result
if test "X$result" = "Xyes"; then
CFLAGS="$old_cflags -Wno-format-truncation"
else
CFLAGS="$old_cflags"
fi
])
# -- 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"
GCC_STACK_PROTECT_CC
GCC_W_NO_FORMAT_TRUNC
fi
case "$host_os" in
hpux*)
# This is HP/UX, we need to define _XOPEN_SOURCE_EXTENDED
# (tested with HP/UX 11.11)
CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED"
;;
esac
# Add additional CFLAGS, eventually specified on the command line:
test -n "$CFLAGS_ADD" && CFLAGS="$CFLAGS $CFLAGS_ADD"
CFLAGS="$CFLAGS -DSYSCONFDIR='\"\$(sysconfdir)\"' -DDOCDIR='\"\$(docdir)\"'"
# -- Headers --
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
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 \
],,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 \
sys/resource.h \
sys/un.h \
varargs.h \
])
# -- Datatypes --
AC_MSG_CHECKING(whether socklen_t exists)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#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_SIZE_T
AC_TYPE_SSIZE_T
AC_TYPE_UID_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT8_T
AC_CHECK_MEMBER([struct sockaddr_in.sin_len], AC_DEFINE(HAVE_sockaddr_in_len),,
[#include <arpa/inet.h>])
# -- Libraries --
# memmove: A/UX libUTIL
AC_SEARCH_LIBS([memmove], [UTIL], [], [
AC_MSG_ERROR([unable to find the memmove() function])
])
# gethostbyname: Solaris libnsl
AC_SEARCH_LIBS([gethostbyname], [bind nsl network], [], [
AC_MSG_ERROR([unable to find the gethostbyname() function])
])
# bind: SVR4 libsocket
AC_SEARCH_LIBS([bind], [socket network], [], [
AC_MSG_ERROR([unable to find the bind() function])
])
# -- Functions --
AC_FUNC_FORK
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 \
],,
AC_MSG_ERROR([required function missing!]))
# Optional functions
AC_CHECK_FUNCS_ONCE([
arc4random \
arc4random_stir \
gai_strerror \
getnameinfo \
inet_aton \
setgroups \
setrlimit \
sigaction \
sigprocmask \
snprintf \
strdup \
strlcat \
strlcpy \
strndup \
strsignal \
strtok_r \
unsetenv \
vsnprintf \
waitpid \
])
WORKING_GETADDRINFO
# -- Configuration options --
# use syslog?
x_syslog_on=no
AC_ARG_WITH(syslog,
AS_HELP_STRING([--without-syslog],
[disable syslog (autodetected by default)]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes], [
AC_MSG_ERROR([Can't enable syslog!])
])
fi
],
[ AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes])
]
)
if test "$x_syslog_on" = "yes"; then
AC_DEFINE(SYSLOG, 1)
AC_CHECK_HEADERS(syslog.h,,AC_MSG_ERROR([required C header missing!]))
fi
# use zlib compression?
x_zlib_on=no
AC_ARG_WITH(zlib,
AS_HELP_STRING([--without-zlib],
[disable zlib compression (autodetected by default)]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_LIB(z, deflate)
AC_CHECK_FUNCS(deflate, x_zlib_on=yes,
AC_MSG_ERROR([Can't enable zlib!])
)
fi
],
[ AC_CHECK_LIB(z, deflate)
AC_CHECK_FUNCS(deflate, x_zlib_on=yes)
]
)
if test "$x_zlib_on" = "yes"; then
AC_DEFINE(ZLIB, 1)
AC_CHECK_HEADERS(zlib.h,,AC_MSG_ERROR([required C header missing!]))
fi
# detect which IO API to use:
x_io_backend=none
AC_ARG_WITH(select,
AS_HELP_STRING([--without-select],
[disable select IO support (autodetected by default)]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_FUNCS(select, x_io_select=yes,
AC_MSG_ERROR([Can't enable select IO support!])
)
fi
],
[
AC_CHECK_FUNCS(select, x_io_select=yes)
]
)
AC_ARG_WITH(poll,
AS_HELP_STRING([--without-poll],
[disable poll support (autodetected by default)]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_FUNCS(poll, [
AC_CHECK_HEADERS(poll.h,
x_io_backend=poll\(\),
AC_MSG_ERROR(
[Can't enable poll IO support!])
)
], [
AC_MSG_ERROR([Can't enable poll IO support!])
])
fi
],
[
AC_CHECK_FUNCS(poll, [
AC_CHECK_HEADERS(poll.h, x_io_backend=poll\(\))
])
]
)
AC_ARG_WITH(devpoll,
AS_HELP_STRING([--without-devpoll],
[disable /dev/poll IO support (autodetected by default)]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_HEADERS(sys/devpoll.h,,AC_MSG_ERROR([required C header missing!]))
fi
],
[
AC_CHECK_HEADERS(sys/devpoll.h, x_io_backend=/dev/poll)
]
)
AC_ARG_WITH(epoll,
AS_HELP_STRING([--without-epoll],
[disable epoll IO support (autodetected by default)]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_FUNCS(epoll_create, x_io_epoll=yes,
AC_MSG_ERROR([Can't enable epoll IO support!])
)
fi
],
[
AC_CHECK_FUNCS(epoll_create, x_io_epoll=yes)
]
)
AC_ARG_WITH(kqueue,
AS_HELP_STRING([--without-kqueue],
[disable kqueue IO support (autodetected by default)]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_FUNCS(kqueue, x_io_backend=kqueue\(\),
AC_MSG_ERROR([Can't enable kqueue IO support!])
)
fi
],
[
AC_CHECK_FUNCS(kqueue, x_io_backend=kqueue\(\))
]
)
if test "$x_io_epoll" = "yes" -a "$x_io_select" = "yes"; then
# when epoll() and select() are available, we'll use both!
x_io_backend="epoll(), select()"
else
if test "$x_io_epoll" = "yes"; then
# we prefere epoll() if it is available
x_io_backend="epoll()"
else
if test "$x_io_select" = "yes" -a "$x_io_backend" = "none"; then
# we'll use select, when available and no "better"
# interface has been detected ...
x_io_backend="select()"
fi
fi
fi
if test "$x_io_backend" = "none"; then
AC_MSG_ERROR([No useable IO API activated/found!?])
fi
# use SSL?
AC_ARG_WITH(openssl,
AS_HELP_STRING([--with-openssl],
[enable SSL support using OpenSSL]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
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_MSG_ERROR([Can't enable openssl])
)
fi
]
)
AC_ARG_WITH(gnutls,
AS_HELP_STRING([--with-gnutls],
[enable SSL support using gnutls]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_LIB(gnutls, gnutls_global_init)
AC_CHECK_FUNCS(gnutls_global_init, x_ssl_gnutls=yes,
AC_MSG_ERROR([Can't enable gnutls])
)
fi
]
)
x_ssl_lib="no"
if test "$x_ssl_gnutls" = "yes"; then
if test "$x_ssl_openssl" = "yes";then
AC_MSG_ERROR([Cannot enable both gnutls and openssl])
fi
x_ssl_lib=gnutls
fi
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
AC_ARG_WITH(tcp-wrappers,
AS_HELP_STRING([--with-tcp-wrappers],
[enable TCP wrappers support]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_MSG_CHECKING(for hosts_access)
saved_LIBS="$LIBS"
LIBS="-lwrap $LIBS"
LIBS_END="-lwrap $LIBS_END"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#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
],[
AC_MSG_RESULT(no)
AC_MSG_ERROR([Can't enable TCP wrappers!])
])
LIBS="$saved_LIBS"
fi
]
)
# do IDENT requests using libident?
x_identauth_on=no
AC_ARG_WITH(ident,
AS_HELP_STRING([--with-ident],
[enable "IDENT" ("AUTH") protocol support]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_LIB(ident, ident_id)
AC_CHECK_FUNCS(ident_id, x_identauth_on=yes,
AC_MSG_ERROR([Can't enable IDENT support!])
)
fi
]
)
if test "$x_identauth_on" = "yes"; then
AC_DEFINE(IDENTAUTH, 1)
AC_CHECK_HEADERS(ident.h,,AC_MSG_ERROR([required C header missing!]))
fi
# compile in PAM support?
x_pam_on=no
AC_ARG_WITH(pam,
AS_HELP_STRING([--with-pam],
[enable user authentication using PAM]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_LIB(pam, pam_authenticate)
AC_CHECK_FUNCS(pam_authenticate, x_pam_on=yes,
AC_MSG_ERROR([Can't enable PAM support!])
)
fi
]
)
if test "$x_pam_on" = "yes"; then
AC_DEFINE(PAM, 1)
AC_CHECK_HEADERS(security/pam_appl.h,pam_ok=yes)
if test "$pam_ok" != "yes"; then
AC_CHECK_HEADERS(pam/pam_appl.h,pam_ok=yes,
AC_MSG_ERROR([required C header missing!]))
fi
fi
# compile in IRC+ protocol support?
x_ircplus_on=yes
AC_ARG_ENABLE(ircplus,
AS_HELP_STRING([--disable-ircplus],
[disable IRC+ protocol]),
if test "$enableval" = "no"; then x_ircplus_on=no; fi
)
if test "$x_ircplus_on" = "yes"; then
AC_DEFINE(IRCPLUS, 1)
# Compile in iconv support?
# We only check for it when IRC+ is enabled, because the IRC+ command
# CHARCONV is the only function depending on it.
x_iconv_on=no
AC_ARG_WITH(iconv,
AS_HELP_STRING([--with-iconv],
[enable character conversion using libiconv]),
[ if test "$withval" != "no"; then
if test "$withval" != "yes"; then
CFLAGS="-I$withval/include $CFLAGS"
CPPFLAGS="-I$withval/include $CPPFLAGS"
LDFLAGS="-L$withval/lib $LDFLAGS"
fi
AC_CHECK_LIB(iconv, iconv_open)
AC_CHECK_FUNCS(iconv_open, x_iconv_on=yes)
if test "$x_iconv_on" != "yes"; then
AC_CHECK_LIB(iconv, libiconv_open)
AC_CHECK_FUNCS(libiconv_open, x_iconv_on=yes)
fi
if test "$x_iconv_on" != "yes"; then
AC_MSG_ERROR([Can't enable libiconv support!])
fi
fi ]
)
if test "$x_iconv_on" = "yes"; then
AC_DEFINE(ICONV, 1)
fi
fi
# enable support for IPv6?
x_ipv6_on=yes
AC_ARG_ENABLE(ipv6,
AS_HELP_STRING([--disable-ipv6],
[disable IPv6 protocol support (autodetected by default)]),
[ if test "$enableval" = "no"; then
x_ipv6_on=no
else
AC_CHECK_FUNCS(
[getaddrinfo getnameinfo],,
AC_MSG_ERROR([required function missing for IPv6 support!])
)
fi
],
[ AC_CHECK_FUNCS([getaddrinfo getnameinfo],, x_ipv6_on=no)
]
)
if test "$x_ipv6_on" = "yes"; then
AC_DEFINE(WANT_IPV6, 1)
fi
# compile in IRC "sniffer"?
x_sniffer_on=no; x_debug_on=no
AC_ARG_ENABLE(sniffer,
AS_HELP_STRING([--enable-sniffer],
[enable IRC traffic sniffer (enables debug mode)]),
if test "$enableval" = "yes"; then
AC_DEFINE(SNIFFER, 1)
x_sniffer_on=yes; x_debug_on=yes
fi
)
# enable additional debugging code?
AC_ARG_ENABLE(debug,
AS_HELP_STRING([--enable-debug],
[show additional debug output]),
if test "$enableval" = "yes"; then x_debug_on=yes; fi
)
if test "$x_debug_on" = "yes"; then
AC_DEFINE(DEBUG, 1)
test "$GCC" = "yes" && CFLAGS="-pedantic $CFLAGS"
AC_CHECK_FUNCS(mtrace)
fi
# enable "strict RFC rules"?
x_strict_rfc_on=no
AC_ARG_ENABLE(strict-rfc,
AS_HELP_STRING([--enable-strict-rfc],
[strict RFC conformance -- may break clients!]),
if test "$enableval" = "yes"; then
AC_DEFINE(STRICT_RFC, 1)
x_strict_rfc_on=yes
fi
)
# -- Definitions --
AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu" )
AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor" )
AC_DEFINE_UNQUOTED(HOST_OS, "$host_os" )
# Add additional CFLAGS, LDFLAGS and LIBS which were specified on the command
# line or by some tests from above, but after running this script. Useful for
# adding "-Werror", for example:
test -n "$CFLAGS_END" && CFLAGS="$CFLAGS $CFLAGS_END"
test -n "$LDFLAGS_END" && LDFLAGS="$LDFLAGS $LDFLAGS_END"
test -n "$LIBS_END" && LIBS="$LIBS $LIBS_END"
# -- Generate files --
AC_CONFIG_FILES([ \
Makefile \
contrib/Debian/Makefile \
contrib/Makefile \
doc/Makefile \
doc/src/Makefile \
man/Makefile \
src/ipaddr/Makefile \
src/Makefile \
src/ngircd/Makefile \
src/portab/Makefile \
src/testsuite/Makefile \
src/tool/Makefile \
])
AC_OUTPUT
type dpkg >/dev/null 2>&1
if test $? -eq 0; then
# Generate debian/ link if the dpkg command exists
# (read: if we are running on a debian compatible system)
echo "creating Debian-specific links ..."
if test ! -f debian/rules -a -f contrib/Debian/rules; then
ln -s contrib/Debian debian
fi
fi
# -- Result --
echo
echo "ngIRCd $PACKAGE_VERSION has been configured with the following options:"
echo
# Someone please show me a better way :) [borrowed by OpenSSH]
B=`eval echo ${bindir}` ; B=`eval echo ${B}`
S=`eval echo ${sbindir}` ; S=`eval echo ${S}`
C=`eval echo ${sysconfdir}` ; C=`eval echo ${C}`
M=`eval echo ${mandir}` ; M=`eval echo ${M}`
D=`eval echo ${docdir}` ; D=`eval echo ${D}`
echo " Host: ${host}"
echo " Compiler: ${CC}"
test -n "$CFLAGS" && echo " Compiler flags: ${CFLAGS}"
test -n "$CPPFLAGS" && echo " Preprocessor flags: ${CPPFLAGS}"
test -n "$LDFLAGS" && echo " Linker flags: ${LDFLAGS}"
test -n "$LIBS" && echo " Libraries: ${LIBS}"
echo
echo " 'ngircd' binary: $S"
echo " Configuration file: $C"
echo " Manual pages: $M"
echo " Documentation: $D"
echo
echo $ECHO_N " Syslog support: $ECHO_C"
test "$x_syslog_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " Enable debug code: $ECHO_C"
test "$x_debug_on" = "yes" \
&& echo "yes" \
|| echo "no"
echo $ECHO_N " zlib compression: $ECHO_C"
test "$x_zlib_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " IRC sniffer: $ECHO_C"
test "$x_sniffer_on" = "yes" \
&& echo "yes" \
|| echo "no"
echo $ECHO_N " Use TCP Wrappers: $ECHO_C"
test "$x_tcpwrap_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " Strict RFC mode: $ECHO_C"
test "$x_strict_rfc_on" = "yes" \
&& echo "yes" \
|| echo "no"
echo $ECHO_N " IDENT support: $ECHO_C"
test "$x_identauth_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " IRC+ protocol: $ECHO_C"
test "$x_ircplus_on" = "yes" \
&& echo "yes" \
|| echo "no"
echo $ECHO_N " IPv6 protocol: $ECHO_C"
test "$x_ipv6_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " I/O backend: $ECHO_C"
echo "$x_io_backend"
echo $ECHO_N " PAM support: $ECHO_C"
test "$x_pam_on" = "yes" \
&& echo $ECHO_N "yes $ECHO_C" \
|| echo $ECHO_N "no $ECHO_C"
echo $ECHO_N " SSL support: $ECHO_C"
echo "$x_ssl_lib"
echo $ECHO_N " libiconv support: $ECHO_C"
echo "$x_iconv_on"
echo
define(_automake_regex_,[[^AUTOMAKE_OPTIONS = [a-z .\-]*/portab/ansi2knr]])
if ! grep "_automake_regex_" src/ngircd/Makefile.am >/dev/null 2>&1; then
echo "WARNING:"
echo "This GNU automake generated build system does not support \"de-ANSI-fication\","
echo "therefore don't use it to generate \"official\" distribution archives!"
echo "(Most probably you want to use GNU automake 1.11.x for this purpose ...)"
echo
fi
# -eof-

View File

@@ -1,7 +0,0 @@
*.log
*.debhelper
*.substvars
debhelper-build-stamp
files
ngircd/
ngircd.service

View File

@@ -1,6 +1,6 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2003 by 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
@@ -8,23 +8,20 @@
# (at your option) any later version.
# Please read the file COPYING, README and AUTHORS for more information.
#
# $Id: Makefile.am,v 1.3 2004/01/13 01:10:11 alex Exp $
#
EXTRA_DIST = \
changelog \
control \
copyright \
ngircd.default \
ngircd.pam \
rules \
watch \
source/format
EXTRA_DIST = rules changelog compat control copyright \
ngircd.init ngircd.postinst
maintainer-clean-local:
rm -f Makefile Makefile.in
rm -f ngircd.postinst.debhelper ngircd.postrm.debhelper \
ngircd.prerm.debhelper ngircd.substvars
rm -f ngircd-full.postinst.debhelper ngircd-full.postrm.debhelper \
ngircd-full.prerm.debhelper ngircd-full.substvars
clean-local:
rm -f *.log *.debhelper *.substvars
rm -f debhelper-build-stamp files ngircd.service
rm -rf .debhelper/ ngircd/
rm -rf ngircd ngircd-full
rm -f files
# -eof-

View File

@@ -1,477 +1,3 @@
ngircd (27-0ab1) unstable; urgency=medium
* New "upstream" release: ngIRCd 27.
-- Alexander Barton <alex@barton.de> Fri, 26 Apr 2024 16:52:14 +0200
ngircd (27~rc1-0ab1) unstable; urgency=medium
* New "upstream" release candidate 1 for ngIRCd Release 27.
-- Alexander Barton <alex@barton.de> Sat, 13 Apr 2024 12:26:35 +0200
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)
in "ngircd-full" and "ngircd-full-dbg" packages.
* Don't adjust path names that are correct by default.
-- Alexander Barton <alex@barton.de> Mon, 14 Jul 2014 11:20:17 +0200
ngircd (21.1-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 21.1.
-- Alexander Barton <alex@barton.de> Tue, 25 Mar 2014 14:44:59 +0100
ngircd (21-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 21.
-- Alexander Barton <alex@barton.de> Wed, 30 Oct 2013 22:13:55 +0100
ngircd (21~rc2-0ab3) unstable; urgency=low
* Fix sed(1) rules adjusting "ngircd-full" package, error introduced
by last commit :-/
-- Alexander Barton <alex@barton.de> Sun, 20 Oct 2013 18:31:16 +0200
ngircd (21~rc2-0ab2) unstable; urgency=low
* Fix default "HelpFile" file name in ngircd.conf for "full" packages.
-- Alexander Barton <alex@barton.de> Sun, 20 Oct 2013 17:18:28 +0200
ngircd (21~rc2-0ab1) unstable; urgency=low
* New "upstream" release candidate 2 for ngIRCd Release 21.
-- Alexander Barton <alex@barton.de> Sun, 20 Oct 2013 15:50:03 +0200
ngircd (21~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 21.
-- Alexander Barton <alex@barton.de> Sat, 05 Oct 2013 23:24:09 +0200
ngircd (20.3-0ab1) unstable; urgency=high
* New "upstream" release, fixing a security related bug: ngIRCd 20.3.
-- Alexander Barton <alex@barton.de> Fri, 23 Aug 2013 21:53:21 +0200
ngircd (20.2-0ab1) unstable; urgency=high
* New "upstream" release, fixing a security related bug: ngIRCd 20.2.
-- Alexander Barton <alex@barton.de> Fri, 15 Feb 2013 12:17:00 +0100
ngircd (20.1-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 20.1.
-- Alexander Barton <alex@barton.de> Wed, 02 Jan 2013 22:37:26 +0100
ngircd (20-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 20.
-- Alexander Barton <alex@barton.de> Mon, 17 Dec 2012 13:04:15 +0100
ngircd (20~rc2-0ab1) unstable; urgency=low
* New "upstream" release candidate 2 for ngIRCd Release 20.
-- Alexander Barton <alex@barton.de> Sun, 02 Dec 2012 18:51:06 +0100
ngircd (20~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 20.
-- Alexander Barton <alex@barton.de> Sun, 11 Nov 2012 16:03:32 +0100
ngircd (19.2-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 19.2.
-- Alexander Barton <alex@barton.de> Tue, 19 Jun 2012 11:03:12 +0200
ngircd (19.2~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRC Release 19.2.
-- Alexander Barton <alex@barton.de> Wed, 13 Jun 2012 10:59:34 +0200
ngircd (19.1-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 19.1.
-- Alexander Barton <alex@barton.de> Mon, 19 Mar 2012 19:18:28 +0100
ngircd (19-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 19.
-- Alexander Barton <alex@barton.de> Wed, 29 Feb 2012 17:34:08 +0100
ngircd (19~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 19.
-- Alexander Barton <alex@barton.de> Sun, 12 Feb 2012 17:47:51 +0100
ngircd (18-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 18.
-- Alexander Barton <alex@barton.de> Sun, 10 Jul 2011 20:03:20 +0200
ngircd (18~rc2-0ab1) unstable; urgency=low
* New "upstream" release candidate 2 for ngIRCd Release 18.
-- Alexander Barton <alex@barton.de> Wed, 29 Jun 2011 10:20:51 +0200
ngircd (18~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 18.
-- Alexander Barton <alex@barton.de> Mon, 27 Jun 2011 22:58:36 +0200
ngircd (17.1-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 17.1.
-- Alexander Barton <alex@barton.de> Sun, 19 Dec 2010 15:56:42 +0100
ngircd (17-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 17.
-- Alexander Barton <alex@barton.de> Sun, 07 Nov 2010 17:23:07 +0100
ngircd (17~rc3-0ab1) unstable; urgency=low
* New "upstream" release candidate 3 for ngIRCd Release 17.
-- Alexander Barton <alex@barton.de> Wed, 27 Oct 2010 22:30:08 +0200
ngircd (17~rc2-0ab2) unstable; urgency=low
* Install /etc/pam.d/ngircd including "auth required pam_permit.so" when
installing -full or -full-dbg variant to keep backwards compatibility.
-- Alexander Barton <alex@barton.de> Tue, 26 Oct 2010 23:34:56 +0200
ngircd (17~rc2-0ab1) unstable; urgency=low
* New "upstream" release candidate 2 for ngIRCd Release 17.
-- Alexander Barton <alex@barton.de> Mon, 25 Oct 2010 18:51:15 +0200
ngircd (17~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 17.
-- Alexander Barton <alex@barton.de> Mon, 11 Oct 2010 16:57:47 +0200
ngircd (16-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 16.
-- Alexander Barton <alex@barton.de> Sun, 02 May 2010 13:32:41 +0200
ngircd (16~rc2-0ab1) unstable; urgency=low
* New "upstream" release candidate 2 for ngIRCd Release 16.
-- Alexander Barton <alex@barton.de> Sun, 25 Apr 2010 13:12:42 +0200
ngircd (16~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 16.
-- Alexander Barton <alex@barton.de> Thu, 25 Mar 2010 15:56:03 +0200
ngircd (15-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 15.
-- Alexander Barton <alex@barton.de> Thu, 7 Nov 2009 12:07:08 +0200
ngircd (15~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 15.
-- Alexander Barton <alex@barton.de> Thu, 15 Oct 2009 10:01:08 +0200
ngircd (14.1-0ab1) unstable; urgency=high
* New "upstream" release ngIRCd 14.1, fixing a security-related bug.
-- Alexander Barton <alex@barton.de> Tue, 5 May 2009 13:13:38 +0200
ngircd (14-0ab3) unstable; urgency=low
* Fixed "Conflicts:" line in debian/control: missing comma.
-- Alexander Barton <alex@barton.de> Mon, 4 May 2009 11:21:55 +0200
ngircd (14-0ab2) unstable; urgency=low
* Add new "ngircd-full-dbg" package including degug code and both
the --debug and --sniffer options, and containing debug symbols.
-- Alexander Barton <alex@barton.de> Wed, 29 Apr 2009 01:13:03 +0200
ngircd (14-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 14.
-- Alexander Barton <alex@barton.de> Mon, 20 Apr 2009 11:09:12 +0200
ngircd (14~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 14.
-- Alexander Barton <alex@barton.de> Sun, 29 Mar 2009 17:09:17 +0200
ngircd (13-0ab1) unstable; urgency=low
* New "upstream" release: ngIRCd 13.
-- Alexander Barton <alex@barton.de> Thu, 25 Dec 2008 23:09:58 +0100
ngircd (13~rc1-0ab1) unstable; urgency=low
* New "upstream" release candidate 1 for ngIRCd Release 13.
-- Alexander Barton <alex@barton.de> Fri, 21 Nov 2008 22:04:41 +0100
ngircd (0.12.1-0ab1+dev) unstable; urgency=low
* Update package for testing the new "upstream" features:
- Support for IRC services (see http://www.ircservices.za.net),
- Encrypted connections using GNU TLS (ngircd-full),
- Support for the IPv6 protocol (ngircd-full).
-- Alexander Barton <alex@barton.de> Fri, 03 Oct 2008 16:22:55 +0200
ngircd (0.12.1-0ab1) unstable; urgency=low
* New "upstream" release ngIRCd 0.12.1.
-- Alexander Barton <alex@barton.de> Wed, 9 Jul 2008 11:27:00 +0200
ngircd (0.12.0-0ab1) unstable; urgency=low
* New "upstream" release ngIRCd 0.12.0.
-- Alexander Barton <alex@barton.de> Tue, 13 May 2008 12:30:31 +0200
ngircd (0.12.0-0ab0-pre2) unstable; urgency=low
* Second prerelease of upcoming new "upstrem" release 0.12.0-pre1.
-- Alexander Barton <alex@barton.de> Tue, 29 Apr 2008 23:06:14 +0200
ngircd (0.12.0-0ab0-pre1) unstable; urgency=low
* Prereloease of upcoming new "upstrem" release 0.12.0-pre1.
-- Alexander Barton <alex@barton.de> Sun, 20 Apr 2008 15:43:34 +0200
ngircd (0.11.0-0ab0-pre2) unstable; urgency=low
* Second prerelease of upcoming new "upstream release".
-- Alexander Barton <alex@barton.de> Mon, 7 Jan 2008 15:32:42 +0100
ngircd (0.11.0-0ab0-pre1) unstable; urgency=low
* Prerelease of upcoming new "upstream release".
-- Alexander Barton <alex@barton.de> Wed, 2 Jan 2008 21:33:15 +0100
ngircd (0.10.4-0ab1) unstable; urgency=high
* New "upstream" release: 0.10.4 - fixing a security bug.
-- Alexander Barton <alex@barton.de> Mon, 7 Jan 2008 22:04:44 +0100
ngircd (0.10.0-0ab1) unstable; urgency=low
* New "upstream" release: 0.10.0
-- Alexander Barton <alex@barton.de> Sun, 1 Oct 2006 18:14:21 +0200
ngircd (0.10.0-0ab0-pre2-1) unstable; urgency=low
* Bumped standards version to 3.7.2.1.
* Added "Provides: ircd" to Debian control file.
-- Alexander Barton <alex@barton.de> Sun, 1 Oct 2006 16:25:33 +0200
ngircd (0.10.0-0ab0-pre2) unstable; urgency=low
* Second "upstream" prerelease of upcoming 0.10.0 release.
-- Alexander Barton <alex@barton.de> Sat, 9 Sep 2006 20:57:52 +0200
ngircd (0.10.0-0ab0-pre1) unstable; urgency=low
* Prerelease of upcoming new "upstream release".
-- Alexander Barton <alex@barton.de> Wed, 2 Aug 2006 12:01:07 +0200
ngircd (0.9.2-0ab1) unstable; urgency=low
* New "upstream release" fixing a few bugs in 0.9.1.
-- Alexander Barton <alex@barton.de> Sat, 15 Oct 2005 14:10:34 +0200
ngircd (0.9.1-0ab1) unstable; urgency=medium
* New "upstream release" addressing two problems in ngIRCd 0.9.0.
-- Alexander Barton <alex@barton.de> Wed, 3 Aug 2005 15:10:41 +0200
ngircd (0.9.0-0ab2) unstable; urgency=medium
* Init script: fixed a problem with symbolic links in runlevel directories
that could prevent the init script from working correctly.
-- Alexander Barton <alex@barton.de> Tue, 26 Jul 2005 21:31:18 +0200
ngircd (0.9.0-0ab1) unstable; urgency=low
* New "upstream release".
-- Alexander Barton <alex@Arthur.Ath.CX> Sat, 24 Jul 2005 23:30:00 +0200
ngircd (0.8.3-0ab1) unstable; urgency=high
* New "upstream release", including security fixes.
-- Alexander Barton <alex@Arthur.Ath.CX> Thu, 3 Feb 2005 10:41:55 +0100
ngircd (0.8.2-0ab1) unstable; urgency=high
* New "upstream release", including security fixes.
-- Alexander Barton <alex@Arthur.Ath.CX> Wed, 26 Jan 2005 23:14:12 +0100
ngircd (0.8.1-0ab1) unstable; urgency=low
* New "upstream release".
-- Alexander Barton <alex@Arthur.Ath.CX> Sat, 25 Dec 2004 01:18:32 +0100
ngircd (0.8.0-0ab2) unstable; urgency=low
* Added missing commas to debian control file, fixes bug #56.
Thanks to Kevin Otte.
-- Alexander Barton <alex@Arthur.Ath.CX> Thu, 15 Jul 2004 10:53:39 +0200
ngircd (0.8.0-0ab1) unstable; urgency=low
* New upstream version.
-- Alexander Barton <alex@Arthur.Ath.CX> Sat, 26 Jun 2004 11:25:59 +0200
ngircd (0.7.7+HEAD-0ab6) unstable; urgency=low
* Incorporated actual CVS HEAD version which includes all features of
version 0.8.0-pre1 and patches for the resolver and logger.
-- Alexander Barton <alex@Arthur.Ath.CX> Tue, 11 May 2004 02:18:50 +0200
ngircd (0.7.7+HEAD-0ab5) unstable; urgency=low
* Updates from CVS HEAD branch, most notably: "INVITE- and BAN-lists

1
contrib/Debian/compat Normal file
View File

@@ -0,0 +1 @@
4

View File

@@ -2,45 +2,46 @@ Source: ngircd
Section: net
Priority: optional
Maintainer: Alexander Barton <alex@barton.de>
Rules-Requires-Root: binary-targets
Build-Depends: debhelper-compat (= 13),
expect,
libident-dev,
libpam0g-dev,
libssl-dev,
libz-dev,
openssl,
procps,
telnet | telnet-ssl,
Standards-Version: 4.6.2
Homepage: https://ngircd.barton.de
Vcs-Browser: https://github.com/ngircd/ngircd
Vcs-Git: https://github.com/ngircd/ngircd.git
Build-Depends: debhelper (>> 4.0.0), libz-dev, libwrap-dev, libident-dev
Standards-Version: 3.5.8
Package: ngircd
Architecture: any
Depends:
${shlibs:Depends},
${misc:Depends},
Conflicts:
ircd,
Provides:
ircd,
Description: lightweight Internet Relay Chat (IRC) server
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).
Depends: ${shlibs:Depends} ${misc:Depends}
Description: A lightweight daemon for the Internet Relay Chat (IRC)
ngIRCd is a free open source daemon for the Internet Relay Chat (IRC)
network. It is written from scratch and is not based upon the original
IRCd like many others.
.
The server is quite easy to configure and runs as a single-node server or can
be part of a network of ngIRCd servers in a LAN or across the internet. It
optionally supports the IPv6 protocol, SSL/TLS-protected client-server and
server-server links, the Pluggable Authentication Modules (PAM) system for
user authentication, IDENT requests, and character set conversion for legacy
clients.
This package contains the "standard distribution", including support for
syslog logging and compressed server-links using zlib.
.
The name ngIRCd stands for next-generation IRC daemon, which is a little bit
exaggerated: lightweight Internet Relay Chat server most probably would have
been a better name :-)
Advantages of ngIRCd:
- no problems with servers using changing/non-static IP addresses.
- small and lean configuration file.
- free, modern and open source C code.
- still under active development.
.
This package is built with support for all optional features and uses the
OpenSSL library for SSL/TLS support.
ngIRCd is compatible to the "original" ircd 2.10.3p3, so you can run
mixed networks.
Package: ngircd-full
Architecture: any
Depends: ${shlibs:Depends} ${misc:Depends}
Conflicts: ngircd
Description: A lightweight daemon for the Internet Relay Chat (IRC)
ngIRCd is a free open source daemon for the Internet Relay Chat (IRC)
network. It is written from scratch and is not based upon the original
IRCd like many others.
.
This package includes support for TCP wrappers and IDENT requests in
addition to the features of the "standard package".
.
Advantages of ngIRCd:
- no problems with servers using changing/non-static IP addresses.
- small and lean configuration file.
- free, modern and open source C code.
- still under active development.
.
ngIRCd is compatible to the "original" ircd 2.10.3p3, so you can run
mixed networks.

View File

@@ -1,58 +1,13 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://ngircd.barton.de
Upstream-Name: ngircd
Upstream-Contact: ngIRCd Mailing List <ngircd@lists.barton.de>
This package was debianized by Alexander Barton <alex@barton.de> on
Tue, 20 May 2003 15:47:40 +0200.
Files:
*
Copyright:
2001-2024 Alexander Barton <alex@barton.de> and Contributors.
License: GPL-2.0+
Comment:
See /usr/share/doc/ngircd/AUTHORS.md for the full list of authors and
contributors.
It was downloaded from ftp://Arthur.Ath.CX/pub/Users/alex/ngircd/
Files:
contrib/de.barton.ngircd.metainfo.xml
Copyright:
2001-2024 Alexander Barton <alex@barton.de> and Contributors.
License: MIT
Comment:
See /usr/share/doc/ngircd/AUTHORS.md for the full list of authors and
contributors.
Upstream Author: Alexander Barton <alex@barton.de>
License: GPL-2.0+
This package 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.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>
Comment:
On Debian systems, the complete text of the GNU General
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
This software is copyright (c) 1999-2003 by Alexander Barton.
License: MIT
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
.
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
You are free to distribute this software under the terms of the
GNU General Public License.
On Debian systems, the complete text of the GNU General Public
License can be found in /usr/share/common-licenses/GPL file.

View File

@@ -1,7 +1,12 @@
#
# Defaults for the ngIRCd daemon
# Defaults for ngIRCd start and stop script
#
# $Id: ngircd.default,v 1.1 2003/12/31 17:20:11 alex Exp $
#
# Parameters to pass to the ngircd daemon on startup, see ngircd(8) for
# possible options (default: empty).
PARAMS=""
# -eof-

71
contrib/Debian/ngircd.init Executable file
View File

@@ -0,0 +1,71 @@
#!/bin/sh
#
# ngIRCd start and stop script for Debian-based systems
#
# $Id: ngircd.init,v 1.1 2003/12/31 17:20:11 alex Exp $
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/ngircd
NAME=ngIRCd
DESC="IRC daemon"
PARAMS=""
test -x $DAEMON || exit 0
test -f /etc/default/ngircd && . /etc/default/ngircd
Check_Config()
{
$DAEMON --configtest >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Configuration of $NAME is not valide, won't (re)start!"
echo "Please run \"$DAEMON --configtest\" manually and fix it up ..."
exit 1
fi
}
Try_Start()
{
start-stop-daemon --start --quiet --exec $DAEMON -- $PARAMS
if [ $? -ne 0 ]; then
echo "$NAME failed!"
exit 1
fi
echo "$NAME."
}
case "$1" in
start)
Check_Config
echo -n "Starting $DESC: "
Try_Start
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --exec $DAEMON \
&& echo "$NAME." \
|| echo "(none running)"
;;
reload|force-reload)
Check_Config
echo "Reloading $DESC configuration files."
start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON
;;
restart)
Check_Config
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --oknodo --exec $DAEMON
sleep 1
Try_Start
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0
# -eof-

View File

@@ -1,10 +0,0 @@
# /etc/pam.d/ngircd
# You have to adjust this configuration to your local setup and needs. Keep in
# mind that all PAM modules are run with the privileges of the user account the
# ngIRCd daemon runs as ("irc" by default, not root!), so you can't use PAM
# modules requiring root privileges (like pam_unix, for example)!
# Log and deny all connections to ngIRCd:
auth required pam_warn.so
auth required pam_deny.so

14
contrib/Debian/ngircd.postinst Executable file
View File

@@ -0,0 +1,14 @@
#!/bin/sh
#
# Debian post-installation script
# $Id: ngircd.postinst,v 1.1 2003/12/31 17:20:11 alex Exp $
#
if [ -f /etc/ngircd/ngircd.conf ]; then
# make sure that configuration file is not world readable
chmod o= /etc/ngircd/ngircd.conf
fi
#DEBHELPER#
# -eof-

View File

@@ -1,72 +1,156 @@
#!/usr/bin/make -f
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2003 by 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
# 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.
#
# debian/rules for ngIRCd
#
# $Id: rules,v 1.2 2004/01/01 22:24:48 alex Exp $
#
# Based on the sample debian/rules that uses debhelper,
# GNU copyright 1997 to 1999 by Joey Hess.
#
# See FEATURE AREAS in dpkg-buildflags(1).
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
%:
dh $@
# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
# Disable dh_autoreconf since we are using de-ANSI-fication which was removed
# from automake a while ago. See <https://github.com/ngircd/ngircd/issues/261>.
override_dh_autoreconf:
CFLAGS = -Wall -g
override_dh_auto_configure:
dh_auto_configure -- \
--host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \
--prefix=/usr \
--mandir=\$${prefix}/share/man \
--sysconfdir=/etc/ngircd \
--with-iconv \
--with-ident \
--with-openssl \
--with-pam \
--with-syslog \
--with-zlib
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
CFLAGS += -O2
endif
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
INSTALL_PROGRAM += -s
endif
execute_before_dh_auto_install:
ln -fs $(CURDIR)/contrib/ngircd.service $(CURDIR)/debian/ngircd.service
configure-ngircd: configure
dh_testdir
execute_after_dh_auto_install:
# Generate the default ngircd.conf:
install -o root -g irc -m 0640 -D /dev/null \
$(CURDIR)/debian/ngircd/etc/ngircd/ngircd.conf
sed \
-e "s|;ServerUID = 65534|ServerUID = irc|g" \
-e "s|;ServerGID = 65534|ServerGID = irc|g" \
-e "s|;PidFile = /var/run/ngircd/ngircd.pid|PidFile = /run/ircd/ngircd.pid|g" \
-e "s|;PAM = yes|PAM = no|g" \
-e "s|;\[SSL\]|[SSL]|g" \
-e "s|;CAFile = /etc/ssl/CA/cacert.pem|CAFile = /etc/ssl/certs/ca-certificates.crt|g" \
$(CURDIR)/debian/ngircd/usr/share/doc/ngircd/sample-ngircd.conf \
>>$(CURDIR)/debian/ngircd/etc/ngircd/ngircd.conf
# configure "standard" variant:
./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \
--prefix=/usr \
--sysconfdir=/etc/ngircd \
--mandir=\$${prefix}/share/man \
--with-syslog --with-zlib
# Create drop-in configuration directory:
install -o root -g irc -m 0750 -d \
$(CURDIR)/debian/ngircd/etc/ngircd/ngircd.conf.d
configure-ngircd-full: configure
dh_testdir
# Install an empty MOTD file.
install -o root -g irc -m 0640 -D /dev/null \
$(CURDIR)/debian/ngircd/etc/ngircd/ngircd.motd
# configure "full" variant:
./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \
--prefix=/usr \
--sysconfdir=/etc/ngircd \
--mandir=\$${prefix}/share/man \
--with-syslog --with-zlib --with-tcp-wrappers --with-ident
# Install the logcheck(8) configuration.
install -o root -g root -m 0644 -D \
$(CURDIR)/contrib/ngircd.logcheck \
$(CURDIR)/debian/ngircd/etc/logcheck/ignore.d.paranoid/ngircd
build:
dh_clean -k
# Install the fail2ban configuration.
install -o root -g root -m 0644 -D \
$(CURDIR)/contrib/ngircd-fail2ban.conf \
$(CURDIR)/debian/ngircd/etc/fail2ban/filter.d/ngircd.conf
build-ngircd: build-stamp-ngircd
build-stamp-ngircd: configure-ngircd
dh_testdir
rm -f build-stamp-*
# Make lintian happy :-)
rm $(CURDIR)/debian/ngircd/usr/share/doc/ngircd/COPYING
mv $(CURDIR)/debian/ngircd/usr/share/doc/ngircd/ChangeLog \
$(CURDIR)/debian/ngircd/usr/share/doc/ngircd/changelog
# Add here commands to compile the "standard" package:
$(MAKE)
override_dh_fixperms:
# Preserve the permissions of files installed in /etc/ngircd!
dh_fixperms -X/etc/ngircd
touch build-stamp-ngircd
override_dh_compress:
# The Commands.txt file is read by the daemon, don't compress it!
dh_compress -XCommands.txt
build-ngircd-full: build-stamp-ngircd-full
build-stamp-ngircd-full: configure-ngircd-full
dh_testdir
rm -f build-stamp-*
# Add here commands to compile the "full" package:
$(MAKE)
touch build-stamp-ngircd-full
clean:
dh_testdir
dh_testroot
rm -f build-stamp*
rm -f $(CURDIR)/debian/ngircd-full.default
rm -f $(CURDIR)/debian/ngircd-full.init
rm -f $(CURDIR)/debian/ngircd-full.postinst
# Add here commands to clean up after the build process:
-$(MAKE) clean
ifneq "$(wildcard /usr/share/misc/config.sub)" ""
cp -f /usr/share/misc/config.sub config.sub
endif
ifneq "$(wildcard /usr/share/misc/config.guess)" ""
cp -f /usr/share/misc/config.guess config.guess
endif
dh_clean
install: install-ngircd install-ngircd-full
install-ngircd: build-ngircd
dh_testdir
dh_testroot
dh_installdirs
# Add here commands to install the "standard" package into debian/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*
install-ngircd-full: build-ngircd-full
dh_testdir
dh_testroot
dh_installdirs
# Add here commands to install the "full" package into debian/ngircd-full:
$(MAKE) install DESTDIR=$(CURDIR)/debian/ngircd-full
rm $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd/INSTALL*
rm $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd/COPYING*
mv $(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd \
$(CURDIR)/debian/ngircd-full/usr/share/doc/ngircd-full
# Build architecture-independent files here.
binary-indep:
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-arch: build install
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
dh_testdir
dh_testroot
dh_installchangelogs -a -A ChangeLog
dh_installdocs -a
dh_installinit -a
dh_strip -a
dh_compress -a
dh_fixperms -a
dh_installdeb -a
dh_shlibdeps -a
dh_gencontrol -a
dh_md5sums -a
dh_builddeb -a
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install
# -eof-

View File

@@ -1 +0,0 @@
3.0 (quilt)

View File

@@ -1,10 +0,0 @@
# Watch control file for uscan.
# See uscan(1) for format.
# Compulsory line, this is a version 4 file.
version=4
# PGP signature mangle, so foo.tar.gz has foo.tar.gz.sig.
opts="pgpsigurlmangle=s%$%.sig%"
https://arthur.barton.de/pub/@PACKAGE@/@PACKAGE@-([0-9\.]+)@ARCHIVE_EXT@

View File

@@ -1,62 +0,0 @@
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors
# Build Container
FROM docker.io/library/debian:stable-slim AS build
USER root
RUN apt-get -y update \
&& apt-get -y install --no-install-recommends \
autoconf \
automake \
build-essential \
expect \
gawk \
git \
libgnutls28-dev \
libident-dev \
libpam0g-dev \
openssl \
pkg-config \
telnet \
zlib1g-dev \
&& mkdir -p /usr/local/src/ngircd /opt/ngircd \
&& chown bin:bin /usr/local/src/ngircd /opt/ngircd
WORKDIR /usr/local/src/ngircd
COPY . /usr/local/src/ngircd
RUN chown -R bin /usr/local/src/ngircd
USER bin
RUN ./autogen.sh --prefix=/opt/ngircd \
--with-gnutls \
--with-iconv \
--with-ident \
--with-pam \
&& make all \
&& make -C src/ngircd check \
&& make install \
&& printf \
"# ngircd.conf\n\n[Global]\nServerGID=irc\nServerUID=irc\n\n[Options]\nIdent=no\nPAM=no\n\n[SSL]\nCAFile=/etc/ssl/certs/ca-certificates.crt\n" \
>/opt/ngircd/etc/ngircd.conf \
&& chmod -R a+rX /opt/ngircd
# Run container
FROM docker.io/library/debian:stable-slim
USER root
RUN apt-get -y update \
&& apt-get -y install --no-install-recommends --no-install-suggests \
ca-certificates \
catatonit \
libgnutls30 \
libident \
libpam0g \
libwrap0 \
zlib1g \
&& apt-get -y clean \
&& rm -rf /var/cache/debconf/*-old /var/lib/apt/lists/*
COPY --from=build /opt/ngircd /opt/ngircd
USER irc
ENTRYPOINT [ "/usr/bin/catatonit", "--", "/opt/ngircd/sbin/ngircd", "--nodaemon" ]
EXPOSE 6667 6697
HEALTHCHECK --interval=30s --timeout=5s --retries=1 --start-period=5s \
CMD [ "/usr/bin/grep", "-F", ":1A0B ", "/proc/net/tcp" ]

View File

@@ -1,20 +1,17 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2016 Alexander Barton (alex@barton.de) and Contributors.
# Copyright (c)2001-2004 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
# 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.
#
# $Id: Makefile.am,v 1.1 2004/02/29 17:19:43 alex Exp $
#
# .editorconfig: Editor settings, see <http://editorconfig.org>.
clean-local:
rm -rf build
root = true
[*]
indent_style = tab
indent_size = 8
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
# -eof-

File diff suppressed because it is too large Load Diff

View File

@@ -1,31 +1,20 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2004 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
# 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.
# Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
# der GNU General Public License (GPL), wie von der Free Software Foundation
# herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
# der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
#
# $Id: Makefile.am,v 1.4 2004/04/28 12:18:02 alex Exp $
#
SUBDIRS = Debian
SUBDIRS = Debian MacOSX
EXTRA_DIST = README.md \
de.barton.ngircd.metainfo.xml \
de.barton.ngircd.plist \
Dockerfile \
ngindent.sh \
ngircd-bsd.sh \
ngircd-fail2ban.conf \
ngIRCd-Logo.gif \
ngircd-redhat.init \
ngircd.logcheck \
ngircd.service \
ngircd.socket \
ngircd.spec \
nglog.sh \
platformtest.sh
EXTRA_DIST = README ngircd.spec systrace.policy
maintainer-clean-local:
rm -f Makefile Makefile.in

27
contrib/README Normal file
View File

@@ -0,0 +1,27 @@
ngIRCd - Next Generation IRC Server
(c)2001-2004 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.
-- Contributions --
MacOSX/
- Project file for XCode "project builder" of Mac OS X.
Debian/
- Various files for building Debian packages.
ngircd.spec
- RPM "spec" file.
systrace.policy
- Systrace policy file for OpenBSD (and probably NetBSD).
--
$Id: README,v 1.1 2004/04/28 12:18:50 alex Exp $

View File

@@ -1,40 +0,0 @@
# [ngIRCd](https://ngircd.barton.de) - Supplemental Files
This `contrib/` directory contains the following sub-folders and files:
- `Debian/` folder: This subfolder contains the _rules_ file and additional
assets for building Debian packages.
- `de.barton.ngircd.metainfo.xml`: AppStream metadata file.
- `de.barton.ngircd.plist[.tmpl]`: launchd(8) property list file.
- `Dockerfile`: Container definition file, for Docker or Podman for example.
More information can be found in the `doc/Container.md` file.
- `ngindent.sh`: Script to indent the code of ngIRCd in the "standard way".
- `ngircd-bsd.sh`: Start/stop script for FreeBSD.
- `ngircd-fail2ban.conf`: fail2ban(1) filter configuration for ngIRCd.
- `ngircd-redhat.init`: Start/stop script for old(er) RedHat-based
distributions (like CentOS and Fedora), which did _not_ use systemd(8).
- `ngIRCd-Logo.gif`: The ngIRCd logo as GIF file.
- `ngircd.logcheck`: Sample rules for logcheck(8) to ignore "normal" log
messages of ngIRCd.
- `ngircd.service`: systemd(8) service unit configuration file.
- `ngircd.socket`: systemd(8) socket unit configuration file for "socket
activation".
- `ngircd.spec`: RPM "spec" file.
- `nglog.sh`: Script for colorizing the log messages of ngircd(8) according to
their log level. Example: `./src/ngircd/ngircd -n | ./contrib/nglog.sh`.
- `platformtest.sh`: Build ngIRCd and output a "result line" suitable for
the `doc/Platforms.txt` file.

View File

@@ -1,129 +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 and runs as a single-node server or can be part of a network of ngIRCd servers in a LAN or across the internet. It optionally supports the IPv6 protocol, SSL/TLS-protected client-server and server-server links, the Pluggable Authentication Modules (PAM) system for user authentication, IDENT requests, and character set conversion for legacy clients.</p>
<p>The name ngIRCd stands for 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="27" date="2024-04-26" />
<release version="27~rc1" date="2024-04-13" />
<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>

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>de.barton.ngIRCd</string>
<key>ProgramArguments</key>
<array>
<string>/opt/ngircd/sbin/ngircd</string>
<string>--nodaemon</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Library/Logs/ngIRCd.log</string>
<key>StandardOutPath</key>
<string>/Library/Logs/ngIRCd.log</string>
</dict>
</plist>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -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-

View File

@@ -1,51 +0,0 @@
#!/bin/sh
# PROVIDE: ngircd
# REQUIRE: NETWORKING SERVERS
# BEFORE: DAEMON
# KEYWORD: FreeBSD shutdown
# Add the following line to /etc/rc.conf to enable `ngircd':
#
#ngircd_enable="YES"
#
. "/etc/rc.subr"
name="ngircd"
rcvar=`set_rcvar`
command="/usr/local/sbin/ngircd"
command_args=""
load_rc_config "$name"
: ${ngircd_enable="NO"}
: ${ngircd_flags=""}
required_files="/usr/local/etc/$name.conf"
pidfile="${ngircd_pidfile:-/var/run/${name}/${name}.pid}"
if [ ! x"${ngircd_chrootdir}" = x ];then
# Mount a devfs in the chroot directory if needed
if [ ! -c ${ngircd_chrootdir}/dev/random \
-o ! -c ${ngircd_chrootdir}/dev/null ]; then
umount ${ngircd_chrootdir}/dev 2>/dev/null
mount_devfs devfs ${ngircd_chrootdir}/dev
fi
devfs -m ${ngircd_chrootdir}/dev rule apply hide
devfs -m ${ngircd_chrootdir}/dev rule apply path null unhide
devfs -m ${ngircd_chrootdir}/dev rule apply path random unhide
# Copy local timezone information if it is not up to date.
if [ -f /etc/localtime ]; then
cmp -s /etc/localtime "${named_chrootdir}/etc/localtime" || \
cp -p /etc/localtime "${named_chrootdir}/etc/localtime"
fi
pidfile="${ngircd_chrootdir}${pidfile}"
fi
run_rc_command "$1"
# -eof-

View File

@@ -1,25 +0,0 @@
# Fail2ban filter for ngIRCd
#
# Put into /etc/fail2ban/filter.d/ngircd.conf and enable in your jail.local
# configuration like this:
#
# [ngircd]
# enabled = true
# backend = systemd
#
[INCLUDES]
before = common.conf
[DEFAULT]
_daemon = ngircd
[Definition]
failregex = ^%(__prefix_line)sRefused connection from <ADDR> on socket \d+:
[Init]
journalmatch = _SYSTEMD_UNIT=ngircd.service + _COMM=ngircd

View File

@@ -1,119 +0,0 @@
#!/bin/sh
#
# ngIRCd start and stop script for RedHat based distributions.
# Written by Naoya Nakazawa <naoya.n@gmail.com> for CentOS 5.2, 2009.
#
# chkconfig: 2345 01
# description: ngIRCd is an Open Source server for \
# the Internet Relay Chat (IRC), which \
# is developed and published under \
# the terms of the GNU General Public
# Licence (URL: http://www.gnu.org/licenses/gpl.html). \
# ngIRCd means "next generation IRC daemon", \
# it's written from scratch and not deduced from the \
# "grandfather of IRC daemons", the daemon of the IRCNet.
#
# processname: /usr/sbin/ngircd
# config: /etc/ngircd
# pidfile: /var/run/ngircd.pid
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/ngircd
NAME=ngIRCd
BASENAME=ngircd
CONF=/etc/$BASENAME.conf
DESC="IRC daemon"
PARAMS="-f $CONF"
# Source function library.
. /etc/init.d/functions
# Get config.
test -f /etc/sysconfig/network && . /etc/sysconfig/network
test -f /etc/sysconfig/makuosan && . /etc/sysconfig/makuosan
# Check that networking is up.
[ "${NETWORKING}" = "yes" ] || exit 0
[ -x $DAEMON ] || exit 1
[ -f $CONF ] || exit 2
RETVAL=0
start(){
echo -n $"Starting $NAME: "
daemon $DAEMON $PARAMS
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$BASENAME
echo
return $RETVAL
}
stop(){
echo -n $"Stopping $NAME: "
killproc $DAEMON
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
rm -f /var/lock/subsys/$BASENAME
fi
echo
return $RETVAL
}
reload(){
echo -n $"Reloading configuration: "
killproc $DAEMON -HUP
RETVAL=$?
echo
return $RETVAL
}
restart(){
stop
start
}
condrestart(){
[ -e /var/lock/subsys/$BASENAME ] && restart
return 0
}
check_config(){
$DAEMON $PARAMS --configtest >/dev/null 2>&1
[ $? -eq 0 ] && return 0
echo -n $"Configuration of $NAME is not valid, won't (re)start!"
echo -n $"Run \"$DAEMON --configtest\" and fix it up ..."
exit 6
}
# See how we were called.
case "$1" in
start)
check_config
start
;;
stop)
stop
;;
status)
status $NAME
;;
restart)
restart
;;
reload)
reload
;;
condrestart)
condrestart
;;
test)
check_config
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|test}"
RETVAL=1
esac
exit $RETVAL

View File

@@ -1,54 +0,0 @@
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: ".*" added ".*" to G-Line list: ".*" \([0-9]+ seconds\)\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: (GnuTLS|OpenSSL) .* initialized\.$
^\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]+\]: Address mismatch:
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't create pre-defined channel ".*": name already in use\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve( address)? ".*": (Name or service not known|No address associated with hostname|Temporary failure in name resolution)( \[.*\]\.)?$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client( ".*")? unregistered \(connection [0-9]+\): (Can't connect|Client closed connection|Got QUIT command|Read error|Server configuration already in use|SSL accept error, closing socket|Timeout|Write error)\.$
^\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]+\]: Connection [0-9]+: initialized TLSv?1\.[0123] using cipher .*\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Created pre-defined channel ".*", mode ".*" \((channel key set|no channel key), user limit [0-9]+\)\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Deleted ".*" \(".*"\) from G-Line list \(expired\)\.$
^\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]+\]: File descriptor limit is [0-9]+; "MaxConnections" is (not set|set to [0-9]+)\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Got (valid server|unchecked peer) certificate: .*\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Got signal "(Hangup|Terminated)" \.\.\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Got valid OPER for ".*" from ".*", user is an IRC operator now\.$
^\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]+\]: IO subsystem: epoll \(hint size 100, initial maxfd 100, masterfd [0-9]+\)\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Not running with changed root directory\.$
^\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]+\]: Peer did not present a certificate\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Peer on connection [0-9]+ announces itself as .* using protocol .* \(flags: ".*"\)\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Possible forgery: .* resolved to ".*", which (has no IP address|points to a different 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]+\]: Re-reading configuration NOW!$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Re-reading of configuration done\.$
^\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]+\]: Running as user .*, group .*, with PID [0-9]+\.$
^\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, client disconnected \[in .*\(\)\]!$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: (Connection reset by peer|Broken pipe) \[in .*\]!$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL protocol error: (ConnSSL_Read|ConnSSL_Write|SSL_accept) \(.*\)$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" \(on ".*"\) ready\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" registered \(connection [0-9]+, 1 hop - direct link\)\.$
^\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 \(connection [0-9]+\): Ping timeout: [0-9]+ seconds\.
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" unregistered( \(connection [0-9]+\))?: .* \(Server going down\)\.
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" unregistered: .* .*\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server \".*\" \(on ".*"\) ready\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server going down NOW!$
^\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|Client closed connection|Closing connection: .* \(Server going down\)|Got QUIT command|ID ".*" already registered|Ping timeout: [0-9]+ seconds|Read error|SSL accept error, closing socket|Server configuration already in use|Server going down|Timeout|Write error|".*" \((G-Line|SQUIT from .*)\)\) with ".*:[0-9]+" \.\.\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Synchronization with ".*" done \(connection [0-9]+\): [0-9]+ seconds? \[[0-9]+ users, [0-9]+ channels\]\.$
^\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|Got QUIT command|Ping timeout: [0-9]+ seconds|Read error|Server going down)\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Using (default|specified) configuration file ".*" \.\.\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Write error on connection [0-9]+ \(socket [0-9]+\): (Broken pipe|Connection reset by peer)!$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: ngIRCd [0-9].* starting \.\.\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: ngIRCd done, served [0-9]+ connections?\.$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: warning: /etc/hosts\.allow, line [0-9]+: (can't verify hostname|host name/address mismatch): getaddrinfo\(.*, AF_INET\) failed$
^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: warning: can't get client address: Connection reset by peer$

View File

@@ -1,48 +0,0 @@
# 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 hopm.service
Before=anope.service atheme.service irc-services.service
Before=bopm.service hopm.service
[Service]
Type=notify
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
StandardError=journal
StandardOutput=journal
# 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 --nodaemon --syslog $PARAMS
ExecReload=/bin/kill -HUP $MAINPID
# Error handling:
# ngIRCd tries to "ping" the service manager every 3 seconds.
WatchdogSec=10
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@@ -1,12 +0,0 @@
[Unit]
Description=Next Generation IRC Daemon (Socket)
Documentation=man:ngircd(8) man:ngircd.conf(5)
[Socket]
BindIPv6Only=ipv6-only
ListenStream=0.0.0.0:6667
#ListenStream=[::]:6667
IPTOS=low-delay
[Install]
WantedBy=sockets.target

View File

@@ -1,5 +1,5 @@
%define name ngircd
%define version 27
%define version 0.8.0-pre1
%define release 1
%define prefix %{_prefix}
@@ -7,32 +7,32 @@ Summary: A lightweight daemon for the Internet Relay Chat (IRC)
Name: %{name}
Version: %{version}
Release: %{release}
License: GPLv2+
Group: System Environment/Daemons
URL: http://ngircd.barton.de/
Copyright: GPL
Group: Networking/Daemons
URL: http://arthur.ath.cx/~alex/ngircd/
Source: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: zlib-devel, openssl-devel
Packager: Sean Reifschneider <jafo-rpms@tummy.com>
BuildRoot: /var/tmp/%{name}-root
%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).
ngIRCd is a free open source daemon for the Internet Relay Chat (IRC),
developed under the GNU General Public License (GPL). It's written from
scratch and is not based upon the original IRCd like many others.
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.
Advantages:
- no problems with servers using changing/non-static IP addresses.
- small and lean configuration file.
- free, modern and open source C code.
- still under active development.
ngIRCd is compatible to the "original" ircd 2.10.3p3, so you can run
mixed networks.
%prep
%setup -q
%setup
%build
%configure \
--with-zlib \
--with-openssl
make %{?_smp_mflags}
%configure
make
%install
[ -n "$RPM_BUILD_ROOT" -a "$RPM_BUILD_ROOT" != / ] && rm -rf "$RPM_BUILD_ROOT"
@@ -42,7 +42,6 @@ make %{?_smp_mflags}
( cd usr/sbin; mv *-ngircd ngircd )
( cd usr/share/man/man5; mv *-ngircd.conf.5 ngircd.conf.5 )
( cd usr/share/man/man8; mv *-ngircd.8 ngircd.8 )
rm -fr usr/share/doc/ngircd
)
%clean
@@ -50,8 +49,7 @@ make %{?_smp_mflags}
%files
%defattr(755,root,root)
%doc AUTHORS.md COPYING ChangeLog INSTALL.md NEWS README.md doc/*
%doc AUTHORS COPYING ChangeLog INSTALL NEWS README
%config(noreplace) /etc
%{_prefix}/sbin
%{_mandir}/man5/ngircd.conf*
%{_mandir}/man8/ngircd.8*
%{_prefix}/share/man/

View File

@@ -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
# according 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

View File

@@ -1,257 +0,0 @@
#!/bin/sh
#
# 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.
#
# This script analyzes the build process of ngIRCd and generates output
# suitable for inclusion in doc/Platforms.txt -- please send reports
# to the ngIRCd mailing list: <ngircd@lists.barton.de>.
NAME=$(basename "$0")
VERBOSE=
CLEAN=1
PLATFORM=
COMPILER="unknown"
VERSION="unknown"
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
while [ $# -gt 0 ]; do
case "$1" in
"-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
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
if [ $? -ne 0 ]; then
grep "ngIRCd" "$SRC_D/../ChangeLog" >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "$NAME: ngIRCd base source directory not found!?"
exit 1
fi
SRC_D="$SRC_D/.."
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
echo "$NAME: Checking for \"git\" command ..."
git version >/dev/null 2>&1
if [ $? -eq 0 ] && [ -n "$CLEAN" ]; 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
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
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
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
R_MAKE=1
echo "$NAME: Running \"$MAKE check\" ..."
if [ -n "$VERBOSE" ]; then
"$MAKE" check
else
"$MAKE" check >/dev/null
fi
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
[ $? -eq 0 ] && R_RUN=1
fi
fi
fi
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)
PLATFORM="$CPU/$VENDOR/$OS"
fi
if [ -z "$PLATFORM" ]; then
PLATFORM="$(uname 2>/dev/null) $(uname -r 2>/dev/null), $(uname -m 2>/dev/null)"
fi
# Get compiler information
if [ -r "Makefile" ]; then
CC=$(grep "^CC = " Makefile | cut -d' ' -f3)
$CC --version 2>&1 | grep -i "GCC" >/dev/null
if [ $? -eq 0 ]; then
# GCC, or compiler that mimics GCC
$CC --version 2>&1 | grep -i "Open64" >/dev/null
if [ $? -eq 0 ]; then
COMPILER="Open64"
else
COMPILER=$($CC --version | head -1 \
| cut -d')' -f2 | cut -d' ' -f2)
COMPILER="gcc $COMPILER"
fi
else
# Non-GCC compiler
$CC --version 2>&1 | grep -i "clang" >/dev/null
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')
fi
$CC -version 2>&1 | grep -i "tcc" >/dev/null
if [ $? -eq 0 ]; then
COMPILER=$($CC -version 2>/dev/null | head -1 \
| 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)"
[ -n "$v" ] && COMPILER="$v"
fi
fi
fi
# Get ngIRCd version information
eval "$(grep "^VERSION = " Makefile | sed -e 's/ //g')"
case "$VERSION" in
*~*-*)
VERSION=$(echo "$VERSION" | cut -b1-10)
;;
esac
[ -n "$VERSION" ] || VERSION="unknown"
# Get IO interface information
if [ "$OS" = "linux-gnu" ]; then
COMMENT="1"
else
grep "^#define HAVE_SYS_DEVPOLL_H 1" src/config.h >/dev/null 2>&1
[ $? -eq 0 ] && COMMENT="4"
grep "^#define HAVE_EPOLL_CREATE 1" src/config.h >/dev/null 2>&1
[ $? -eq 0 ] && COMMENT="5"
grep "^#define HAVE_KQUEUE 1" src/config.h >/dev/null 2>&1
[ $? -eq 0 ] && COMMENT="3"
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 "$COMMENT" ] && COMMENT=" $COMMENT"
echo
echo " the executable works (\"runs\") as expected --+"
echo " tests run successfully (\"make check\") --+ |"
echo " ngIRCd compiles (\"make\") --+ | |"
echo " ./configure works --+ | | |"
echo " | | | |"
echo "Platform Compiler ngIRCd Date Tester C M T R *"
echo "--------------------------- ------------ ---------- -------- -------- - - - - -"
command -v 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" \
"$C" "$M" "$T" "$R" "$COMMENT"
else
echo "$PLATFORM $COMPILER $VERSION $DATE $LOGNAME" \
"$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

77
contrib/systrace.policy Normal file
View 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-

View File

@@ -1,53 +0,0 @@
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.
-- BOPM.txt --
I. Introduction
~~~~~~~~~~~~~~~~
Citing <http://wiki.blitzed.org/BOPM>: "BOPM is an open source open proxy
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
BOPM requires to be useful.
II. Installation
~~~~~~~~~~~~~~~~~
Install BOPM as usual, please see the BOPM documentation for details.
Afterwards adjust the following configuration parameters that are important
for ngIRCd:
a) BOPM "IRC" section:
1) Set "server" and "port" accordingly,
2) adjust the "oper" line to match an [Operator] block in ngircd.conf,
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).
5) Set "kline" to "GLINE *@%h :Open proxy found on your host!";
and comment out all the other "kline" examples.
b) BOPM "scanner" section:
Make sure you configure a valid "target_ip" and "target_port" for the
configured scanners to test. And please note that you CAN'T USE the port
of ngIRCd, because ngIRCd doesn't send any banner message by default!
So you need a service what sends a banner, so for example POP3, SMTP,
IMAP, or SSH daemons should work ...

56
doc/CVS.txt Normal file
View File

@@ -0,0 +1,56 @@
ngIRCd - Next Generation IRC Server
(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.
-- CVS.txt --
The source code of ngIRCd is maintained using the "Concurrent Versions
System" (CVS). Thereby several developers can work with the source tree at
the same time.
I. Anonymous read-only Access
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To access the source tree anonymously in read-only mode, follow these steps:
Login to the CVS server:
$ cvs -d:pserver:anonymous@arthur.ath.cx:/usr/local/CVS/ngircd login
Use "anonymous" as user name and no password (just hit Return). Now you can
check out the sources:
$ cvs -d:pserver:anonymous@arthur.ath.cx:/usr/local/CVS/ngircd checkout ngircd
Thereby a new folder "ngircd" will be created containing all the individual
source files.
This is the "working folder", all CVS commands will be executed from within
this folder in the future.
Please note: When checking out a fresh copy of ngIRCd from CVS, 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.
Updating the CVS tree:
$ cvs update -d -P [<filename>]
You can update a single file or the complete source tree.
III. Write Access
~~~~~~~~~~~~~~~~~
If you want to contribute a couple of patches and write access to the CVS
repository would be handy, please contact Alex Barton, <alex@barton.de>.
--
$Id: CVS.txt,v 1.7 2003/03/26 22:34:33 alex Exp $

View File

@@ -1,28 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2012 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- Capabilities.txt --
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>
I. Supported Capabilities
~~~~~~~~~~~~~~~~~~~~~~~~~
* "multi-prefix"
When requested, the multi-prefix client capability will cause the IRC
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>.

View File

@@ -1,996 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2019 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- Commands.txt --
This file lists all commands available on ngIRCd. It is written in a format
that is human readable as well as machine parseable and therefore can be used
as "help text file" of the daemon.
In short, the daemon reads this file on startup and parses it as following
when an user issues a "HELP <cmd>" command:
1. Search the file for a line "- <cmd>",
2. Output all subsequent lines that start with a TAB (ASCII 9) character
to the client using NOTICE commands, treat lines containing a single "."
after the TAB as empty lines.
3. Break at the first line not starting with a TAB character.
This format allows to have information to each command stored in this file
which will not be sent to an IRC user requesting help which enables us to
have additional annotations stored here which further describe the origin,
implementation details, or limits of the specific command which are not
relevant to an end-user but administrators and developers.
A special "Intro" block is returned to the user when the HELP command is
used without a command name:
- Intro
This is ngIRCd, a server software for Internet Relay Chat (IRC)
networks. You can find more information about ngIRCd on its homepage:
<http://ngircd.barton.de>
.
Use "HELP COMMANDS" to get a list of all available commands and
"HELP <command-name>" to get help for a specific IRC command, for
example "HELP quit" or "HELP privmsg".
Connection Handling Commands
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- CAP
CAP LS
CAP LIST
CAP REQ <capabilities>
CAP ACK <capabilities>
CAP NAK <capabilities>
CAP CLEAR
CAP END
.
List, request, and clear "IRC Capabilities".
.
Using this command, an IRC client can request additional "IRC
capabilities" during login or later on, which influences the
communication between server and client. Normally, these commands
aren't directly used by humans, but automatically by their client
software. And please note that issuing such commands manually can
irritate the client software used, because of the "non-standard"
behavior of the server!
.
- CAP LS: list all available capabilities.
- CAP LIST: list active capabilities of this connection.
- CAP REQ: Request particular capabilities.
- CAP ACK: Acknowledge a set of capabilities to be enabled/disabled.
- CAP NAK: Reject a set of capabilities.
- CAP CLEAR: Clear all set capabilities.
- CAP END: Indicate end of capability negotiation during login,
ignored in an fully registered session.
Please note that the <capabilities> must be given in a single
parameter but whitespace separated, therefore a command could look
like this: "CAP REQ :capability1 capability2 capability3" for example.
References:
- <http://ircv3.net/specs/core/capability-negotiation-3.1.html>
- <http://ngircd.barton.de/doc/Capabilities.txt>
- doc/Capabilities.txt
- CHARCONV
CHARCONV <client-charset>
.
Set client character set encoding to <client-charset>.
.
After receiving such a command, the server translates all message
data received from the client using the set <client-charset> to the
server encoding (UTF-8), and all message data which is to be sent to
the client from the server encoding (UTF-8) to <client-charset>.
.
This enables older clients and clients using "strange" character sets
to transparently participate in channels and direct messages to
clients using UTF-8, which should be the default today.
References:
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
- IRC+, doc/Protocol.txt
- NICK
NICK <nickname>
NICK <nickname> [<hops>]
NICK <nickname> <hops> <username> <host> <servertoken> <usermodes> <realname>
.
Set or change the <nickname> of a client (first form) and register
remote clients (second and third form; servers only).
References:
- RFC 1459, 4.1.2 "Nick message" (old client and server protocol)
- RFC 2812, 3.1.2 "Nick message" (client protocol)
- RFC 2813, 4.1.3 "Nick" (server protocol)
- PASS
PASS <password>
PASS <password> <version> <flags> [<options>]
.
Set a connection <password>. This command must be the first command
sent to the server, even before the NICK/USER or SERVER commands.
.
The first form is used by user sessions or (old) RFC 1459 servers,
the second form is used by RFC 2812 or IRC+ compliant servers and
enables the server to indicate its version and supported protocol
features.
References:
- RFC 1459, 4.1.1 "Password message" (old client and server protocol)
- RFC 2812, 3.1.1 "Password message" (client protocol)
- RFC 2813, 4.1.1 "Password message" (server protocol)
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
- IRC+, doc/Protocol.txt
- PING
PING <token> [<target>]
.
Tests the presence of a connection to a client or server.
.
If no <target> has been given, the local server is used. User clients
can only use other servers as <target>, no user clients.
.
A PING message results in a PONG reply containing the <token>, which
can be arbitrary text.
Please note:
The RFCs state that the <token> parameter is used to specify the
origin of the PING command when forwarded in the network, but this
is not the case: the sender is specified using the prefix as usual,
and the parameter is used to identify the PONG reply in practice.
References:
- RFC 2812, 3.7.2 "Ping message"
- PONG
PONG <target> [<token>]
.
Reply to a "PING" command, indicate that the connection is alive.
.
The <token> is the arbitrary text received in the "PING" command and
can be used to identify the correct PONG sent as answer.
.
When the "PONG" command is received from a user session, the <target>
parameter is ignored; otherwise the PONG is forwarded to this client.
References:
- RFC 2812, 3.7.3 "Pong message"
- QUIT
QUIT [<quit-message>]
.
Terminate a user session.
.
When received from a user, the server acknowledges this by sending
an "ERROR" message back to the client and terminates the connection.
.
When a <quit-message> has been given, it is sent to all the channels
that the client is a member of when leaving.
References:
- RFC 2812, 3.1.7 "Quit"
- RFC 2813, 4.1.5 "Quit"
- USER
USER <username> <hostname> <unused> <realname>
.
Register (and authenticate) a new user session with a short <username>
and a human-readable <realname>.
.
The parameter <hostname> is only used when received by an other server
and ignored otherwise; and the parameter <unused> is always ignored.
But both parameters are required on each invocation by the protocol
and can be set to arbitrary characters/text when not used.
.
If <username> contains an "@" character, the full <username> is used
for authentication, but only the first part up to this character is
set as "user name" for this session.
References:
- RFC 2812, 3.1.3 "User message"
- WEBIRC
WEBIRC <password> <username> <hostname> <ip-address>
.
Allow Web-to-IRC gateway software (for example) to set the correct
user name and host name of users instead of their own.
.
It must be the very 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.
References:
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
- IRC+, doc/Protocol.txt
General Commands
~~~~~~~~~~~~~~~~
- AWAY
AWAY [<message>]
.
Provides the server with a message to automatically send in reply to a
PRIVMSG directed at the user, but not to a channel they are on.
.
If <message> is omitted, the away status is removed.
References:
- RFC 2812, 4.1 "Away"
- HELP
HELP [<command>]
.
Show help information for a specific IRC <command>. The <command> name
is case-insensitive.
.
Use the command "HELP Commands" to get a list of all available commands.
The HELP command isn't specified by any RFC but implemented by most
daemons. If no help text could be read in, ngIRCd outputs a list of all
implemented commands when receiving a plain "HELP" command as well as
on "HELP Commands".
ngIRCd replies using "NOTICE" commands like ircd 2.10/2.11; other
implementations are using numerics 704, 705, and 706.
- MODE
MODE <nickname> [{+|-}<mode>[<mode>] [{+|-}<mode>[<mode>] [...]]]
MODE <channel> [{+|-}<mode>[<mode>] [<arg> [<arg> [...]]] [{+|-}<mode>[<mode>] [<arg> [<arg> [...]]] [...]]]
.
Set and get user and channel modes.
.
When no mode parameters are given, the currently set user or channel
modes are returned. Otherwise the modes are adjusted accordingly
and the changes will be reported back to the client.
.
All user and channel "modes" are indicated by single case-sensitive
characters.
.
Please note that a user can only get and set his own modes, and not
all user "levels" are allowed to change all channel modes ...
.
The mode parameters can become quite complex, especially when dealing
with channel modes that require additional arguments:
.
{+|-}<mode(s}> -- set or unset one or more modes.
+<mode(s)> -<mode(s)> -- set some modes and unset others.
+<modes> <arg1> <arg2> -- set (at least) two modes with arguments.
.
Some examples:
.
MODE nick +i -- set user to "invisible".
MODE #chan +tn -- set "topic lock" and "no external messages".
MODE #chan -t +l 50 -- remove "topic lock", set "user limit" to 50.
MODE #chan +ov nick1 nick2 -- set "channel op" and "voice" mode
to nick1 and nick2 in channel #chan.
.
A complete list of all modes supported by ngIRCd can be found online
here: <http://ngircd.barton.de/doc/Modes.txt>.
References:
- RFC 2811, 4. "Channel Modes"
- RFC 2812, 3.1.5 "User mode message"
- RFC 2812, 3.2.3 "Channel mode message"
- <http://ngircd.barton.de/doc/Modes.txt>
- doc/Modes.txt
- NOTICE
NOTICE <target>[,<target>[,...]] <message>
.
Send a <message> to a given <target>, which can be a user or a
channel, but DON'T report any error.
.
The "NOTICE" command exactly behaves like the "PRIVMSG" command, but
doesn't report any errors it encounters (like an unknown <target>).
Please see the help text of the "PRIVMSG" command for a detailed
description of the parameters!
References:
- RFC 2812, 2.3.1 "Message format in Augmented BNF"
- RFC 2812, 3.3 "Sending messages"
- RFC 2812, 3.3.2 "Notice"
- PRIVMSG
PRIVMSG <target>[,<target>[,...]] <message>
.
Send a <message> to a given <target>, which can be a user or a
channel, and report all errors.
.
The <target> must follow one of these syntax variants:
.
- <nickname>
- <channel>
- <user>[%<host>]@<server>
- <user>%<host>
- <nickname>!<user>@<host>
.
If the <target> is a user, a private message is sent directly to this
user; if it resolves to a channel name, a public message is sent
to all the members of that channel.
.
In addition, IRC Ops can use these two forms to specify the <target>:
.
- #<hostmask>
- $<servermask>
.
The <mask> can contain the wildcard characters "*" and "?", but must
contain at least one dot (".") and no wildcard after the last one.
Then, the <message> is sent to all users matching this <mask>.
.
All warnings and errors are reported back to the initiator using
numeric status codes, which is the only difference to the "NOTICE"
command, which doesn't report back any errors or warnings at all.
.
Please note that clients often use "MSG" as an alias to PRIVMSG, and
a command "QUERY <nick> [<message>]" to initiate private chats. Both
are command extensions of the client and never sent to the server.
References:
- RFC 2812, 2.3.1 "Message format in Augmented BNF"
- RFC 2812, 3.3 "Sending messages"
- RFC 2812, 3.3.1 "Private messages"
Status and Informational Commands
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ADMIN
ADMIN [<target>]
.
Show administrative information about an IRC server in the network.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
References:
- RFC 2812, 3.4.9 "Admin command"
- INFO
INFO [<target>]
.
Show the version, birth & online time of an IRC server in the network.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
References:
- RFC 2812, 3.4.10 "Info command"
- ISON
ISON <nickname> [<nickname> [...]]
.
Query online status of a list of nicknames. The server replies with
a list only containing nicknames actually connected to a server in
the network. If no nicknames of the given list are online, an empty
list is returned to the client requesting the information.
Please note that "all" IRC daemons even parse separate nicknames in
a single parameter (like ":nick1 nick2"), and therefore ngIRCd
implements this behavior, too.
References:
- RFC 2812, 4.9 "Ison message"
- LINKS
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
specified by <target> or the local server when <target> is omitted.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
References:
- RFC 2812, 3.4.5 "Links message"
- LUSERS
LUSERS [<mask> [<target>]]
.
Return statistics about the number of clients (users, servers,
services, ...) in the network as seen by the server <target>.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
Please note that ngIRCd ignores the <mask> parameter entirely: it
is not possible to get information for a part of the network only.
References:
- RFC 2812, 3.4.2 "Lusers message"
- MOTD
MOTD [<target>]
.
Show the "Message of the Day" (MOTD) of an IRC server in the network.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
References:
- RFC 2812, 3.4.1 "Motd message"
- NAMES
NAMES [<channel>[,<channel>[,...]] [<target>]]
.
Show the list of users that are members of a particular <channel>
(and that are visible for the client requesting this information) as
seen by the server <target>. More than one <channel> can be given
separated by "," (but not whitespaces!).
.
If <channel> has been omitted, all visible users are shown, grouped
by channel name, and all visible users not being members of at least
one channel are shown as members of the pseudo channel "*".
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
References:
- RFC 2812, 3.2.5 "Names message"
- STATS
STATS [<query> [<target>]]
.
Show statistics and other information of type <query> of a particular
IRC server in the network.
.
The following <query> types are supported (case-insensitive where
applicable):
.
- g Network-wide bans ("G-Lines").
- k Server-local bans ("K-Lines").
- L Link status (servers and user links).
- l Link status (servers and own link).
- m Command usage count.
- u Server uptime.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
.
To use "STATS L" the user must be an IRC Operator.
References:
- RFC 2812, 3.4.4 "Stats message"
- TIME
TIME [<target>]
.
Show the local time of an IRC server in the network.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
References
- RFC 2812, 3.4.6 "Time message"
- TRACE
TRACE [<target>]
.
Find the route to a specific server and send information about its
peers. Each server that processes this command reports back to the
sender about it: the replies from pass-through servers form a chain
which shows the route to the destination.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
References:
- RFC 2812, 3.4.8 "Trace message"
- USERHOST
USERHOST <nickname> [<nickname> [...]]
.
Show flags and the hostmasks (<user>@<host>) of the <nickname>s,
separated by spaces. The following flags are used:
.
- "-" The client is "away" (the mode "+a" is set on this client).
- "+" Client seems to be available, at least it isn't marked "away".
- "*" The client is an IRC operator (the mode "+o" is set).
References:
- RFC 2812, 4.8 "Userhost message"
- VERSION
VERSION [<target>]
.
Show version information about a particular IRC server in the network.
.
<target> can be a server name, the nickname of a client connected to
a specific server, or a mask matching a server name in the network.
The server of the current connection is used when <target> is omitted.
.
Please note: in normal operation, the version number ends in a dot
(".", for example "ngIRCd-20.1."). If it ends in ".1" (for example
"ngIRCd-20.1.1", same version than before!), the server is running in
debug-mode; and if it ends in ".2", the "network sniffer" is active!
Keep your privacy in mind ...
References:
- RFC 2812, 3.4.3 "Version message"
- WHO
WHO [<mask> ["o"]]
.
Show a list of users who match the <mask>, or all visible users when
the <mask> has been omitted. (Special case: the <mask> "0" is
equivalent to "*")
.
If the flag "o" is given, the server will only return information about
IRC Operators.
References:
- RFC 2812, 3.6.1 "Who query"
- WHOIS
WHOIS [<target>] <mask>[,<mask>[,...]]
.
Query information about users matching the <mask> parameter(s) as seen
by the server <target>; up to 3 <masks> are supported.
.
<target> can be a server name, the nickname of a client connected to a
specific server, or a mask matching a server name in the network. The
server of the current connection is used when <target> is omitted.
References:
- RFC 2812, 3.6.2 "Whois query"
- WHOWAS
WHOWAS <nickname>[,<nickname>[,...]] [<count> [<target>]]
.
Query information about nicknames no longer in use in the network,
either because of nickname changes or disconnects. The history is
searched backwards, returning the most recent entry first. If there
are multiple entries, up to <count> entries will be shown (or all of
them, if no <count> has been given).
.
<target> can be a server name, the nickname of a client connected to a
specific server, or a mask matching a server name in the network. The
server of the current connection is used when <target> is omitted.
References:
- RFC 2812, 3.6.3 "Whowas"
Channel Commands
~~~~~~~~~~~~~~~~
- INVITE
INVITE <nickname> <channel>
.
Invite <nickname> to join channel <channel>.
.
<channel> does not have to exist, but if it does, only members of the
channel are allowed to invite other users. If the channel mode "+i"
is set, only channel "half-ops" (and above) may invite other clients,
and if channel mode "+V" is set, nobody can invite other users.
References:
- RFC 2812, 3.2.7 "Invite message"
- JOIN
JOIN {<channel>[,<channel>[,...]] [<key>[,<key>[,...]]] | 0}
.
Makes the client join the <channel> (comma-separated list), specifying
the channel keys ("passwords"). A <channel-key> is only needed if the
<channel> has the mode "+k" set.
.
If the channel(s) do not exist, then they will be created.
.
Using "JOIN 0" parts all channels at once.
References:
- RFC 2812, 3.2.1 "Join message" (client protocol)
- RFC 2813, 4.2.1 "Join message" (server protocol)
- KICK
KICK <channel>[,<channel>[,...]] <nickname>[,<nickname>[,...]] [<reason>]
.
Remove users(s) with <nickname>(s) from <channel>(s).
.
There must be either exactly one <channel> parameter and multiple
<nickname> parameters, or as many <channel> parameters as there are
<nickname> parameters. The <reason> is shown to the users being
kicked, and the nickname of the current user is used when <reason>
is omitted.
References:
- RFC 2812, 3.2.8 "Kick command"
- LIST
LIST [<mask>[,<mask>[,...]] [<server>]]
.
List all visible channels matching the <mask> (comma-separated list),
or all channels when no <mask> was specified.
.
If <server> is given, the command will be forwarded to <server> for
evaluation.
References:
- RFC 2812, 3.2.6 "List message"
- PART
PART <channel>[,<channel>[,...]] [<part-message>]
.
Leave <channel> (comma-separated list), optionally with sending a
<part-message> to all the other channel members.
References:
- RFC 2812, 3.2.2 "Part message"
- TOPIC
TOPIC <channel> [<topic>]
.
Change or view the topic of a channel.
.
The topic for channel <channel> is returned if there is no <topic>
given. If the <topic> parameter is present, the topic for that
channel will be changed, if this action is allowed for the user
requesting it. If the <topic> parameter is an empty string, the
topic for that channel will be removed.
References:
- RFC 2812, 3.2.4 "Topic message"
Administrative Commands
~~~~~~~~~~~~~~~~~~~~~~~
- CONNECT
CONNECT <server> [<port> [<remote-server> [<my-pwd> <peer-pwd>]]]
.
Instructs the current server, or <remote-server> if specified,
to connect to the server named <server>, which must be configured
in the server configuration file.
.
To use this command, the user must be an IRC Operator. To establish
a connection on a <remote-server>, you must have remote IRC operator
privileges.
.
If <port>, <my-pwd> and <peer-pwd> are given, these values override
the ones specified in the server configuration file.
References:
- RFC 2812, 3.4.7 "Connect message"
- DIE
DIE [<message>]
.
Instructs the server to shut down.
.
The optional (and non-standard) <message> text is sent to each client
connected to this server before all connections are closed.
.
To use this command, the user must be an IRC Operator.
References:
- RFC 2812, 4.3 "Die message"
- DISCONNECT
DISCONNECT <server>
.
Disconnect and disable a locally linked server.
.
To use this command, the user must be an IRC Operator.
References:
- This command is not specified in the IRC RFCs, it is an extension
of ngIRCd.
- GLINE
GLINE <nick!user@hostmask> [<timeout> :<reason>]
.
This command provides timed G-Lines (network-wide bans).
.
If a client matches a G-Line, it cannot connect to any server on
the IRC network for <timeout> seconds. When <timeout> is 0, it make
the G-Line permanent.
.
If no <timeout> and no <reason> is given, the G-Line is removed.
.
To use this command, the user must be an IRC Operator.
.
"STATS g" can be used to list all currently active G-Lines.
References:
- This command is not specified in the IRC RFCs, it is an extension
of ngIRCd.
- KILL
KILL <nickname> <reason>
.
Forcibly remove all users with a given <nickname> from the IRC
network and display the given <reason> to them.
.
This command is used internally between servers, too, for example
to disconnect duplicate <nickname>'s after a "net split".
.
To use this command, the user must be an IRC Operator.
References:
- RFC 2812, 3.7.1 "Kill message"
- KLINE
KLINE <nick!user@hostmask> [<timeout> :<reason>]
.
This command provides timed K-Lines (server-local bans).
.
If a client matches a K-Line, it cannot connect to this server for
<timeout> seconds. When <timeout> is 0, it makes the K-Line permanent.
.
If no <timeout> and no <reason> is given, the K-Line is removed.
.
To use this command, the user must be an IRC Operator.
.
"STATS k" can be used to list all currently active K-Lines.
References:
- This command is not specified in the IRC RFCs, it is an extension
of ngIRCd.
- OPER
OPER <name> <password>
.
Authenticates a user named <name> as an IRC operator on the current
server/network.
.
This operator <name> must be configured in the server configuration.
.
Please note that <name> is NOT related to a nickname at all!
References:
- RFC 2812, 3.1.4 "Oper message"
- REHASH
REHASH
.
Causes the server to re-read and re-process its configuration file(s).
.
While rehashing, no new connections are accepted, but all already
established connections stay connected.
.
To use this command, the user must be an IRC Operator.
References:
- RFC 2812, 4.2 "Rehash message"
- RESTART
RESTART
.
Restart the server.
.
While restarting, all connections are reset and no new connections
are accepted.
.
To use this command, the user must be an IRC Operator.
References:
- RFC 2812, 4.4 "Restart message"
- WALLOPS
WALLOPS <message>
.
Sends <message> to all users with user mode "+w".
.
To use this command, the user must be an IRC Operator.
References:
- RFC 2812, 4.7 "Operwall message"
IRC Service Commands
~~~~~~~~~~~~~~~~~~~~
- SERVICE
SERVICE <name> <reserved1> <distribution> <type> <reserved2> <info>
SERVICE <name> <servertoken> <distribution> {<type>|+<modes>} <hops> <info>
.
Register a new service in the network.
.
The first form is used by directly linked services and isn't supported
by ngIRCd at the moment. The second form announces services connected
to remote "pseudo-servers" ("services hubs").
.
The <distribution> and <type> parameters are ignored by ngIRCd.
References:
- RFC 2812, 3.1.6 "Service message"
- RFC 2813, 4.1.4 "Service message"
- SERVLIST
SERVLIST [<mask> [<type>]]
.
List all IRC services currently registered in the network.
.
The optional <mask> and <type> parameters can be used to limit the
listing to services matching the <mask> and that are of type <type>.
.
Please note that ngIRCd doesn't use any service types at the moment
and therefore all services are of type "0".
References:
- RFC 2812, 3.5.1 "Servlist message"
- SQUERY
SQUERY <target>[,<target>[,...]] <message>
.
Send a <message> to a given <target> IRC service, and report all
errors.
.
The "SQUERY" command exactly behaves like the "PRIVMSG" command, but
enforces that the <target> of the <message> is an IRC service.
Please see the help text of the "PRIVMSG" command for a detailed
description of the parameters!
.
If a user wants to interact with IRC services, he should use "SQUERY"
instead of "PRIVMSG" or "NOTICE": only "SQUERY makes sure that no
regular user, which uses the nickname of an IRC service, receives
the command in error, for example during a "net split"!
References:
- RFC 2812, 2.3.1 "Message format in Augmented BNF"
- RFC 2812, 3.3 "Sending messages"
- RFC 2812, 3.3.2 "Notice"
- SVSNICK
SVSNICK <oldnick> <newnick>
.
Forcefully change foreign user nicknames. This command is allowed
for servers only.
.
The "SVSNICK" command is forwarded to the server to which the user
with nickname <oldnick> is connected to, which in turn generates a
regular "NICK" command that then is sent to the client, so no special
support in the client software is required.
References:
- ngIRCd GIT commit e3f300d3231f
Server Protocol Commands
~~~~~~~~~~~~~~~~~~~~~~~~
- CHANINFO
CHANINFO <channel> +<modes> [[<key> <limit>] <topic>]
.
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:
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
- IRC+, doc/Protocol.txt
- ERROR
ERROR [<message> [<> [...]]]
.
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.
.
This command is silently ignored on non-server and non-service links
and shouldn't be used by regular IRC clients.
.
The ERROR message is also sent before terminating a regular client
connection.
References:
- RFC 2812, 3.7.4 "Error message"
- METADATA
METADATA <target> <key> <value>
.
The METADATA command is used on server-links to update "metadata"
information of clients, like the hostname, the info text ("real name"),
or the user name.
.
The METADATA command is allowed on server-links only.
References:
- IRC+, <http://ngircd.barton.de/doc/Protocol.txt>
- IRC+, doc/Protocol.txt
- NJOIN
NJOIN <channel> [<mode>]<nick>[,[<mode>]<nick>[,...]]
.
The NJOIN command is used on server-links to add users with <nick>
and <mode> to a <channel> while peering.
.
The NJOIN command is allowed on server-links only.
References:
- RFC 2813, 4.2.2 "Njoin message"
- SERVER
SERVER <servername> <info>
SERVER <servername> <hopcount> <info>
SERVER <servername> <hopcount> <token> <info>
.
The first form registers the local connection as a new server in the
network, the second (RFC 1459) and third (RFC 2812) form announce a
new remote server in the network.
.
The SERVER command is allowed on unregistered or server-links only.
References:
- RFC 1459, 4.1.4 "Server message"
- RFC 2813, 4.1.2 "Server message"
- SQUIT
SQUIT <server> <comment>
.
Disconnects an IRC Server from the network.
.
This command is used on server-links, but can be used by IRC Operators
to forcefully disconnect servers from the network, too.
References:
- RFC 2812, 3.1.8 "Squit"
- RFC 2813, 4.1.6 "Server quit message"
Dummy Commands
~~~~~~~~~~~~~~
- SUMMON
SUMMON <user> [<target> [<channel>]]
.
This command was intended to call people into IRC who are directly
connected to the terminal console of the IRC server -- but is
deprecated today. Therefore ngIRCd doesn't really implement this
command and always returns an error message, regardless of the
parameters given.
References:
- RFC 2812, 4.5 "Summon message"
- USERS
USERS [<target>]
.
This command was intended to list users directly logged in into the
console of the IRC server -- but is deprecated today. Therefore ngIRCd
doesn't really implement this command and always returns an error
message, regardless of the parameters given.
References:
- RFC 2812, 4.6 "Users"
- GET
GET [...]
.
Fake HTTP GET command. When received, the connection is shut down
immediately again to protect against crazy web browsers ...
References:
- ngIRCd GIT commit 33e8c2480649
- POST
POST [...]
.
Fake HTTP POST command. When received, the connection is shut down
immediately again to protect against crazy web browsers ...
References:
- ngIRCd GIT commit 33e8c2480649

View File

@@ -1,83 +0,0 @@
# [ngIRCd](https://ngircd.barton.de) - Container How-To
The ngIRCd daemon can be run as a containerized application, for example using
Docker or Podman (the latter being preferred and used in the examples below).
The container definition file, also known as "Docker file", is bundled with this
distribution as `contrib/Dockerfile` and based on the official "stable-slim"
container of the Debian project (see https://hub.docker.com/_/debian).
## Building the container
You can use the following command to build the ngIRCd container image:
```bash
podman build --format=docker -f contrib/Dockerfile .
```
The `Dockerfile` includes a `HEALTHCHECK` directive, which is not supported by
the default OCI 1.0 image format, therefore we use the "docker" format here.
If you are using Git, you can tag the built image like this (use the ID of the
newly built image!):
```bash
tag=$(git describe --tags | sed 's/rel-//g')
podman tag <container_id> "ngircd:${tag}"
```
## Running the container
You can use this command to run the ngIRCd container using Podman, for example:
```bash
podman run --name=ngircd --detach \
-p 127.0.0.1:6667:6667 \
ngircd:<tag>
```
This creates and starts a new container named "ngircd" from the image
"ngircd:<tag>" (you habe to substitute _<tag>_ with the real tag name here!) and
maps the host port 6667 on localhost to the port 6667 inside of the container.
### Configuring the container
The ngIRCd inside of the container is installed inside of `/opt/ngircd/` and the
default drop-in directory is `/opt/ngircd/etc/ngircd.conf.d`. Therefore you can
map a host folder to this drop-in directory inside of the container and place
drop-in configuration file(s) in the host path like this:
```bash
mkdir -p /host/path/to/ngircd/conf.d
touch /host/path/to/ngircd/conf.d/my.conf
podman run --name=ngircd --detach \
-p 127.0.0.1:6667:6667 \
-v "/host/path/to/ngircd/conf.d:/opt/ngircd/etc/ngircd.conf.d" \
ngircd:<tag>
```
### Testing the configuration
As with the native daemon, it is a very good idea to validate the configuration
of the daemon after making changes.
With Docker and Podman, you can pass arguments to the `ngircd` binary inside of
the container by simply appending it to the "run" command line like this:
```bash
podman run --rm -it \
-v "/host/path/to/ngircd/conf.d:/opt/ngircd/etc/ngircd.conf.d" \
ngircd:<tag> \
--configtest
```
### Reloading the daemon configuration in a running container
To activate changed configuration of ngIRCd, you can either restart the
container (which will disconnect all currently connected clients) or signal
`ngircd`(8) inside of the running container to reload its configuration file(s).
The latter can be done with this command, for example:
```bash
podman exec -it ngircd /bin/bash -c 'kill -HUP $(/usr/bin/pidof -s ngircd)'
```

View File

@@ -1,60 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- Contributing.txt --
If you want to contribute to ngIRCd, please read the following paragraphs to
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
much easier ;-)
- Don't forget to include documentation
When adding features and new configuration options, don't forget to not
only code the features but to describe them in doc/sample-ngircd.conf,
man/ngircd.8.tmp and/or man/ngircd.conf.5.tmpl as well!
- Be present on IRC
If you intend to code some new features or do some code cleanups or better
documentation, please be present on <irc://irc.barton.de/#ngircd> and
discuss your plans early! So other developers have an idea on what others
are working on, can offer help, and can synchronize their own work.
- Check and validate your work!
Use "make check" to validate your work, and use "make distcheck" to
validate the resulting archives, especially when adding/removing files!
- Send patches in "unified diff" format
Please send patches in "unified" format, that is, use "diff -u".
Or even better: use GIT ("git diff"), see above.
- Send patches to the mailing list
If you have some code to present, send the patch(es) and/or pointers to
your GIT repository to the official ngIRCd mailing list for review, not
only to #ngircd: so it becomes archived and more people have a chance to
review your patch.
Sure it is a good idea to post some notes to #ngircd, too! :-)
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.

View File

@@ -1,176 +0,0 @@
# [ngIRCd](https://ngircd.barton.de) - FAQ, Tips & Tricks
# General
## Is it possible to link ngIRCd with other non-ngIRCd servers?
Yes and no. Back in the beginning (2001, 2002, ...) the server-server protocol
used by ngIRCd was compatible to the original ircd used by IRCNet at that time,
version 2.10.3p3. And most probably this is still the case today, although not
actively tested for a long time.
Please note that newer ircd versions (2.11.x) are *not* compatible any more!
And other server-server protocols were never supported.
## Is there a homepage with further information and downloads?
Yes. Please visit https://ngircd.barton.de :-)
## Why should I use ngIRCd instead of the original one?
The `README.md` file and the [homepage](https://ngircd.barton.de) list a few
advantages of 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 WSL or Cygwin.
# Building and Compilation
## The `./configure` script is missing in the source directory!?
When using sources checked out via *Git*, the `configure` script as well as the
`Makefile.in` templates must be generated using the GNU *automake*, *autoconf*
and *pkg-config* tools. To simplify this task run the `./autogen.sh` script
which will execute the required commands for you; then continue with executing
the `./configure` script as usual.
Please see the `INSTALL.md` file for details!
## Error message `aclocal: command not found`
GNU *automake* is missing on your system but required for building Git versions
of ngIRCd. Install GNU automake 1.6 or later and try again.
## Error message `autoheader: command not found`?
GNU *autoconf* is missing on your system but required for building Git versions
of ngIRCd. Install GNU autoconf 2.52 or later and try again.
## Error message `automake: configure.in: AM_INIT_AUTOMAKE must be used`?
Most probably you are using version 1.5 of GNU automake which seems to be
incompatible to the build system of ngIRCd. Solution: upgrade to at least
version 1.6 of GNU automake.
(If you are using Debian 3.0 "Woody" you can try to downgrade to version 1.4 of
GNU automake shipped with this distribution; it should work, too.)
# Troubleshooting ngIRCd Runtime Issues
Always start with:
1. Make sure that ngIRCd parsed its configuration file as it was intended!
Run `ngircd --configest` and double-check its output!
2. Check the logs of your system, especially the entries generated by ngIRCd!
Where you can find the log messages depends on your system and your setup:
it can be plain text files in `/var/log/` (syslog) or the systemd journal
database, for example.
3. Ensure that the daemon started up successfully, is actually running and did
not stop/crash in the meantime. You can check this with your service
manager (like `systemctl status ngircd` on Linux systems using systemd) or
using `pgrep -l ngircd` to check for "ngircd" processes. If ngIRCd is not
running, try to restart the service and check the service status and the
logs (syslog, systemd journal) again!
## Where is the log file stored?
See introduction to this section above :-)
## "Connection refused" errors
1. Is the daemon really running? See introduction to this section above!
2. Does ngIRCd listen on the correct interface(s) and port(s)? On Linux, you
can check this with `sudo ss -ltnp|awk '/ngircd/{print $4}`, for example.
Check your `Listen` and `Ports` settings in the `[Global]` (and `[SSL]`)
sections and the startup messages of the daemon, especially the lines
stating "Now listening on xxx:yyy (socket zzz)"!
3. Are you able to connect to the ngIRCd service locally from the system the
daemon runs on? Test all the interface IP addresses you expect ngIRCd to
listen on, for example with a regular IRC client or tools like `telnet` or
`nc` ("net cat"): `telnet localhost 6667`, `nc 192.168.1.2 6667`, ...
If all the above works as expected, the issue most probably is not with
ngIRCd or its configuration but the network layer.
4. Are the port(s) ngIRCd listens on open and not blocked by a firewall? Check
the logs of your firewall solution (on the server itself and all firewalls
"in front of it") and use tools like `tcpdump` to check the network layer!
## Issues related to running ngIRCd inside of a `chroot` environment
**I cannot connect to remote peers when I use the chroot option, the following
is logged: `Can't resolve example.com: unknown error!`**
See next question blow ...
**When running ngIRCd inside a chroot, no IP addresses can be translated in DNS
names, errors like "Name or service not known" are logged!**
On Linux/glibc with chroot enabled you need to put some libraries inside
the chroot as well, notably `libnss_dns`; maybe others. Unfortunately, even
linking ngIRCd statically does not help this. So you can either copy
all the required files into the chroot directory:
``` bash
mkdir -p ./chroot/etc ./chroot/lib
cp -a /etc/hosts /etc/resolv.conf /etc/nsswitch.conf ./chroot/etc/
cp -a /lib/libresolv* /lib/libnss_* ./chroot/lib/
```
Or you can try to link ngIRCd against an other C library (like dietlibc) that do
not depend on NSS modules and these files.
# IRC Features
## I have added an `[Oper]` section, but how do I log in as an IRC operator?
You can use the `/OPER <name> <password>` command in your IRC client to become
an IRC operator as defined in an `[Oper]` block in your configuration file.
ngIRCd will also log all OPER requests (using syslog), and if an OPER command
fails you can look there to determine why it did not work (bad password,
unauthorized host mask, ...).
Please keep in mind that the "name" in the `/OPER` command is *not* related to
your nick name at all!
## I am an IRC operator, but MODE doesn't work!
By default, IRC operators are still not allowed to use `/MODE` globally.
If you set `OperCanUseMode = yes` in your configuration, then IRC operators can
use the `/MODE` command for changing modes even when they are not joined to the
specific channel.
## How can I "auto-op" users in channels?
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.
# Bugs!?
## Is there a list of known bugs and desired feature enhancements?
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 reports and
feature requests as well as search the bug database.
## What should I do if I found a bug?
Please file a bug report at <https://github.com/ngircd/ngircd/issues/new>!
The authors will be notified automagically :-)

67
doc/FAQ.txt Normal file
View File

@@ -0,0 +1,67 @@
ngIRCd - Next Generation IRC Server
(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.
-- FAQ: Frequently Asked Questions --
I. General
~~~~~~~~~~
Q: Is it possible to link the ngIRCd with non-ngIRCd servers?
A: Yes. ngIRCd is compatible to the original ircd used by IRCNet. Actually
this is being tested with version 2.10.3p3.
Q: Is there a homepage with further information and downloads?
A: Yes. Please visit <http://arthur.ath.cx/~alex/ngircd/>.
Q: Why should I use ngIRCd instead of the original one?
A: ngIRCd offers several benefits: no problems with dynamic IPs, easy to
configure, open source (GPL), under active development.
II. Compilation
~~~~~~~~~~~~~~~
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 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 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 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:
AM_INIT_AUTOMAKE must be used" is displayed.
A: Most probably you are using version 1.5 of GNU automake which seems to be
incompatible to the build system of ngIRCd. Solution: upgrade to at least
version 1.6 of GNU automake.
(If you are using Debian 3.0 "Woody" you can try to downgrade to version
1.4 of GNU automake shipped with this distribution; it should work, too.)
III. Bugs!?
~~~~~~~~~~~
Q: Is there a list of known bugs and desired feature enhancements?
A: Yes. Have a look at the bug tracking system (Bugzilla) for ngIRCd located
at <http://arthur.ath.cx/bugzilla/ngircd/>. 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 <http://arthur.ath.cx/bugzilla/ngircd/>!
The author of the particular component will be notified automagically :-)
--
$Id: FAQ.txt,v 1.7 2003/11/07 21:32:15 alex Exp $

View File

@@ -1,89 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2024 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- HowToRelease.txt --
I. Introduction
~~~~~~~~~~~~~~~
Creating a new ngIRCd release requires a few steps to follow: the source
tree must be in a releasable state (be up to date, include all required
patches, be tested on as many platforms as possible), a name for the new
release must be chosen, and all the files describing the release must be
updated accordingly.
Since ngIRCd release 13 (2009-12-25) we use "simple" release numbers for
major releases (e.g. "13", "17", "42", ...) introducing new features and
sub-releases for bug fixes only (e.g. "14.1", "22.3", ...).
When creating pre-releases or release candidates, please use the tilde ("~")
character to separate the "postfix" in the release number (e.g. "17~rc2"
or "123.4~rc6").
The release/version number of a build is automatically generated using the
GIT "describe" command, see git-describe(1). Therefore it is required that
a new release is tagged in the GIT tree and that the configure script is
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!
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.md file up to date? This command may be helpful:
"( grep '>$' AUTHORS.md; git shortlog -se|cut -c8-|sed 's/^/- /' ) \
| grep -Ev '(alex@barton.de|fw@strlen.de)' \
| LC_ALL=de_DE.UTF-8 sort -u"
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
the Debian "dch" tool of the "devscripts" package:
- contrib/Debian/changelog
f) Commit the above changes to GIT: "git add", "git commit"
g) Create a new signed GIT tag for the new release: "git tag -s".
Please note that we don't use the tilde ("~") here, instead use a simple
hyphen ("-") as delimiter: e.g. "rel-16" "rel-17-rc1", "rel-18-pre2", ...
h) Run "./autogen.sh" to update the ./configure script with the correct
release number (autogenerated using "git describe", see above).
i) Run "./configure" to rebuild all generated Makefiles.
j) Run "make distcheck" (and "make dist-tarZ && make dist-xz") to generate all
of 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).
m) Update the ngIRCd website and its mirrors!
n) Write an announcement to the mailing list, Twitter, ...
o) Relax :-)

View File

@@ -1,92 +1,39 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2003 by 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
# 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.
# Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
# der GNU General Public License (GPL), wie von der Free Software Foundation
# herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
# der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
#
# $Id: Makefile.am,v 1.17 2003/04/22 23:50:18 alex Exp $
#
.tmpl:
$(AM_V_GEN)sed \
-e "s@:ETCDIR:@${sysconfdir}@" \
-e "s@:DOCDIR:@${docdir}@" \
<$< >$@
SUFFIXES = .tmpl
static_docs = \
Bopm.txt \
Capabilities.txt \
Commands.txt \
Container.md \
Contributing.txt \
FAQ.md \
HowToRelease.txt \
Modes.txt \
PAM.txt \
Platforms.txt \
Protocol.txt \
README-AUX.txt \
README-BeOS.txt \
README-Interix.txt \
RFC.txt \
Services.txt \
SSL.md
doc_templates = sample-ngircd.conf.tmpl
generated_docs = sample-ngircd.conf
toplevel_docs = ../AUTHORS.md ../COPYING ../ChangeLog ../INSTALL.md ../NEWS ../README.md
SUBDIRS = src
EXTRA_DIST = $(static_docs) $(doc_templates)
CLEANFILES = $(generated_docs)
EXTRA_DIST = CVS.txt FAQ.txt Protocol.txt Platforms.txt \
README-AUX.txt README-BeOS.txt RFC.txt sample-ngircd.conf
maintainer-clean-local:
rm -f Makefile Makefile.in
all: $(generated_docs)
docdir = $(datadir)/doc/$(PACKAGE)
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; \
documents = $(EXTRA_DIST) ../AUTHORS ../COPYING ../ChangeLog ../INSTALL \
../NEWS ../README
install-data-hook:
$(mkinstalldirs) $(DESTDIR)$(sysconfdir)
if [ ! -f $(DESTDIR)$(sysconfdir)/ngircd.conf ]; then \
$(INSTALL) -m 600 -c $(srcdir)/sample-ngircd.conf $(DESTDIR)$(sysconfdir)/ngircd.conf; \
fi
$(MKDIR_P) -m 755 $(DESTDIR)$(docdir)
for f in $(static_docs) $(toplevel_docs); do \
$(mkinstalldirs) $(DESTDIR)$(docdir)
for f in $(documents); do \
$(INSTALL) -m 644 -c $(srcdir)/$$f $(DESTDIR)$(docdir)/; \
done
for f in $(generated_docs); do \
$(INSTALL) -m 644 -c $$f $(DESTDIR)$(docdir)/; \
done
install-config:
$(INSTALL) -m 600 -c sample-ngircd.conf $(DESTDIR)$(sysconfdir)/ngircd.conf
@echo; \
echo " ** NOTE: Installed sample configuration file:"; \
echo " ** \"$(DESTDIR)$(sysconfdir)/ngircd.conf\""; \
echo
uninstall-hook:
rm -rf $(DESTDIR)$(docdir)
@if cmp --silent sample-ngircd.conf $(DESTDIR)$(sysconfdir)/ngircd.conf; then \
${MAKE} uninstall-config; \
else \
echo; \
echo " ** NOTE: Not uninstalling changed configuration file:"; \
echo " ** \"$(DESTDIR)$(sysconfdir)/ngircd.conf\""; \
echo; \
fi
uninstall-config:
rm -f $(DESTDIR)$(sysconfdir)/ngircd.conf
.PHONY: install-config uninstall-config
# -eof-

View File

@@ -1,95 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- Modes.txt --
This document lists the different user modes, channel modes, and channel
user modes that ngIRCd supports.
I. User Modes
~~~~~~~~~~~~~
User modes are attributes a user has in the network, regardless of the
channels he is using at the moment.
mode since description
a 0.3.0 User is away.
b 20 User blocks private messages and notices.
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.
R (1) 19 User is registered (e.g. by NickServ).
s 0.4.0 User wants to receive server notices.
w 0.11.0 User wants to receive WALLOPS messages.
x 17 Hostname of this user is "cloaked".
II. Channel Modes
~~~~~~~~~~~~~~~~~
Channel modes are attributes of specific channels which are valid for all
users joined (or trying to join) to this channel. Some modes add and remove
users to lists (e.g. "invite list", "ban list"), others have parameters
(like "channel key"), most are simple flags (like "moderated").
mode since description
b 0.5.0 Add/remove a host mask to the ban list.
e 19 Add/remove a host mask to the exception list.
i 0.5.0 Channel is "invite only".
I 0.5.0 Add/remove a host mask to the invite list.
k 0.6.0 Channel has a "key" (a password).
l 0.6.0 Channel has a user limit.
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.
r (1) 19 Channel is "registered" (e.g. by ChanServ).
R 19 Only registered users are allowed to join this channel.
s 0.9.0 Channel is "secret".
t 0.3.0 Only ChanOps are allowed to modify the channel topic.
V 20 Channel doesn't allow invites.
z 16 Only users connected via SSL are allowed to join the channel.
III. Channel User Modes
~~~~~~~~~~~~~~~~~~~~~~~
Channel user modes are attributes that a particular user has in a specific
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: "&".
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: "%".
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.

View File

@@ -1,49 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2013 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- PAM.txt --
ngIRCd can optionally be compiled to use PAM, the Pluggable Authentication
Modules library, for user authentication. When compiled with PAM support,
ngIRCd will authenticate all users connecting to the daemon using the
configured PAM modules in an asynchronous child process.
To enable PAM, you have to pass the command line parameter "--with-pam" to
the "configure" script. Please see the PAM documentation ("man 7 pam") for
details and information about configuring PAM and its individual modules.
A very simple -- and quite useless ;-) -- example would be:
/etc/pam.d/ngircd:
auth required pam_debug.so
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
is running as. Therefore a lot of PAM modules aren't working as expected,
because they need root privileges ("pam_unix", for example)!
Only PAM modules not(!) requiring root privileges (such as "pam_pgsql",
"pam_mysql", "pam_opendirectory" ...) can be used in conjunction with ngIRCd.
More Examples:
* Use an own "password file" for ngIRCd:
Note: you can use the htpasswd(1) utility of Apache to manage password
files used by pam_pwdfile, see "man htpasswd"!
/etc/pam.d/ngircd:
auth required pam_pwdfile.so pwdfile=/etc/ngircd/ngircd.passwd

View File

@@ -1,179 +1,59 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2024 Alexander Barton and Contributors.
(c)2001-2004 Alexander Barton
alex@barton.de, http://www.barton.de/
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- Platforms.txt --
This file lists the status of all platforms on which ngIRCd has been tested.
Included is the date and version of the last test and the name of the tester
or maintainer.
This file lists the status of all platforms on which the ngIRCd has been
tested. Included is the date and version of the last "official" test and
the name of the tester/maintainer.
If you successfully compiled and tested ngIRCd on a platform that isn't listed
here, please write to the mailing list so that this list can be updated. The
script "./contrib/platformtest.sh" should output a summary that is suitable
for inclusion here. Thanks for your help!
If you successfully compiled and tested ngIRCd on a platform that isn't
listed here, please contact Alexander Barton, <alex@barton.de>, so that this
list can be updated. Thanks for your help!
the executable works ("runs") as expected --+
tests run successfully ("make check") --+ |
ngIRCd compiles ("make") --+ | |
./configure works --+ | | |
| | | |
Platform Compiler ngIRCd Date Tester C M T R *
--------------------------- ------------ ---------- -------- -------- - - - - -
aarch64/apple/darwin A-clang 12.0 26 20-12-10 goetz N Y Y Y 3
aarch64/apple/darwin23.4.0 A-clang 15.0 27~rc1 24-04-13 alex Y Y Y Y 3
aarch64/unknown/linux-gnu gcc 12.2.0 27~rc1 24-04-21 alex Y Y Y Y 1
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
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/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/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/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.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
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
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/unknown/gnu0.9 gcc 12.2.0 27~rc1 24-04-21 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/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 26 20-10-20 alex Y Y Y Y 3
x86_64/apple/darwin20.1.0 A-clang 12.0 26 21-01-01 alex Y Y Y Y 3
x86_64/apple/darwin23.4.0 A-clang 15.0 27~rc1 24-04-21 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/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 26 20-08-28 alex Y Y Y Y 3
x86_64/unknown/freebsd14.0 F-clang 16.0 27~rc1 24-04-21 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/haiku gcc 13.2.0 27~rc1 24-04-21 user Y Y Y 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 D-clang 14.0 27~rc1 24-04-21 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/pc/linux-gnu gcc 11.4.0 27~rc1 24-04-21 alex Y Y Y Y 1
x86_64/pc/linux-gnu gcc 12.2.0 27~rc1 24-04-21 alex Y Y Y Y 1
x86_64/pc/linux-gnu gcc 13.2.1 27~rc1 24-04-21 alex Y Y Y Y 1
x86_64/pc/solaris2.11 gcc 10.3.0 27~rc1 24-04-26 alex Y Y y Y 5
x86_64/unknown/linux-gnu icc 16 23 16-01-13 goetz 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/netbsd10.0 gcc 10.5.0 27~rc1 24-04-21 alex Y Y Y Y 3
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/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 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
x86_64/unknown/openbsd7.4 O-clang 13.0 27~rc1 24-04-21 alex Y Y Y Y 3
the executable works ("runs") as expected --+
tests run successfully ("make check") --+ |
ngIRCd compiles ("make") --+ | |
./configure works --+ | | |
| | | |
Platform Compiler ngIRCd Date Tester C M T R See
--------------------------- ------------ ---------- -------- ------ - - - - ---
i386/pc/solaris2.9 gcc 3.2.2 CVSHEAD 04-02-24 alex Y Y Y Y
i386/unknown/freebsd5.0 gcc 3.2.1 0.7.0 03-05-15 alex Y Y Y Y
i386/unknown/gnu0.3 gcc 3.2.3 CVSHEAD 03-05-05 alex Y Y n Y
i386/unknown/netbsdelf1.6.1 gcc 2.95.3 CVSHEAD 04-02-24 alex Y Y Y Y
i686/pc/cygwin gcc 3.2 0.7.x-CVS 03-04-24 alex Y Y n Y
i686/pc/linux-gnu gcc 2.95 0.7.0 03-05-15 alex Y Y Y Y (1)
i686/pc/linux-gnu gcc 3.3.3 CVSHEAD 04-02-22 alex Y Y Y Y (1)
m68k/apple/aux3.1.1 Orig. A/UX 0.7.x-CVS 03-04-22 alex Y Y Y 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 ? ?
powerpc/apple/darwin6.5 gcc 3.1 0.7.x-CVS 03-04-23 alex Y Y Y Y
powerpc/apple/darwin7.2.0 gcc 3.3 CVSHEAD 04-02-22 alex Y Y Y 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 CVSHEAD 04-02-24 alex Y Y Y Y
* Notes
~~~~~~~
Notes
~~~~~
(1) i686/pc/linux-gnu:
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 (2.95.3, 3.0, 3.2, and 3.3). The
eldest glibc used was glibc-2.0.7. ngIRCd compiled and run on all these
systems without problems.
(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.
(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.
(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).
--
$Id: Platforms.txt,v 1.11 2004/04/05 11:11:05 alex Exp $

View File

@@ -1,8 +1,9 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2019 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.
@@ -26,12 +27,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
~~~~~~~~~~~~~~~~~~~~~
@@ -84,20 +79,9 @@ The following <serverflags> are defined at the moment:
peer understands this flag, it will send "MODE +I" and "MODE +b"
commands after the server link has been established.
- H: The server supports the "enhanced server handshake", see section II.2
for a detailed description.
- M: Changing client "metadata" (hostname, real name, ...) using the
METADATA command is supported.
- o: IRC operators are allowed to change channel- and channel-user-modes
even if they aren't channel-operator of the affected channel.
- S: The server supports the SERVICE command (on this link).
- X: Server supports XOP channel modes (owner, admin, halfop) and supports
these user prefixes in CHANINFO commands, for example.
- Z: Compressed server links are supported by the server.
Example for a complete <flags> string: "ngircd|0.7.5:CZ".
@@ -106,63 +90,14 @@ The optional parameter <options> is used to propagate server options as
defined in RFC 2813, section 4.1.1.
II.2 Enhanced Server Handshake
The "enhanced server handshake" is used when both servers support this IRC+
extension, which is indicated by the 'H' flag in the <serverflags> sent with
the PASS command, see section II.1.
It basically means, that after exchanging the PASS and SERVER commands the
server is not registered in the network (as usual), but that IRC numerics
are exchanged until the numeric 376 (ENDOFMOTD) is received. Afterwards the
peer is registered in the network as with the regular IRC protocol.
A server implementing the enhanced server handshake (and indicating this
using 'H' in the <serverflags>) MUST ignore all unknown numerics to it
silently.
In addition, such a server should at least send the numeric 005 (ISUPPORT)
to its peer, containing the following information. Syntax: <key>=<value>,
one token per IRC parameter. If the server has to send more than 12 token
it must send separate ISUPPORT numerics (this is a limitation of the IRC
protocol which allows at max 15 arguments per command).
- NICKLEN: Maximum nickname length. Default: 9.
- CASEMAPPING: Case mapping used for nick- and channel name comparing.
Default: "ascii", the chars [a-z] are lowercase of [A-Z].
- PREFIX: List of channel modes a person can get and the respective prefix
a channel or nickname will get in case the person has it. The order of the
modes goes from most powerful to least powerful. Default: "(ov)@+"
- CHANTYPES: Supported channel prefixes. Default: "#".
- CHANMODES: List of channel modes for 4 types, separated by comma (","):
Mode that adds or removes a nick or address to a list, mode that changes
a setting (both have always has a parameter), mode that changes a setting
and only has a parameter when set, and mode that changes a setting and
never has a parameter. For example "bI,k,l,imnPst".
- CHANLIMIT: Maximum number of channels allowed to join by channel prefix,
for example "#:10".
Please see <http://www.irc.org/tech_docs/005.html> for details.
The information exchanged using ISUPPORT can be used to detect configuration
incompatibilities (different maximum nickname length, for example) and
therefore to disconnect the peer prior to registering it in the network.
II.3 Exchange channel-modes, topics, and persistent channels
II.2 Exchange channel-modes, topics, and persistent channels
Command: CHANINFO
Parameters: <channel> +<modes> [[<key> <limit>] <topic>]
Parameters: <channel> +<modes> <key> <maxusers> [<topic>]
Used by: servers only
CHANINFO is used by servers to inform each other about a channel: its
modes, channel key, user limits and its topic. The parameter combination
<key> and <limit> is optional, as well as the <topic> parameter, so that
there are three possible forms of this command:
CHANINFO <channel> +<modes>
CHANINFO <channel> +<modes> <topic>
CHANINFO <channel> +<modes> <key> <limit> <topic>
modes, channel key, user limits and its topic. <topic> is optional.
If the channel already exists on the server receiving the CHANINFO command,
it only adopts the <modes> (or the <topic>) if there are no modes (or topic)
@@ -179,87 +114,5 @@ a channel has no user limit (the parameter <modes> doesn't list the "l"
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>]
Used by: unregistered clients only
The WEBIRC command is used by some Web-to-IRC gateways to set the correct
user name and host name of users instead of their own. It must be the very
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
Command: CHARCONV
Parameters: <client-charset>
Used by: registered clients
Replies: RPL_IP_CHARCONV, ERR_IP_CHARCONV
A client can set its character set encoding using the CHARCONV command:
after receiving such a command, the server translates all message data
received from the client using the set <client-charset> to the server
encoding (UTF-8), and all message data which is to be sent to the client
from the server encoding (UTF-8) to <client-charset>.
The list of supported client character sets is implementation dependent.
If a client sets its <client-charset> to the server encoding (UTF-8),
it disables all conversions; the connection behaves as if no CHARCONV
command has been sent at all in this session.
II.6 Update client "metadata"
Command: METADATA
Parameters: <target> <key> <value>
Used by: servers only
The METADATA command is used on server-links to update "metadata" information
of clients, like the hostname, the info text ("real name"), or the user name.
The server updates its client database according to the received <key> and
<value> parameters, and passes the METADATA command on to all the other
servers in the network that support this command (see section II.1 "Register
new server link", <serverflag> "M"), even if it doesn't support the given
<key> itself: unknown <key> names are ignored silently!
The following <key> names are defined:
- "accountname": the account name of a client (can't be empty)
- "certfp": the certificate fingerprint of a client (can't be empty)
- "cloakhost": the cloaked hostname of a client
- "host": the hostname of a client (can't be empty)
- "info": info text ("real name") of a client
- "user": the user name of a client (can't be empty)
III. Numerics used by IRC+ Protocol
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The IRC+ protocol uses numerics in the range 800-899 which aren't used by
RFC 2812 and hopefully don't clash with other implementations ...
Numerics 800-849 are used for status and success messages, and numerics
850-899 are failure and error messages.
III.1 IRC+ status and success numerics
801 - RPL_IP_CHARCONV
%1 :Client encoding set"
%1 client character set
III.2 IRC+ failure and error numerics
851 - ERR_IP_CHARCONV
:Can't initialize client encoding
--
$Id: Protocol.txt,v 1.12 2004/04/25 15:44:10 alex Exp $

View File

@@ -1,126 +0,0 @@
# [ngIRCd](https://ngircd.barton.de) - Quick Start
This *Quick Start* document explains how to configure ngIRCd, the lightweight
Internet Relay Chat (IRC) server, using some "real world" scenarios.
## Introduction
The ngIRCd daemon can be run without any configuration file using built-in
defaults. These defaults are probably sufficient for very simple single-node
setups, but most probably need further tweaking for more "advanced" setups.
You can check the current settings by running `ngircd --configtest`. This
command not only shows the settings, it shows error, warning and hints, if it
detects any.
Therefore it is definitely best practice to *always run this check* after
making any changes to the configuration file(s) and double-check that
everything was parsed as expected!
### Configuration File and Drop-in Directory
After installing ngIRCd, a sample configuration file should have been set up if
none existed 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`).
Run the command `ngircd --configtest` to check the name of the configuration
file which is used by default on your local system.
In addition, ngIRCd supports configuration file snippets in a "drop-in"
directory which is configured with the `IncludeDir` variable in the `[Options]`
section and has a built-in default value (like `/etc/ngircd/ngircd.conf.d/`).
All configuration files matching the `*.conf` pattern are read-in from this
directory after the main `ngircd.conf` file.
It is a good idea to not edit the default `ngircd.conf` file but to create one
ore more new files in this include directory, overriding the defaults as
needed. This way you don't get any clashes when updating ngIRCd to newer
releases.
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.
## Configuration File Syntax
The configuration consists of sections and parameters.
A section begins with the name of the section in square brackets (like
`[Example]`) and continues until the next section begins. Sections contain
parameters of the form `name = value`.
Section and parameter names are not case sensitive.
Please see the `ngircd.conf`(5) manual page for an in-depth description of the
configuration file, its syntax and all supported configuration options.
The sample configuration file uses comments beginning with `#` *or* `;` -- this
is only for the better understanding of the file, both comment styles are
equal. The lines commented out with `;` show example or default settings,
whereas the lines using `#` are descriptions of the options.
## Simple Single-Instance Server
A good starting point is to configure a valid (and unique!) IRC server name
(which is *not* related to a host name, it is purely a unique *server ID* that
must contain at least one dot ".").
This looks like this:
``` ini
[Global]
Name = my.irc.server
```
This results in the following *warning* in the logs when starting the daemon:
`No administrative information configured but required by RFC!` -- which works,
but is a bit ugly. So let's fix that by adding some *admin info*:
``` ini
[Global]
Name = irc.example.net
AdminInfo1 = Example IRC Server
AdminInfo2 = Anywhere On Earth
AdminEMail = admin@irc.example.net
```
*Please Note*: The server `Name` looks like a DNS host name, but it is not: in
fact it is not related to your server's fully qualified domain name (FQDN) in
any way and can be an arbitrary string -- but it *must* contain at least
one dot (".") character!
## Add a Local IRC Operator
Some IRC commands, like `REHASH` which reloads the server configuration on the
fly, require the user to authenticate to the daemon to become an *IRC
Operator* first.
So let's configure an *Operator* account in the configuration file (in
addition to what we configured above):
``` ini
[Operator]
# ID of the operator (may be different of the nickname)
Name = BigOp
# Password of the IRC operator
Password = secret
# Optional Mask from which /OPER will be accepted
;Mask = *!ident@somewhere.example.com
```
Now you can use the IRC command `OPER BigOp secret` to get *IRC Operator*
status on that server.
Please choose a sensible password, and keep in mind that the *name* is not
related to the *nickname* used by the user at all!
We don't make use of the `Mask` setting in the example above (commented out
with the `;` character), but it is a good idea to enable it whenever possible!
And you can have as many *Operator blocks* as you like, configuring multiple
different IRC Operators.
## Configuring SSL/TLS Encryption
Please see the file `SSL.md` for details.

View File

@@ -1,7 +1,7 @@
ngIRCd - Next Generation IRC Server
(c)2001-2005 Alexander Barton,
(c)2001-2003 by Alexander Barton,
alex@barton.de, http://www.barton.de/
ngIRCd is free software and published under the
@@ -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.ath.cx/pub/AUX/Software/Tools/sed-3.02.tar.gz
A/UX comes with /bin/sed which isn't supporting all functions needed
by GNU automake/autoconf.
@@ -33,11 +33,11 @@ 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
http://ftp.mayn.de/pub/apple/apple_unix/Sys_stuff/libUTIL-2.1.tar.gz
ftp://arthur.ath.cx/pub/AUX/Software/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().
systems but not on A/UX e.g. memmove(), strerror() und strdup().
After installation of these packages just do a "./configure" and "make" to
@@ -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.ath.cx/pub/UNIX/AUX/Software/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
@@ -60,8 +60,8 @@ A few hints in case of errors:
the 'config.status' script. Better rename /bin/sh to /bin/sh.AUX and
replace it by a symbolic link to /bin/ksh (ln -s /bin/ksh /bin/sh as
root).
These procedure shouldn't cause you into problems and is recommended
These procedure should'nt cause you into problems and is recommended
even if you don't use ngIRCd.
--
$Id: README-AUX.txt,v 1.10 2006/07/23 12:19:57 alex Exp $
$Id: README-AUX.txt,v 1.8 2003/04/21 21:59:34 goetz Exp $

View File

@@ -24,7 +24,7 @@ mit diesem Fehler ab:
select(): Bad file descriptor!
Es sieht leider so aus, als ob das select() von BeOS nicht mit File-Handles
von Pipes verschiedener Prozesse umgehen kann: sobald der Resolver asynchron
von Pipes verschiedener Prozesse umgehen kann: sobald der Resolver asyncron
gestartet wird, also Pipe-Handles im select() vorhanden sind, fuehrt das zu
obiger Meldung.

View File

@@ -1,44 +0,0 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2012 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- README-Interix.txt --
ngIRCd release 15 has successfully been tested on Microsoft Windows XP
Professional using the Services for UNIX (SFU) version 3.5 and Microsoft
Windows 7 with the bundled Subsystem for UNIX Applications (SUA).
SFU are supported on Windows 2000, Windows 2000 Server, Windows XP, and
Windows Server 2003. SUA is supported on Windows Server 2003 R2, Windows
Server 2008 & 2008 R2, Windows Vista, and Windows 7 -- so ngIRCd should be
able to run on all of these platforms.
But please note that two things:
1. Don't use the poll() IO API
The poll() API function is not fully implemented by SFU/SUA and therefore
can't be used by ngIRCd -- which normally would be the default. Please see
<http://www.suacommunity.com/faqs.aspx> section 4.25 for details:
"If you do try to use the poll() API your program will block on the
API call forever. You must direct your program to build using the
select() API."
So when running the ./configure script, you HAVE TO DISABLE poll() support:
./configure --without-poll
ngIRCd then defaults to using the select() API function which works fine.
2. Use GNU make(1)
Starting with ngIRCd 18, our build system doesn't work with the default
make(1) binary of Interix, you should use GNU make instead (tested with
version 3.82 built from source).

View File

@@ -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 $

View File

@@ -1,80 +0,0 @@
# [ngIRCd](https://ngircd.barton.de) - SSL/TLS Encrypted Connections
ngIRCd supports SSL/TLS encrypted connections using the *OpenSSL* or *GnuTLS*
libraries. Both encrypted server-server links as well as client-server links
are supported.
SSL is a compile-time option which is disabled by default. Use one of these
options of the ./configure script to enable it:
- `--with-openssl`: enable SSL support using OpenSSL.
- `--with-gnutls`: enable SSL support using GnuTLS.
You can check the output of `ngircd --version` to validate if your executable
includes support for SSL or not: "+SSL" must be listed in the feature flags.
You also need a SSL key and certificate, for example using Let's Encrypt, which
is out of the scope of this document.
From a feature point of view, ngIRCds support for both libraries is
comparable. The only major difference (at this time) is that ngIRCd with GnuTLS
does not support password protected private keys.
## Configuration
SSL-encrypted connections and plain-text connects can't run on the same network
port (which is a limitation of the IRC protocol); therefore you have to define
separate port(s) in your `[SSL]` block in the configuration file.
A minimal configuration for *accepting* SSL-encrypted client & server
connections looks like this:
``` ini
[SSL]
CertFile = /etc/ssl/certs/my-fullchain.pem
KeyFile = /etc/ssl/certs/my-privkey.pem
Ports = 6697, 6698
```
In this case, the server only deals with *incoming* connections and never has to
validate SSL certificates itself, and therefore no "Certificate Authorities" are
needed.
If you want to use *outgoing* SSL-connections to other servers, you need to add:
``` ini
[SSL]
...
CAFile = /etc/ssl/certs/ca-certificates.crt
DHFile = /etc/ngircd/dhparams.pem
[SERVER]
...
SSLConnect = yes
```
The `CAFile` option configures a file listing all the certificates of the
trusted Certificate Authorities.
The Diffie-Hellman parameters file `dhparams.pem` can be created like this:
- OpenSSL: `openssl dhparam -2 -out /etc/ngircd/dhparams.pem 4096`
- GnuTLS: `certtool --generate-dh-params --bits 4096 --outfile /etc/ngircd/dhparams.pem`
Note that enabling `SSLConnect` not only enforces SSL-encrypted links for
*outgoing* connections to other servers, but for *incoming* connections as well:
If a server configured with `SSLConnect = yes` tries to connect on a plain-text
connection, it won't be accepted to prevent data leakage! Therefore you should
set this for *all* servers you expect to use SSL-encrypted connections!
## Accepting untrusted Remote Certificates
If you are using self-signed certificates or otherwise invalid certificates,
which ngIRCd would reject by default, you can force ngIRCd to skip certificate
validation on a per-server basis and continue establishing outgoing connections
to the respective peer by setting `SSLVerify = no` in the `[SERVER]` block of
this remote server in your configuration.
But please think twice before doing so: the established connection is still
encrypted but the remote site is *not verified at all* and man-in-the-middle
attacks are possible!

View File

@@ -1,152 +0,0 @@
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.
-- Services.txt --
ngIRCd doesn't implement a "special IRC services interface", but services
acting as a "regular servers" ("pseudo servers") are supported, either
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/>)
- "IRC Services" 5.1.x by Andrew Church (<http://achurch.org/services/>)
This document describes setting up ngIRCd and these services.
Please let us know if you are successfully using other IRC service packages or
which problems you encounter -- thanks!
Setting up ngIRCd
~~~~~~~~~~~~~~~~~
The "pseudo server" handling the IRC services is configured as a regular
remote server in the ngircd.conf(5). In addition the variable "ServiceMask"
should be set, enabling this ngIRCd to recognize the "pseudo users" as IRC
services instead of regular IRC users.
Example:
[GLOBAL]
Name = server.irc.net
Ports = 6667
[SERVER]
Name = services.irc.net
MyPassword = 123abc
PeerPassword = 123abc
ServiceMask = *Serv
Setting up Anope 1.9.x & 2.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anope 1.9.8 or later (<http://www.anope.org/>) can be used with ngIRCd using
the "ngircd" protocol module.
At least the following settings have to be tweaked, in addition to all the
settings marked as required by Anope:
In conf/services.conf:
define
{
name = "services.host"
value = "services.irc.net"
}
uplink
{
host = "server.irc.net"
port = 6667
password = "123abc"
}
# Load ngIRCd protocol module
module
{
name = "ngircd"
}
networkinfo
{
# Must be set to the "MaxNickLength" setting of ngIRCd!
nicklen = 9
# When not using "strict mode", which is the default:
userlen = 20
chanlen = 50
}
In conf/nickserv.conf:
module
{
name = "nickserv"
# not required if you are running ngIRCd with a higher nickname limit
# ("MaxNickLength") than 11 characters, but REQUIRED by default!
guestnickprefix = "G-"
}
Setting up Atheme 7.0.2 or later
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Atheme 7.0.2 or later (<https://atheme.org/>) 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;
};
The documentation of Atheme can be found in the doc/ directory of the
Atheme source distribution.
Setting up IRC Services 5.1.x
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
IRC Services 5.1.3 and above can be used with ngIRCd using the "rfc1459"
protocol module.
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>
At least the following settings have to be tweaked, in addition to all the
settings marked as required by IRC Services:
In ircservices.conf:
Variable Example value
RemoteServer server.irc.net 6667 "123abc"
ServerName "services.irc.net"
LoadModule protocol/rfc1459
In modules.conf:
Module protocol/rfc1459
The documentation of IRC Services can be found here:
<http://www.ircservices.za.net/docs/>

160
doc/sample-ngircd.conf Normal file
View File

@@ -0,0 +1,160 @@
# $Id: sample-ngircd.conf,v 1.25.2.1 2004/05/07 11:24:17 alex Exp $
#
# This is a sample configuration file for the ngIRCd, which must be adepted
# to the local preferences and needs.
#
# Comments are started with "#" or ";".
#
# Use "ngircd --configtest" (see manual page ngircd(8)) to validate that the
# server interpreted the configuration file as expected!
#
[Global]
# The [Global] 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.
# Server name in the IRC network, must contain at least one dot
# (".") and be unique in the IRC network. Required!
Name = irc.the.net
# Info text of the server. This will be shown by WHOIS and
# LINKS requests for example.
Info = Server Info Text
# Global password for all users needed to connect to the server
;Password = abc
# Information about the server and the administrator, used by the
# ADMIN command. Not required by server but by RFC!
;AdminInfo1 = Description
;AdminInfo2 = Location
;AdminEMail = admin@irc.server
# Ports on which the server should listen. There may be more than
# one port, separated with ";". (Default: 6667)
;Ports = 6667, 6668, 66694
# IP address on which the server should listen. (Default: empty,
# so the server listens on all IP addresses of the system)
;Listen = 1.2.3.4
# Text file with the "message of the day" (MOTD). This message will
# be shown to all users connecting to the server:
;MotdFile = /usr/local/etc/ngircd.motd
# A simple Phrase (<256 chars) if you don't want to use a motd file.
# If it is set no MotdFile will be read at all.
;MotdPhrase = "Hello world!"
# User ID under which the server should run; you can use the name
# of the user or the numerical ID. ATTENTION: For this to work the
# server must have been started with root privileges! In addition,
# the configuration and MOTD files must be readable by this user,
# otherwise RESTART and REHASH won't work!
;ServerUID = 65534
# Group ID under which the ngircd should run; you can use the name
# of the group or the numerical ID. ATTENTION: For this to work the
# server must have been started with root privileges!
;ServerGID = 65534
# A directory to chroot in when everything is initialized. It
# doesn't need to be populated if ngIRCd is compiled as a static
# binary. By default ngIRCd won't use the chroot() feature.
# ATTENTION: For this to work the server must have been started
# with root privileges!
;ChrootDir = /var/empty
# After <PingTimeout> seconds of inactivity the server will send a
# PING to the peer to test whether it is alive or not.
;PingTimeout = 120
# If a client fails to answer a PING with a PONG within <PongTimeout>
# seconds, it will be disconnected by the server.
;PongTimeout = 20
# The server tries every <ConnectRetry> seconds to establish a link
# to not yet (or no longer) connected servers.
;ConnectRetry = 60
# Should IRC Operators be allowed to use the MODE command even if
# they are not(!) channel-operators?
;OperCanUseMode = no
# Maximum number of simultaneous connection the server is allowed
# to accept (<=0: unlimited):
;MaxConnections = -1
# Maximum number of simultaneous connections from a single IP address
# the server will accept (<=0: unlimited):
;MaxConnectionsIP = 5
# Maximum number of channels a user can be member of (<=0: no limit):
;MaxJoins = 10
[Operator]
# [Operator] sections are used to define IRC Operators. There may be
# more than one [Operator] block, one for each local operator.
# ID of the operator (may be different of the nick name)
;Name = TheOper
# Password of the IRC operator
;Password = ThePwd
[Server]
# Other servers are configured in [Server] sections. If you
# configure a port for the connection, then this ngircd tries to
# 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.
#
# Server Groups:
# The ngIRCd allows "server groups": You can assign an "ID" to every
# server with which you want this ngIRCd to link. If a server of a
# group won't answer, the ngIRCd tries to connect to the next server
# in the given group. But the ngircd never tries to connect to two
# servers with the same group ID.
# IRC name of the server
;Name = irc2.the.net
# Internet host name of the peer
;Host = connect-to-host.the.net
# Port of the server to which the ngIRCd should connect. If you
# assign no port the ngIRCd waits for incoming connections.
;Port = 6666
# Own password for the connection. This password has to be configured
# as "PeerPassword" on the other server.
;MyPassword = MySecret
# Foreign password for this connection. This password has to be
# configured as "MyPassword" on the other server.
;PeerPassword = PeerSecret
# Group of this server (optional)
;Group = 123
[Channel]
# Pre-defined channels can be configured in [Channel] sections.
# Such channels are created by the server when starting up and even
# persist when there are no more members left.
# Persistent channels are marked with the mode 'P', which can be set
# and unset by IRC operators like other modes on the fly.
# There may be more than one [Channel] block.
# Name of the channel
;Name = #TheName
# Topic for this channel
;Topic = a great topic
# Initial channel modes
;Modes = tn
# -eof-

View File

@@ -1,425 +0,0 @@
#
# This is a sample configuration file for the ngIRCd IRC daemon, which must
# be customized to the local preferences and needs.
#
# Comments are started with "#" or ";".
#
# A lot of configuration options in this file start with a ";". You have
# to remove the ";" in front of each variable to actually set a value!
# The disabled variables are shown with example values for completeness only
# and the daemon is using compiled-in default settings.
#
# Use "ngircd --configtest" (see manual page ngircd(8)) to validate that the
# server interprets the configuration file as expected!
#
# Please see ngircd.conf(5) for a complete list of configuration options
# and their descriptions.
#
[Global]
# The [Global] 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!
# Server name in the IRC network, must contain at least one dot
# (".") and be unique in the IRC network. When not set, ngIRCd tries
# to deduce a valid IRC server name from the local host name.
;Name = irc.example.net
# Information about the server and the administrator, used by the
# ADMIN command. Not required by server but by RFC!
;AdminInfo1 = Description
;AdminInfo2 = Location
;AdminEMail = admin@irc.server
# Text file which contains the ngIRCd help text. This file is required
# to display help texts when using the "HELP <cmd>" command. Default: a
# built-in standard path (check "ngircd --configtest").
;HelpFile = :DOCDIR:/Commands.txt
# Info text of the server. This will be shown by WHOIS and
# LINKS requests for example. Set to the server software name and
# version by default.
;Info = Server Info Text
# Comma separated list of IP addresses on which the server should
# listen. Default values are:
# "0.0.0.0" or (if compiled with IPv6 support) "::,0.0.0.0"
# so the server listens on all IP addresses of the system by default.
;Listen = 127.0.0.1,192.168.0.1
# Text file with the "message of the day" (MOTD). This message will
# be shown to all users connecting to the server: Default: a built-in
# standard path (check "ngircd --configtest").
;MotdFile = :ETCDIR:/ngircd.motd
# A simple Phrase (<127 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
# This tells ngIRCd to write its current process ID to a file.
# Note that the pidfile is written AFTER chroot and switching the
# user ID, e.g. the directory the pidfile resides in must be
# writable by the ngIRCd user and exist in the chroot directory.
;PidFile = /var/run/ngircd/ngircd.pid
# Ports on which the server should listen. There may be more than
# one port, separated with ",". (Default: 6667)
;Ports = 6667, 6668, 6669
# Group ID under which the ngIRCd should run; you can use the name
# of the group or the numerical ID. ATTENTION: For this to work the
# server must have been started with root privileges!
;ServerGID = 65534
# User ID under which the server should run; you can use the name
# of the user or the numerical ID. ATTENTION: For this to work the
# server must have been started with root privileges! In addition,
# the configuration and MOTD files must be readable by this user,
# otherwise RESTART and REHASH won't work!
;ServerUID = 65534
[Limits]
# Define some limits and timeouts for this ngIRCd instance. Default
# values should be safe, but it is wise to double-check :-)
# The server tries every <ConnectRetry> seconds to establish a link
# to not yet (or no longer) connected servers.
;ConnectRetry = 60
# Number of seconds after which the whole daemon should shutdown when
# no connections are left active after handling at least one client
# (0: never, which is the default).
# This can be useful for testing or when ngIRCd is started using
# "socket activation" with systemd(8), for example.
;IdleTimeout = 0
# Maximum number of simultaneous in- and outbound connections the
# server is allowed to accept (0: unlimited):
;MaxConnections = 0
# Maximum number of simultaneous connections from a single IP address
# the server will accept (0: unlimited):
;MaxConnectionsIP = 5
# Maximum number of channels a user can be member of (0: no limit):
;MaxJoins = 10
# 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!
;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
# After <PingTimeout> seconds of inactivity the server will send a
# PING to the peer to test whether it is alive or not.
;PingTimeout = 120
# If a client fails to answer a PING with a PONG within <PongTimeout>
# seconds, it will be disconnected by the server.
;PongTimeout = 20
[Options]
# Optional features and configuration options to further tweak the
# behavior of ngIRCd. If you want to get started quickly, you most
# probably don't have to make changes here -- they are all optional.
# List of allowed channel types (channel prefixes) for newly created
# channels on the local server. By default, all supported channel
# types are allowed. Set this variable to the empty string to disallow
# creation of new channels by local clients at all.
;AllowedChannelTypes = #&+
# Are remote IRC operators allowed to control this server, e.g.
# use commands like CONNECT, SQUIT, DIE, ...?
;AllowRemoteOper = no
# A directory to chroot in when everything is initialized. It
# doesn't need to be populated if ngIRCd is compiled as a static
# binary. By default ngIRCd won't use the chroot() feature.
# ATTENTION: For this to work the server must have been started
# with root privileges!
;ChrootDir = /var/empty
# Set this hostname for every client instead of the real one.
# Use %x to add the hashed value of the original hostname.
;CloakHost = cloaked.host
# Use this hostname for hostname cloaking on clients that have the
# user mode "+x" set, instead of the name of the server.
# Use %x to add the hashed value of the original hostname.
;CloakHostModeX = cloaked.user
# The Salt for cloaked hostname hashing. When undefined a random
# hash is generated after each server start.
;CloakHostSalt = abcdefghijklmnopqrstuvwxyz
# Set every clients' user name to their nickname
;CloakUserToNick = yes
# Try to connect to other IRC servers using IPv4 and IPv6, if possible.
;ConnectIPv6 = yes
;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.
;DefaultUserModes = i
# Do DNS lookups when a client connects to the server.
;DNS = yes
# Do IDENT lookups if ngIRCd has been compiled with support for it.
# Users identified using IDENT are registered without the "~" character
# prepended to their user name.
;Ident = yes
# Directory containing configuration snippets (*.conf), that should
# be read in after parsing this configuration file.
# Default: a built-in directory name when no configuration file was
# explicitly given on the command line (check "ngircd --configtest"),
# none (empty) otherwise.
;IncludeDir = :ETCDIR:/conf.d
# Enhance user privacy slightly (useful for IRC server on TOR or I2P)
# by censoring some information like idle time, logon time, etc.
;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 *"
# messages to clients while connecting.
;NoticeBeforeRegistration = no
# Should IRC Operators be allowed to use the MODE command even if
# they are not(!) channel-operators?
;OperCanUseMode = no
# Should IRC Operators get AutoOp (+o) in persistent (+P) channels?
;OperChanPAutoOp = yes
# Mask IRC Operator mode requests as if they were coming from the
# server? (This is a compatibility hack for ircd-irc2 servers)
;OperServerMode = no
# Use PAM if ngIRCd has been compiled with support for it.
# Users identified using PAM are registered without the "~" character
# prepended to their user name.
;PAM = yes
# When PAM is enabled, all clients are required to be authenticated
# using PAM; connecting to the server without successful PAM
# authentication isn't possible.
# If this option is set, clients not sending a password are still
# allowed to connect: they won't become "identified" and keep the "~"
# character prepended to their supplied user name.
# Please note: To make some use of this behavior, it most probably
# isn't useful to enable "Ident", "PAM" and "PAMIsOptional" at the
# same time, because you wouldn't be able to distinguish between
# Ident'ified and PAM-authenticated users: both don't have a "~"
# 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.
;RequireAuthPing = no
# Silently drop all incoming CTCP requests.
;ScrubCTCP = no
# Syslog "facility" to which ngIRCd should send log messages.
# Possible values are system dependent, but most probably auth, daemon,
# user and local1 through local7 are possible values; see syslog(3).
# Default is "local5" for historical reasons, you probably want to
# change this to "daemon", for example.
;SyslogFacility = local1
# Password required for using the WEBIRC command used by some
# Web-to-IRC gateways. If not set/empty, the WEBIRC command can't
# be used. (Default: not set)
;WebircPassword = xyz
;[SSL]
# SSL-related configuration options. Please note that this section
# is only available when ngIRCd is compiled with support for SSL!
# So don't forget to remove the ";" above if this is the case ...
# SSL Trusted CA Certificates File for verifying peer certificates.
# (Default: not set; so no certificates are trusted)
;CAFile = /etc/ssl/CA/cacert.pem
# Certificate Revocation File (for marking otherwise valid
# certficates as invalid)
;CRLFile = /etc/ssl/CA/crl.pem
# SSL Server Key Certificate
;CertFile = :ETCDIR:/ssl/server-cert.pem
# Select cipher suites allowed for SSL/TLS connections. This defaults
# to HIGH:!aNULL:@STRENGTH (OpenSSL) or SECURE128 (GnuTLS).
# See 'man 1ssl ciphers' (OpenSSL) or 'man 3 gnutls_priority_init'
# (GnuTLS) for details.
# For OpenSSL:
;CipherList = HIGH:!aNULL:@STRENGTH:!SSLv3
# For GnuTLS:
;CipherList = SECURE128:-VERS-SSL3.0
# Diffie-Hellman parameters
;DHFile = :ETCDIR:/ssl/dhparams.pem
# SSL Server Key
;KeyFile = :ETCDIR:/ssl/server-key.pem
# password to decrypt SSLKeyFile (OpenSSL only)
;KeyFilePassword = secret
# Additional Listen Ports that expect SSL/TLS encrypted connections
;Ports = 6697, 9999
[Operator]
# [Operator] sections are used to define IRC Operators. There may be
# more than one [Operator] block, one for each local operator.
# ID of the operator (may be different of the nickname)
;Name = TheOper
# Password of the IRC operator
;Password = ThePwd
# Optional Mask from which /OPER will be accepted
;Mask = *!ident@somewhere.example.com
[Operator]
# More [Operator] sections, if you like ...
[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
# for the other server to connect.
# There may be more than one server block, one for each server.
#
# Server Groups:
# The ngIRCd allows "server groups": You can assign an "ID" to every
# server with which you want this ngIRCd to link. If a server of a
# group won't answer, the ngIRCd tries to connect to the next server
# in the given group. But the ngircd never tries to connect to two
# servers with the same group ID.
# IRC name of the remote server, must match the "Name" variable in
# the [Global] section of the other server (when using ngIRCd).
;Name = irc2.example.net
# Internet host name or IP address of the peer (only required when
# this server should establish the connection).
;Host = connect-to-host.example.net
# IP address to use as _source_ address for the connection. if
# unspecified, ngircd will let the operating system pick an address.
;Bind = 10.0.0.1
# Port of the server to which the ngIRCd should connect. If you
# assign no port the ngIRCd waits for incoming connections.
;Port = 6667
# Own password for the connection. This password has to be configured
# as "PeerPassword" on the other server.
;MyPassword = MySecret
# Foreign password for this connection. This password has to be
# configured as "MyPassword" on the other server.
;PeerPassword = PeerSecret
# Group of this server (optional)
;Group = 123
# Set the "Passive" option to "yes" if you don't want this ngIRCd to
# connect to the configured peer (same as leaving the "Port" variable
# empty). The advantage of this option is that you can actually
# configure a port an use the IRC command CONNECT more easily to
# manually connect this specific server later.
;Passive = no
# Connect to the remote server using TLS/SSL (Default: false)
;SSLConnect = yes
# Verify the TLS certificate presented by the remote server
# (Default: yes)
;SSLVerify = yes
# Define a (case insensitive) list of masks matching nicknames that
# should be treated as IRC services when introduced via this remote
# server, separated by commas (",").
# REGULAR SERVERS DON'T NEED this parameter, so leave it empty
# (which is the default).
# When you are connecting IRC services which mask as a IRC server
# and which use "virtual users" to communicate with, for example
# "NickServ" and "ChanServ", you should set this parameter to
# something like "*Serv" or "NickServ,ChanServ,XyzServ".
;ServiceMask = *Serv,Global
[Server]
# More [Server] sections, if you like ...
[Channel]
# Pre-defined channels can be configured in [Channel] sections.
# Such channels are created by the server when starting up and even
# persist when there are no more members left.
# Persistent channels are marked with the mode 'P', which can be set
# and unset by IRC operators like other modes on the fly.
# There may be more than one [Channel] block, one for each channel.
# Name of the channel
;Name = #TheName
# 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
# Should ngIRCd automatically join ("autojoin") all users to this
# channel on connect? Note: The users must have permissions to access
# the channel, otherwise joining them will fail!
;Autojoin = yes
# Key file, syntax for each line: "<user>:<nick>:<key>".
# Default: none.
;KeyFile = :ETCDIR:/#chan.key
[Channel]
# More [Channel] sections, if you like ...
# -eof-

View File

@@ -1,93 +0,0 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# 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
# 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 file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for ngIRCd.
#
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = ngIRCd
PROJECT_BRIEF = "Lightweight Internet Relay Chat server"
PROJECT_LOGO = "../../contrib/ngIRCd-Logo.gif"
OUTPUT_DIRECTORY = .
STRIP_FROM_PATH = ../..
JAVADOC_AUTOBRIEF = YES
OPTIMIZE_OUTPUT_FOR_C = YES
TYPEDEF_HIDES_STRUCT = YES
TAB_SIZE = 8
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL = YES
EXTRACT_STATIC = YES
SHOW_DIRECTORIES = YES
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET = NO
WARNINGS = YES
WARN_IF_UNDOCUMENTED = YES
WARN_IF_DOC_ERROR = YES
WARN_NO_PARAMDOC = YES
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
INPUT = ../../src
INPUT_ENCODING = UTF-8
RECURSIVE = YES
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER = YES
STRIP_CODE_COMMENTS = NO
REFERENCED_BY_RELATION = YES
REFERENCES_RELATION = YES
#---------------------------------------------------------------------------
# Output formats
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_FOOTER = footer.inc.html
HTML_DYNAMIC_SECTIONS = YES
GENERATE_DOCSET = NO
GENERATE_HTMLHELP = NO
GENERATE_LATEX = NO
GENERATE_RTF = NO
GENERATE_MAN = NO
GENERATE_XML = NO
GENERATE_AUTOGEN_DEF = NO
GENERATE_PERLMOD = NO
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
PREDEFINED = DEBUG ZLIB PAM ZEROCONF CONN_MODULE __client_c__
# -eof-

View File

@@ -1,25 +0,0 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2011 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.
#
EXTRA_DIST = Doxyfile footer.inc.html
maintainer-clean-local:
rm -f Makefile Makefile.in
distclean-local:
rm -rf html
srcdoc:
@doxygen --version >/dev/null 2>&1 \
|| ( echo; echo "Error: \"doxygen\" not found!"; echo; exit 1 )
doxygen
# -eof-

View File

@@ -1,12 +0,0 @@
<hr class="footer">
<p style="text-align: center">
ngIRCd
<a href="https://ngircd.barton.de/">Homepage</a>.
GitHub:
<a href="https://github.com/ngircd/ngircd">Code Repository</a>,
<a href="https://github.com/ngircd/ngircd/issues">Bug-Tracker</a>.
</p>
</body>
</html>

View File

@@ -1,30 +1,20 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001,2002 by 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
# 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.
# Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen
# der GNU General Public License (GPL), wie von der Free Software Foundation
# herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2
# der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version.
# Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
# der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
#
# $Id: Makefile.am,v 1.5 2002/04/04 13:02:41 alex Exp $
#
TEMPLATE_MANS = ngircd.conf.5.tmpl ngircd.8.tmpl
SUFFIXES = .tmpl .
.tmpl:
$(AM_V_GEN)sed \
-e "s@:SBINDIR:@${sbindir}@" \
-e "s@:BINDIR:@${bindir}@" \
-e "s@:ETCDIR:@${sysconfdir}@" \
<$< >$@
man_MANS = ngircd.conf.5 ngircd.8
CLEANFILES = $(man_MANS)
EXTRA_DIST = $(TEMPLATE_MANS)
EXTRA_DIST = $(man_MANS)
maintainer-clean-local:
rm -f Makefile Makefile.in

83
man/ngircd.8 Normal file
View File

@@ -0,0 +1,83 @@
.\"
.\" $Id: ngircd.8,v 1.9 2004/04/05 10:59:10 alex Exp $
.\"
.TH ngircd 8 "March 2003" ngircd "ngIRCd Manual"
.SH NAME
ngircd \- the next generation IRC daemon
.SH SYNOPSIS
.B ngircd [
.I Options
.B ]
.SH DESCRIPTION
.BR ngircd
is a free open source daemon for the Internet Relay Chat (IRC),
developed under the GNU General Public License (GPL).
.PP
It's written from scratch and is not based upon the original IRCd like
many others. It is easy to configure, supports server links (even with
original ircd's) and runs on hosts with changing IP addresses (such as
dial-in networks).
.PP
Currently supported platforms (tested versions) are: AIX (3.2.5 with IBM XL
C Compiler), A/UX (3.x, Apple pre-ANSI C Compiler and GNU C), FreeBSD
(4.5/i386, GNU C), HP-UX (10.20, GNU C), IRIX (6.5, SGI MIPSpro C 7.30),
Linux (2.2.x/i386, 2.4.x/i386 and 2.4.x/hppa, GNU C), Mac OS X (10.x, GNU C),
NetBSD (1.5.2/i386 and 1.5.3/m68k, GNU C), Solaris (2.5.1 and 2.6, GNU C),
and Windows with Cygwin (GNU C).
.PP
As ngIRCd relies on UNIX standards and uses GNU automake and GNU autoconf
there are good chances that it also supports other UNIX-based operating
systems.
.SH OPTIONS
The default behaviour of
.BR ngircd
is to read its standard configuration file (see below), to detach from the
controlling terminal and to wait for clients.
.PP
You can use these options to modify this default:
.TP
\fB\-f\fR \fIfile\fR, \fB\-\-config\fR \fIfile\fR
Use
.I file
as configuration file.
.TP
\fB\-n\fR, \fB\-\-nodaemon\fR
Don't fork a child and don't detach from controlling terminal.
All log messages go to the console.
.TP
\fB\-p\fR, \fB\-\-passive\fR
Disable automatic connections to other servers. You can use the IRC command
CONNECT later on as IRC Operator to link this ngIRCd to other servers.
.TP
\fB\-t\fR, \fB\-\-configtest\fR
Read, validate and display the configuration; then exit.
.TP
\fB\-\-version\fR
Output version information and exit.
.TP
\fB\-\-help\fR
Display a brief help text and exit.
.SH FILES
.I /usr/local/etc/ngircd.conf
.RS
The system wide default configuration file.
.RE
.I /usr/local/etc/ngircd.motd
.RS
Default "message of the day" (MOTD).
.RE
.SH AUTHOR
Alexander Barton,
.UR mailto:alex@barton.de
alex@barton.de
.UE
.br
Homepage:
.UR http://arthur.ath.cx/~alex/ngircd/
http://arthur.ath.cx/~alex/ngircd/
.UE
.SH "SEE ALSO"
.BR ngircd.conf (5),
.BR ircd (8)
.\"
.\" -eof-

View File

@@ -1,147 +0,0 @@
.\"
.\" ngircd(8) manual page template
.\"
.TH ngircd 8 "Sep 2023" ngIRCd "ngIRCd Manual"
.SH NAME
ngIRCd \- the "next generation" IRC daemon
.SH SYNOPSIS
.B ngircd
[
.I Options
]
.SH DESCRIPTION
.BR ngIRCd
is a free, portable and lightweight Internet Relay Chat (IRC) server for small
or private networks, developed under the GNU General Public License (GPL).
.PP
The server is quite easy to configure and runs as a single-node server or can
be part of a network of ngIRCd servers in a LAN or across the internet. It
optionally supports the IPv6 protocol, SSL/TLS-protected client-server and
server-server links, the Pluggable Authentication Modules (PAM) system for user
authentication, IDENT requests, and character set conversion for legacy
clients.
.PP
The name ngIRCd stands for
.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 :-)
.PP
By default ngIRCd logs diagnostic and informational messages using the syslog
mechanism, or writes directly to the console when running in the foreground
(see below).
.SH OPTIONS
The default behavior of
.BR ngircd
is to read its standard configuration file (see below), to detach from the
controlling terminal and to wait for clients.
.PP
You can use these options to modify this default:
.TP
\fB\-f\fR \fIfile\fR, \fB\-\-config\fR \fIfile\fR
Use
.I file
as configuration file.
.TP
\fB\-n\fR, \fB\-\-nodaemon\fR
Don't fork a child and don't detach from controlling terminal.
All log messages go to the console and you can use CTRL-C to
terminate the server.
.TP
\fB\-p\fR, \fB\-\-passive\fR
Disable automatic connections to other servers. You can use the IRC command
CONNECT later on as IRC Operator to link this ngIRCd to other servers.
.TP
\fB\-y\fR, \fB\-\-syslog\fR
Write log messages to the syslog even when running in the foreground. This only
makes sense when
.I \-n/\-\-nodaemon
was given on the command line
.I before
this option!
.PP
The following options prevent ngIRCd from starting regularly, but perform a
specific action and then exit the daemon again:
.TP
\fB\-h\fR, \fB\-\-help\fR
Display a brief help text and exit.
.TP
\fB\-t\fR, \fB\-\-configtest\fR
Read, validate and display the configuration; then exit.
.TP
\fB\-V\fR, \fB\-\-version\fR
Output version information and exit.
.SH FILES
.I :ETCDIR:/ngircd.conf
.RS
The system wide default configuration file.
.RE
.I :ETCDIR:/ngircd.motd
.RS
Default "message of the day" (MOTD).
.RE
.SH SIGNALS
The daemon understands the following signals:
.TP
\fBTERM\fR
Shut down all connections and terminate the daemon.
.TP
\fBHUP\fR
Shut down all listening sockets, re-read the configuration file and
re-initialize the daemon.
.SH HINTS
It is
.I always wise
to use "ngircd \-\-configtest" to validate the configuration of ngIRCd after
making changes to the configuration files!
.SH DEBUGGING
ngIRCd can log additional debug messages, which can be enabled with the command
line option \-\-debug (\-d) or by sending the USR1 signal to the running daemon.
Some of those messages may leak personal information, be very technical and can
be very verbose. Therefore the debug mode is meant for troubleshooting only and
should definitely be disabled during normal operation!
.PP
In addition, a "protocol sniffer" can be enabled on build time by passing the
"\-\-enable\-sniffer" option to the ./configure script which enables the
"\-\-sniffer" (\-s) command line option (which is not available by default):
this "sniffer" logs all incoming and outgoing IRC commands on all connections,
which can be handy to debug problems with the daemon itself or IRC clients.
.PP
Both modes are indicated in the version string shown by the IRC "VERSION"
command: if the version ends in a dot (like in "26.1."), the daemon operates in
"normal" mode (the version used in the example is "26.1"). If it ends in ".1"
(like in "26.1.1") the "debug-mode" is enabled; and if it ends in ".2" (like in
"26.1.2") the "IRC sniffer" is enabled, too.
.PP
\fBOptions:\fR
.TP
\fB\-d\fR, \fB\-\-debug\fR
Enable debug mode and log extra messages.
.TP
\fB\-s\fR, \fB\-\-sniffer\fR
Enable IRC protocol sniffer, which logs all sent and received IRC commands to
the console/syslog. This option requires that ngIRCd has been ./configure'd
with "\-\-enable\-sniffer" and enables debug mode automatically, too.
.PP
\fBSignals:\fR
.PP
Note: Usage of these signals is broadcasted to all users with the +s ("receive
server notices") mode set!
.TP
\fBUSR1\fR
Toggle debug mode on and off during runtime.
.TP
\fBUSR2\fR
Dump internal server state to the console/syslog when debug mode is on (use
command line option \-\-debug or signal USR1).
.SH AUTHORS
Alexander Barton, <alex@barton.de>
.br
Florian Westphal, <fw@strlen.de>
.PP
Homepage: http://ngircd.barton.de/
.SH "SEE ALSO"
.BR ngircd.conf (5),
.BR ircd (8)
.\"
.\" -eof-

231
man/ngircd.conf.5 Normal file
View File

@@ -0,0 +1,231 @@
.\"
.\" $Id: ngircd.conf.5,v 1.12.2.1 2004/05/07 11:24:18 alex Exp $
.\"
.TH ngircd.conf 5 "Mai 2003" ngircd "ngIRCd Manual"
.SH NAME
ngircd.conf \- configuration file of ngIRCd
.SH SYNOPSIS
.B /usr/local/etc/ngircd.conf
.SH DESCRIPTION
.BR ngircd.conf
is the configuration file for
.BR ngircd (8)
which you should adept to your local preferences and needs.
.SH "FILE FORMAT"
The file consists of sections and parameters. A section begins with the name
of the section in square brackets and continues until the next section
begins.
.PP
Sections contain parameters of the form
.PP
.RS
.I name
=
.I value
.RE
.PP
Any line beginning with a semicolon (';') or a hash ('#') character is
treated as a comment and ignored.
.PP
The file format is line-based - that means, each newline-terminated line
represents either a comment, a section name or a parameter.
.PP
Section and parameter names are not case sensitive.
.SH "SECTION OVERVIEW"
The file is separated in four blocks: [Global], [Operator], [Server],
and [Channel].
.PP
In the
.I [Global]
section, there is the main configuration like the server name and the
ports, on which the server should be listening. IRC operators of this
server are defined in
.I [Operator]
blocks.
.I [Server]
is the section where server links are configured. And
.I [Channel]
blocks are used to configure pre-defined ("persistent") IRC channels.
.SH [GLOBAL]
The
.I [Global]
section is used to define the server main configuration, like the server
name and the ports on which the server should be listening.
.TP
\fBName\fR
Server name in the IRC network
.TP
\fBInfo\fR
Info text of the server. This will be shown by WHOIS and LINKS requests for
example.
.TP
\fBAdminInfo1\fR, \fBAdminInfo2\fR, \fBAdminEMail\fR
Information about the server and the administrator, used by the ADMIN
command.
.TP
\fBPorts\fR
Ports on which the server should listen. There may be more than one port,
separated with ';'. Default: 6667.
.TP
\fBListen\fR
The ip address on which the server should listen. Default is empty, so
the server listens on all configured ip addresses and interfaces.
.TP
\fBMotdFile\fR
Text file with the "message of the day" (MOTD). This message will be shown
to all users connecting to the server.
.TP
\fBMotdPhrase\fR
A simple Phrase (<256 chars) if you don't want to use a motd file.
If it is set no MotdFile will be read at all.
.TP
\fBServerUID\fR
User ID under which the server should run; you can use the name of the user
or the numerical ID.
.PP
.RS
.B Attention:
.br
For this to work the server must have been
started with root privileges! In addition, the configuration and MOTD files
must be readable by this user, otherwise RESTART and REHASH won't work!
.RE
.TP
\fBServerGID\fR
Group ID under which the ngIRCd should run; you can use the name of the
group or the numerical ID.
.PP
.RS
.B Attention:
.br
For this to work the server must have
been started with root privileges!
.RE
.TP
\fBChrootDir\fR
A directory to chroot in when everything is initialized. It doesn't need
to be populated if ngIRCd is compiled as a static binary. By default ngIRCd
won't use the chroot() feature.
.PP
.RS
.B Attention:
.br
For this to work the server must have
been started with root privileges!
.RE
.TP
\fBPingTimeout\fR
After <PingTimeout> seconds of inactivity the server will send a PING to
the peer to test whether it is alive or not. Default: 120.
.TP
\fBPongTimeout\fR
If a client fails to answer a PING with a PONG within <PongTimeout>
seconds, it will be disconnected by the server. Default: 20.
.TP
\fBConnectRetry\fR
The server tries every <ConnectRetry> seconds to establish a link to not yet
(or no longer) connected servers. Default: 60.
.TP
\fBOperCanUseMode\fR
Should IRC Operators be allowed to use the MODE command even if they are
not(!) channel-operators? Default: no.
.TP
\fBMaxConnections\fR
Maximum number of simultaneous connection the server is allowed to accept
(<=0: unlimited). Default: -1.
.TP
\fBMaxConnectionsIP\fR
Maximum number of simultaneous connections from a single IP address that
the server will accept (<=0: unlimited). This configuration options lowers
the risk of denial of service attacks (DoS). Default: 5.
.TP
\fBMaxJoins\fR
Maximum number of channels a user can be member of (<=0: no limit).
Default: 10.
.SH [OPERATOR]
.I [Operator]
sections are used to define IRC Operators. There may be more than one
.I [Operator]
block, one for each local operator.
.TP
\fBName\fR
ID of the operator (may be different of the nick name).
.TP
\fBPassword\fR
Password of the IRC operator.
.SH [SERVER]
Other servers are configured in
.I [Server]
sections. If you configure a port for the connection, then this ngIRCd
tries to connect to to the other server on the given port; if not, it waits
for the other server to connect.
.PP
The ngIRCd allows "server groups": You can assign an "ID" to every server
with which you want this ngIRCd to link. If a server of a group won't
answer, the ngIRCd tries to connect to the next server in the given group.
But ngIRCd never tries to connect to two servers with the same group ID.
.PP
There may be more than one
.I [Server]
block.
.TP
\fBName\fR
IRC name of the server
.TP
\fBHost\fR
Internet host name of the peer
.TP
\fBPort\fR
Port of the server to which the ngIRCd should connect. If you assign no port
the ngIRCd waits for incoming connections.
.TP
\fBMyPassword\fR
Own password for this connection. This password has to be configured as
"PeerPassword" on the other server.
.TP
\fBPeerPassword\fR
Foreign password for this connection. This password has to be configured as
"MyPassword" on the other server.
.TP
\fBGroup\fR
Group of this server (optional).
.SH [CHANNEL]
Pre-defined channels can be configured in
.I [Channel]
sections. Such channels are created by the server when starting up and even
persist when there are no more members left.
.PP
Persistent channels are marked with the mode 'P', which can be set and unset
by IRC operators like other modes on the fly.
.PP
There may be more than one
.I [Channel]
block.
.TP
\fBName\fR
Name of the channel
.TP
\fBTopic\fR
Topic for this channel
.TP
\fBModes\fR
Initial channel modes.
.SH HINTS
It's wise to use "ngircd --configtest" to validate the configuration file
after changing it. See
.BR ngircd (8)
for details.
.SH AUTHOR
Alexander Barton,
.UR mailto:alex@barton.de
alex@barton.de
.UE
.br
Homepage:
.UR http://arthur.ath.cx/~alex/ngircd/
http://arthur.ath.cx/~alex/ngircd/
.UE
.SH "SEE ALSO"
.BR ngircd (8)
.\"
.\" -eof-

View File

@@ -1,603 +0,0 @@
.\"
.\" ngircd.conf(5) manual page template
.\"
.TH ngircd.conf 5 "Sep 2023" ngIRCd "ngIRCd Manual"
.SH NAME
ngircd.conf \- configuration file of ngIRCd
.SH SYNOPSIS
.B :ETCDIR:/ngircd.conf
.SH DESCRIPTION
.BR ngircd.conf
is the configuration file of the
.BR ngircd (8)
Internet Relay Chat (IRC) daemon, which must be customized to the local
preferences and needs.
.PP
Most variables can be modified while the ngIRCd daemon is already running:
It will reload its configuration file when a HUP signal or REHASH command
is received.
.SH "FILE FORMAT"
The file consists of sections and parameters. A section begins with the name
of the section in square brackets and continues until the next section
begins.
.PP
Sections contain parameters of the form
.PP
.RS
.I name
=
.I value
.RE
.PP
Empty lines and any line beginning with a semicolon (';') or a hash ('#')
character are treated as a comment and will be ignored. Leading and trailing
whitespaces are trimmed before any processing takes place.
.PP
The file format is line-based - that means, each non-empty newline-terminated
line represents either a comment, a section name, or a parameter.
.PP
Section and parameter names are not case sensitive.
.PP
There are three types of variables:
.I booleans,
.I text strings,
and
.I numbers.
Boolean values are
.I true
if they are "yes", "true", or any non-null integer. Text strings are used 1:1
without leading and following spaces; there is no way to quote strings. And
for numbers all decimal integer values are valid.
.PP
In addition, some string or numerical variables accept lists of values,
separated by commas (",").
.SH "SECTION OVERVIEW"
The file can contain blocks of seven types: [Global], [Limits], [Options],
[SSL], [Operator], [Server], and [Channel].
.PP
The main configuration of the server is stored in the
.I [Global]
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.
.PP
Options in the
.I [Limits]
block are used to tweak different limits and timeouts of the daemon, like the
maximum number of clients allowed to connect to this server. Variables in the
.I [Options]
section can be used to enable or disable specific features of ngIRCd, like
support for IDENT, PAM, IPv6, and protocol and cloaking features. The
.I [SSL]
block contains all SSL-related configuration variables. These three sections
are all optional.
.PP
IRC operators of this server are defined in
.I [Operator]
blocks. Links to remote servers are configured in
.I [Server]
sections. And
.I [Channel]
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.
.SH [GLOBAL]
The
.I [Global]
section 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!
.TP
\fBName\fR (string)
Server name in the IRC network. This is an individual name of the IRC
server, it is not related to the DNS host name. It must be unique in the
IRC network and must contain at least one dot (".") character. When not set,
ngIRCd tries to deduce a valid IRC server name from the local host name.
.TP
\fBAdminInfo1\fR, \fBAdminInfo2\fR, \fBAdminEMail\fR (string)
Information about the server and the administrator, used by the ADMIN
command. This information is not required by the server but by RFC!
.TP
\fBHelpFile\fR (string)
Text file which contains the ngIRCd help text. This file is required
to display help texts when using the "HELP <cmd>" command.
Please note: Changes made to this file take effect when ngircd starts up
or is instructed to re-read its configuration file. Default: a built-in
standard path.
.TP
\fBInfo\fR (string)
Info text of the server. This will be shown by WHOIS and LINKS requests for
example. Set to the server software name and version by default.
.TP
\fBListen\fR (list of strings)
A comma separated list of IP address on which the server should listen.
If unset, the defaults value is "0.0.0.0" or, if ngIRCd was compiled
with IPv6 support, "::,0.0.0.0". So the server listens on all configured
IP addresses and interfaces by default.
.TP
\fBMotdFile\fR (string)
Text file with the "message of the day" (MOTD). This message will be shown to
all users connecting to the server. Please note: Changes made to this file
take effect when ngircd starts up or is instructed to re-read its
configuration file. Default: a built-in standard path.
.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.
.TP
\fBPassword\fR (string)
Global password for all users needed to connect to the server. The default is
empty, so no password is required. Please note: This feature is not available
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).
.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.
.TP
\fBServerGID\fR (string or number)
Group ID under which the ngIRCd daemon should run; you can use the name of the
group or the numerical ID.
.PP
.RS
.B Attention:
.br
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.
.PP
.RS
.B Attention:
.br
For this to work the server must have been started with root privileges! In
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 :-)
.TP
\fBConnectRetry\fR (number)
The server tries every <ConnectRetry> seconds to establish a link to not yet
(or no longer) connected servers. Default: 60.
.TP
\fBIdleTimeout\fR (number)
Number of seconds after which the whole daemon should shutdown when no
connections are left active after handling at least one client (0: never). This
can be useful for testing or when ngIRCd is started using "socket activation"
with systemd(8), for example. Default: 0.
.TP
\fBMaxConnections\fR (number)
Maximum number of simultaneous in- and outbound connections the server is
allowed to accept (0: unlimited). Default: 0.
.TP
\fBMaxConnectionsIP\fR (number)
Maximum number of simultaneous connections from a single IP address that
the server will accept (0: unlimited). This configuration options lowers
the risk of denial of service attacks (DoS). Default: 5.
.TP
\fBMaxJoins\fR (number)
Maximum number of channels a user can be member of (0: no limit).
Default: 10.
.TP
\fBMaxNickLength\fR (number)
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
\fBPingTimeout\fR (number)
After <PingTimeout> seconds of inactivity the server will send a PING to
the peer to test whether it is alive or not. Default: 120.
.TP
\fBPongTimeout\fR (number)
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.
.TP
\fBAllowedChannelTypes\fR (string)
List of allowed channel types (channel prefixes) for newly created channels
on the local server. By default, all supported channel types are allowed.
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.
.TP
\fBChrootDir\fR (string)
A directory to chroot in when everything is initialized. It doesn't need
to be populated if ngIRCd is compiled as a static binary. By default ngIRCd
won't use the chroot() feature.
.PP
.RS
.B Attention:
.br
For this to work the server must have been started with root privileges!
.RE
.TP
\fBCloakHost\fR (string)
Set this hostname for every client instead of the real one. Default: empty,
don't change. Use %x to add the hashed value of the original hostname.
.TP
\fBCloakHostModeX\fR (string)
Use this hostname for hostname cloaking on clients that have the user mode
"+x" set, instead of the name of the server. Default: empty, use the name
of the server. Use %x to add the hashed value of the original hostname
.TP
\fBCloakHostSalt\fR (string)
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.
.TP
\fBConnectIPv4\fR (boolean)
Set this to no if you do not want ngIRCd to connect to other IRC servers using
the IPv4 protocol. This allows the usage of ngIRCd in IPv6-only setups.
Default: yes.
.TP
\fBConnectIPv6\fR (boolean)
Set this to no if you do not want ngIRCd to connect to other IRC servers using
the IPv6 protocol.
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!
Default: none.
.TP
\fBDNS\fR (boolean)
If set to false, ngIRCd will not make any DNS lookups when clients connect.
If you configure the daemon to connect to other servers, ngIRCd may still
perform a DNS lookup if required.
Default: yes.
.TP
\fBIdent\fR (boolean)
If ngIRCd is compiled with IDENT support this can be used to disable IDENT
lookups at run time.
Users identified using IDENT are registered without the "~" character
prepended to their user name.
Default: yes.
.TP
\fBIncludeDir\fR (string)
Directory containing configuration snippets (*.conf), that should be read in
after parsing the current configuration file.
Default: a built-in directory name when no configuration file was explicitly
given on the command line (check "ngircd --configtest"), none (empty)
otherwise.
.PP
.RS
This way no default include directory is used when a possibly non-default
configuration file was explicitly specified using "--config"/"-f" on the
command line which (intentionally) did not specify an
.I "IncludeDir"
directive.
.RE
.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.
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)
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
while connecting. Default: no.
.TP
\fBOperCanUseMode\fR (boolean)
Should IRC Operators be allowed to use the MODE command even if they are
not(!) channel-operators? Default: no.
.TP
\fBOperChanPAutoOp\fR (boolean)
Should IRC Operators get AutoOp (+o) in persistent (+P) channels?
Default: yes.
.TP
\fBOperServerMode\fR (boolean)
If \fBOperCanUseMode\fR is enabled, this may lead the compatibility problems
with Servers that run the ircd-irc2 Software. This Option "masks" mode
requests by non-chanops as if they were coming from the server. Default: no;
only enable it if you have ircd-irc2 servers in your IRC network.
.TP
\fBPAM\fR (boolean)
If ngIRCd is compiled with PAM support this can be used to disable all calls
to the PAM library at runtime; all users connecting without password are
allowed to connect, all passwords given will fail.
Users identified using PAM are registered without the "~" character
prepended to their user name.
Default: yes.
.TP
\fBPAMIsOptional\fR (boolean)
When PAM is enabled, all clients are required to be authenticated using PAM;
connecting to the server without successful PAM authentication isn't possible.
If this option is set, clients not sending a password are still allowed to
connect: they won't become "identified" and keep the "~" character prepended
to their supplied user name.
Please note:
To make some use of this behavior, it most probably isn't useful to enable
"Ident", "PAM" and "PAMIsOptional" at the same time, because you wouldn't be
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.
Default: no.
.TP
\fBScrubCTCP\fR (boolean)
If set to true, ngIRCd will silently drop all CTCP requests sent to it from
both clients and servers. It will also not forward CTCP requests to any
other servers. CTCP requests can be used to query user clients about which
software they are using and which versions said software is. CTCP can also be
used to reveal clients IP numbers. ACTION CTCP requests are not blocked,
this means that /me commands will not be dropped, but please note that
blocking CTCP will disable file sharing between users!
Default: no.
.TP
\fBSyslogFacility\fR (string)
Syslog "facility" to which ngIRCd should send log messages. Possible
values are system dependent, but most probably "auth", "daemon", "user"
and "local1" through "local7" are possible values; see syslog(3).
Default is "local5" for historical reasons, you probably want to
change this to "daemon", for example.
.TP
\fBWebircPassword\fR (string)
Password required for using the WEBIRC command used by some Web-to-IRC
gateways. If not set or empty, the WEBIRC command can't be used.
Default: not set.
.SH [SSL]
All SSL-related configuration variables are located in the
.I [SSL]
section. Please note that this whole section is only recognized by ngIRCd
when it is compiled with support for SSL using OpenSSL or GnuTLS!
.TP
\fBCAFile\fR (string)
Filename pointing to the Trusted CA Certificates. This is required for
verifying peer certificates. Default: not set, so no certificates are trusted.
.TP
\fBCertFile\fR (string)
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).
Please see 'man 1ssl ciphers' (OpenSSL) and 'man 3 gnutls_priority_init'
(GnuTLS) for details.
.TP
\fBCRLFile\fR (string)
Filename of Certificate Revocation List.
.TP
\fBDHFile\fR (string)
Name of the Diffie-Hellman Parameter file. Can be created with GnuTLS
"certtool \-\-generate-dh-params" or "openssl dhparam". If this file is not
present, it will be generated on startup when ngIRCd was compiled with GnuTLS
support (this may take some time). If ngIRCd was compiled with OpenSSL, then
(Ephemeral)-Diffie-Hellman Key Exchanges and several Cipher Suites will not be
available.
.TP
\fBKeyFile\fR (string)
Filename of SSL Server Key to be used for SSL connections. This is required
for SSL/TLS support.
.TP
\fBKeyFilePassword\fR (string)
OpenSSL only: Password to decrypt the private key file.
.TP
\fBPorts\fR (list of numbers)
Same as \fBPorts\fR , except that ngIRCd will expect incoming connections
to be SSL/TLS encrypted. Common port numbers for SSL-encrypted IRC are 6669
and 6697. Default: none.
.SH [OPERATOR]
.I [Operator]
sections are used to define IRC Operators. There may be more than one
.I [Operator]
block, one for each local operator.
.TP
\fBName\fR (string)
ID of the operator (may be different of the nickname).
.TP
\fBPassword\fR (string)
Password of the IRC operator.
.TP
\fBMask\fR (string)
Mask that is to be checked before an /OPER for this account is accepted.
Example: nick!ident@*.example.com
.SH [SERVER]
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);
if not, it waits for the other server to connect (passive).
.PP
ngIRCd supports "server groups": You can assign an "ID" to every server
with which you want this ngIRCd to link, and the daemon ensures that at
any given time only one direct link exists to servers with the same ID.
So if a server of a group won't answer, ngIRCd tries to connect to the next
server in the given group (="with the same ID"), but never tries to connect
to more than one server of this group simultaneously.
.PP
There may be more than one
.I [Server]
block.
.TP
\fBName\fR (string)
IRC name of the remote server.
.TP
\fBHost\fR (string)
Internet host name (or IP address) of the peer.
.TP
\fBBind\fR (string)
IP address to use as source IP for the outgoing connection. Default is
to let the operating system decide.
.TP
\fBPort\fR (number)
Port of the remote server to which ngIRCd should connect (active).
If no port is assigned to a configured server, the daemon only waits for
incoming connections (passive, default).
.TP
\fBMyPassword\fR (string)
Own password for this connection. This password has to be configured as
\fBPeerPassword\fR on the other server. Must not have ':' as first character.
.TP
\fBPeerPassword\fR (string)
Foreign password for this connection. This password has to be configured as
\fBMyPassword\fR on the other server.
.TP
\fBGroup\fR (number)
Group of this server (optional).
.TP
\fBPassive\fR (boolean)
Disable automatic connection even if port value is specified. Default: false.
You can use the IRC Operator command CONNECT later on to create the link.
.TP
\fBSSLConnect\fR (boolean)
Connect to the remote server using TLS/SSL. Default: false.
.TP
\fBSSLVerify\fR (boolean)
Verify the TLS certificate presented by the remote server. Default: yes.
.TP
\fBServiceMask\fR (string)
Define a (case insensitive) list of masks matching nicknames that should be
treated as IRC services when introduced via this remote server, separated
by commas (","). REGULAR SERVERS DON'T NEED this parameter, so leave it empty
(which is the default).
.PP
.RS
When you are connecting IRC services which mask as a IRC server and which use
"virtual users" to communicate with, for example "NickServ" and "ChanServ",
you should set this parameter to something like "*Serv", "*Serv,OtherNick",
or "NickServ,ChanServ,XyzServ".
.SH [CHANNEL]
Pre-defined channels can be configured in
.I [Channel]
sections. Such channels are created by the server when starting up and even
persist when there are no more members left.
.PP
Persistent channels are marked with the mode 'P', which can be set and unset
by IRC operators like other modes on the fly.
.PP
There may be more than one
.I [Channel]
block.
.TP
\fBName\fR (string)
Name of the channel, including channel prefix ("#" or "&").
.TP
\fBTopic\fR (string)
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
.TP
\fBAutojoin\fR (boolean)
Should ngIRCd automatically join ("autojoin") all users to this channel on
connect? Note: The users must have permissions to access the channel, otherwise
joining them will fail!
.TP
\fBKeyFile\fR (string)
Path and file name of a "key file" containing individual channel keys for
different users. The file consists of plain text lines with the following
syntax (without spaces!):
.PP
.RS
.RS
.I user
:
.I nick
:
.I key
.RE
.PP
.I user
and
.I nick
can contain the wildcard character "*".
.br
.I key
is an arbitrary password.
.PP
Valid examples are:
.PP
.RS
*:*:KeY
.br
*:nick:123
.br
~user:*:xyz
.RE
.PP
The key file is read on each JOIN command when this channel has a key
(channel mode +k). Access is granted, if a) the channel key set using the
MODE +k command or b) one of the lines in the key file match.
.PP
.B Please note:
.br
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
.SH HINTS
It's wise to use "ngircd \-\-configtest" to validate the configuration file
after changing it. See
.BR ngircd (8)
for details.
.SH AUTHOR
Alexander Barton, <alex@barton.de>
.br
Florian Westphal, <fw@strlen.de>
.PP
Homepage: http://ngircd.barton.de/
.SH "SEE ALSO"
.BR ngircd (8)
.\"
.\" -eof-

View File

@@ -8,10 +8,10 @@
# (at your option) any later version.
# Please read the file COPYING, README and AUTHORS for more information.
#
# $Id: Makefile.am,v 1.8 2008/02/26 22:04:15 fw Exp $
# $Id: Makefile.am,v 1.5 2003/01/13 12:20:16 alex Exp $
#
SUBDIRS = portab tool ipaddr ngircd testsuite
SUBDIRS = portab tool ngircd testsuite
maintainer-clean-local:
rm -f Makefile Makefile.in config.h config.h.in stamp-h.in

View File

@@ -1,21 +0,0 @@
#
# ipaddr/Makefile.am
# (c) 2008 Florian Westphal <fw@strlen.de>, public domain.
#
__ng_Makefile_am_template__
EXTRA_DIST = Makefile.ng
AM_CPPFLAGS = -I$(srcdir)/../portab
noinst_LIBRARIES = libngipaddr.a
libngipaddr_a_SOURCES = ng_ipaddr.c
noinst_HEADERS = ng_ipaddr.h
maintainer-clean-local:
rm -f Makefile Makefile.in Makefile.am
# -eof-

View File

@@ -1,179 +0,0 @@
/*
* (c) 2008 Florian Westphal <fw@strlen.de>, public domain.
*/
#include "portab.h"
/**
* @file
* Functions for AF_ agnostic ipv4/ipv6 handling.
*/
#include <assert.h>
#include <stdio.h>
#include <string.h>
#ifdef HAVE_GETADDRINFO
#include <netdb.h>
#include <sys/types.h>
#endif
#include "ng_ipaddr.h"
GLOBAL bool
ng_ipaddr_init(ng_ipaddr_t *addr, const char *ip_str, UINT16 port)
{
#ifdef HAVE_WORKING_GETADDRINFO
int ret;
char portstr[64];
struct addrinfo *res0;
struct addrinfo hints;
assert(ip_str);
memset(&hints, 0, sizeof(hints));
#ifdef AI_NUMERICHOST
hints.ai_flags = AI_NUMERICHOST;
#endif
#ifndef WANT_IPV6 /* do not convert ipv6 addresses */
hints.ai_family = AF_INET;
#endif
/* some getaddrinfo implementations require that ai_socktype is set. */
hints.ai_socktype = SOCK_STREAM;
/* silly, but ngircd stores UINT16 in server config, not string */
snprintf(portstr, sizeof(portstr), "%u", (unsigned int) port);
ret = getaddrinfo(ip_str, portstr, &hints, &res0);
if (ret != 0)
return false;
assert(sizeof(*addr) >= (size_t)res0->ai_addrlen);
if (sizeof(*addr) >= (size_t)res0->ai_addrlen)
memcpy(addr, res0->ai_addr, res0->ai_addrlen);
else
ret = -1;
freeaddrinfo(res0);
return ret == 0;
#else /* HAVE_GETADDRINFO */
assert(ip_str);
memset(addr, 0, sizeof *addr);
#ifdef HAVE_sockaddr_in_len
addr->sin4.sin_len = sizeof(addr->sin4);
#endif
addr->sin4.sin_family = AF_INET;
# ifdef HAVE_INET_ATON
if (inet_aton(ip_str, &addr->sin4.sin_addr) == 0)
return false;
# else
addr->sin4.sin_addr.s_addr = inet_addr(ip_str);
if (addr->sin4.sin_addr.s_addr == (unsigned) -1)
return false;
# endif
ng_ipaddr_setport(addr, port);
return true;
#endif /* HAVE_GETADDRINFO */
}
GLOBAL void
ng_ipaddr_setport(ng_ipaddr_t *a, UINT16 port)
{
#ifdef WANT_IPV6
int af;
assert(a != NULL);
af = a->sa.sa_family;
assert(af == AF_INET || af == AF_INET6);
switch (af) {
case AF_INET:
a->sin4.sin_port = htons(port);
break;
case AF_INET6:
a->sin6.sin6_port = htons(port);
break;
}
#else /* WANT_IPV6 */
assert(a != NULL);
assert(a->sin4.sin_family == AF_INET);
a->sin4.sin_port = htons(port);
#endif /* WANT_IPV6 */
}
GLOBAL bool
ng_ipaddr_ipequal(const ng_ipaddr_t *a, const ng_ipaddr_t *b)
{
assert(a != NULL);
assert(b != NULL);
#ifdef WANT_IPV6
if (a->sa.sa_family != b->sa.sa_family)
return false;
assert(ng_ipaddr_salen(a) == ng_ipaddr_salen(b));
switch (a->sa.sa_family) {
case AF_INET6:
return IN6_ARE_ADDR_EQUAL(&a->sin6.sin6_addr, &b->sin6.sin6_addr);
case AF_INET:
return memcmp(&a->sin4.sin_addr, &b->sin4.sin_addr, sizeof(a->sin4.sin_addr)) == 0;
}
return false;
#else
assert(a->sin4.sin_family == AF_INET);
assert(b->sin4.sin_family == AF_INET);
return memcmp(&a->sin4.sin_addr, &b->sin4.sin_addr, sizeof(a->sin4.sin_addr)) == 0;
#endif
}
#ifdef WANT_IPV6
GLOBAL const char *
ng_ipaddr_tostr(const ng_ipaddr_t *addr)
{
static char strbuf[NG_INET_ADDRSTRLEN];
strbuf[0] = 0;
ng_ipaddr_tostr_r(addr, strbuf);
return strbuf;
}
/* str must be at least NG_INET_ADDRSTRLEN bytes long */
GLOBAL bool
ng_ipaddr_tostr_r(const ng_ipaddr_t *addr, char *str)
{
#ifdef HAVE_GETNAMEINFO
const struct sockaddr *sa = (const struct sockaddr *) addr;
int ret;
*str = 0;
ret = getnameinfo(sa, ng_ipaddr_salen(addr),
str, NG_INET_ADDRSTRLEN, NULL, 0, NI_NUMERICHOST);
/*
* avoid leading ':'.
* causes mis-interpretation of client host in e.g. /WHOIS
*/
if (*str == ':') {
char tmp[NG_INET_ADDRSTRLEN] = "0";
ret = getnameinfo(sa, ng_ipaddr_salen(addr),
tmp + 1, (socklen_t)sizeof(tmp) - 1,
NULL, 0, NI_NUMERICHOST);
if (ret == 0)
strlcpy(str, tmp, NG_INET_ADDRSTRLEN);
}
assert (ret == 0);
return ret == 0;
#else
abort(); /* WANT_IPV6 depends on HAVE_GETNAMEINFO */
#endif
}
#endif /* WANT_IPV6 */
/* -eof- */

View File

@@ -1,134 +0,0 @@
/*
* (c) 2008 Florian Westphal <fw@strlen.de>, public domain.
*/
#ifndef NG_IPADDR_HDR
#define NG_IPADDR_HDR
#include "portab.h"
/**
* @file
* Functions for AF_ agnostic ipv4/ipv6 handling (header).
*/
#include <assert.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#ifdef HAVE_ARPA_INET_H
# include <arpa/inet.h>
#else
# define PF_INET AF_INET
#endif
#ifdef WANT_IPV6
#define NG_INET_ADDRSTRLEN INET6_ADDRSTRLEN
#else
#define NG_INET_ADDRSTRLEN 16
#endif
#ifdef WANT_IPV6
typedef union {
struct sockaddr sa;
struct sockaddr_in sin4;
struct sockaddr_in6 sin6;
} ng_ipaddr_t;
#else
/* assume compiler can't deal with typedef struct {... */
struct NG_IP_ADDR_DONTUSE {
struct sockaddr_in sin4;
};
typedef struct NG_IP_ADDR_DONTUSE ng_ipaddr_t;
#endif
static inline int
ng_ipaddr_af(const ng_ipaddr_t *a)
{
assert(a != NULL);
#ifdef WANT_IPV6
return a->sa.sa_family;
#else
assert(a->sin4.sin_family == 0 || a->sin4.sin_family == AF_INET);
return a->sin4.sin_family;
#endif
}
static inline socklen_t
ng_ipaddr_salen(const ng_ipaddr_t *a)
{
assert(a != NULL);
#ifdef WANT_IPV6
assert(a->sa.sa_family == AF_INET || a->sa.sa_family == AF_INET6);
if (a->sa.sa_family == AF_INET6)
return (socklen_t)sizeof(a->sin6);
#endif
assert(a->sin4.sin_family == AF_INET);
return (socklen_t)sizeof(a->sin4);
}
static inline UINT16
ng_ipaddr_getport(const ng_ipaddr_t *a)
{
#ifdef WANT_IPV6
int af = a->sa.sa_family;
assert(a != NULL);
assert(af == AF_INET || af == AF_INET6);
if (af == AF_INET6)
return ntohs(a->sin6.sin6_port);
#endif /* WANT_IPV6 */
assert(a != NULL);
assert(a->sin4.sin_family == AF_INET);
return ntohs(a->sin4.sin_port);
}
/*
* init a ng_ipaddr_t object.
* @param addr: pointer to ng_ipaddr_t to initialize.
* @param ip_str: ip address in dotted-decimal (ipv4) or hexadecimal (ipv6) notation
* @param port: transport layer port number to use.
*/
GLOBAL bool ng_ipaddr_init PARAMS((ng_ipaddr_t *addr, const char *ip_str, UINT16 port));
/* set sin4/sin6_port, depending on a->sa_family */
GLOBAL void ng_ipaddr_setport PARAMS((ng_ipaddr_t *a, UINT16 port));
/* return true if a and b have the same IP address. If a and b have different AF, return false. */
GLOBAL bool ng_ipaddr_ipequal PARAMS((const ng_ipaddr_t *a, const ng_ipaddr_t *b));
#ifdef WANT_IPV6
/* convert struct sockaddr to string, returns pointer to static buffer */
GLOBAL const char *ng_ipaddr_tostr PARAMS((const ng_ipaddr_t *addr));
/* convert struct sockaddr to string. dest must be NG_INET_ADDRSTRLEN bytes long */
GLOBAL bool ng_ipaddr_tostr_r PARAMS((const ng_ipaddr_t *addr, char *dest));
#else
static inline const char*
ng_ipaddr_tostr(const ng_ipaddr_t *addr)
{
assert(addr != NULL);
return inet_ntoa(addr->sin4.sin_addr);
}
static inline bool
ng_ipaddr_tostr_r(const ng_ipaddr_t *addr, char *d)
{
assert(addr != NULL);
assert(d != NULL);
strlcpy(d, inet_ntoa(addr->sin4.sin_addr), NG_INET_ADDRSTRLEN);
return true;
}
#endif
#endif
/* -eof- */

83
src/ngircd/Makefile.am Normal file
View File

@@ -0,0 +1,83 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2003 by 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
# 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.
#
# $Id: Makefile.am,v 1.42 2003/12/04 14:05:16 alex Exp $
#
AUTOMAKE_OPTIONS = ../portab/ansi2knr
INCLUDES = -I$(srcdir)/../portab -I$(srcdir)/../tool
LINTARGS = -weak -warnunixlib +unixlib -booltype BOOLEAN
sbin_PROGRAMS = ngircd
ngircd_SOURCES = ngircd.c channel.c client.c conf.c conn.c conn-zip.c conn-func.c \
hash.c irc.c irc-channel.c irc-info.c irc-login.c irc-mode.c irc-op.c \
irc-oper.c irc-server.c irc-write.c lists.c log.c match.c parse.c \
rendezvous.c resolve.c
ngircd_LDFLAGS = -L../portab -L../tool
ngircd_LDADD = -lngportab -lngtool
noinst_HEADERS = ngircd.h channel.h client.h conf.h conn.h conn-zip.h conn-func.h \
hash.h irc.h irc-channel.h irc-info.h irc-login.h irc-mode.h irc-op.h \
irc-oper.h irc-server.h irc-write.h lists.h log.h match.h parse.h \
rendezvous.h resolve.h \
messages.h defines.h
clean-local:
rm -f check-version check-help lint.out cvs-version.*
maintainer-clean-local:
rm -f Makefile Makefile.in
check-version: Makefile
echo "#!/bin/sh" > check-version
echo "./ngircd --version | grep ngircd > /dev/null 2>&1" >> check-version
chmod 755 check-version
check-help: Makefile
echo "#!/bin/sh" > check-help
echo "./ngircd --help | grep help > /dev/null 2>&1" >> check-help
chmod 755 check-help
lint:
rm -f lint.out
for f in *.c; do \
echo "checking $$f ..."; \
splint $$f $(LINTARGS) -I./.. -I./../portab $(AM_CFLAGS) > lint.out 2>&1; \
grep "no warnings" lint.out > /dev/null 2>&1; \
if [ $$? -ne 0 ]; then \
echo; cat lint.out; echo; \
fi; \
done;
ngircd.c: cvs-version.h
irc-login.c: cvs-version.h
irc-info.c: cvs-version.h
cvs-version.h: cvs-date
cvs-date:
grep VERSION ../config.h | grep "CVS" \
&& echo "#define CVSDATE \"$$( grep "\$$Id" $(srcdir)/*.c \
| $(AWK) "{ print \$$9 }" | sort | tail -1 \
| sed -e "s/\//-/g" )\"" > cvs-version.new \
|| echo "" > cvs-version.new
diff cvs-version.h cvs-version.new 2>/dev/null \
|| cp cvs-version.new cvs-version.h
TESTS = check-version check-help
# -eof-

View File

@@ -1,124 +0,0 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2024 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.
#
__ng_Makefile_am_template__
EXTRA_DIST = Makefile.ng
AM_CPPFLAGS = -I$(srcdir)/../portab -I$(srcdir)/../tool -I$(srcdir)/../ipaddr
sbin_PROGRAMS = ngircd
ngircd_SOURCES = \
ngircd.c \
array.c \
channel.c \
class.c \
client.c \
client-cap.c \
conf.c \
conn.c \
conn-encoding.c \
conn-func.c \
conn-ssl.c \
conn-zip.c \
hash.c \
io.c \
irc.c \
irc-cap.c \
irc-channel.c \
irc-encoding.c \
irc-info.c \
irc-login.c \
irc-metadata.c \
irc-mode.c \
irc-op.c \
irc-oper.c \
irc-server.c \
irc-write.c \
lists.c \
log.c \
login.c \
match.c \
numeric.c \
op.c \
pam.c \
parse.c \
proc.c \
resolve.c \
sighandlers.c
ngircd_LDFLAGS = -L../portab -L../tool -L../ipaddr
ngircd_LDADD = -lngportab -lngtool -lngipaddr
noinst_HEADERS = \
ngircd.h \
array.h \
channel.h \
class.h \
client.h \
client-cap.h \
conf.h \
conf-ssl.h \
conn.h \
conn-encoding.h \
conn-func.h \
conn-ssl.h \
conn-zip.h \
defines.h \
hash.h \
io.h \
irc.h \
irc-cap.h \
irc-channel.h \
irc-encoding.h \
irc-info.h \
irc-login.h \
irc-macros.h \
irc-metadata.h \
irc-mode.h \
irc-op.h \
irc-oper.h \
irc-server.h \
irc-write.h \
lists.h \
log.h \
login.h \
match.h \
messages.h \
numeric.h \
op.h \
pam.h \
parse.h \
proc.h \
resolve.h \
sighandlers.h
clean-local:
rm -f check-version check-help
maintainer-clean-local:
rm -f Makefile Makefile.in Makefile.am
check-version: Makefile
echo "#!/bin/sh" > check-version
echo "./ngircd --version | grep ngircd >/dev/null 2>&1" >>check-version
chmod 755 check-version
check-help: Makefile
echo "#!/bin/sh" > check-help
echo "./ngircd --help | grep help >/dev/null 2>&1" >>check-help
chmod 755 check-help
TESTS = check-version check-help
# -eof-

View File

@@ -1,331 +0,0 @@
/*
* 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.
*
* libarray - dynamically allocate arrays.
* Copyright (c) 2005 Florian Westphal (westphal@foo.fh-furtwangen.de)
*/
/**
* @file
* 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
#define array_UNUSABLE(x) ( !(x)->mem )
static bool
safemult_sizet(size_t a, size_t b, size_t *res)
{
size_t tmp = a * b;
if (b && (tmp / b != a))
return false;
*res = tmp;
return true;
}
void
array_init(array *a)
{
assert(a != NULL);
a->mem = NULL;
a->allocated = 0;
a->used = 0;
}
/* if realloc() fails, array_alloc return NULL. otherwise return pointer to elem pos in array */
void *
array_alloc(array * a, size_t size, size_t pos)
{
size_t alloc, pos_plus1 = pos + 1;
char *tmp;
assert(size > 0);
if (pos_plus1 == 0 || !safemult_sizet(size, pos_plus1, &alloc))
return NULL;
if (a->allocated < alloc) {
#if DEBUG_ARRAY
LogDebug("array_alloc(): changing size from %u to %u bytes.",
a->allocated, alloc);
#endif
tmp = realloc(a->mem, alloc);
if (!tmp)
return NULL;
a->mem = tmp;
a->allocated = alloc;
memset(a->mem + a->used, 0, a->allocated - a->used);
a->used = alloc;
}
assert(a->allocated >= a->used);
return a->mem + (pos * size);
}
/*return number of initialized ELEMS in a. */
size_t
array_length(const array * const a, size_t membersize)
{
assert(a != NULL);
assert(membersize > 0);
if (array_UNUSABLE(a))
return 0;
assert(a->allocated);
return membersize ? a->used / membersize : 0;
}
/* copy array src to array dest */
bool
array_copy(array * dest, const array * const src)
{
if (array_UNUSABLE(src))
return false;
assert(src->allocated);
return array_copyb(dest, src->mem, src->used);
}
/* return false on failure (realloc failure, invalid src/dest array) */
bool
array_copyb(array * dest, const char *src, size_t len)
{
assert(dest != NULL);
assert(src != NULL );
if (!src || !dest)
return false;
array_trunc(dest);
return array_catb(dest, src, len);
}
/* copy string to dest */
bool
array_copys(array * dest, const char *src)
{
return array_copyb(dest, src, strlen(src));
}
/* append len bytes from src to the array dest.
return false if we could not append all bytes (realloc failure, invalid src/dest array) */
bool
array_catb(array * dest, const char *src, size_t len)
{
size_t tmp;
size_t used;
char *ptr;
assert(dest != NULL);
assert(src != NULL);
if (!len)
return true;
if (!src || !dest)
return false;
used = dest->used;
tmp = used + len;
if (tmp < used || tmp < len) /* integer overflow */
return false;
if (!array_alloc(dest, 1, tmp))
return false;
ptr = dest->mem;
assert(ptr != NULL);
#if DEBUG_ARRAY
LogDebug(
"array_catb(): appending %u bytes to array (now %u bytes in array).",
len, tmp);
#endif
memcpy(ptr + used, src, len);
dest->used = tmp;
return true;
}
/* append string to dest */
bool
array_cats(array * dest, const char *src)
{
return array_catb(dest, src, strlen(src));
}
/* append trailing NUL byte to array */
bool
array_cat0(array * a)
{
return array_catb(a, "", 1);
}
/* append trailing NUL byte to array, but do not count it. */
bool
array_cat0_temporary(array * a)
{
char *endpos = array_alloc(a, 1, array_bytes(a));
if (!endpos)
return false;
*endpos = '\0';
return true;
}
/* add contents of array src to array dest. */
bool
array_cat(array * dest, const array * const src)
{
if (array_UNUSABLE(src))
return false;
return array_catb(dest, src->mem, src->used);
}
/* return pointer to the element at pos.
return NULL if the array is unallocated, or if pos is larger than
the number of elements stored int the array. */
void *
array_get(array * a, size_t membersize, size_t pos)
{
size_t totalsize;
size_t posplus1 = pos + 1;
assert(membersize > 0);
assert(a != NULL);
if (!posplus1 || array_UNUSABLE(a))
return NULL;
if (!safemult_sizet(posplus1, membersize, &totalsize))
return NULL;
if (a->allocated < totalsize)
return NULL;
totalsize = pos * membersize;
return a->mem + totalsize;
}
void
array_free(array * a)
{
assert(a != NULL);
#if DEBUG_ARRAY
LogDebug(
"array_free(): %u bytes free'd (%u bytes still used at time of free()).",
a->allocated, a->used);
#endif
free(a->mem);
a->mem = NULL;
a->allocated = 0;
a->used = 0;
}
void
array_free_wipe(array *a)
{
size_t bytes = a->allocated;
if (bytes)
memset(a->mem, 0, bytes);
array_free(a);
}
void *
array_start(const array * const a)
{
assert(a != NULL);
return a->mem;
}
void
array_trunc(array * a)
{
assert(a != NULL);
a->used = 0;
}
void
array_truncate(array * a, size_t membersize, size_t len)
{
size_t newlen;
assert(a != NULL);
if (!safemult_sizet(membersize, len, &newlen))
return;
if (newlen <= a->allocated)
a->used = newlen;
}
/* move elements starting at pos to beginning of array */
void
array_moveleft(array * a, size_t membersize, size_t pos)
{
size_t bytepos;
assert(a != NULL);
assert(membersize > 0);
if (!safemult_sizet(membersize, pos, &bytepos)) {
a->used = 0;
return;
}
if (!bytepos)
return; /* nothing to do */
#if DEBUG_ARRAY
LogDebug(
"array_moveleft(): %u bytes used in array, starting at position %u.",
a->used, bytepos);
#endif
if (a->used <= bytepos) {
a->used = 0;
return;
}
a->used -= bytepos;
memmove(a->mem, a->mem + bytepos, a->used);
}
/* -eof- */

View File

@@ -1,104 +0,0 @@
/*
* 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.
*
* libarray - dynamically allocate arrays.
* Copyright (c) 2005 Florian Westphal (westphal@foo.fh-furtwangen.de)
*/
#ifndef array_h_included
#define array_h_included
/**
* @file
* Functions to dynamically allocate arrays (header).
*/
#include "portab.h"
typedef struct {
char * mem;
size_t allocated;
size_t used;
} array;
/* allocated: mem != NULL, used >= 0 && used <= allocated, allocated > 0
unallocated: mem == NULL, allocated == 0, used == 0 */
#define array_unallocated(x) (array_bytes(x)==0)
#define INIT_ARRAY { NULL, 0, 0 }
/* set all variables in a to 0 */
extern void array_init PARAMS((array *a));
/* allocates space for at least nmemb+1 elements of size bytes each.
return pointer to elem at pos, or NULL if realloc() fails */
extern void * array_alloc PARAMS((array *a, size_t size, size_t pos));
/* returns the number of initialized BYTES in a. */
#define array_bytes(array) ( (array)->used )
/* returns the number of initialized ELEMS in a. */
extern size_t array_length PARAMS((const array* const a, size_t elemsize));
/* _copy functions: copy src to dest.
return true if OK, else false (e. g. realloc failure, invalid src/dest
array, ...). In that case dest is left unchanged. */
/* copy array src to dest */
extern bool array_copy PARAMS((array* dest, const array* const src));
/* copy len bytes from src to array dest. */
extern bool array_copyb PARAMS((array* dest, const char* src, size_t len));
/* copy string to dest */
extern bool array_copys PARAMS((array* dest, const char* src));
/* _cat functions: append src to dest.
return true if OK, else false (e. g. realloc failure, invalid src/dest
array, ...). In that case dest is left unchanged. */
/* append len bytes from src to array dest. */
extern bool array_catb PARAMS((array* dest, const char* src, size_t len));
/* append string to dest */
extern bool array_cats PARAMS((array* dest, const char* src));
/* append NUL byte to dest */
extern bool array_cat0 PARAMS((array* dest));
/* append NUL byte to dest, but do not count null byte */
extern bool array_cat0_temporary PARAMS((array* dest));
/* append contents of array src to array dest. */
extern bool array_cat PARAMS((array* dest, const array* const src));
/* return pointer to element at pos.
return NULL if the array is unallocated or if pos is larger than the number
of elements stored int the array. */
extern void* array_get PARAMS((array* a, size_t membersize, size_t pos));
/* free the contents of this array. */
extern void array_free PARAMS((array* a));
/* overwrite array with zeros before free */
extern void array_free_wipe PARAMS((array* a));
/* return pointer to first element in this array */
extern void* array_start PARAMS((const array* const a));
/* reset this array (the memory is not free'd */
extern void array_trunc PARAMS((array* a));
/* set number of used elements in this array to len */
extern void array_truncate PARAMS((array* a, size_t membersize, size_t len));
/* move elements starting at pos to beginning of array */
extern void array_moveleft PARAMS((array* a, size_t membersize, size_t pos));
#endif
/* -eof- */

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +1,36 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001,2002 by 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
* 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.
*
* $Id: channel.h,v 1.26 2002/12/16 23:05:24 alex Exp $
*
* Channel management (header)
*/
#ifndef __channel_h__
#define __channel_h__
/**
* @file
* Channel management (header)
*/
#if defined(__channel_c__)
#if defined(__channel_c__) | defined(S_SPLINT_S)
#include "lists.h"
#include "defines.h"
#include "array.h"
typedef struct _CHANNEL
{
struct _CHANNEL *next;
char name[CHANNEL_NAME_LEN]; /* Name of the channel */
CHAR name[CHANNEL_NAME_LEN]; /* Name of the channel */
UINT32 hash; /* Hash of the (lowecase!) name */
char modes[CHANNEL_MODE_LEN]; /* Channel modes */
array topic; /* Topic of the channel */
#ifndef STRICT_RFC
time_t creation_time; /* Channel creation time */
time_t topic_time; /* Time when topic was set */
char topic_who[CLIENT_NICK_LEN];/* Nickname of user that set topic */
#endif
char key[CLIENT_PASS_LEN]; /* Channel key ("password", mode "k" ) */
unsigned long maxusers; /* Maximum number of members (mode "l") */
struct list_head list_bans; /* list head of banned users */
struct list_head list_excepts; /* list head of (ban) exception list */
struct list_head list_invites; /* list head of invited users */
array keyfile; /* Name of the channel key file */
CHAR modes[CHANNEL_MODE_LEN]; /* Channel modes */
CHAR topic[CHANNEL_TOPIC_LEN]; /* Topic of the channel */
CHAR key[CLIENT_PASS_LEN]; /* Channel key ("password", mode "k" ) */
LONG maxusers; /* Maximum number of members (mode "l") */
} CHANNEL;
typedef struct _CLIENT2CHAN
@@ -48,7 +38,7 @@ typedef struct _CLIENT2CHAN
struct _CLIENT2CHAN *next;
CLIENT *client;
CHANNEL *channel;
char modes[CHANNEL_MODE_LEN]; /* User-Modes in Channel */
CHAR modes[CHANNEL_MODE_LEN]; /* User-Modes in dem Channel */
} CL2CHAN;
#else
@@ -58,39 +48,37 @@ typedef POINTER CL2CHAN;
#endif
GLOBAL struct list_head *Channel_GetListBans PARAMS((CHANNEL *c));
GLOBAL struct list_head *Channel_GetListExcepts PARAMS((CHANNEL *c));
GLOBAL struct list_head *Channel_GetListInvites PARAMS((CHANNEL *c));
GLOBAL void Channel_Init PARAMS(( void ));
GLOBAL void Channel_InitPredefined PARAMS(( void ));
GLOBAL void Channel_Exit PARAMS(( void ));
GLOBAL VOID Channel_Init PARAMS(( VOID ));
GLOBAL VOID Channel_InitPredefined PARAMS(( VOID ));
GLOBAL VOID Channel_Exit PARAMS(( VOID ));
GLOBAL bool Channel_Join PARAMS(( CLIENT *Client, const char *Name ));
GLOBAL bool Channel_Part PARAMS(( CLIENT *Client, CLIENT *Origin, const char *Name, const char *Reason ));
GLOBAL BOOLEAN Channel_Join PARAMS(( CLIENT *Client, CHAR *Name ));
GLOBAL BOOLEAN Channel_Part PARAMS(( CLIENT *Client, CLIENT *Origin, CHAR *Name, CHAR *Reason ));
GLOBAL void Channel_Quit PARAMS(( CLIENT *Client, const char *Reason ));
GLOBAL VOID Channel_Quit PARAMS(( CLIENT *Client, CHAR *Reason ));
GLOBAL void Channel_Kick PARAMS((CLIENT *Peer, CLIENT *Target, CLIENT *Origin,
const char *Name, const char *Reason));
GLOBAL VOID Channel_Kick PARAMS(( CLIENT *Client, CLIENT *Origin, CHAR *Name, CHAR *Reason ));
GLOBAL unsigned long Channel_CountVisible PARAMS((CLIENT *Client));
GLOBAL unsigned long Channel_MemberCount PARAMS(( CHANNEL *Chan ));
GLOBAL int Channel_CountForUser PARAMS(( CLIENT *Client ));
GLOBAL LONG Channel_Count PARAMS(( VOID ));
GLOBAL LONG Channel_MemberCount PARAMS(( CHANNEL *Chan ));
GLOBAL INT Channel_CountForUser PARAMS(( CLIENT *Client ));
GLOBAL INT Channel_PCount PARAMS(( VOID ));
GLOBAL const char *Channel_Name PARAMS(( const CHANNEL *Chan ));
GLOBAL char *Channel_Topic PARAMS(( CHANNEL *Chan ));
GLOBAL char *Channel_Key PARAMS(( CHANNEL *Chan ));
GLOBAL unsigned long Channel_MaxUsers PARAMS(( CHANNEL *Chan ));
GLOBAL CHAR *Channel_Name PARAMS(( CHANNEL *Chan ));
GLOBAL CHAR *Channel_Modes PARAMS(( CHANNEL *Chan ));
GLOBAL CHAR *Channel_Topic PARAMS(( CHANNEL *Chan ));
GLOBAL CHAR *Channel_Key PARAMS(( CHANNEL *Chan ));
GLOBAL LONG Channel_MaxUsers PARAMS(( CHANNEL *Chan ));
GLOBAL void Channel_SetTopic PARAMS(( CHANNEL *Chan, CLIENT *Client, const char *Topic ));
GLOBAL void Channel_SetModes PARAMS(( CHANNEL *Chan, const char *Modes ));
GLOBAL void Channel_SetKey PARAMS(( CHANNEL *Chan, const char *Key ));
GLOBAL void Channel_SetMaxUsers PARAMS(( CHANNEL *Chan, unsigned long Count ));
GLOBAL VOID Channel_SetTopic PARAMS(( CHANNEL *Chan, CHAR *Topic ));
GLOBAL VOID Channel_SetModes PARAMS(( CHANNEL *Chan, CHAR *Modes ));
GLOBAL VOID Channel_SetKey PARAMS(( CHANNEL *Chan, CHAR *Key ));
GLOBAL VOID Channel_SetMaxUsers PARAMS(( CHANNEL *Chan, LONG Count ));
GLOBAL CHANNEL *Channel_Search PARAMS(( const char *Name ));
GLOBAL CHANNEL *Channel_Search PARAMS(( CHAR *Name ));
GLOBAL CHANNEL *Channel_First PARAMS(( void ));
GLOBAL CHANNEL *Channel_First PARAMS(( VOID ));
GLOBAL CHANNEL *Channel_Next PARAMS(( CHANNEL *Chan ));
GLOBAL CL2CHAN *Channel_FirstMember PARAMS(( CHANNEL *Chan ));
@@ -101,53 +89,23 @@ GLOBAL CL2CHAN *Channel_NextChannelOf PARAMS(( CLIENT *Client, CL2CHAN *Cl2Chan
GLOBAL CLIENT *Channel_GetClient PARAMS(( CL2CHAN *Cl2Chan ));
GLOBAL CHANNEL *Channel_GetChannel PARAMS(( CL2CHAN *Cl2Chan ));
GLOBAL bool Channel_IsValidName PARAMS(( const char *Name ));
GLOBAL BOOLEAN Channel_IsValidName PARAMS(( CHAR *Name ));
GLOBAL bool Channel_ModeAdd PARAMS(( CHANNEL *Chan, char Mode ));
GLOBAL bool Channel_ModeDel PARAMS(( CHANNEL *Chan, char Mode ));
GLOBAL bool Channel_HasMode PARAMS(( CHANNEL *Chan, char Mode ));
GLOBAL char *Channel_Modes PARAMS(( CHANNEL *Chan ));
GLOBAL BOOLEAN Channel_ModeAdd PARAMS(( CHANNEL *Chan, CHAR Mode ));
GLOBAL BOOLEAN Channel_ModeDel PARAMS(( CHANNEL *Chan, CHAR Mode ));
GLOBAL bool Channel_UserModeAdd PARAMS(( CHANNEL *Chan, CLIENT *Client, char Mode ));
GLOBAL bool Channel_UserModeDel PARAMS(( CHANNEL *Chan, CLIENT *Client, char Mode ));
GLOBAL bool Channel_UserHasMode PARAMS(( CHANNEL *Chan, CLIENT *Client, char Mode ));
GLOBAL char *Channel_UserModes PARAMS(( CHANNEL *Chan, CLIENT *Client ));
GLOBAL BOOLEAN Channel_UserModeAdd PARAMS(( CHANNEL *Chan, CLIENT *Client, CHAR Mode ));
GLOBAL BOOLEAN Channel_UserModeDel PARAMS(( CHANNEL *Chan, CLIENT *Client, CHAR Mode ));
GLOBAL CHAR *Channel_UserModes PARAMS(( CHANNEL *Chan, CLIENT *Client ));
GLOBAL bool Channel_IsMemberOf PARAMS(( CHANNEL *Chan, CLIENT *Client ));
GLOBAL BOOLEAN Channel_IsMemberOf PARAMS(( CHANNEL *Chan, CLIENT *Client ));
GLOBAL bool Channel_Write PARAMS((CHANNEL *Chan, CLIENT *From, CLIENT *Client,
const char *Command, bool SendErrors,
const char *Text));
GLOBAL BOOLEAN Channel_Write PARAMS(( CHANNEL *Chan, CLIENT *From, CLIENT *Client, CHAR *Text ));
GLOBAL CHANNEL *Channel_Create PARAMS(( const char *Name ));
GLOBAL CHANNEL *Channel_Create PARAMS(( CHAR *Name ));
#ifndef STRICT_RFC
GLOBAL unsigned int Channel_TopicTime PARAMS(( CHANNEL *Chan ));
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_AddInvite PARAMS((CHANNEL *c, const char *Mask,
bool OnlyOnce, const char *who));
GLOBAL bool Channel_ShowBans PARAMS((CLIENT *client, CHANNEL *c));
GLOBAL bool Channel_ShowExcepts PARAMS((CLIENT *client, CHANNEL *c));
GLOBAL bool Channel_ShowInvites PARAMS((CLIENT *client, CHANNEL *c));
GLOBAL void Channel_LogServer PARAMS((const char *msg));
GLOBAL bool Channel_CheckKey PARAMS((CHANNEL *Chan, CLIENT *Client,
const char *Key));
GLOBAL void Channel_CheckAdminRights PARAMS((CHANNEL *Chan, CLIENT *Client,
CLIENT *Origin, bool *OnChannel,
bool *AdminOk, bool *UseServerMode));
#define Channel_IsLocal(c) (Channel_Name(c)[0] == '&')
#define Channel_IsModeless(c) (Channel_Name(c)[0] == '+')
#endif
/* -eof- */

View File

@@ -1,138 +0,0 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* 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
* 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.
*/
#include "portab.h"
/**
* @file
* User class management.
*/
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include "conn.h"
#include "lists.h"
#include "class.h"
struct list_head My_Classes[CLASS_COUNT];
GLOBAL void
Class_Init(void)
{
memset(My_Classes, 0, sizeof(My_Classes));
}
GLOBAL void
Class_Exit(void)
{
int i;
for (i = 0; i < CLASS_COUNT; Lists_Free(&My_Classes[i++]));
}
GLOBAL bool
Class_GetMemberReason(const int Class, CLIENT *Client, char *reason, size_t len)
{
char str[COMMAND_LEN];
assert(Class < CLASS_COUNT);
assert(Client != NULL);
strlcpy(str, "listed", sizeof(str));
if (!Lists_CheckReason(&My_Classes[Class], Client, str, sizeof(str)))
return false;
switch(Class) {
case CLASS_GLINE:
snprintf(reason, len, "\"%s\" (G-Line)", str);
break;
case CLASS_KLINE:
snprintf(reason, len, "\"%s\" (K-Line)", str);
break;
default:
snprintf(reason, len, "%s", str);
break;
}
return true;
}
/**
* Check if a client is banned from this server: GLINE, KLINE.
*
* If a client isn't allowed to connect, it will be disconnected again.
*
* @param Client The client to check.
* @return CONNECTED if client is allowed to join, DISCONNECTED if not.
*/
GLOBAL bool
Class_HandleServerBans(CLIENT *Client)
{
char reject[COMMAND_LEN];
assert(Client != NULL);
if (Class_GetMemberReason(CLASS_GLINE, Client, reject, sizeof(reject)) ||
Class_GetMemberReason(CLASS_KLINE, Client, reject, sizeof(reject))) {
Client_Reject(Client, reject, true);
return DISCONNECTED;
}
return CONNECTED;
}
GLOBAL bool
Class_AddMask(const int Class, const char *Pattern, time_t ValidUntil,
const char *Reason)
{
char mask[MASK_LEN];
assert(Class < CLASS_COUNT);
assert(Pattern != NULL);
assert(Reason != NULL);
Lists_MakeMask(Pattern, mask, sizeof(mask));
return Lists_Add(&My_Classes[Class], mask,
ValidUntil, Reason, false);
}
GLOBAL void
Class_DeleteMask(const int Class, const char *Pattern)
{
char mask[MASK_LEN];
assert(Class < CLASS_COUNT);
assert(Pattern != NULL);
Lists_MakeMask(Pattern, mask, sizeof(mask));
Lists_Del(&My_Classes[Class], mask);
}
GLOBAL struct list_head *
Class_GetList(const int Class)
{
assert(Class < CLASS_COUNT);
return &My_Classes[Class];
}
GLOBAL void
Class_Expire(void)
{
Lists_Expire(&My_Classes[CLASS_GLINE], "G-Line");
Lists_Expire(&My_Classes[CLASS_KLINE], "K-Line");
}
/* -eof- */

View File

@@ -1,42 +0,0 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* 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
* 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.
*/
#ifndef __class_h__
#define __class_h__
/**
* @file
* User class management.
*/
#define CLASS_KLINE 0
#define CLASS_GLINE 1
#define CLASS_COUNT 2
GLOBAL void Class_Init PARAMS((void));
GLOBAL void Class_Exit PARAMS((void));
GLOBAL bool Class_AddMask PARAMS((const int Class, const char *Pattern,
const time_t ValidUntil, const char *Reason));
GLOBAL void Class_DeleteMask PARAMS((const int Class, const char *Pattern));
GLOBAL bool Class_GetMemberReason PARAMS((const int Class, CLIENT *Client,
char *reason, size_t len));
GLOBAL bool Class_HandleServerBans PARAMS((CLIENT *Client));
GLOBAL struct list_head *Class_GetList PARAMS((const int Class));
GLOBAL void Class_Expire PARAMS((void));
#endif /* __class_h__ */
/* -eof- */

View File

@@ -1,69 +0,0 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* 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
* 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.
*/
#define __client_cap_c__
#include "portab.h"
/**
* @file
* Functions to deal with IRC Capabilities
*/
#include <assert.h>
#include "conn.h"
#include "log.h"
#include "client-cap.h"
GLOBAL int
Client_Cap(CLIENT *Client)
{
assert (Client != NULL);
return Client->capabilities;
}
GLOBAL void
Client_CapSet(CLIENT *Client, int Cap)
{
assert(Client != NULL);
assert(Cap >= 0);
Client->capabilities = Cap;
LogDebug("Set new capability of \"%s\" to %d.",
Client_ID(Client), Client->capabilities);
}
GLOBAL void
Client_CapAdd(CLIENT *Client, int Cap)
{
assert(Client != NULL);
assert(Cap > 0);
Client->capabilities |= Cap;
LogDebug("Add capability %d, new capability of \"%s\" is %d.",
Cap, Client_ID(Client), Client->capabilities);
}
GLOBAL void
Client_CapDel(CLIENT *Client, int Cap)
{
assert(Client != NULL);
assert(Cap > 0);
Client->capabilities &= ~Cap;
LogDebug("Delete capability %d, new capability of \"%s\" is %d.",
Cap, Client_ID(Client), Client->capabilities);
}
/* -eof- */

View File

@@ -1,31 +0,0 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* 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
* 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.
*/
#ifndef __client_cap_h__
#define __client_cap_h__
/**
* @file
* Functions to deal with IRC Capabilities (header)
*/
#define CLIENT_CAP_PENDING 1 /* Capability negotiation pending */
#define CLIENT_CAP_SUPPORTED 2 /* Client supports IRC capabilities */
#define CLIENT_CAP_MULTI_PREFIX 4 /* multi-prefix */
GLOBAL int Client_Cap PARAMS((CLIENT *Client));
GLOBAL void Client_CapSet PARAMS((CLIENT *Client, int Cap));
GLOBAL void Client_CapAdd PARAMS((CLIENT *Client, int Cap));
GLOBAL void Client_CapDel PARAMS((CLIENT *Client, int Cap));
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,68 +1,58 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2024 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001,2002 by 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
* 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.
*
* $Id: client.h,v 1.34 2003/01/15 14:28:25 alex Exp $
*
* Client management (header)
*/
#ifndef __client_h__
#define __client_h__
/**
* @file
* Client management (header)
*/
#define CLIENT_UNKNOWN 0x0001 /* connection of unknown type */
#define CLIENT_GOTPASS 0x0002 /* client did send PASS */
#define CLIENT_GOTNICK 0x0004 /* client did send NICK */
#define CLIENT_GOTUSER 0x0008 /* client did send USER */
#define CLIENT_USER 0x0010 /* client is an IRC user */
#define CLIENT_SERVER 0x0020 /* client is a server */
#define CLIENT_SERVICE 0x0040 /* client is a service */
#define CLIENT_UNKNOWNSERVER 0x0080 /* unregistered server connection */
#define CLIENT_GOTPASS_2813 0x0100 /* client did send PASS, RFC 2813 style */
#ifndef STRICT_RFC
# define CLIENT_WAITAUTHPING 0x0200 /* waiting for AUTH PONG from client */
#endif
#define CLIENT_WAITCAPEND 0x0400 /* waiting for "CAP END" command */
#define CLIENT_ANY 0xFFFF
#define CLIENT_UNKNOWN 1 /* connection of unknown type */
#define CLIENT_GOTPASS 2 /* client did send PASS */
#define CLIENT_GOTNICK 4 /* client did send NICK */
#define CLIENT_GOTUSER 8 /* client did send USER */
#define CLIENT_USER 16 /* client is an IRC user */
#define CLIENT_UNKNOWNSERVER 32 /* unregistered server connection */
#define CLIENT_GOTPASSSERVER 64 /* client did send PASS in "server style" */
#define CLIENT_SERVER 128 /* client is a server */
#define CLIENT_SERVICE 256 /* client is a service */
#define CLIENT_TYPE int
#define CLIENT_TYPE INT
#if defined(__client_c__) | defined(S_SPLINT_S)
#include "defines.h"
#if defined(__client_c__) | defined(__client_cap_c__)
typedef struct _CLIENT
{
time_t starttime; /* Start time of link */
char id[CLIENT_ID_LEN]; /* nick (user) / ID (server) */
CHAR id[CLIENT_ID_LEN]; /* nick (user) / ID (server) */
UINT32 hash; /* hash of lower-case ID */
POINTER *next; /* pointer to next client structure */
CLIENT_TYPE type; /* type of client, see CLIENT_xxx */
CONN_ID conn_id; /* ID of the connection (if local) or NONE (remote) */
struct _CLIENT *introducer; /* ID of the servers which the client is connected to */
struct _CLIENT *topserver; /* toplevel servers (only valid if client is a server) */
char host[CLIENT_HOST_LEN]; /* hostname of the 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 */
#endif
char info[CLIENT_INFO_LEN]; /* long user name (user) / info text (server) */
char modes[CLIENT_MODE_LEN]; /* client modes */
int hops, token, mytoken; /* "hops" and "Token" (see SERVER command) */
char *away; /* AWAY text (valid if mode 'a' is set) */
char flags[CLIENT_FLAGS_LEN]; /* flags of the client */
char *account_name; /* login account (for services) */
int capabilities; /* enabled IRC capabilities */
CHAR pwd[CLIENT_PASS_LEN]; /* password received of the client */
CHAR host[CLIENT_HOST_LEN]; /* hostname of the client */
CHAR user[CLIENT_USER_LEN]; /* user name ("login") */
CHAR info[CLIENT_INFO_LEN]; /* long user name (user) / info text (server) */
CHAR modes[CLIENT_MODE_LEN]; /* client modes */
INT hops, token, mytoken; /* "hops" and "Token" (see SERVER command) */
BOOLEAN oper_by_me; /* client is local IRC operator on this server? */
CHAR away[CLIENT_AWAY_LEN]; /* AWAY text (valid if mode 'a' is set) */
CHAR flags[CLIENT_FLAGS_LEN]; /* flags of the client */
} CLIENT;
#else
@@ -72,118 +62,84 @@ typedef POINTER CLIENT;
#endif
typedef struct _WHOWAS
{
time_t time; /* time stamp of entry or 0 if unused */
char id[CLIENT_NICK_LEN]; /* client nickname */
char host[CLIENT_HOST_LEN]; /* hostname of the client */
char user[CLIENT_USER_LEN]; /* user name ("login") */
char info[CLIENT_INFO_LEN]; /* long user name */
char server[CLIENT_HOST_LEN]; /* server name */
} WHOWAS;
GLOBAL VOID Client_Init PARAMS(( VOID ));
GLOBAL VOID Client_Exit PARAMS(( VOID ));
GLOBAL CLIENT *Client_NewLocal PARAMS(( CONN_ID Idx, CHAR *Hostname, INT Type, BOOLEAN Idented ));
GLOBAL CLIENT *Client_NewRemoteServer PARAMS(( CLIENT *Introducer, CHAR *Hostname, CLIENT *TopServer, INT Hops, INT Token, CHAR *Info, BOOLEAN Idented ));
GLOBAL CLIENT *Client_NewRemoteUser PARAMS(( CLIENT *Introducer, CHAR *Nick, INT Hops, CHAR *User, CHAR *Hostname, INT Token, CHAR *Modes, CHAR *Info, BOOLEAN Idented ));
GLOBAL CLIENT *Client_New PARAMS(( CONN_ID Idx, CLIENT *Introducer, CLIENT *TopServer, INT Type, CHAR *ID, CHAR *User, CHAR *Hostname, CHAR *Info, INT Hops, INT Token, CHAR *Modes, BOOLEAN Idented ));
GLOBAL void Client_Init PARAMS(( void ));
GLOBAL void Client_Exit PARAMS(( void ));
GLOBAL VOID Client_Destroy PARAMS(( CLIENT *Client, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN SendQuit ));
#ifdef CONN_MODULE
GLOBAL VOID Client_DestroyNow PARAMS(( CLIENT *Client ));
#endif
GLOBAL CLIENT *Client_NewLocal PARAMS(( CONN_ID Idx, const char *Hostname, int Type, bool Idented ));
GLOBAL CLIENT *Client_NewRemoteServer PARAMS(( CLIENT *Introducer, const char *Hostname, CLIENT *TopServer, int Hops, int Token, const char *Info, bool Idented ));
GLOBAL CLIENT *Client_NewRemoteUser PARAMS(( CLIENT *Introducer, const char *Nick, int Hops, const char *User, const char *Hostname, int Token, const char *Modes, const char *Info, bool Idented ));
GLOBAL CLIENT *Client_ThisServer PARAMS(( VOID ));
GLOBAL void Client_Destroy PARAMS(( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool SendQuit ));
GLOBAL CLIENT *Client_GetFromConn PARAMS(( CONN_ID Idx ));
GLOBAL CLIENT *Client_GetFromToken PARAMS(( CLIENT *Client, INT Token ));
GLOBAL CLIENT *Client_ThisServer PARAMS(( void ));
GLOBAL CLIENT *Client_GetFromToken PARAMS(( CLIENT *Client, int Token ));
GLOBAL bool Client_Announce PARAMS(( CLIENT *Client, CLIENT *Prefix, CLIENT *User ));
GLOBAL CLIENT *Client_Search PARAMS(( const char *ID ));
GLOBAL CLIENT *Client_SearchServer PARAMS(( const char *ID ));
GLOBAL CLIENT *Client_First PARAMS(( void ));
GLOBAL CLIENT *Client_Search PARAMS(( CHAR *ID ));
GLOBAL CLIENT *Client_First PARAMS(( VOID ));
GLOBAL CLIENT *Client_Next PARAMS(( CLIENT *c ));
GLOBAL int Client_Type PARAMS(( CLIENT *Client ));
GLOBAL INT Client_Type PARAMS(( CLIENT *Client ));
GLOBAL CONN_ID Client_Conn PARAMS(( CLIENT *Client ));
GLOBAL char *Client_ID PARAMS(( CLIENT *Client ));
GLOBAL char *Client_Mask PARAMS(( CLIENT *Client ));
GLOBAL char *Client_MaskCloaked PARAMS(( CLIENT *Client ));
GLOBAL char *Client_Info PARAMS(( CLIENT *Client ));
GLOBAL char *Client_User PARAMS(( CLIENT *Client ));
#ifdef PAM
GLOBAL char *Client_OrigUser PARAMS(( CLIENT *Client ));
#endif
GLOBAL char *Client_Hostname PARAMS(( CLIENT *Client ));
GLOBAL char *Client_HostnameCloaked PARAMS((CLIENT *Client));
GLOBAL char *Client_HostnameDisplayed PARAMS(( CLIENT *Client ));
GLOBAL const char *Client_IPAText PARAMS(( CLIENT *Client ));
GLOBAL char *Client_Modes PARAMS(( CLIENT *Client ));
GLOBAL char *Client_Flags PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_ID PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_Mask PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_Info PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_User PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_Hostname PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_Password PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_Modes PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_Flags PARAMS(( CLIENT *Client ));
GLOBAL CLIENT *Client_Introducer PARAMS(( CLIENT *Client ));
GLOBAL int Client_Hops PARAMS(( CLIENT *Client ));
GLOBAL int Client_Token PARAMS(( CLIENT *Client ));
GLOBAL int Client_MyToken PARAMS(( CLIENT *Client ));
GLOBAL BOOLEAN Client_OperByMe PARAMS(( CLIENT *Client ));
GLOBAL INT Client_Hops PARAMS(( CLIENT *Client ));
GLOBAL INT Client_Token PARAMS(( CLIENT *Client ));
GLOBAL INT Client_MyToken PARAMS(( CLIENT *Client ));
GLOBAL CLIENT *Client_TopServer PARAMS(( CLIENT *Client ));
GLOBAL CLIENT *Client_NextHop PARAMS(( CLIENT *Client ));
GLOBAL char *Client_Away PARAMS(( CLIENT *Client ));
GLOBAL char *Client_AccountName PARAMS((CLIENT *Client));
GLOBAL time_t Client_StartTime PARAMS(( CLIENT *Client ));
GLOBAL CHAR *Client_Away PARAMS(( CLIENT *Client ));
GLOBAL bool Client_HasMode PARAMS(( CLIENT *Client, char Mode ));
GLOBAL bool Client_HasFlag PARAMS(( CLIENT *Client, char Flag ));
GLOBAL BOOLEAN Client_HasMode PARAMS(( CLIENT *Client, CHAR Mode ));
GLOBAL void Client_SetHostname PARAMS(( CLIENT *Client, const char *Hostname ));
GLOBAL void Client_SetIPAText PARAMS(( CLIENT *Client, const char *IPAText ));
GLOBAL void Client_SetID PARAMS(( CLIENT *Client, const char *Nick ));
GLOBAL void Client_SetUser PARAMS(( CLIENT *Client, const char *User, bool Idented ));
GLOBAL void Client_SetOrigUser PARAMS(( CLIENT *Client, const char *User ));
GLOBAL void Client_SetInfo PARAMS(( CLIENT *Client, const char *Info ));
GLOBAL void Client_SetType PARAMS(( CLIENT *Client, int Type ));
GLOBAL void Client_SetHops PARAMS(( CLIENT *Client, int Hops ));
GLOBAL void Client_SetToken PARAMS(( CLIENT *Client, int Token ));
GLOBAL void Client_SetModes PARAMS(( CLIENT *Client, const char *Modes ));
GLOBAL void Client_SetFlags PARAMS(( CLIENT *Client, const char *Flags ));
GLOBAL void Client_SetIntroducer PARAMS(( CLIENT *Client, CLIENT *Introducer ));
GLOBAL void Client_SetAway PARAMS(( CLIENT *Client, const char *Txt ));
GLOBAL void Client_SetAccountName PARAMS((CLIENT *Client, const char *AccountName));
GLOBAL VOID Client_SetHostname PARAMS(( CLIENT *Client, CHAR *Hostname ));
GLOBAL VOID Client_SetID PARAMS(( CLIENT *Client, CHAR *Nick ));
GLOBAL VOID Client_SetUser PARAMS(( CLIENT *Client, CHAR *User, BOOLEAN Idented ));
GLOBAL VOID Client_SetInfo PARAMS(( CLIENT *Client, CHAR *Info ));
GLOBAL VOID Client_SetPassword PARAMS(( CLIENT *Client, CHAR *Pwd ));
GLOBAL VOID Client_SetType PARAMS(( CLIENT *Client, INT Type ));
GLOBAL VOID Client_SetHops PARAMS(( CLIENT *Client, INT Hops ));
GLOBAL VOID Client_SetToken PARAMS(( CLIENT *Client, INT Token ));
GLOBAL VOID Client_SetOperByMe PARAMS(( CLIENT *Client, BOOLEAN OperByMe ));
GLOBAL VOID Client_SetModes PARAMS(( CLIENT *Client, CHAR *Modes ));
GLOBAL VOID Client_SetFlags PARAMS(( CLIENT *Client, CHAR *Flags ));
GLOBAL VOID Client_SetIntroducer PARAMS(( CLIENT *Client, CLIENT *Introducer ));
GLOBAL VOID Client_SetAway PARAMS(( CLIENT *Client, CHAR *Txt ));
GLOBAL bool Client_ModeAdd PARAMS(( CLIENT *Client, char Mode ));
GLOBAL bool Client_ModeDel PARAMS(( CLIENT *Client, char Mode ));
GLOBAL BOOLEAN Client_ModeAdd PARAMS(( CLIENT *Client, CHAR Mode ));
GLOBAL BOOLEAN Client_ModeDel PARAMS(( CLIENT *Client, CHAR Mode ));
GLOBAL bool Client_CheckNick PARAMS(( CLIENT *Client, char *Nick ));
GLOBAL bool Client_CheckID PARAMS(( CLIENT *Client, char *ID ));
GLOBAL BOOLEAN Client_CheckNick PARAMS(( CLIENT *Client, CHAR *Nick ));
GLOBAL BOOLEAN Client_CheckID PARAMS(( CLIENT *Client, CHAR *ID ));
GLOBAL long Client_UserCount PARAMS(( void ));
GLOBAL long Client_ServiceCount PARAMS(( void ));
GLOBAL long Client_ServerCount PARAMS(( void ));
GLOBAL unsigned long Client_OperCount PARAMS(( void ));
GLOBAL unsigned long Client_UnknownCount PARAMS(( void ));
GLOBAL long Client_MyUserCount PARAMS(( void ));
GLOBAL long Client_MyServiceCount PARAMS(( void ));
GLOBAL unsigned long Client_MyServerCount PARAMS(( void ));
GLOBAL long Client_MaxUserCount PARAMS(( void ));
GLOBAL long Client_MyMaxUserCount PARAMS(( void ));
GLOBAL LONG Client_UserCount PARAMS(( VOID ));
GLOBAL LONG Client_ServiceCount PARAMS(( VOID ));
GLOBAL LONG Client_ServerCount PARAMS(( VOID ));
GLOBAL LONG Client_OperCount PARAMS(( VOID ));
GLOBAL LONG Client_UnknownCount PARAMS(( VOID ));
GLOBAL LONG Client_MyUserCount PARAMS(( VOID ));
GLOBAL LONG Client_MyServiceCount PARAMS(( VOID ));
GLOBAL LONG Client_MyServerCount PARAMS(( VOID ));
GLOBAL LONG Client_MaxUserCount PARAMS(( VOID ));
GLOBAL LONG Client_MyMaxUserCount PARAMS(( VOID ));
GLOBAL bool Client_IsValidNick PARAMS(( const char *Nick ));
GLOBAL BOOLEAN Client_IsValidNick PARAMS(( CHAR *Nick ));
GLOBAL WHOWAS *Client_GetWhowas PARAMS(( void ));
GLOBAL int Client_GetLastWhowasIndex PARAMS(( void ));
GLOBAL void Client_RegisterWhowas PARAMS(( CLIENT *Client ));
GLOBAL const char *Client_TypeText PARAMS((CLIENT *Client));
GLOBAL void Client_Reject PARAMS((CLIENT *Client, const char *Reason,
bool InformClient));
GLOBAL void Client_Introduce PARAMS((CLIENT *From, CLIENT *Client, int Type));
GLOBAL void Client_UpdateCloakedHostname PARAMS((CLIENT *Client,
CLIENT *Originator,
const char *hostname));
GLOBAL void Client_DebugDump PARAMS((void));
#endif
/* -eof- */

Some files were not shown because too many files have changed in this diff Show More