about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ipaddr/Makefile.am7
-rw-r--r--src/ngircd/conf.c7
-rw-r--r--src/ngircd/conn-ssl.c15
-rw-r--r--src/ngircd/conn.c6
-rw-r--r--src/ngircd/irc-login.c7
-rw-r--r--src/ngircd/login.c4
-rw-r--r--src/ngircd/ngircd.c128
-rw-r--r--src/ngircd/parse.c4
-rw-r--r--src/ngircd/sighandlers.c1
-rw-r--r--src/portab/portab.h14
-rw-r--r--src/tool/Makefile.am6
11 files changed, 122 insertions, 77 deletions
diff --git a/src/ipaddr/Makefile.am b/src/ipaddr/Makefile.am
index fcbb7cfd..6ce299f2 100644
--- a/src/ipaddr/Makefile.am
+++ b/src/ipaddr/Makefile.am
@@ -1,4 +1,9 @@
-AUTOMAKE_OPTIONS = ansi2knr
+#
+# ipaddr/Makefile.am
+# (c) 2008 Florian Westphal <fw@strlen.de>, public domain.
+#
+
+AUTOMAKE_OPTIONS = ../portab/ansi2knr
 
 INCLUDES = -I$(srcdir)/../portab
 
diff --git a/src/ngircd/conf.c b/src/ngircd/conf.c
index 627e6d3f..0052de8f 100644
--- a/src/ngircd/conf.c
+++ b/src/ngircd/conf.c
@@ -18,6 +18,7 @@
 
 #include "imp.h"
 #include <assert.h>
+#include <ctype.h>
 #include <errno.h>
 #ifdef PROTOTYPES
 #	include <stdarg.h>
@@ -34,9 +35,6 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#ifdef HAVE_CTYPE_H
-# include <ctype.h>
-#endif
 
 #include "array.h"
 #include "ngircd.h"
@@ -106,6 +104,8 @@ ConfSSL_Init(void)
 	free(Conf_SSLOptions.DHFile);
 	Conf_SSLOptions.DHFile = NULL;
 	array_free_wipe(&Conf_SSLOptions.KeyFilePassword);
+
+	array_free(&Conf_SSLOptions.ListenPorts);
 }
 
 /**
@@ -691,6 +691,7 @@ Set_Defaults(bool InitServers)
 		 PACKAGE_NAME, PACKAGE_VERSION);
 	free(Conf_ListenAddress);
 	Conf_ListenAddress = NULL;
+	array_free(&Conf_ListenPorts);
 	array_free(&Conf_Motd);
 	strlcpy(Conf_MotdFile, SYSCONFDIR, sizeof(Conf_MotdFile));
 	strlcat(Conf_MotdFile, MOTD_FILE, sizeof(Conf_MotdFile));
diff --git a/src/ngircd/conn-ssl.c b/src/ngircd/conn-ssl.c
index 8f7b70af..914d0165 100644
--- a/src/ngircd/conn-ssl.c
+++ b/src/ngircd/conn-ssl.c
@@ -241,6 +241,9 @@ void ConnSSL_Free(CONNECTION *c)
 bool
 ConnSSL_InitLibrary( void )
 {
+	if (!array_bytes(&Conf_SSLOptions.ListenPorts))
+		return true;
+
 #ifdef HAVE_LIBSSL
 	SSL_CTX *newctx;
 
@@ -256,12 +259,14 @@ ConnSSL_InitLibrary( void )
 		 * According to OpenSSL RAND_egd(3): "The automatic query of /var/run/egd-pool et al was added in OpenSSL 0.9.7";
 		 * so it makes little sense to deal with PRNGD seeding ourselves.
 		 */
+		array_free(&Conf_SSLOptions.ListenPorts);
 		return false;
 	}
 
 	newctx = SSL_CTX_new(SSLv23_method());
 	if (!newctx) {
 		LogOpenSSLError("SSL_CTX_new()", NULL);
+		array_free(&Conf_SSLOptions.ListenPorts);
 		return false;
 	}
 
