93 lines
3.4 KiB
Scheme
93 lines
3.4 KiB
Scheme
(use-modules (ice-9 getopt-long)
|
|
(ice-9 rdelim)
|
|
(ssh channel)
|
|
(ssh session)
|
|
(ssh auth)
|
|
(ssh key)
|
|
(ssh version))
|
|
|
|
(define *program-name* "icecast-ssl-helper")
|
|
|
|
(define *default-identity-file*
|
|
(string-append (getenv "HOME") "/.ssh/id_rsa"))
|
|
|
|
(define *default-log-verbosity* "nolog")
|
|
|
|
(define %accepted-key-types "ssh-rsa,rsa-sha2-256,ssh-dss,ecdh-sha2-nistp256")
|
|
|
|
(define debug? #f)
|
|
|
|
(define *option-spec*
|
|
'((user (single-char #\u) (value #t))
|
|
(port (single-char #\p) (value #t))
|
|
(identity-file (single-char #\i) (value #t))
|
|
(help (single-char #\h) (value #f))
|
|
(version (single-char #\v) (value #f))
|
|
(debug (single-char #\d) (value #f))
|
|
(known-hosts-file (value #t))
|
|
(ssh-debug (value #t))))
|
|
|
|
(define (print-version-and-exit)
|
|
"Print information about versions."
|
|
(format #t "libssh version: ~a~%" (get-libssh-version))
|
|
(format #t "libguile-ssh version: ~a~%" (get-library-version))
|
|
(exit))
|
|
|
|
(define (print-help-and-exit)
|
|
"Print information about program usage."
|
|
(display
|
|
(string-append
|
|
*program-name* " -- A Helper for Icecast SSL over SSH Tunnel
|
|
Copyright (C) Equilibrate IT Inc. <admin@equilibrateit.com>
|
|
Licensed under GNU GPLv3+
|
|
|
|
Usage: " *program-name* " [ -upidv ] <host> <command>
|
|
|
|
Options:
|
|
--user=<user>, -u <user> User name
|
|
--port=<port-number>, -p <port-number> Port number
|
|
--identity-file=<file>, -i <file> Path to private key
|
|
--debug, -d Debug mode
|
|
--ssh-debug=<verbosity> Debug libssh
|
|
--version, -v Print version
|
|
"))
|
|
(display "\n===\nFeigning exit\n"))
|
|
|
|
(define args '(*program-name* "--user" "foo" "--port" "22" "host" "command"))
|
|
|
|
(define (main args)
|
|
(let* ((options (getopt-long args *option-spec*))
|
|
(user (option-ref options 'user (getenv "USER")))
|
|
(port (string->number (option-ref options 'port "22")))
|
|
(identity-file (option-ref options 'identity-file
|
|
*default-identity-file*))
|
|
(debug-needed? (option-ref options 'debug #f))
|
|
(ssh-debug (option-ref options 'ssh-debug
|
|
*default-log-verbosity*))
|
|
(known-hosts-file (option-ref options 'known-hosts-file #f))
|
|
(help-needed? (option-ref options 'help #f))
|
|
(version-needed? (option-ref options 'version #f))
|
|
(args (option-ref options '() #f)))
|
|
|
|
(set! debug? debug-needed?)
|
|
|
|
(cond ((eq? #t help-needed?)
|
|
(print-help-and-exit))
|
|
((eq? #t version-needed?)
|
|
(display "Version message not implemented.\n"))
|
|
((or (null? user) (not (string? user)))
|
|
(display "User should be a string of characters.\n"))
|
|
((not (number? port))
|
|
(display "Port must be a number.\n"))
|
|
((or (null? args) (null? (cdr args)))
|
|
(print-help-and-exit))
|
|
(else (display (string-append
|
|
*program-name*
|
|
"\nuser = " user
|
|
"\n" "port = " (number->string port)
|
|
"\n" "host = " (car args)
|
|
"\n" "command = " (car (cdr args))
|
|
"\n"))))))
|
|
|
|
(main args)
|