mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-11-04 07:52:59 +00:00 
			
		
		
		
	Compare commits
	
		
			11 Commits
		
	
	
		
			branch-20.
			...
			rel-0-9-0-
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					b715a5f061 | ||
| 
						 | 
					0b31b46353 | ||
| 
						 | 
					8a7ae2dfc1 | ||
| 
						 | 
					01ee1bdf2c | ||
| 
						 | 
					13ee3e62be | ||
| 
						 | 
					fc038ae444 | ||
| 
						 | 
					8d1fe3b89a | ||
| 
						 | 
					d74029851f | ||
| 
						 | 
					8ff1a4b666 | ||
| 
						 | 
					5f68d5f1e1 | ||
| 
						 | 
					db2a41e5bc | 
@@ -10,8 +10,11 @@
 | 
			
		||||
                               -- ChangeLog --
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ngIRCd CVSHEAD
 | 
			
		||||
ngIRCd 0.9.0-pre1 (2005-07-09)
 | 
			
		||||
 | 
			
		||||
  - Fixed maximum length of user names, now allow up to 9 characters.
 | 
			
		||||
  - Cut off oversized IRC messages that should be sent to the network instead
 | 
			
		||||
    of shuttding down the (wrong) connection.
 | 
			
		||||
  - Don't generate error messages for unknown commands received before the
 | 
			
		||||
    client is registered with the server (like the original ircd).
 | 
			
		||||
  - Never run with root privileges but always switch the user ID.
 | 
			
		||||
@@ -608,4 +611,4 @@ ngIRCd 0.0.1, 31.12.2001
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- 
 | 
			
		||||
$Id: ChangeLog,v 1.276 2005/06/26 21:54:01 alex Exp $
 | 
			
		||||
$Id: ChangeLog,v 1.276.2.4 2005/07/09 11:57:07 alex Exp $
 | 
			
		||||
 
 | 
			
		||||
@@ -8,13 +8,13 @@
 | 
			
		||||
# (at your option) any later version.
 | 
			
		||||
# Please read the file COPYING, README and AUTHORS for more information.
 | 
			
		||||
#
 | 
			
		||||
# $Id: configure.in,v 1.111 2005/06/26 13:42:11 alex Exp $
 | 
			
		||||
# $Id: configure.in,v 1.111.2.2 2005/07/09 11:57:07 alex Exp $
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# -- Initialisation --
 | 
			
		||||
 | 
			
		||||
AC_PREREQ(2.50)
 | 
			
		||||
AC_INIT(ngircd, CVSHEAD)
 | 
			
		||||
AC_INIT(ngircd, 0.9.0-pre1)
 | 
			
		||||
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
 | 
			
		||||
AC_CANONICAL_TARGET
 | 
			
		||||
AM_INIT_AUTOMAKE(1.6)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,9 @@
 | 
			
		||||
ngircd (0.9.0-0ab1) unstable; urgency=low
 | 
			
		||||
 | 
			
		||||
  * New "upstream release".
 | 
			
		||||
 | 
			
		||||
 -- Alexander Barton <alex@Pollux>  Sat,  9 Jul 2005 13:18:05 +0200
 | 
			
		||||
 | 
			
		||||
ngircd (0.8.3-0ab1) unstable; urgency=high
 | 
			
		||||
 | 
			
		||||
  * New "upstream release", including security fixes.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
%define name    ngircd
 | 
			
		||||
%define version CVSHEAD
 | 
			
		||||
%define version 0.9.0
 | 
			
		||||
%define release 1
 | 
			
		||||
%define prefix  %{_prefix}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
 | 
			
		||||
                     ngIRCd - Next Generation IRC Server
 | 
			
		||||
 | 
			
		||||
                        (c)2001-2004 Alexander Barton
 | 
			
		||||
                        (c)2001-2005 Alexander Barton
 | 
			
		||||
                    alex@barton.de, http://www.barton.de/
 | 
			
		||||
 | 
			
		||||
               ngIRCd is free software and published under the
 | 
			
		||||
@@ -28,18 +28,20 @@ Platform                    Compiler     ngIRCd     Date     Tester C M T R See
 | 
			
		||||
--------------------------- ------------ ---------- -------- ------ - - - - ---
 | 
			
		||||
hppa/unknown/openbsd3.5     gcc 2.95.3   CVSHEAD    04-05-25 alex   Y Y Y Y
 | 
			
		||||
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    0.9.x-CVS  05-06-27 alex   Y Y Y Y
 | 
			
		||||
i386/pc/solaris2.9          gcc 3.2.2    CVSHEAD    04-02-24 alex   Y Y Y Y
 | 
			
		||||