@@ -276,6 +281,7 @@ ConnSSL_InitLibrary( void )
 	return true;
 out:
 	SSL_CTX_free(newctx);
+	array_free(&Conf_SSLOptions.ListenPorts);
 	return false;
 #endif
 #ifdef HAVE_LIBGNUTLS
@@ -287,10 +293,13 @@ out:
 	err = gnutls_global_init();
 	if (err) {
 		Log(LOG_ERR, "gnutls_global_init(): %s", gnutls_strerror(err));
+		array_free(&Conf_SSLOptions.ListenPorts);
 		return false;
 	}
-	if (!ConnSSL_LoadServerKey_gnutls())
+	if (!ConnSSL_LoadServerKey_gnutls()) {
+		array_free(&Conf_SSLOptions.ListenPorts);
 		return false;
+	}
 	Log(LOG_INFO, "gnutls %s initialized.", gnutls_check_version(NULL));
 	initialized = true;
 	return true;
@@ -313,7 +322,7 @@ ConnSSL_LoadServerKey_gnutls(void)
 
 	cert_file = Conf_SSLOptions.CertFile ? Conf_SSLOptions.CertFile:Conf_SSLOptions.KeyFile;
 	if (!cert_file) {
-		Log(LOG_NOTICE, "No SSL server key configured, SSL disabled.");
+		Log(LOG_ERR, "No SSL server key configured!");
 		return false;
 	}
 
@@ -344,7 +353,7 @@ ConnSSL_LoadServerKey_openssl(SSL_CTX *ctx)
 
 	assert(ctx);
 	if (!Conf_SSLOptions.KeyFile) {
-		Log(LOG_NOTICE, "No SSL server key configured, SSL disabled.");
+		Log(LOG_ERR, "No SSL server key configured!");
 		return false;
 	}
 
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
index 81a0f450..f4511642 100644
--- a/src/ngircd/conn.c
+++ b/src/ngircd/conn.c
@@ -47,10 +47,6 @@
 # include <netinet/ip.h>
 #endif
 
-#ifdef HAVE_STDINT_H
-# include <stdint.h>			/* e.g. for Mac OS X */
-#endif
-
 #ifdef TCPWRAP
 # include <tcpd.h>			/* for TCP Wrappers */
 #endif
@@ -1366,7 +1362,7 @@ Count_Connections(ng_ipaddr_t *a)
  * @returns	Accepted socket descriptor or -1 on error.
  */
 static int
-New_Connection(int Sock, bool IsSSL)
+New_Connection(int Sock, UNUSED bool IsSSL)
 {
 #ifdef TCPWRAP
 	struct request_info req;
diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c
index 9e1abdd5..74d8b9d1 100644
--- a/src/ngircd/irc-login.c
+++ b/src/ngircd/irc-login.c
@@ -418,12 +418,15 @@ IRC_USER(CLIENT * Client, REQUEST * Req)
 						  Client_ID(Client),
 						  Req->command);
 
-		/* User name: only alphanumeric characters are allowed! */
+		/* User name: only alphanumeric characters and limited
+		   punctuation is allowed.*/
 		ptr = Req->argv[0];
 		while (*ptr) {
 			if ((*ptr < '0' || *ptr > '9') &&
 			    (*ptr < 'A' || *ptr > 'Z') &&
-			    (*ptr < 'a' || *ptr > 'z')) {
+			    (*ptr < 'a' || *ptr > 'z') &&
+			    (*ptr != '+') && (*ptr != '-') &&
+			    (*ptr != '.') && (*ptr != '_')) {
 				Conn_Close(Client_Conn(Client), NULL,
 					   "Invalid user name", true);
 				return DISCONNECTED;
diff --git a/src/ngircd/login.c b/src/ngircd/login.c
index 460fcd1e..d79344b5 100644
--- a/src/ngircd/login.c
+++ b/src/ngircd/login.c
@@ -163,8 +163,8 @@ Login_User_PostAuth(CLIENT *Client)
 		return false;
 	if (!IRC_WriteStrClient
 	    (Client, RPL_YOURHOST_MSG, Client_ID(Client),
-	     Client_ID(Client_ThisServer()), PACKAGE_VERSION, TARGET_CPU,
-	     TARGET_VENDOR, TARGET_OS))
+	     Client_ID(Client_ThisServer()), PACKAGE_VERSION, HOST_CPU,
+	     HOST_VENDOR, HOST_OS))
 		return false;
 	if (!IRC_WriteStrClient
 	    (Client, RPL_CREATED_MSG, Client_ID(Client), NGIRCd_StartStr))
