Merge branch 'staging' into core-updates
[jackhill/guix/guix.git] / gnu / packages / vpn.scm
index e135fde..e29c1e7 100644 (file)
@@ -1,13 +1,16 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013 Andreas Enge <andreas@enge.fr>
-;;; Copyright © 2013, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
-;;; Copyright © 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2017, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016, 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018 Pierre Langlois <pierre.langlois@gmx.com>
 ;;; Copyright © 2018 Meiyo Peng <meiyo.peng@gmail.com>
+;;; Copyright © 2019 Leo Famulari <leo@famulari.name>
+;;; Copyright © 2019 Rutger Helling <rhelling@mykolab.com>
+;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages)
+  #:use-module (gnu packages admin)
   #:use-module (gnu packages base)
   #:use-module (gnu packages check)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages gettext)
   #:use-module (gnu packages gnupg)
-  #:use-module (gnu packages gnuzilla)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages libevent)
   #:use-module (gnu packages linux)
+  #:use-module (gnu packages nss)
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
@@ -113,13 +118,13 @@ shared-secret IPSec authentication with Xauth, AES (256, 192, 128), 3DES,
 1DES, MD5, SHA1, DH1/2/5 and IP tunneling.  It runs entirely in userspace.
 Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
    (license license:gpl2+) ; some file are bsd-2, see COPYING
