diff --git a/Makefile.am b/Makefile.am index 8bb3b55634..2500c0e2a7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -67,6 +67,7 @@ MODULES = \ distro/packages/libunistring.scm \ distro/packages/linux.scm \ distro/packages/lout.scm \ + distro/packages/lsh.scm \ distro/packages/m4.scm \ distro/packages/make-bootstrap.scm \ distro/packages/multiprecision.scm \ @@ -103,6 +104,9 @@ dist_patch_DATA = \ distro/packages/patches/guile-default-utf8.patch \ distro/packages/patches/guile-relocatable.patch \ distro/packages/patches/libtool-skip-tests.patch \ + distro/packages/patches/lsh-guile-compat.patch \ + distro/packages/patches/lsh-no-root-login.patch \ + distro/packages/patches/lsh-pam-service-name.patch \ distro/packages/patches/m4-gets-undeclared.patch \ distro/packages/patches/m4-readlink-EINVAL.patch \ distro/packages/patches/m4-s_isdir.patch \ diff --git a/distro/packages/lsh.scm b/distro/packages/lsh.scm new file mode 100644 index 0000000000..f6caf52caf --- /dev/null +++ b/distro/packages/lsh.scm @@ -0,0 +1,125 @@ +;;; Guix --- Nix package management from Guile. -*- coding: utf-8 -*- +;;; Copyright (C) 2012 Ludovic Courtès +;;; +;;; This file is part of Guix. +;;; +;;; Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with Guix. If not, see . + +(define-module (distro packages lsh) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix build-system gnu) + #:use-module (distro) + #:use-module (distro packages m4) + #:use-module (distro packages linux) + #:use-module (distro packages compression) + #:use-module (distro packages multiprecision) + #:use-module (distro packages readline) + #:use-module (distro packages gperf) + #:use-module (distro packages base)) + +(define-public liboop + (package + (name "liboop") + (version "1.0") + (source + (origin + (method url-fetch) + (uri (string-append "http://download.ofb.net/liboop/liboop-" + version ".tar.gz")) + (sha256 + (base32 + "0z6rlalhvfca64jpvksppc9bdhs7jwhiw4y35g5ibvh91xp3rn1l")))) + (build-system gnu-build-system) + (home-page "http://liboop.ofb.net/") + (synopsis "`liboop', an event loop library") + (description "liboop is an event loop library.") + (license "LGPLv2.1+"))) + +(define-public lsh + (package + (name "lsh") + (version "2.0.4") + (source + (origin + (method url-fetch) + (uri (string-append "mirror://gnu/lsh/lsh-" + version ".tar.gz")) + (sha256 + (base32 + "149hf49xcj99wwvi7hcb59igq4vpyv8har1br1if3lrsw5irsjv1")))) + (build-system gnu-build-system) + (inputs + `(("linux-pam" ,linux-pam) + ("m4" ,m4) + ("readline" ,readline) + ("liboop" ,liboop) + ("zlib" ,zlib) + ("gmp" ,gmp) + ("guile" ,guile-final) + ("gperf" ,gperf) + ("psmisc" ,psmisc) ; for `killall' + + ("patch/no-root-login" ,(search-patch "lsh-no-root-login.patch")) + ("patch/guile-compat" ,(search-patch "lsh-guile-compat.patch")) + ("patch/pam-service-name" + ,(search-patch "lsh-pam-service-name.patch")))) + (arguments + '(#:patches (list (assoc-ref %build-inputs "patch/no-root-login") + (assoc-ref %build-inputs "patch/pam-service-name") + (assoc-ref %build-inputs "patch/guile-compat")) + + ;; Skip the `configure' test that checks whether /dev/ptmx & + ;; co. work as expected, because it relies on impurities (for + ;; instance, /dev/pts may be unavailable in chroots.) + #:configure-flags '("lsh_cv_sys_unix98_ptys=yes") + + ;; FIXME: Tests won't run in a chroot, presumably because + ;; /etc/profile is missing, and thus clients get an empty $PATH + ;; and nothing works. + #:tests? #f + + #:phases + (alist-cons-before + 'configure 'fix-test-suite + (lambda _ + ;; Tests rely on $USER being set. + (setenv "USER" "guix") + + (substitute* "src/testsuite/functions.sh" + (("localhost") + ;; Avoid host name lookups since they don't work in chroot + ;; builds. + "127.0.0.1") + (("set -e") + ;; Make tests more verbose. + "set -e\nset -x")) + + (substitute* (find-files "src/testsuite" "-test$") + (("localhost") "127.0.0.1")) + + (substitute* "src/testsuite/login-auth-test" + (("/bin/cat") + ;; Use the right path to `cat'. + (search-path (search-path-as-string->list (getenv "PATH")) + "cat")))) + %standard-phases))) + (home-page "http://www.lysator.liu.se/~nisse/lsh/") + (synopsis + "GNU lsh, a GPL'd implementation of the SSH protocol") + (description + "lsh is a free implementation (in the GNU sense) of the ssh +version 2 protocol, currently being standardised by the IETF +SECSH working group.") + (license "GPLv2+"))) diff --git a/distro/packages/patches/lsh-guile-compat.patch b/distro/packages/patches/lsh-guile-compat.patch new file mode 100644 index 0000000000..0fe0484580 --- /dev/null +++ b/distro/packages/patches/lsh-guile-compat.patch @@ -0,0 +1,9 @@ +Use (ice-9 rdelim) for `read-line'. + +--- lsh-2.0.4/src/scm/guile-compat.scm 2012-12-03 23:28:01.000000000 +0100 ++++ lsh-2.0.4/src/scm/guile-compat.scm 2012-12-03 23:28:04.000000000 +0100 +@@ -21,3 +21,4 @@ + ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + (use-syntax (ice-9 syncase)) ++(use-modules (ice-9 rdelim)) diff --git a/distro/packages/patches/lsh-no-root-login.patch b/distro/packages/patches/lsh-no-root-login.patch new file mode 100644 index 0000000000..9dd81de3fb --- /dev/null +++ b/distro/packages/patches/lsh-no-root-login.patch @@ -0,0 +1,16 @@ +Correctly handle the `--no-root-login' option. + +--- lsh-2.0.4/src/lshd.c 2006-05-01 13:47:44.000000000 +0200 ++++ lsh-2.0.4/src/lshd.c 2009-09-08 12:20:36.000000000 +0200 +@@ -758,6 +758,10 @@ main_argp_parser(int key, char *arg, str + self->allow_root = 1; + break; + ++ case OPT_NO_ROOT_LOGIN: ++ self->allow_root = 0; ++ break; ++ + case OPT_KERBEROS_PASSWD: + self->pw_helper = PATH_KERBEROS_HELPER; + break; + diff --git a/distro/packages/patches/lsh-pam-service-name.patch b/distro/packages/patches/lsh-pam-service-name.patch new file mode 100644 index 0000000000..6a6156855c --- /dev/null +++ b/distro/packages/patches/lsh-pam-service-name.patch @@ -0,0 +1,14 @@ +Tell `lsh-pam-checkpw', the PAM password helper program, to use a more +descriptive service name. + +--- lsh-2.0.4/src/lsh-pam-checkpw.c 2003-02-16 22:30:10.000000000 +0100 ++++ lsh-2.0.4/src/lsh-pam-checkpw.c 2008-11-28 16:16:58.000000000 +0100 +@@ -38,7 +38,7 @@ + #include + + #define PWD_MAXLEN 1024 +-#define SERVICE_NAME "other" ++#define SERVICE_NAME "lshd" + #define TIMEOUT 600 + + static int