diff --git a/src/ngircd/ngircd.c b/src/ngircd/ngircd.c
index 8a93bcb0..a4c2fe8a 100644
--- a/src/ngircd/ngircd.c
+++ b/src/ngircd/ngircd.c
@@ -330,6 +330,7 @@ main(int argc, const char *argv[])
 		Channel_Exit();
 		Class_Exit();
 		Log_Exit();
+		Signals_Exit();
 	}
 	Pidfile_Delete();
 
@@ -346,70 +347,99 @@ main(int argc, const char *argv[])
  * line switch.
  */
 static void
-Fill_Version( void )
+Fill_Version(void)
 {
 	NGIRCd_VersionAddition[0] = '\0';
 
-#ifdef SYSLOG
-	strlcpy( NGIRCd_VersionAddition, "SYSLOG", sizeof NGIRCd_VersionAddition );
-#endif
-#ifdef ZLIB
-	if( NGIRCd_VersionAddition[0] )
-		strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
-	strlcat( NGIRCd_VersionAddition, "ZLIB", sizeof NGIRCd_VersionAddition );
+#ifdef DEBUG
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "DEBUG",
+		sizeof NGIRCd_VersionAddition);
 #endif
-#ifdef SSL_SUPPORT
-	if ( NGIRCd_VersionAddition[0] ) strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
-	strlcat( NGIRCd_VersionAddition, "SSL", sizeof NGIRCd_VersionAddition );
+#ifdef IDENTAUTH
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "IDENT",
+		sizeof NGIRCd_VersionAddition);
 #endif
-#ifdef TCPWRAP
-	if( NGIRCd_VersionAddition[0] )
-			strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
-	strlcat( NGIRCd_VersionAddition, "TCPWRAP", sizeof NGIRCd_VersionAddition );
+#ifdef WANT_IPV6
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof(NGIRCd_VersionAddition));
+	strlcat(NGIRCd_VersionAddition, "IPv6",
+		sizeof(NGIRCd_VersionAddition));
 #endif
-#ifdef IDENTAUTH
-	if( NGIRCd_VersionAddition[0] )
-		strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
-	strlcat( NGIRCd_VersionAddition, "IDENT", sizeof NGIRCd_VersionAddition );
+#ifdef IRCPLUS
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "IRCPLUS",
+		sizeof NGIRCd_VersionAddition);
 #endif
 #ifdef PAM
 	if (NGIRCd_VersionAddition[0])
-		strlcat(NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition);
-	strlcat(NGIRCd_VersionAddition, "PAM", sizeof NGIRCd_VersionAddition);
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "PAM",
+		sizeof NGIRCd_VersionAddition);
 #endif
-#ifdef DEBUG
-	if( NGIRCd_VersionAddition[0] )
-		strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
-	strlcat( NGIRCd_VersionAddition, "DEBUG", sizeof NGIRCd_VersionAddition );
+#ifdef STRICT_RFC
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "RFC",
+		sizeof NGIRCd_VersionAddition);
 #endif
 #ifdef SNIFFER
-	if( NGIRCd_VersionAddition[0] )
-		strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
-	strlcat( NGIRCd_VersionAddition, "SNIFFER", sizeof NGIRCd_VersionAddition );
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "SNIFFER",
+		sizeof NGIRCd_VersionAddition);
 #endif
