Commits


TLS/SSL support: code changes. This adds the required code to enable ssl/tls support during compile and run time, respectively.


Fix handling of MaxConnections option Config option claimed to be 'number of connections' but in reality this was treated as 'largest file descriptor allowed'. This also fixes another bug in New_connection, where the ng_ipaddr_tostr_r error path was missing a return statement.


Allow mixed line terminations (CR+LF/CR/LF) in non-RFC-compliant mode Up to now ngIRCd accepted CR+LF as well as a single CR or LF in "non RFC compliant" mode (the default). But ngIRCd became confused when it received data containing mixed line endings (e. g. "111\r222\n333\r\n"). This patch enables ngIRCd (in "non RFC compliant" mode) to detect CR+LF, CR, and LF as equally good line termination sequences and to always end the command after the first one detected. Some clients (for exmaple Trilian) are that ... broken to send such mixed line terminations ... First patch proposed by Scott Perry <scperry@ucsd.edu>, Thanks to Ali Shemiran <ashemira@ucsd.edu> for testing!


Handle_Buffer(): code cleanup. Both callers ignore the return code of this function, so get rid of it, but make sure that the client is disconnected on errors.


Conn_Handler(): cleanup code, add/translate comments. In addition, the "timeout" variable has been removed because it is unnecessary today: Handle_Buffer() handles all the data it can handle, and io_dispatch() returns immediately when new data is available. So we don't have to double-check but better sleep. Pointed out by Florian.


make Listen parameter a comma-seperated list of addresses. this also obsoletes ListenIPv4 and ListenIPv6 options. If Listen is unset, it is treated as Listen="::,0.0.0.0". Note: ListenIPv4 and ListenIPv6 options are still recognized, but ngircd will print a warning if they are used in the config file. Also, some plattforms require that ai_socktype is set in the getaddrinfo() hints structure.


If bind() fails, also print ip address and not just the port number.


Handle 1-character messages terminated with CR or LF correctly Code cleanup and fix for Bug #83, "ngIRCd chokes on 1-character messages" in function Handle_Buffer(): the buffer is now correctly cleared when ngIRCd receives 1-character messages terminated with either CR or LF (in violation to RFC 2812, section 2.3 "Messages", 5th paragraph).


Merge branch 'master' of git://git.breakpoint.cc/fw/ngircd-fw


IPv6: Add config options to disabe ipv4/ipv6 support. This also enables ipv6-only setups.


IPv6 support. all references to struct sockaddr/in_addr have been removed from src/ngircd. libngipaddr (in src/ipaddr/) hides all the gory details. See src/ipaddr/ng_ipaddr.h for API description.


Fix format arg: ListenAddress was printed instead of Bind address.


Fix format string in error path: didn't print strerror(errno)


Fix fmt string: int, not long


