Arg parsing, validating
This commit is contained in:
parent
3db962b4aa
commit
a3396687e5
@ -6,6 +6,33 @@
|
||||
(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
|
||||
@ -24,20 +51,42 @@ Options:
|
||||
--ssh-debug=<verbosity> Debug libssh
|
||||
--version, -v Print version
|
||||
"))
|
||||
(display "exit\n"))
|
||||
(display "\n===\nFeigning exit\n"))
|
||||
|
||||
(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? #t)
|
||||
(define args '(*program-name* "--user" "foo" "--port" "22" "host" "command"))
|
||||
|
||||
(define (main args)
|
||||
(cond ((not (eq? "" args))
|
||||
(display (string-split args #\ )))
|
||||
(else (display "Tail sequence"))))
|
||||
(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)))
|
||||
|
||||
(main "arg1 arg2 arg3")
|
||||
(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)
|
||||
|
Loading…
Reference in New Issue
Block a user