mirror of
https://github.com/osmarks/ngircd.git
synced 2025-11-05 16:33:00 +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 --
|
-- 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
|
- Don't generate error messages for unknown commands received before the
|
||||||
client is registered with the server (like the original ircd).
|
client is registered with the server (like the original ircd).
|
||||||
- Never run with root privileges but always switch the user ID.
|
- 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.
|
# (at your option) any later version.
|
||||||
# Please read the file COPYING, README and AUTHORS for more information.
|
# 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 --
|
# -- Initialisation --
|
||||||
|
|
||||||
AC_PREREQ(2.50)
|
AC_PREREQ(2.50)
|
||||||
AC_INIT(ngircd, CVSHEAD)
|
AC_INIT(ngircd, 0.9.0-pre1)
|
||||||
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
|
AC_CONFIG_SRCDIR(src/ngircd/ngircd.c)
|
||||||
AC_CANONICAL_TARGET
|
AC_CANONICAL_TARGET
|
||||||
AM_INIT_AUTOMAKE(1.6)
|
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
|
ngircd (0.8.3-0ab1) unstable; urgency=high
|
||||||
|
|
||||||
* New "upstream release", including security fixes.
|
* New "upstream release", including security fixes.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
%define name ngircd
|
%define name ngircd
|
||||||
%define version CVSHEAD
|
%define version 0.9.0
|
||||||
%define release 1
|
%define release 1
|
||||||
%define prefix %{_prefix}
|
%define prefix %{_prefix}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
ngIRCd - Next Generation IRC Server
|
ngIRCd - Next Generation IRC Server
|
||||||
|
|
||||||
(c)2001-2004 Alexander Barton
|
(c)2001-2005 Alexander Barton
|
||||||
alex@barton.de, http://www.barton.de/
|
alex@barton.de, http://www.barton.de/
|
||||||
|
|
||||||
ngIRCd is free software and published under the
|
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
|
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
|
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/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/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/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
|
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 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/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
|
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 ? ?
|
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/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/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
|
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.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/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
|
* 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
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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 "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@@ -517,6 +517,15 @@ Conn_Handler( void )
|
|||||||
} /* Conn_Handler */
|
} /* 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
|
#ifdef PROTOTYPES
|
||||||
GLOBAL bool
|
GLOBAL bool
|
||||||
Conn_WriteStr( CONN_ID Idx, char *Format, ... )
|
Conn_WriteStr( CONN_ID Idx, char *Format, ... )
|
||||||
@@ -528,10 +537,6 @@ char *Format;
|
|||||||
va_dcl
|
va_dcl
|
||||||
#endif
|
#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];
|
char buffer[COMMAND_LEN];
|
||||||
bool ok;
|
bool ok;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@@ -544,15 +549,38 @@ va_dcl
|
|||||||
#else
|
#else
|
||||||
va_start( ap );
|
va_start( ap );
|
||||||
#endif
|
#endif
|
||||||
if( vsnprintf( buffer, COMMAND_LEN - 2, Format, ap ) >= COMMAND_LEN - 2 )
|
|
||||||
{
|
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 );
|
* The string that should be written to the socket is longer
|
||||||
return false;
|
* 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
|
#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
|
#endif
|
||||||
|
|
||||||
strlcat( buffer, "\r\n", sizeof( buffer ));
|
strlcat( buffer, "\r\n", sizeof( buffer ));
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
* Please read the file COPYING, README and AUTHORS for more information.
|
* 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.
|
* 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_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_NICK_LEN 10 /* max. nick length; see. RFC 2812, 1.2.1 */
|
||||||
#define CLIENT_PASS_LEN 21 /* max. password length */
|
#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_NAME_LEN 32 /* max. length of "real names" */
|
||||||
#define CLIENT_HOST_LEN 64 /* max. host name length */
|
#define CLIENT_HOST_LEN 64 /* max. host name length */
|
||||||
#define CLIENT_MODE_LEN 8 /* max. lenth of all client modes */
|
#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 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
|
#ifdef RENDEZVOUS
|
||||||
#define RENDEZVOUS_TYPE "_ircu._tcp." /* service type to register with Rendezvous */
|
#define RENDEZVOUS_TYPE "_ircu._tcp." /* service type to register with Rendezvous */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include "portab.h"
|
#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
|
* @file
|
||||||
@@ -712,28 +712,34 @@ NGIRCd_Init( bool NGIRCd_NoDaemon )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Conf_UID == 0 ) {
|
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 )) {
|
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" );
|
errno ? strerror(errno) : "not found" );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( setgid( Conf_GID ) != 0 ) {
|
if (getgid() != Conf_GID) {
|
||||||
real_errno = errno;
|
/* Change group ID */
|
||||||
Log( LOG_ERR, "Can't change group ID to %u: %s", Conf_GID, strerror( errno ));
|
if (setgid(Conf_GID) != 0) {
|
||||||
if (real_errno != EPERM)
|
real_errno = errno;
|
||||||
return false;
|
Log( LOG_ERR, "Can't change group ID to %u: %s", Conf_GID, strerror( errno ));
|
||||||
|
if (real_errno != EPERM)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( setuid( Conf_UID ) != 0 ) {
|
if (getuid() != Conf_UID) {
|
||||||
real_errno = errno;
|
/* Change user ID */
|
||||||
Log( LOG_ERR, "Can't change user ID to %u: %s", Conf_UID, strerror( errno ));
|
if (setuid(Conf_UID) != 0) {
|
||||||
if (real_errno != EPERM)
|
real_errno = errno;
|
||||||
return false;
|
Log(LOG_ERR, "Can't change user ID to %u: %s", Conf_UID, strerror(errno));
|
||||||
|
if (real_errno != EPERM)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initialized = true;
|
initialized = true;
|
||||||
@@ -765,16 +771,14 @@ NGIRCd_Init( bool NGIRCd_NoDaemon )
|
|||||||
|
|
||||||
Pidfile_Create( pid );
|
Pidfile_Create( pid );
|
||||||
|
|
||||||
/* check uid we are running as, can be different from values configured (e.g. if we were already
|
/* Check UID/GID we are running as, can be different from values
|
||||||
started with a uid > 0 */
|
* configured (e. g. if we were already started with a UID>0. */
|
||||||
Conf_UID = getuid();
|
Conf_UID = getuid();
|
||||||
Conf_GID = getgid();
|
Conf_GID = getgid();
|
||||||
|
|
||||||
assert( Conf_GID > 0);
|
|
||||||
assert( Conf_UID > 0);
|
|
||||||
|
|
||||||
pwd = getpwuid( Conf_UID );
|
pwd = getpwuid( Conf_UID );
|
||||||
grp = getgrgid( Conf_GID );
|
grp = getgrgid( Conf_GID );
|
||||||
|
|
||||||
Log( LOG_INFO, "Running as user %s(%ld), group %s(%ld), with PID %ld.",
|
Log( LOG_INFO, "Running as user %s(%ld), group %s(%ld), with PID %ld.",
|
||||||
pwd ? pwd->pw_name : "unknown", Conf_UID,
|
pwd ? pwd->pw_name : "unknown", Conf_UID,
|
||||||
grp ? grp->gr_name : "unknown", Conf_GID, pid);
|
grp ? grp->gr_name : "unknown", Conf_GID, pid);
|
||||||
|
|||||||
Reference in New Issue
Block a user