guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] gnu: Add ngircd.


From: Taylan Ulrich Bayırlı/Kammer
Subject: Re: [PATCH] gnu: Add ngircd.
Date: Thu, 05 Feb 2015 12:53:22 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4 (gnu/linux)

I had time to tinker around and, with willingness from the ngIRCd
developers to patch their test suite, came up with a relatively simple
solution.

The relevant patch to the test suite is not necessarily as portable as
ngIRCd requires it to be (or maybe it is) so this might not be the patch
that will make it upstream, but on the meanwhile here it is.

>From fa3385f7f36ab9b7c17d7b80455d96669af24a50 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
 <address@hidden>
Date: Sat, 31 Jan 2015 22:03:25 +0100
Subject: [PATCH] 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.
---
 gnu-system.am                                     |   3 +
 gnu/packages/messaging.scm                        |  46 ++-
 gnu/packages/patches/ngircd-handle-zombies.patch  |  36 +++
 gnu/packages/patches/ngircd-no-dns-in-tests.patch | 368 ++++++++++++++++++++++
 4 files changed, 452 insertions(+), 1 deletion(-)
 create mode 100644 gnu/packages/patches/ngircd-handle-zombies.patch
 create mode 100644 gnu/packages/patches/ngircd-no-dns-in-tests.patch

diff --git a/gnu-system.am b/gnu-system.am
index 706ad57..3daec97 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -197,6 +197,7 @@ GNU_SYSTEM_MODULES =                                \
   gnu/packages/ncurses.scm                     \
   gnu/packages/netpbm.scm                      \
   gnu/packages/nettle.scm                      \
+  gnu/packages/ngircd.scm                      \
   gnu/packages/ninja.scm                       \
   gnu/packages/node.scm                                \
   gnu/packages/noweb.scm                       \
@@ -433,6 +434,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 f6d0cf5..82fdbe6 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 <address@hidden>
 ;;; Copyright © 2014 Julien Lepiller <address@hidden>
+;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer <address@hidden>
 ;;;
 ;;; 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,44 @@ 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 more inputs to enable more features, e.g. IDENT, libiconv.
+    (inputs `(("zlib" ,zlib)
+              ("gnutls" ,gnutls)))
+    (arguments
+     `(#:configure-flags
+       `("--with-gnutls" "--enable-ipv6")
+       #:phases
+       ;; Necessary for the test suite, should it be enabled in the future.
+       (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 0000000..99475ba
--- /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 0000000..748661d
--- /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 <address@hidden>
+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 address@hidden :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 address@hidden :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 :address@hidden"
+ }
+ 
+ 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 :address@hidden address@hidden"
+ }
+ 
+ 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 :address@hidden address@hidden 
address@hidden address@hidden address@hidden"
+ }
+ 
+ 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
+
-- 
2.2.1


reply via email to

[Prev in Thread] Current Thread [Next in Thread]