summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/packages/networking.scm72
1 files changed, 71 insertions, 1 deletions
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index b2a474d930..4b77aad792 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -40,6 +40,7 @@
   #:use-module (gnu packages audio)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages code)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages databases)
   #:use-module (gnu packages flex)
@@ -54,7 +55,9 @@
   #:use-module (gnu packages perl)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
-  #:use-module (gnu packages tls))
+  #:use-module (gnu packages textutils)
+  #:use-module (gnu packages tls)
+  #:use-module (gnu packages valgrind))
 
 (define-public macchanger
   (package
@@ -857,3 +860,70 @@ other similar tasks that are particularly application specific so that the
 library remains flexible, portable, and easily embeddable.")
     (home-page "http://enet.bespin.org")
     (license license:expat)))
+
+(define-public sslh
+  (package
+    (name "sslh")
+    (version "1.18")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/yrutschle/sslh/archive/v"
+                                  version ".tar.gz"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (sha256
+               (base32
+                "1vzw7a7s9lhspbn5zn3hw8hir4pkjgbd68yys4hfsnjp1h7bzjpn"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(;; Tests dependencies.
+       ("lcov" ,lcov)
+       ("perl" ,perl)
+       ("perl-io-socket-inet6" ,perl-io-socket-inet6)
+       ("perl-socket6" ,perl-socket6)
+       ("psmisc" ,psmisc)
+       ("valgrind" ,valgrind)))
+    (inputs
+     `(("libcap" ,libcap)
+       ("libconfig" ,libconfig)
+       ("tcp-wrappers" ,tcp-wrappers)))
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ; no configure script
+         (add-before 'check 'fix-tests
+                     (lambda _
+                       (substitute* "./t"
+                         (("\"/tmp") "$ENV{\"TMPDIR\"} . \"")
+                         ;; The Guix build environment lacks ‘ip6-localhost’.
+                         (("ip6-localhost") "localhost"))
+                       #t))
+         ;; Many of these files are mentioned in the man page. Install them.
+         (add-after 'install 'install-documentation
+                    (lambda* (#:key outputs #:allow-other-keys)
+                      (let* ((out (assoc-ref outputs "out"))
+                             (doc (string-append out "/share/doc/sslh")))
+                        (install-file "README.md" doc)
+                        (for-each
+                         (lambda (file)
+                           (install-file file (string-append doc "/examples")))
+                         (append (find-files "." "\\.cfg")
+                                 (find-files "scripts"))))
+                      #t)))
+       #:make-flags (list "CC=gcc"
+                          "USELIBCAP=1"
+                          "USELIBWRAP=1"
+                          (string-append "PREFIX=" (assoc-ref %outputs "out")))
+       #:test-target "test"))
+    (home-page "http://www.rutschle.net/tech/sslh.shtml")
+    (synopsis "Applicative network protocol demultiplexer")
+    (description
+     "sslh is a network protocol demultiplexer.  It acts like a switchboard,
+accepting connections from clients on one port and forwarding them to different
+servers based on the contents of the first received data packet.  Detection of
+common protocols like HTTP(S), SSL, SSH, OpenVPN, tinc, and XMPP is already
+implemented, but any other protocol that matches a regular expression can be
+added.  sslh's name comes from its original application of serving both SSH and
+HTTPS on port 443, allowing SSH connections from inside corporate firewalls
+that block port 22.")
+    (license (list license:bsd-2        ; tls.[ch]
+                   license:gpl2+))))    ; everything else