22
|
1 ;; -*-Emacs-Lisp-*-
|
|
2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
3 ;;
|
|
4 ;; File: efs-gwp.el
|
|
5 ;; Release: $efs release: 1.15 $
|
114
|
6 ;; Version: $Revision: 1.2 $
|
22
|
7 ;; RCS:
|
|
8 ;; Description: Support for efs to use an interactive gateway.
|
|
9 ;; Author: Andy Norman, Dawn
|
|
10 ;; Created: Thu Mar 18 13:03:14 1993
|
|
11 ;; Modified: Sun Nov 27 18:31:50 1994 by sandy on gandalf
|
|
12 ;; Language: Emacs-Lisp
|
|
13 ;;
|
|
14 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
15
|
|
16 ;;; This file is part of efs. See efs.el for copyright
|
|
17 ;;; (it's copylefted) and warrranty (there isn't one) information.
|
|
18
|
|
19 (provide 'efs-gwp)
|
|
20 (require 'efs)
|
|
21
|
|
22 ;;;; ------------------------------------------------------------
|
|
23 ;;;; Interactive gateway program support.
|
|
24 ;;;; ------------------------------------------------------------
|
|
25
|
|
26 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
27 ;;; User Variables and Documentation
|
|
28
|
|
29 (defvar efs-gwp-setup-term-command
|
|
30 (if (eq system-type 'hpux)
|
|
31 "stty -onlcr -echo\n"
|
|
32 "stty -echo nl\n")
|
|
33 "Command to do terminal setup on the gateway machine.
|
|
34 They must stop the terminal echoing each command and strip out trailing
|
|
35 ^M characters. This string must end in \\n. If you need to send multiple
|
|
36 commands, include them all in this string, separated by \\n.
|
|
37 See the documentation in efs.el for some example commands.")
|
|
38
|
|
39 ;; About efs-gwp-term-setup-command:
|
|
40 ;;
|
|
41 ;; It is important to get efs-gwp-setup-term-command right.
|
|
42 ;; Here are some examples. Please tell us about which commands
|
|
43 ;; to use on other platforms, so that we can include it in the
|
|
44 ;; documentation.
|
|
45 ;;
|
|
46 ;;
|
|
47 ;; HP-UX:
|
|
48 ;;
|
|
49 ;; "stty -onlcr -echo\n"
|
|
50 ;;
|
|
51 ;; SunOS:
|
|
52 ;;
|
|
53 ;; "stty -echo nl\n"
|
|
54 ;;
|
|
55 ;; VMS: (this should work)
|
|
56 ;;
|
|
57 ;; "set terminal/noecho\n"
|
|
58 ;;
|
|
59
|
|
60
|
|
61 (defvar efs-gwp-prompt-pattern "^[^#$%>;]*[#$%>;] *"
|
|
62 "*Regexp used to detect that the gateway login sequence has completed.
|
|
63 It will be assumed that the shell is ready to receive input. Make this
|
|
64 regexp as strict as possible; it shouldn't match *anything* at all except
|
|
65 the shell's initial prompt. The above string will fail under most SUN-3's
|
|
66 since it matches the login banner.")
|
|
67
|
|
68 ;; About efs-gwp-prompt-pattern:
|
|
69 ;;
|
|
70 ;; It is very important that this not match anything in the machine's
|
|
71 ;; login banner.
|
|
72 ;;
|
|
73 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
74
|
|
75 ;;; Internal Variables
|
|
76
|
|
77 (defconst efs-gwp-version
|
|
78 (concat (substring "$efs release: 1.15 $" 14 -2)
|
|
79 "/"
|
114
|
80 (substring "$Revision: 1.2 $" 11 -2)))
|
22
|
81
|
|
82 (defvar efs-gwp-running t)
|
|
83 (defvar efs-gwp-status nil)
|
|
84 (defvar efs-gwp-string "")
|
|
85
|
|
86 ;;; Entry point (defined as an autoload in efs.el)
|
|
87
|
|
88 (defun efs-gwp-start (host user name)
|
|
89 "Login to the gateway machine and fire up an ftp process."
|
|
90 (message "Connecting to gateway %s..." efs-gateway-host)
|
|
91 (let ((proc (apply 'start-process name (efs-ftp-process-buffer host user)
|
|
92 (nth 1 efs-gateway-type)
|
|
93 (append (nth 2 efs-gateway-type)
|
|
94 (list efs-gateway-host))))
|
|
95 (ftp (concat (nth 3 efs-gateway-type) " "
|
|
96 (mapconcat (function identity) (nth 4 efs-gateway-type)
|
|
97 " ") "\n")))
|
|
98 (process-kill-without-query proc)
|
|
99 (set-process-sentinel proc (function efs-gwp-sentinel))
|
|
100 (set-process-filter proc (function efs-gwp-filter))
|
|
101 (set-marker (process-mark proc) (point))
|
|
102 (setq efs-gwp-running t
|
|
103 efs-gwp-status nil
|
|
104 efs-gwp-string "")
|
|
105 (while efs-gwp-running ;perform login sequence
|
|
106 (accept-process-output proc))
|
|
107 (if (not efs-gwp-status)
|
|
108 (efs-error host user "unable to login to gateway"))
|
|
109 (message "Connecting to gateway %s...done" efs-gateway-host)
|
|
110 (setq efs-gwp-running t
|
|
111 efs-gwp-status nil
|
|
112 efs-gwp-string "")
|
|
113 (process-send-string proc efs-gwp-setup-term-command)
|
|
114 (while efs-gwp-running ;zap ^M's and double echoing.
|
|
115 (accept-process-output proc))
|
|
116 (if (not efs-gwp-status)
|
|
117 (efs-error host user "unable to set terminal modes on gateway"))
|
|
118 (setq efs-gwp-running t
|
|
119 efs-gwp-status nil
|
|
120 efs-gwp-string "")
|
|
121 (message "Opening FTP connection to %s..." host)
|
|
122 (process-send-string proc ftp)
|
|
123 proc))
|
|
124
|
|
125 ;;; Process filter/sentinel
|
|
126
|
|
127 (defun efs-gwp-sentinel (proc str)
|
|
128 (setq efs-gwp-running nil))
|
|
129
|
|
130 (defun efs-gwp-filter (proc str)
|
|
131 (efs-save-match-data
|
|
132 ;; Don't be sensitive to login vn LOGIN.
|
|
133 (let ((case-fold-search t))
|
|
134 (efs-process-log-string proc str)
|
|
135 (setq efs-gwp-string (concat efs-gwp-string str))
|
|
136 (cond ((string-match "\\(login\\|username\\): *$" efs-gwp-string)
|
|
137 (process-send-string proc
|
|
138 (concat
|
|
139 (let ((efs-default-user t))
|
|
140 (efs-get-user efs-gateway-host))
|
|
141 "\n")))
|
|
142 ((string-match "password: *$" efs-gwp-string)
|
|
143 (process-send-string proc
|
|
144 (concat
|
|
145 (efs-get-passwd efs-gateway-host
|
|
146 (efs-get-user
|
|
147 efs-gateway-host))
|
|
148 "\n")))
|
|
149 ((string-match efs-gateway-fatal-msgs
|
|
150 efs-gwp-string)
|
|
151 (delete-process proc)
|
|
152 (setq efs-gwp-running nil))
|
|
153 ((string-match efs-gwp-prompt-pattern
|
|
154 efs-gwp-string)
|
|
155 (setq efs-gwp-running nil
|
|
156 efs-gwp-status t))))))
|
|
157
|
|
158 ;;; end of efs-gwp.el
|