1
0
mirror of https://github.com/osmarks/ngircd.git synced 2025-10-22 17:57:39 +00:00

Compare commits

..

26 Commits

Author SHA1 Message Date
Alexander Barton
48fcb97fa4 New "Debian release" 21.1-0ab2 2014-07-14 12:01:46 +02:00
Alexander Barton
713fd3f883 Debian: Don't adjust path names that are correct by default
(cherry picked from commit f5944a17e4)
2014-07-14 11:41:28 +02:00
Alexander Barton
19da9a0801 Debian: Correctly set and use "docdir"
(cherry picked from commit 06920df4bb)
2014-07-14 11:14:08 +02:00
Alexander Barton
ee28e76df2 ngIRCd Release 21.1 2014-03-25 14:46:28 +01:00
Roy Sindre Norangshol
9a05c1145d Use server password when PAM is compiled in but disabled
(cherry picked from commit 485d0aec81)

Conflicts:
	src/ngircd/conf.c
2014-03-23 14:08:19 +01:00
Alexander Barton
a3ad2927cc doc/Platforms.txt: Update from master branch 2014-03-19 02:36:50 +01:00
Alexander Barton
6725f67cf1 Spoofed prefixes: Really kill connection on non-server links
This fixes commit 6cbe1308 which only killed the connection when the
spoofed prefix itself belonged to a non-server client.

(cherry picked from commit 5009ab3e8c)
2014-03-19 02:31:06 +01:00
Alexander Barton
c0c9b1b8ac Fix two K&R C portability issues
Fix the following two errors emitted by the Apple K&R C compiler
on Apple A/UX:

"./class.c", line 47: no automatic aggregate initialization
"./class.c", line 47: illegal lhs of assignment operator

"./conf.c", line 1052: syntax error

Tested on A/UX 3.1.1.

(cherry picked from commit a4ed90ba9a)
2014-03-19 02:30:22 +01:00
Alexander Barton
1d3137ff69 CHARCONV: Fix handling conversion errors
Don't overwrite already converted text!

(cherry picked from commit abf280d5bd)
2014-03-19 02:28:08 +01:00
Alexander Barton
d20de38161 Services.txt: Update information for Anope 2.x
(cherry picked from commit 755562d147)
2014-03-19 02:27:50 +01:00
Alexander Barton
9ecd8f616f Correctly use cloaked IRC masks on "INVITE nickname"
The cloaked IRC mask of a user is his visible mask, so the daemon has
to use it for generating the "one time" entries for the invite list of
the given channel.

Without this patch, ngIRCd records the real IRC mask which will never
match while the target client is "+x", and even worse, will disclose
the real mask on "MODE #channel +I" commands :-/

Bug reported by Cahata on #ngircd, thanks!

(cherry picked from commit 20b52fe33d)
2014-03-19 02:27:16 +01:00
Alexander Barton
4525425879 configure: Only link "contrib/Debian" if it exists
This isn't the case on "VPATH builds", for example.

(cherry picked from commit 14a84dfca5)
2014-03-19 02:26:39 +01:00
Alexander Barton
4286af08ce Use $(MKDIR_P) instead of $(mkinstalldirs) in Makefile's
And test for "mkdir -p" using AC_PROG_MKDIR_P in "configure".

(cherry picked from commit 90062111f7)
2014-03-19 02:25:54 +01:00
Alexander Barton
bb3096b0d3 Fix configure script and "make check" for TCP Wrappers
Add missing #include's and static variables.

Problem spotted on OpenBSD.

(cherry picked from commit e747fe9277)

Conflicts:
	configure.ng
	src/portab/portabtest.c
2014-03-19 02:25:21 +01:00
Alexander Barton
9f090d7554 Add libwrap at the end of the configure run
If libwrap becomes added earlier, other tests may fail because of not all
external variables required by libwrap are available when linking: for
example allow_severity and deny_severity.

This patch adds generic support for the LDFLAGS_END and LIBS_END variables
(CFLAGS_END has been implemented already).

Problem spotted on OpenBSD.

(cherry picked from commit 0f85c4c6a7)

Conflicts:
	configure.ng
2014-03-19 02:21:25 +01:00
Alexander Barton
ecb55704b7 platformtest.sh: don't use "test -e", it isn't portable
(cherry picked from commit e2b85ccde3)
2014-03-19 02:14:05 +01:00
Alexander Barton
9a11ab0d1b Makefile.am: don't use "test -e", it isn't portable
(cherry picked from commit 7b358a57ac)
2014-03-19 02:10:02 +01:00
Alexander Barton
f55d03c153 Update Copyright notices for 2014
(cherry picked from commit 788da901ee)
2014-03-19 02:08:19 +01:00
Federico G. Schwindt
b86da5ed9a Fix permanent k/gline
Reported by Toni Spets (hifi - at - jnz - dot - fi).

(cherry picked from commit 9230f2fff1)
2014-03-19 02:07:36 +01:00
Alexander Barton
d009df909b WEBIRC: Don't respect hostname when DNS is disabled
When DNS lookups are disabled, don't set the hostname received by the
WEBIRC command, but use the IP address instead.

Reported by Toni Spets <toni.spets@iki.fi>, thanks!

Closes bug #167.

(cherry picked from commit 1a628fff51)
2014-03-19 02:07:05 +01:00
Alexander Barton
74db76b792 OS X has a working getaddrinfo() implementation
(cherry picked from commit bd33bd770d)
2013-12-27 22:03:37 +01:00
Alexander Barton
21ef762109 Check for working getaddrinfo() function
At least AIX 4.3.3 and 5.1 have a broken implementation of getaddrinfo()
which doesn't handle "0" as numeric service correctly. This patch adds
a configure check for this case and changes all calling functions to only
use getaddrinfo() if it "works".

See <http://www.stacken.kth.se/lists/heimdal-discuss/2004-05/msg00059.html>

(cherry picked from commit b8433e9261)

Conflicts:
	configure.ng
2013-12-27 22:02:29 +01:00
Alexander Barton
e379a0881e Only use unsetenv() when it is available
AIX 4.3 dosn't support it, for example.

(cherry picked from commit ae00c100ac)
2013-12-27 21:56:07 +01:00
Alexander Barton
54a13350b1 conf-ssl.h: make code compatible with pre-ANSI C compilers
(cherry picked from commit 61d1c864c5)
2013-12-27 21:55:50 +01:00
Alexander Barton
3b46356ce2 vsnprintf.c: make code compatible with ansi2knr tool
(cherry picked from commit 8d25044ce5)
2013-12-27 21:55:27 +01:00
Alexander Barton
ac127ff20a Remove wrong #ifdef in Option_String()
This fixes the following error when compiling without zlib support:

  irc.c: In function ‘Option_String’:
  irc.c:487: error: ‘options’ undeclared (first use in this function)

Reported by "der_baer" on #ngircd.

(cherry picked from commit 4ab688c5e8)
2013-12-27 21:52:59 +01:00
121 changed files with 2116 additions and 2147 deletions

View File

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

42
.gitignore vendored
View File