-#ifdef STRICT_RFC
-	if( NGIRCd_VersionAddition[0] )
-		strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
-	strlcat( NGIRCd_VersionAddition, "RFC", sizeof NGIRCd_VersionAddition );
+#ifdef SSL_SUPPORT
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "SSL",
+		sizeof NGIRCd_VersionAddition);
 #endif
-#ifdef IRCPLUS
-	if( NGIRCd_VersionAddition[0] )
-		strlcat( NGIRCd_VersionAddition, "+", sizeof NGIRCd_VersionAddition );
-	strlcat( NGIRCd_VersionAddition, "IRCPLUS", sizeof NGIRCd_VersionAddition );
+#ifdef SYSLOG
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "SYSLOG",
+		sizeof NGIRCd_VersionAddition);
 #endif
-#ifdef WANT_IPV6
+#ifdef TCPWRAP
 	if (NGIRCd_VersionAddition[0])
-		strlcat(NGIRCd_VersionAddition, "+", sizeof(NGIRCd_VersionAddition));
-	strlcat(NGIRCd_VersionAddition, "IPv6", sizeof(NGIRCd_VersionAddition));
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "TCPWRAP",
+		sizeof NGIRCd_VersionAddition);
 #endif
-	if( NGIRCd_VersionAddition[0] )
-		strlcat( NGIRCd_VersionAddition, "-", sizeof( NGIRCd_VersionAddition ));
-
-	strlcat( NGIRCd_VersionAddition, TARGET_CPU, sizeof( NGIRCd_VersionAddition ));
-	strlcat( NGIRCd_VersionAddition, "/", sizeof( NGIRCd_VersionAddition ));
-	strlcat( NGIRCd_VersionAddition, TARGET_VENDOR, sizeof( NGIRCd_VersionAddition ));
-	strlcat( NGIRCd_VersionAddition, "/", sizeof( NGIRCd_VersionAddition ));
-	strlcat( NGIRCd_VersionAddition, TARGET_OS, sizeof( NGIRCd_VersionAddition ));
+#ifdef ZLIB
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "+",
+			sizeof NGIRCd_VersionAddition);
+	strlcat(NGIRCd_VersionAddition, "ZLIB",
+		sizeof NGIRCd_VersionAddition);
+#endif
+	if (NGIRCd_VersionAddition[0])
+		strlcat(NGIRCd_VersionAddition, "-",
+			sizeof(NGIRCd_VersionAddition));
+
+	strlcat(NGIRCd_VersionAddition, HOST_CPU,
+		sizeof(NGIRCd_VersionAddition));
+	strlcat(NGIRCd_VersionAddition, "/", sizeof(NGIRCd_VersionAddition));
+	strlcat(NGIRCd_VersionAddition, HOST_VENDOR,
+		sizeof(NGIRCd_VersionAddition));
+	strlcat(NGIRCd_VersionAddition, "/", sizeof(NGIRCd_VersionAddition));
+	strlcat(NGIRCd_VersionAddition, HOST_OS,
+		sizeof(NGIRCd_VersionAddition));
 
 	snprintf(NGIRCd_Version, sizeof NGIRCd_Version, "%s %s-%s",
 		 PACKAGE_NAME, PACKAGE_VERSION, NGIRCd_VersionAddition);
@@ -632,7 +662,7 @@ NGIRCd_Init(bool NGIRCd_NoDaemon)
 	/* SSL initialization */
 	if (!ConnSSL_InitLibrary())
 		Log(LOG_WARNING,
-		    "Warning: Error during SSL initialization, continuing ...");
+		    "Error during SSL initialization, continuing without SSL ...");
 
 	/* Change root */
 	if (Conf_Chroot[0]) {
@@ -715,7 +745,7 @@ NGIRCd_Init(bool NGIRCd_NoDaemon)
 		}
 
 		/* New child process */