-   (home-page "http://www.unix-ag.uni-kl.de/~massar/vpnc/")))
+   (home-page "https://www.unix-ag.uni-kl.de/~massar/vpnc/")))
 
 (define-public vpnc-scripts
-  (let ((commit "07c3518dd6b8dc424e9c3650a62bed994a4dcbe1"))
+  (let ((commit "1000e0f6dd7d6bff163169a46359211c1fc3a6d2"))
     (package
       (name "vpnc-scripts")
-      (version (string-append "20180226." (string-take commit 7)))
+      (version (string-append "20190116." (string-take commit 7)))
       (source (origin
                 (method git-fetch)
                 (uri
@@ -129,9 +134,10 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
                 (file-name (git-file-name name version))
                 (sha256
                  (base32
-                  "02d29nrmnj6kfa889cavqn1pkn9ssb5gyp4lz1v47spwx7abpdi7"))))
+                  "1g41yarz2bl0f73kbjqnywr485ghanbp7nmspklfb0n07yp0z6ak"))))
       (build-system gnu-build-system)
-      (inputs `(("coreutils" ,coreutils)
+      (inputs `(("guile" ,guile-2.2) ; for the wrapper scripts
+                ("coreutils" ,coreutils)
                 ("grep" ,grep)
                 ("iproute2" ,iproute)    ; for ‘ip’
                 ("net-tools" ,net-tools) ; for ‘ifconfig’, ‘route’
@@ -174,7 +180,7 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
                (let ((out (assoc-ref outputs "out")))
                  (for-each
                   (lambda (script)
-                    (wrap-program script
+                    (wrap-script (string-append out "/etc/vpnc/" script)
                       `("PATH" ":" prefix
                         ,(map (lambda (name)
                                 (let ((input (assoc-ref inputs name)))
@@ -186,8 +192,9 @@ Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
                                     "net-tools"
                                     "sed"
                                     "which")))))
-                  (find-files (string-append out "/etc/vpnc/vpnc-script")
-                              "^vpnc-script"))
+                  (list "vpnc-script-ptrtd"
+                        "vpnc-script-sshd"
+                        "vpnc-script"))
                  #t))))
          #:tests? #f))                  ; no tests
       (home-page "http://git.infradead.org/users/dwmw2/vpnc-scripts.git")
@@ -210,25 +217,20 @@ the entire VPN in a network namespace accessible only through SSH.")
     (name "ocproxy")
     (version "1.60")
     (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://github.com/cernekee/ocproxy/archive/v"
-                    version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/cernekee/ocproxy.git")
+                     (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1b4rg3xq5jnrp2l14sw0msan8kqhdxmsd7gpw9lkiwvxy13pcdm7"))))
+                "03323nnhb4y9nzwva04mq7xg03dvdrgp689g89f69jqc261skcqx"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("autoconf" ,autoconf)
        ("automake" ,automake)))
     (inputs
      `(("libevent" ,libevent)))
-    (arguments
-     '(#:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'autogen
-           (lambda _ (invoke "sh" "autogen.sh"))))))
     (home-page "https://github.com/cernekee/ocproxy")
     (synopsis "OpenConnect proxy")
     (description
@@ -241,19 +243,20 @@ the user specifically asks to proxy, so the @dfn{VPN} interface no longer
 (define-public openconnect
   (package
    (name "openconnect")
-   (version "8.02")
+   (version "8.05")
    (source (origin
             (method url-fetch)
             (uri (string-append "ftp://ftp.infradead.org/pub/openconnect/"
                                 "openconnect-" version ".tar.gz"))
-            (sha256 (base32
-                     "04p0vzc1791h68hd9803wsyb64zrwm8qpdqx0szhj9pig71g5a0w"))))
+            (sha256
+             (base32 "14i9q727c2zc9xhzp1a9hz3gzb5lwgsslbhircm84dnbs192jp1k"))))
    (build-system gnu-build-system)
-   (inputs
+   (propagated-inputs
     `(("libxml2" ,libxml2)
       ("gnutls" ,gnutls)
-      ("vpnc-scripts" ,vpnc-scripts)
       ("zlib" ,zlib)))
+   (inputs
+    `(("vpnc-scripts" ,vpnc-scripts)))
    (native-inputs
     `(("gettext" ,gettext-minimal)
       ("pkg-config" ,pkg-config)))
@@ -274,7 +277,7 @@ and probably others.")
 (define-public openvpn
   (package
     (name "openvpn")
-    (version "2.4.7")
+    (version "2.4.8")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -282,7 +285,7 @@ and probably others.")
                     version ".tar.xz"))
               (sha256
                (base32
-                "0j7na936isk9j8nsdrrbw7wmy09inmjqvsb8mw8az7k61xbm6bx4"))))
+                "149z3agjy03i66mcj5bplim2mh45s2ps1wmxbxczyzw0nxmsd37v"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags '("--enable-iproute2=yes")))
@@ -306,14 +309,14 @@ traversing network address translators (@dfn{NAT}s) and firewalls.")
 (define-public tinc
   (package
     (name "tinc")
-    (version "1.0.35")
+    (version "1.0.36")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://tinc-vpn.org/packages/"
-                                  name "-" version ".tar.gz"))
+                                  "tinc-" version ".tar.gz"))
               (sha256
                (base32
-                "0pl92sdwrkiwgll78x0ww06hfljd07mkwm62g8x17qn3gha3pj0q"))))
+                "021i2sl2mjscbm8g59d7vs74iw3gf0m48wg7w3zhwj6czarkpxs0"))))
     (build-system gnu-build-system)
     (arguments
      '(#:configure-flags
@@ -449,3 +452,97 @@ The peer-to-peer VPN implements a Layer 2 (Ethernet) network between the peers
     ;; This project contains a bundled lwIP. lwIP is also released under the
     ;; 3-clause BSD license.
     (license license:bsd-3)))
+
+(define-public wireguard
+  (package
+    (name "wireguard")
+    (version "0.0.20191219")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://git.zx2c4.com/WireGuard/snapshot/"
+                                  "WireGuard-" version ".tar.xz"))
+              (sha256
+               (base32
+                "1rxhhf18vnlbxpaxib6y55gbvr5h9dcvl8sn2l5slzz97066zfjs"))))
+    (build-system gnu-build-system)
+    (outputs '("out" ; The WireGuard userspace tools
+               "kernel-patch")) ; A patch to build Linux with WireGuard support
+    (arguments
+     `(#:tests? #f ; No tests available.
+       #:make-flags
+       (list "CC=gcc"
+             "WITH_BASHCOMPLETION=yes"
+             ;; Build and install the helper script wg-quick(8).
+             "WITH_WGQUICK=yes"
+             (string-append "PREFIX=" (assoc-ref %outputs "out"))
+             (string-append "SYSCONFDIR=" (assoc-ref %outputs "out") "/etc"))
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (ice-9 popen)
+                  (ice-9 textual-ports))
+       #:phases
+       (modify-phases %standard-phases
+         ;; There is no ./configure script.
+         (delete 'configure)
+         ;; Until WireGuard is added to the upstream Linux kernel, it is
+         ;; distributed as a kernel patch generated by this script.
+         (add-after 'patch-source-shebangs 'make-patch
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((output (string-append (assoc-ref outputs "kernel-patch")
+                                           "/wireguard.patch"))
+                    (patch-builder "./contrib/kernel-tree/create-patch.sh")
+                    (port (open-input-pipe patch-builder))
+                    (str (get-string-all port)))
+               (close-pipe port)
+               (mkdir-p (dirname output))
+               (call-with-output-file output
+                 (lambda (port)
+                   (format port "~a" str))))
+               #t))
+         (add-after 'make-patch 'chdir
+           (lambda _
+             (chdir "src/tools")
+             #t))
+         ;; Otherwise the 'install-license-file' phase installs nothing.
+         ;; <https://bugs.gnu.org/34703>
+         (add-after 'install 'reset-cwd
+           (lambda _
+             (chdir "../..")
+             #t)))))
+    (inputs
+     `(("libmnl" ,libmnl)))
+    (home-page "https://www.wireguard.com/")
+    (synopsis "Tools for configuring WireGuard")
+    (description "This package provides the userspace tools for setting and
+retrieving configuration of WireGuard network tunnel interfaces, and a patch
+that can be applied to a Linux kernel source tree in order to build it with
+WireGuard support.")
+    (license license:gpl2)))
+
+(define-public xl2tpd
+  (package
+    (name "xl2tpd")
+    (version "1.3.15")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/xelerance/xl2tpd")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "0ppwza8nwm1av1vldw40gin9wrjrs4l9si50jad414js3k8ycaag"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:make-flags (list (string-append "PREFIX=" %output)
+                          "CC=gcc")
+       #:phases (modify-phases %standard-phases
+                  (delete 'configure))  ; no configure script
+       #:tests? #f))                    ; no tests provided
+    (inputs `(("libpcap" ,libpcap)))
+    (home-page "https://www.xelerance.com/software/xl2tpd/")
+    (synopsis "Layer 2 Tunnelling Protocol Daemon (RFC 2661)")
+    (description
+     "xl2tpd is an implementation of the Layer 2 Tunnelling Protocol (RFC 2661).
+L2TP allows you to tunnel PPP over UDP.")
+    (license license:gpl2)))