@@ -1,5 +1,4 @@
Makefile
Makefile.am
Makefile.in
aclocal.m4
ansi2knr.1
@@ -8,15 +7,12 @@ ansi2knr.h
ar-lib
autom4te.cache
build-stamp-ngircd*
build+*
compile
config.cache
config.log
config.status
configure
configure.ac
configure.lineno
cov-int
cscope.out
debian
depcomp
@@ -26,41 +22,3 @@ ngircd.dest
.deps
*.a
*.o
doc/sample-ngircd.conf
doc/src/html
man/ngircd.8
man/ngircd.conf.5
src/config.h
src/config.h.in
src/config.h.in~
src/stamp-h1
src/ngircd/check-help
src/ngircd/check-version
src/ngircd/ngircd
src/ngircd/ngircd.exe
src/portab/portabtest
src/portab/portabtest.exe
src/testsuite/*.e_
src/testsuite/channel-test
src/testsuite/connect-test
src/testsuite/invite-test
src/testsuite/join-test
src/testsuite/kick-test
src/testsuite/logs
src/testsuite/message-test
src/testsuite/misc-test
src/testsuite/mode-test
src/testsuite/ngircd-test1.log
src/testsuite/ngircd-test1.motd
src/testsuite/ngircd-test2.log
src/testsuite/ngircd-test2.motd
src/testsuite/opless-channel-test
src/testsuite/server-link-test
src/testsuite/T-ngircd1
src/testsuite/T-ngircd1.exe
src/testsuite/T-ngircd2
src/testsuite/T-ngircd2.exe
src/testsuite/tests
src/testsuite/tests-skipped.lst
src/testsuite/who-test
src/testsuite/whois-test

View File

@@ -1,14 +1,4 @@
# mailmap file for git-[short]log and git-blame
# use "git shortlog -se" to see the list of all authors.
Alexander Barton <alex@barton.de> <anonymous>
Alexander Barton <alex@barton.de> <alex@kfreebsd.barton.de>
Alexander Barton <anonymous>
Ali Shemiran <ashemira@ucsd.edu>
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>
LucentW <lucent@zebes.info> <LucentW@users.noreply.github.com>

18
AUTHORS
View File

@@ -2,18 +2,16 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
(c)2001-2014 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- AUTHORS and CONTRIBUTORS --
Note:
If you have comments, patches or something else, please feel free to post
a mail to the ngIRCd mailing list: <ngircd-ml@ngircd.barton.de> (please see
<http://ngircd.barton.de/support.php> for details) or join the ngIRCd IRC
channel: <irc://irc.barton.de/ngircd>.
Note: If you have critics, patches or something else, please feel free to
post a mail to the ngIRCd mailing list: <ngircd-ml@arthur.barton.de> (please
see <http://ngircd.barton.de/#ml> for details).
Don't mail the people listed here directly, if possible!
@@ -41,23 +39,15 @@ Eric Grunow <egrunow@ucsd.edu>
Federico G. Schwindt <fgsch@lodoss.net>
Gabor Adam Toth <tg@tgbit.net>
Goetz Hoffart <goetz@hoffart.de>
Ian Chard <ian@chard.org>
Ilja Osthoff <i.osthoff@gmx.net>
Jari Aalto <jari.aalto@cante.net>
LucentW <lucent@zebes.info>
Mantas Mikulėnas <grawity@gmail.com>
Neale Pickett <neale@woozle.org>
Peter Powell <petpow@saberuk.com>
Rolf Eike Beer <eike@sf-mail.de>
Roy Sindre Norangshol <roy.sindre@norangshol.no>
Scott Perry <scperry@ucsd.edu>
Sean Reifschneider <jafo-rpms@tummy.com>
Sebastian Köhler <sebkoehler@whoami.org.uk>
Tassilo Schweyer <dev@welterde.de>
Tom Ryder <tom@sanctum.geek.nz>
Unit 193 <unit193@ubuntu.com>
William Pitcock <nenolod@dereferenced.org>
Yecheng Fu <cofyc.jackson@gmail.com>
xor <xorboy@gmail.com>

257
ChangeLog
View File

@@ -2,206 +2,13 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
(c)2001-2014 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- ChangeLog --
ngIRCd 23 (2015-11-16)
- Explicitly cast time_t to long when printing it out: this prevents
wrong sized data types on platforms where time_t doesn't equal a
long any more, for example on OpenBSD (which would result in garbled
output on those platforms).
- contrib/Debian/changelog: Fix email address.
- Documentation: Spelling fixes; update doc/Platforms.txt.
ngIRCd 23~rc1 (2015-09-06)
- Add ".clang_complete" file, which is used by the "linter-clang" package
of the Atom editor, for example.
- Make server-to-server protocol more robust: ngIRCd now catches more
errors on the server-to-server (S2S) protocol that could crash the
daemon before. This hasn't been a real problem because the IRC S2S
protocol is "trusted" by design, but the behavior is much better now.
Thanks to wowaname on #ngircd for pointing this out!
- Make platformtest.sh, autogen.sh, and ngircd.init more portable.
- Enables "reproducible builds" for ngIRCd: Use the optional BIRTHTIME
constant while building ngIRCd, which contains a time stamp for the
"Birth Date" information, in seconds since the epoch.
See <https://wiki.debian.org/ReproducibleBuilds>.
- Update "contrib/ngircd.service" file for systemd.
- INSTALL: Add deprecation notice for "PredefChannelsOnly" variable.
- Use "NOTICE *" before registration instead of "NOTICE AUTH". "AUTH" is
a valid nickname so sending notices to it is probably not a good idea.
Use "*" as the target instead as done with numerics when the nick is not
available. This mimics the behavior in Charybdis, IRCD-Hybrid, InspIRCd
2.2, Plexus 4, etc. Closes #217.
The "NoticeAuth" configuration variable (ngircd.conf) has been renamed
to "NoticeBeforeRegistration" accordingly, but the old name is still
supported for compatibility reasons.
- Implement new channel mode "N" (regular users can't change their nick
name while on this channel). Closes #214.
- README, AUTHORS: Update mailing list and issue tracker URLs.
- Remove doc/GIT.txt (it is outdated), update doc/Contributing.txt:
ngIRCd uses GitHub, and Git itself is quite common today. So don't
include an own Git "mini HowTo" any longer.
- Specify session context for OpenSSL clients. This enables some OpenSSL
clients, including Pidgin and stunnel 5.06, to reuse a session.
Patch by Tom Ryder <tom@sanctum.geek.nz>, thanks! Closes #182.
- Keep track of who placed bans, invites, and excepts.
Idea and implementation by LucentW, Thanks! Closes #203.
- Make setgroups(3) function optional: For example, Interix is missing
this function, which prevented ngIRCd to build on this platform. When
setgroups(3) isn't available, a warning message is issued on startup.
- Implement numeric RPL_LISTSTART(321). lightIRC and other clients
expecting RPL_LISTSTART should now behave correctly.
Idea and implementation by LucentW, Thanks! Closes #207.
- Update ngircd.conf.5: "CloakUserToNick" hides user _and_ real name.
This closes #208.
- Fix case insensitive pattern matching: Up to now, only the the input
string became lowercased and was then compared to the pattern -- which
failed when the pattern itself wasn't all lowercase!
- Streamline the effect of "MorePrivacy" option: Update documentation
in ngircd.conf(5); don't hide channels for IRC Ops on LIST and don't
hide IP addresses/hostnames on WHOIS when "MorePrivacy" is in effect.
This closes #198.
- IRC operators now can kick anyone when "OperCanMode" is set.
Idea and implementation by LucentW, Thanks! Closes #202.
- Implement user mode "I": Hide channels on WHOIS: this mode prevents
ngIRCd from showing channels on WHOIS (IRC Operators can always see
the channel list).
Idea and implementation by LucentW, Thanks! Closes #197.
- INVITE command: Implement ERR_USERNOTONSERV(504) numeric and make sure
that the target user is on the same server when inviting other users
to local ("&") channels.
Idea by Cahata, thanks! Closes #183.
- INVITE command: Enforce 1 second penalty time, which prevents flooding
of the target client.
This closes #186. Reported by Cahata, thanks!
- MODE command: Always report channel creation time. Up to now when
receiving a MODE command, ngIRCd only reported the channel creation
time to clients that were members of the channel. This patch reports
the channel creation time to all clients, regardless if they are joined
to that channel or not. At least ircd-seven behaves like this.
This closes #188. Reported by Cahata, thanks!
- Update Xcode project for latest Xcode version (6.3).
ngIRCd 22.1 (2015-04-06)
- Update doc/Platforms.txt and doc/FAQ.txt.
- Fix spelling of RPL_WHOISBOT message text.
- Don't send nick name as default PART reason: No other IRC daemon seems
to do this (today?). Closes #185.
Reported by Cahata in #ngircd, thanks!
- Fix "WHO #<chan>" showing invisible users and hiding all visible, the
logic was reversed! This bug has been introduced by commit c74115f2,
"Simplify mode checking on channels and users within a channel", ngIRCd
releases 21, 21.1, and 22 are affected :-( Problem reported by Cahata
in #ngircd, Thanks!
- Fix typo in src/testsuite/README
- Auth PING: Fix our information text for manual sending of "PONG". Up to
now, ngIRCd doesn't send a valid IRC command at all, oops!
- Auth PING: Fix internal time stamp conversion and don't send a prefix in
our PING command. The prefix confuses WeeChat, at least, which doesn't
send an appropriate PONG in the case ...
Debugging and patch by "wowaname" on #ngircd, thanks!
- Fix syntax of ERR_LISTFULL_MSG(478) numeric. Pointed out by "wowaname"
in #ngircd, thanks!
- Enhance debug messages while sending CHANINFO commands.
- Reset "last try" timer when enabling a passive server. This results in
a new connection attempt as soon as possible.
- Change log message for "Can't resolve address" and for IP address
forgeries.
- doc/HowToRelease.txt: Add note about the bug tracker.
- Update "CipherList" to not enable SSLv3 by default. Idea, initial patch,
and testing by Christoph Biedl <ngircd.anoy@manchmal.in-ulm.de>.
- Change ngIRCd test suite not to use DNS lookups: Different operating
systems do behave quite differently when doing DNS lookups, for example
"127.0.0.1" sometimes resolves to "localhost" and sometimes to
"localhost.localdomain" (for example OpenBSD). And other OS resolve
"localhost" to the real host name (for example Cygwin). So not using
DNS at all makes the test site much more portable.
ngIRCd 22 (2014-10-11)
- Match all list patterns case-insensitive: this affects the invite-,
ban-, and except lists, as well as G-Lines an K-Lines.
Problem pointed out by "wowaname" on #ngircd, thanks!
ngIRCd 22~rc1 (2014-09-29)
- Sync "except lists" between servers: Up to now, ban, invite, and G-Line
lists have been synced between servers while linking -- but obviously
nobody noticed that except list have been missing ever since. Until now.
Thanks to "j4jackj", who reported this issue in #ngircd.
- Allow longer user names (up to 63 characters) for authentication.
- Correctly check that a server has a valid hostname and port, thanks to
David Binderman <dcb314@hotmail.com> who reported this bug.
- Fix the function which generates complete "IRC masks" from user input,
don't destroy the source buffer and use all provided parts (nick, user,
host name). This fixes GLINEs/KLINEs from not working in some situations.
- Increase MAX_SERVERS from 16 to 64: There are installations out there
that would like to configure more than 16 links per server, so increase
this limit. Best would be to get rid of MAX_SERVERS altogether and make
if fully dynamic, but start with this quick and dirty hack ...
- Debian: Don't adjust path names that are correct by default and correctly
set and use "docdir".
- Update config.guess and config.sub to recent versions.
- Test suite/platformtest.sh: Detect when tests have been skipped.
- doc/Bopm.txt: Update "connregex" and "kline" for current ngIRCd.
- Allow "DefaultUserModes" to set all possible modes, including modes only
settable by IRC Operators.
- Spoofed prefixes: Really kill connection on non-server links.
- Implement user mode "F": "relaxed flood protection". Clients with mode
"F" set are allowed to rapidly send data to the daemon. This mode is only
settable by IRC Operators and can cause problems in the network -- so be
careful and only set it on "trusted" clients!
User mode "F" is used by Bahamut for this purpose, for example.
- Handle "throttling" in a single function: ngIRCd implements "command
throttling" and "bps throttling" (bytes per second). The states are
detected in different functions, Conn_Handler() and Read_Request(), but
handle the actual "throttling" in a common function: this enables us to
guarantee consistent behavior and to disable throttling for special
connections in only one place
- Use server password when PAM is compiled in but disabled.
- Streamline punctuation of log messages.
- Return ISUPPORT(005) numerics on "VERSION". This is how ircd-seven,
Charybdis, Hybrid, and InspIRCd behave, for example.
- configure: Only link "contrib/Debian" if it exists, which isn't the case
on "VPATH builds", for example.
- Show the account name in WHOIS. This uses the same numeric as Charybdis
and ircu families: WHOISLOGGEDIN(330).
- Pattern matching: Remove "range matching" in our pattern matching code
using the "[...]" syntax, because [ and ] are valid characters in nick
names and one has to quote them currently using the "\" character, which
is quite unexpected for users.
- platformtest.sh: New option "-x", don't regenerate build system and
allow using separate source and build trees.
- Test suite: explicitly enable glibc memory checking.
- Make "MODE -k" handling more robust and compatible, send "fake '*' key"
in all replies.
- Update configure.ng: ngIRCd requires GNU autoconf 2.61 for generating its
build system, so update the build system accordingly and implement all
changes that autoupdate(1) suggests: Update AC_PREREQ and AC_INIT, use
AC_LINK_IFELSE, AC_RUN_IFELSE, and AC_COMPILE_IFELSE, and remove
AC_TYPE_SIGNAL (we don't use RETSIGTYPE).
- portabtest: Actually test the functions snprintf(), strlcpy(), strlcat(),
and vsnprintf() for correctness, not only existence (which was quite
useless, because if they weren't available, the program could not have
been linked at all ...).
- Implement new configuration option "Network": it is used to set the
(completely optional) "network name", to which this instance of the
daemon belongs. When set, this name is used in the ISUPPORT(005) numeric
which is sent to all clients connecting to the server after logging in.
- Update doc/Platforms.txt.
- Various code cleanups, remove unused code, streamline error handling.
Remove all imp.h and exp.h header files, support non-standard vsnprintf()
return codes, and fix some K&R C portability issues. Streamline
DEBUG_ARRAY, DEBUG_BUFFER, DEBUG_IO, DEBUG_ZIP definitions.
- Increase penalty time to 10 seconds when handling OPER commands with an
invalid password.
ngIRCd 21.1 (2014-03-25)
- Don't ignore but use the server password when PAM is compiled in but
@@ -613,7 +420,7 @@ ngIRCd 20 (2012-12-17)
the hash function. When "CloakHostSalt" is not set (the default), a
random salt will be generated after each server restart. (Closes #133)
ngIRCd 19.2 (2012-06-19)
ngIRCd Release 19.2 (2012-06-19)
- doc/Capabilities.txt: document "multi-prefix" capability
@@ -637,13 +444,13 @@ ngIRCd 19.2 (2012-06-19)
"CC=xxx MAKE=yyy ./platformtest.sh" calling convention.
- Add instructions for setting up Atheme IRC services.
- Implement support for IRC capability handling, the new "CAP" command,
and capability "multi-prefix" which allows both the NAME and WHO command
and capablity "multi-prefix" which allows both the NAME and WHO command
handlers to return more than one "class prefix" to the client.
- Update Xcode project files: reference missing documentation files.
- Fix: Don't ignore "permission denied" errors when enabling chroot.
- FAQ: enhance description of chroot setup.
ngIRCd 19.1 (2012-03-19)
ngIRCd Release 19.1 (2012-03-19)
- Fix gcc warning (v4.6.3), initialize "list" variable to NULL.
- Fix typos: "recieved" -> "received", "Please not" -> "Please note",
@@ -653,7 +460,7 @@ ngIRCd 19.1 (2012-03-19)
- getpid.sh: Fix test case error for Debian using sbuild(1).
- Don't log "ngIRCd hello message" two times when starting up.
ngIRCd 19 (2012-02-29)
ngIRCd Release 19 (2012-02-29)
- Update build system: bump config.guess and config.sub files used by
GNU autoconf/automake to recent versions.
@@ -803,7 +610,7 @@ ngIRCd 19 (2012-02-29)
asynchronous nature of the IRC protocol. So don't break server-
links, only log a message and ignore the command. (Closes #113)
ngIRCd 18 (2011-07-10)
ngIRCd Release 18 (2011-07-10)
- Update timestamp of ngircd(8) manual page.
- Add preliminary ngIRCd protocol module for Anope 1.9 to contrib/Anope/.
@@ -913,7 +720,7 @@ ngIRCd 18 (2011-07-10)
only relevant when a trusted server on a server-server link sends invalid
commands).
ngIRCd 17.1 (2010-12-19)
ngIRCd Release 17.1 (2010-12-19)
- --configtest: remember if MOTD is configured by file or phrase
- Enhance log messages when establishing server links a little bit
@@ -929,7 +736,7 @@ ngIRCd 17.1 (2010-12-19)
- New numeric 329: get channel creation time on "MODE #chan" commands
- Save channel creation time; new function Channel_CreationTime()
ngIRCd 17 (2010-11-07)
ngIRCd Release 17 (2010-11-07)
- doc: change path names in sample-ngircd.conf depending on sysconfdir
- Fix up generation and distribution of sample-ngircd.conf
@@ -937,7 +744,7 @@ ngIRCd 17 (2010-11-07)
- contrib/platformtest.sh: make command name quoting consistent
ngIRCd 17~rc3 (2010-10-27)
- Xcode builds: detect version number correctly, updated project file
- Xcode builds: detect version number correctly, updateed project file
to use the Mac OS X 10.5.x SDK, disable pam_fail_delay() because it
is only available starting with Mac OS X 10.6, and generate a default
PAM configuration for the Mac OS X Installer.app package of ngIRCd.
@@ -949,7 +756,7 @@ ngIRCd 17 (2010-11-07)
ngIRCd 17~rc2 (2010-10-25)
- ZeroConf: include header files missing since commit a988bbc86a.
- Generate ngIRCd version number from GIT tag.
- Make source code compatible with ansi2knr again. This allows to compile
- Make sourcecode compatible with ansi2knr again. This allows to compile
ngIRCd using a pre-ANSI K&R C compiler again.
- ./configure: check if C compiler can compile ISO Standard C.
- ./configure: check support for C prototypes again.
@@ -965,7 +772,7 @@ ngIRCd 17 (2010-11-07)
Howl, Avahi or on Mac OS X).
- New configuration option "SyslogFacility" to define the syslog "facility"
(the "target"), to which ngIRCd should send its log messages.
Possible values are system dependent, but most probably "auth", "daemon",
Possible values are system dependant, but most probably "auth", "daemon",
"user" and "local1" through "local7" are possible values; see syslog(3).
Default is "local5" for historical reasons.
- Dump the "internal server state" (configured servers, established
@@ -986,7 +793,7 @@ ngIRCd 17 (2010-11-07)
- Make configure switch "--docdir" work (closes: #108).
- Reformat and update FAQ.txt a little bit.
- INSTALL: mention SSL, IPv6, and changed handling of MotdFile.
- Change MOTD file handling: ngIRCd now caches the contents of the MOTD
- Change MOTD file handling: ngIRCd now caches the contens of the MOTD
file, so the daemon now requires a HUP signal or REHASH command to
re-read the MOTD file when its content changed.
- Startup: open /dev/null before chroot'ing the daemon.
@@ -1010,7 +817,7 @@ ngIRCd 17 (2010-11-07)
- Fix "beeing" typo ...
- SSL/TLS: fix bogus "socket closed" error message.
ngIRCd 16 (2010-05-02)
ngIRCd Release 16 (2010-05-02)
- doc/SSL: remove line continuation marker
@@ -1022,14 +829,14 @@ ngIRCd 16 (2010-05-02)
- Include netinet/{in.h, in_systm.h} when checking for netinet/ip.h
- Only include <netinet/in_systm.h> if it exists
- Updated doc/Platforms.txt
- Enhance connection statistics counters: display total number of served
- Enhace connection statistics counters: display total number of served
connections on daemon shutdown and when a new client connects using
the new numeric RPL_STATSCONN (250).
ngIRCd 16~rc1 (2010-03-25)
- Various fixes to the build system and code cleanups.
- contrib/platformtest.sh: Only show latest commit.
- Updated doc/Platforms.txt, added new README-Interix.txt documenting
- Updatet doc/Platforms.txt, added new README-Interix.txt documenting
how to tun ngIRCd on Microsoft Services for UNIX (MS SFU, MS SUA).
- Updated links to the ngIRCd homepage (bug tracker, mailing list).
- Added missing modes to USERMODES #define
@@ -1050,14 +857,14 @@ ngIRCd 16 (2010-05-02)
every channel, and c) remote clients using a server not supporting this
mode are not checked either and therefore always allowed to join.
ngIRCd 15 (2009-11-07)
ngIRCd Release 15 (2009-11-07)
- "ngircd --configtest": print SSL configuration options even when unset.
ngIRCd 15~rc1 (2009-10-15)
- Do not add default listening port (6667) if SSL ports were specified, so
ngIRCd can be configured to only accept SSL-encrypted connections now.
- Enable IRC operators to use the IRC command SQUIT (instead of the already
- Enable IRC operators to use the IRC command SQUIT (insted of the already
implemented but non-standard DISCONNECT command).
- New configuration option "AllowRemoteOper" (disabled by default) that
enables remote IRC operators to use the IRC commands SQUIT and CONNECT
@@ -1076,7 +883,7 @@ ngIRCd 15 (2009-11-07)
- Fix a few error handling glitches for SSL/TLS connections.
- Minor fixes to manual pages and documentation.
ngIRCd 14.1 (2009-05-05)
ngIRCd Release 14.1 (2009-05-05)
- Security: fix remotely triggerable crash in SSL/TLS code.
- BSD start script contrib/ngircd.sh has been renamed to ngircd-bsd.sh.
@@ -1089,7 +896,7 @@ ngIRCd 14.1 (2009-05-05)
- Fix server list announcement.
- Do not remove host names from info text.
ngIRCd 14 (2009-04-20)
ngIRCd Release 14 (2009-04-20)
- Display IPv6 addresses as "[<addr>]" when accepting connections.
@@ -1111,9 +918,9 @@ ngIRCd 14 (2009-04-20)
- Fix memory leak when a encrypted and compressed server link goes down.
(closes bug #95, reported by Christoph, fiesh@fiesh.homeip.net)
- Fix handling of channels containing dots.
(closes bug #93, reported by Gonosz Csiga)
(closes ug #93, reported by Gonosz Csiga)
ngIRCd 13 (2008-12-25)
ngIRCd Release 13 (2008-12-25)
- Updated documentation, especially doc/Services.txt and doc/SSL.txt.
- Make the test suite work on OpenSolaris.
@@ -1204,7 +1011,7 @@ ngIRCd 0.11.0 (2008-01-15)
ngIRCd 0.11.0-pre2 (2008-01-07)
- SECURITY: IRC_PART could reference invalid memory, causing
ngircd to crash [from HEAD]. (CVE-2008-0285)
ngIRCd 0.11.0-pre1 (2008-01-02)
- Use dotted-decimal IP address if host name is >= 64.
- Add support for /STAT u (server uptime) command.
@@ -1238,7 +1045,7 @@ ngIRCd 0.10.4 (2008-01-07)
- SECURITY: IRC_PART could reference invalid memory, causing
ngircd to crash [from HEAD]. (CVE-2008-0285)
ngIRCd 0.10.3 (2007-08-01)
- SECURITY: Fixed a severe bug in handling JOIN commands, which could
@@ -1341,7 +1148,7 @@ ngIRCd 0.9.0 (2005-07-24)
- Fixed ./configure test for TCP Wrappers: now it runs on Mac OS X as well.
- Enhanced configure script: now you can pass an (optional) search path
to all --with-XXX parameters, e. g. "--with-ident=/opt/ident".
- Removed typedefs for the native C data types.
- Removed typedefs for the native C datatypes.
Use stdbool.h / inttypes.h if available.
- New configuration option "OperServerMode" to enable a workaround needed
when running an network with ircd2 servers and "OperCanUseMode" enabled
@@ -1522,7 +1329,7 @@ ngIRCd 0.7.0 (2003-05-01)
to add a new server (ngIRCd tries to connect new servers only once!).
- Added DISCONNECT command ("DISCONNECT <name>") to disable servers.
- Restructured the documentation: Now the main language is English. The
German documentation has been removed (until there is a maintainer).
german documentation has been removed (until there is a maintainer).
- Enhanced killing of users caused by a nickname collision.
- Better error detection for status code ("numerics") forwarding.
- Moved tool functions to own library: "libngtool".
@@ -1544,7 +1351,7 @@ ngIRCd 0.7.0 (2003-05-01)
- Documentation is now installed in $(datadir)/doc/ngircd.
- Enhanced handling of NJOIN in case of nick collisions.
ngIRCd 0.6.1 (2003-01-21)
ngIRCd 0.6.1, 2003-01-21
- Fixed KILL: you can't crash the server by killing yourself any more,
ngIRCd no longer sends a QUIT to other servers after the KILL, and you
@@ -1563,17 +1370,17 @@ ngIRCd 0.6.1 (2003-01-21)
member when changing his channel user modes which could crash ngIRCd.
Older changes (sorry, only available in German language):
Older changes (sorry, only available in german language):
ngIRCd 0.6.0, 24.12.2002
ngIRCd 0.6.0, 2002-12-24
ngIRCd 0.6.0-pre2, 23.12.2002
ngIRCd 0.6.0-pre2, 2002-12-23
- neuer Numeric 005 ("Features") beim Connect.
- LUSERS erweitert: nun wird die maximale Anzahl der lokalen und globalen
Clients, die dem Server bzw. im Netzwerk seit dem letzten (Re-)Start
dem Server gleichzeitig bekannt waren, angezeigt.
ngIRCd 0.6.0-pre1, 18.12.2002
ngIRCd 0.6.0-pre1, 2002-12-18
- beim Schliessen einer Verbindung zeigt der Server nun vor dem ERROR
noch eine Statistik ueber die empfangene und gesendete Datenmenge an.
- der Server wartet bei einer eingehenden Verbindung nun laenger auf den
@@ -1624,7 +1431,7 @@ ngIRCd 0.6.0, 24.12.2002
ngIRCd 0.5.4, 24.11.2002
- Fehler-Handling von connect() gefixed: der Server kann sich nun auch
- Fehler-Handling von connect() gefixed: der Server kann sich nun auch
unter A/UX wieder zu anderen verbinden.
- in den Konfigurationsvariablen ServerUID und ServerGID kann nun nicht
nur die numerische ID, sondern auch der Name des Users bzw. der Gruppe
@@ -1736,7 +1543,7 @@ ngIRCd 0.5.0, 20.09.2002
- ADMIN-Befehl implementiert. Die Daten hierzu werden in der Konfig-Datei
im [Global]-Abschnitt mit den Variablen "AdminInfo1", "AdminInfo2" und
"AdminEMail" konfiguriert.
ngIRCd 0.4.3, 11.06.2002
- Bei PRIVMSG und NOTICE hat der ngIRCd nicht ueberpruft, ob das Ziel

45
INSTALL
View File

@@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
(c)2001-2014 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
@@ -12,34 +12,17 @@
I. Upgrade Information
~~~~~~~~~~~~~~~~~~~~~~
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.
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
@@ -48,7 +31,7 @@ Differences to version 19.x
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
Differences to version 17
- Support for ZeroConf/Bonjour/Rendezvous service registration has been
removed. The configuration option "NoZeroconf" is no longer available.
@@ -85,7 +68,7 @@ Differences to version 17.x
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
Differences to version 16
- Changes to the "MotdFile" specified in ngircd.conf now require a ngircd
configuration reload to take effect (HUP signal, REHASH command).
@@ -162,7 +145,7 @@ 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:
* RedHat / Fedora based distributions:
yum install \
autoconf automake expect gcc glibc-devel gnutls-devel \
@@ -186,8 +169,8 @@ This step is therefore only interesting for developers.
autogen.sh produces the Makefile.in's, which are necessary for the configure
script itself, and some more files for make. To run autogen.sh you'll need
GNU autoconf and GNU automake: at least autoconf 2.61 and automake 1.10 are
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
requird, newer is better. But don't use automake 1.12 or newer for creating
distribution archives: it will work but lack "de-ANSI-fucation" support in the
generated Makefile's! Stick with automake 1.11.x for this purpose ...
So automake 1.11.x and autoconf 2.67+ is recommended.
@@ -243,7 +226,7 @@ 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):
* Syslog Logging (autodetected by default):
--with-syslog[=<path>] / --without-syslog
Enable (disable) support for logging to "syslog", which should be
@@ -254,13 +237,13 @@ standard locations.
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
--with-kqueue[=<path>] / --without-kqueue
ngIRCd can use different IO "backends": the "old school" select() and poll()
API which should be supported by most UNIX-like operating systems, or the
@@ -278,7 +261,7 @@ standard locations.
required for this option.
* TCP-Wrappers:
--with-tcp-wrappers[=<path>]
--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}".
@@ -335,7 +318,7 @@ IRC operators of this server are defined in [Operator] blocks, remote
servers are configured in [Server] sections, and [Channel] blocks are
used to configure pre-defined ("persistent") IRC channels.
The meaning of the variables in the configuration file is explained in the
The meaning of the variables in the configuration file is explained in the
"doc/sample-ngircd.conf", which is used as sample configuration file in
/usr/local/etc after running "make install" (if you don't already have one)
and in the ngircd.conf(5) manual page.

View File

@@ -1,6 +1,6 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -13,7 +13,7 @@ AUTOMAKE_OPTIONS = gnu
SUBDIRS = doc src man contrib
EXTRA_DIST = autogen.sh configure.ng .clang_complete .mailmap
EXTRA_DIST = autogen.sh configure.ng .mailmap
clean-local: osxpkg-clean
rm -f build-stamp*

149
NEWS
View File

@@ -2,120 +2,13 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
(c)2001-2014 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- NEWS --
ngIRCd 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
@@ -315,7 +208,7 @@ ngIRCd 20 (2012-12-17)
the hash function. When "CloakHostSalt" is not set (the default), a
random salt will be generated after each server restart.
ngIRCd 19.2 (2012-06-19)
ngIRCd Release 19.2 (2012-06-19)
ngIRCd 19.2~rc1 (2012-06-13)
- New configuration option "CloakHostModeX" to configure the hostname
@@ -324,15 +217,15 @@ ngIRCd 19.2 (2012-06-19)
which still is the default when "CloakHostModeX" isn't set.
- Add instructions for setting up Atheme IRC services.
- Implement support for IRC capability handling, the new "CAP" command,
and capability "multi-prefix" which allows both the NAME and WHO command
and capablity "multi-prefix" which allows both the NAME and WHO command
handlers to return more than one "class prefix" to the client.
ngIRCd 19.1 (2012-03-19)
ngIRCd Release 19.1 (2012-03-19)
- Really include _all_ patches to build the Anope module into the
distribution archive ... ooops!
ngIRCd 19 (2012-02-29)
ngIRCd Release 19 (2012-02-29)
ngIRCd 19~rc1 (2012-02-12)
- Update preliminary ngIRCd protocol module for Anope 1.9.6, which now
@@ -400,7 +293,7 @@ ngIRCd 19 (2012-02-29)
argument. Like unknown user and channel modes, these modes are saved
and forwarded to other servers, but ignored otherwise.
ngIRCd 18 (2011-07-10)
ngIRCd Release 18 (2011-07-10)
- Add preliminary ngIRCd protocol module for Anope 1.9 to contrib/Anope/.
@@ -475,19 +368,19 @@ ngIRCd 18 (2011-07-10)
vice-versa). The defaults are adjusted accordingly and the old variables
in [Global] are still accepted, so there is no functional change.
ngIRCd 17.1 (2010-12-19)
ngIRCd Release 17.1 (2010-12-19)
- Don't log critical (or worse) messages to stderr
- Remove "error file" when compiled with debug code enabled
- New numeric 329: get channel creation time on "MODE #chan" commands
ngIRCd 17 (2010-11-07)
ngIRCd Release 17 (2010-11-07)
- doc: change path names in sample-ngircd.conf depending on sysconfdir
ngIRCd 17~rc2 (2010-10-25)
- Generate ngIRCd version number from GIT tag.
- Make source code compatible with ansi2knr again. This allows to compile
- Make sourcecode compatible with ansi2knr again. This allows to compile
ngIRCd using a pre-ANSI K&R C compiler again.
ngIRCd 17~rc1 (2010-10-11)
@@ -496,7 +389,7 @@ ngIRCd 17 (2010-11-07)
Howl, Avahi or on Mac OS X).
- New configuration option "SyslogFacility" to define the syslog "facility"
(the "target"), to which ngIRCd should send its log messages.
Possible values are system dependent, but most probably "auth", "daemon",
Possible values are system dependant, but most probably "auth", "daemon",
"user" and "local1" through "local7" are possible values; see syslog(3).
Default is "local5" for historical reasons.
- Dump the "internal server state" (configured servers, established
@@ -506,7 +399,7 @@ ngIRCd 17 (2010-11-07)
signal SIGUSR1, when debug code is compiled in, not only on startup
using the command line parameters.
- Implement user mode "x": host name cloaking (closes: #102).
- Change MOTD file handling: ngIRCd now caches the contents of the MOTD
- Change MOTD file handling: ngIRCd now caches the contens of the MOTD
file, so the daemon now requires a HUP signal or REHASH command to
re-read the MOTD file when its content changed.
- Allow IRC ops to change channel modes even without OperServerMode set.
@@ -519,10 +412,10 @@ ngIRCd 17 (2010-11-07)
this new mode requires the user to be an IRC operator.
- Show SSL status in WHOIS output, numeric 275.
ngIRCd 16 (2010-05-02)
ngIRCd Release 16 (2010-05-02)
ngIRCd 16~rc2 (2010-04-25)
- Enhance connection statistics counters: display total number of served
- Enhace connection statistics counters: display total number of served
connections on daemon shutdown and when a new client connects using
the new numeric RPL_STATSCONN (250).
@@ -539,12 +432,12 @@ ngIRCd 16 (2010-05-02)
every channel, and c) remote clients using a server not supporting this
mode are not checked either and therefore always allowed to join.
ngIRCd 15 (2009-11-07)
ngIRCd Release 15 (2009-11-07)
ngIRCd 15~rc1 (2009-10-15)
- Do not add default listening port (6667) if SSL ports were specified, so
ngIRCd can be configured to only accept SSL-encrypted connections now.
- Enable IRC operators to use the IRC command SQUIT (instead of the already
- Enable IRC operators to use the IRC command SQUIT (insted of the already
implemented but non-standard DISCONNECT command).
- New configuration option "AllowRemoteOper" (disabled by default) that
enables remote IRC operators to use the IRC commands SQUIT and CONNECT
@@ -553,13 +446,13 @@ ngIRCd 15 (2009-11-07)
a throttling scheme: an IRC client can send up to 3 commands or 256 bytes
per second before a one second pause is enforced.
ngIRCd 14.1 (2009-05-05)
ngIRCd Release 14.1 (2009-05-05)
- Security: fix remotely triggerable crash in SSL/TLS code.
- Debian: build ngircd-full-dbg package.
- Allow ping timeout quit messages to show the timeout value.
ngIRCd 14 (2009-04-20)
ngIRCd Release 14 (2009-04-20)
ngIRCd 14~rc1 (2009-03-29)
- Allow creation of persistent modeless channels.
@@ -570,7 +463,7 @@ ngIRCd 14 (2009-04-20)
individual channel keys for different users.
- Remove limit on maximum number of predefined channels in ngircd.conf.
ngIRCd 13 (2008-12-25)
ngIRCd Release 13 (2008-12-25)
ngIRCd 13~rc1 (2008-11-21):
- New version number scheme :-)
@@ -702,7 +595,7 @@ ngIRCd 0.7.5 (2003-07-11)
(DoS), the default is 5 connections per client IP.
- Added new configuration variable "Listen" to bind all listening
sockets of the server to a single IP address.
ngIRCd 0.7.1 (2003-07-18)
- Added support for GNU/Hurd.
@@ -727,9 +620,9 @@ ngIRCd 0.7.0 (2003-05-01)
- Documentation is now installed in $(datadir)/doc/ngircd.
Older news (sorry, only available in German language):
Older news (sorry, only available in german language):
ngIRCd 0.6.0, 24.12.2002
ngIRCd 0.6.0, 2002-12-24
- beim Schliessen einer Verbindung zeigt der Server nun vor dem ERROR
noch eine Statistik ueber die empfangene und gesendete Datenmenge an.

16
README
View File

@@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
(c)2001-2014 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
@@ -28,7 +28,7 @@ Please see the INSTALL document for installation and upgrade information!
II. Status
~~~~~~~~~~~
It is not the goal of ngIRCd to implement all the nasty behaviors of the
It is not the goal of ngIRCd to implement all the nasty behaviours of the
original ircd, but to implement most of the useful commands and semantics
specified by the RFCs.
@@ -74,7 +74,7 @@ releases there.
If you are interested in the latest development versions (which are not
always stable), then please read the section about "GIT" on the homepage and
the file "doc/GIT.txt" which describes the use of GIT, the version control
system used by ngIRCd (homepage: <http://git-scm.com/>).
system used by ngIRCd (homepage: http://git-scm.com/).
VI. Bugs
@@ -83,11 +83,11 @@ VI. Bugs
If you find bugs in the ngIRCd (which might be there :-), please report
them at the following URL:
<https://github.com/ngircd/ngircd/issues>
<http://ngircd.barton.de/bugtracker.php>
There you can read about known bugs and limitations, too.
If you have comments, patches or something else, please feel free to post
a mail to the ngIRCd mailing list: <ngircd-ml@ngircd.barton.de> (please see
<http://ngircd.barton.de/support.php> for details) or join the ngIRCd IRC
channel: <irc://irc.barton.de/ngircd>.
If you have critics, patches or something else, please feel free to post a
mail to the ngIRCd mailing list: <ngircd-ml@arthur.barton.de> (please see
<http://ngircd.barton.de/support.php#ml> for details) or join the ngIRCd
IRC channel: <irc://irc.barton.de/ngircd>.

View File

@@ -109,8 +109,8 @@ Notfound()
Run()
{
[ "$VERBOSE" = "1" ] && echo " - running \"$*\" ..."
"$@"
[ "$VERBOSE" = "1" ] && echo " - running \"$@\" ..."
$@
}
# Reset locale settings to suppress warning messages of Perl
@@ -157,7 +157,7 @@ AUTOMAKE_VERSION=`echo $AUTOMAKE | cut -d'-' -f2-`
&& export AUTOMAKE_VERSION || unset AUTOMAKE_VERSION
[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE_VERSION=$AUTOMAKE_VERSION"
[ $# -gt 0 ] && CONFIGURE_ARGS=" $*" || CONFIGURE_ARGS=""
[ $# -gt 0 ] && CONFIGURE_ARGS=" $@" || CONFIGURE_ARGS=""
[ -z "$GO" -a -n "$CONFIGURE_ARGS" ] && GO=1
# Verify that all tools have been found

331
config.guess vendored
View File

@@ -1,12 +1,14 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright 1992-2014 Free Software Foundation, Inc.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012 Free Software Foundation, Inc.
timestamp='2014-03-23'
timestamp='2012-08-14'
# This file 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 3 of the License, or
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -20,17 +22,19 @@ timestamp='2014-03-23'
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
# the same distribution terms that you use for the rest of that program.
# Originally written by Per Bothner. Please send patches (context
# diff format) to <config-patches@gnu.org> and include a ChangeLog
# entry.
#
# Originally written by Per Bothner.
# This script attempts to guess a canonical system name similar to
# config.sub. If it succeeds, it prints the system name on stdout, and
# exits with 0. Otherwise, it exits with 1.
#
# You can get the latest version of this script from:
# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
#
# Please send patches with a ChangeLog entry to config-patches@gnu.org.
me=`echo "$0" | sed -e 's,.*/,,'`
@@ -50,7 +54,9 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright 1992-2014 Free Software Foundation, Inc.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -132,27 +138,6 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
case "${UNAME_SYSTEM}" in
Linux|GNU|GNU/*)
# If the system lacks a compiler, then just pick glibc.
# We could probably try harder.
LIBC=gnu
eval $set_cc_for_build
cat <<-EOF > $dummy.c
#include <features.h>
#if defined(__UCLIBC__)
LIBC=uclibc
#elif defined(__dietlibc__)
LIBC=dietlibc
#else
LIBC=gnu
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
;;
esac
# Note: order is significant - the case branches are not exclusive.
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
@@ -321,7 +306,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit ;;
arm*:riscos:*:*|arm*:RISCOS:*:*)
arm:riscos:*:*|arm:RISCOS:*:*)
echo arm-unknown-riscos
exit ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
@@ -826,7 +811,7 @@ EOF
*:MINGW*:*)
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
*:MSYS*:*)
i*:MSYS*:*)
echo ${UNAME_MACHINE}-pc-msys
exit ;;
i*:windows32*:*)
@@ -874,21 +859,21 @@ EOF
exit ;;
*:GNU:*:*)
# the GNU system
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
exit ;;
i*86:Minix:*:*)
echo ${UNAME_MACHINE}-pc-minix
exit ;;
aarch64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
alpha:Linux:*:*)
case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -901,54 +886,59 @@ EOF
EV68*) UNAME_MACHINE=alphaev68 ;;
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
exit ;;
arc:Linux:*:* | arceb:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
exit ;;
arm*:Linux:*:*)
eval $set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
echo ${UNAME_MACHINE}-unknown-linux-gnueabi
else
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
fi
fi
exit ;;
avr32*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
cris:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
echo ${UNAME_MACHINE}-axis-linux-gnu
exit ;;
crisv32:Linux:*:*)
echo ${UNAME_MACHINE}-axis-linux-${LIBC}
echo ${UNAME_MACHINE}-axis-linux-gnu
exit ;;
frv:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
hexagon:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
i*86:Linux:*:*)
echo ${UNAME_MACHINE}-pc-linux-${LIBC}
LIBC=gnu
eval $set_cc_for_build
sed 's/^ //' << EOF >$dummy.c
#ifdef __dietlibc__
LIBC=dietlibc
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
exit ;;
ia64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
m32r*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
m68*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
mips:Linux:*:* | mips64:Linux:*:*)
eval $set_cc_for_build
@@ -967,63 +957,54 @@ EOF
#endif
EOF
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
;;
openrisc*:Linux:*:*)
echo or1k-unknown-linux-${LIBC}
exit ;;
or32:Linux:*:* | or1k*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
or32:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
padre:Linux:*:*)
echo sparc-unknown-linux-${LIBC}
echo sparc-unknown-linux-gnu
exit ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
echo hppa64-unknown-linux-${LIBC}
echo hppa64-unknown-linux-gnu
exit ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
*) echo hppa-unknown-linux-${LIBC} ;;
PA7*) echo hppa1.1-unknown-linux-gnu ;;
PA8*) echo hppa2.0-unknown-linux-gnu ;;
*) echo hppa-unknown-linux-gnu ;;
esac
exit ;;
ppc64:Linux:*:*)
echo powerpc64-unknown-linux-${LIBC}
echo powerpc64-unknown-linux-gnu
exit ;;
ppc:Linux:*:*)
echo powerpc-unknown-linux-${LIBC}
exit ;;
ppc64le:Linux:*:*)
echo powerpc64le-unknown-linux-${LIBC}
exit ;;
ppcle:Linux:*:*)
echo powerpcle-unknown-linux-${LIBC}
echo powerpc-unknown-linux-gnu
exit ;;
s390:Linux:*:* | s390x:Linux:*:*)
echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
echo ${UNAME_MACHINE}-ibm-linux
exit ;;
sh64*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
tile*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
vax:Linux:*:*)
echo ${UNAME_MACHINE}-dec-linux-${LIBC}
echo ${UNAME_MACHINE}-dec-linux-gnu
exit ;;
x86_64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
xtensa*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1256,31 +1237,19 @@ EOF
exit ;;
*:Darwin:*:*)
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
eval $set_cc_for_build
if test "$UNAME_PROCESSOR" = unknown ; then
UNAME_PROCESSOR=powerpc
fi
if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
case $UNAME_PROCESSOR in
i386) UNAME_PROCESSOR=x86_64 ;;
powerpc) UNAME_PROCESSOR=powerpc64 ;;
esac
fi
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
# Avoid executing cc on OS X 10.9, as it ships with a stub
# that puts up a graphical alert prompting to install
# developer tools. Any system running Mac OS X 10.7 or
# later (Darwin 11 and later) is required to have a 64-bit
# processor. This is not true of the ARM version of Darwin
# that Apple uses in portable devices.
UNAME_PROCESSOR=x86_64
fi
case $UNAME_PROCESSOR in
i386)
eval $set_cc_for_build
if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
UNAME_PROCESSOR="x86_64"
fi
fi ;;
unknown) UNAME_PROCESSOR=powerpc ;;
esac
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
exit ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
@@ -1371,6 +1340,154 @@ EOF
exit ;;
esac
eval $set_cc_for_build
cat >$dummy.c <<EOF
#ifdef _SEQUENT_
# include <sys/types.h>
# include <sys/utsname.h>
#endif
main ()
{
#if defined (sony)
#if defined (MIPSEB)
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
I don't know.... */
printf ("mips-sony-bsd\n"); exit (0);
#else
#include <sys/param.h>
printf ("m68k-sony-newsos%s\n",
#ifdef NEWSOS4
"4"
#else
""
#endif
); exit (0);
#endif
#endif
#if defined (__arm) && defined (__acorn) && defined (__unix)
printf ("arm-acorn-riscix\n"); exit (0);
#endif
#if defined (hp300) && !defined (hpux)
printf ("m68k-hp-bsd\n"); exit (0);
#endif
#if defined (NeXT)
#if !defined (__ARCHITECTURE__)
#define __ARCHITECTURE__ "m68k"
#endif
int version;
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
if (version < 4)
printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
else
printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
exit (0);
#endif
#if defined (MULTIMAX) || defined (n16)
#if defined (UMAXV)
printf ("ns32k-encore-sysv\n"); exit (0);
#else
#if defined (CMU)
printf ("ns32k-encore-mach\n"); exit (0);
#else
printf ("ns32k-encore-bsd\n"); exit (0);
#endif
#endif
#endif
#if defined (__386BSD__)
printf ("i386-pc-bsd\n"); exit (0);
#endif
#if defined (sequent)
#if defined (i386)
printf ("i386-sequent-dynix\n"); exit (0);
#endif
#if defined (ns32000)
printf ("ns32k-sequent-dynix\n"); exit (0);
#endif
#endif
#if defined (_SEQUENT_)
struct utsname un;
uname(&un);
if (strncmp(un.version, "V2", 2) == 0) {
printf ("i386-sequent-ptx2\n"); exit (0);
}
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
printf ("i386-sequent-ptx1\n"); exit (0);
}
printf ("i386-sequent-ptx\n"); exit (0);
#endif
#if defined (vax)
# if !defined (ultrix)
# include <sys/param.h>
# if defined (BSD)
# if BSD == 43
printf ("vax-dec-bsd4.3\n"); exit (0);
# else
# if BSD == 199006
printf ("vax-dec-bsd4.3reno\n"); exit (0);
# else
printf ("vax-dec-bsd\n"); exit (0);
# endif
# endif
# else
printf ("vax-dec-bsd\n"); exit (0);
# endif
# else
printf ("vax-dec-ultrix\n"); exit (0);
# endif
#endif
#if defined (alliant) && defined (i860)
printf ("i860-alliant-bsd\n"); exit (0);
#endif
exit (1);
}
EOF
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
{ echo "$SYSTEM_NAME"; exit; }
# Apollos put the system type in the environment.
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
# Convex versions that predate uname can use getsysinfo(1)
if [ -x /usr/convex/getsysinfo ]
then
case `getsysinfo -f cpu_type` in
c1*)
echo c1-convex-bsd
exit ;;
c2*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
exit ;;
c34*)
echo c34-convex-bsd
exit ;;
c38*)
echo c38-convex-bsd
exit ;;
c4*)
echo c4-convex-bsd
exit ;;
esac
fi
cat >&2 <<EOF
$0: unable to guess system type

94
config.sub vendored
View File

@@ -1,18 +1,24 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright 1992-2014 Free Software Foundation, Inc.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012 Free Software Foundation, Inc.
timestamp='2014-05-01'
timestamp='2012-08-18'
# This file 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 3 of the License, or
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
#
# This file 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 program 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.
# This program 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 <http://www.gnu.org/licenses/>.
@@ -20,12 +26,11 @@ timestamp='2014-05-01'
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that
# program. This Exception is an additional permission under section 7
# of the GNU General Public License, version 3 ("GPLv3").
# the same distribution terms that you use for the rest of that program.
# Please send patches with a ChangeLog entry to config-patches@gnu.org.
# Please send patches to <config-patches@gnu.org>. Submit a context
# diff and a properly formatted GNU ChangeLog entry.
#
# Configuration subroutine to validate and canonicalize a configuration type.
# Supply the specified configuration type as an argument.
@@ -68,7 +73,9 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
Copyright 1992-2014 Free Software Foundation, Inc.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -149,7 +156,7 @@ case $os in
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-apple | -axis | -knuth | -cray | -microblaze*)
-apple | -axis | -knuth | -cray | -microblaze)
os=
basic_machine=$1
;;
@@ -252,12 +259,10 @@ case $basic_machine in
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
| am33_2.0 \
| arc | arceb \
| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
| avr | avr32 \
| be32 | be64 \
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
| be32 | be64 \
| bfin \
| c4x | c8051 | clipper \
| c4x | clipper \
| d10v | d30v | dlx | dsp16xx \
| epiphany \
| fido | fr30 | frv \
@@ -265,11 +270,10 @@ case $basic_machine in
| hexagon \
| i370 | i860 | i960 | ia64 \
| ip2k | iq2000 \
| k1om \
| le32 | le64 \
| lm32 \
| m32c | m32r | m32rle | m68000 | m68k | m88k \
| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
| maxq | mb | microblaze | mcore | mep | metag \
| mips | mipsbe | mipseb | mipsel | mipsle \
| mips16 \
| mips64 | mips64el \
@@ -283,22 +287,20 @@ case $basic_machine in
| mips64vr5900 | mips64vr5900el \
| mipsisa32 | mipsisa32el \
| mipsisa32r2 | mipsisa32r2el \
| mipsisa32r6 | mipsisa32r6el \
| mipsisa64 | mipsisa64el \
| mipsisa64r2 | mipsisa64r2el \
| mipsisa64r6 | mipsisa64r6el \
| mipsisa64sb1 | mipsisa64sb1el \
| mipsisa64sr71k | mipsisa64sr71kel \
| mipsr5900 | mipsr5900el \
| mipstx39 | mipstx39el \
| mn10200 | mn10300 \
| moxie \
| mt \
| msp430 \
| nds32 | nds32le | nds32be \
| nios | nios2 | nios2eb | nios2el \
| nios | nios2 \
| ns16k | ns32k \
| open8 | or1k | or1knd | or32 \
| open8 \
| or32 \
| pdp10 | pdp11 | pj | pjl \
| powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
@@ -326,7 +328,7 @@ case $basic_machine in
c6x)
basic_machine=tic6x-unknown
;;
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
basic_machine=$basic_machine-unknown
os=-none
;;
@@ -368,13 +370,13 @@ case $basic_machine in
| aarch64-* | aarch64_be-* \
| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
| avr-* | avr32-* \
| be32-* | be64-* \
| bfin-* | bs2000-* \
| c[123]* | c30-* | [cjt]90-* | c4x-* \
| c8051-* | clipper-* | craynv-* | cydra-* \
| clipper-* | craynv-* | cydra-* \
| d10v-* | d30v-* | dlx-* \
| elxsi-* \
| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
@@ -383,13 +385,11 @@ case $basic_machine in
| hexagon-* \
| i*86-* | i860-* | i960-* | ia64-* \
| ip2k-* | iq2000-* \
| k1om-* \
| le32-* | le64-* \
| lm32-* \
| m32c-* | m32r-* | m32rle-* \
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
| microblaze-* | microblazeel-* \
| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
| mips16-* \
| mips64-* | mips64el-* \
@@ -403,22 +403,18 @@ case $basic_machine in
| mips64vr5900-* | mips64vr5900el-* \
| mipsisa32-* | mipsisa32el-* \
| mipsisa32r2-* | mipsisa32r2el-* \
| mipsisa32r6-* | mipsisa32r6el-* \
| mipsisa64-* | mipsisa64el-* \
| mipsisa64r2-* | mipsisa64r2el-* \
| mipsisa64r6-* | mipsisa64r6el-* \
| mipsisa64sb1-* | mipsisa64sb1el-* \
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
| mipsr5900-* | mipsr5900el-* \
| mipstx39-* | mipstx39el-* \
| mmix-* \
| mt-* \
| msp430-* \
| nds32-* | nds32le-* | nds32be-* \
| nios-* | nios2-* | nios2eb-* | nios2el-* \
| nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
| open8-* \
| or1k*-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
@@ -792,7 +788,7 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
microblaze*)
microblaze)
basic_machine=microblaze-xilinx
;;
mingw64)
@@ -800,7 +796,7 @@ case $basic_machine in
os=-mingw64
;;
mingw32)
basic_machine=i686-pc
basic_machine=i386-pc
os=-mingw32
;;
mingw32ce)
@@ -836,7 +832,7 @@ case $basic_machine in
basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
;;
msys)
basic_machine=i686-pc
basic_machine=i386-pc
os=-msys
;;
mvs)
@@ -1027,11 +1023,7 @@ case $basic_machine in
basic_machine=i586-unknown
os=-pw32
;;
rdos | rdos64)
basic_machine=x86_64-pc
os=-rdos
;;
rdos32)
rdos)
basic_machine=i386-pc
os=-rdos
;;
@@ -1358,7 +1350,7 @@ case $os in
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
| -sym* | -kopensolaris* | -plan9* \
| -sym* | -kopensolaris* \
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
| -aos* | -aros* \
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
@@ -1380,7 +1372,7 @@ case $os in
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
| -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-qnx*)
@@ -1504,6 +1496,9 @@ case $os in
-aros*)
os=-aros
;;
-kaos*)
os=-kaos
;;
-zvmoe)
os=-zvmoe
;;
@@ -1552,9 +1547,6 @@ case $basic_machine in
c4x-* | tic4x-*)
os=-coff
;;
c8051-*)
os=-elf
;;
hexagon-*)
os=-elf
;;

