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

This commit is contained in:
Alexander Barton 2003-09-11 12:05:28 +00:00
parent d8f3c2b42b
commit e33ab90379
7 changed files with 55 additions and 9 deletions

View File

@ -12,6 +12,8 @@
ngIRCd CVS-HEAD ngIRCd CVS-HEAD
- Added new configuration variable "Listen" to bind all listening
sockets of the server to a single IP address.
- Suppress misleading error message of diff during make run. - Suppress misleading error message of diff during make run.
- Enhanced test-suite and made it work on GNU/Hurd. - Enhanced test-suite and made it work on GNU/Hurd.
- Fixed minor typo in debug output :-) - Fixed minor typo in debug output :-)
@ -464,4 +466,4 @@ ngIRCd 0.0.1, 31.12.2001
-- --
$Id: ChangeLog,v 1.210 2003/09/09 13:24:41 alex Exp $ $Id: ChangeLog,v 1.211 2003/09/11 12:05:28 alex Exp $

7
NEWS
View File

@ -10,6 +10,11 @@
-- NEWS -- -- NEWS --
ngIRCd CVS-HEAD
- 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) ngIRCd 0.7.1 (2003-07-18)
- Added support for GNU/Hurd. - Added support for GNU/Hurd.
@ -165,4 +170,4 @@ ngIRCd 0.0.1, 31.12.2001
-- --
$Id: NEWS,v 1.57 2003/08/30 20:37:15 alex Exp $ $Id: NEWS,v 1.58 2003/09/11 12:05:28 alex Exp $

View File

@ -1,4 +1,4 @@
# $Id: sample-ngircd.conf,v 1.22 2003/04/29 12:36:09 alex Exp $ # $Id: sample-ngircd.conf,v 1.23 2003/09/11 12:05:28 alex Exp $
# #
# This is a sample configuration file for the ngIRCd, which must adept to # This is a sample configuration file for the ngIRCd, which must adept to
@ -36,6 +36,10 @@
# Ports on which the server should listen. There may be more than # Ports on which the server should listen. There may be more than
# one port, separated with ";". (Default: 6667) # one port, separated with ";". (Default: 6667)
;Ports = 6667, 6668, 66694 ;Ports = 6667, 6668, 66694
# IP address on which the server should listen. (Default: empty,
# so the server listens on all IP addresses of the system)
;Listen = 1.2.3.4
# Text file with the "message of the day" (MOTD). This message will # Text file with the "message of the day" (MOTD). This message will
# be shown to all users connecting to the server: # be shown to all users connecting to the server:

View File

@ -1,5 +1,5 @@
.\" .\"
.\" $Id: ngircd.conf.5,v 1.10 2003/05/02 20:51:42 alex Exp $ .\" $Id: ngircd.conf.5,v 1.11 2003/09/11 12:05:28 alex Exp $
.\" .\"
.TH ngircd.conf 5 "Mai 2003" ngircd "ngIRCd Manual" .TH ngircd.conf 5 "Mai 2003" ngircd "ngIRCd Manual"
.SH NAME .SH NAME
@ -67,6 +67,10 @@ command.
Ports on which the server should listen. There may be more than one port, Ports on which the server should listen. There may be more than one port,
separated with ';'. Default: 6667. separated with ';'. Default: 6667.
.TP .TP
\fBListen\fR
The ip address on which the server should listen. Default is empty, so
the server listens on all configured ip addresses and interfaces.
.TP
\fBMotdFile\fR \fBMotdFile\fR
Text file with the "message of the day" (MOTD). This message will be shown Text file with the "message of the day" (MOTD). This message will be shown
to all users connecting to the server. to all users connecting to the server.

View File

@ -14,7 +14,7 @@
#include "portab.h" #include "portab.h"
static char UNUSED id[] = "$Id: conf.c,v 1.59 2003/04/29 12:36:09 alex Exp $"; static char UNUSED id[] = "$Id: conf.c,v 1.60 2003/09/11 12:05:28 alex Exp $";
#include "imp.h" #include "imp.h"
#include <assert.h> #include <assert.h>
@ -120,6 +120,7 @@ Conf_Test( VOID )
printf( "%u", Conf_ListenPorts[i] ); printf( "%u", Conf_ListenPorts[i] );
} }
puts( "" ); puts( "" );
printf( " Listen = %s\n", Conf_ListenAddress );
pwd = getpwuid( Conf_UID ); pwd = getpwuid( Conf_UID );
if( pwd ) printf( " ServerUID = %s\n", pwd->pw_name ); if( pwd ) printf( " ServerUID = %s\n", pwd->pw_name );
else printf( " ServerUID = %ld\n", (LONG)Conf_UID ); else printf( " ServerUID = %ld\n", (LONG)Conf_UID );
@ -340,6 +341,7 @@ Set_Defaults( BOOLEAN InitServers )
strlcat( Conf_MotdFile, MOTD_FILE, sizeof( Conf_MotdFile )); strlcat( Conf_MotdFile, MOTD_FILE, sizeof( Conf_MotdFile ));
Conf_ListenPorts_Count = 0; Conf_ListenPorts_Count = 0;
strcpy( Conf_ListenAddress, "" );
Conf_UID = Conf_GID = 0; Conf_UID = Conf_GID = 0;
@ -699,6 +701,15 @@ Handle_GLOBAL( INT Line, CHAR *Var, CHAR *Arg )
Conf_MaxJoins = atoi( Arg ); Conf_MaxJoins = atoi( Arg );
return; return;
} }
if( strcasecmp( Var, "Listen" ) == 0 )
{
/* IP-Address to bind sockets */
if( strlcpy( Conf_ListenAddress, Arg, sizeof( Conf_ListenAddress )) >= sizeof( Conf_ListenAddress ))
{
Config_Error( LOG_WARNING, "%s, line %d: Value of \"Listen\" too long!", NGIRCd_ConfFile, Line );
return;
}
}
Config_Error( LOG_ERR, "%s, line %d (section \"Global\"): Unknown variable \"%s\"!", NGIRCd_ConfFile, Line, Var ); Config_Error( LOG_ERR, "%s, line %d (section \"Global\"): Unknown variable \"%s\"!", NGIRCd_ConfFile, Line, Var );
} /* Handle_GLOBAL */ } /* Handle_GLOBAL */

