Commit Briefs
ngIRCd 0.9.0-pre1 (tags/rel-0-9-0-pre1)
Only setuid()/setgid() if it differs from current UID/GID.
Solves problems with Cygwin. [from HEAD]
Cut off oversized IRC messages that should be sent to the network instead
of shuttding down the (wrong) connection. [from HEAD]
Don't exit server if closing of a socket fails; instead ignore it and
pray that this will be "the right thing" ...
Reformatted and documented code of the first part of the IRC_NICK()
function; and register WHOWAS entries on nickname changes, too.
Away status texts set due to "a"-Modes received from other servers have
been fixed: the status text of the server has been set instead of the away status text of the client (most probably introduced by patch 1.36).
Added #include of "defines.h", necessary due to removal of the #include of
"defines.h" in the client.h header file.
Reorder #includes, necessary due to removal of #include "defines.h" in
the client.h header file.
Removed "invalid" #include of "defines.h" (don't include further header
files from a header file!).
removed Conn_UnsetOption() function. It was not used anymore.
removed Conn_SetOption(). replaced its only call (in conn-zip.c) with Conn_OPTION_ADD() macro.
conn.h: option filed in CONNECTION struct is now UINT16.
conn-func.h: add accessor Macros Conn_OPTION_ADD( conn, CONN_OPTION ) Conn_OPTION_DEL( conn, CONN_OPTION ) Conn_OPTION_ISSET( conn, CONN_OPTION ) To add, remove or test for a certain option field attribute (e.g. CONN_ISCLOSING) These Macros should be used instead of accessing conn->options directly.
Target "lint": check whether splint command is available and suppress
warnings related to the used command line in the output.
Two new targets: "srcdoc" to generate Doxygen source documentation, and
"xcode" to build ngIRCd using the Xcode command line tools on Mac OS X.
New build style "deployment", cleaned up options for build style
"development" (enabled "ZeroLink") and fixed path of "ngircd.spec".
When validationg the configuration file wait for a keypress only if both
stdin and(!) stdout are valid tty's.
Enhanced configure script: now you can pass an (optional) search path
to all --with-XXX parameters, e. g. "--with-ident=/opt/ident".
Remove INT, LONG, BOOLEAN, STATIC, CONST, CHAR datatypes.
use stdbool.h / inttypes.h if available.
Updated to latest strl{cat|cpy} code of rsync:
- Make sure that strlcpy() returns the right value when the bufsize is 0. - Fixed a bug in strlcat() where it would not properly detect a no-change condition if called with an initial string longer than the specified size limit (due to an unsigned var's inability to go negative). Patch by Florian Westphal, <westphal@foo.fh-furtwangen.de>.
Write "error file" (/tmp/ngircd-XXX.err) only if compiled with debug
code ("--enable-debug") and running as daemon process.
Don't create version information string each time a client connects but
insetead on server startup. By Florian Westphal.
Added an empty /etc/ngircd/ngircd.motd to the packages. And ngircd.conf
becomes modified to enable the PID file (/var/run/ircd/ngircd.cond) and to change the user and group to "irc".
New configuration variable "PidFile", section "[Global]": if defined,
the server writes its process ID (PID) to this file. Default: off. Idea by Florian Westphal, <westphal@foo.fh-furtwangen.de>.
Fixed a bug that could case a root exploit when the daemon is compiled
to do IDENT lookups and is logging to syslog. Bug discovered by CoKi, <coki@nosystem.com.ar>, thanks a lot! (http://www.nosystem.com.ar/advisories/advisory-11.txt)
Fixed a buffer overflow that could cause the daemon to crash. Bug found
by Florian Westphal, <westphal@foo.fh-furtwangen.de>.
Fixed a possible buffer underrun when reading the MOTD file. Thanks to
Florian Westphal, <westphal@foo.fh-furtwangen.de>.
Code cleanups from Florian Westphal, <westphal@foo.fh-furtwangen.de>:
wrote functions for common error messages.
Fixed detection of IRC lines which are too long to send. Detected by
Florian Westphal, <westphal@foo.fh-furtwangen.de>.
Fixed return values of our own implementation of strlcpy(). The code has
been taken from rsync and they fixed it, but we didn't until today :-/
Fixed a memory leak when resizing the connection pool and realloc() failed.
Now we don't fall back to malloc(), which should be sane anyway. Patch from Florian Westphal, <westphal@foo.fh-furtwangen.de>.
Make more clear that there can be more than one [Operator], [Server] and
[Channel] section in the configuration file.
Added support for the Howl (http://www.porchdogsoft.com/products/howl/)
Rendezvous API, in addition to the API of Apple (Mac OS X).
Made ngIRCd compile on HP/UX 10.20 with native HP pre-ANSI C compiler and
most probably other older C compilers on other systems.
Fixed echo without newline for systems not understanding "echo -n"; added
new file "functions.inc" for functions usable by all test scripts.
Fxied name of "default file" for ngircd-full package. And do the test if
the binary is executable after reading this file.
Changed text "test scripts" to "processes": some versions of expect(1)
fork child processes ...
Added missing commas to debian control file, fixes bug #56.
Thanks to Kevin Otte (nivex@nivex.net) for the patch.
Added PID to all log messages on the console; enhanced logging of
resolver sub-processes in debug mode.
New "chroot" feature (from Benjamin Pineau), introducing new configuration
variables "ChrootDir" and "MotdPhrase".
Document new server flag "L": synchronize INVITE- and
BAN-lists when establishing new server links.
Synchronize INVITE- and BAN-lists if the peer requests it:
server flag "L". And better debug logging.
Don't send MODE changes when origin is a server and
mask is already known.
Fixed a wrong assert() which could cause the daemon to exit spuriously
when closing down connections.
Fixed handling of already existent entries in invite and ban lists:
the attempt to add an already existent entry is no error, it must be propagated across servers (but not added to the list!).
Servers other than the destination server didn't clean up the invite
list of an "invite-only" channel properly when an INVITE'd user joined.
Reworked configure system: it should be more compatible to most systems
now, and it should even be more flexible and faster :-)
Fixed some warnings of non-gcc-compilers (e. g. original Apple compiler on
A/UX): "warning: illegal pointer combination, op =".
Changed the reply of the MODE command to match the syntax of the original
ircd exactly: the unnecessary but missing ":" before the last parameter has been added.
Better logging while establishing and shutting down connections.
Results of the resolver are now discarded after the client is registered.
The info text ("real name") of users is set to "-" if none has been
specified using the USER command (e. g. "USER user * * :"). Reason: the original ircd doesn't like empty ones and would KILL such users.
Fixed (optional) TCP Wrapper test which was broken and could result in
false results. Thanks to Fuminori Tanizaki <tany@mcnet.ad.jp>!
Restructured debian packaging system: now there are two packages, a "standard"
version that includes all the default options and a "full" version that additionally includes support for TCP wrappers and IDENT lookups.
Removed outdated Mac OS X ProjectBuilder project files (will be re-added
and updated for XCode soon); moved the debian/ directory to contrib/Debian/.
Added some files to the maintainer-clean-local target which havn't beed
removed by "make maintainer-clean".
Fixed error messages related to server name configuration; updated
sample configuration file. (from 0.7.x)
Fixed ban behavior: users which are banned from a channel can't no longer
send PRIVMSG's to this channel (fixes Bug #47).
Fixed and enhanced penalty handling; changed internal time resoluiton of
the server to one second. Code cleanup.
Updated documentation. (tags/rel-0-7-0-pre1)
Added implicit initialisation of "i" in Conf_GetServer to workaround a egcs
2.91.66 bug which claims that this valiable could be used uninitialized.
Added some defines for Linux/glibc, reverted unused test for poll(), and
enhanced summary output.
Changed documentation directory to ".../share/doc/ngIRCd" (and removed the
variable PACKAGE for better Debian automake-1.4 compatibility).
Added support for TCP Wrappers; redesigned configuration result output;
Changed some "--enable"/"--disable" switches to "--with"/"--without".
The server didn't validate wheather the "target" client of a channel
user mode change is a valid channel member or not.
- Check functions only on systems that support prototypes, elder cpmpilers
become confused instead!
- Fixed up command forwarding: only to servers!
- Forwarding of WHOIS was broken in some situations.
- Changed "once"-server-config-flag into a generic flag.
- Changed semantics of "NGIRCd_Passive".
- New functions Conf_EnableServer(), Conf_DisableServer() and Conf_AddServer().
- Changed "once"-server-config-flag into a generic flag.
- New commands CONNECT and DISCONNECT.
- Validate operator status before syntax checks.
- If the server can't close a socket, it panics now.
- Quite enhanced logging :-)
- fixed KILL: you can kill yourself now without crashing the server;
QUIT isn't send to other servers after the KILL any more.
- renamed variables to fit new signal handler.
- moved call to NGIRCd_Rehash() to Conn_Handler().
- validate Conf_MaxConnections against FD_SETSIZE if available;
- fixed up some log messages and enhanced configuration validation.
- new constant RPL_YOURESERVICE_MSG, ERR_CHANNELISFULL_MSG, ERR_BADCHANNELKEY_MSG.
- fixed ERR_PASSWDMISMATCH_MSG.
- new constant MAX_SERVICES,
- added k and l modes to CHANMODES.
- fixed some parsing bugs.
- better logging.
- new file header format (in english);
- new file ident semantics.
- translated file header and comments to english;
- new file ident semantics.
- neue Befehle: Conn_StartTime(), Conn_SendQ(), Conn_RecvQ(), Conn_SendMsg(),
Conn_RecvMsg(), Conn_SendBytes[Zip](), Conn_RecvBytes[Zip]().
- beim Umschalten auf Kompression wurden evtl. bereits gelesene Daten nicht
entpackt, der Datenstrom war somit dann korrumpiert.
- neue Funktionen: Conn_SetOption(), Conn_UnsetOption(), Conn_Options().
- wenn mit zlib-Support: Conn_InitZip().
- volle Lesebuffer und Timeouts behandelt Conn_Handle() nun besser.
- Handle_Buffer() liefert nun ein Ergebnis.
- select() in Try_Write() hat falschen (keinen!) Timeout verwendet;
- der Timeout fuer das select() in Conn_Handler() ist nun TIME_RES (=2).
- RELOAD in REHASH umbenannt.
- neue Funktion WHOWAS.
- neue Meldungen: RPL_STATSLINKINFO, RPL_STATSCOMMANDS, RPL_ENDOFSTATS,
RPL_WHOWASUSER, RPL_ENDOFWHOWAS und ERR_WASNOSUCHNICK.
- Listen-Sockets werden ueber neue Funktion Conn_InitListeners() erzeugt.
- neue Funktion NGIRCd_Reload(). - Logging bei empfangenen Signalen verbessert. - SIGHUP ruft nun NGIRCd_Reload() auf.
- Befehle sortiert,
- neuer Befehl RELOAD.
- angenommene Socketes werden nun korrekt auf "non-blocking" gestellt;
- beim Senden und Empfangen wird EAGAIN ("Blockierung") nun abgefangen.
- unter HP-UX wird nun _XOPEN_SOURCE_EXTENDED definiert. Fuer den gcc
unter 11.11 ist dies erforderlich.
- Fehler-Handling von connect() gefixed: der Server kann sich nun auch
unter A/UX wieder zu anderen verbinden.
- in ServerUID und ServerGID kann nun jeweils auch der Name (und nicht nur
die numerische ID) verwendet werden.
- Neue Funktion Conn_SetServer().
- Einige assert()'s aufgeraumt.
- Connection-Strukturen werden nun "pool-weise" verwaltet; der Pool wird
bei Bedarf bis zu einem konfigurierten Limit vergroessert. - neue Funktionen Conn_First(), Conn_Next(), Conn_ClearFlags(), Conn_Flag() und Conn_SetFlag().
- ausgehende Verbindungen mit ID 0 konnten nicht aufgebaut werden ... :-/
- einige Debug-Ausgaben erweitert.
- Segfault unter hoher Netzaktivitaet behoben: in Conn_Close() wird die
Connection-Struktur nun frueher als "ungueltig" markiert. - besseres Error-Logging.
- Es wird nun laenger auf Resolver-Ergebnisse gewartet, der Login aber
sofort fortgesetzt, so ein Ergebnis eintrifft.
- "schneller Server-Reconnect" wird nun nur dann ausgefuehrt, wenn die
Verbindung zuvor "lange genug" aufgebaut war (z.B. also nicht mehr, wenn der Peer sofort beim Connect ein fatales ERROR liefert).
- Connection-Statistik implementiert.
- Server-NOTICEs haben nun ein "Text-Prefix".
- bei CVS-Versionen wird nun das Datum der letzten CVS-Aenderung angezeigt,
Versionsnummer entsprechend angepasst.
- es wird nun auch auf "sys/select.h" geprueft. U.a. fuer AIX notwendig. (tags/rel-0-5-0-pre1)
- Versionsnummer auf 0.5.0-pre1 angehoben.
- Admin-Info eingebaut (Variablen "AdminInfo1", "AdminInfo2" und "AdminEMail");
- Bug bei zu langem Operator-Name behoben.
- Test-Server wird in aktuelles Verzeichnis als "ngircd-TEST" verlinkt.
- die PID des Test-ngIRCd wird besser ermittelt.
- EXTRA_DIST ergaenzt, clean-Target erweitert.
- neues Script "stress-server.sh" integriert.
- Parameter von List_Add{Invited|Banned}() erweitert.
- neue Funktion Already_Registered(). - doppelte Ban- und Invite-Eintraege werden nun vermieden.
- Bans/Invites: andere Server wurden nicht informiert.
- neue Funktion Send_ListChange().
- neu: Check_List(), Check_List(), Lists_AddInvited(), Lists_DelInvited(), Lists_ShowInvites, Lists_AddBanned(), Lists_DelBanned(), Lists_ShowBanned und Lists_MakeMask().
- einige Bug-Fixes, bessere Debug-Meldungen.
- ein INVITE wird auch dann gespeichert (obwohl der Channel nicht +i ist), wenn der Client gebanned ist.
- den BAN-Befehl gibt es gar nicht ;-)
- Penalty-Delays gelten nun auch für Schreibvorgaenge.
- Conn_Handler() besser strukturiert ...
- Konfigurations-Uebersicht am Ende des configure-Lauf.
- neue Option "--disable-ircplus".
- IRC+-Protokoll ist nun abschaltbar.
- neue Konstante PROTOIRC.
- New_Chan() in Channel_Create() umbenannt; entsprechende Anpassungen.
- Neue Funktion Channel_SetModes().
- CLIENT-Struktur um Flags erweitert.
- neue Funktionen Client_SetFlags() und Client_Flags().
- neue Konfigurationsoption "OperCanUseMode" (Sektion "Global"):
ist sie aktiv, koennen IRC-Operatoren immer Channel-Modes setzen.
- an Clients wurden Modes mit fuehrendem ":" geliefert. Das ist zwar RFC-
konform (IMO), macht aber leider grosse(!!) Probleme :-/
- Bei einem JOIN in einen persistenten Channel werden nun evtl. zu setzende
User-Modes korrekt in den Channel gemeldet.
- neue Funktion Conn_SetPenalty() zum Setzen von sog. "Penalty Zeiten";
wird bisher nur beim Connect verwendet (eine Sekunde).
- Semantik der Validate_XXX()-Funktionen verbessert,
- Validate_Prefix() mit "Leben" erfuellt ;-)
- neue Konstanten fuer Invite- und Banlists: RPL_xxxLIST_MSG, RPL_ENDOFxxx_MSG
- neue Message ERR_UNKNOWNMODE_MSG.
- Flag "OnlyOnce" bei Lists_AddInvited() ergaenzt.
- Neue Funktion Lists_DeleteChannel().
- Invite-Lists weiter implementiert.
- Flag "OnlyOnce" bei Lists_AddInvited() ergaenzt. - Neue Funktion Lists_DeleteChannel().
- Besseres Logging, wenn malloc() fehl schlaegt.
- Ban- und Invite-Lists werden korrekt aufgeraeumt.
- Syntax von Conn_Handler() geaendert: kein Timeout mehr.
- Log-Meldungen bezueglich Server-Restart verbessert. - Timeout von select() auf eine Sekunde erhoeht.
- die "umask" des Servers wird nun auf 077 gesetzt;
- Hauptschleife geaendert.
- neue Funktionen Channel_Kick() und Channel_Quit();
- Channel_RemoveClient() ist entfallen.
- neue Funktionen Channel_Kick() und Channel_Quit();
- Channel_RemoveClient() ist entfallen. - Remove_Client() ueberarbeitet: nun mit Unterstuetzung fuer PART, QUIT und KICK.
- Anpassungen an pre-ANSI-Compiler,
- Includes aufgeraumt: Header includieren keine anderen mehr.
- POSIX Regular Expressions werden nun vorausgesetzt,
- Test auf snprintf und vsnprintf geaendert.
- neue Library "ngportab" begonnen: diese bildet Funktionen nach, die auf
dem Ziel-System nicht vorhanden sind -- wie z.B. vsnprintf().
- ngircd wird nun gegen die libngportab gelinkt, die evtl. benoetigte
und nicht auf dem System vorhandene Funktionen nachbildet.
- Count_MyServers() zaehlt nun wieder richtig, LUSERS sollte nun wieder die
korrekte Anzahl eigener Server-Links anzeigen.
- Format-String fuer Log-Meldung bei Nick-Aenderungen lokaler Clients
war corrupt, der Server stuerzte so in der Regel ab :-(
- Es wird nicht mehr anhand der Parameter-Anzahl, sondern des Token erkannt,
ob es sich beim SERVER-Befehl um ein- oder ausgehende Verbindungen handelt und somit die eigenen PASS- und SERVER-Befehle gesendet werden muessen.
- ausgehende, sich im Aufbau befindende Server-Links werden nun mit einem
speziellen Token (TOKEN_OUTBOUND) versehen, damit der Server sie spaeter als solche wieder erkennen kann.
- Manual-Pages heissen nun anders und werden auch nicht mehr "bereits
uebersetzt" installiert.
- Error-Log wird nach User-Wechsel mit Log_InitErrorfile() initialisiert.
- Einige Tippfehler korrigiert ...
- Conf_ListenPorts[] ist nun unsigned.
- Neue Konfigurations-Variablen Conf_UID und Conf_GID.
- das Error-File wird nun komplett durch das Log-Modul verwaltet, der
Dateiname enthaelt nun die PID: so koennen mehrere Instanzen laufen.
- neuer Kommandozeilen-Parameter "--configtest": gibt die verwendete Server-
Konfiguration aus. Diesbezuegliche Ausgaben bei "--help" sind entfallen.
- neue Funktion Conf_Test() zum Testen der Konfiguration.
- Conf_File ist entfallen, ist nun NGIRCd_ConfFile.