View File

@@ -1,6 +1,6 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -23,7 +23,8 @@ m4_ifdef([AM_SILENT_RULES],
# -- Initialisation --
AC_PREREQ([2.61])
AC_INIT([ngIRCd],[VERSION_ID],[ngircd-ml@ngircd.barton.de],[ngircd],[http://ngircd.barton.de/])
AC_INIT([ngIRCd], VERSION_ID,
[ngircd-ml@ngircd.barton.de], [ngircd], [http://ngircd.barton.de/])
AC_CONFIG_SRCDIR([src/ngircd/ngircd.c])
AC_CONFIG_HEADER([src/config.h])
@@ -75,28 +76,27 @@ AC_C_CONST
AC_C_INLINE
__ng_PROTOTYPES__
# -- Function Definitions --
# -- Hard coded system and compiler dependencies/features/options ... --
AC_DEFUN([GCC_STACK_PROTECT_CC],[
ssp_cc=yes
# Use -fstack-protector-all for the test to enfoce the use of the
# guard variable
AC_MSG_CHECKING([whether ${CC} accepts -fstack-protector])
ssp_old_cflags="$CFLAGS"
CFLAGS="$CFLAGS -fstack-protector-all"
AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],[],[ssp_cc=no])
echo $ssp_cc
CFLAGS="$ssp_old_cflags"
if test "X$ssp_cc" = "Xyes"; then
CFLAGS="$CFLAGS -fstack-protector"
AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
fi
ssp_cc=yes
# we use -fstack-protector-all for the test to enfoce the use of the guard variable
AC_MSG_CHECKING([whether ${CC} accepts -fstack-protector])
ssp_old_cflags="$CFLAGS"
CFLAGS="$CFLAGS -fstack-protector-all"
AC_TRY_LINK(,,, ssp_cc=no)
echo $ssp_cc
CFLAGS="$ssp_old_cflags"
if test "X$ssp_cc" = "Xyes"; then
CFLAGS="$CFLAGS -fstack-protector"
AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.])
fi
])
AC_DEFUN([WORKING_GETADDRINFO],[
AC_CHECK_FUNCS([getaddrinfo],[
AC_MSG_CHECKING([whether getaddrinfo() works])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
AC_TRY_RUN([
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -113,19 +113,15 @@ main(int argc, char **argv)
return 1;
return 0;
}
]])],[
],[
AC_DEFINE([HAVE_WORKING_GETADDRINFO], 1, [getaddrinfo(0)])
AC_MSG_RESULT(yes)
],[
AC_MSG_RESULT(no)
],[
AC_MSG_RESULT(no)
])
])
])
# -- Hard coded system and compiler dependencies/features/options ... --
if test "$GCC" = "yes"; then
# We are using the GNU C compiler. Good!
CFLAGS="$CFLAGS -pipe -W -Wall -Wpointer-arith -Wstrict-prototypes"
@@ -155,7 +151,7 @@ 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 \
strings.h sys/socket.h sys/time.h unistd.h \
],,AC_MSG_ERROR([required C header missing!]))
# Optional header files
@@ -167,19 +163,20 @@ AC_CHECK_HEADERS_ONCE([ \
# -- Datatypes --
AC_MSG_CHECKING(whether socklen_t exists)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
AC_TRY_COMPILE([
#include <sys/types.h>
#include <sys/socket.h>
]],[[
],[
socklen_t a, b;
a = 2; b = 4; a += b;
]])],[
],[
AC_DEFINE(HAVE_socklen_t) AC_MSG_RESULT(yes)
],[
AC_MSG_RESULT(no)
])
AC_TYPE_PID_T
AC_TYPE_SIGNAL
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_TYPE_UID_T
@@ -221,8 +218,8 @@ AC_CHECK_FUNCS([ \
# Optional functions
AC_CHECK_FUNCS_ONCE([
arc4random arc4random_stir gai_strerror getnameinfo inet_aton \
setgroups sigaction sigprocmask snprintf strdup strlcat strlcpy \
strndup strtok_r unsetenv vsnprintf waitpid])
sigaction sigprocmask snprintf vsnprintf strdup strndup strlcpy strlcat \
strtok_r unsetenv waitpid])
WORKING_GETADDRINFO
@@ -470,15 +467,15 @@ AC_ARG_WITH(tcp-wrappers,
saved_LIBS="$LIBS"
LIBS="-lwrap $LIBS"
LIBS_END="-lwrap $LIBS_END"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
AC_TRY_LINK([
#include <sys/types.h>
#include <sys/socket.h>
#include <tcpd.h>
int allow_severity = 0;
int deny_severity = 0;
]],[[
],[
tcpd_warn("link test");
]])],[
],[
AC_MSG_RESULT(yes)
AC_DEFINE(TCPWRAP, 1)
x_tcpwrap_on=yes

View File

@@ -1,33 +1,3 @@
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)

View File

@@ -1,7 +1,7 @@
#!/bin/sh
#
# ngIRCd start and stop script for Debian-based systems
# Copyright 2008-2015 Alexander Barton <alex@barton.de>
# Copyright 2008-2013 Alexander Barton <alex@barton.de>
#
### BEGIN INIT INFO
@@ -37,7 +37,7 @@ log_daemon_msg() {
echo -n "$*"
}
log_end_msg() {
[ "$1" = "0" ] && echo "." || echo " failed!"
[ "$1" == "0" ] && echo "." || echo " failed!"
}
log_failure_msg() {
echo "$*"

View File

@@ -84,7 +84,7 @@
FA2D564811EA158B00D37A35 /* pam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pam.h; sourceTree = "<group>"; };
FA2D564911EA158B00D37A35 /* pam.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pam.c; sourceTree = "<group>"; };
FA2D567A11EA1AB300D37A35 /* libpam.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpam.dylib; path = usr/lib/libpam.dylib; sourceTree = SDKROOT; };
FA322BBA0CEF72E4001761B3 /* ngircd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ngircd; sourceTree = BUILT_PRODUCTS_DIR; };
FA322BBA0CEF72E4001761B3 /* ngIRCd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; name = ngIRCd; path = ngircd; sourceTree = BUILT_PRODUCTS_DIR; };
FA322CD60CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
FA322CD90CEF74B1001761B3 /* array.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = array.c; sourceTree = "<group>"; };
FA322CDA0CEF74B1001761B3 /* array.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = "<group>"; };
@@ -138,6 +138,8 @@
FA322D0D0CEF74B1001761B3 /* resolve.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = resolve.h; sourceTree = "<group>"; };
FA322D100CEF74B1001761B3 /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = ansi2knr.1; sourceTree = "<group>"; };
FA322D110CEF74B1001761B3 /* ansi2knr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = ansi2knr.c; sourceTree = "<group>"; };
FA322D120CEF74B1001761B3 /* exp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = exp.h; sourceTree = "<group>"; };
FA322D130CEF74B1001761B3 /* imp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = imp.h; sourceTree = "<group>"; };
FA322D150CEF74B1001761B3 /* portab.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = portab.h; sourceTree = "<group>"; };
FA322D160CEF74B1001761B3 /* portabtest.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = portabtest.c; sourceTree = "<group>"; };
FA322D170CEF74B1001761B3 /* splint.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = splint.h; sourceTree = "<group>"; };
@@ -310,7 +312,7 @@
1AB674ADFE9D54B511CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
FA322BBA0CEF72E4001761B3 /* ngircd */,
FA322BBA0CEF72E4001761B3 /* ngIRCd */,
);
name = Products;
sourceTree = "<group>";
@@ -421,6 +423,8 @@
FA18A64716CEE14900132F66 /* Makefile.ng */,
FA322D100CEF74B1001761B3 /* ansi2knr.1 */,
FA322D110CEF74B1001761B3 /* ansi2knr.c */,
FA322D120CEF74B1001761B3 /* exp.h */,
FA322D130CEF74B1001761B3 /* imp.h */,
FA322D150CEF74B1001761B3 /* portab.h */,
FA322D160CEF74B1001761B3 /* portabtest.c */,
FA322D170CEF74B1001761B3 /* splint.h */,
@@ -626,7 +630,7 @@
name = ngIRCd;
productInstallPath = "$(HOME)/bin";
productName = ngIRCd;
productReference = FA322BBA0CEF72E4001761B3 /* ngircd */;
productReference = FA322BBA0CEF72E4001761B3 /* ngIRCd */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
@@ -635,7 +639,7 @@
08FB7793FE84155DC02AAC07 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0630;
LastUpgradeCheck = 0430;
};
buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "ngIRCd" */;
compatibilityVersion = "Xcode 3.2";
@@ -742,6 +746,7 @@
1DEB928B08733DD80010E9CD /* Default */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
CODE_SIGN_IDENTITY = "";
GCC_VERSION = "";
GCC_WARN_ABOUT_RETURN_TYPE = YES;
@@ -754,6 +759,7 @@
FAB0570C105D917F006AF9E2 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(NATIVE_ARCH_ACTUAL)";
GCC_DEBUGGING_SYMBOLS = full;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_VERSION = "";

View File

@@ -12,7 +12,7 @@
Debian/
- Various files for building Debian GNU/Linux packages (".deb's").
- ngircd.init; ngircd.default: init script for Debian-based systems.
- ngircd.pam: example PAM configuration.
- ngircd.pam: example PAM configuraton.
MacOSX/
- Project files for XCode, the "project builder" of Apple Mac OS X.

View File

@@ -4,19 +4,8 @@ After=network.target
[Service]
Type=forking
User=irc
Group=irc
CapabilityBoundingSet=CAP_SETUID CAP_SETGID CAP_SYS_CHROOT CAP_NET_BIND_SERVICE
PrivateTmp=yes
PrivateDevices=yes
ProtectSystem=full
ProtectHome=true
NoNewPrivileges=true
RuntimeDirectory=ircd
RuntimeDirectoryMode=750
ExecStart=/usr/sbin/ngircd
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@@ -1,5 +1,5 @@
%define name ngircd
%define version 23
%define version 21.1
%define release 1
%define prefix %{_prefix}

View File

@@ -16,7 +16,6 @@
NAME=`basename "$0"`
VERBOSE=
CLEAN=1
PLATFORM=
COMPILER="unknown"
@@ -27,12 +26,8 @@ COMMENT=
R_CONFIGURE=
R_MAKE=
R_CHECK=
R_CHECK_Y="?"
R_RUN=
SRC_D=`dirname "$0"`
MY_D="$PWD"
[ -n "$MAKE" ] || MAKE="make"
export MAKE CC
@@ -41,56 +36,43 @@ while [ $# -gt 0 ]; do
"-v")
VERBOSE=1
;;
"-x")
CLEAN=
;;
*)
echo "Usage: $NAME [-v] [-x]"
echo
echo " -v Verbose output"
echo " -x Don't regenerate build system, even when possible"
echo
echo "Usage: $NAME [-v]"
exit 2
esac
shift
done
echo "$NAME: Checking ngIRCd base source directory ..."
grep "ngIRCd" "$SRC_D/ChangeLog" >/dev/null 2>&1
grep "ngIRCd" ./ChangeLog >/dev/null 2>&1
if [ $? -ne 0 ]; then
grep "ngIRCd" "$SRC_D/../ChangeLog" >/dev/null 2>&1
grep "ngIRCd" ../ChangeLog >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo "$NAME: ngIRCd base source directory not found!?"
exit 1
fi
SRC_D="$SRC_D/.."
cd ..
fi
echo "$NAME: - source directory: $SRC_D"
echo "$NAME: - working directory: $MY_D"
echo "$NAME: Checking for GIT tree ..."
if [ -d "$SRC_D/.git" ]; then
if [ -d .git ]; then
echo "$NAME: Checking for \"git\" command ..."
git version >/dev/null 2>&1
if [ $? -eq 0 -a -n "$CLEAN" ]; then
if [ $? -eq 0 ]; then
echo "$NAME: Running \"git clean\" ..."
cd "$SRC_D" || exit 1
[ -n "$VERBOSE" ] && git clean -dxf || git clean -dxf >/dev/null
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
echo "$NAME: Checking for \"./configure\" script ..."
if [ ! -r ./configure ]; then
echo "$NAME: Running \"./autogen.sh\" ..."
[ -n "$VERBOSE" ] && ./autogen.sh || ./autogen.sh >/dev/null
cd "$MY_D" || exit 1
fi
if [ -r "$SRC_D/configure" ]; then
echo "$NAME: Running \"$SRC_D/configure\" script ..."
[ -n "$VERBOSE" ] && "$SRC_D/configure" -C || "$SRC_D/configure" -C >/dev/null
if [ -r ./configure ]; then
echo "$NAME: Running \"./configure\" script ..."
[ -n "$VERBOSE" ] && ./configure || ./configure >/dev/null
if [ $? -eq 0 -a -r ./Makefile ]; then
R_CONFIGURE=1
echo "$NAME: Running \"$MAKE\" ..."
@@ -102,8 +84,6 @@ if [ -r "$SRC_D/configure" ]; then
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
@@ -161,10 +141,10 @@ if [ -r "Makefile" ]; then
fi
# Get ngIRCd version information
eval "$(grep "^VERSION = " Makefile | sed -e 's/ //g')"
eval $(grep "^VERSION = " Makefile | sed -e 's/ //g')
case "$VERSION" in
*~*-*)
VERSION=`echo "$VERSION" | cut -b1-10`
*-*-*)
VERSION=`echo "$VERSION" | cut -d'-' -f3 | cut -b2-`
;;
esac
[ -n "$VERSION" ] || VERSION="unknown"
@@ -183,7 +163,7 @@ fi
[ -n "$R_CONFIGURE" ] && C="Y" || C="N"
[ -n "$R_MAKE" ] && M="Y" || M="N"
[ -n "$R_CHECK" ] && T="$R_CHECK_Y" || T="N"
[ -n "$R_CHECK" ] && T="Y" || T="N"
[ -n "$R_RUN" ] && R="Y" || R="N"
[ -n "$COMMENT" ] && COMMENT=" $COMMENT"
@@ -197,15 +177,11 @@ echo "Platform Compiler ngIRCd Date Tester C M
echo "--------------------------- ------------ ---------- -------- -------- - - - - -"
type printf >/dev/null 2>&1
if [ $? -eq 0 ]; then
printf "%-27s %-12s %-10s %s %-8s %s %s %s %s%s\n" \
printf "%-27s %-12s %-10s %s %-8s %s %s %s %s%s" \
"$PLATFORM" "$COMPILER" "$VERSION" "$DATE" "$USER" \
"$C" "$M" "$T" "$R" "$COMMENT"
else
echo "$PLATFORM $COMPILER $VERSION $DATE $USER" \
"$C" "$M" "$T" "$R" "$COMMENT"
fi
echo
if [ "$R_CHECK_Y" = "y" ]; then
echo "$NAME: Warning: Some tests have been skipped!"
echo
fi
echo; echo

1
doc/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
sample-ngircd.conf

View File

@@ -1,8 +1,9 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2014 Alexander Barton and Contributors.
(c)2001-2010 Alexander Barton,
alex@barton.de, http://www.barton.de/
ngIRCd is free software and published under the
terms of the GNU General Public License.
@@ -17,7 +18,7 @@ monitor, designed for use with hybrid-based ircds, although it can be used
with slight modification on any server which has the ability to show connects
to opers and that supports KLINEs."
Starting with Release 17, ngIRCd supports all required log messages that
And starting with Release 17, ngIRCd supports all required log messages that
BOPM requires to be useful.
II. Installation
@@ -36,12 +37,11 @@ a) BOPM "IRC" section:
3) change "mode" to "+ci" or "+c".
4) Set "connregex" to the following string, everything in one line(!):
"Client connecting: ([^ ]+) \\(([^@]+)@([^\\)]+)\\) \\[([0-9\\.]+)\\].*";
and comment out all the other "connregex" examples (that is, prepend a
"#" character).
"\\*\\*\\* Notice -- Client connecting: ([^ ]+) \\(([^@]+)@([^\\)]+)\\) \\[([0-9\\.]+)\\].*";
and comment all the other "connregex" examples (prepend a "#" character).
5) Set "kline" to "GLINE *@%h :Open proxy found on your host!";
and comment out all the other "kline" examples.
5) Set "kline" to "KILL %n :Open proxy found on your host!"; for example,
and comment all the other "kline" examples.
b) BOPM "scanner" section:

View File

@@ -13,7 +13,7 @@ This document lists and describes the "IRC capabilities" that ngIRCd supports
and can be requested by a IRC/IRCv3 client that supports the "CAP" command.
ngIRCd implements the "IRC Client Capabilities Extension" as described here:
<http://ircv3.net/specs/core/capability-negotiation-3.1.html>
<http://www.leeh.co.uk/draft-mitchell-irc-capabilities-02.html>
I. Supported Capabilities
@@ -25,4 +25,4 @@ I. Supported Capabilities
server to send all possible prefixes which apply to a user in NAMES and
WHO output.
See <http://ircv3.net/specs/extensions/multi-prefix-3.1.html>.
See <http://ircv3.atheme.org/extensions/multi-prefix-3.1>.

View File

@@ -78,7 +78,7 @@ Connection Handling Commands
like this: "CAP REQ :capability1 capability2 capability3" for example.
References:
- <http://ircv3.net/specs/core/capability-negotiation-3.1.html>
- <http://ircv3.atheme.org/specification/capability-negotiation-3.1>
- <http://ngircd.barton.de/doc/Capabilities.txt>
- doc/Capabilities.txt
@@ -380,7 +380,7 @@ Status and Informational Commands
Please note that "all" IRC daemons even parse separate nicknames in
a single parameter (like ":nick1 nick2"), and therefore ngIRCd
implements this behavior, too.
implements this behaviour, too.
References:
- RFC 2812, 4.9 "Ison message"

View File

@@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
(c)2001-2011 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
@@ -15,7 +15,7 @@ get an idea of how to do it the best :-)
- Use GIT
The source code of ngIRCd is maintained using GIT, see doc/GIT.txt. So if
remotely possible, use GIT for your work, too. It makes your and our lives
remotely possible, use GIT for your work, too. It makes your and our lifes
much easier ;-)
- Don't forget to include documentation
@@ -52,9 +52,3 @@ get an idea of how to do it the best :-)
And this is open source, your work must not be 100% finished and perfect,
work in progress is interesting, too: "release early, release often"!
- Use GitHub to create "Pull Requests"
ngIRCd is hosted on GitHub (<https://github.com/ngircd>), so please use the
tools available there and open issues (comment!) and create pull requests!
See <https://help.github.com/articles/using-pull-requests/> for details.

View File

@@ -89,21 +89,16 @@ A: You need to set 'OperCanUseMode = yes' in ngircd.conf, then IRC operators
can use the MODE command for changing modes even when they are not joined
to the specific channel.
Q: How can I "auto-op" users in channels?
A: ngIRCd can't do this: you would have to use some "IRC Services", like
Atheme (<http://atheme.net/atheme.html>) or Anope (<http://www.anope.org>).
See "doc/Services.txt" for setup instructions.
IV. Bugs!?
~~~~~~~~~~
Q: Is there a list of known bugs and desired feature enhancements?
A: Yes. Have a look at the bug tracking system (GitHub issues) for ngIRCd located
at <https://github.com/ngircd/ngircd/issues>. There you can file bug
A: Yes. Have a look at the bug tracking system (Bugzilla) for ngIRCd located
at <http://ngircd.barton.de/bugzilla/index.cgi>. There you can file bug
reports and feature requests as well as search the bug database.
Q: What should I do if I found a bug?
A: Please file a bug report at <https://github.com/ngircd/ngircd/issues/new>!
The author will be notified automagically :-)
A: Please file a bug report at <http://ngircd.barton.de/bugzilla/index.cgi>!
The author of the particular component will be notified automagically :-)

65
doc/GIT.txt Normal file
View File

@@ -0,0 +1,65 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2011 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
-- GIT.txt --
The source code of ngIRCd is maintained using GIT, an distributed version
control system. Homepage including documentation: <http://git-scm.com/>.
I. Viewing the source code online
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The ngIRCd "GITweb" interface allows you to browse the GIT repository and
to see all individual files, tags, branches, commits etc.:
<http://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git>
II. Getting the source code
~~~~~~~~~~~~~~~~~~~~~~~~~~~
To access (copy, clone) the source tree repository anonymously, run:
$ git clone git://ngircd.barton.de/ngircd.git
Thereby a new folder "ngircd" will be created containing all the individual
source files.
The newly created directory ("ngircd") is the "working directory", all
GIT commands will be executed from within this directory in the future.
Please note: When checking out a fresh copy of ngIRCd using GIT, the
configure script doesn't exist; you have to run the autogen.sh shell script
(which is included in the source tree) to generate it. This requires you to
have GNU automake and GNU autoconf installed on your system. Please see the
file INSTALL for details!
To update the local GIT repository:
$ git pull
This retrieves all changes and merges them into the current branch.
III. Contributing
~~~~~~~~~~~~~~~~~
Patches should be sent to the ngircd mailing list. List homepage:
http://arthur.barton.de/mailman/listinfo/ngircd-ml
If you do not want to send them to the list, you can also mail them
to Alex Barton, <alex@barton.de>.
IV. Write Access
~~~~~~~~~~~~~~~~
If you want to contribute a couple of patches and write access to the GIT
repository would be handy, please contact Alex Barton, <alex@barton.de>.

View File

@@ -37,7 +37,6 @@ II. How to prepare a new ngIRCd release?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a) Make sure the source tree is in a releasable state ;-)
- is the AUTHORS file up to date?
b) Make sure you have working versions of GNU autoconf and GNU automake
installed on the system you use for generating the release:
@@ -75,6 +74,4 @@ l) Upload and distribute the newly generated ngIRCd release archive(s)
m) Write an announcement to the mailing list, freshmeat, Twitter, ...
n) Update the list of releases in our bug tracker.
o) Relax :-)
n) Relax :-)

View File

@@ -1,6 +1,6 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -23,6 +23,7 @@ static_docs = \
Commands.txt \
Contributing.txt \
FAQ.txt \
GIT.txt \
HowToRelease.txt \
Modes.txt \
PAM.txt \

View File

@@ -2,7 +2,7 @@
ngIRCd - Next Generation IRC Server
http://ngircd.barton.de/
(c)2001-2015 Alexander Barton and Contributors.
(c)2001-2012 Alexander Barton and Contributors.
ngIRCd is free software and published under the
terms of the GNU General Public License.
@@ -26,9 +26,7 @@ channels he is using at the moment.
B 20 User is flagged as a "bot".
c 17 IRC operator wants to receive connect/disconnect NOTICEs.
C 19 Only users that share a channel are allowed to send messages.
F 22 Relaxed flood protection (only settable by IRC Operators).
i 0.0.1 User is "invisible".
I 23 No channels are shown on WHOIS (IRC Ops can always see those).
o 0.0.1 User is IRC operator.
q 20 User is protected, can not be kicked from a channel.
r 0.0.1 User is restricted.
@@ -56,7 +54,6 @@ users to lists (e.g. "invite list", "ban list"), others have parameters
m 0.3.0 Channel is moderated, only "voiced" users can send messages.
M 20 Only registered users (and IRC Ops) can send messages.
n 0.3.0 Channel doesn't allow messages of users not being members.
N 23 Users can't change their nickname while on this channel.
O 18 Only IRC operators are allowed to join this channel.
P 0.5.0 Channel is "persistent".
Q 20 Nobody can be kicked from the channel.
@@ -88,4 +85,4 @@ Notes
~~~~~
(1) This mode is not set by ngIRCd itself but by services. ngIRCd handles
the mode transparently and possibly adjusts its behavior.
the mode transparently and possibly adjusts its behaviour.

View File

@@ -30,10 +30,8 @@ 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
hppa/unknown/openbsd3.5 gcc 2.95.3 CVSHEAD 04-05-25 alex Y Y Y Y
hppa/unknown/openbsd5.4 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y y Y 3
hppa/unknown/openbsd5.4 gcc 4.2.1 21 13-11-10 alex Y Y Y Y 3
hppa1.1/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
hppa2.0/unknown/linux-gnu gcc 3.3.5 13~rc1 08-12-02 alex Y Y Y Y
hppa2.0w-hp-hpux11.11 gcc 4.2.3 14.1 09-07-22 goetz Y Y Y Y
@@ -47,7 +45,7 @@ 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 20~rc1 12-11-13 alex Y Y Y Y 3
i686/pc/minix gcc 4.4.6 21~rc2 13-10-27 alex Y Y N N
i686/unknown/gnu0.3 gcc 4.4.5 19 12-02-29 alex Y Y Y Y
i686/unknown/gnu0.5 gcc 4.9.1 22~rc1-3 14-10-11 alex Y Y Y Y
i686/unknown/gnu0.5 gcc 4.8.2 21 14-02-09 alex Y Y Y Y
i686/unkn./kfreebsd7.2-gnu gcc 4.3.4 15 09-12-02 alex Y Y Y Y 3
i386/unknown/netbsdelf1.5.2 egcs-1.1.2 21 13-11-25 goetz Y Y N Y
i386/unknown/netbsdelf1.6.2 gcc 2.95.3 18 11-07-10 goetz Y Y Y Y
@@ -61,12 +59,11 @@ 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 19 12-02-29 alex Y Y N Y
i686/pc/cygwin gcc 4.8.3 22~rc1-3 14-10-10 alex Y Y N Y
i686/pc/cygwin gcc 4.8.2 21 14-01-02 alex Y Y N Y
i686/pc/linux-gnu gcc 2.7.2 21~38 14-01-06 goetz Y Y Y Y 1
i686/pc/linux-gnu gcc 2.95.4 0.8.0 04-05-30 alex Y Y Y Y 1
i686/pc/linux-gnu gcc 3.3.5 14.1 09-08-04 alex Y Y Y Y 1
i386/pc/linux-gnu gcc 4.1.2 13~rc1 08-12-05 alex Y Y Y Y 1
i386/pc/linux-gnu gcc 4.4.5 22~rc1-3 14-10-10 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
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
@@ -77,7 +74,7 @@ m88k/dg/dgux5.4R3.10 gcc 2.5.8 CVSHEAD 04-03-15 alex Y Y ? ?
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
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/darwin7.9.0 gcc 3.3 21 14-01-11 goetz Y Y Y Y 3
powerpc/apple/darwin8.11.0 gcc 4.0.1 18 11-07-02 goetz Y Y Y Y 3
powerpc/apple/darwin9.8.0 gcc 4.0.1 21 14-01-04 goetz Y Y Y Y 3
powerpc/unknown/linux-gnu gcc 3.3.3 0.8.0 04-05-30 alex Y Y Y Y
@@ -85,30 +82,22 @@ 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/unknown/dragonfly3.4 gcc 4.7.2 21 13-11-12 goetz Y Y N Y 3
x86_64/unknown/freebsd8.4 gcc 4.2.1 22~rc1-3 14-10-10 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.0 F-clang 3.3 22~rc1-3 14-10-10 alex Y Y Y Y 3
x86_64/unknown/freebsd8.4 gcc 4.2.1 21 14-01-02 alex Y Y Y Y 3
x86_64/unknown/freebsd9.1 gcc 4.2.1 21 14-01-02 alex Y Y Y Y 3
x86_64/unkn./freebsd8.1-gnu gcc 4.4.5 19 12-02-26 alex Y Y Y Y 3
x86_64/unknown/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/unknown/linux-gnu gcc 4.4.5 23~rc1-3 15-11-15 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/unknown/linux-gnu gcc 4.8.2 21 13-12-29 alex Y Y Y Y 1
x86_64/unknown/linux-gnu gcc 4.9.2 23~rc1-3 15-11-15 alex Y Y Y Y 1
x86_64/unknown/linux-gnu nwcc 0.8.2 21 13-12-01 goetz Y Y Y Y 1
x86_64/unknown/linux-gnu Open64 21.1 14-03-27 goetz Y Y Y Y 1
x86_64/unknown/linux-gnu Sun C 5.12 21.1 14-03-27 goetz Y Y Y Y 1
x86_64/unknown/linux-gnu tcc 0.9.25 21.1 14-03-27 goetz Y Y Y Y 1
x86_64/unknown/linux-gnu Open64 21 13-11-30 goetz Y Y Y Y 1
x86_64/unknown/linux-gnu Sun C 5.12 21 13-11-22 goetz Y Y Y Y 1
x86_64/unknown/linux-gnu tcc 0.9.25 21 13-11-30 goetz Y Y Y Y 1
x86_64/unknown/openbsd4.7 gcc 3.3.5 20~rc1 12-02-26 alex Y Y Y Y 3
x86_64/unknown/openbsd4.8 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y y Y 3
x86_64/unknown/openbsd4.8 gcc 4.2.1 21 13-12-28 alex Y Y Y Y 3
x86_64/unknown/openbsd5.1 gcc 4.2.1 21 13-12-28 alex Y Y Y Y 3
x86_64/unknown/openbsd5.5 gcc 4.2.1 22~rc1-3 14-10-10 alex Y Y Y Y 3
* Notes

View File

@@ -22,7 +22,7 @@ The following software packages are needed:
- GNU sed
Source:
http://www.rezepte-im-web.de/appleux/sed-3.02.tar.gz
http://arthur.barton.de/pub/unix/aux/tools/sed-3.02.tar.gz
ftp://arthur.barton.de/pub/unix/aux/tools/sed-3.02.tar.gz
A/UX comes with /bin/sed which isn't supporting all functions needed
by GNU automake/autoconf.
@@ -34,7 +34,7 @@ The following software packages are needed:
- libUTIL.a
Source:
ftp://ftp.mayn.de/pub/really_old_stuff/apple/apple_unix/Sys_stuff/libUTIL-2.1.tar.gz>
http://arthur.barton.de/pub/unix/aux/libraries/libUTIL-2.1.tar.gz
ftp://arthur.barton.de/pub/unix/aux/libraries/libUTIL-2.1.tar.gz
This library contains functions that are common on other UNIX
systems but not on A/UX e.g. memmove(), strerror() and strdup().
@@ -50,7 +50,7 @@ A few hints in case of errors:
(so 'configure' uses its own shell script) or use a fully functionable one.
There's at least one binary "out there" causing problems. The one
of the GNU fileutils works fine:
http://arthur.barton.de/pub/unix/aux/tools/fileutils-4.0.tar.gz
ftp://arthur.barton.de/pub/unix/aux/tools/fileutils-4.0.tar.gz
- The precompiled binary of the old 'bash' shouldn't be installed within
/bin (better do this in /usr/local/bin) because 'configure' would

View File