include <arpa/inet.h> inside tool.h In file included from hash.c:24: ../tool/tool.h:27: warning: `struct in_addr' declared inside parameter list


remove ip-string from Conf_Server struct struct Conf_Server stored the ip address to connect to in dotted-decimal notation; but we only need this for connect() so long-time storage isn't necessary.


bind ListenAddress for outgoing connections ngircd would always use INADDR_ANY for outgoing connections; which might not be desirable. Added new [Server] option "Bind" to set source ip.


Fix code to compile using K&R C compiler and ansi2kr again.


New config option NoDNS: disables all DNS queries.


Numeric 317: implemented "signon time" (displayed in WHOIS result).


last fix accidentially broke reconnect timer.


Don't connect to a server if a connection to another server within the same group is in progress.


Reworked read and write buffer handling, introduced WRITEBUFFER_SLINK_LEN.


there is no need to treat servers differently than clients on the read side.


make needlesly global function Conn_Write static.


remove ZBUFFER constants and increase max buffer size of server links


fix compressed server links


- change return type of Conn_InitListeners to unsigned - remove minor whitespace damage


if we can't bind a socket we now Log the port number, too.


Remove Client_DestroyNow() to keep semantik "every CONNECTON has a CLIENT".


register io handler before creating new local client structure


revert to last good revision again 8-/


do not call Conn_Close when io_event_create fails


Removed (theoretically) division by zero; reformated some code.


"Enhanced" debug message for Handle_Write(), only print when data in buffer.


The third parameter of bind() is of type "socklen_t", not "int".


Use some more specific data types (e. g. pid_t vs. int), make "SPLint" happy :-)


Handle time shifts backwards gracefully.


Fix Connection Pool resizing.


Client_GetFromConn() removed and replaced with new function Conn_GetClient()


use strlcat return value; don't call time() repeatedly.


changed connection structure to array-api


new Function: LogDebug()


Make connid same as connection fd.


removed obsolete "int Conn_MaxFD"


Fix Bugzilla #64 -- ngicrd did not reconnect to other servers after failed forward dns lookup.


Remove direct call of Conf_UnsetServer(): it's already indirectly called by Conn_Close() a few lines above.


Changed Handle_Write() to not close sockets itself but to call Conn_Close.


avoid 2nd time() call in Check_Servers(), improve comments


use io_close instead of plain close in Conn_ExitListeners()


merge new resolver code


Minimal changes (needed for merging resolver changes)


Handle_Write(): Report write attempts on closed sockets when in debug mode.


small formatting change


Cleaned up some code, comments and log/debug messages.


reformatted a few lines.


Added prefix to connection statistic NOTICE.


remove unneeded variable "bool action"


if the request is empty, remove \r\n (or single \n or \r) from receive buffer.


fix handling of empty requests


Changed handling of timeouts for unregistered connections: don't reset the counter if data is received and disconnect clients earlier.


Fixed format string bug in "connection statistics" message; code cleanups.


Removed some line feeds in debug statements.


Removed unnecessary #define of "LOCAL", now use plain C "static" instead.


internal changes needed for future ssl support


changed RES_STAT buffer to array


Eliminate some compiler warnings ("unused parameter").


removed unneeded variable "bsize"


add better error checks for io_ routines


fix embarassing buffer-off-by one


make Conn_NewListener local to conn.c


made a few config options unsigned.


minor cosmetic changes


Renamed "Rendezvous" to "Zeroconf".


use new io event API.


Handle oversized messages which should be sent to the network better.


Fix compiler warning "comparision between signed and unsigned".


Make sure SimpleMessage() sends <= 512 chars


Removed CONNECTION[].starttime, now saved in CLIENT structure.


remove Try_Write(), Call Handle_Write() directly instead.


add FreeRes_stat(), wait for resolver timeout.


Don't exit server if closing of a socket fails; instead ignore it and pray that this will be "the right thing" ...


removed "my_connects" fd_set.


fix spelling


s/malloc(x*y)/calloc(x,y)/


changed type of Conf_ListenPorts[] from "unsigned int" to UINT16.


Init_Conn_Struct(): Zero structure using memset().


Remove INT, LONG, BOOLEAN, STATIC, CONST, CHAR datatypes. use stdbool.h / inttypes.h if available.


Fixed detection of IRC lines which are too long to send. Detected by Florian Westphal, <westphal@foo.fh-furtwangen.de>.


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


Fixed indentation and added some more debug code.


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.


Changed "read buffer" to "receive buffer" as suggested by Goetz.


Added some missing words: "address" :-)


Fixed wrong buffer size calculation for resolver results.


Fixed a warning message of the compiler when not using IDENT lookups.


Fixed resolver when using IDENT lookups, cleaned up code.


Fixed a wrong assert() which could cause the daemon to exit spuriously when closing down connections.


Fixed some warnings of non-gcc-compilers (e. g. original Apple compiler on A/UX): "warning: illegal pointer combination, op =".


Better logging while establishing and shutting down connections. Results of the resolver are now discarded after the client is registered.


Fixed (optional) TCP Wrapper test which was broken and could result in false results. Thanks to Fuminori Tanizaki <tany@mcnet.ad.jp>!


The type of service (TOS) of all sockets is set to "interactive" now.


Added optional support for IDENT lookups (configure switch "--with-ident").


Removed "USE_" prefixes of configuration #defines.


Fixed and enhanced penalty handling; changed internal time resoluiton of the server to one second. Code cleanup.


New configuration option "MaxConnectionsIP".


New configuration option "Listen" to bind the server to a specific ip.


Fixed typo in debug output.


The server tried to connect to other servers only once when DNS or socket failures occured.


Fixed up some castings.


Changed all PACKAGE's to PACKAGE_NAME and all VERSION's to PACKAGE_VERSION.


New function Conn_SyncServerStruct().


New function Simple_Message(). Better error reporting to clients on connect.


Added support for TCP Wrappers.


- Added optional support for Rendezvous.


- Conn_Close() ignores recursive calls for the same link now.


- Client structures are removed correctly now if an outgoing connection can't be estahlished.


- Changed "once"-server-config-flag into a generic flag. - Changed semantics of "NGIRCd_Passive".


- Reorganized code for new modules "conn-func.c" and "conn-func.h".


- New source files "conn-zip.c" and "conn-zip.h".


- Cleaned up handling of server configuration structures.


- If the server can't close a socket, it panics now. - Quite enhanced logging :-)


- replaced a lot of strcpy() calls with strlcpy() which is more secure.


- replaced a lot of strcat() calls with strlcat() which is more secure.


- renamed variables to fit new signal handler. - moved call to NGIRCd_Rehash() to Conn_Handler().


- new functions Conn_ResetWCounter() and Conn_WCounter().


- new allocated connection structures will be initialized correctly now.


- new file header format (in english); - new file ident semantics.


- Logging von Verbindungen, die geschlossen werden/wurden verbessert.


- Verhalten von Conn_RecvQ() und Conn_SendQ() bei Kompression korrigiert.


- neue Befehle: Conn_StartTime(), Conn_SendQ(), Conn_RecvQ(), Conn_SendMsg(), Conn_RecvMsg(), Conn_SendBytes[Zip](), Conn_RecvBytes[Zip]().


- der Server verschickt keine "NOTICE AUTH"'s mehr.


- "NOTICE AUTH" und Statistiken werden im Strict-RFC-Modus nicht mehr erzeugt.


- Vor dem Schliessen einer Verbindung wird versucht, den Buffer zu leeren.


- beim Umschalten auf Kompression wurden evtl. bereits gelesene Daten nicht entpackt, der Datenstrom war somit dann korrumpiert.


- Unterstuetzung fuer komprimierte Server-Server-Links implementiert.


- 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).


- neue Funktionen Conn_InitListeners() und Conn_ExitListeners().


- Logging vom Resolver und Connection-Statistiken verbessert.


- angenommene Socketes werden nun korrekt auf "non-blocking" gestellt; - beim Senden und Empfangen wird EAGAIN ("Blockierung") nun abgefangen.


- Server identifizieren sich nun mit asyncronen Passwoertern.


- Fehler-Handling von connect() gefixed: der Server kann sich nun auch unter A/UX wieder zu anderen verbinden.


- Neue Funktion Conn_SetServer(). - Einige assert()'s aufgeraumt.


- Semantik der Conn_xxxFlag()-Funktionen geaendert.


- 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().


- Verbindungsstatistik ein wenig klarer formuliert.


- Anpassungen bzw. Fixes fuer "strict RFC"-Mode.


- 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).


- double in DOUBLE geaendert (ist in portab.h nun definiert).


- verwendete Datentypen aufgeraumt: beispielsweise INT32 ist nun oft ein LONG.


- Client wird nun via NOTICEs ueber Resolver-Status informiert.


- Connection-Statistik implementiert. - Server-NOTICEs haben nun ein "Text-Prefix".


- buffer overflow behoben.


- fehlerhaften "Socket-Test-Patch" korrigiert.


- Conn_Write() prueft nun, ob der Socket noch offen ist, ehe Daten gesendet werden.


- Penalty-Delays gelten nun auch für Schreibvorgaenge. - Conn_Handler() besser strukturiert ...


- "Timing" mal wieder geaendert: sollte schon 1 Sekunde sein, sonst kommen z.B. die PING-Timeouts falsch.


- "Timing" von Conn_Handler() geaendert: der Daemon sollte nun noch weniger CPU-Zeit brauchen :-)


- PASS-Befehl auf NGIRCd_ProtoID umgestellt.


- neue Funktion Conn_SetPenalty() zum Setzen von sog. "Penalty Zeiten"; wird bisher nur beim Connect verwendet (eine Sekunde).


- Syntax von Conn_Handler() geaendert: kein Timeout mehr. - Log-Meldungen bezueglich Server-Restart verbessert. - Timeout von select() auf eine Sekunde erhoeht.


- Weitere Anpassungen an pre-ANSI-Compiler.


- Anpassungen an pre-ANSI-Compiler, - Includes aufgeraumt: Header includieren keine anderen mehr.


- bessere Reaktionen, wenn DNS-Abfragen fehlschlagen.


- inet_aton() wird nur noch verwendet, wenn vorhanden; ansonsten inet_addr().


- h_error wird nur noch ausgewertet, wenn vorhanden.


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


- falschen Patch rueckgaengig gemacht ...


- in das "Error-File" werden wieder "kritische" Meldungen geschrieben.


- Conn_NewListener() erwartet den Port nun als "unsigned int".


- Ping-Timeouts geben als Debug-Meldung den konfigurierten Timeout mit aus.


- einige assert()-Pruefungen in Conn_WriteStr() ergaenzt.


- A/UX kennt O_NONBLOCK nicht? Oder in einem anderen Header? ...?


- Test, ob bereits ein Server einer Gruppe aktiv ist, korrigiert.


- Projektdatei an neue Quellcode-Struktur angepasst.


- externe portab-Header werden nicht mehr benoetigt/benutzt, dadurch einige Aenderungen an diversen Source-Dateien und Headern. - Dateien enthalten keine CVS-History mehr.


- Client_Destroy() hat neuen Paramter: QUITs fuer Clients verschicken?


- ein sofortiger Re-Connect wird nur dann versucht, wenn die Vernindung "lange genug" bereits bestanden hatte.


*** empty log message ***


- Handling von "--version" und "--help" nochmal geaendert ...


- Logging geaendert: detaillierter im Syslog, "allgemeiner" fuer Clients.


- Aenderung des Idle-Verhalten revidiert: das war ein Schnellschuss :-/


- Timeouts ausgehender Verbindungen werden besser erkannt (z.B. unter Cygwin). - Idle-Time der Hauptschleife [Conn_Handle()] erhoeht: weniger Last.


- bei abgebrochene ausgehende Server-Verbindungen wird der naechste Ver- bindungsversuch in RECONNECT_DELAY Sekunden (3) unternommen und nicht mehr "ConnectRetry" Sekunden gewartet.


- der Wert der Konfigurations-Variable "ConnectRetry" wird besser beachtet.


- ausgehende Verbindungen werden nun asyncron connectiert und blockieren nicht mehr den Server. Dadurch waren einige Aenderungen noetig. - diverse Log-Meldungen ueberarbeitet.


- Logging bei Timeout von Verbindungen geaendert.


- an Conn_Close() werden zwei weitere Fehlermeldungen zum Forwarden uebergeben.


- Ergebnistyp von Conn_GetIdle() und Conn_LastPing() auf "time_t" geaendert.


- Bei ausgehenden Verbindungen wird der Ziel-Port ins Log geschrieben.


- "Passive-Mode" implementiert: kein Auto-Conect zu anderen Servern.


- neue Funktion Conn_LastPing().


- der Sniffer wird nun nur noch aktiviert, wenn auf Kommandozeile angegeben.


- PASSSERVERADD definiert, wird beim PASS-Befehl an Server verwendet.


- Loglevel und Meldungen nochmals geaendert. Level passen nun besser.


- Vorbereitungen fuer Ident-Abfragen bei neuen Client-Strukturen.


- Fehlerpruefung bei select() in der "Hauptschleife" korrigiert.


- "arpa/inet.h" wird nur noch includiert, wenn vorhanden. - Ein Fehler bei select() fuerht nun zum Abbruch von ngIRCd. - NO_ADDRESS durch NO_DATA ersetzt: ist wohl portabler.


- Loglevel ein wenig angepasst.


- Client-Strukruren werden nur noch ueber Funktionen angesprochen.


- diverse Aenderungen und Umsetellungen fuer Server-Links.


- Asyncroner Resolver Hostname->IP. - Server-Links begonnen zu implementieren. Die Verbindung wird aufgebaut, jedoch noch keine SERVER-Befehle verschickt. - Diverse Bug-Fixes und kleinere Erweiterungen.


- neue Defines fuer max. Anzahl Server und Operatoren.


- #include's fuer stdlib.h ergaenzt.


- viele neue Befehle (WHOIS, ISON, OPER, DIE, RESTART), - neuen Header "defines.h" mit (fast) allen Konstanten. - Code Cleanups und viele "kleine" Aenderungen & Bugfixes.


- Unterstuetzung fuer die Konfigurationsdatei eingebaut.


- bessere Dokumentation des Modules bzw. der Funktionen.


- kleinere Aenderungen ("clean-ups") bei Logging (Resolver).


- Da hatte ich mich wohl ein wenig verrannt; jetzt sollte der Resolver aber tatsaechlich funktionieren.


- asyncronen Resolver (IP->Name) implementiert, dadurch div. Aenderungen.


- Loglevel (nochmal) angepasst.


- bei "Null-Requests" wird nichts mehr geloggt. Uberfluessig, da normal.


- vergessene Variable bei Ping-Timeout-Logmeldung ergaenzt. Opsa.


- "Code Cleanups".


- Verbindungen mit Lesefehlern werden nun korrekt terminiert.


- PING/PONG-Timeout implementiert.


- buffer werden nun periodisch geprueft, keine haengenden Clients mehr.


- Conn_Close() eingefuehrt: war die lokale Funktion Close_Connection().


- in Conn_WriteStr() wurde das CR+LF nicht angehaengt! - Fehler-Ausgaben vereinheitlicht.


- Conn_WriteStr() nimmt nun variable Parameter, - diverse kleinere Aenderungen.


- kleinere Aenderungen an den Log-Meldungen, - Parse_Request() wird aufgerufen.


- Lese- und Schreib-Puffer implementiert. - einige neue (Unter-)Funktionen eingefuehrt. - diverse weitere kleinere Aenderungen.


- Begonnen, Client-spezifische Lesepuffer zu implementieren. - Umstellung auf Datentyp "CONN_ID".


- boesen "Speicherschiesser" in Log() gefixt.


- Conn_Handler() unterstuetzt nun einen Timeout. - fuer Verbindungen werden keine FILE-Handles mehr benutzt. - kleinere "Code Cleanups" ;-)


- diverse Erweiterungen und Verbesserungen (u.a. sind nun mehrere Verbindungen und Listen-Sockets moeglich).


- Modul zur Verwaltung aller Netzwerk-Verbindungen begonnen.