i386/unknown/freebsd5.2.1   gcc 3.3.3    0.8.0      04-05-30 alex   Y Y Y Y
 | 
			
		||||
i386/unknown/gnu0.3         gcc 3.3.3    0.8.0      04-05-30 alex   Y Y n Y
 | 
			
		||||
i386/unknown/netbsdelf1.6.1 gcc 2.95.3   CVSHEAD    04-02-24 alex   Y Y Y Y
 | 
			
		||||
i686/pc/cygwin              gcc 3.3.1    0.8.0      04-05-30 alex   Y Y n Y
 | 
			
		||||
i686/pc/cygwin              gcc 3.3.1    0.9.x-CVS  05-07-08 alex   Y Y n Y
 | 
			
		||||
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.3    0.8.0      04-05-30 alex   Y Y Y Y (1)
 | 
			
		||||
i686/pc/linux-gnu           gcc 3.3.5    0.9.x-CVS  05-07-09 alex   Y Y Y Y (1)
 | 
			
		||||
m68k/apple/aux3.1.1         Orig. A/UX   0.7.x-CVS  03-04-22 alex   Y Y Y Y (2)
 | 
			
		||||
m68k/hp/hp-ux9.10           Orig. HPUX   0.7.x-CVS  03-04-30 goetz  Y Y Y Y
 | 
			
		||||
m88k/dg/dgux5.4R3.10        gcc 2.5.8    CVSHEAD    04-03-15 alex   Y Y ? ?
 | 
			
		||||
powerpc/apple/darwin6.5     gcc 3.1      0.7.x-CVS  03-04-23 alex   Y Y Y Y
 | 
			
		||||
powerpc/apple/darwin7.4.0   gcc 3.3      0.8.0      04-05-30 alex   Y Y Y Y
 | 
			
		||||
powerpc/apple/darwin8.1.0   gcc 4.0      0.9.x-CVS  05-06-27 alex   Y Y Y Y
 | 
			
		||||
powerpc/unknown/linux-gnu   gcc 3.3.3    0.8.0      04-05-30 alex   Y Y Y Y
 | 
			
		||||
sparc/sun/solaris2.6        gcc 2.95.3   0.7.x-CVS  03-04-22 alex   Y Y Y Y
 | 
			
		||||
sparc/sun/solaris2.7        gcc 3.3      0.8.0      04-05-30 alex   Y Y Y Y
 | 
			
		||||
@@ -60,4 +62,4 @@ Notes
 | 
			
		||||
			
 | 
			
		||||
 | 
			
		||||
-- 
 | 
			
		||||
$Id: Platforms.txt,v 1.13 2004/11/09 11:00:33 alex Exp $
 | 
			
		||||
$Id: Platforms.txt,v 1.13.2.2 2005/07/09 11:16:38 alex Exp $
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/*
 | 
			
		||||
 * ngIRCd -- The Next Generation IRC Daemon
 | 
			
		||||
 * Copyright (c)2001-2004 Alexander Barton <alex@barton.de>
 | 
			
		||||
 * 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
 | 
			
		||||
@@ -16,7 +16,7 @@
 | 
			
		||||
 | 
			
		||||
#include "portab.h"
 | 
			
		||||
 | 
			
		||||
static char UNUSED id[] = "$Id: conn.c,v 1.155 2005/06/26 13:43:59 alex Exp $";
 | 
			
		||||
static char UNUSED id[] = "$Id: conn.c,v 1.155.2.1 2005/07/02 14:45:07 alex Exp $";
 | 
			
		||||
 | 
			
		||||
#include "imp.h"
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
@@ -517,6 +517,15 @@ Conn_Handler( void )
 | 
			
		||||
} /* Conn_Handler */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Write a text string into the socket of a connection.
 | 
			
		||||
 * This function automatically appends CR+LF to the string and validates that
 | 
			
		||||
 * the result is a valid IRC message (oversized messages are shortened, for
 | 
			
		||||
 * example). Then it calls the Conn_Write() function to do the actual sending.
 | 
			
		||||
 * @param Idx Index fo the connection.
 | 
			
		||||
 * @param Format Format string, see printf().
 | 
			
		||||
 * @return true on success, false otherwise.
 | 
			
		||||
 */
 | 
			
		||||
#ifdef PROTOTYPES
 | 
			
		||||
GLOBAL bool
 | 
			
		||||
Conn_WriteStr( CONN_ID Idx, char *Format, ... )
 | 
			
		||||
@@ -528,10 +537,6 @@ char *Format;
 | 
			
		||||