-#ifndef NeXT
+#ifdef HAVE_SETSID
 		(void)setsid();
 #else
 		setpgrp(0, getpid());
diff --git a/src/ngircd/parse.c b/src/ngircd/parse.c
index 66bfef53..e9c5d53a 100644
--- a/src/ngircd/parse.c
+++ b/src/ngircd/parse.c
@@ -60,6 +60,7 @@ static COMMAND My_Commands[] =
 {
 	{ "ADMIN", IRC_ADMIN, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
 	{ "AWAY", IRC_AWAY, CLIENT_USER, 0, 0, 0 },
+	{ "CAP", IRC_CAP, 0xFFFF, 0, 0, 0 },
 	{ "CONNECT", IRC_CONNECT, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
 	{ "DIE", IRC_DIE, CLIENT_USER, 0, 0, 0 },
 	{ "DISCONNECT", IRC_DISCONNECT, CLIENT_USER, 0, 0, 0 },
@@ -110,11 +111,12 @@ static COMMAND My_Commands[] =
 	{ "WHO", IRC_WHO, CLIENT_USER, 0, 0, 0 },
 	{ "WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
 	{ "WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 },
+
 #ifdef IRCPLUS
 	{ "CHANINFO", IRC_CHANINFO, CLIENT_SERVER, 0, 0, 0 },
 #endif
+
 #ifndef STRICT_RFC
-	{ "CAP", IRC_CAP, 0xFFFF, 0, 0, 0 },
 	{ "GET",  IRC_QUIT_HTTP, CLIENT_UNKNOWN, 0, 0, 0 },
 	{ "POST", IRC_QUIT_HTTP, CLIENT_UNKNOWN, 0, 0, 0 },
 #endif
diff --git a/src/ngircd/sighandlers.c b/src/ngircd/sighandlers.c
index efb41bcd..a219105f 100644
--- a/src/ngircd/sighandlers.c
+++ b/src/ngircd/sighandlers.c
@@ -334,6 +334,7 @@ Signals_Exit(void)
 #endif
 	close(signalpipe[1]);
 	close(signalpipe[0]);
+	signalpipe[0] = signalpipe[1] = 0;
 }
 
 /* -eof- */
diff --git a/src/portab/portab.h b/src/portab/portab.h
index 90f36a0e..1c6e3f85 100644
--- a/src/portab/portab.h
+++ b/src/portab/portab.h
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2010 Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors.
  *
  * 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
@@ -120,16 +120,16 @@ typedef unsigned char bool;
 
 /* target constants  */
 
-#ifndef TARGET_OS
-#define TARGET_OS "unknown"
+#ifndef HOST_OS
+#define HOST_OS "unknown"
 #endif
 
-#ifndef TARGET_CPU
-#define TARGET_CPU "unknown"
+#ifndef HOST_CPU
+#define HOST_CPU "unknown"
 #endif
 
-#ifndef TARGET_VENDOR
-#define TARGET_VENDOR "unknown"
+#ifndef HOST_VENDOR
+#define HOST_VENDOR "unknown"
 #endif
 
 
diff --git a/src/tool/Makefile.am b/src/tool/Makefile.am
index 5f1e97ad..8d6cda46 100644
--- a/src/tool/Makefile.am
+++ b/src/tool/Makefile.am
@@ -1,6 +1,6 @@
 #
 # ngIRCd -- The Next Generation IRC Daemon
-# Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
+# Copyright (c)2001-2012 Alexander Barton (alex@barton.de) and Contributors
 #
 # 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
@@ -8,10 +8,8 @@
 # (at your option) any later version.
 # Please read the file COPYING, README and AUTHORS for more information.
 #
-# $Id: Makefile.am,v 1.1 2003/01/13 12:20:16 alex Exp $
-#
 
-AUTOMAKE_OPTIONS = ansi2knr
+AUTOMAKE_OPTIONS = ../portab/ansi2knr
 
 INCLUDES = -I$(srcdir)/../portab