@@ -123,7 +123,7 @@ Please note that versions up to and including 5.1.3 contain a bug that
sometimes causes IRC Services to hang on startup. There are two workarounds:
a) send the services process a HUP signal ("killall -HUP ircservices")
b) apply this patch to the IRC Services source tree:
<http://arthur.barton.de/pub/ngircd/contrib/IRCServices513-FlushBuffer.patch>
<ftp://ngircd.barton.de/ngircd/contrib/IRCServices513-FlushBuffer.patch>
At least the following settings have to be tweaked, in addition to all the
settings marked as required by IRC Services:

View File

@@ -54,12 +54,6 @@
# A simple Phrase (<256 chars) if you don't want to use a motd file.
;MotdPhrase = "Hello world!"
# The name of the IRC network to which this server belongs. This name
# is optional, should only contain ASCII characters, and can't contain
# spaces. It is only used to inform clients. The default is empty,
# so no network name is announced to clients.
;Network = aIRCnetwork
# Global password for all users needed to connect to the server.
# (Default: not set)
;Password = abc
@@ -172,8 +166,8 @@
;ConnectIPv4 = yes
# Default user mode(s) to set on new local clients. Please note that
# only modes can be set that the client could set using regular MODE
# commands, you can't set "a" (away) for example! Default: none.
# only modes can be set that the client could set on itself, you can't
# set "a" (away) or "o" (IRC Op), for example! Default: none.
;DefaultUserModes = i
# Do DNS lookups when a client connects to the server.
@@ -193,9 +187,9 @@
;MorePrivacy = no
# Normally ngIRCd doesn't send any messages to a client until it is
# registered. Enable this option to let the daemon send "NOTICE *"
# registered. Enable this option to let the daemon send "NOTICE AUTH"
# messages to clients while connecting.
;NoticeBeforeRegistration = no
;NoticeAuth = no
# Should IRC Operators be allowed to use the MODE command even if
# they are not(!) channel-operators?
@@ -259,9 +253,9 @@
# See 'man 1ssl ciphers' (OpenSSL) or 'man 3 gnutls_priority_init'
# (GnuTLS) for details.
# For OpenSSL:
;CipherList = HIGH:!aNULL:@STRENGTH:!SSLv3
;CipherList = HIGH:!aNULL:@STRENGTH
# For GnuTLS:
;CipherList = SECURE128:-VERS-SSL3.0
;CipherList = SECURE128
# Diffie-Hellman parameters
;DHFile = :ETCDIR:/ssl/dhparams.pem

1
doc/src/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
html

2
man/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
ngircd.8
ngircd.conf.5

View File

@@ -1,7 +1,7 @@
.\"
.\" ngircd.conf(5) manual page template
.\"
.TH ngircd.conf 5 "Oct 2014" ngIRCd "ngIRCd Manual"
.TH ngircd.conf 5 "Oct 2013" ngIRCd "ngIRCd Manual"
.SH NAME
ngircd.conf \- configuration file of ngIRCd
.SH SYNOPSIS
@@ -60,7 +60,7 @@ The main configuration of the server is stored in the
section, like the server name, administrative information and the ports on
which the server should be listening. The variables in this section have to be
adjusted to the local requirements most of the time, whereas all the variables
in the other sections can be left on their defaults very often.
in the other sections can be left on there defaults very often.
.PP
Options in the
.I [Limits]
@@ -82,13 +82,12 @@ sections. And
blocks are used to configure pre-defined ("persistent") IRC channels.
.PP
There can be more than one [Operator], [Server] and [Channel] section per
configuration file, one for each operator, server, and channel. [Global],
[Limits], [Options], and [SSL] sections can occure multiple times, too, but
each variable overwrites itself, only the last assignment is relevant.
configuration file (one for each operator, server, and channel), but only
exactly one [Global], one [Limits], one [Options], and one [SSL] section.
.SH [GLOBAL]
The
.I [Global]
section is used to define the main configuration of the server,
section of this file is used to define the main configuration of the server,
like the server name and the ports on which the server should be listening.
These settings depend on your personal preferences, so you should make sure
that they correspond to your installation and setup!
@@ -127,12 +126,6 @@ configuration file.
\fBMotdPhrase\fR (string)
A simple Phrase (<256 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
@@ -140,16 +133,16 @@ if ngIRCd is using PAM!
.TP
\fBPidFile\fR (string)
This tells ngIRCd to write its current process ID to a file. Note that the
"PID file" is written AFTER chroot and switching the user ID, therefore the
directory the file resides in must be writable by the ngIRCd user and exist
in the chroot directory (if configured, see above).
"PID file" is written AFTER chroot and switching the user ID, e.g. the directory
the file resides in must be writable by the ngIRCd user and exist in the
chroot directory (if configured, see above).
.TP
\fBPorts\fR (list of numbers)
Port number(s) on which the server should listen for unencrypted connections.
There may be more than one port, separated with commas (","). Default: 6667.
Ports on which the server should listen for unencrypted connections. There
may be more than one port, separated with commas (","). Default: 6667.
.TP
\fBServerGID\fR (string or number)
Group ID under which the ngIRCd daemon should run; you can use the name of the
Group ID under which the ngIRCd should run; you can use the name of the
group or the numerical ID.
.PP
.RS
@@ -159,8 +152,8 @@ For this to work the server must have been started with root privileges!
.RE
.TP
\fBServerUID\fR (string or number)
User ID under which the ngIRCd daemon should run; you can use the name of the
user or the numerical ID.
User ID under which the server should run; you can use the name of the user
or the numerical ID.
.PP
.RS
.B Attention:
@@ -170,8 +163,8 @@ addition, the configuration and MOTD files must be readable by this user,
otherwise RESTART and REHASH won't work!
.RE
.SH [LIMITS]
This section is used to define some limits and timeouts for this ngIRCd
instance. Default values should be safe, but it is wise to double-check :-)
Define some limits and timeouts for this ngIRCd instance. Default values
should be safe, but it is wise to double-check :-)
.TP
\fBConnectRetry\fR (number)
The server tries every <ConnectRetry> seconds to establish a link to not yet
@@ -213,8 +206,8 @@ If a client fails to answer a PING with a PONG within <PongTimeout>
seconds, it will be disconnected by the server. Default: 20.
.SH [OPTIONS]
Optional features and configuration options to further tweak the behavior of
ngIRCd are configured in this section. If you want to get started quickly, you
most probably don't have to make changes here -- they are all optional.
ngIRCd. If you want to get started quickly, you most probably don't have to
make changes here -- they are all optional.
.TP
\fBAllowedChannelTypes\fR (string)
List of allowed channel types (channel prefixes) for newly created channels
@@ -223,9 +216,9 @@ Set this variable to the empty string to disallow creation of new channels
by local clients at all. Default: #&+
.TP
\fBAllowRemoteOper\fR (boolean)
If this option is active, IRC operators connected to remote servers are allowed
to control this local server using administrative commands, for example like
CONNECT, DIE, SQUIT etc. Default: no.
Are IRC operators connected to remote servers allowed to control this server,
e.g. are they allowed to use administrative commands like CONNECT, DIE,
SQUIT, ... that affect this server? Default: no.
.TP
\fBChrootDir\fR (string)
A directory to chroot in when everything is initialized. It doesn't need
@@ -252,8 +245,8 @@ The Salt for cloaked hostname hashing. When undefined a random hash is
generated after each server start.
.TP
\fBCloakUserToNick\fR (boolean)
Set every clients' user name and real name to their nickname and hide the one
supplied by the IRC client. Default: no.
Set every clients' user name to their nickname and hide the one supplied
by the IRC client. Default: no.
.TP
\fBConnectIPv4\fR (boolean)
Set this to no if you do not want ngIRCd to connect to other IRC servers using
@@ -267,8 +260,8 @@ Default: yes.
.TP
\fBDefaultUserModes\fR (string)
Default user mode(s) to set on new local clients. Please note that only modes
can be set that the client could set using regular MODE commands, you can't
set "a" (away) for example!
can be set that the client could set on itself, you can't set "a" (away) or
"o" (IRC Op), for example!
Default: none.
.TP
\fBDNS\fR (boolean)
@@ -284,24 +277,23 @@ Users identified using IDENT are registered without the "~" character
prepended to their user name.
Default: yes.
.TP
.TP
\fBIncludeDir\fR (string)
Directory containing configuration snippets (*.conf), that should be read in
after parsing the current configuration file.
Default: none.
.TP
\fBMorePrivacy\fR (boolean)
This will cause ngIRCd to censor user idle time, logon time as well as the
PART/QUIT messages (that are sometimes used to inform everyone about which
client software is being used). WHOWAS requests are also silently ignored,
and NAMES output doesn't list any clients for non-members.
part/quit messages (that are sometimes used to inform everyone about which
client software is being used). WHOWAS requests are also silently ignored.
This option is most useful when ngIRCd is being used together with
anonymizing software such as TOR or I2P and one does not wish to make it
too easy to collect statistics on the users.
Default: no.
.TP
\fBNoticeBeforeRegistration\fR (boolean)
\fBNoticeAuth\fR (boolean)
Normally ngIRCd doesn't send any messages to a client until it is registered.
Enable this option to let the daemon send "NOTICE *" messages to clients
Enable this option to let the daemon send "NOTICE AUTH" messages to clients
while connecting. Default: no.
.TP
\fBOperCanUseMode\fR (boolean)
@@ -376,7 +368,7 @@ SSL Certificate file of the private server key.
.TP
\fBCipherList\fR (string)
Select cipher suites allowed for SSL/TLS connections. This defaults to
"HIGH:!aNULL:@STRENGTH:!SSLv3" (OpenSSL) or "SECURE128:-VERS-SSL3.0" (GnuTLS).
"HIGH:!aNULL:@STRENGTH" (OpenSSL) or "SECURE128" (GnuTLS).
Please see 'man 1ssl ciphers' (OpenSSL) and 'man 3 gnutls_priority_init'
(GnuTLS) for details.
.TP

4
src/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
config.h
config.h.in
config.h.in~
stamp-h1

1
src/ipaddr/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
Makefile.am

View File

@@ -4,7 +4,6 @@
#ifndef NG_IPADDR_HDR
#define NG_IPADDR_HDR
#include "portab.h"
/**
@@ -13,7 +12,6 @@
*/
#include <assert.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>

5
src/ngircd/.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
Makefile.am
check-help
check-version
ngircd
ngircd.exe

View File

@@ -14,19 +14,16 @@
* Functions to dynamically allocate arrays.
*/
/* Additionan debug messages related to array handling: 0=off / 1=on */
#define DEBUG_ARRAY 0
#include "array.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#if DEBUG_ARRAY
# include "log.h"
#endif
#include "log.h"
/* Enable more Debug messages in alloc / append / memmove code. */
/* #define DEBUG_ARRAY */
#define array_UNUSABLE(x) ( !(x)->mem )
@@ -67,7 +64,7 @@ array_alloc(array * a, size_t size, size_t pos)
return NULL;
if (a->allocated < alloc) {
#if DEBUG_ARRAY
#ifdef DEBUG_ARRAY
Log(LOG_DEBUG, "array_alloc(): changing size from %u to %u bytes.",
a->allocated, alloc);
#endif
@@ -168,7 +165,7 @@ array_catb(array * dest, const char *src, size_t len)
assert(ptr != NULL);
#if DEBUG_ARRAY
#ifdef DEBUG_ARRAY
Log(LOG_DEBUG,
"array_catb(): appending %u bytes to array (now %u bytes in array).",
len, tmp);
@@ -248,7 +245,7 @@ void
array_free(array * a)
{
assert(a != NULL);
#if DEBUG_ARRAY
#ifdef DEBUG_ARRAY
Log(LOG_DEBUG,
"array_free(): %u bytes free'd (%u bytes still used at time of free()).",
a->allocated, a->used);
@@ -314,7 +311,7 @@ array_moveleft(array * a, size_t membersize, size_t pos)
if (!bytepos)
return; /* nothing to do */
#if DEBUG_ARRAY
#ifdef DEBUG_ARRAY
Log(LOG_DEBUG,
"array_moveleft(): %u bytes used in array, starting at position %u.",
a->used, bytepos);

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,32 +18,41 @@
* Channel management
*/
#include "imp.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <strings.h>
#include <time.h>
#include "defines.h"
#include "conn-func.h"
#include "exp.h"
#include "channel.h"
#include "imp.h"
#include "irc-write.h"
#include "conf.h"
#include "hash.h"
#include "lists.h"
#include "log.h"
#include "messages.h"
#include "match.h"
#include "exp.h"
#define REMOVE_PART 0
#define REMOVE_QUIT 1
#define REMOVE_KICK 2
static CHANNEL *My_Channels;
static CL2CHAN *My_Cl2Chan;
static CL2CHAN *Get_Cl2Chan PARAMS(( CHANNEL *Chan, CLIENT *Client ));
static CL2CHAN *Add_Client PARAMS(( CHANNEL *Chan, CLIENT *Client ));
static bool Remove_Client PARAMS(( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const char *Reason, bool InformServer ));
@@ -352,19 +361,14 @@ Channel_Kick(CLIENT *Peer, CLIENT *Target, CLIENT *Origin, const char *Name,
!Channel_UserHasMode(chan, Target, 'q') &&
!Channel_UserHasMode(chan, Target, 'a'))
can_kick = true;
/* Half Op can't kick owner | admin | op */
/* Half Op can't kick owner | admin | op */
else if (Channel_UserHasMode(chan, Peer, 'h') &&
!Channel_UserHasMode(chan, Target, 'q') &&
!Channel_UserHasMode(chan, Target, 'a') &&
!Channel_UserHasMode(chan, Target, 'o'))
can_kick = true;
/* IRC operators & IRCd with OperCanMode enabled
* can kick anyways regardless of privilege */
else if(Client_HasMode(Origin, 'o') && Conf_OperCanMode)
can_kick = true;
if(!can_kick) {
IRC_WriteErrClient(Origin, ERR_CHANOPPRIVTOOLOW_MSG,
Client_ID(Origin), Name);
@@ -1044,7 +1048,7 @@ Remove_Client( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const ch
switch( Type )
{
case REMOVE_QUIT:
/* QUIT: other servers have already been notified,
/* QUIT: other servers have already been notified,
* see Client_Destroy(); so only inform other clients
* in same channel. */
assert( InformServer == false );
@@ -1098,29 +1102,29 @@ Remove_Client( int Type, CHANNEL *Chan, CLIENT *Client, CLIENT *Origin, const ch
GLOBAL bool
Channel_AddBan(CHANNEL *c, const char *mask, const char *who )
Channel_AddBan(CHANNEL *c, const char *mask )
{
struct list_head *h = Channel_GetListBans(c);
LogDebug("Adding \"%s\" to \"%s\" ban list", mask, Channel_Name(c));
return Lists_Add(h, mask, time(NULL), who, false);
return Lists_Add(h, mask, false, NULL);
}
GLOBAL bool
Channel_AddExcept(CHANNEL *c, const char *mask, const char *who )
Channel_AddExcept(CHANNEL *c, const char *mask )
{
struct list_head *h = Channel_GetListExcepts(c);
LogDebug("Adding \"%s\" to \"%s\" exception list", mask, Channel_Name(c));
return Lists_Add(h, mask, time(NULL), who, false);
return Lists_Add(h, mask, false, NULL);
}
GLOBAL bool
Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce, const char *who )
Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce)
{
struct list_head *h = Channel_GetListInvites(c);
LogDebug("Adding \"%s\" to \"%s\" invite list", mask, Channel_Name(c));
return Lists_Add(h, mask, time(NULL), who, onlyonce);
return Lists_Add(h, mask, onlyonce, NULL);
}
@@ -1137,9 +1141,7 @@ ShowChannelList(struct list_head *head, CLIENT *Client, CHANNEL *Channel,
while (e) {
if (!IRC_WriteStrClient(Client, msg, Client_ID(Client),
Channel_Name(Channel),
Lists_GetMask(e),
Lists_GetReason(e),
Lists_GetValidity(e)))
Lists_GetMask(e)))
return DISCONNECTED;
e = Lists_GetNext(e);
}

View File

@@ -127,10 +127,10 @@ GLOBAL char *Channel_TopicWho PARAMS(( CHANNEL *Chan ));
GLOBAL unsigned int Channel_CreationTime PARAMS(( CHANNEL *Chan ));
#endif
GLOBAL bool Channel_AddBan PARAMS((CHANNEL *c, const char *Mask, const char *who));
GLOBAL bool Channel_AddExcept PARAMS((CHANNEL *c, const char *Mask, const char *who));
GLOBAL bool Channel_AddBan PARAMS((CHANNEL *c, const char *Mask));
GLOBAL bool Channel_AddExcept PARAMS((CHANNEL *c, const char *Mask));
GLOBAL bool Channel_AddInvite PARAMS((CHANNEL *c, const char *Mask,
bool OnlyOnce, const char *who));
bool OnlyOnce));
GLOBAL bool Channel_ShowBans PARAMS((CLIENT *client, CHANNEL *c));
GLOBAL bool Channel_ShowExcepts PARAMS((CLIENT *client, CHANNEL *c));

View File

@@ -16,13 +16,19 @@
* User class management.
*/
#include "imp.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include "defines.h"
#include "array.h"
#include "conn.h"
#include "client.h"
#include "lists.h"
#include "match.h"
#include "stdio.h"
#include "exp.h"
#include "class.h"
struct list_head My_Classes[CLASS_COUNT];
@@ -105,7 +111,7 @@ Class_AddMask(const int Class, const char *Pattern, time_t ValidUntil,
Lists_MakeMask(Pattern, mask, sizeof(mask));
return Lists_Add(&My_Classes[Class], mask,
ValidUntil, Reason, false);
ValidUntil, Reason);
}
GLOBAL void

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,11 +18,15 @@
* Functions to deal with IRC Capabilities
*/
#include "imp.h"
#include <assert.h>
#include "defines.h"
#include "conn.h"
#include "client.h"
#include "log.h"
#include "exp.h"
#include "client-cap.h"
GLOBAL int

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,16 +18,22 @@
* Client management.
*/
#include "imp.h"
#include <assert.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <time.h>
#include <netdb.h>
#include "defines.h"
#include "conn.h"
#include "exp.h"
#include "client.h"
#include <imp.h>
#include "ngircd.h"
#include "channel.h"
#include "conf.h"
@@ -38,6 +44,8 @@
#include "match.h"
#include "messages.h"
#include <exp.h>
#define GETID_LEN (CLIENT_NICK_LEN-1) + 1 + (CLIENT_USER_LEN-1) + 1 + (CLIENT_HOST_LEN-1) + 1
static CLIENT *This_Server, *My_Clients;
@@ -72,7 +80,7 @@ GLOBAL void
Client_Init( void )
{
struct hostent *h;
This_Server = New_Client_Struct( );
if( ! This_Server )
{
@@ -98,7 +106,7 @@ Client_Init( void )
Client_SetInfo( This_Server, Conf_ServerInfo );
My_Clients = This_Server;
memset( &My_Whowas, 0, sizeof( My_Whowas ));
} /* Client_Init */
@@ -111,7 +119,7 @@ Client_Exit( void )
if( NGIRCd_SignalRestart ) Client_Destroy( This_Server, "Server going down (restarting).", NULL, false );
else Client_Destroy( This_Server, "Server going down.", NULL, false );
cnt = 0;
c = My_Clients;
while(c) {
@@ -228,7 +236,7 @@ GLOBAL void
Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool SendQuit )
{
/* remove a client */
CLIENT *last, *c;
char msg[COMMAND_LEN];
const char *txt;
@@ -337,7 +345,7 @@ Client_SetHostname( CLIENT *Client, const char *Hostname )
assert(Client != NULL);
assert(Hostname != NULL);
if (Conf_CloakHost[0]) {
if (strlen(Conf_CloakHost)) {
char cloak[GETID_LEN];
strlcpy(cloak, Hostname, GETID_LEN);
@@ -381,7 +389,7 @@ Client_SetID( CLIENT *Client, const char *ID )
{
assert( Client != NULL );
assert( ID != NULL );
strlcpy( Client->id, ID, sizeof( Client->id ));
if (Conf_CloakUserToNick) {
@@ -427,7 +435,7 @@ Client_SetOrigUser(CLIENT UNUSED *Client, const char UNUSED *User)
assert(Client != NULL);
assert(User != NULL);
#if defined(PAM)
#if defined(PAM) && defined(IDENTAUTH)
strlcpy(Client->orig_user, User, sizeof(Client->orig_user));
#endif
} /* Client_SetOrigUser */
@@ -698,7 +706,7 @@ Client_ID( CLIENT *Client )
if(Client->type == CLIENT_USER)
assert(strlen(Client->id) < Conf_MaxNickLength);
#endif
if( Client->id[0] ) return Client->id;
else return "*";
} /* Client_ID */
@@ -731,7 +739,15 @@ Client_User( CLIENT *Client )
*/
GLOBAL char *
Client_OrigUser(CLIENT *Client) {
#ifndef IDENTAUTH
char *user = Client->user;
if (user[0] == '~')
user++;
return user;
#else
return Client->orig_user;
#endif
} /* Client_OrigUser */
#endif

View File

@@ -52,9 +52,8 @@ typedef struct _CLIENT
char *cloaked; /* cloaked hostname of the client */
char *ipa_text; /* textual representaton of IP address */
char user[CLIENT_USER_LEN]; /* user name ("login") */
#if defined(PAM)
char orig_user[CLIENT_AUTHUSER_LEN];
/* original user name supplied by USER command */
#if defined(PAM) && defined(IDENTAUTH)
char orig_user[CLIENT_USER_LEN];/* user name supplied by USER command */
#endif
char info[CLIENT_INFO_LEN]; /* long user name (user) / info text (server) */
char modes[CLIENT_MODE_LEN]; /* client modes */

View File

@@ -16,7 +16,9 @@
* Configuration management (reading, parsing & validation)
*/
#include "imp.h"
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#ifdef PROTOTYPES
# include <stdarg.h>
@@ -27,19 +29,23 @@
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <time.h>
#include <unistd.h>
#include <pwd.h>
#include <grp.h>
#include <sys/types.h>
#include <unistd.h>
#include <dirent.h>
#include "array.h"
#include "ngircd.h"
#include "conn.h"
#include "channel.h"
#include "defines.h"
#include "log.h"
#include "match.h"
#include "tool.h"
#include "exp.h"
#include "conf.h"
@@ -88,10 +94,10 @@ static void Init_Server_Struct PARAMS(( CONF_SERVER *Server ));
#endif
#ifdef HAVE_LIBSSL
#define DEFAULT_CIPHERS "HIGH:!aNULL:@STRENGTH:!SSLv3"
#define DEFAULT_CIPHERS "HIGH:!aNULL:@STRENGTH"
#endif
#ifdef HAVE_LIBGNUTLS
#define DEFAULT_CIPHERS "SECURE128:-VERS-SSL3.0"
#define DEFAULT_CIPHERS "SECURE128"
#endif
#ifdef SSL_SUPPORT
@@ -363,8 +369,7 @@ Conf_Test( void )
printf(" MotdPhrase = %s\n", array_bytes(&Conf_Motd)
? (const char*) array_start(&Conf_Motd) : "");
}
printf(" Network = %s\n", Conf_Network);
if (!Conf_PAM)
if (!Conf_PAM)
printf(" Password = %s\n", Conf_ServerPwd);
printf(" PidFile = %s\n", Conf_PidFile);
printf(" Ports = ");
@@ -412,7 +417,7 @@ Conf_Test( void )
#endif
printf(" IncludeDir = %s\n", Conf_IncludeDir);
printf(" MorePrivacy = %s\n", yesno_to_str(Conf_MorePrivacy));
printf(" NoticeBeforeRegistration = %s\n", yesno_to_str(Conf_NoticeBeforeRegistration));
printf(" NoticeAuth = %s\n", yesno_to_str(Conf_NoticeAuth));
printf(" OperCanUseMode = %s\n", yesno_to_str(Conf_OperCanMode));
printf(" OperChanPAutoOp = %s\n", yesno_to_str(Conf_OperChanPAutoOp));
printf(" OperServerMode = %s\n", yesno_to_str(Conf_OperServerMode));
@@ -618,7 +623,6 @@ Conf_EnablePassiveServer(const char *Name)
&& (Conf_Server[i].port > 0)) {
/* BINGO! Enable server */
Conf_Server[i].flags &= ~CONF_SFLAG_DISABLED;
Conf_Server[i].lasttry = 0;
return true;
}
}
@@ -744,7 +748,6 @@ Set_Defaults(bool InitServers)
strcpy(Conf_ServerAdminMail, "");
snprintf(Conf_ServerInfo, sizeof Conf_ServerInfo, "%s %s",
PACKAGE_NAME, PACKAGE_VERSION);
strcpy(Conf_Network, "");
free(Conf_ListenAddress);
Conf_ListenAddress = NULL;
array_free(&Conf_ListenPorts);
@@ -797,7 +800,7 @@ Set_Defaults(bool InitServers)
#endif
strcpy(Conf_IncludeDir, "");
Conf_MorePrivacy = false;
Conf_NoticeBeforeRegistration = false;
Conf_NoticeAuth = false;
Conf_OperCanMode = false;
Conf_OperChanPAutoOp = true;
Conf_OperServerMode = false;
@@ -807,8 +810,8 @@ Set_Defaults(bool InitServers)
Conf_PAM = false;
#endif
Conf_PAMIsOptional = false;
Conf_ScrubCTCP = false;
#ifdef SYSLOG
Conf_ScrubCTCP = false;
#ifdef LOG_LOCAL5
Conf_SyslogFacility = LOG_LOCAL5;
#else
@@ -1409,7 +1412,6 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
struct group *grp;
size_t len;
const char *section;
char *ptr;
assert(File != NULL);
assert(Line > 0);
@@ -1492,19 +1494,6 @@ Handle_GLOBAL(const char *File, int Line, char *Var, char *Arg )
Using_MotdFile = false;
return;
}
if (strcasecmp(Var, "Network") == 0) {
len = strlcpy(Conf_Network, Arg, sizeof(Conf_Network));
if (len >= sizeof(Conf_Network))
Config_Error_TooLong(File, Line, Var);
ptr = strchr(Conf_Network, ' ');
if (ptr) {
Config_Error(LOG_WARNING,
"%s, line %d: \"Network\" can't contain spaces!",
File, Line);
*ptr = '\0';
}
return;
}
if(strcasecmp(Var, "Password") == 0) {
len = strlcpy(Conf_ServerPwd, Arg, sizeof(Conf_ServerPwd));
if (len >= sizeof(Conf_ServerPwd))
@@ -1797,19 +1786,7 @@ Handle_OPTIONS(const char *File, int Line, char *Var, char *Arg)
return;
}
if (strcasecmp(Var, "NoticeAuth") == 0) {
/*
* TODO: This section and support for "NoticeAuth" variable
* could be removed starting with ngIRCd release 24 (one
* release after marking it "deprecated") ...
*/
Config_Error(LOG_WARNING,
"%s, line %d (section \"Options\"): \"%s\" is deprecated, please use \"NoticeBeforeRegistration\"!",
File, Line, Var);
Conf_NoticeBeforeRegistration = Check_ArgIsTrue(Arg);
return;
}
if (strcasecmp(Var, "NoticeBeforeRegistration") == 0) {
Conf_NoticeBeforeRegistration = Check_ArgIsTrue(Arg);
Conf_NoticeAuth = Check_ArgIsTrue(Arg);
return;
}
if (strcasecmp(Var, "OperCanUseMode") == 0) {

View File

@@ -109,9 +109,6 @@ GLOBAL char Conf_ServerAdmin1[CLIENT_INFO_LEN];
GLOBAL char Conf_ServerAdmin2[CLIENT_INFO_LEN];
GLOBAL char Conf_ServerAdminMail[CLIENT_INFO_LEN];
/** Network name (optional, no spaces allowed) */
GLOBAL char Conf_Network[CLIENT_INFO_LEN];
/** Message of the day (MOTD) of this server */
GLOBAL array Conf_Motd;
@@ -194,8 +191,8 @@ GLOBAL bool Conf_Ident;
/** Enable "more privacy" mode and "censor" some user-related information */
GLOBAL bool Conf_MorePrivacy;
/** Enable "NOTICE *" messages on connect */
GLOBAL bool Conf_NoticeBeforeRegistration;
/** Enable NOTICE AUTH messages on connect */
GLOBAL bool Conf_NoticeAuth;
/** Enable all usage of PAM, even when compiled with support for it */
GLOBAL bool Conf_PAM;

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,21 +20,25 @@
* Functions to deal with character encodings and conversions
*/
#include "imp.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include "defines.h"
#include "conn.h"
#include "log.h"
#include "exp.h"
#include "conn-encoding.h"
#ifdef ICONV
#include "log.h"
#include "conn-encoding.h"
char Encoding_Buffer[COMMAND_LEN];
char *Convert_Message PARAMS((iconv_t Handle, char *Message));
/**
* Set client character encoding on a connection.
*
@@ -129,7 +133,7 @@ Convert_Message(iconv_t Handle, char *Message)
return Encoding_Buffer;
}
#endif /* ICONV */
#endif
/**
* Convert encoding of a message received from a connection.

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,16 +18,18 @@
* Connection management: Global functions
*/
#include "imp.h"
#include <assert.h>
#include <time.h>
#include <string.h>
#include "log.h"
#ifdef DEBUG
# include "log.h"
#endif
#include "conn.h"
#include "client.h"
#include "exp.h"
#include "conn-func.h"
/**
* Update "idle timestamp", the time of the last visible user action
* (e. g. like sending messages, joining or leaving channels).
@@ -71,6 +73,7 @@ Conn_GetIdle( CONN_ID Idx )
return time( NULL ) - My_Connections[Idx].lastprivmsg;
} /* Conn_GetIdle */
GLOBAL time_t
Conn_LastPing( CONN_ID Idx )
{
@@ -78,6 +81,7 @@ Conn_LastPing( CONN_ID Idx )
return My_Connections[Idx].lastping;
} /* Conn_LastPing */
/**
* Add "penalty time" for a connection.
*
@@ -112,6 +116,7 @@ Conn_SetPenalty(CONN_ID Idx, time_t Seconds)
#endif
} /* Conn_SetPenalty */
GLOBAL void
Conn_ClearFlags( void )
{
@@ -120,6 +125,7 @@ Conn_ClearFlags( void )
for( i = 0; i < Pool_Size; i++ ) My_Connections[i].flag = 0;
} /* Conn_ClearFlags */
GLOBAL int
Conn_Flag( CONN_ID Idx )
{
@@ -127,6 +133,7 @@ Conn_Flag( CONN_ID Idx )
return My_Connections[Idx].flag;
} /* Conn_Flag */
GLOBAL void
Conn_SetFlag( CONN_ID Idx, int Flag )
{
@@ -134,11 +141,12 @@ Conn_SetFlag( CONN_ID Idx, int Flag )
My_Connections[Idx].flag = Flag;
} /* Conn_SetFlag */
GLOBAL CONN_ID
Conn_First( void )
{
CONN_ID i;
for( i = 0; i < Pool_Size; i++ )
{
if( My_Connections[i].sock != NONE ) return i;
@@ -146,13 +154,14 @@ Conn_First( void )
return NONE;
} /* Conn_First */
GLOBAL CONN_ID
Conn_Next( CONN_ID Idx )
{
CONN_ID i = NONE;
assert( Idx > NONE );
for( i = Idx + 1; i < Pool_Size; i++ )
{
if( My_Connections[i].sock != NONE ) return i;
@@ -160,6 +169,7 @@ Conn_Next( CONN_ID Idx )
return NONE;
} /* Conn_Next */
GLOBAL UINT16
Conn_Options( CONN_ID Idx )
{
@@ -167,6 +177,7 @@ Conn_Options( CONN_ID Idx )
return My_Connections[Idx].options;
} /* Conn_Options */
/**
* Set connection option.
*/
@@ -177,6 +188,7 @@ Conn_SetOption(CONN_ID Idx, int Option)
Conn_OPTION_ADD(&My_Connections[Idx], Option);
} /* Conn_SetOption */
/**
* Get the start time of the connection.
* The result is the start time in seconds since 1970-01-01, as reported
@@ -212,6 +224,7 @@ Conn_SendQ( CONN_ID Idx )
return array_bytes(&My_Connections[Idx].wbuf);
} /* Conn_SendQ */
/**
* return number of messages sent on this connection so far
*/
@@ -223,6 +236,7 @@ Conn_SendMsg( CONN_ID Idx )
return My_Connections[Idx].msg_out;
} /* Conn_SendMsg */
/**
* return number of (uncompressed) bytes sent
* on this connection so far
@@ -234,6 +248,7 @@ Conn_SendBytes( CONN_ID Idx )
return My_Connections[Idx].bytes_out;
} /* Conn_SendBytes */
/**
* return number of bytes pending in read buffer
*/
@@ -249,6 +264,7 @@ Conn_RecvQ( CONN_ID Idx )
return array_bytes(&My_Connections[Idx].rbuf);
} /* Conn_RecvQ */
/**
* return number of messages received on this connection so far
*/
@@ -259,6 +275,7 @@ Conn_RecvMsg( CONN_ID Idx )
return My_Connections[Idx].msg_in;
} /* Conn_RecvMsg */
/**
* return number of (uncompressed) bytes received on this
* connection so far
@@ -280,16 +297,19 @@ Conn_IPA(CONN_ID Idx)
return ng_ipaddr_tostr(&My_Connections[Idx].addr);
}
GLOBAL void
Conn_ResetWCounter( void )
{
WCounter = 0;
} /* Conn_ResetWCounter */
GLOBAL long
Conn_WCounter( void )
{
return WCounter;
} /* Conn_WCounter */
/* -eof- */

