summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu-system.am2
-rw-r--r--gnu/packages/messaging.scm56
-rw-r--r--gnu/packages/patches/ngircd-handle-zombies.patch36
-rw-r--r--gnu/packages/patches/ngircd-no-dns-in-tests.patch368
4 files changed, 461 insertions, 1 deletions
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 <mhw@netris.org>
 ;;; Copyright © 2014 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -36,8 +37,11 @@
   #: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 @@ dictionaries.  HexChat can be extended with multiple addons.")
     (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 <alex@barton.de>
+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.<domain>" 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
+