diff mbox

gnu: Add sslh.

Message ID 1473640328-28092-1-git-send-email-me@tobias.gr
State New
Headers show

Commit Message

Tobias Geerinckx-Rice Sept. 12, 2016, 12:32 a.m. UTC
* gnu/packages/networking.scm (sslh): New variable.
---
 gnu/packages/networking.scm | 71 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 70 insertions(+), 1 deletion(-)

Comments

Leo Famulari Sept. 12, 2016, 3:23 a.m. UTC | #1
On Mon, Sep 12, 2016 at 02:32:08AM +0200, Tobias Geerinckx-Rice wrote:
> * gnu/packages/networking.scm (sslh): New variable.

Interesting package!

> +         ;; 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")))
> +                        (install-file "README.md" doc)
> +                        (for-each
> +                         (lambda (file)
> +                           (install-file file (string-append doc "/examples")))
> +                         (append (find-files "." "\\.cfg")
> +                                 (find-files "scripts" ".*"))))

Rather than '/share/doc', I think the doc variable should use
'/share/doc/sslh'. Otherwise, when installed into a profile, the
examples will be in '~/.guix-profile/share/doc'. It would be better if
they were in '~/.guix-profile/share/doc/sslh'.
Tobias Geerinckx-Rice Sept. 12, 2016, 4:20 a.m. UTC | #2
Leo,

Thanks!

On Mon, Sep 12, 2016 at 02:32:08AM +0200, Tobias Geerinckx-Rice wrote:
> (doc (string-append out "/share/doc")

And for catching this.

What's annoying is that I *always* miss this, I *know* that I always
miss this, and I keep missing it anyway...

Kind regards,

T G-R
Efraim Flashner Sept. 12, 2016, 10:03 a.m. UTC | #3
On Mon, Sep 12, 2016 at 02:32:08AM +0200, Tobias Geerinckx-Rice wrote:
> * gnu/packages/networking.scm (sslh): New variable.
> ---
>  gnu/packages/networking.scm | 71 ++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 70 insertions(+), 1 deletion(-)
> 
> diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
> index c4edbc3..1818b62 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
> @@ -824,3 +827,69 @@ in dynamically linked programs and redirects them through one or more SOCKS or
>  HTTP proxies.")
>      (home-page "https://github.com/rofl0r/proxychains-ng")
>      (license license:gpl2+)))
> +
> +(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)
> +    (arguments
> +     '(#:phases
> +       (modify-phases %standard-phases
> +         (delete 'configure)            ; no configure script
> +         (add-before 'check 'fix-tests
> +                     (lambda* _
                                ^^^
               Don't need the underscore here

> +                       (substitute* "./t"
> +                         (("\"/tmp") "$ENV{\"TMPDIR\"} . \"")
> +                         (("ip6-localhost") "localhost"))))

            return #t on the substitute

> +         ;; 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")))
> +                        (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"))
> +    (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)))
> +    (home-page "http://www.rutschle.net/tech/sslh.shtml")
> +    (synopsis "Applicative network protocol demultiplexer")
> +    (description

Is the name specifically lowercase? Otherwise it should be a capital S,
and again a few lines down.

> +     "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
> -- 
> 2.7.4
> 
>
Tobias Geerinckx-Rice Sept. 12, 2016, 12:33 p.m. UTC | #4
Efraim,

Thanks!

On 12/09/16 12:03, Efraim Flashner wrote:
>> +                     (lambda* _
>                                 ^^^
>                Don't need the underscore here

I don't see how that could work. Did you mean to drop the asterisk?
If not, I'll need a bit more info.

>             return #t on the substitute

Done.

> Is the name specifically lowercase? Otherwise it should be a capital S,
> and again a few lines down.

Yes. See the README.

Now, grepping reveals a single ‘Sslh’ in there, but all other instances
are lowercase. That seems to be the preferred form. I have no preference
in the matter.

Kind regards,

T G-R
Efraim Flashner Sept. 12, 2016, 1:52 p.m. UTC | #5
You don't need both the asterisk and the underscore for the lambda. I'm not sure of the guile reason, but when you have a 'let*' then you use 'lambda'. For setenv or zero, for example, you'd use 'lambda _'


On September 12, 2016 3:33:42 PM GMT+03:00, Tobias Geerinckx-Rice <me@tobias.gr> wrote:
>Efraim,
>
>Thanks!
>
>On 12/09/16 12:03, Efraim Flashner wrote:
>>> +                     (lambda* _
>>                                 ^^^
>>                Don't need the underscore here
>
>I don't see how that could work. Did you mean to drop the asterisk?
>If not, I'll need a bit more info.
>
>>             return #t on the substitute
>
>Done.
>
>> Is the name specifically lowercase? Otherwise it should be a capital
>S,
>> and again a few lines down.
>
>Yes. See the README.
>
>Now, grepping reveals a single ‘Sslh’ in there, but all other instances
>are lowercase. That seems to be the preferred form. I have no
>preference
>in the matter.
>
>Kind regards,
>
>T G-R
Ludovic Courtès Sept. 12, 2016, 9:14 p.m. UTC | #6
Hi,

Tobias Geerinckx-Rice <me@tobias.gr> skribis:

> On 12/09/16 12:03, Efraim Flashner wrote:
>>> +                     (lambda* _
>>                                 ^^^
>>                Don't need the underscore here
>
> I don't see how that could work. Did you mean to drop the asterisk?
> If not, I'll need a bit more info.

You’re right, Tobias.

The underscore has no special meaning; it’s just a conventional name for
unused variables.  You could write (lambda args …) or (lambda hello! …)
and that would work equally well.

‘lambda*’ is a variant of ‘lambda’ that supports keyword and optional
parameter, something you definitely don’t need here (info "(guile)
lambda* and define*").

Ludo’.
diff mbox

Patch

diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index c4edbc3..1818b62 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
@@ -824,3 +827,69 @@  in dynamically linked programs and redirects them through one or more SOCKS or
 HTTP proxies.")
     (home-page "https://github.com/rofl0r/proxychains-ng")
     (license license:gpl2+)))
+
+(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)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ; no configure script
+         (add-before 'check 'fix-tests
+                     (lambda* _
+                       (substitute* "./t"
+                         (("\"/tmp") "$ENV{\"TMPDIR\"} . \"")
+                         (("ip6-localhost") "localhost"))))
+         ;; 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")))
+                        (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"))
+    (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)))
+    (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