va_dcl
 | 
			
		||||
#endif
 | 
			
		||||
{
 | 
			
		||||
	/* String in Socket schreiben. CR+LF wird von dieser Funktion
 | 
			
		||||
	 * automatisch angehaengt. Im Fehlerfall wird dir Verbindung
 | 
			
		||||
	 * getrennt und false geliefert. */
 | 
			
		||||
 | 
			
		||||
	char buffer[COMMAND_LEN];
 | 
			
		||||
	bool ok;
 | 
			
		||||
	va_list ap;
 | 
			
		||||
@@ -544,15 +549,38 @@ va_dcl
 | 
			
		||||
#else
 | 
			
		||||
	va_start( ap );
 | 
			
		||||
#endif
 | 
			
		||||
	if( vsnprintf( buffer, COMMAND_LEN - 2, Format, ap ) >= COMMAND_LEN - 2 )
 | 
			
		||||
	{
 | 
			
		||||
		Log( LOG_CRIT, "Text too long to send (connection %d)!", Idx );
 | 
			
		||||
		Conn_Close( Idx, "Text too long to send!", NULL, false );
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (vsnprintf(buffer, COMMAND_LEN - 2, Format, ap) >= COMMAND_LEN - 2) {
 | 
			
		||||
		/*
 | 
			
		||||
		 * The string that should be written to the socket is longer
 | 
			
		||||
		 * than the allowed size of COMMAND_LEN bytes (including both
 | 
			
		||||
		 * the CR and LF characters). This can be caused by the
 | 
			
		||||
		 * IRC_WriteXXX() functions when the prefix of this server had
 | 
			
		||||
		 * to be added to an already "quite long" command line which
 | 
			
		||||
		 * has been received from a regular IRC client, for example.
 | 
			
		||||
		 * 
 | 
			
		||||
		 * We are not allowed to send such "oversized" messages to
 | 
			
		||||
		 * other servers and clients, see RFC 2812 2.3 and 2813 3.3
 | 
			
		||||
		 * ("these messages SHALL NOT exceed 512 characters in length,
 | 
			
		||||
		 * counting all characters including the trailing CR-LF").
 | 
			
		||||
		 *
 | 
			
		||||
		 * So we have a big problem here: we should send more bytes
 | 
			
		||||
		 * to the network than we are allowed to and we don't know
 | 
			
		||||
		 * the originator (any more). The "old" behaviour of blaming
 | 
			
		||||
		 * the receiver ("next hop") is a bad idea (it could be just
 | 
			
		||||
		 * an other server only routing the message!), so the only
 | 
			
		||||
		 * option left is to shorten the string and to hope that the
 | 
			
		||||
		 * result is still somewhat useful ...
 | 
			
		||||
		 *                                                   -alex-
 | 
			
		||||
		 */
 | 
			
		||||
 | 
			
		||||
		strcpy (buffer + sizeof(buffer) - strlen(CUT_TXTSUFFIX) - 2 - 1,
 | 
			
		||||
			CUT_TXTSUFFIX);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifdef SNIFFER
 | 
			
		||||
	if( NGIRCd_Sniffer ) Log( LOG_DEBUG, " -> connection %d: '%s'.", Idx, buffer );
 | 
			
		||||
	if (NGIRCd_Sniffer)
 | 
			
		||||
		Log(LOG_DEBUG, " -> connection %d: '%s'.", Idx, buffer);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	strlcat( buffer, "\r\n", sizeof( buffer ));
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 * Please read the file COPYING, README and AUTHORS for more information.
 | 
			
		||||
 *
 | 
			
		||||
 * $Id: defines.h,v 1.52 2005/05/16 12:22:32 alex Exp $
 | 
			
		||||
 * $Id: defines.h,v 1.52.2.2 2005/07/05 22:58:25 alex Exp $
 | 
			
		||||
 *
 | 
			
		||||
 * Global defines of ngIRCd.
 | 
			
		||||
 */
 | 
			
		||||
@@ -43,7 +43,8 @@
 | 
			
		||||
#define CLIENT_ID_LEN 64		/* max. length of an IRC ID; see RFC 2812, 1.1 and 1.2.1 */
 | 
			
		||||
#define CLIENT_NICK_LEN 10		/* max. nick length; see. RFC 2812, 1.2.1 */
 | 
			
		||||
#define CLIENT_PASS_LEN 21		/* max. password length */
 | 
			
		||||
#define CLIENT_USER_LEN 9		/* max. length of user name ("login") */
 | 
			
		||||
#define CLIENT_USER_LEN 10		/* Max. length of user name ("login")
 | 
			
		||||
 					   see RFC 2812, section 1.2.1 */
 | 
			
		||||
#define CLIENT_NAME_LEN 32		/* max. length of "real names" */
 | 
			
		||||
#define CLIENT_HOST_LEN 64		/* max. host name length */
 | 
			
		||||
#define CLIENT_MODE_LEN 8		/* max. lenth of all client modes */
 | 
			
		||||
@@ -98,6 +99,8 @@
 | 
			
		||||
 | 
			
		||||
#define NOTICE_TXTPREFIX ""		/* prefix for NOTICEs from the server to users */
 | 
			
		||||
 | 
			
		||||
#define CUT_TXTSUFFIX "[CUT]"		/* Suffix for oversized messages that
 | 
			
		||||
					   have been shortened and cut off. */
 | 
			
		||||
#ifdef RENDEZVOUS
 | 
			
		||||
#define RENDEZVOUS_TYPE "_ircu._tcp."	/* service type to register with Rendezvous */
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
 | 
			
		||||
#include "portab.h"
 | 
			
		||||
 | 
			
		||||
static char UNUSED id[] = "$Id: ngircd.c,v 1.102 2005/06/24 19:55:10 alex Exp $";
 | 
			
		||||
static char UNUSED id[] = "$Id: ngircd.c,v 1.102.2.2 2005/07/08 23:20:04 alex Exp $";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file
 | 
			
		||||
@@ -713,28 +713,34 @@ NGIRCd_Init( bool NGIRCd_NoDaemon )
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (Conf_UID == 0) {
 | 
			
		||||
		Log( LOG_INFO, "Conf_UID must not be 0, switching to user nobody", Conf_UID );
 | 
			
		||||
		Log(LOG_INFO, "ServerUID must not be 0, using \"nobody\" instead.", Conf_UID);
 | 
			
		||||
 | 
			
		||||
  		if (! NGIRCd_getNobodyID(&Conf_UID, &Conf_GID)) {
 | 
			
		||||
			Log( LOG_WARNING, "Could not get uid/gid of user nobody: %s",
 | 
			
		||||
			Log(LOG_WARNING, "Could not get user/group ID of user \"nobody\": %s",
 | 
			
		||||
					errno ? strerror(errno) : "not found" );
 | 
			
		||||
			return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (getgid() != Conf_GID) {
 | 
			
		||||
		/* Change group ID */
 | 
			
		||||
		if (setgid(Conf_GID) != 0) {
 | 
			
		||||
			real_errno = errno;
 | 
			
		||||
			Log( LOG_ERR, "Can't change group ID to %u: %s", Conf_GID, strerror( errno ));
 | 
			
		||||
			if (real_errno != EPERM) 
 | 
			
		||||
				return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (getuid() != Conf_UID) {
 | 
			
		||||
		/* Change user ID */
 | 
			
		||||
		if (setuid(Conf_UID) != 0) {
 | 
			
		||||
			real_errno = errno;
 | 
			
		||||
			Log(LOG_ERR, "Can't change user ID to %u: %s", Conf_UID, strerror(errno));
 | 
			
		||||
			if (real_errno != EPERM) 
 | 
			
		||||
				return false;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	initialized = true;
 | 
			
		||||
 | 
			
		||||
@@ -765,16 +771,14 @@ NGIRCd_Init( bool NGIRCd_NoDaemon )
 | 
			
		||||
 | 
			
		||||
	Pidfile_Create( pid );
 | 
			
		||||
 | 
			
		||||
	/* check uid we are running as, can be different from values configured (e.g. if we were already
 | 
			
		||||
	started with a uid > 0 */
 | 
			
		||||
	/* Check UID/GID we are running as, can be different from values
 | 
			
		||||
	 * configured (e. g. if we were already started with a UID>0. */
 | 
			
		||||
	Conf_UID = getuid();
 | 
			
		||||
	Conf_GID = getgid();
 | 
			
		||||
 | 
			
		||||
	assert( Conf_GID > 0);
 | 
			
		||||
	assert( Conf_UID > 0);
 | 
			
		||||
 | 
			
		||||
	pwd = getpwuid( Conf_UID );
 | 
			
		||||
	grp = getgrgid( Conf_GID );
 | 
			
		||||
 | 
			
		||||
	Log( LOG_INFO, "Running as user %s(%ld), group %s(%ld), with PID %ld.",
 | 
			
		||||
				pwd ? pwd->pw_name : "unknown", Conf_UID,
 | 
			
		||||
				grp ? grp->gr_name : "unknown", Conf_GID, pid);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user