From a3396687e51569c3a35172b35bfe57daea80d3ff Mon Sep 17 00:00:00 2001 From: Mike Holloway Date: Sun, 13 Apr 2025 14:02:43 -0400 Subject: [PATCH] Arg parsing, validating --- icecast-ssl-helper.scm | 75 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 62 insertions(+), 13 deletions(-) diff --git a/icecast-ssl-helper.scm b/icecast-ssl-helper.scm index a3fa446..29759b3 100644 --- a/icecast-ssl-helper.scm +++ b/icecast-ssl-helper.scm @@ -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= 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)