gnu: Add ngircd.

* gnu/packages/messaging.scm (ngircd): New variable.
* gnu/packages/patches/ngircd-no-dns-in-tests.patch: New file.
* gnu/packages/patches/ngircd-handle-zombies.patch: New file.
* gnu-system.am (dist_patch_DATA): Add them.
This commit is contained in:
Taylan Ulrich Bayırlı/Kammer 2015-01-31 22:03:25 +01:00
parent 0ca0ce53a8
commit ea119a288f
4 changed files with 461 additions and 1 deletions

View File

@ -442,6 +442,8 @@ dist_patch_DATA = \
gnu/packages/patches/mupdf-buildsystem-fix.patch \ gnu/packages/patches/mupdf-buildsystem-fix.patch \
gnu/packages/patches/mutt-CVE-2014-9116.patch \ gnu/packages/patches/mutt-CVE-2014-9116.patch \
gnu/packages/patches/net-tools-bitrot.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/ninja-tests.patch \
gnu/packages/patches/nss-pkgconfig.patch \ gnu/packages/patches/nss-pkgconfig.patch \
gnu/packages/patches/nvi-assume-preserve-path.patch \ gnu/packages/patches/nvi-assume-preserve-path.patch \

View File

@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org>
;;; Copyright © 2014 Julien Lepiller <julien@lepiller.eu> ;;; Copyright © 2014 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -36,8 +37,11 @@
#:use-module (gnu packages gnutls) #:use-module (gnu packages gnutls)
#:use-module (gnu packages python) #:use-module (gnu packages python)
#:use-module (gnu packages perl) #:use-module (gnu packages perl)
#:use-module (gnu packages tcl)
#:use-module (gnu packages compression) #: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 (define-public libotr
(package (package
@ -159,4 +163,54 @@ dictionaries. HexChat can be extended with multiple addons.")
(home-page "http://hexchat.net/") (home-page "http://hexchat.net/")
(license gpl2+))) (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 ;;; messaging.scm ends here

View File

@ -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

View File

@ -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