From: Alexander Barton Date: Sun, 23 Sep 2012 17:58:50 +0000 (+0200) Subject: Merge branch 'bug92-xop' X-Git-Tag: rel-20-rc1~76 X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=commitdiff_plain;h=e3e181f4b3eae0e552632bce19bdff990196938f;hp=1f2aa4da6f62124bdbed4f2dce7e40ed4b411e2a Merge branch 'bug92-xop' By Alexander Barton (5) and Sebastian Köhler (2) * bug92-xop: Fix NAMES/WHO response when client has multi-prefix Fix prefix of "halfop" when "multi-prefix" is active Clean up doc/.gitignore doc/Modes.txt: add version number to new channel modes Fix some "whitespace glitches" Tests and documentation for xop Implemented xop support Conflicts (because of "multi-prefix fix"): src/ngircd/irc-info.c This fixes bug #92 "ngircd does not support XOP usermodes". --- diff --git a/autogen.sh b/autogen.sh index c87085ac..cca200b2 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,7 +1,7 @@ #!/bin/sh # # ngIRCd -- The Next Generation IRC Daemon -# Copyright (c)2001-2008 Alexander Barton +# 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 @@ -98,6 +98,12 @@ Notfound() exit 1 } +Run() +{ + [ "$VERBOSE" = "1" ] && echo " - running \"$@\" ..." + $@ +} + # Reset locale settings to suppress warning messages of Perl unset LC_ALL unset LANG @@ -125,13 +131,13 @@ fi # specifies one: echo "Searching tools ..." [ -z "$ACLOCAL" ] && ACLOCAL=`Search aclocal 1` -[ "$VERBOSE" = "1" ] && echo "ACLOCAL=$ACLOCAL" +[ "$VERBOSE" = "1" ] && echo " - ACLOCAL=$ACLOCAL" [ -z "$AUTOHEADER" ] && AUTOHEADER=`Search autoheader 2` -[ "$VERBOSE" = "1" ] && echo "AUTOHEADER=$AUTOHEADER" +[ "$VERBOSE" = "1" ] && echo " - AUTOHEADER=$AUTOHEADER" [ -z "$AUTOMAKE" ] && AUTOMAKE=`Search automake 1` -[ "$VERBOSE" = "1" ] && echo "AUTOMAKE=$AUTOMAKE" +[ "$VERBOSE" = "1" ] && echo " - AUTOMAKE=$AUTOMAKE" [ -z "$AUTOCONF" ] && AUTOCONF=`Search autoconf 2` -[ "$VERBOSE" = "1" ] && echo "AUTOCONF=$AUTOCONF" +[ "$VERBOSE" = "1" ] && echo " - AUTOCONF=$AUTOCONF" # Call ./configure when parameters have been passed to this script and # GO isn't already defined. @@ -147,10 +153,10 @@ export ACLOCAL AUTOHEADER AUTOMAKE AUTOCONF # Generate files echo "Generating files ..." -$ACLOCAL && \ - $AUTOHEADER && \ - $AUTOMAKE --add-missing && \ - $AUTOCONF --force +Run $ACLOCAL && \ + Run $AUTOCONF && \ + Run $AUTOHEADER && \ + Run $AUTOMAKE --add-missing --no-force if [ $? -eq 0 -a -x ./configure ]; then # Success: if we got some parameters we call ./configure and pass diff --git a/config.guess b/config.guess index d622a44e..137bedf2 100644 --- a/config.guess +++ b/config.guess @@ -4,7 +4,7 @@ # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. -timestamp='2012-02-10' +timestamp='2012-08-14' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -200,6 +200,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} @@ -801,6 +805,9 @@ EOF i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; @@ -1201,6 +1208,9 @@ EOF BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1256,7 +1266,7 @@ EOF NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; - NSE-?:NONSTOP_KERNEL:*:*) + NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) @@ -1330,9 +1340,6 @@ EOF exit ;; esac -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - eval $set_cc_for_build cat >$dummy.c < - #endif - #ifdef HAVE_SYS_SOCKET_H - #include - #endif - #ifdef HAVE_NETINET_IN_H - #include - #endif - ]] -) +# Optional header files +AC_CHECK_HEADERS_ONCE([ \ + arpa/inet.h inttypes.h malloc.h netinet/ip.h stdbool.h stddef.h \ + stdint.h varargs.h \ + ]) # -- Datatypes -- @@ -139,33 +133,50 @@ AC_TRY_COMPILE([ AC_MSG_RESULT(no) ]) +AC_TYPE_PID_T AC_TYPE_SIGNAL AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_TYPE_UID_T +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT8_T AC_CHECK_MEMBER([struct sockaddr_in.sin_len], AC_DEFINE(HAVE_sockaddr_in_len),, [#include ]) # -- Libraries -- -# A/UX needs this. -AC_CHECK_LIB(UTIL,memmove) -# needed on solaris. GNU libc also has a libnsl, but we do not need it. -AC_SEARCH_LIBS(gethostbyname,nsl) -AC_CHECK_LIB(socket,bind) +# memmove: A/UX libUTIL +AC_SEARCH_LIBS([memmove], [UTIL], [], [ + AC_MSG_ERROR([unable to find the memmove() function]) +]) +# gethostbyname: Solaris libnsl +AC_SEARCH_LIBS([gethostbyname], [nsl], [], [ + AC_MSG_ERROR([unable to find the gethostbyname() function]) +]) +# bind: SVR4 libsocket +AC_SEARCH_LIBS([bind], [socket], [], [ + AC_MSG_ERROR([unable to find the bind() function]) +]) # -- Functions -- AC_FUNC_FORK AC_FUNC_STRFTIME +# Required functions AC_CHECK_FUNCS([ \ - bind gethostbyaddr gethostbyname gethostname inet_ntoa \ - setsid setsockopt socket strcasecmp waitpid],, + alarm dup2 endpwent gethostbyaddr gethostbyname gethostname \ + gettimeofday inet_ntoa memmove memset setsid socket strcasecmp \ + strchr strcspn strerror strncasecmp strrchr strspn strstr \ + ],, AC_MSG_ERROR([required function missing!])) -AC_CHECK_FUNCS([ \ - gai_strerror getaddrinfo getnameinfo inet_aton sigaction \ - sigprocmask snprintf vsnprintf strdup strlcpy strlcat strtok_r]) +# Optional functions +AC_CHECK_FUNCS_ONCE([ \ + gai_strerror getaddrinfo getnameinfo inet_aton sigaction sigprocmask \ + snprintf vsnprintf strdup strlcpy strlcat strtok_r waitpid]) # -- Configuration options -- @@ -173,22 +184,20 @@ AC_CHECK_FUNCS([ \ x_syslog_on=no AC_ARG_WITH(syslog, - [ --without-syslog disable syslog (autodetected by default)], + AS_HELP_STRING([--without-syslog], + [disable syslog (autodetected by default)]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" CPPFLAGS="-I$withval/include $CPPFLAGS" LDFLAGS="-L$withval/lib $LDFLAGS" fi - AC_CHECK_LIB(be, syslog) - AC_CHECK_FUNCS(syslog, x_syslog_on=yes, + AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes], [ AC_MSG_ERROR([Can't enable syslog!]) - ) + ]) fi ], - [ - AC_CHECK_LIB(be, syslog) - AC_CHECK_FUNCS(syslog, x_syslog_on=yes) + [ AC_SEARCH_LIBS([syslog], [be], [x_syslog_on=yes]) ] ) if test "$x_syslog_on" = "yes"; then @@ -200,7 +209,8 @@ fi x_zlib_on=no AC_ARG_WITH(zlib, - [ --without-zlib disable zlib compression (autodetected by default)], + AS_HELP_STRING([--without-zlib], + [disable zlib compression (autodetected by default)]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -227,7 +237,8 @@ fi x_io_backend=none AC_ARG_WITH(select, - [ --without-select disable select IO support (autodetected by default)], + AS_HELP_STRING([--without-select], + [disable select IO support (autodetected by default)]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -245,7 +256,8 @@ AC_ARG_WITH(select, ) AC_ARG_WITH(poll, - [ --without-poll disable poll support (autodetected by default)], + AS_HELP_STRING([--without-poll], + [disable poll support (autodetected by default)]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -271,7 +283,8 @@ AC_ARG_WITH(poll, ) AC_ARG_WITH(devpoll, - [ --without-devpoll disable /dev/poll IO support (autodetected by default)], + AS_HELP_STRING([--without-devpoll], + [disable /dev/poll IO support (autodetected by default)]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -288,7 +301,8 @@ AC_ARG_WITH(devpoll, ) AC_ARG_WITH(epoll, - [ --without-epoll disable epoll IO support (autodetected by default)], + AS_HELP_STRING([--without-epoll], + [disable epoll IO support (autodetected by default)]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -306,7 +320,8 @@ AC_ARG_WITH(epoll, ) AC_ARG_WITH(kqueue, - [ --without-kqueue disable kqueue IO support (autodetected by default)], + AS_HELP_STRING([--without-kqueue], + [disable kqueue IO support (autodetected by default)]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -346,7 +361,8 @@ fi # use SSL? AC_ARG_WITH(openssl, - [ --with-openssl enable SSL support using OpenSSL], + AS_HELP_STRING([--with-openssl], + [enable SSL support using OpenSSL]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -363,7 +379,8 @@ AC_ARG_WITH(openssl, ) AC_ARG_WITH(gnutls, - [ --with-gnutls enable SSL support using gnutls], + AS_HELP_STRING([--with-gnutls], + [enable SSL support using gnutls]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -393,7 +410,8 @@ fi x_tcpwrap_on=no AC_ARG_WITH(tcp-wrappers, - [ --with-tcp-wrappers enable TCP wrappers support], + AS_HELP_STRING([--with-tcp-wrappers], + [enable TCP wrappers support]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -424,7 +442,8 @@ int deny_severity = 0; x_identauth_on=no AC_ARG_WITH(ident, - [ --with-ident enable "IDENT" ("AUTH") protocol support], + AS_HELP_STRING([--with-ident], + [enable "IDENT" ("AUTH") protocol support]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -447,7 +466,8 @@ fi x_pam_on=no AC_ARG_WITH(pam, - [ --with-pam enable user authentication using PAM], + AS_HELP_STRING([--with-pam], + [enable user authentication using PAM]), [ if test "$withval" != "no"; then if test "$withval" != "yes"; then CFLAGS="-I$withval/include $CFLAGS" @@ -474,7 +494,8 @@ fi x_ircplus_on=yes AC_ARG_ENABLE(ircplus, - [ --disable-ircplus disable IRC+ protocol], + AS_HELP_STRING([--disable-ircplus], + [disable IRC+ protocol]), if test "$enableval" = "no"; then x_ircplus_on=no; fi ) if test "$x_ircplus_on" = "yes"; then @@ -484,7 +505,8 @@ fi # enable support for IPv6? x_ipv6_on=no AC_ARG_ENABLE(ipv6, - [ --enable-ipv6 enable IPv6 protocol support], + AS_HELP_STRING([--enable-ipv6], + [enable IPv6 protocol support]), if test "$enableval" = "yes"; then x_ipv6_on=yes; fi ) if test "$x_ipv6_on" = "yes"; then @@ -500,7 +522,8 @@ fi x_sniffer_on=no; x_debug_on=no AC_ARG_ENABLE(sniffer, - [ --enable-sniffer enable IRC traffic sniffer (enables debug mode)], + AS_HELP_STRING([--enable-sniffer], + [enable IRC traffic sniffer (enables debug mode)]), if test "$enableval" = "yes"; then AC_DEFINE(SNIFFER, 1) x_sniffer_on=yes; x_debug_on=yes @@ -510,7 +533,8 @@ AC_ARG_ENABLE(sniffer, # enable additional debugging code? AC_ARG_ENABLE(debug, - [ --enable-debug show additional debug output], + AS_HELP_STRING([--enable-debug], + [show additional debug output]), if test "$enableval" = "yes"; then x_debug_on=yes; fi ) if test "$x_debug_on" = "yes"; then @@ -523,7 +547,8 @@ fi x_strict_rfc_on=no AC_ARG_ENABLE(strict-rfc, - [ --enable-strict-rfc strict RFC conformance -- may break clients!], + AS_HELP_STRING([--enable-strict-rfc], + [strict RFC conformance -- may break clients!]), if test "$enableval" = "yes"; then AC_DEFINE(STRICT_RFC, 1) x_strict_rfc_on=yes @@ -532,9 +557,9 @@ AC_ARG_ENABLE(strict-rfc, # -- Definitions -- -AC_DEFINE_UNQUOTED(TARGET_CPU, "$target_cpu" ) -AC_DEFINE_UNQUOTED(TARGET_VENDOR, "$target_vendor" ) -AC_DEFINE_UNQUOTED(TARGET_OS, "$target_os" ) +AC_DEFINE_UNQUOTED(HOST_CPU, "$host_cpu" ) +AC_DEFINE_UNQUOTED(HOST_VENDOR, "$host_vendor" ) +AC_DEFINE_UNQUOTED(HOST_OS, "$host_os" ) # Add additional CFLAGS, eventually specified on the command line, but after # running this configure script. Useful for "-Werror" for example. @@ -542,25 +567,27 @@ test -n "$CFLAGS_END" && CFLAGS="$CFLAGS $CFLAGS_END" # -- Generate files -- -AC_OUTPUT([ \ +AC_CONFIG_FILES([ \ Makefile \ + contrib/Anope/Makefile \ + contrib/Debian/Makefile \ + contrib/MacOSX/Makefile \ + contrib/MacOSX/ngIRCd.pmdoc/Makefile \ + contrib/MacOSX/ngIRCd.xcodeproj/Makefile \ + contrib/Makefile \ doc/Makefile \ doc/src/Makefile \ - src/Makefile \ - src/portab/Makefile \ + man/Makefile \ src/ipaddr/Makefile \ - src/tool/Makefile \ + src/Makefile \ src/ngircd/Makefile \ + src/portab/Makefile \ src/testsuite/Makefile \ - man/Makefile \ - contrib/Makefile \ - contrib/Anope/Makefile \ - contrib/Debian/Makefile \ - contrib/MacOSX/Makefile \ - contrib/MacOSX/ngIRCd.xcodeproj/Makefile \ - contrib/MacOSX/ngIRCd.pmdoc/Makefile \ + src/tool/Makefile \ ]) +AC_OUTPUT + type dpkg >/dev/null 2>&1 if test $? -eq 0; then # Generate debian/ link if the dpkg command exists @@ -582,8 +609,7 @@ C=`eval echo ${sysconfdir}` ; C=`eval echo ${C}` M=`eval echo ${mandir}` ; M=`eval echo ${M}` D=`eval echo ${docdir}` ; D=`eval echo ${D}` -echo " Target: ${target}" -test "$target" != "$host" && echo " Host: ${host}" +echo " Host: ${host}" echo " Compiler: ${CC}" test -n "$CFLAGS" && echo " Compiler flags: ${CFLAGS}" test -n "$CPPFLAGS" && echo " Preprocessor flags: ${CPPFLAGS}" diff --git a/doc/Makefile.am b/doc/Makefile.am index 3bf68fb4..00f2530c 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -10,7 +10,7 @@ # .tmpl: - sed \ + $(AM_V_GEN)sed \ -e s@:ETCDIR:@${sysconfdir}@ \ <$< >$@ diff --git a/man/Makefile.am b/man/Makefile.am index ebe9fcef..5624e2a1 100644 --- a/man/Makefile.am +++ b/man/Makefile.am @@ -17,7 +17,7 @@ TEMPLATE_MANS = ngircd.conf.5.tmpl ngircd.8.tmpl SUFFIXES = .tmpl . .tmpl: - sed \ + $(AM_V_GEN)sed \ -e s@:SBINDIR:@${sbindir}@ \ -e s@:BINDIR:@${bindir}@ \ -e s@:ETCDIR:@${sysconfdir}@ \ 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 , 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 +#include #include #ifdef PROTOTYPES # include @@ -34,9 +35,6 @@ #include #include -#ifdef HAVE_CTYPE_H -# include -#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 #endif -#ifdef HAVE_STDINT_H -# include /* e.g. for Mac OS X */ -#endif - #ifdef TCPWRAP # include /* 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