(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. Licensed under GNU GPLv3+ Usage: " *program-name* " [ -upidv ] Options: --user=, -u User name --port=, -p Port number --identity-file=, -i Path to private key --debug, -d Debug mode --ssh-debug= 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)