diff --git a/gnu-system.am b/gnu-system.am index def4fcc600..df5d9a7ace 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -442,6 +442,8 @@ dist_patch_DATA = \ gnu/packages/patches/mupdf-buildsystem-fix.patch \ gnu/packages/patches/mutt-CVE-2014-9116.patch \ gnu/packages/patches/net-tools-bitrot.patch \ + gnu/packages/patches/ngircd-handle-zombies.patch \ + gnu/packages/patches/ngircd-no-dns-in-tests.patch \ gnu/packages/patches/ninja-tests.patch \ gnu/packages/patches/nss-pkgconfig.patch \ gnu/packages/patches/nvi-assume-preserve-path.patch \ diff --git a/gnu/packages/messaging.scm b/gnu/packages/messaging.scm index f6d0cf552e..0c2b4b9c01 100644 --- a/gnu/packages/messaging.scm +++ b/gnu/packages/messaging.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014 Mark H Weaver ;;; Copyright © 2014 Julien Lepiller +;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer ;;; ;;; This file is part of GNU Guix. ;;; @@ -36,8 +37,11 @@ (define-module (gnu packages messaging) #:use-module (gnu packages gnutls) #:use-module (gnu packages python) #:use-module (gnu packages perl) + #:use-module (gnu packages tcl) #:use-module (gnu packages compression) - #:use-module (gnu packages check)) + #:use-module (gnu packages check) + #:use-module (gnu packages admin) + #:use-module (gnu packages linux)) (define-public libotr (package @@ -159,4 +163,54 @@ (define-public hexchat (home-page "http://hexchat.net/") (license gpl2+))) +(define-public ngircd + (package + (name "ngircd") + (version "22") + (source (origin + (method url-fetch) + (uri (string-append "http://arthur.barton.de/pub/ngircd/ngircd-" + version ".tar.xz")) + (sha256 + (base32 + "17k3g9qd9d010czk5846qxvzkmw4fihv8l6m2a2287crbxm3xhd4")) + (patches (list (search-patch "ngircd-no-dns-in-tests.patch") + (search-patch "ngircd-handle-zombies.patch"))))) + (build-system gnu-build-system) + ;; Needed for the test suite. + (native-inputs `(("procps" ,procps) + ("expect" ,expect) + ("inetutils" ,inetutils))) + ;; XXX Add libident, libwrap. + (inputs `(("zlib" ,zlib) + ("gnutls" ,gnutls) + ,@(if (string-suffix? "-linux" + (or (%current-target-system) + (%current-system))) + `(("linux-pam" ,linux-pam)) + '()))) + (arguments + `(#:configure-flags + '("--with-gnutls" "--with-iconv" "--enable-ipv6" + ,@(if (string-suffix? "-linux" + (or (%current-target-system) + (%current-system))) + '("--with-pam") + '())) + #:phases + ;; Necessary for the test suite. + (alist-cons-after + 'configure 'post-configure + (lambda _ + (substitute* "src/ngircd/Makefile" + (("/bin/sh") (which "sh")))) + %standard-phases))) + (home-page "http://ngircd.barton.de/") + (synopsis "Lightweight Internet Relay Chat server for small networks") + (description + "ngIRCd is a lightweight Internet Relay Chat server for small or private +networks. It is easy to configure, can cope with dynamic IP addresses, and +supports IPv6, SSL-protected connections as well as PAM for authentication.") + (license gpl2+))) + ;;; messaging.scm ends here diff --git a/gnu/packages/patches/ngircd-handle-zombies.patch b/gnu/packages/patches/ngircd-handle-zombies.patch new file mode 100644 index 0000000000..99475ba096 --- /dev/null +++ b/gnu/packages/patches/ngircd-handle-zombies.patch @@ -0,0 +1,36 @@ +The Guile process taking the role of PID 1 during Guix builds does not reap +zombie processes, which makes them continue responding to "kill -0". + +--- a/src/testsuite/stop-server.sh 2015-02-05 11:24:00.535908842 +0100 ++++ b/src/testsuite/stop-server.sh 2015-02-05 11:25:00.264351349 +0100 +@@ -1,6 +1,21 @@ + #!/bin/sh + # ngIRCd Test Suite + ++process_is_alive(){ ++ ! process_is_dead "$1" && ! process_is_undead "$1" ++} ++ ++process_is_dead(){ ++ ! kill -0 "$1" ++} ++ ++process_is_undead(){ ++ case $(ps -p "$1" -o state=) in ++ (Z*) true ;; ++ (*) false ;; ++ esac ++} ++ + [ -z "$srcdir" ] && srcdir=`dirname $0` + + # read in functions +@@ -24,7 +40,7 @@ + + # waiting ... + for i in 1 2 3 4 5; do +- kill -0 $pid > /dev/null 2>&1; r=$? ++ process_is_alive $pid > /dev/null 2>&1; r=$? + if [ $r -ne 0 ]; then + echo " ok". + exit 0 diff --git a/gnu/packages/patches/ngircd-no-dns-in-tests.patch b/gnu/packages/patches/ngircd-no-dns-in-tests.patch new file mode 100644 index 0000000000..748661de45 --- /dev/null +++ b/gnu/packages/patches/ngircd-no-dns-in-tests.patch @@ -0,0 +1,368 @@ +From 3f807e104572b38143a1015be57d875088ceaebb Mon Sep 17 00:00:00 2001 +From: Alexander Barton +Date: Thu, 17 Apr 2014 23:57:38 +0200 +Subject: [PATCH] Test suite: Don't use DNS lookups + +Different operating systems do behave quite differently when doing DNS +lookups, for example "127.0.0.1" sometimes resolves to "localhost" and +sometimes to "localhost.localdomain" (for example OpenBSD). And other +systems resolve "localhost" to the real host name (for example Cygwin). + +So not using DNS at all makes the test site much more portable. +--- + src/testsuite/channel-test.e | 2 +- + src/testsuite/check-idle.e | 2 +- + src/testsuite/connect-test.e | 2 +- + src/testsuite/invite-test.e | 2 +- + src/testsuite/join-test.e | 2 +- + src/testsuite/kick-test.e | 2 +- + src/testsuite/message-test.e | 31 ++++++++++++------------------- + src/testsuite/misc-test.e | 8 ++++---- + src/testsuite/mode-test.e | 2 +- + src/testsuite/ngircd-test1.conf | 1 + + src/testsuite/ngircd-test2.conf | 1 + + src/testsuite/opless-channel-test.e | 2 +- + src/testsuite/server-link-test.e | 2 +- + src/testsuite/stress-A.e | 2 +- + src/testsuite/who-test.e | 6 +++--- + src/testsuite/whois-test.e | 14 +++++++------- + 16 files changed, 38 insertions(+), 43 deletions(-) + +diff --git a/src/testsuite/channel-test.e b/src/testsuite/channel-test.e +index dd7eb66..39ad16a 100644 +--- a/src/testsuite/channel-test.e ++++ b/src/testsuite/channel-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # Channel test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/check-idle.e b/src/testsuite/check-idle.e +index 41b8eb4..ad112b2 100644 +--- a/src/testsuite/check-idle.e ++++ b/src/testsuite/check-idle.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # Idle test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/connect-test.e b/src/testsuite/connect-test.e +index 662f5f7..b51be0d 100644 +--- a/src/testsuite/connect-test.e ++++ b/src/testsuite/connect-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # Server connect test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/invite-test.e b/src/testsuite/invite-test.e +index 3716d19..5179d8a 100644 +--- a/src/testsuite/invite-test.e ++++ b/src/testsuite/invite-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # INVITE test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/join-test.e b/src/testsuite/join-test.e +index 28b4c54..c088f5c 100644 +--- a/src/testsuite/join-test.e ++++ b/src/testsuite/join-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # JOIN test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/kick-test.e b/src/testsuite/kick-test.e +index 3d3c1ee..89da611 100644 +--- a/src/testsuite/kick-test.e ++++ b/src/testsuite/kick-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # KICK test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/message-test.e b/src/testsuite/message-test.e +index 0e70640..5dc325d 100644 +--- a/src/testsuite/message-test.e ++++ b/src/testsuite/message-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # PRIVMSG and NOTICE test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +@@ -72,24 +72,17 @@ expect { + "MODE nick :-b" + } + +-# The following two tests using "localhost" as host name +-# had to be disabled, because there are operating systems +-# out there, that use "localhost." as host name +-# for 127.0.0.1 instead of just "localhost". +-# (for example OpenBSD 4, OpenSolaris, ...) +-# +-#send "privmsg ~user\%localhost :test\r" +-#expect { +-# timeout { exit 1 } +-# "@* PRIVMSG nick :test" +-#} +-# +-#send "privmsg Nick!~User@LocalHost :test\r" +-#expect { +-# timeout { exit 1 } +-# "@* PRIVMSG nick :test" +-# "401" +-#} ++send "privmsg ~user\%127.0.0.1 :test\r" ++expect { ++ timeout { exit 1 } ++ "@* PRIVMSG nick :test" ++} ++ ++send "privmsg Nick!~User@127.0.0.1 :test\r" ++expect { ++ timeout { exit 1 } ++ "@* PRIVMSG nick :test" ++} + + send "away :away\r" + expect { +diff --git a/src/testsuite/misc-test.e b/src/testsuite/misc-test.e +index a83bc5b..f69e7c3 100644 +--- a/src/testsuite/misc-test.e ++++ b/src/testsuite/misc-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # Misc test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +@@ -130,7 +130,7 @@ expect { + send "userhost nick\r" + expect { + timeout { exit 1 } +- -re ":ngircd.test.server 302 nick :?nick=+.*@(localhos.*|127.0.0.1)" ++ -re ":ngircd.test.server 302 nick :?nick=+.*@127.0.0.1" + } + + send "userhost doesnotexist\r" +@@ -142,7 +142,7 @@ expect { + send "userhost nick doesnotexist nick doesnotexist\r" + expect { + timeout { exit 1 } +- -re ":ngircd.test.server 302 nick :nick=+.*@(localhos.*|127.0.0.1) nick=+.*@(localhos.*|127.0.0.1)" ++ -re ":ngircd.test.server 302 nick :nick=+.*@127.0.0.1 nick=+.*@127.0.0.1" + } + + send "away :testing\r" +@@ -154,7 +154,7 @@ expect { + send "userhost nick nick nick nick nick nick\r" + expect { + timeout { exit 1 } +- -re ":ngircd.test.server 302 nick :nick=-.*@(localhos.*|127.0.0.1) nick=-.*@(localhos.*|127.0.0.1) nick=-.*@(localhos.*|127.0.0.1) nick=-.*@(localhos.*|127.0.0.1) nick=-.*@(localhos.*|127.0.0.1)\r" ++ -re ":ngircd.test.server 302 nick :nick=-.*@127.0.0.1 nick=-.*@127.0.0.1 nick=-.*@127.0.0.1 nick=-.*@127.0.0.1 nick=-.*@127.0.0.1\r" + } + + send "quit\r" +diff --git a/src/testsuite/mode-test.e b/src/testsuite/mode-test.e +index d6726a4..86e4f2d 100644 +--- a/src/testsuite/mode-test.e ++++ b/src/testsuite/mode-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # MODE test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/ngircd-test1.conf b/src/testsuite/ngircd-test1.conf +index 0d0cccc..4dec533 100644 +--- a/src/testsuite/ngircd-test1.conf ++++ b/src/testsuite/ngircd-test1.conf +@@ -17,6 +17,7 @@ + OperCanUseMode = yes + Ident = no + IncludeDir = /var/empty ++ DNS = no + PAM = no + + [Operator] +diff --git a/src/testsuite/ngircd-test2.conf b/src/testsuite/ngircd-test2.conf +index c9d7f6c..0d24c4a 100644 +--- a/src/testsuite/ngircd-test2.conf ++++ b/src/testsuite/ngircd-test2.conf +@@ -17,6 +17,7 @@ + OperCanUseMode = yes + Ident = no + IncludeDir = /var/empty ++ DNS = no + PAM = no + + [Operator] +diff --git a/src/testsuite/opless-channel-test.e b/src/testsuite/opless-channel-test.e +index 7d94172..4611fe1 100644 +--- a/src/testsuite/opless-channel-test.e ++++ b/src/testsuite/opless-channel-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # Op-less channel test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/server-link-test.e b/src/testsuite/server-link-test.e +index cf3fae8..910f8c8 100644 +--- a/src/testsuite/server-link-test.e ++++ b/src/testsuite/server-link-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # server-server link test + +-spawn telnet localhost 6790 ++spawn telnet 127.0.0.1 6790 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/stress-A.e b/src/testsuite/stress-A.e +index 256d5d1..d51adaa 100644 +--- a/src/testsuite/stress-A.e ++++ b/src/testsuite/stress-A.e +@@ -3,7 +3,7 @@ + + set timeout 30 + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +diff --git a/src/testsuite/who-test.e b/src/testsuite/who-test.e +index a41e6b6..39d50ed 100644 +--- a/src/testsuite/who-test.e ++++ b/src/testsuite/who-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # WHO test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +@@ -62,7 +62,7 @@ expect { + ":ngircd.test.server 352 nick #channel * * ngircd.test.server nick G@ :0 Real Name" + } + +-send "who localhos*\r" ++send "who 127.0.0.*\r" + expect { + timeout { exit 1 } + ":ngircd.test.server 352 nick \* * * ngircd.test.server nick G :0 Real Name" +@@ -120,7 +120,7 @@ expect { + "305 nick" + } + +-send "who ??cal*ho*\r" ++send "who ??7.*0*\r" + expect { + timeout { exit 1 } + ":ngircd.test.server 352 nick \* * * ngircd.test.server nick H* :0 Real Name" +diff --git a/src/testsuite/whois-test.e b/src/testsuite/whois-test.e +index 16b1184..44eee66 100644 +--- a/src/testsuite/whois-test.e ++++ b/src/testsuite/whois-test.e +@@ -1,7 +1,7 @@ + # ngIRCd test suite + # WHOIS test + +-spawn telnet localhost 6789 ++spawn telnet 127.0.0.1 6789 + expect { + timeout { exit 1 } + "Connected" +@@ -17,7 +17,7 @@ expect { + send "whois nick\r" + expect { + timeout { exit 1 } +- "311 nick nick ~user localhost* \* :Real Name\r" ++ "311 nick nick ~user 127.0.0.1 \* :Real Name\r" + } + expect { + timeout { exit 1 } +@@ -27,25 +27,25 @@ expect { + send "whois *\r" + expect { + timeout { exit 1 } +- "311 nick nick ~user localhost* \* :Real Name\r" ++ "311 nick nick ~user 127.0.0.1* \* :Real Name\r" + } + + send "whois n*\r" + expect { + timeout { exit 1 } +- "311 nick nick ~user localhost* \* :Real Name\r" ++ "311 nick nick ~user 127.0.0.1* \* :Real Name\r" + } + + send "whois ?ick\r" + expect { + timeout { exit 1 } +- "311 nick nick ~user localhost* \* :Real Name\r" ++ "311 nick nick ~user 127.0.0.1* \* :Real Name\r" + } + + send "whois ????,n?*k\r" + expect { + timeout { exit 1 } +- "311 nick nick ~user localhost* \* :Real Name\r" ++ "311 nick nick ~user 127.0.0.1* \* :Real Name\r" + } + + send "whois unknown\r" +@@ -61,7 +61,7 @@ expect { + send "whois ngircd.test.server2 nick\r" + expect { + timeout { exit 1 } +- ":ngircd.test.server2 311 nick nick ~user localhost* \* :Real Name\r" ++ ":ngircd.test.server2 311 nick nick ~user 127.0.0.1* \* :Real Name\r" + } + + send "whois nosuchserver unknown\r" +-- +1.9.1 +