diff --git a/ssh-message-types.rkt b/ssh-message-types.rkt index a9a7e10..eb0a27b 100644 --- a/ssh-message-types.rkt +++ b/ssh-message-types.rkt @@ -28,7 +28,8 @@ (struct-out ssh-msg-unimplemented) (struct-out ssh-msg-newkeys) (struct-out ssh-msg-debug) - (struct-out ssh-msg-ignore)) + (struct-out ssh-msg-ignore) + (struct-out ssh-msg-service-request)) (struct ssh-msg () #:transparent) @@ -229,3 +230,6 @@ (define-ssh-message-type ssh-msg-ignore SSH_MSG_IGNORE (string data)) + +(define-ssh-message-type ssh-msg-service-request SSH_MSG_SERVICE_REQUEST + (string service-name)) diff --git a/ssh-session.rkt b/ssh-session.rkt index 60f9701..5aad0f2 100644 --- a/ssh-session.rkt +++ b/ssh-session.rkt @@ -422,17 +422,26 @@ c2s-enc s2c-enc c2s-mac s2c-mac c2s-zip s2c-zip)) - (struct-copy connection conn - [rekey-state - (rekey-in-seconds-or-bytes - (rekey-interval) - (rekey-volume) - (connection-total-transferred conn))])))) + (set-handlers (struct-copy connection conn + [rekey-state + (rekey-in-seconds-or-bytes + (rekey-interval) + (rekey-volume) + (connection-total-transferred conn))]) + SSH_MSG_SERVICE_REQUEST handle-msg-service-request)))) (if should-discard-first-kex-packet (struct-copy connection (continue-after-discard conn) [discard-next-packet? #t]) (continue-after-discard conn))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Service request manager +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (handle-msg-service-request packet message conn) + (disconnect-with-error SSH_DISCONNECT_SERVICE_NOT_AVAILABLE + "%%%")) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Session main loop ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;