View File

@ -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: conf.h,v 1.26 2002/12/31 16:12:50 alex Exp $ * $Id: conf.h,v 1.27 2003/09/11 12:05:28 alex Exp $
* *
* Configuration management (header) * Configuration management (header)
*/ */
@ -76,6 +76,9 @@ GLOBAL CHAR Conf_MotdFile[FNAME_LEN];
GLOBAL UINT Conf_ListenPorts[MAX_LISTEN_PORTS]; GLOBAL UINT Conf_ListenPorts[MAX_LISTEN_PORTS];
GLOBAL INT Conf_ListenPorts_Count; GLOBAL INT Conf_ListenPorts_Count;
/* Address to which the socket should be bound or empty (=all) */
GLOBAL CHAR Conf_ListenAddress[16];
/* User and group ID the server should run with */ /* User and group ID the server should run with */
GLOBAL UINT Conf_UID; GLOBAL UINT Conf_UID;
GLOBAL UINT Conf_GID; GLOBAL UINT Conf_GID;

View File

@ -16,7 +16,7 @@
#include "portab.h" #include "portab.h"
static char UNUSED id[] = "$Id: conn.c,v 1.124 2003/08/30 20:28:54 alex Exp $"; static char UNUSED id[] = "$Id: conn.c,v 1.125 2003/09/11 12:05:28 alex Exp $";
#include "imp.h" #include "imp.h"
#include <assert.h> #include <assert.h>
@ -236,6 +236,7 @@ Conn_NewListener( CONST UINT Port )
/* Create new listening socket on specified port */ /* Create new listening socket on specified port */
struct sockaddr_in addr; struct sockaddr_in addr;
struct in_addr inaddr;
INT sock; INT sock;
#ifdef RENDEZVOUS #ifdef RENDEZVOUS
CHAR name[CLIENT_ID_LEN], *info; CHAR name[CLIENT_ID_LEN], *info;
@ -243,9 +244,24 @@ Conn_NewListener( CONST UINT Port )
/* Server-"Listen"-Socket initialisieren */ /* Server-"Listen"-Socket initialisieren */
memset( &addr, 0, sizeof( addr )); memset( &addr, 0, sizeof( addr ));
memset( &inaddr, 0, sizeof( inaddr ));
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
addr.sin_port = htons( Port ); addr.sin_port = htons( Port );
addr.sin_addr.s_addr = htonl( INADDR_ANY ); if( Conf_ListenAddress[0] )
{
#ifdef HAVE_INET_ATON
if( inet_aton( Conf_ListenAddress, &inaddr ) == 0 )
#else
inaddr.s_addr = inet_addr( Conf_ListenAddress );
if( inaddr.s_addr == (unsigned)-1 )
#endif
{
Log( LOG_CRIT, "Can't listen on %s:%u: can't convert ip address %s!", Conf_ListenAddress, Port, Conf_ListenAddress );
return FALSE;
}
}
else inaddr.s_addr = htonl( INADDR_ANY );
addr.sin_addr = inaddr;
/* Socket erzeugen */ /* Socket erzeugen */
sock = socket( PF_INET, SOCK_STREAM, 0); sock = socket( PF_INET, SOCK_STREAM, 0);
@ -279,7 +295,8 @@ Conn_NewListener( CONST UINT Port )
if( sock > Conn_MaxFD ) Conn_MaxFD = sock; if( sock > Conn_MaxFD ) Conn_MaxFD = sock;
Log( LOG_INFO, "Now listening on port %d (socket %d).", Port, sock ); if( Conf_ListenAddress[0]) Log( LOG_INFO, "Now listening on %s:%d (socket %d).", Conf_ListenAddress, Port, sock );
else Log( LOG_INFO, "Now listening on 0.0.0.0:%d (socket %d).", Port, sock );
#ifdef RENDEZVOUS #ifdef RENDEZVOUS
/* Get best server description text */ /* Get best server description text */