Arg parsing, validating
This commit is contained in:
		
							parent
							
								
									3db962b4aa
								
							
						
					
					
						commit
						a3396687e5
					
				@ -6,6 +6,33 @@
 | 
				
			|||||||
             (ssh key)
 | 
					             (ssh key)
 | 
				
			||||||
             (ssh version))
 | 
					             (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)
 | 
					(define (print-help-and-exit)
 | 
				
			||||||
  "Print information about program usage."
 | 
					  "Print information about program usage."
 | 
				
			||||||
  (display
 | 
					  (display
 | 
				
			||||||
@ -24,20 +51,42 @@ Options:
 | 
				
			|||||||
  --ssh-debug=<verbosity>                 Debug libssh
 | 
					  --ssh-debug=<verbosity>                 Debug libssh
 | 
				
			||||||
  --version, -v                           Print version
 | 
					  --version, -v                           Print version
 | 
				
			||||||
"))
 | 
					"))
 | 
				
			||||||
  (display "exit\n"))
 | 
					  (display "\n===\nFeigning exit\n"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define *program-name* "icecast-ssl-helper")
 | 
					(define args '(*program-name* "--user" "foo" "--port" "22" "host" "command"))
 | 
				
			||||||
(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 (main args)
 | 
					(define (main args)
 | 
				
			||||||
  (cond ((not (eq? "" args))
 | 
					  (let* ((options           (getopt-long args *option-spec*))
 | 
				
			||||||
         (display (string-split args #\ )))
 | 
					         (user              (option-ref options 'user (getenv "USER")))
 | 
				
			||||||
        (else (display "Tail sequence"))))
 | 
					         (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