View File

@@ -1,13 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2005-2008 Florian Westphal (fw@strlen.de).
* Copyright (c)2008-2014 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* Please read the file COPYING, README and AUTHORS for more information.
* Copyright (c) 2005-2008 Florian Westphal <fw@strlen.de>
*/
#include "portab.h"
@@ -17,6 +10,7 @@
* SSL wrapper functions
*/
#include "imp.h"
#include "conf-ssl.h"
#ifdef SSL_SUPPORT
@@ -35,6 +29,7 @@
#include "conn-ssl.h"
#include "log.h"
#include "exp.h"
#include "defines.h"
extern struct SSLOptions Conf_SSLOptions;
@@ -317,7 +312,6 @@ ConnSSL_InitLibrary( void )
goto out;
}
SSL_CTX_set_session_id_context(newctx, (unsigned char *)"ngircd", 6);
SSL_CTX_set_options(newctx, SSL_OP_SINGLE_DH_USE|SSL_OP_NO_SSLv2);
SSL_CTX_set_mode(newctx, SSL_MODE_ENABLE_PARTIAL_WRITE);
SSL_CTX_set_verify(newctx, SSL_VERIFY_PEER|SSL_VERIFY_CLIENT_ONCE,
@@ -745,7 +739,7 @@ ConnSSL_InitCertFp( CONNECTION *c )
gnutls_x509_crt_deinit(cert);
return 0;
}
if (gnutls_x509_crt_import(cert, &cert_list[0],
GNUTLS_X509_FMT_DER) != GNUTLS_E_SUCCESS) {
gnutls_x509_crt_deinit(cert);
@@ -912,3 +906,5 @@ ConnSSL_InitLibrary(void)
#endif /* SSL_SUPPORT */
/* -eof- */

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2007 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -9,8 +9,6 @@
* Please read the file COPYING, README and AUTHORS for more information.
*/
#define CONN_MODULE
#include "portab.h"
/**
@@ -18,11 +16,14 @@
* Connection compression using ZLIB
*/
/* Additionan debug messages related to ZIP compression: 0=off / 1=on */
#define DEBUG_ZIP 0
#define CONN_MODULE
#ifdef ZLIB
/* enable more zlib related debug messages: */
/* #define DEBUG_ZLIB */
#include "imp.h"
#include <assert.h>
#include <string.h>
#include <zlib.h>
@@ -30,8 +31,9 @@
#include "conn.h"
#include "conn-func.h"
#include "log.h"
#include "array.h"
#include "array.h"
#include "exp.h"
#include "conn-zip.h"
@@ -141,7 +143,7 @@ Zip_Flush( CONN_ID Idx )
out->next_out = zipbuf;
out->avail_out = (uInt)sizeof zipbuf;
#if DEBUG_ZIP
#ifdef DEBUG_ZIP
Log(LOG_DEBUG, "out->avail_in %d, out->avail_out %d",
out->avail_in, out->avail_out);
#endif
@@ -164,7 +166,7 @@ Zip_Flush( CONN_ID Idx )
assert(out->avail_out <= WRITEBUFFER_SLINK_LEN);
zipbuf_used = WRITEBUFFER_SLINK_LEN - out->avail_out;
#if DEBUG_ZIP
#ifdef DEBUG_ZIP
Log(LOG_DEBUG, "zipbuf_used: %d", zipbuf_used);
#endif
if (!array_catb(&My_Connections[Idx].wbuf,
@@ -175,7 +177,7 @@ Zip_Flush( CONN_ID Idx )
}
My_Connections[Idx].bytes_out += zipbuf_used;
My_Connections[Idx].zip.bytes_out += array_bytes(&My_Connections[Idx].zip.wbuf);
My_Connections[Idx].zip.bytes_out += array_bytes(&My_Connections[Idx].zip.wbuf);
array_trunc(&My_Connections[Idx].zip.wbuf);
return true;
@@ -198,7 +200,7 @@ Unzip_Buffer( CONN_ID Idx )
int unzipbuf_used = 0;
unsigned int z_rdatalen;
unsigned int in_len;
z_stream *in;
assert( Idx > NONE );
@@ -216,7 +218,7 @@ Unzip_Buffer( CONN_ID Idx )
in->next_out = unzipbuf;
in->avail_out = (uInt)sizeof unzipbuf;
#if DEBUG_ZIP
#ifdef DEBUG_ZIP
Log(LOG_DEBUG, "in->avail_in %d, in->avail_out %d",
in->avail_in, in->avail_out);
#endif
@@ -231,7 +233,7 @@ Unzip_Buffer( CONN_ID Idx )
assert(z_rdatalen >= in->avail_in);
in_len = z_rdatalen - in->avail_in;
unzipbuf_used = READBUFFER_LEN - in->avail_out;
#if DEBUG_ZIP
#ifdef DEBUG_ZIP
Log(LOG_DEBUG, "unzipbuf_used: %d - %d = %d", READBUFFER_LEN,
in->avail_out, unzipbuf_used);
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -53,7 +53,7 @@
/* Size of structures */
/** Max. count of configurable servers. */
#define MAX_SERVERS 64
#define MAX_SERVERS 16
/** Max. number of WHOWAS list items that can be stored. */
#define MAX_WHOWAS 64
@@ -109,10 +109,6 @@
#else
# define CLIENT_USER_LEN 10
#endif
/** Max. length of user names saved for authentication (used by PAM) */
#ifdef PAM
# define CLIENT_AUTHUSER_LEN 64
#endif
/** Max. length of "real names" (including NULL). */
#define CLIENT_NAME_LEN 32
@@ -177,7 +173,7 @@
#endif
/** Supported user modes. */
#define USERMODES "abBcCFiIoqrRswx"
#define USERMODES "abBcCioqrRswx"
/** Supported channel modes. */
#define CHANMODES "abehiIklmMnoOPqQrRstvVz"

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,12 +16,14 @@
* Hash calculation
*/
#include "imp.h"
#include <assert.h>
#include <string.h>
#include "defines.h"
#include "tool.h"
#include "exp.h"
#include "hash.h"
static UINT32 jenkins_hash PARAMS((UINT8 *k, UINT32 length, UINT32 initval));

View File

@@ -1,13 +1,11 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2005-2006 Florian Westphal (westphal@foo.fh-furtwangen.de)
* Copyright (c)2006-2014 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* Please read the file COPYING, README and AUTHORS for more information.
*
* Copyright (c) 2005 Florian Westphal (westphal@foo.fh-furtwangen.de)
*/
#include "portab.h"
@@ -17,20 +15,21 @@
* I/O abstraction interface.
*/
/* Extra debug messages in event add/delete/callback code: 0=off / 1=on */
#define DEBUG_IO 0
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "array.h"
#include "io.h"
#include "log.h"
/* Enables extra debug messages in event add/delete/callback code. */
/* #define DEBUG_IO */
typedef struct {
#ifdef PROTOTYPES
void (*callback)(int, short);
@@ -120,7 +119,6 @@ static bool io_event_change_devpoll(int fd, short what);
#endif
#ifdef IO_USE_SELECT
#include <sys/time.h>
#include "defines.h" /* for conn.h */
#include "proc.h" /* for PROC_STAT (needed by conf.h) */
#include "conn.h" /* for CONN_ID (needed by conf.h) */
@@ -144,7 +142,7 @@ static array io_events;
static void io_docallback PARAMS((int fd, short what));
#if DEBUG_IO
#ifdef DEBUG_IO
static void
io_debug(const char *s, int fd, int what)
{

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,19 +16,22 @@
* Handler for IRC capability ("CAP") commands
*/
#include "imp.h"
#include <assert.h>
#include <string.h>
#include <strings.h>
#include "defines.h"
#include "conn.h"
#include "channel.h"
#include "client-cap.h"
#include "irc-macros.h"
#include "irc-write.h"
#include "log.h"
#include "login.h"
#include "messages.h"
#include "parse.h"
#include "exp.h"
#include "irc-cap.h"
/* Local functions */

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,11 +16,13 @@
* IRC channel commands
*/
#include "imp.h"
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "defines.h"
#include "conn.h"
#include "channel.h"
#include "conn-func.h"
@@ -35,6 +37,7 @@
#include "irc-write.h"
#include "conf.h"
#include "exp.h"
#include "irc-channel.h"
/**
@@ -320,9 +323,11 @@ IRC_JOIN( CLIENT *Client, REQUEST *Req )
channame = strtok_r(channame, ",", &lastchan);
/* Make sure that "channame" is not the empty string ("JOIN :") */
if (!channame)
if (!channame) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
while (channame) {
flags = NULL;
@@ -442,13 +447,15 @@ IRC_PART(CLIENT * Client, REQUEST * Req)
chan = strtok(Req->argv[0], ",");
/* Make sure that "chan" is not the empty string ("PART :") */
if (!chan)
if (!chan) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
while (chan) {
Channel_Part(target, Client, chan,
Req->argc > 1 ? Req->argv[1] : "");
Req->argc > 1 ? Req->argv[1] : Client_ID(target));
chan = strtok(NULL, ",");
}
@@ -477,6 +484,8 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
assert( Client != NULL );
assert( Req != NULL );
IRC_SetPenalty(Client, 1);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
chan = Channel_Search(Req->argv[0]);
@@ -573,6 +582,8 @@ IRC_LIST( CLIENT *Client, REQUEST *Req )
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 2);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
if (Req->argc > 0)
@@ -597,10 +608,6 @@ IRC_LIST( CLIENT *Client, REQUEST *Req )
}
}
/* Send list head */
if (!IRC_WriteStrClient(from, RPL_LISTSTART_MSG, Client_ID(from)))
return DISCONNECTED;
while (pattern) {
/* Loop through all the channels */
if (Req->argc > 0)
@@ -612,7 +619,9 @@ IRC_LIST( CLIENT *Client, REQUEST *Req )
/* Gotcha! */
if (!Channel_HasMode(chan, 's')
|| Channel_IsMemberOf(chan, from)
|| Client_HasMode(from, 'o'))
|| (!Conf_MorePrivacy
&& Client_HasMode(Client, 'o')
&& Client_Conn(Client) > NONE))
{
if ((Conf_MaxListSize > 0)
&& IRC_CheckListTooBig(from, count,
@@ -660,9 +669,11 @@ IRC_CHANINFO( CLIENT *Client, REQUEST *Req )
assert( Req != NULL );
/* Bad number of parameters? */
if (Req->argc < 2 || Req->argc == 4 || Req->argc > 5)
if (Req->argc < 2 || Req->argc == 4 || Req->argc > 5) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
/* Compatibility kludge */
if (Req->argc == 5)

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,8 +16,7 @@
* IRC encoding commands
*/
#ifdef ICONV
#include "imp.h"
#include <assert.h>
#include <string.h>
@@ -29,8 +28,11 @@
#include "parse.h"
#include "tool.h"
#include "exp.h"
#include "irc-encoding.h"
#ifdef ICONV
/**
* Handler for the IRC+ "CHARCONV" command.
*

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,12 +16,13 @@
* IRC info commands
*/
#include "imp.h"
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <time.h>
#include "ngircd.h"
#include "conn-func.h"
@@ -29,9 +30,12 @@
#include "channel.h"
#include "class.h"
#include "conf.h"
#include "defines.h"
#include "lists.h"
#include "log.h"
#include "messages.h"
#include "match.h"
#include "tool.h"
#include "parse.h"
#include "irc.h"
#include "irc-macros.h"
@@ -39,6 +43,7 @@
#include "client-cap.h"
#include "op.h"
#include "exp.h"
#include "irc-info.h"
/* Local functions */
@@ -147,6 +152,8 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
assert( Client != NULL );
assert( Chan != NULL );
IRC_SetPenalty(Client, 1);
is_member = Channel_IsMemberOf(Chan, Client);
/* Secret channel? */
@@ -162,7 +169,7 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
if (OnlyOps && !is_ircop)
continue;
is_visible = !Client_HasMode(c, 'i');
is_visible = Client_HasMode(c, 'i');
if (is_member || is_visible) {
memset(flags, 0, sizeof(flags));
@@ -184,7 +191,7 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps)
}
}
/* If there are a lot of clients, increase the penalty a bit */
/* If there are a lot of clients, augment penalty a bit */
if (count > MAX_RPL_WHO)
IRC_SetPenalty(Client, 1);
@@ -313,50 +320,48 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
Client_Info(Client_Introducer(c))))
return DISCONNECTED;
/* Channels, show only if client has no +I or if from is oper */
if(!(Client_HasMode(c, 'I')) || Client_HasMode(from, 'o')) {
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
Client_ID(from), Client_ID(c));
cl2chan = Channel_FirstChannelOf(c);
while (cl2chan) {
chan = Channel_GetChannel(cl2chan);
assert(chan != NULL);
/* Channels */
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
Client_ID(from), Client_ID(c));
cl2chan = Channel_FirstChannelOf(c);
while (cl2chan) {
chan = Channel_GetChannel(cl2chan);
assert(chan != NULL);
/* next */
cl2chan = Channel_NextChannelOf(c, cl2chan);
/* next */
cl2chan = Channel_NextChannelOf(c, cl2chan);
/* Secret channel? */
if (Channel_HasMode(chan, 's')
&& !Channel_IsMemberOf(chan, Client))
continue;
/* Secret channel? */
if (Channel_HasMode(chan, 's')
&& !Channel_IsMemberOf(chan, Client))
continue;
/* Local channel and request is not from a user? */
if (Client_Type(Client) == CLIENT_SERVER
&& Channel_IsLocal(chan))
continue;
/* Local channel and request is not from a user? */
if (Client_Type(Client) == CLIENT_SERVER
&& Channel_IsLocal(chan))
continue;
/* Concatenate channel names */
if (str[strlen(str) - 1] != ':')
strlcat(str, " ", sizeof(str));
/* Concatenate channel names */
if (str[strlen(str) - 1] != ':')
strlcat(str, " ", sizeof(str));
who_flags_qualifier(Client, Channel_UserModes(chan, c),
str, sizeof(str));
strlcat(str, Channel_Name(chan), sizeof(str));
who_flags_qualifier(Client, Channel_UserModes(chan, c),
str, sizeof(str));
strlcat(str, Channel_Name(chan), sizeof(str));
if (strlen(str) > (COMMAND_LEN - CHANNEL_NAME_LEN - 4)) {
/* Line becomes too long: send it! */
if (!IRC_WriteStrClient(Client, "%s", str))
return DISCONNECTED;
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
Client_ID(from), Client_ID(c));
}
}
if(str[strlen(str) - 1] != ':') {
/* There is data left to send: */
if (strlen(str) > (COMMAND_LEN - CHANNEL_NAME_LEN - 4)) {
/* Line becomes too long: send it! */
if (!IRC_WriteStrClient(Client, "%s", str))
return DISCONNECTED;
snprintf(str, sizeof(str), RPL_WHOISCHANNELS_MSG,
Client_ID(from), Client_ID(c));
}
}
if(str[strlen(str) - 1] != ':') {
/* There is data left to send: */
if (!IRC_WriteStrClient(Client, "%s", str))
return DISCONNECTED;
}
/* IRC-Services? */
if (Client_Type(c) == CLIENT_SERVICE &&
@@ -398,16 +403,9 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c)
Client_ID(from), Client_ID(c)))
return DISCONNECTED;
/* Account name metadata? */
if (Client_AccountName(c) &&
!IRC_WriteStrClient(from, RPL_WHOISLOGGEDIN_MSG,
Client_ID(from), Client_ID(c),
Client_AccountName(c)))
return DISCONNECTED;
/* Local client and requester is the user itself or an IRC Op? */
if (Client_Conn(c) > NONE &&
(from == c || Client_HasMode(from, 'o'))) {
(from == c || (!Conf_MorePrivacy && Client_HasMode(from, 'o')))) {
/* Client hostname */
if (!IRC_WriteStrClient(from, RPL_WHOISHOST_MSG,
Client_ID(from), Client_ID(c),
@@ -502,6 +500,8 @@ IRC_ADMIN(CLIENT *Client, REQUEST *Req )
assert( Client != NULL );
assert( Req != NULL );
IRC_SetPenalty(Client, 1);
_IRC_GET_SENDER_OR_RETURN_(prefix, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, prefix)
@@ -544,6 +544,8 @@ IRC_INFO(CLIENT * Client, REQUEST * Req)
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 2);
_IRC_GET_SENDER_OR_RETURN_(prefix, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, prefix)
@@ -558,15 +560,7 @@ IRC_INFO(CLIENT * Client, REQUEST * Req)
NGIRCd_Version))
return DISCONNECTED;
#if defined(BIRTHDATE)
char t_str[60];
time_t t = BIRTHDATE;
(void)strftime(t_str, sizeof(t_str), "%a %b %d %Y at %H:%M:%S (%Z)",
localtime(&t));
snprintf(msg, sizeof(msg), "Birth Date: %s", t_str);
if (!IRC_WriteStrClient(Client, RPL_INFO_MSG, Client_ID(prefix), msg))
return DISCONNECTED;
#elif defined(__DATE__) && defined(__TIME__)
#if defined(__DATE__) && defined(__TIME__)
snprintf(msg, sizeof(msg), "Birth Date: %s at %s", __DATE__, __TIME__);
if (!IRC_WriteStrClient(Client, RPL_INFO_MSG, Client_ID(prefix), msg))
return DISCONNECTED;
@@ -637,6 +631,8 @@ IRC_LINKS(CLIENT *Client, REQUEST *Req)
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 1);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
/* Get pointer to server mask or "*", if none given */
@@ -689,6 +685,8 @@ IRC_LUSERS( CLIENT *Client, REQUEST *Req )
assert( Client != NULL );
assert( Req != NULL );
IRC_SetPenalty(Client, 1);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 1, from)
@@ -718,6 +716,8 @@ IRC_SERVLIST(CLIENT *Client, REQUEST *Req)
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 1);
if (Req->argc < 2 || strcmp(Req->argv[1], "0") == 0) {
for (c = Client_First(); c!= NULL; c = Client_Next(c)) {
if (Client_Type(c) != CLIENT_SERVICE)
@@ -753,6 +753,8 @@ IRC_MOTD( CLIENT *Client, REQUEST *Req )
assert( Client != NULL );
assert( Req != NULL );
IRC_SetPenalty(Client, 3);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, from)
@@ -783,6 +785,8 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req )
assert( Client != NULL );
assert( Req != NULL );
IRC_SetPenalty(Client, 1);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 1, from)
@@ -867,6 +871,8 @@ IRC_STATS( CLIENT *Client, REQUEST *Req )
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 2);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 1, from)
@@ -1007,6 +1013,8 @@ IRC_TIME( CLIENT *Client, REQUEST *Req )
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 1);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, from)
@@ -1040,6 +1048,8 @@ IRC_USERHOST(CLIENT *Client, REQUEST *Req)
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 1);
if (Req->argc > 5)
max = 5;
else
@@ -1100,6 +1110,8 @@ IRC_VERSION( CLIENT *Client, REQUEST *Req )
assert( Client != NULL );
assert( Req != NULL );
IRC_SetPenalty(Client, 1);
_IRC_GET_SENDER_OR_RETURN_(prefix, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, prefix)
@@ -1111,19 +1123,10 @@ IRC_VERSION( CLIENT *Client, REQUEST *Req )
}
/* send version information */
if (!IRC_WriteStrClient(Client, RPL_VERSION_MSG, Client_ID(prefix),
PACKAGE_NAME, PACKAGE_VERSION,
NGIRCd_DebugLevel, Conf_ServerName,
NGIRCd_VersionAddition))
return DISCONNECTED;
#ifndef STRICT_RFC
/* send RPL_ISUPPORT(005) numerics */
if (!IRC_Send_ISUPPORT(prefix))
return DISCONNECTED;
#endif
return CONNECTED;
return IRC_WriteStrClient(Client, RPL_VERSION_MSG, Client_ID(prefix),
PACKAGE_NAME, PACKAGE_VERSION,
NGIRCd_DebugLevel, Conf_ServerName,
NGIRCd_VersionAddition);
} /* IRC_VERSION */
/**
@@ -1142,12 +1145,15 @@ IRC_WHO(CLIENT *Client, REQUEST *Req)
assert (Client != NULL);
assert (Req != NULL);
IRC_SetPenalty(Client, 1);
only_ops = false;
if (Req->argc == 2) {
if (strcmp(Req->argv[1], "o") == 0)
only_ops = true;
#ifdef STRICT_RFC
else {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client),
@@ -1171,6 +1177,7 @@ IRC_WHO(CLIENT *Client, REQUEST *Req)
}
/* No channel or (valid) mask given */
IRC_SetPenalty(Client, 2);
return IRC_WHO_Mask(Client, NULL, only_ops);
} /* IRC_WHO */
@@ -1193,6 +1200,8 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
assert( Client != NULL );
assert( Req != NULL );
IRC_SetPenalty(Client, 1);
/* Wrong number of parameters? */
if (Req->argc < 1)
return IRC_WriteErrClient(Client, ERR_NONICKNAMEGIVEN_MSG,
@@ -1254,7 +1263,6 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req )
continue;
}
got_wildcard = true;
/* Increase penalty for wildcard queries */
IRC_SetPenalty(Client, 3);
for (c = Client_First(); c; c = Client_Next(c)) {
@@ -1560,10 +1568,6 @@ IRC_Send_NAMES(CLIENT * Client, CHANNEL * Chan)
GLOBAL bool
IRC_Send_ISUPPORT(CLIENT * Client)
{
if (Conf_Network[0] && !IRC_WriteStrClient(Client, RPL_ISUPPORTNET_MSG,
Client_ID(Client),
Conf_Network))
return DISCONNECTED;
if (!IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client),
CHANTYPES, CHANTYPES, Conf_MaxJoins))
return DISCONNECTED;

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,14 +16,15 @@
* Login and logout
*/
#include "imp.h"
#include <assert.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <time.h>
#include "conn-func.h"
#include "class.h"
#include "conf.h"
#include "channel.h"
#include "log.h"
@@ -31,9 +32,11 @@
#include "messages.h"
#include "parse.h"
#include "irc.h"
#include "irc-info.h"
#include "irc-macros.h"
#include "irc-write.h"
#include "exp.h"
#include "irc-login.h"
static void Change_Nick PARAMS((CLIENT * Origin, CLIENT * Target, char *NewNick,
@@ -77,6 +80,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
} else if (Client_Type(Client) == CLIENT_UNKNOWN ||
Client_Type(Client) == CLIENT_UNKNOWNSERVER) {
/* Unregistered connection, but wrong number of arguments: */
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
} else {
@@ -172,7 +176,6 @@ GLOBAL bool
IRC_NICK( CLIENT *Client, REQUEST *Req )
{
CLIENT *intr_c, *target, *c;
CHANNEL *chan;
char *nick, *user, *hostname, *modes, *info;
int token, hops;
@@ -196,7 +199,6 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
/* Search "target" client */
if (Client_Type(Client) == CLIENT_SERVER) {
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
target = Client_Search(Req->prefix);
if (!target)
return IRC_WriteErrClient(Client,
@@ -245,7 +247,7 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
#else
Conn_SetAuthPing(Client_Conn(Client), rand());
#endif
Conn_WriteStr(Client_Conn(Client), "PING :%ld",
IRC_WriteStrClient(Client, "PING :%ld",
Conn_GetAuthPing(Client_Conn(Client)));
LogDebug("Connection %d: sent AUTH PING %ld ...",
Client_Conn(Client),
@@ -261,22 +263,6 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
Client_SetType( Client, CLIENT_GOTNICK );
} else {
/* Nickname change */
/* Check that the user isn't on any channels set +N */
if(Client_Type(Client) == CLIENT_USER &&
!Client_HasMode(Client, 'o')) {
chan = Channel_First();
while (chan) {
if(Channel_HasMode(chan, 'N') &&
Channel_IsMemberOf(chan, Client))
return IRC_WriteErrClient(Client,
ERR_NONICKCHANGE_MSG,
Client_ID(Client),
Channel_Name(chan));
chan = Channel_Next(chan);
}
}
Change_Nick(Client, target, Req->argv[0],
Client_Type(Client) == CLIENT_USER ? true : false);
IRC_SetPenalty(target, 2);
@@ -288,9 +274,11 @@ IRC_NICK( CLIENT *Client, REQUEST *Req )
/* Server or service introduces new client */
/* Bad number of parameters? */
if (Req->argc != 2 && Req->argc != 7)
if (Req->argc != 2 && Req->argc != 7) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
if (Req->argc >= 7) {
/* RFC 2813 compatible syntax */
@@ -380,8 +368,6 @@ IRC_SVSNICK(CLIENT *Client, REQUEST *Req)
assert(Client != NULL);
assert(Req != NULL);
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
/* Search the originator */
from = Client_Search(Req->prefix);
if (!from)
@@ -389,9 +375,10 @@ IRC_SVSNICK(CLIENT *Client, REQUEST *Req)
/* Search the target */
target = Client_Search(Req->argv[0]);
if (!target || Client_Type(target) != CLIENT_USER)
if (!target || Client_Type(target) != CLIENT_USER) {
return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,
Client_ID(Client), Req->argv[0]);
}
if (Client_Conn(target) <= NONE) {
/* We have to forward the message to the server handling
@@ -484,7 +471,6 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
Client_Type(Client) == CLIENT_SERVICE) {
/* Server/service updating an user */
_IRC_ARGC_EQ_OR_RETURN_(Client, Req, 4)
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
c = Client_Search(Req->prefix);
if (!c)
@@ -657,8 +643,6 @@ IRC_QUIT( CLIENT *Client, REQUEST *Req )
if (Client_Type(Client) == CLIENT_SERVER) {
/* Server */
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
target = Client_Search(Req->prefix);
if (!target) {
Log(LOG_WARNING,
@@ -747,10 +731,9 @@ IRC_PING(CLIENT *Client, REQUEST *Req)
if (target != Client_ThisServer()) {
/* Ok, we have to forward the PING */
if (Client_Type(Client) == CLIENT_SERVER) {
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
if (Client_Type(Client) == CLIENT_SERVER)
from = Client_Search(Req->prefix);
} else
else
from = Client;
if (!from)
return IRC_WriteErrClient(Client,
@@ -822,8 +805,6 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
/* Forward? */
if (Req->argc == 2 && Client_Type(Client) == CLIENT_SERVER) {
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
target = Client_Search(Req->argv[0]);
if (!target)
return IRC_WriteErrClient(Client, ERR_NOSUCHSERVER_MSG,
@@ -858,14 +839,14 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
if (auth_ping) {
LogDebug("AUTH PONG: waiting for token \"%ld\", got \"%s\" ...",
auth_ping, Req->argv[0]);
if (auth_ping == atol(Req->argv[0])) {
if (auth_ping == atoi(Req->argv[0])) {
Conn_SetAuthPing(conn, 0);
if (Client_Type(Client) == CLIENT_WAITAUTHPING)
Login_User(Client);
} else
if (!IRC_WriteStrClient(Client,
"NOTICE %s :To connect, type /QUOTE PONG %ld",
Client_ID(Client), auth_ping))
"To connect, type /QUOTE PONG %ld",
auth_ping))
return DISCONNECTED;
}
#endif
@@ -873,14 +854,13 @@ IRC_PONG(CLIENT *Client, REQUEST *Req)
if (Client_Type(Client) == CLIENT_SERVER && Conn_LastPing(conn) == 0) {
Log(LOG_INFO,
"Synchronization with \"%s\" done (connection %d): %ld second%s [%ld users, %ld channels].",
Client_ID(Client), conn,
(long)(time(NULL) - Conn_GetSignon(conn)),
Client_ID(Client), conn, time(NULL) - Conn_GetSignon(conn),
time(NULL) - Conn_GetSignon(conn) == 1 ? "" : "s",
Client_UserCount(), Channel_CountVisible(NULL));
Conn_UpdatePing(conn);
} else
LogDebug("Connection %d: received PONG. Lag: %ld seconds.",
conn, (long)(time(NULL) - Conn_LastPing(conn)));
conn, time(NULL) - Conn_LastPing(conn));
return CONNECTED;
} /* IRC_PONG */

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -25,7 +25,8 @@
*/
#define _IRC_ARGC_EQ_OR_RETURN_(Client, Req, Count) \
if (Req->argc != Count) { \
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
IRC_SetPenalty(Client, 2); \
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
Client_ID(Client), Req->command); \
}
@@ -37,7 +38,8 @@ if (Req->argc != Count) { \
*/
#define _IRC_ARGC_LE_OR_RETURN_(Client, Req, Max) \
if (Req->argc > Max) { \
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
IRC_SetPenalty(Client, 2); \
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
Client_ID(Client), Req->command); \
}
@@ -49,7 +51,8 @@ if (Req->argc > Max) { \
*/
#define _IRC_ARGC_GE_OR_RETURN_(Client, Req, Min) \
if (Req->argc < Min) { \
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
IRC_SetPenalty(Client, 2); \
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
Client_ID(Client), Req->command); \
}
@@ -61,19 +64,8 @@ if (Req->argc < Min) { \
*/
#define _IRC_ARGC_BETWEEN_OR_RETURN_(Client, Req, Min, Max) \
if (Req->argc < Min || Req->argc > Max) { \
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
Client_ID(Client), Req->command); \
}
/**
* Make sure that the command has a prefix.
*
* If there is no prefix, send an error to the client and return from
* the function.
*/
#define _IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req) \
if (!Req->prefix) { \
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
IRC_SetPenalty(Client, 2); \
return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
Client_ID(Client), Req->command); \
}
@@ -85,17 +77,13 @@ if (!Req->prefix) { \
* send an error to the client and return from the function.
*/
#define _IRC_GET_SENDER_OR_RETURN_(Sender, Req, Client) \
if (Client_Type(Client) == CLIENT_SERVER) { \
if (!Req->prefix) \
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG, \
Client_ID(Client), Req->command); \
if (Client_Type(Client) == CLIENT_SERVER) \
Sender = Client_Search(Req->prefix); \
} else \
else \
Sender = Client; \
if (!Sender) \
return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG, \
Client_ID(Client), \
Req->prefix ? Req->prefix : "(none)");
return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, \
Client_ID(Client), Req->prefix);
/**
* Get target of an IRC command and make sure that it is a server.
@@ -113,7 +101,7 @@ if (!Req->prefix) { \
if (!Target) \
Target = Client_SearchServer(Req->argv[Argc]); \
if (!Target) \
return IRC_WriteErrClient(From, ERR_NOSUCHSERVER_MSG, \
return IRC_WriteStrClient(From, ERR_NOSUCHSERVER_MSG, \
Client_ID(From), Req->argv[Argc]); \
if (Client_Type(Target) != CLIENT_SERVER) \
Target = Client_Introducer(Target); \

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,18 +18,21 @@
* IRC metadata commands
*/
#include "imp.h"
#include <assert.h>
#include <strings.h>
#include <string.h>
#include <stdio.h>
#include "conn-func.h"
#include "channel.h"
#include "irc-macros.h"
#include "conn-encoding.h"
#include "irc-write.h"
#include "log.h"
#include "messages.h"
#include "parse.h"
#include "tool.h"
#include "exp.h"
#include "irc-metadata.h"
/**
@@ -48,8 +51,6 @@ IRC_METADATA(CLIENT *Client, REQUEST *Req)
assert(Client != NULL);
assert(Req != NULL);
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
prefix = Client_Search(Req->prefix);
if (!prefix)
return IRC_WriteErrClient(Client, ERR_NOSUCHNICK_MSG,

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,11 +16,13 @@
* IRC commands for mode changes (like MODE, AWAY, etc.)
*/
#include "imp.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "defines.h"
#include "conn.h"
#include "channel.h"
#include "irc-macros.h"
@@ -31,6 +33,7 @@
#include "messages.h"
#include "conf.h"
#include "exp.h"
#include "irc-mode.h"
static bool Client_Mode PARAMS((CLIENT *Client, REQUEST *Req, CLIENT *Origin,
@@ -68,13 +71,6 @@ IRC_MODE( CLIENT *Client, REQUEST *Req )
_IRC_GET_SENDER_OR_RETURN_(origin, Req, Client)
/* Test for "fake" MODE commands injected by this local instance,
* for example when handling the "DefaultUserModes" settings.
* This doesn't harm real commands, because prefixes of regular
* clients are checked in Validate_Prefix() and can't be faked. */
if (Req->prefix && Client_Search(Req->prefix) == Client_ThisServer())
Client = Client_Search(Req->prefix);
/* Channel or user mode? */
cl = NULL; chan = NULL;
if (Client_IsValidNick(Req->argv[0]))
@@ -206,7 +202,6 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
case 'b': /* Block private msgs */
case 'C': /* Only messages from clients sharing a channel */
case 'i': /* Invisible */
case 'I': /* Hide channel list from WHOIS */
case 's': /* Server messages */
case 'w': /* Wallops messages */
x[0] = *mode_ptr;
@@ -230,7 +225,6 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
break;
case 'c': /* Receive connect notices */
case 'q': /* KICK-protected user */
case 'F': /* disable flood protection */
/* (only settable by IRC operators!) */
if (!set || Client_Type(Client) == CLIENT_SERVER
|| Client_HasMode(Origin, 'o'))
@@ -363,6 +357,7 @@ Client_Mode( CLIENT *Client, REQUEST *Req, CLIENT *Origin, CLIENT *Target )
Client_Modes(Target));
}
IRC_SetPenalty(Client, 1);
return ok;
} /* Client_Mode */
@@ -379,44 +374,37 @@ Channel_Mode_Answer_Request(CLIENT *Origin, CHANNEL *Channel)
char the_modes[COMMAND_LEN], the_args[COMMAND_LEN], argadd[CLIENT_PASS_LEN];
const char *mode_ptr;
if (!Channel_IsMemberOf(Channel, Origin)) {
/* Not a member: "simple" mode reply */
if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
Client_ID(Origin), Channel_Name(Channel),
Channel_Modes(Channel)))
return DISCONNECTED;
} else {
/* The sender is a member: generate extended reply */
strlcpy(the_modes, Channel_Modes(Channel), sizeof(the_modes));
mode_ptr = the_modes;
the_args[0] = '\0';
/* Member or not? -- That's the question! */
if (!Channel_IsMemberOf(Channel, Origin))
return IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
Client_ID(Origin), Channel_Name(Channel), Channel_Modes(Channel));
while(*mode_ptr) {
switch(*mode_ptr) {
case 'l':
snprintf(argadd, sizeof(argadd), " %lu",
Channel_MaxUsers(Channel));
strlcat(the_args, argadd, sizeof(the_args));
break;
case 'k':
strlcat(the_args, " ", sizeof(the_args));
strlcat(the_args, Channel_Key(Channel),
sizeof(the_args));
break;
}
mode_ptr++;
/* The sender is a member: generate extended reply */
strlcpy(the_modes, Channel_Modes(Channel), sizeof(the_modes));
mode_ptr = the_modes;
the_args[0] = '\0';
while(*mode_ptr) {
switch(*mode_ptr) {
case 'l':
snprintf(argadd, sizeof(argadd), " %lu", Channel_MaxUsers(Channel));
strlcat(the_args, argadd, sizeof(the_args));
break;
case 'k':
strlcat(the_args, " ", sizeof(the_args));
strlcat(the_args, Channel_Key(Channel), sizeof(the_args));
break;
}
if (the_args[0])
strlcat(the_modes, the_args, sizeof(the_modes));
if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
Client_ID(Origin), Channel_Name(Channel),
the_modes))
return DISCONNECTED;
mode_ptr++;
}
if (the_args[0])
strlcat(the_modes, the_args, sizeof(the_modes));
if (!IRC_WriteStrClient(Origin, RPL_CHANNELMODEIS_MSG,
Client_ID(Origin), Channel_Name(Channel),
the_modes))
return DISCONNECTED;
#ifndef STRICT_RFC
/* Channel creation time */
if (!IRC_WriteStrClient(Origin, RPL_CREATIONTIME_MSG,
Client_ID(Origin), Channel_Name(Channel),
Channel_CreationTime(Channel)))
@@ -580,7 +568,6 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
case 'M': /* Only identified nicks can write */
case 'm': /* Moderated */
case 'n': /* Only members can write */
case 'N': /* Can't change nick while on this channel */
case 'Q': /* No kicks */
case 't': /* Topic locked */
if(is_oper || is_machine || is_owner ||
@@ -596,13 +583,9 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
goto chan_exit;
if (!set) {
if (is_oper || is_machine || is_owner ||
is_admin || is_op || is_halfop) {
is_admin || is_op || is_halfop)
x[0] = *mode_ptr;
if (Channel_HasMode(Channel, 'k'))
strlcpy(argadd, "*", sizeof(argadd));
if (arg_arg > mode_arg)
arg_arg++;
} else
else
connected = IRC_WriteErrClient(Origin,
ERR_CHANOPRIVSNEEDED_MSG,
Client_ID(Origin),
@@ -630,6 +613,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
#ifdef STRICT_RFC
/* Only send error message in "strict" mode,
* this is how ircd2.11 and others behave ... */
IRC_SetPenalty(Origin, 2);
connected = IRC_WriteErrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
@@ -674,6 +658,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
#ifdef STRICT_RFC
/* Only send error message in "strict" mode,
* this is how ircd2.11 and others behave ... */
IRC_SetPenalty(Origin, 2);
connected = IRC_WriteErrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
@@ -775,6 +760,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
* mode, because most other servers don't do
* it as well and some clients send "wired"
* MODE commands like "MODE #chan -ooo nick". */
IRC_SetPenalty(Origin, 2);
connected = IRC_WriteErrClient(Origin,
ERR_NEEDMOREPARAMS_MSG,
Client_ID(Origin), Req->command);
@@ -935,6 +921,7 @@ Channel_Mode(CLIENT *Client, REQUEST *Req, CLIENT *Origin, CHANNEL *Channel)
}
}
IRC_SetPenalty(Client, 1);
return connected;
} /* Channel_Mode */
@@ -1018,15 +1005,15 @@ Add_To_List(char what, CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel,
switch (what) {
case 'I':
if (!Channel_AddInvite(Channel, mask, false, Client_ID(Client)))
if (!Channel_AddInvite(Channel, mask, false))
return CONNECTED;
break;
case 'b':
if (!Channel_AddBan(Channel, mask, Client_ID(Client)))
if (!Channel_AddBan(Channel, mask))
return CONNECTED;
break;
case 'e':
if (!Channel_AddExcept(Channel, mask, Client_ID(Client)))
if (!Channel_AddExcept(Channel, mask))
return CONNECTED;
break;
}

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,9 +16,12 @@
* Channel operator commands
*/
#include "imp.h"
#include <assert.h>
#include <string.h>
#include <stdio.h>
#include "defines.h"
#include "conn.h"
#include "channel.h"
#include "irc-macros.h"
@@ -28,6 +31,7 @@
#include "messages.h"
#include "parse.h"
#include "exp.h"
#include "irc-op.h"
/* Local functions */
@@ -118,6 +122,7 @@ IRC_KICK(CLIENT *Client, REQUEST *Req)
nickCount--;
}
} else {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
@@ -150,14 +155,6 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
return IRC_WriteErrClient(from, ERR_NOSUCHNICK_MSG,
Client_ID(Client), Req->argv[0]);
if (Req->argv[1][0] == '&') {
/* Local channel. Make sure the target user is on this server! */
if (Client_Conn(target) == NONE)
return IRC_WriteErrClient(from, ERR_USERNOTONSERV_MSG,
Client_ID(Client),
Req->argv[0]);
}
chan = Channel_Search(Req->argv[1]);
if (chan) {
/* Channel exists. Is the user a valid member of the channel? */
@@ -174,8 +171,7 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
/* Is the channel "invite-only"? */
if (Channel_HasMode(chan, 'i')) {
/* Yes. The user issuing the INVITE command must be
* channel owner/admin/operator/halfop! */
/* Yes. The user must be channel owner/admin/operator/halfop! */
if (!Channel_UserHasMode(chan, from, 'q') &&
!Channel_UserHasMode(chan, from, 'a') &&
!Channel_UserHasMode(chan, from, 'o') &&
@@ -200,7 +196,7 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
if (remember) {
/* We must remember this invite */
if (!Channel_AddInvite(chan, Client_MaskCloaked(target),
true, Client_ID(from)))
true))
return CONNECTED;
}
}
@@ -209,22 +205,21 @@ IRC_INVITE(CLIENT *Client, REQUEST *Req)
Req->argv[0], Req->argv[1]);
/*
* RFC 2812 states:
* 'There is no requirement that the channel [..] must exist or be a
* valid channel'. The problem with this is that this allows the
* "channel" to contain spaces, in which case we must prefix its name
* with a colon to make it clear that it is only a single argument.
* RFC 2812 says:
* 'There is no requirement that the channel [..] must exist or be a valid channel'
* The problem with this is that this allows the "channel" to contain spaces,
* in which case we must prefix its name with a colon to make it clear that
* it is only a single argument.
*/
colon_if_necessary = strchr(Req->argv[1], ' ') ? ":":"";
/* Inform target client */
IRC_WriteStrClientPrefix(target, from, "INVITE %s %s%s", Req->argv[0],
colon_if_necessary, Req->argv[1]);
colon_if_necessary, Req->argv[1]);
if (Client_Conn(target) > NONE) {
/* The target user is local, so we have to send the status code */
if (!IRC_WriteStrClientPrefix(from, target, RPL_INVITING_MSG,
Client_ID(from), Req->argv[0],
colon_if_necessary, Req->argv[1]))
Client_ID(from), Req->argv[0], colon_if_necessary, Req->argv[1]))
return DISCONNECTED;
if (Client_HasMode(target, 'a') &&

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,12 +16,12 @@
* IRC operator commands
*/
#include "imp.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <time.h>
#include "ngircd.h"
#include "conn-func.h"
@@ -38,6 +38,7 @@
#include "messages.h"
#include "op.h"
#include <exp.h>
#include "irc-oper.h"
/**
@@ -47,11 +48,9 @@
static bool
Bad_OperPass(CLIENT *Client, char *errtoken, char *errmsg)
{
Log(LOG_WARNING, "Got invalid OPER from \"%s\": \"%s\" -- %s!",
Log(LOG_WARNING, "Got invalid OPER from \"%s\": \"%s\" -- %s",
Client_Mask(Client), errtoken, errmsg);
/* Increase penalty to slow down possible brute force attacks */
IRC_SetPenalty(Client, 10);
return IRC_WriteStrClient(Client, ERR_PASSWDMISMATCH_MSG,
return IRC_WriteErrClient(Client, ERR_PASSWDMISMATCH_MSG,
Client_ID(Client));
} /* Bad_OperPass */
@@ -209,14 +208,18 @@ IRC_CONNECT(CLIENT * Client, REQUEST * Req)
/* Bad number of parameters? */
if (Req->argc != 1 && Req->argc != 2 && Req->argc != 3 &&
Req->argc != 5 && Req->argc != 6)
Req->argc != 5 && Req->argc != 6) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
/* Invalid port number? */
if ((Req->argc > 1) && atoi(Req->argv[1]) < 1)
if ((Req->argc > 1) && atoi(Req->argv[1]) < 1) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
if (Client_Type(Client) != CLIENT_SERVER
&& !Client_HasMode(Client, 'o'))
@@ -359,7 +362,6 @@ IRC_WALLOPS( CLIENT *Client, REQUEST *Req )
from = Client;
break;
case CLIENT_SERVER:
_IRC_REQUIRE_PREFIX_OR_RETURN_(Client, Req)
from = Client_Search(Req->prefix);
break;
default:
@@ -394,9 +396,11 @@ IRC_xLINE(CLIENT *Client, REQUEST *Req)
assert(Req != NULL);
/* Bad number of parameters? */
if (Req->argc != 1 && Req->argc != 3)
if (Req->argc != 1 && Req->argc != 3) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
from = Op_Check(Client, Req);
if (!from)

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,25 +16,31 @@
* IRC commands for server links
*/
#include "imp.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include "defines.h"
#include "conn.h"
#include "conn-func.h"
#include "conn-zip.h"
#include "conf.h"
#include "channel.h"
#include "lists.h"
#include "log.h"
#include "messages.h"
#include "parse.h"
#include "numeric.h"
#include "ngircd.h"
#include "irc-info.h"
#include "irc-macros.h"
#include "irc-write.h"
#include "op.h"
#include "exp.h"
#include "irc-server.h"
/**
@@ -66,10 +72,12 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
LogDebug("Connection %d: got SERVER command (new server link) ...",
Client_Conn(Client));
if (Req->argc != 2 && Req->argc != 3)
if (Req->argc != 2 && Req->argc != 3) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client),
Req->command);
}
/* Get configuration index of new remote server ... */
for (i = 0; i < MAX_SERVERS; i++)
@@ -177,9 +185,11 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
{
/* New server is being introduced to the network */
if (Req->argc != 4)
if (Req->argc != 4) {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
/* check for existing server with same ID */
if (!Client_CheckID(Client, Req->argv[0]))
@@ -225,9 +235,11 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req )
Client_MyToken(c), Client_Info(c));
return CONNECTED;
} else
} else {
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
} /* IRC_SERVER */
/*

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,6 +16,7 @@
* Sending IRC commands over the network
*/
#include "imp.h"
#include <assert.h>
#ifdef PROTOTYPES
# include <stdarg.h>
@@ -23,10 +24,13 @@
# include <varargs.h>
#endif
#include <stdio.h>
#include <string.h>
#include "defines.h"
#include "conn-func.h"
#include "channel.h"
#include "exp.h"
#include "irc-write.h"
#define SEND_TO_USER 1
@@ -66,7 +70,7 @@ va_dcl
#else
va_start(ap);
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf(buffer, 1000, Format, ap);
va_end(ap);
IRC_SetPenalty(Client, 2);
@@ -103,7 +107,7 @@ va_dcl
#else
va_start(ap);
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf(buffer, 1000, Format, ap);
va_end(ap);
return IRC_WriteStrClientPrefix(Client, Client_ThisServer(),
@@ -144,7 +148,7 @@ va_dcl
#else
va_start( ap );
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf( buffer, 1000, Format, ap );
va_end( ap );
return Conn_WriteStr(Client_Conn(Client_NextHop(Client)), ":%s %s",
@@ -186,7 +190,7 @@ va_dcl
#else
va_start( ap );
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf( buffer, 1000, Format, ap );
va_end( ap );
IRC_WriteStrChannelPrefix(Client, Chan, Client_ThisServer(),
@@ -235,7 +239,7 @@ va_dcl
#else
va_start( ap );
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf( buffer, 1000, Format, ap );
va_end( ap );
Conn_ClearFlags( );
@@ -292,7 +296,7 @@ va_dcl
#else
va_start( ap );
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf( buffer, 1000, Format, ap );
va_end( ap );
IRC_WriteStrServersPrefix(ExceptOf, Client_ThisServer(), "%s", buffer);
@@ -329,7 +333,7 @@ va_dcl
#else
va_start( ap );
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf( buffer, 1000, Format, ap );
va_end( ap );
IRC_WriteStrServersPrefixFlag( ExceptOf, Prefix, '\0', "%s", buffer );
@@ -369,7 +373,7 @@ va_dcl
#else
va_start( ap );
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf( buffer, 1000, Format, ap );
va_end( ap );
IRC_WriteStrServersPrefixFlag_CB(ExceptOf, Prefix, Flag,
@@ -447,7 +451,7 @@ va_dcl
#else
va_start( ap );
#endif
vsnprintf(buffer, sizeof(buffer), Format, ap);
vsnprintf( buffer, 1000, Format, ap );
va_end( ap );
Conn_ClearFlags( );
@@ -509,7 +513,7 @@ va_dcl
#else
va_start(ap);
#endif
vsnprintf(msg, sizeof(msg), Format, ap);
vsnprintf(msg, 1000, Format, ap);
va_end(ap);
for (to=Client_First(); to != NULL; to=Client_Next(to)) {

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,19 +16,17 @@
* IRC commands
*/
#include "imp.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <time.h>
#include "ngircd.h"
#include "conn-func.h"
#include "conf.h"
#include "channel.h"
#ifdef ICONV
# include "conn-encoding.h"
#endif
#include "conn-encoding.h"
#include "defines.h"
#include "irc-macros.h"
#include "irc-write.h"
#include "log.h"
@@ -36,7 +34,9 @@
#include "messages.h"
#include "parse.h"
#include "op.h"
#include "tool.h"
#include "exp.h"
#include "irc.h"
static char *Option_String PARAMS((CONN_ID Idx));
@@ -224,6 +224,8 @@ IRC_TRACE(CLIENT *Client, REQUEST *Req)
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 3);
_IRC_GET_SENDER_OR_RETURN_(from, Req, Client)
_IRC_GET_TARGET_SERVER_OR_RETURN_(target, Req, 0, from)
@@ -240,7 +242,7 @@ IRC_TRACE(CLIENT *Client, REQUEST *Req)
PACKAGE_VERSION, Client_ID(target),
Client_ID(Client_NextHop(target)),
Option_String(idx2),
(long)(time(NULL) - Conn_StartTime(idx2)),
time(NULL) - Conn_StartTime(idx2),
Conn_SendQ(idx), Conn_SendQ(idx2)))
return DISCONNECTED;
@@ -299,6 +301,8 @@ IRC_HELP(CLIENT *Client, REQUEST *Req)
assert(Client != NULL);
assert(Req != NULL);
IRC_SetPenalty(Client, 2);
if ((Req->argc == 0 && array_bytes(&Conf_Helptext) > 0)
|| (Req->argc >= 1 && strcasecmp(Req->argv[0], "Commands") != 0)) {
/* Help text available and requested */
@@ -522,11 +526,12 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
if (Req->argc > 2) {
if (!SendErrors)
return CONNECTED;
IRC_SetPenalty(Client, 2);
return IRC_WriteErrClient(Client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(Client), Req->command);
}
if (Client_Type(Client) == CLIENT_SERVER && Req->prefix)
if (Client_Type(Client) == CLIENT_SERVER)
from = Client_Search(Req->prefix);
else
from = Client;

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* 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
@@ -16,24 +16,29 @@
* Management of IRC lists: ban, invite, etc.
*/
#include "imp.h"
#include <assert.h>
#include "defines.h"
#include "conn.h"
#include "channel.h"
#include "log.h"
#include "match.h"
#include "messages.h"
#include "irc-write.h"
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <time.h>
#include "conn.h"
#include "log.h"
#include "match.h"
#include "exp.h"
#include "lists.h"
struct list_elem {
struct list_elem *next; /** pointer to next list element */
char mask[MASK_LEN]; /** IRC mask */
char *reason; /** Optional "reason" text */
time_t valid_until; /** 0: unlimited; t(>0): until t */
bool onlyonce;
time_t valid_until; /** 0: unlimited; 1: once; t(>1): until t */
};
/**
@@ -66,7 +71,7 @@ Lists_GetReason(const struct list_elem *e)
* Get "validity" value stored in list element.
*
* @param list_elem List element.
* @return Validity: 0=unlimited, >0 until this time stamp.
* @return Validity: 0=unlimited, 1=once, >1 until this time stamp.
*/
GLOBAL time_t
Lists_GetValidity(const struct list_elem *e)
@@ -75,19 +80,6 @@ Lists_GetValidity(const struct list_elem *e)
return e->valid_until;
}
/**
* Get "onlyonce" value stored in list element.
*
* @param list_elem List element.
* @return True if the element was stored for single use, false otherwise.
*/
GLOBAL bool
Lists_GetOnlyOnce(const struct list_elem *e)
{
assert(e != NULL);
return e->onlyonce;
}
/**
* Get first list element of a list.
*
@@ -125,7 +117,7 @@ Lists_GetNext(const struct list_elem *e)
*/
bool
Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
const char *Reason, bool OnlyOnce)
const char *Reason)
{
struct list_elem *e, *newelem;
@@ -162,7 +154,6 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil,
else
newelem->reason = NULL;
newelem->valid_until = ValidUntil;
newelem->onlyonce = OnlyOnce;
newelem->next = e;
h->first = newelem;
@@ -300,7 +291,6 @@ Lists_MakeMask(const char *Pattern, char *mask, size_t len)
strlcpy(mask, Pattern, len - 5);
strlcat(mask, "!*@", len);
strlcat(mask, at, len);
at--; *at = '@';
} else {
/* All parts (nick, user and domain name) are given */
strlcpy(mask, Pattern, len);
@@ -341,10 +331,10 @@ Lists_CheckReason(struct list_head *h, CLIENT *Client, char *reason, size_t len)
while (e) {
next = e->next;
if (MatchCaseInsensitive(e->mask, Client_MaskCloaked(Client))) {
if (Match(e->mask, Client_MaskCloaked(Client))) {
if (len && e->reason)
strlcpy(reason, e->reason, len);
if (e->onlyonce) {
if (e->valid_until == 1) {
/* Entry is valid only once, delete it */
LogDebug("Deleted \"%s\" from list (used).",
e->mask);
@@ -378,7 +368,7 @@ Lists_Expire(struct list_head *h, const char *ListName)
while (e) {
next = e->next;
if (e->valid_until > 0 && e->valid_until < now) {
if (e->valid_until > 1 && e->valid_until < now) {
/* Entry is expired, delete it */
if (e->reason)
Log(LOG_INFO,

View File

@@ -36,8 +36,7 @@ GLOBAL struct list_elem *Lists_CheckDupeMask PARAMS((const struct list_head *hea
const char *mask));
GLOBAL bool Lists_Add PARAMS((struct list_head *h, const char *Mask,
time_t ValidUntil, const char *Reason,
bool OnlyOnce));
time_t ValidUntil, const char *Reason));
GLOBAL void Lists_Del PARAMS((struct list_head *head, const char *Mask));
GLOBAL unsigned long Lists_Count PARAMS((struct list_head *h));
@@ -47,7 +46,6 @@ GLOBAL void Lists_MakeMask PARAMS((const char *Pattern, char *mask, size_t len))
GLOBAL const char *Lists_GetMask PARAMS((const struct list_elem *e));
GLOBAL const char *Lists_GetReason PARAMS((const struct list_elem *e));
GLOBAL time_t Lists_GetValidity PARAMS((const struct list_elem *e));
GLOBAL bool Lists_GetOnlyOnce PARAMS((const struct list_elem *e));
GLOBAL void Lists_Expire PARAMS((struct list_head *h, const char *ListName));

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,29 +16,34 @@
* Logging functions
*/
#include "imp.h"
#include <assert.h>
#include <errno.h>
#ifdef PROTOTYPES
# include <stdarg.h>
# include <stdarg.h>
#else
# include <varargs.h>
# include <varargs.h>
#endif
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#ifdef SYSLOG
# include <syslog.h>
#include <syslog.h>
#endif
#include "ngircd.h"
#include "defines.h"
#include "conn.h"
#include "channel.h"
#include "irc-write.h"
#include "conf.h"
#include "exp.h"
#include "log.h"
static bool Is_Daemon;

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,34 +16,36 @@
* Functions to deal with client logins
*/
#include "imp.h"
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
#include "defines.h"
#include "conn.h"
#include "class.h"
#include "client.h"
#include "client-cap.h"
#include "channel.h"
#include "conf.h"
#include "io.h"
#include "parse.h"
#include "log.h"
#include "messages.h"
#include "ngircd.h"
#include "pam.h"
#include "irc-info.h"
#include "irc-mode.h"
#include "irc-write.h"
#include "exp.h"
#include "login.h"
#ifdef PAM
#include "io.h"
#include "pam.h"
static void cb_Read_Auth_Result PARAMS((int r_fd, UNUSED short events));
#endif
/**
@@ -92,7 +94,7 @@ Login_User(CLIENT * Client)
/* Don't do any PAM authentication at all if PAM is not
* enabled, instead emulate the behavior of the daemon
* compiled without PAM support. */
if (strcmp(Conn_Password(conn), Conf_ServerPwd) == 0)
if (strcmp(Conn_Password(conn), Conf_ServerPwd) == 0)
return Login_User_PostAuth(Client);
Client_Reject(Client, "Bad server password", false);
return DISCONNECTED;
@@ -192,7 +194,7 @@ Login_User_PostAuth(CLIENT *Client)
/* Set default user modes */
if (Conf_DefaultUserModes[0]) {
snprintf(modes, sizeof(modes), "+%s", Conf_DefaultUserModes);
Req.prefix = Client_ID(Client_ThisServer());
Req.prefix = Client_ThisServer();
Req.command = "MODE";
Req.argc = 2;
Req.argv[0] = Client_ID(Client);

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,13 +16,15 @@
* Wildcard pattern matching
*/
#include "imp.h"
#include <assert.h>
#include <string.h>
#include "exp.h"
#include "match.h"
#include "defines.h"
#include "tool.h"
#include "match.h"
/*
* The pattern matching functions [Matche(), Matche_After_Star()] are based
@@ -30,9 +32,11 @@
* "public domain": <http://c.snippets.org/snip_lister.php?fname=match.c>
*/
static int Matche PARAMS(( const char *p, const char *t ));
static int Matche_After_Star PARAMS(( const char *p, const char *t ));
#define MATCH_PATTERN 6 /**< bad pattern */
#define MATCH_LITERAL 5 /**< match failure on literal match */
#define MATCH_RANGE 4 /**< match failure on [..] construct */
@@ -40,6 +44,7 @@ static int Matche_After_Star PARAMS(( const char *p, const char *t ));
#define MATCH_END 2 /**< premature end of pattern string */
#define MATCH_VALID 1 /**< valid match */
/**
* Match string with pattern.
*
@@ -50,12 +55,11 @@ static int Matche_After_Star PARAMS(( const char *p, const char *t ));
GLOBAL bool
Match( const char *Pattern, const char *String )
{
if (Matche(Pattern, String) == MATCH_VALID)
return true;
else
return false;
if( Matche( Pattern, String ) == MATCH_VALID ) return true;
else return false;
} /* Match */
/**
* Match string with pattern case-insensitive.
*
@@ -66,14 +70,13 @@ Match( const char *Pattern, const char *String )
GLOBAL bool
MatchCaseInsensitive(const char *Pattern, const char *String)
{
char needle[COMMAND_LEN], haystack[COMMAND_LEN];
char haystack[COMMAND_LEN];
strlcpy(needle, Pattern, sizeof(needle));
strlcpy(haystack, String, sizeof(haystack));
return Match(ngt_LowerStr(needle), ngt_LowerStr(haystack));
return Match(Pattern, ngt_LowerStr(haystack));
} /* MatchCaseInsensitive */
/**
* Match string with pattern case-insensitive.
*
@@ -86,23 +89,31 @@ GLOBAL bool
MatchCaseInsensitiveList(const char *Pattern, const char *String,
const char *Separator)
{
char tmp_pattern[COMMAND_LEN], *ptr;
char tmp_pattern[COMMAND_LEN], haystack[COMMAND_LEN], *ptr;
strlcpy(tmp_pattern, Pattern, sizeof(tmp_pattern));
strlcpy(haystack, String, sizeof(haystack));
ngt_LowerStr(haystack);
ptr = strtok(tmp_pattern, Separator);
while (ptr) {
ngt_TrimStr(ptr);
if (MatchCaseInsensitive(ptr, String))
if (Match(ptr, haystack))
return true;
ptr = strtok(NULL, Separator);
}
return false;
} /* MatchCaseInsensitive */
static int
Matche( const char *p, const char *t )
{
register char range_start, range_end;
bool invert;
bool member_match;
bool loop;
for( ; *p; p++, t++ )
{
/* if this is the end of the text then this is the end of the match */
@@ -120,7 +131,118 @@ Matche( const char *p, const char *t )
case '*': /* multiple any character match */
return Matche_After_Star( p, t );
default: /* must match this character exactly */
case '[': /* [..] construct, single member/exclusion character match */
/* move to beginning of range */
p++;
/* check if this is a member match or exclusion match */
invert = false;
if( *p == '!' || *p == '^' )
{
invert = true;
p++;
}
/* if closing bracket here or at range start then we have a malformed pattern */
if ( *p == ']' ) return MATCH_PATTERN;
member_match = false;
loop = true;
while( loop )
{
/* if end of construct then loop is done */
if( *p == ']' )
{
loop = false;
continue;
}
/* matching a '!', '^', '-', '\' or a ']' */
if( *p == '\\' ) range_start = range_end = *++p;
else range_start = range_end = *p;
/* if end of pattern then bad pattern (Missing ']') */
if( ! *p ) return MATCH_PATTERN;
/* check for range bar */
if( *++p == '-' )
{
/* get the range end */
range_end = *++p;
/* if end of pattern or construct then bad pattern */
if( range_end == '\0' || range_end == ']' ) return MATCH_PATTERN;
/* special character range end */
if( range_end == '\\' )
{
range_end = *++p;
/* if end of text then we have a bad pattern */
if ( ! range_end ) return MATCH_PATTERN;
}
/* move just beyond this range */
p++;
}
/* if the text character is in range then match found. make sure the range
* letters have the proper relationship to one another before comparison */
if( range_start < range_end )
{
if( *t >= range_start && *t <= range_end )
{
member_match = true;
loop = false;
}
}
else
{
if( *t >= range_end && *t <= range_start )
{
member_match = true;
loop = false;
}
}
}
/* if there was a match in an exclusion set then no match */
/* if there was no match in a member set then no match */
if(( invert && member_match ) || ! ( invert || member_match )) return MATCH_RANGE;
/* if this is not an exclusion then skip the rest of the [...]
* construct that already matched. */
if( member_match )
{
while( *p != ']' )
{
/* bad pattern (Missing ']') */
if( ! *p ) return MATCH_PATTERN;
/* skip exact match */
if( *p == '\\' )
{
p++;
/* if end of text then we have a bad pattern */
if( ! *p ) return MATCH_PATTERN;
}
/* move to next pattern char */
p++;
}
}
break;
case '\\': /* next character is quoted and must match exactly */
/* move pattern pointer to quoted char and fall through */
p++;
/* if end of text then we have a bad pattern */
if( ! *p ) return MATCH_PATTERN;
/* must match this character exactly */
default:
if( *p != *t ) return MATCH_LITERAL;
}
}
@@ -130,6 +252,7 @@ Matche( const char *p, const char *t )
else return MATCH_VALID;
} /* Matche */
static int
Matche_After_Star( const char *p, const char *t )
{
@@ -179,4 +302,5 @@ Matche_After_Star( const char *p, const char *t )
return match;
} /* Matche_After_Star */
/* -eof- */

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -21,7 +21,6 @@
#define RPL_YOURHOST_MSG "002 %s :Your host is %s, running version ngircd-%s (%s/%s/%s)"
#define RPL_CREATED_MSG "003 %s :This server has been started %s"
#define RPL_MYINFO_MSG "004 %s %s ngircd-%s %s %s"
#define RPL_ISUPPORTNET_MSG "005 %s NETWORK=%s :is my network name"
#define RPL_ISUPPORT1_MSG "005 %s RFC2812 IRCD=ngIRCd CHARSET=UTF-8 CASEMAPPING=ascii PREFIX=(qaohv)~&@%%+ CHANTYPES=%s CHANMODES=beI,k,l,imMnOPQRstVz CHANLIMIT=%s:%d :are supported on this server"
#define RPL_ISUPPORT2_MSG "005 %s CHANNELLEN=%d NICKLEN=%d TOPICLEN=%d AWAYLEN=%d KICKLEN=%d MODES=%d MAXLIST=beI:%d EXCEPTS=e INVEX=I PENALTY :are supported on this server"
@@ -67,20 +66,18 @@
#define RPL_WHOISIDLE_MSG "317 %s %s %lu %lu :seconds idle, signon time"
#define RPL_ENDOFWHOIS_MSG "318 %s %s :End of WHOIS list"
#define RPL_WHOISCHANNELS_MSG "319 %s %s :"
#define RPL_LISTSTART_MSG "321 %s Channel :Users Name"
#define RPL_LIST_MSG "322 %s %s %ld :%s"
#define RPL_LISTEND_MSG "323 %s :End of LIST"
#define RPL_CHANNELMODEIS_MSG "324 %s %s +%s"
#define RPL_CREATIONTIME_MSG "329 %s %s %ld"
#define RPL_WHOISLOGGEDIN_MSG "330 %s %s %s :is logged in as"
#define RPL_NOTOPIC_MSG "331 %s %s :No topic is set"
#define RPL_TOPIC_MSG "332 %s %s :%s"
#define RPL_TOPICSETBY_MSG "333 %s %s %s %u"
#define RPL_WHOISBOT_MSG "335 %s %s :is an IRC Bot"
#define RPL_WHOISBOT_MSG "335 %s %s :is a IRC Bot"
#define RPL_INVITING_MSG "341 %s %s %s%s"
#define RPL_INVITELIST_MSG "346 %s %s %s %s %d"
#define RPL_INVITELIST_MSG "346 %s %s %s"
#define RPL_ENDOFINVITELIST_MSG "347 %s %s :End of channel invite list"
#define RPL_EXCEPTLIST_MSG "348 %s %s %s %s %d"
#define RPL_EXCEPTLIST_MSG "348 %s %s %s"
#define RPL_ENDOFEXCEPTLIST_MSG "349 %s %s :End of channel exception list"
#define RPL_VERSION_MSG "351 %s %s-%s.%s %s :%s"
#define RPL_WHOREPLY_MSG "352 %s %s %s %s %s %s %s :%d %s"
@@ -88,7 +85,7 @@
#define RPL_LINKS_MSG "364 %s %s %s :%d %s"
#define RPL_ENDOFLINKS_MSG "365 %s %s :End of LINKS list"
#define RPL_ENDOFNAMES_MSG "366 %s %s :End of NAMES list"
#define RPL_BANLIST_MSG "367 %s %s %s %s %d"
#define RPL_BANLIST_MSG "367 %s %s %s"
#define RPL_ENDOFBANLIST_MSG "368 %s %s :End of channel ban list"
#define RPL_ENDOFWHOWAS_MSG "369 %s %s :End of WHOWAS list"
#define RPL_INFO_MSG "371 %s :%s"
@@ -127,7 +124,6 @@
#define ERR_USERONCHANNEL_MSG "443 %s %s %s :is already on channel"
#define ERR_SUMMONDISABLED_MSG "445 %s :SUMMON has been disabled"
#define ERR_USERSDISABLED_MSG "446 %s :USERS has been disabled"
#define ERR_NONICKCHANGE_MSG "447 %s :Cannot change nickname while on %s(+N)"
#define ERR_NOTREGISTERED_MSG "451 %s :Connection not registered"
#define ERR_NOTREGISTEREDSERVER_MSG "451 %s :Connection not registered as server link"
#define ERR_NEEDMOREPARAMS_MSG "461 %s %s :Syntax error"
@@ -143,7 +139,7 @@
#define ERR_BADCHANNELKEY_MSG "475 %s %s :Cannot join channel (+k) -- Wrong channel key"
#define ERR_NOCHANMODES_MSG "477 %s %s :Channel doesn't support modes"
#define ERR_NEEDREGGEDNICK_MSG "477 %s %s :Cannot send to channel (+M) -- You need to be identified to a registered account to message this channel"
#define ERR_LISTFULL_MSG "478 %s %s %s :Channel list is full (%d)"
#define ERR_LISTFULL_MSG "478 %s %s %s: Channel list is full (%d)"
#define ERR_NOPRIVILEGES_MSG "481 %s :Permission denied"
#define ERR_CHANOPRIVSNEEDED_MSG "482 %s %s :You are not channel operator"
#define ERR_CHANOPPRIVTOOLOW_MSG "482 %s %s :Your privileges are too low"
@@ -158,7 +154,6 @@
#define ERR_UMODEUNKNOWNFLAG_MSG "501 %s :Unknown mode"
#define ERR_UMODEUNKNOWNFLAG2_MSG "501 %s :Unknown mode \"%c%c\""
#define ERR_USERSDONTMATCH_MSG "502 %s :Can't set/get mode for other users"
#define ERR_USERNOTONSERV_MSG "504 %s %s :User is not on this server"
#define ERR_NOINVITE_MSG "518 %s :Cannot invite to %s (+V)"
#ifdef ZLIB

View File

@@ -17,10 +17,12 @@
* by the loader of the operating system.
*/
#include "imp.h"
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
@@ -34,16 +36,23 @@
#include <mcheck.h>
#endif
#include "defines.h"
#include "conn.h"
#include "class.h"
#include "conf-ssl.h"
#include "channel.h"
#include "conf.h"
#include "lists.h"
#include "log.h"
#include "parse.h"
#include "sighandlers.h"
#include "io.h"
#include "irc.h"
#include "exp.h"
#include "ngircd.h"
static void Show_Version PARAMS(( void ));
static void Show_Help PARAMS(( void ));
@@ -530,7 +539,7 @@ Pidfile_Create(pid_t pid)
close(pidfd);
return;
}
if (write(pidfd, pidbuf, (size_t)len) != (ssize_t)len)
Log(LOG_ERR, "Can't write PID file (%s): %s!", Conf_PidFile,
strerror(errno));
@@ -721,10 +730,9 @@ NGIRCd_Init(bool NGIRCd_NoDaemon)
Log(LOG_ERR, "Can't change group ID to %s(%u): %s!",
grp ? grp->gr_name : "?", Conf_GID,
strerror(real_errno));
if (real_errno != EPERM)
if (real_errno != EPERM)
goto out;
}
#ifdef HAVE_SETGROUPS
if (setgroups(0, NULL) != 0) {
real_errno = errno;
Log(LOG_ERR, "Can't drop supplementary group IDs: %s!",
@@ -732,10 +740,6 @@ NGIRCd_Init(bool NGIRCd_NoDaemon)
if (real_errno != EPERM)
goto out;
}
#else
Log(LOG_WARNING,
"Can't drop supplementary group IDs: setgroups(3) missing!");
#endif
}
#endif

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2008 Alexander Barton (alex@barton.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,23 +16,29 @@
* Handlers for IRC numerics sent to the server
*/
#include "imp.h"
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "conn-func.h"
#include "defines.h"
#include "conn.h"
#include "conf.h"
#include "conn.h"
#include "conn-func.h"
#include "channel.h"
#include "class.h"
#include "irc-write.h"
#include "lists.h"
#include "log.h"
#include "messages.h"
#include "parse.h"
#include "exp.h"
#include "numeric.h"
/**
* Announce a channel and its users in the network.
*/
@@ -111,6 +117,7 @@ Announce_Channel(CLIENT *Client, CHANNEL *Chan)
return CONNECTED;
} /* Announce_Channel */
/**
* Announce new server in the network
* @param Client New server
@@ -142,30 +149,11 @@ Announce_Server(CLIENT * Client, CLIENT * Server)
Client_MyToken(Server), Client_Info(Server));
} /* Announce_Server */
#ifdef IRCPLUS
/**
* Send a specific list to a remote server.
*/
static bool
Send_List(CLIENT *Client, CHANNEL *Chan, struct list_head *Head, char Type)
{
struct list_elem *elem;
elem = Lists_GetFirst(Head);
while (elem) {
if (!IRC_WriteStrClient(Client, "MODE %s +%c %s",
Channel_Name(Chan), Type,
Lists_GetMask(elem))) {
return DISCONNECTED;
}
elem = Lists_GetNext(elem);
}
return CONNECTED;
}
/**
* Synchronize invite, ban, except, and G-Line lists between servers.
* Synchronize invite, ban, G- and K-Line lists between servers.
*
* @param Client New server.
* @return CONNECTED or DISCONNECTED.
@@ -185,7 +173,7 @@ Synchronize_Lists(CLIENT * Client)
while (elem) {
if (!IRC_WriteStrClient(Client, "GLINE %s %ld :%s",
Lists_GetMask(elem),
(long)(Lists_GetValidity(elem) - time(NULL)),
Lists_GetValidity(elem) - time(NULL),
Lists_GetReason(elem)))
return DISCONNECTED;
elem = Lists_GetNext(elem);
@@ -193,17 +181,36 @@ Synchronize_Lists(CLIENT * Client)
c = Channel_First();
while (c) {
if (!Send_List(Client, c, Channel_GetListExcepts(c), 'e'))
return DISCONNECTED;
if (!Send_List(Client, c, Channel_GetListBans(c), 'b'))
return DISCONNECTED;
if (!Send_List(Client, c, Channel_GetListInvites(c), 'I'))
return DISCONNECTED;
/* ban list */
head = Channel_GetListBans(c);
elem = Lists_GetFirst(head);
while (elem) {
if (!IRC_WriteStrClient(Client, "MODE %s +b %s",
Channel_Name(c),
Lists_GetMask(elem))) {
return DISCONNECTED;
}
elem = Lists_GetNext(elem);
}
/* invite list */
head = Channel_GetListInvites(c);
elem = Lists_GetFirst(head);
while (elem) {
if (!IRC_WriteStrClient(Client, "MODE %s +I %s",
Channel_Name(c),
Lists_GetMask(elem))) {
return DISCONNECTED;
}
elem = Lists_GetNext(elem);
}
c = Channel_Next(c);
}
return CONNECTED;
}
/**
* Send CHANINFO commands to a new server (inform it about existing channels).
* @param Client New server
@@ -216,8 +223,7 @@ Send_CHANINFO(CLIENT * Client, CHANNEL * Chan)
bool has_k, has_l;
#ifdef DEBUG
Log(LOG_DEBUG, "Sending CHANINFO commands for \"%s\" ...",
Channel_Name(Chan));
Log(LOG_DEBUG, "Sending CHANINFO commands ...");
#endif
modes = Channel_Modes(Chan);
@@ -249,6 +255,7 @@ Send_CHANINFO(CLIENT * Client, CHANNEL * Chan)
#endif /* IRCPLUS */
/**
* Handle ENDOFMOTD (376) numeric and login remote server.
* The peer is either an IRC server (no IRC+ protocol), or we got the
@@ -342,6 +349,7 @@ IRC_Num_ENDOFMOTD(CLIENT * Client, UNUSED REQUEST * Req)
return CONNECTED;
} /* IRC_Num_ENDOFMOTD */
/**
* Handle ISUPPORT (005) numeric.
*/
@@ -377,4 +385,5 @@ IRC_Num_ISUPPORT(CLIENT * Client, REQUEST * Req)
return CONNECTED;
} /* IRC_Num_ISUPPORT */
/* -eof- */

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,7 +16,9 @@
* IRC operator functions
*/
#include "imp.h"
#include <assert.h>
#include <string.h>
#include "conn.h"
#include "channel.h"
@@ -26,8 +28,10 @@
#include "messages.h"
#include "irc-write.h"
#include <exp.h>
#include "op.h"
/**
* Return and log a "no privileges" message.
*/
@@ -40,18 +44,19 @@ Op_NoPrivileges(CLIENT * Client, REQUEST * Req)
from = Client_Search(Req->prefix);
if (from) {
Log(LOG_NOTICE, "No privileges: client \"%s\" (%s), command \"%s\"!",
Log(LOG_NOTICE, "No privileges: client \"%s\" (%s), command \"%s\"",
Req->prefix, Client_Mask(Client), Req->command);
return IRC_WriteErrClient(from, ERR_NOPRIVILEGES_MSG,
Client_ID(from));
} else {
Log(LOG_NOTICE, "No privileges: client \"%s\", command \"%s\"!",
Log(LOG_NOTICE, "No privileges: client \"%s\", command \"%s\"",
Client_Mask(Client), Req->command);
return IRC_WriteErrClient(Client, ERR_NOPRIVILEGES_MSG,
Client_ID(Client));
}
} /* Op_NoPrivileges */
/**
* Check that the originator of a request is an IRC operator and allowed
* to administer this server.
@@ -89,4 +94,5 @@ Op_Check(CLIENT * Client, REQUEST * Req)
return c;
} /* Op_Check */
/* -eof- */

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2010 Alexander Barton (alex@barton.de).
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -18,21 +18,26 @@
* PAM User Authentication
*/
#include "imp.h"
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_SECURITY_PAM_APPL_H
# include <security/pam_appl.h>
#endif
#ifdef HAVE_PAM_PAM_APPL_H
# include <pam/pam_appl.h>
#endif
#include "defines.h"
#include "log.h"
#include "conn.h"
#include "client.h"
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_SECURITY_PAM_APPL_H
#include <security/pam_appl.h>
#endif
#ifdef HAVE_PAM_PAM_APPL_H
#include <pam/pam_appl.h>
#endif
#include "exp.h"
#include "pam.h"
static char *password;
@@ -82,7 +87,7 @@ static struct pam_conv conv = {
};
/**
* Authenticate a connecting client using PAM.
* Authenticate a connectiong client using PAM.
* @param Client The client to authenticate.
* @return true when authentication succeeded, false otherwise.
*/

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,26 +16,29 @@
* IRC command parser and validator.
*/
#include "imp.h"
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include "ngircd.h"
#include "defines.h"
#include "conn-func.h"
#include "conf.h"
#include "channel.h"
#include "log.h"
#include "messages.h"
#include "tool.h"
#include "exp.h"
#include "parse.h"
#include "imp.h"
#include "irc.h"
#include "irc-cap.h"
#include "irc-channel.h"
#ifdef ICONV
# include "irc-encoding.h"
#endif
#include "irc-encoding.h"
#include "irc-info.h"
#include "irc-login.h"
#include "irc-metadata.h"
@@ -46,6 +49,9 @@
#include "irc-write.h"
#include "numeric.h"
#include "exp.h"
#include "conf.h"
struct _NUMERIC {
int numeric;
bool (*function) PARAMS(( CLIENT *Client, REQUEST *Request ));
@@ -54,81 +60,78 @@ struct _NUMERIC {
static COMMAND My_Commands[] =
{
#define _CMD(name, func, type, min, max, penalty) \
{ (name), (func), (type), (min), (max), (penalty), 0, 0, 0 }
_CMD("ADMIN", IRC_ADMIN, CLIENT_USER|CLIENT_SERVER, 0, 1, 1),
_CMD("AWAY", IRC_AWAY, CLIENT_USER, 0, 1, 0),
_CMD("CAP", IRC_CAP, CLIENT_ANY, 1, 2, 0),
_CMD("CONNECT", IRC_CONNECT, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
{ "ADMIN", IRC_ADMIN, CLIENT_USER|CLIENT_SERVER, 0, 1, 0, 0, 0 },
{ "AWAY", IRC_AWAY, CLIENT_USER, 0, 1, 0, 0, 0 },
{ "CAP", IRC_CAP, CLIENT_ANY, 1, 2, 0, 0, 0 },
{ "CONNECT", IRC_CONNECT, CLIENT_USER|CLIENT_SERVER, 0, -1, 0, 0, 0 },
#ifdef STRICT_RFC
_CMD("DIE", IRC_DIE, CLIENT_USER, 0, 0, 0),
{ "DIE", IRC_DIE, CLIENT_USER, 0, 0, 0, 0, 0 },
#else
_CMD("DIE", IRC_DIE, CLIENT_USER, 0, 1, 0),
{ "DIE", IRC_DIE, CLIENT_USER, 0, 1, 0, 0, 0 },
#endif
_CMD("DISCONNECT", IRC_DISCONNECT, CLIENT_USER, 1, 1, 0),
_CMD("ERROR", IRC_ERROR, CLIENT_ANY, 0, -1, 0),
_CMD("GLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
_CMD("HELP", IRC_HELP, CLIENT_USER, 0, 1, 2),
_CMD("INFO", IRC_INFO, CLIENT_USER|CLIENT_SERVER, 0, 1, 2),
_CMD("INVITE", IRC_INVITE, CLIENT_USER|CLIENT_SERVER, 2, 2, 1),
_CMD("ISON", IRC_ISON, CLIENT_USER, 1, -1, 0),
_CMD("JOIN", IRC_JOIN, CLIENT_USER|CLIENT_SERVER, 1, 2, 0),
_CMD("KICK", IRC_KICK, CLIENT_USER|CLIENT_SERVER, 2, 3, 0),
_CMD("KILL", IRC_KILL, CLIENT_USER|CLIENT_SERVER, 2, 2, 0),
_CMD("KLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
_CMD("LINKS", IRC_LINKS, CLIENT_USER|CLIENT_SERVER, 0, 2, 1),
_CMD("LIST", IRC_LIST, CLIENT_USER|CLIENT_SERVER, 0, 2, 2),
_CMD("LUSERS", IRC_LUSERS, CLIENT_USER|CLIENT_SERVER, 0, 2, 1),
_CMD("METADATA", IRC_METADATA, CLIENT_SERVER, 3, 3, 0),
_CMD("MODE", IRC_MODE, CLIENT_USER|CLIENT_SERVER, 1, -1, 1),
_CMD("MOTD", IRC_MOTD, CLIENT_USER|CLIENT_SERVER, 0, 1, 3),
_CMD("NAMES", IRC_NAMES, CLIENT_USER|CLIENT_SERVER, 0, 2, 1),
_CMD("NICK", IRC_NICK, CLIENT_ANY, 0, -1, 0),
_CMD("NJOIN", IRC_NJOIN, CLIENT_SERVER, 2, 2, 0),
_CMD("NOTICE", IRC_NOTICE, CLIENT_ANY, 0, -1, 0),
_CMD("OPER", IRC_OPER, CLIENT_USER, 2, 2, 0),
_CMD("PART", IRC_PART, CLIENT_USER|CLIENT_SERVER, 1, 2, 0),
_CMD("PASS", IRC_PASS, CLIENT_ANY, 0, -1, 0),
_CMD("PING", IRC_PING, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
_CMD("PONG", IRC_PONG, CLIENT_ANY, 0, -1, 0),
_CMD("PRIVMSG", IRC_PRIVMSG, CLIENT_USER|CLIENT_SERVER, 0, 2, 0),
_CMD("QUIT", IRC_QUIT, CLIENT_ANY, 0, 1, 0),
_CMD("REHASH", IRC_REHASH, CLIENT_USER, 0, 0, 0),
_CMD("RESTART", IRC_RESTART, CLIENT_USER, 0, 0, 0),
_CMD("SERVER", IRC_SERVER, CLIENT_ANY, 0, -1, 0),
_CMD("SERVICE", IRC_SERVICE, CLIENT_ANY, 6, 6, 0),
_CMD("SERVLIST", IRC_SERVLIST, CLIENT_USER, 0, 2, 1),
_CMD("SQUERY", IRC_SQUERY, CLIENT_USER|CLIENT_SERVER, 0, 2, 0),
_CMD("SQUIT", IRC_SQUIT, CLIENT_USER|CLIENT_SERVER, 2, 2, 0),
_CMD("STATS", IRC_STATS, CLIENT_USER|CLIENT_SERVER, 0, 2, 2),
_CMD("SVSNICK", IRC_SVSNICK, CLIENT_SERVER, 2, 2, 0),
_CMD("SUMMON", IRC_SUMMON, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
_CMD("TIME", IRC_TIME, CLIENT_USER|CLIENT_SERVER, 0, 1, 1),
_CMD("TOPIC", IRC_TOPIC, CLIENT_USER|CLIENT_SERVER, 1, 2, 1),
_CMD("TRACE", IRC_TRACE, CLIENT_USER|CLIENT_SERVER, 0, 1, 3),
_CMD("USER", IRC_USER, CLIENT_ANY, 0, -1, 0),
_CMD("USERHOST", IRC_USERHOST, CLIENT_USER, 1, -1, 1),
_CMD("USERS", IRC_USERS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
_CMD("VERSION", IRC_VERSION, CLIENT_USER|CLIENT_SERVER, 0, 1, 1),
_CMD("WALLOPS", IRC_WALLOPS, CLIENT_USER|CLIENT_SERVER, 1, 1, 0),
_CMD("WEBIRC", IRC_WEBIRC, CLIENT_UNKNOWN, 4, 4, 0),
_CMD("WHO", IRC_WHO, CLIENT_USER, 0, 2, 1),
_CMD("WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, -1, 1),
_CMD("WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
{ "DISCONNECT", IRC_DISCONNECT, CLIENT_USER, 1, 1, 0, 0, 0 },
{ "ERROR", IRC_ERROR, CLIENT_ANY, 0, -1, 0, 0, 0 },
{ "GLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, -1, 0, 0, 0 },
{ "HELP", IRC_HELP, CLIENT_USER, 0, 1, 0, 0, 0 },
{ "INFO", IRC_INFO, CLIENT_USER|CLIENT_SERVER, 0, 1, 0, 0, 0 },
{ "INVITE", IRC_INVITE, CLIENT_USER|CLIENT_SERVER, 2, 2, 0, 0, 0 },
{ "ISON", IRC_ISON, CLIENT_USER, 1, -1, 0, 0, 0 },
{ "JOIN", IRC_JOIN, CLIENT_USER|CLIENT_SERVER, 1, 2, 0, 0, 0 },
{ "KICK", IRC_KICK, CLIENT_USER|CLIENT_SERVER, 2, 3, 0, 0, 0 },
{ "KILL", IRC_KILL, CLIENT_USER|CLIENT_SERVER, 2, 2, 0, 0, 0 },
{ "KLINE", IRC_xLINE, CLIENT_USER|CLIENT_SERVER, 0, -1, 0, 0, 0 },
{ "LINKS", IRC_LINKS, CLIENT_USER|CLIENT_SERVER, 0, 2, 0, 0, 0 },
{ "LIST", IRC_LIST, CLIENT_USER|CLIENT_SERVER, 0, 2, 0, 0, 0 },
{ "LUSERS", IRC_LUSERS, CLIENT_USER|CLIENT_SERVER, 0, 2, 0, 0, 0 },
{ "METADATA", IRC_METADATA, CLIENT_SERVER, 3, 3, 0, 0, 0 },
{ "MODE", IRC_MODE, CLIENT_USER|CLIENT_SERVER, 1, -1, 0, 0, 0 },
{ "MOTD", IRC_MOTD, CLIENT_USER|CLIENT_SERVER, 0, 1, 0, 0, 0 },
{ "NAMES", IRC_NAMES, CLIENT_USER|CLIENT_SERVER, 0, 2, 0, 0, 0 },
{ "NICK", IRC_NICK, CLIENT_ANY, 0, -1, 0, 0, 0 },
{ "NJOIN", IRC_NJOIN, CLIENT_SERVER, 2, 2, 0, 0, 0 },
{ "NOTICE", IRC_NOTICE, CLIENT_ANY, 0, -1, 0, 0, 0 },
{ "OPER", IRC_OPER, CLIENT_USER, 2, 2, 0, 0, 0 },
{ "PART", IRC_PART, CLIENT_USER|CLIENT_SERVER, 1, 2, 0, 0, 0 },
{ "PASS", IRC_PASS, CLIENT_ANY, 0, -1, 0, 0, 0 },
{ "PING", IRC_PING, CLIENT_USER|CLIENT_SERVER, 0, -1, 0, 0, 0 },
{ "PONG", IRC_PONG, CLIENT_ANY, 0, -1, 0, 0, 0 },
{ "PRIVMSG", IRC_PRIVMSG, CLIENT_USER|CLIENT_SERVER, 0, 2, 0, 0, 0 },
{ "QUIT", IRC_QUIT, CLIENT_ANY, 0, 1, 0, 0, 0 },
{ "REHASH", IRC_REHASH, CLIENT_USER, 0, 0, 0, 0, 0 },
{ "RESTART", IRC_RESTART, CLIENT_USER, 0, 0, 0, 0, 0 },
{ "SERVER", IRC_SERVER, CLIENT_ANY, 0, -1, 0, 0, 0 },
{ "SERVICE", IRC_SERVICE, CLIENT_ANY, 6, 6, 0, 0, 0 },
{ "SERVLIST", IRC_SERVLIST, CLIENT_USER, 0, 2, 0, 0, 0 },
{ "SQUERY", IRC_SQUERY, CLIENT_USER|CLIENT_SERVER, 0, 2, 0, 0, 0 },
{ "SQUIT", IRC_SQUIT, CLIENT_USER|CLIENT_SERVER, 2, 2, 0, 0, 0 },
{ "STATS", IRC_STATS, CLIENT_USER|CLIENT_SERVER, 0, 2, 0, 0, 0 },
{ "SVSNICK", IRC_SVSNICK, CLIENT_SERVER, 2, 2, 0, 0, 0 },
{ "SUMMON", IRC_SUMMON, CLIENT_USER|CLIENT_SERVER, 0, -1, 0, 0, 0 },
{ "TIME", IRC_TIME, CLIENT_USER|CLIENT_SERVER, 0, 1, 0, 0, 0 },
{ "TOPIC", IRC_TOPIC, CLIENT_USER|CLIENT_SERVER, 1, 2, 0, 0, 0 },
{ "TRACE", IRC_TRACE, CLIENT_USER|CLIENT_SERVER, 0, 1, 0, 0, 0 },
{ "USER", IRC_USER, CLIENT_ANY, 0, -1, 0, 0, 0 },
{ "USERHOST", IRC_USERHOST, CLIENT_USER, 1, -1, 0, 0, 0 },
{ "USERS", IRC_USERS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0, 0, 0 },
{ "VERSION", IRC_VERSION, CLIENT_USER|CLIENT_SERVER, 0, 1, 0, 0, 0 },
{ "WALLOPS", IRC_WALLOPS, CLIENT_USER|CLIENT_SERVER, 1, 1, 0, 0, 0 },
{ "WEBIRC", IRC_WEBIRC, CLIENT_UNKNOWN, 4, 4, 0, 0, 0 },
{ "WHO", IRC_WHO, CLIENT_USER, 0, 2, 0, 0, 0 },
{ "WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0, 0, 0 },
{ "WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0, 0, 0 },
#ifdef IRCPLUS
_CMD("CHANINFO", IRC_CHANINFO, CLIENT_SERVER, 0, -1, 0),
{ "CHANINFO", IRC_CHANINFO, CLIENT_SERVER, 0, -1, 0, 0, 0 },
# ifdef ICONV
_CMD("CHARCONV", IRC_CHARCONV, CLIENT_USER, 1, 1, 0),
{ "CHARCONV", IRC_CHARCONV, CLIENT_USER, 1, 1, 0, 0, 0 },
# endif
#endif
#ifndef STRICT_RFC
_CMD("GET", IRC_QUIT_HTTP, CLIENT_UNKNOWN, 0, -1, 0),
_CMD("POST", IRC_QUIT_HTTP, CLIENT_UNKNOWN, 0, -1, 0),
{ "GET", IRC_QUIT_HTTP, CLIENT_UNKNOWN, 0, -1, 0, 0, 0 },
{ "POST", IRC_QUIT_HTTP, CLIENT_UNKNOWN, 0, -1, 0, 0, 0 },
#endif
_CMD(NULL, NULL, 0, 0, 0, 0) /* End-Mark */
#undef _CMD
{ NULL, NULL, 0x0, 0, 0, 0, 0, 0 } /* End-Mark */
};
static void Init_Request PARAMS(( REQUEST *Req ));
@@ -156,7 +159,7 @@ Parse_GetCommandStruct( void )
/**
* Parse a command ("request") received from a client.
*
*
* This function is called after the connection layer received a valid CR+LF
* terminated line of text: we assume that this is a valid IRC command and
* try to do something useful with it :-)
@@ -461,10 +464,10 @@ Handle_Numeric(CLIENT *client, REQUEST *Req)
}
/* Determine source */
if (!Req->prefix) {
Log(LOG_WARNING,
"Got status code %s from \"%s\" without prefix!?",
Req->command, Client_ID(client));
if (! Req->prefix[0]) {
/* Oops, no prefix!? */
Log(LOG_WARNING, "Got status code %s from \"%s\" without prefix!?",
Req->command, Client_ID(client));
return true;
}
@@ -527,13 +530,12 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
Client_ID(client));
}
if (cmd->penalty)
IRC_SetPenalty(client, cmd->penalty);
if (Req->argc < cmd->min_argc ||
(cmd->max_argc != -1 && Req->argc > cmd->max_argc))
return IRC_WriteErrClient(client, ERR_NEEDMOREPARAMS_MSG,
(cmd->max_argc != -1 && Req->argc > cmd->max_argc)) {
IRC_SetPenalty(client, 2);
return IRC_WriteStrClient(client, ERR_NEEDMOREPARAMS_MSG,
Client_ID(client), Req->command);
}
/* Command is allowed for this client: call it and count
* generated bytes in output */

View File

@@ -37,7 +37,6 @@ typedef struct _COMMAND
CLIENT_TYPE type; /**< Valid client types (bit mask) */
int min_argc; /**< Min parameters */
int max_argc; /**< Max parameters */
int penalty; /**< Penalty for this command */
long lcount, rcount; /**< Number of local and remote calls */
long bytes; /**< Number of bytes created */
} COMMAND;

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* 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
@@ -16,19 +16,20 @@
* Process management
*/
#include "imp.h"
#include <assert.h>
#include <errno.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <time.h>
#include "log.h"
#include "io.h"
#include "sighandlers.h"
#include "conn.h"
#include "exp.h"
#include "sighandlers.h"
#include "proc.h"
/**

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* 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
@@ -18,16 +18,16 @@
* Asynchronous resolver
*/
#include "imp.h"
#include <assert.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <signal.h>
#ifdef IDENTAUTH
#ifdef HAVE_IDENT_H
@@ -35,12 +35,17 @@
#endif
#endif
#include "array.h"
#include "conn.h"
#include "conf.h"
#include "defines.h"
#include "log.h"
#include "ng_ipaddr.h"
#include "exp.h"
#include "resolve.h"
#include "io.h"
static void Do_ResolveAddr PARAMS(( const ng_ipaddr_t *Addr, int Sock, int w_fd ));
static void Do_ResolveName PARAMS(( const char *Host, int w_fd ));
@@ -217,8 +222,8 @@ ReverseLookup(const ng_ipaddr_t *IpAddr, char *resbuf, size_t reslen)
assert(reslen >= NG_INET_ADDRSTRLEN);
ng_ipaddr_tostr_r(IpAddr, tmp_ip_str);
Log_Subprocess(LOG_WARNING, "Can't resolve address \"%s\": %s [%s].",
tmp_ip_str, errmsg, funcname);
Log_Subprocess(LOG_WARNING, "%s: Can't resolve address \"%s\": %s",
funcname, tmp_ip_str, errmsg);
strlcpy(resbuf, tmp_ip_str, reslen);
return false;
}
@@ -334,16 +339,14 @@ static void
Log_Forgery_NoIP(const char *ip, const char *host)
{
Log_Subprocess(LOG_WARNING,
"Possible forgery: %s resolved to \"%s\", which has no IP address!",
ip, host);
"Possible forgery: %s resolved to %s (which has no ip address)", ip, host);
}
static void
Log_Forgery_WrongIP(const char *ip, const char *host)
{
Log_Subprocess(LOG_WARNING,
"Possible forgery: %s resolved to \"%s\", which points to a different address!",
ip, host);
"Possible forgery: %s resolved to %s (which points to different address)", ip, host);
}

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -24,15 +24,15 @@
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include "imp.h"
#include "conn.h"
#include "conf-ssl.h"
#include "channel.h"
#include "conf.h"
#include "io.h"
#include "log.h"
#include "ngircd.h"
#include "sighandlers.h"
static int signalpipe[2];
@@ -48,11 +48,7 @@ Dump_State(void)
{
Log(LOG_DEBUG, "--- Internal server state: %s ---",
Client_ID(Client_ThisServer()));
#ifdef HAVE_LONG_LONG
Log(LOG_DEBUG, "time()=%llu", (unsigned long long)time(NULL));
#else
Log(LOG_DEBUG, "time()=%lu", (unsigned long)time(NULL));
#endif
Log(LOG_DEBUG, "time()=%ld", time(NULL));
Conf_DebugDump();
Conn_DebugDump();
Client_DebugDump();

3
src/portab/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
Makefile.am
portabtest
portabtest.exe

View File

@@ -1,6 +1,6 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@ portabtest_LDFLAGS = -L.
portabtest_LDADD = -lngportab
noinst_HEADERS = portab.h splint.h
noinst_HEADERS = imp.h exp.h portab.h splint.h
maintainer-clean-local:
rm -f Makefile Makefile.in Makefile.am

21
src/portab/exp.h Normal file
View File

@@ -0,0 +1,21 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
*
* 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.
*/
/**
* @file
* "Export Header" which makes sure, that global functions are not "extern".
*/
#undef GLOBAL
#define GLOBAL
/* -eof- */

21
src/portab/imp.h Normal file
View File

@@ -0,0 +1,21 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
*
* 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.
*/
/**
* @file
* "Import Header" which makes sure that global functions are defined "extern".
*/
#undef GLOBAL
#define GLOBAL extern
/* -eof- */

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,6 +23,28 @@
# define NDEBUG
#endif
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
# define NGIRC_GOT_INTTYPES
#else
# ifdef HAVE_STDINT_H
# include <stdint.h>
# define NGIRC_GOT_INTTYPES
# endif
#endif
#ifdef HAVE_STDDEF_H
# include <stddef.h>
#endif
#ifdef HAVE_STDBOOL_H
# include <stdbool.h>
#endif
/* compiler features */
#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 7))
@@ -41,24 +63,9 @@
# endif
#endif
/* datatypes */
#include <sys/types.h>
#ifdef HAVE_STDDEF_H
# include <stddef.h>
#endif
#ifdef HAVE_INTTYPES_H
# include <inttypes.h>
# define NGIRC_GOT_INTTYPES
#else
# ifdef HAVE_STDINT_H
# include <stdint.h>
# define NGIRC_GOT_INTTYPES
# endif
#endif
#ifndef PROTOTYPES
# ifndef signed
# define signed
@@ -77,55 +84,55 @@ typedef unsigned short UINT16;
typedef unsigned int UINT32;
#endif
#ifdef HAVE_STDBOOL_H
# include <stdbool.h>
#else
#ifndef HAVE_STDBOOL_H
typedef unsigned char bool;
# define true (bool)1
# define false (bool)0
#define true (bool)1
#define false (bool)0
#endif
#ifndef NULL
# ifdef PROTOTYPES
# define NULL (void *)0
# else
# define NULL 0L
# endif
#ifdef PROTOTYPES
# define NULL (void *)0
#else
# define NULL 0L
#endif
#endif
#ifdef NeXT
# define S_IRUSR 0000400 /* read permission, owner */
# define S_IWUSR 0000200 /* write permission, owner */
# define S_IRGRP 0000040 /* read permission, group */
# define S_IROTH 0000004 /* read permission, other */
# define ssize_t int
#define S_IRUSR 0000400 /* read permission, owner */
#define S_IWUSR 0000200 /* write permission, owner */
#define S_IRGRP 0000040 /* read permission, group */
#define S_IROTH 0000004 /* read permission, other */
#define ssize_t int
#endif
#undef GLOBAL
#define GLOBAL
/* SPLint */
#ifdef S_SPLINT_S
# include "splint.h"
#include "splint.h"
#endif
/* target constants */
#ifndef HOST_OS
# define HOST_OS "unknown"
#define HOST_OS "unknown"
#endif
#ifndef HOST_CPU
# define HOST_CPU "unknown"
#define HOST_CPU "unknown"
#endif
#ifndef HOST_VENDOR
# define HOST_VENDOR "unknown"
#define HOST_VENDOR "unknown"
#endif
#ifdef __HAIKU__
# define SINGLE_USER_OS
#define SINGLE_USER_OS
#endif
/* configure options */
@@ -164,17 +171,19 @@ extern int vsnprintf PARAMS(( char *str, size_t count, const char *fmt, va_list
#endif
#ifndef HAVE_GAI_STRERROR
# define gai_strerror(r) "unknown error"
#define gai_strerror(r) "unknown error"
#endif
#ifndef PACKAGE_NAME
# define PACKAGE_NAME PACKAGE
#define PACKAGE_NAME PACKAGE
#endif
#ifndef PACKAGE_VERSION
# define PACKAGE_VERSION VERSION
#define PACKAGE_VERSION VERSION
#endif
#endif
/* -eof- */

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 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
@@ -16,188 +16,50 @@
* Test program for portab.h and friends ;-)
*/
#include "imp.h"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "exp.h"
int allow_severity = 0, deny_severity = 0;
static void
Panic(char *Reason)
{
/* Oops, something failed!? */
fprintf(stderr, "Oops, test for %s failed!?\n", Reason);
exit(1);
} /* Panic */
static void
Check_snprintf(void)
{
char str[5];
static void Panic PARAMS (( char *Reason, int Code ));
snprintf(str, sizeof(str), "%s", "1234567890");
if (str[4] != '\0')
Panic("snprintf NULL byte");
if (strlen(str) != 4)
Panic("snprintf string length");
}
static void
Check_strdup(void)
{
char *ptr;
ptr = strdup("1234567890");
if (!ptr)
Panic("strdup");
if (ptr[10] != '\0')
Panic("strdup NULL byte");
if (strlen(ptr) != 10)
Panic("strdup string length");
free(ptr);
}
static void
Check_strndup(void)
{
char *ptr;
ptr = strndup("1234567890", 5);
if (!ptr)
Panic("strndup");
if (ptr[5] != '\0')
Panic("strndup NULL byte");
if (strlen(ptr) != 5)
Panic("strndup string length");
free(ptr);
}
static void
Check_strlcpy(void)
{
char str[5];
if (strlcpy(str, "1234567890", sizeof(str)) != 10)
Panic("strlcpy return code");
if (str[4] != '\0')
Panic("strlcpy NULL byte");
if (strlen(str) != 4)
Panic("strlcpy string length");
}
static void
Check_strlcat(void)
{
char str[5];
if (strlcpy(str, "12", sizeof(str)) != 2)
Panic("strlcpy for strlcat");
if (strlcat(str, "1234567890", sizeof(str)) != 12)
Panic("strlcat return code");
if (str[4] != '\0')
Panic("strlcat NULL byte");
if (strlen(str) != 4)
Panic("strlcat string length");
}
static void
Check_strtok_r(void)
{
char *ptr, *last;
ptr = strdup("12,abc");
ptr = strtok_r(ptr, ",", &last);
if (!ptr)
Panic("strtok_r result #1");
if (strcmp(ptr, "12") != 0)
Panic("strtok_r token #1");
ptr = strtok_r(NULL, ",", &last);
if (!ptr)
Panic("strtok_r result #2");
if (strcmp(ptr, "abc") != 0)
Panic("strtok_r token #2");
ptr = strtok_r(NULL, ",", &last);
if (ptr)
Panic("strtok_r result #3");
}
#ifdef PROTOTYPES
static void
Check_vsnprintf(const int Len, const char *Format, ...)
#else
static void
Check_vsnprintf(Len, Format, va_alist)
const int Len;
const char *Format;
va_dcl
#endif
{
char str[5];
va_list ap;
int r;
#ifdef PROTOTYPES
va_start(ap, Format);
#else
va_start(ap);
#endif
r = vsnprintf(str, sizeof(str), Format, ap);
va_end(ap);
if (r != Len) {
/* C99 states that vsnprintf() "returns the number of
* characters that would have been printed if the n were
* unlimited", but according to the Linux manual page "glibc
* until 2.0.6 would return -1 when the output was truncated",
* and other implementations (libUTIL on A/UX) even return the
* number of characters processed ... so we only test our own
* implementation and warn on errors otherwise :-/ */
#ifdef HAVE_VSNPRINTF
fprintf(stderr,
"\n ** WARNING: The vsnprintf() function of this system isn't standard\n");
fprintf(stderr,
" ** conformant and returns a WRONG result: %d (should be %d)! The test\n",
r, Len);
fprintf(stderr,
" ** result has been ignored but may lead to errors during execution!\n\n");
#else
Panic("vsnprintf return code");
#endif
}
if (str[4] != '\0')
Panic("vsnprintf NULL byte");
if (strlen(str) != 4)
Panic("vsnprintf string length");
}
GLOBAL int
main(void)
main( void )
{
/* validate datatypes */
if (false != 0)
Panic("false");
if (true != 1)
Panic("true");
if (sizeof(UINT8) != 1)
Panic("UINT8");
if (sizeof(UINT16) != 2)
Panic("UINT16");
if (sizeof(UINT32) != 4)
Panic("UINT32");
if( false != 0 ) Panic( "false", 1 );
if( true != 1 ) Panic( "true", 1 );
if( sizeof( UINT8 ) != 1 ) Panic( "UINT8", 1 );
if( sizeof( UINT16 ) != 2 ) Panic( "UINT16", 1 );
if( sizeof( UINT32 ) != 4 ) Panic( "UINT32", 1 );
#ifdef PROTOTYPES
/* check functions */
Check_snprintf();
Check_strdup();
Check_strndup();
Check_strlcpy();
Check_strlcat();
Check_strtok_r();
Check_vsnprintf(2+10, "%s%s", "ab", "1234567890");
if( ! snprintf ) Panic( "snprintf", 2 );
if( ! vsnprintf ) Panic( "vsnprintf", 2 );
if( ! strlcpy ) Panic( "strlcpy", 2 );
if( ! strlcat ) Panic( "strlcat", 2 );
#endif
/* ok, no error */
return 0;
}
} /* portab_check_types */
static void
Panic( char *Reason, int Code )
{
/* Oops, something failed!? */
fprintf( stderr, "Oops, test for %s failed!?", Reason );
exit( Code );
} /* Panic */
/* -eof- */

View File

@@ -11,24 +11,26 @@
#ifndef HAVE_STRDUP
#include "imp.h"
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include "exp.h"
GLOBAL char *
strdup(const char *s)
strdup( const char *s )
{
char *dup;
size_t len = strlen(s);
size_t alloc = len + 1;
char *dup;
size_t len = strlen( s );
size_t alloc = len + 1;
if (len >= alloc)
return NULL;
dup = malloc(alloc);
if (dup)
strlcpy(dup, s, alloc );
if (len >= alloc ) return NULL;
dup = malloc( alloc );
if (dup) strlcpy(dup, s, alloc );
return dup;
return dup;
}
#endif

View File

@@ -1,6 +1,6 @@
/*
* ngIRCd -- The Next Generation IRC Daemon
* Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
* Copyright (c)2001-2005 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
@@ -22,9 +22,13 @@
* <http://cvs.samba.org/cgi-bin/cvsweb/rsync/lib/compat.c>
*/
#include "imp.h"
#include <string.h>
#include <sys/types.h>
#include "exp.h"
#ifndef HAVE_STRLCAT
GLOBAL size_t
@@ -48,6 +52,7 @@ strlcat( char *dst, const char *src, size_t size )
#endif
#ifndef HAVE_STRLCPY
GLOBAL size_t
@@ -69,4 +74,5 @@ strlcpy( char *dst, const char *src, size_t size )
#endif
/* -eof- */

View File

@@ -11,10 +11,13 @@
#ifndef HAVE_STRNDUP
#include "imp.h"
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include "exp.h"
GLOBAL char *
strndup(const char *s, size_t maxlen)
{
@@ -27,8 +30,8 @@ strndup(const char *s, size_t maxlen)
dup = malloc(len);
if (dup)
strlcpy(dup, s, len);
return dup;
}
#endif

View File

@@ -50,9 +50,9 @@
* original. Also, there is now a builtin-test, just compile with:
* gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm
* and run snprintf for results.
*
*
* Thomas Roessler <roessler@guug.de> 01/27/98 for mutt 0.89i
* The PGP code was using unsigned hexadecimal formats.
* The PGP code was using unsigned hexadecimal formats.
* Unfortunately, unsigned formats simply didn't work.
*
* Michael Elkins <me@cs.hmc.edu> 03/05/98 for mutt 0.90.8
@@ -72,6 +72,7 @@
* removed [v]asprintf() and C99 tests: not needed by ngIRCd.
*/
#ifdef HAVE_STRING_H
#include <string.h>
#endif
@@ -87,6 +88,7 @@
#include <stdlib.h>
#endif
#if defined(HAVE_SNPRINTF) && defined(HAVE_VSNPRINTF)
/* only include stdio.h if we are not re-defining snprintf or vsnprintf */
#include <stdio.h>
@@ -165,21 +167,21 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args)
int flags;
int cflags;
size_t currlen;
state = DP_S_DEFAULT;
currlen = flags = cflags = min = 0;
max = -1;
ch = *format++;
while (state != DP_S_DONE) {
if (ch == '\0')
if (ch == '\0')
state = DP_S_DONE;
switch(state) {
case DP_S_DEFAULT:
if (ch == '%')
if (ch == '%')
state = DP_S_FLAGS;
else
else
dopr_outch (buffer, &currlen, maxlen, ch);
ch = *format++;
break;
@@ -226,7 +228,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args)
if (ch == '.') {
state = DP_S_MAX;
ch = *format++;
} else {
} else {
state = DP_S_MOD;
}
break;
@@ -271,7 +273,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args)
switch (ch) {
case 'd':
case 'i':
if (cflags == DP_C_SHORT)
if (cflags == DP_C_SHORT)
value = va_arg (args, int);
else if (cflags == DP_C_LONG)
value = va_arg (args, long int);
@@ -401,12 +403,12 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args)
}
}
if (maxlen != 0) {
if (currlen < maxlen - 1)
if (currlen < maxlen - 1)
buffer[currlen] = '\0';
else if (maxlen > 0)
else if (maxlen > 0)
buffer[maxlen - 1] = '\0';
}
return currlen;
}
@@ -426,11 +428,11 @@ fmtstr(char *buffer, size_t *currlen, size_t maxlen, char *value, int flags,
for (strln = 0; value[strln]; ++strln); /* strlen */
padlen = min - strln;
if (padlen < 0)
if (padlen < 0)
padlen = 0;
if (flags & DP_F_MINUS)
if (flags & DP_F_MINUS)
padlen = -padlen; /* Left Justify */
while ((padlen > 0) && (cnt < max)) {
dopr_outch (buffer, currlen, maxlen, ' ');
--padlen;
@@ -460,12 +462,12 @@ fmtint(char *buffer, size_t *currlen, size_t maxlen, long value, int base,
int spadlen = 0; /* amount to space pad */
int zpadlen = 0; /* amount to zero pad */
int caps = 0;
if (max < 0)
max = 0;
uvalue = value;
if(!(flags & DP_F_UNSIGNED)) {
if( value < 0 ) {
signvalue = '-';
@@ -477,7 +479,7 @@ fmtint(char *buffer, size_t *currlen, size_t maxlen, long value, int base,
signvalue = ' ';
}
}
if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
do {
@@ -497,7 +499,7 @@ fmtint(char *buffer, size_t *currlen, size_t maxlen, long value, int base,
zpadlen = MAX(zpadlen, spadlen);
spadlen = 0;
}
if (flags & DP_F_MINUS)
if (flags & DP_F_MINUS)
spadlen = -spadlen; /* Left Justifty */
#ifdef DEBUG_SNPRINTF
@@ -512,7 +514,7 @@ fmtint(char *buffer, size_t *currlen, size_t maxlen, long value, int base,
}
/* Sign */
if (signvalue)
if (signvalue)
dopr_outch (buffer, currlen, maxlen, signvalue);
/* Zeros */
@@ -524,9 +526,9 @@ fmtint(char *buffer, size_t *currlen, size_t maxlen, long value, int base,
}
/* Digits */
while (place > 0)
while (place > 0)
dopr_outch (buffer, currlen, maxlen, convert[--place]);
/* Left Justified spaces */
while (spadlen < 0) {
dopr_outch (buffer, currlen, maxlen, ' ');
@@ -541,7 +543,7 @@ abs_val(LDOUBLE value)
if (value < 0)
result = -value;
return result;
}
@@ -549,12 +551,12 @@ static LDOUBLE
POW10(int exp)
{
LDOUBLE result = 1;
while (exp) {
result *= 10;
exp--;
}
return result;
}
@@ -566,7 +568,7 @@ ROUND(LDOUBLE value)
intpart = (LLONG)value;
value = value - intpart;
if (value >= 0.5) intpart++;
return intpart;
}
@@ -600,7 +602,7 @@ my_modf(double x0, double *iptr)
ret = my_modf(x0-l*f, &i2);
(*iptr) = l*f + i2;
return ret;
}
}
(*iptr) = l;
return x - (*iptr);
@@ -618,14 +620,14 @@ fmtfp (char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue,
int iplace = 0;
int fplace = 0;
int padlen = 0; /* amount to pad */
int zpadlen = 0;
int zpadlen = 0;
int caps = 0;
int index;
double intpart;
double fracpart;
double temp;
/*
/*
* AIX manpage says the default is 0, but Solaris says the default
* is 6, and sprintf on AIX defaults to 6
*/
@@ -645,8 +647,16 @@ fmtfp (char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue,
}
}
/*
* Sorry, we only support 16 digits past the decimal because of our
#if 0
if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */
#endif
#if 0
if (max == 0) ufvalue += 0.5; /* if max = 0 we must round */
#endif
/*
* Sorry, we only support 16 digits past the decimal because of our
* conversion method
*/
if (max > 16)
@@ -660,7 +670,7 @@ fmtfp (char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue,
my_modf(temp, &intpart);
fracpart = ROUND((POW10(max)) * (ufvalue - intpart));
if (fracpart >= POW10(max)) {
intpart++;
fracpart -= POW10(max);
@@ -697,16 +707,16 @@ fmtfp (char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue,
if (fplace == 311) fplace--;
}
fconvert[fplace] = 0;
/* -1 for decimal point, another -1 if we are printing a sign */
padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0);
zpadlen = max - fplace;
if (zpadlen < 0) zpadlen = 0;
if (padlen < 0)
if (padlen < 0)
padlen = 0;
if (flags & DP_F_MINUS)
if (flags & DP_F_MINUS)
padlen = -padlen; /* Left Justifty */
if ((flags & DP_F_ZERO) && (padlen > 0)) {
if (signvalue) {
dopr_outch (buffer, currlen, maxlen, signvalue);
@@ -722,10 +732,10 @@ fmtfp (char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue,
dopr_outch (buffer, currlen, maxlen, ' ');
--padlen;
}
if (signvalue)
if (signvalue)
dopr_outch (buffer, currlen, maxlen, signvalue);
while (iplace > 0)
while (iplace > 0)
dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]);
#ifdef DEBUG_SNPRINTF
@@ -738,11 +748,11 @@ fmtfp (char *buffer, size_t *currlen, size_t maxlen, LDOUBLE fvalue,
*/
if (max > 0) {
dopr_outch (buffer, currlen, maxlen, '.');
while (fplace > 0)
while (fplace > 0)
dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]);
}
while (zpadlen > 0) {
dopr_outch (buffer, currlen, maxlen, '0');
--zpadlen;
@@ -786,7 +796,7 @@ va_dcl
{
size_t ret;
va_list ap;
va_start(ap, fmt);
ret = vsnprintf(str, count, fmt, ap);
va_end(ap);
@@ -796,4 +806,138 @@ va_dcl
#endif
#ifdef TEST_SNPRINTF
int sprintf(char *str,const char *fmt,...);
int main (void)
{
char buf1[1024];
char buf2[1024];
char *fp_fmt[] = {
"%1.1f",
"%-1.5f",
"%1.5f",
"%123.9f",
"%10.5f",
"% 10.5f",
"%+22.9f",
"%+4.9f",
"%01.3f",
"%4f",
"%3.1f",
"%3.2f",
"%.0f",
"%f",
"-16.16f",
NULL
};
double fp_nums[] = { 6442452944.1234, -1.5, 134.21, 91340.2, 341.1234, 0203.9, 0.96, 0.996,
0.9996, 1.996, 4.136, 0};
char *int_fmt[] = {
"%-1.5d",
"%1.5d",
"%123.9d",
"%5.5d",
"%10.5d",
"% 10.5d",
"%+22.33d",
"%01.3d",
"%4d",
"%d",
NULL
};
long int_nums[] = { -1, 134, 91340, 341, 0203, 0};
char *str_fmt[] = {
"10.5s",
"5.10s",
"10.1s",
"0.10s",
"10.0s",
"1.10s",
"%s",
"%.1s",
"%.10s",
"%10s",
NULL
};
char *str_vals[] = {"hello", "a", "", "a longer string", NULL};
int x, y;
int fail = 0;
int num = 0;
printf ("Testing snprintf format codes against system sprintf...\n");
for (x = 0; fp_fmt[x] ; x++) {
for (y = 0; fp_nums[y] != 0 ; y++) {
int l1 = snprintf(NULL, 0, fp_fmt[x], fp_nums[y]);
int l2 = snprintf(buf1, sizeof(buf1), fp_fmt[x], fp_nums[y]);
sprintf (buf2, fp_fmt[x], fp_nums[y]);
if (strcmp (buf1, buf2)) {
printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",
fp_fmt[x], buf1, buf2);
fail++;
}
if (l1 != l2) {
printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, fp_fmt[x]);
fail++;
}
num++;
}
}
for (x = 0; int_fmt[x] ; x++) {
for (y = 0; int_nums[y] != 0 ; y++) {
int l1 = snprintf(NULL, 0, int_fmt[x], int_nums[y]);
int l2 = snprintf(buf1, sizeof(buf1), int_fmt[x], int_nums[y]);
sprintf (buf2, int_fmt[x], int_nums[y]);
if (strcmp (buf1, buf2)) {
printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",
int_fmt[x], buf1, buf2);
fail++;
}
if (l1 != l2) {
printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, int_fmt[x]);
fail++;
}
num++;
}
}
for (x = 0; str_fmt[x] ; x++) {
for (y = 0; str_vals[y] != 0 ; y++) {
int l1 = snprintf(NULL, 0, str_fmt[x], str_vals[y]);
int l2 = snprintf(buf1, sizeof(buf1), str_fmt[x], str_vals[y]);
sprintf (buf2, str_fmt[x], str_vals[y]);
if (strcmp (buf1, buf2)) {
printf("snprintf doesn't match Format: %s\n\tsnprintf = [%s]\n\t sprintf = [%s]\n",
str_fmt[x], buf1, buf2);
fail++;
}
if (l1 != l2) {
printf("snprintf l1 != l2 (%d %d) %s\n", l1, l2, str_fmt[x]);
fail++;
}
num++;
}
}
printf ("%d tests failed out of %d.\n", fail, num);
printf("seeing how many digits we support\n");
{
double v0 = 0.12345678901234567890123456789012345678901;
for (x=0; x<100; x++) {
snprintf(buf1, sizeof(buf1), "%1.1f", v0*pow(10, x));
sprintf(buf2, "%1.1f", v0*pow(10, x));
if (strcmp(buf1, buf2)) {
printf("we seem to support %d digits\n", x-1);
break;
}
}
}
return 0;
}
#endif /* SNPRINTF_TEST */
/* -eof- */

View File

@@ -12,10 +12,13 @@
#ifndef HAVE_WAITPID
#include "imp.h"
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include "exp.h"
GLOBAL int
waitpid(pid, stat_loc, options)
int pid, *stat_loc, options;

23
src/testsuite/.gitignore vendored Normal file
View File

@@ -0,0 +1,23 @@
Makefile.am
T-ngircd1
T-ngircd1.exe
T-ngircd2
T-ngircd2.exe
channel-test
connect-test
invite-test
join-test
kick-test
message-test
misc-test
mode-test
opless-channel-test
server-link-test
who-test
whois-test
ngircd-test1.log
ngircd-test2.log
ngircd-test1.motd
ngircd-test2.motd
logs
tests

View File

@@ -1,6 +1,6 @@
#
# ngIRCd -- The Next Generation IRC Daemon
# Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors
# Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -27,7 +27,7 @@ EXTRA_DIST = \
all:
clean-local:
rm -rf logs tests *-test ngircd-test*.log procs.tmp tests-skipped.lst \
rm -rf logs tests *-test ngircd-test*.log procs.tmp \
T-ngircd1 ngircd-test1.motd T-ngircd2 ngircd-test2.motd
maintainer-clean-local:
@@ -39,7 +39,6 @@ ngircd-TEST-Binary:
cp ../ngircd/ngircd T-ngircd1
cp ../ngircd/ngircd T-ngircd2
[ -f getpid.sh ] || ln -s $(srcdir)/getpid.sh .
rm -f tests-skipped.lst
connect-test: tests.sh
rm -f connect-test

View File

@@ -50,7 +50,7 @@ start-server.sh [<id>]
and that no other instance of the test binary is already running.
The exit code is 0 if the test binary could be started.
stop-server.sh [<id>]
stop-server.sha [<id>]
This script uses getpid.sh to detect a running test binary
"T-ngircd<id>" and then shuts it down using the TERM signal.

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