116
|
1 \input texinfo @c -*-texinfo-*-
|
|
2 @comment %**start of header (This is for running Texinfo on a region.)
|
|
3 @setfilename efs.info
|
|
4 @settitle EFS
|
|
5 @comment %**end of header (This is for running Texinfo on a region.)
|
|
6
|
138
|
7 @direntry
|
|
8 * EFS:: Transparent remote file access via FTP.
|
|
9 @end direntry
|
|
10
|
116
|
11 @synindex fn vr
|
|
12
|
|
13 @node Top, What is EFS?, (dir), (dir)
|
|
14 @comment node-name, next, previous, up
|
|
15 @ifinfo
|
|
16 @unnumbered EFS
|
|
17
|
|
18 This file documents EFS, a system for transparent file-transfer
|
|
19 between remote hosts using the FTP protocol within Emacs.
|
|
20
|
|
21 This info is for version 1.15 of EFS.
|
|
22
|
|
23 Documentation version: 1.0
|
|
24
|
|
25 Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc.
|
|
26
|
|
27 Permission is granted to make and distribute verbatim copies of
|
|
28 this manual provided the copyright notice and this permission notice
|
|
29 are preserved on all copies.
|
|
30
|
|
31 @ignore
|
|
32 Permission is granted to process this file through TeX and print the
|
|
33 results, provided the printed document carries a copying permission
|
|
34 notice identical to this one except for the removal of this paragraph
|
|
35 (this paragraph not being relevant to the printed manual).
|
|
36
|
|
37 @end ignore
|
|
38 Permission is granted to copy and distribute modified versions of this
|
|
39 manual under the conditions for verbatim copying, provided that the
|
|
40 entire resulting derived work is distributed under the terms of a
|
|
41 permission notice identical to this one.
|
|
42 @end ifinfo
|
|
43
|
|
44 @titlepage
|
|
45 @sp5
|
|
46 @center @titlefont{EFS}
|
|
47 @center version 1.15
|
|
48 @sp2
|
|
49 @center A transparent remote file system, by Sandy Rutherford and Andy Norman
|
|
50 @sp7
|
|
51 @center This documentation based on ange-ftp documentation by David Smith
|
|
52 @center and on documentation in the EFS source code
|
|
53 @center It was put together by Mike Sperber.
|
|
54
|
|
55 This documentation is definitely incomplete and parts of it may be
|
|
56 outright incorrect or out-of-date.
|
|
57
|
|
58 @center info-version 1.0
|
|
59 @page
|
|
60 @vskip 0pt plus 1filll
|
|
61 Copyright @copyright{} 1991, 1992 Free Software Foundation, Inc.
|
|
62
|
|
63 Permission is granted to make and distribute verbatim copies of
|
|
64 this manual provided the copyright notice and this permission notice
|
|
65 are preserved on all copies.
|
|
66
|
|
67 Permission is granted to copy and distribute modified versions of this
|
|
68 manual under the conditions for verbatim copying, provided that the
|
|
69 entire resulting derived work is distributed under the terms of a
|
|
70 permission notice identical to this one.
|
|
71 @end titlepage
|
|
72
|
|
73 @menu
|
|
74 * What is EFS?::
|
|
75 * Installing EFS:: Where to find it, and how to use it.
|
|
76 * Using EFS:: EFS -- a users' guide.
|
|
77 * Getting help:: Mailing lists and newsgroups.
|
|
78 * Bugs:: Known bugs, and a wish list.
|
|
79
|
|
80 Indices:
|
|
81 * Concept Index::
|
|
82 * Variable and function index::
|
|
83 @end menu
|
|
84
|
|
85
|
|
86 @node What is EFS?, Installing EFS, Top, Top
|
|
87 @comment node-name, next, previous, up
|
|
88 @chapter Introducing EFS
|
|
89
|
|
90 EFS is a system for transparent file-transfer between remote UNIX,
|
|
91 Guardian, DOS, Macintosh, KA9Q, Netware, NOS/VE, Plan 9, TI Explorer,
|
|
92 Twenex, TOPS 20, VOS, MPE, MVS, VMS, CMS or MTS hosts using FTP. This
|
|
93 means that you can edit, copy and otherwise manipulate files on any
|
|
94 machine you have access to from within Emacs as if it were a local
|
|
95 file. EFS works by introducing an extended filename syntax, and
|
|
96 overloading functions such as @code{insert-file-contents} so that
|
|
97 accessing a remote file causes appropriate commands to be sent to an FTP
|
|
98 process. EFS includes and enhanced version of Dired to facilitate
|
|
99 directory browsing and multiple file transfer from remote hosts.
|
|
100
|
|
101 The authors of EFS are Sandy Rutherford (@code{sandy@@math.ubc.ca}) and
|
|
102 Andy (Ange) Norman (@code{ange@@hplb.hpl.hp.com}). EFS is partly based
|
|
103 on an earlier package called ange-ftp. The integration of EFS 1.15 into
|
|
104 XEmacs and numerous bug fixes were done by Mike Sperber
|
|
105 (@code{sperber@@informatik.uni-tuebingen.de}).
|
|
106
|
|
107 @ifinfo
|
|
108 Many people have sent in enhancements for ange-ftp and EFS.
|
|
109 Members of the ange-ftp and EFS Hall of Fame include:
|
|
110
|
|
111 @itemize @bullet
|
|
112 @item
|
|
113 Many thanks to Roland McGrath for improving the filename syntax handling,
|
|
114 for suggesting many enhancements and for numerous cleanups to the code.
|
|
115
|
|
116 @item
|
|
117 Thanks to Jamie Zawinski for bugfixes and for ideas such as gateways.
|
|
118
|
|
119 @item
|
|
120 Thanks to Ken Laprade for improved @file{.netrc} parsing and password
|
|
121 reading, and Dired/shell autoloading.
|
|
122
|
|
123 @item
|
|
124 Thanks to Sebastian Kremer for tree dired support and for many ideas and
|
|
125 bugfixes.
|
|
126
|
|
127 @item
|
|
128 Thanks to Joe Wells for bugfixes, non-UNIX system support, VOS support,
|
|
129 and hostname completion.
|
|
130
|
|
131 @item
|
|
132 Thanks to Nakagawa Takayuki for many good ideas, filename-completion, help
|
|
133 with file-name expansion, efficiency worries, stylistic concerns and many
|
|
134 bugfixes.
|
|
135
|
|
136 @item
|
|
137 Also, thanks to Rob Austein, Doug Bagley, Andy Caiger, Jim Franklin,
|
|
138 Noah Friedman, Aksnes Knut-Havard, Elmar Heeb, John Interrante, Roland
|
|
139 McGrath, Jeff Morgenthaler, Mike Northam, Jens Petersen, Jack Repenning,
|
|
140 Joerg-Martin Schwarz, Michael Sperber, Svein Tjemsland, Andy Whitcroft,
|
|
141 Raymond A. Wiker and many others whose names have been forgotten who
|
|
142 have helped to debug and fix problems.
|
|
143 @end itemize
|
|
144 @end ifinfo
|
|
145
|
|
146 Finally, this info file was put together by Mike Sperber
|
|
147 (@code{sperber@@informatik.uni-tuebingen.de}) from an ange-ftp info file
|
|
148 written by Dave Smith (@code{dsmith@@stats.adelaide.edu.au}) and the EFS
|
|
149 source code.
|
|
150
|
|
151 @node Installing EFS, Using EFS, What is EFS?, Top
|
|
152 @comment node-name, next, previous, up
|
|
153 @chapter Installing EFS
|
|
154
|
|
155 At the time of writing of this documentation, the version of EFS
|
|
156 distributed with XEmacs (this means the EFS running on XEmacs
|
|
157 19.15/20.1) is the latest version available. It includes many bugfixes
|
|
158 and some enhancements over the last separately released version of EFS,
|
|
159 1.15. This situation will change once a new version of EFS is
|
|
160 available.
|
|
161
|
|
162 Generally, EFS is pretty easy to get hold of. FTP is the probably the
|
|
163 simplest method, but other options such as mail are available.
|
|
164
|
|
165 Once you have the Emacs-Lisp source, there are a few customisations you
|
|
166 might need to make. The ideal configuration is to have the FTP process running
|
|
167 on the same machine as you are running Emacs on, but this is not always
|
|
168 possible since some machines cannot access hosts outside the local
|
|
169 network. In this case, the FTP process needs to be run on a machine
|
|
170 which @emph{does} have access to the local world --- this is called the
|
|
171 @strong{gateway host}. EFS has facilities to make use of a
|
|
172 gateway host when accessing remote hosts.
|
|
173
|
|
174 @menu
|
|
175 * Obtaining source code:: Where to find the EFS source.
|
|
176 * Installing source:: Where to put it, how to load it.
|
|
177 * Using a gateway:: If your local machine has limited access.
|
|
178 * Setting up a gateway::
|
|
179 * Gateway types::
|
|
180 * Gateway problems::
|
|
181 * Other options:: More user variables to twiddle.
|
|
182 @end menu
|
|
183
|
|
184 @node Obtaining source code, Installing source, Installing EFS, Installing EFS
|
|
185 @section How to get the EFS source code
|
|
186 @comment node-name, next, previous, up
|
|
187
|
|
188 The latest separately distributed version of EFS should always be
|
|
189 available from Andy Norman's home page at
|
|
190 @example
|
|
191 http://www-uk.hpl.hp.com/people/ange/efs
|
|
192 @end example
|
|
193
|
|
194 There are also some ftp locations:
|
|
195
|
|
196 @table @b
|
|
197 @item Switzerland
|
|
198 @example
|
|
199 /anonymous@@itp.ethz.ch:/sandy/efs/
|
|
200 @end example
|
|
201
|
|
202 @item Massachusetts, USA
|
|
203 @example
|
|
204 /anonymous@@alpha.gnu.ai.mit.edu:/efs/
|
|
205 @end example
|
|
206
|
|
207 @item California, USA
|
|
208 @example
|
|
209 /anonymous@@ftp.hmc.edu:/pub/emacs/packages/efs/
|
|
210 @end example
|
|
211 @end table
|
|
212
|
|
213 Failing these, someone on the EFS mailing list (@xref{Getting help}) may
|
|
214 be able to help you find the latest version.
|
|
215
|
|
216 @node Installing source, Using a gateway, Obtaining source code, Installing EFS
|
|
217 @comment node-name, next, previous, up
|
|
218 @section Installing the source
|
|
219
|
|
220 For byte compiling the EFS package, a @file{Makefile} is provided. You
|
|
221 should follow the instructions at the top of the @file{Makefile}. If
|
|
222 you have any problems, please let us know so that we can fix them for
|
|
223 other users. Don't even consider using eFS without byte compiling it. It
|
|
224 will be far too slow.
|
|
225
|
|
226 If you decide to byte compile efs by hand, it is important that the file
|
|
227 @file{efs-defun.el} be byte compiled first, followed by @file{efs.el}.
|
|
228 The other files may be byte compiled in any order.
|
|
229
|
|
230 To use EFS, simply put the byte compiled files in your load path
|
|
231 and add
|
|
232
|
|
233 @example
|
|
234 (require 'efs)
|
|
235 @end example
|
|
236
|
|
237 in your @file{.emacs} file. Note this takes awhile, and some users have
|
|
238 found this to be unbearably slow. Therefore ...
|
|
239
|
|
240 If you would like efs to be autoloaded when you attempt to access
|
|
241 a remote file, put
|
|
242
|
|
243 @example
|
|
244 (require 'efs-auto)
|
|
245 @end example
|
|
246
|
|
247 in your @file{.emacs} file. Note that there are some limitations associated
|
|
248 with autoloading EFS. A discussion of them is given at the top of
|
|
249 @file{efs-auto.el}.
|
|
250
|
|
251 Note that, in XEmacs, EFS automatically loads @file{efs-auto} when the
|
|
252 user accesses a remote file. Therefore, no additional @code{require}
|
|
253 statements should be necessary to use EFS. Just fire away ...
|
|
254
|
|
255 The above instructions should allow you to access all hosts that your
|
|
256 local machine can access. If your local host has limited access,
|
|
257 however, you may wish to have EFS working through a gateway
|
|
258 machine. If so, read on. Otherwise, @xref{Using EFS} to get started
|
|
259 using EFS.
|
|
260
|
|
261 @node Using a gateway, Setting up a gateway, Installing source, Installing EFS
|
|
262 @comment node-name, next, previous, up
|
|
263 @section Using a gateway
|
|
264
|
|
265 Sometimes it is necessary for the FTP process to be run on a different
|
|
266 machine than the machine running Emacs. This can happen when the
|
|
267 local machine has restrictions on what hosts it can access.
|
|
268
|
|
269 Suppose you are running Emacs (and EFS, of course) on a machine X
|
|
270 (let's call it the `local host') and you want to access a file on a
|
|
271 machine Z (which we will call the `remote host'). Unfortunately, X does
|
|
272 not have FTP access to Z: when you try a manual FTP something like
|
|
273 the following happens:
|
|
274 @example
|
|
275 X$ ftp Z.foo.bar.com
|
|
276 ftp: connect: Host is unreachable
|
|
277 @end example
|
|
278 @noindent
|
|
279 However, X @emph{does} have access to a machine Y (the `gateway
|
|
280 machine') which @emph{can} access Z. Fortunately, you have an account on
|
|
281 the gateway machine, and so the solution is to login to Y, ftp to Z,
|
|
282 download the file you want from Z to Y, and then copy it from Y to the
|
|
283 local host, X. This can get a bit tedious, to say the least, but
|
|
284 fortunately EFS can do all the hard work for you.
|
|
285
|
|
286 @node Setting up a gateway, Gateway types, Using a gateway, Installing EFS
|
|
287 @comment node-name, next, previous, up
|
|
288 @section Setting up a gateway
|
|
289
|
|
290 @enumerate
|
|
291
|
|
292 @item
|
|
293 Set the variable @code{efs-gateway-host} to the name of a machine
|
|
294 @vindex efs-gateway-host
|
|
295 that doesn't have the access restrictions. If you need to use a
|
|
296 nonstandard port to access this host for gateway use, then specify
|
|
297 @code{efs-gateway-host} as @code{<hostname>#<port>}.
|
|
298
|
|
299 @item
|
|
300 Set the variable @code{efs-ftp-local-host-regexp} to a regular
|
|
301 expression
|
|
302 @vindex efs-ftp-local-host-regexp
|
|
303 that matches hosts that can be contacted from running a local ftp
|
|
304 process, but fails to match hosts that can't be accessed locally.
|
|
305
|
|
306 For example:
|
|
307
|
|
308 @example
|
|
309 "\\.hp\\.com$\\|^[^.]*$"
|
|
310 @end example
|
|
311
|
|
312 will match all hosts that are in the @t{.hp.com} domain, or don't have
|
|
313 an explicit domain in their name, but will fail to match hosts with
|
|
314 explicit domains or that are specified by their ip address.
|
|
315
|
|
316 @item
|
|
317 Set the variable @code{efs-local-host-regexp} to machines that you have
|
|
318 @vindex efs-local-host-regexp
|
|
319 direct TCP/IP access. In other words, you must be able to ping these
|
|
320 hosts. Usually, @code{efs-ftp-local-host-regexp} and
|
|
321 @code{efs-local-host-regexp} will be the same. However, they will
|
|
322 differ for so-called transparent gateways. See below for more
|
|
323 details.
|
|
324
|
|
325 @item
|
|
326 Set the variable @code{efs-gateway-tmp-name-template} to the name of
|
|
327 @vindex efs-gateway-tmp-name-template
|
|
328 a directory plus an identifying filename prefix for making temporary
|
|
329 files on the gateway. For example: @code{"/tmp/hplose/ange/efs"}
|
|
330
|
|
331 @item
|
|
332 If the gateway and the local host share cross-mounted directories,
|
|
333 set the value of @code{efs-gateway-mounted-dirs-alist} accordingly. It
|
|
334 @vindex efs-gateway-mounted-dirs-alist
|
|
335 is particularly useful, but not mandatory, that the directory
|
|
336 of @code{efs-gateway-tmp-name-template} be cross-mounted.
|
|
337 @vindex efs-gateway-tmp-name-template
|
|
338
|
|
339 @item
|
|
340 Set the variable @code{efs-gateway-type} to the type gateway that you have.
|
|
341 This variable is a list, the first element of which is a symbol
|
|
342 denoting the type of gateway.
|
|
343 @end enumerate
|
|
344
|
|
345 @node Gateway types, Gateway problems, Setting up a gateway, Installing EFS
|
|
346 @comment node-name, next, previous, up
|
|
347 @section Supported gateway types
|
|
348
|
|
349 @vindex efs-gateway-type
|
|
350
|
|
351 @table @samp
|
|
352
|
|
353 @item local
|
|
354 This means that your local host is itself the gateway. However,
|
|
355 it is necessary to use a different FTP client to gain access to
|
|
356 the outside world. If the name of the FTP client were @t{xftp}, you might
|
|
357 set @code{efs-gateway-type} to
|
|
358
|
|
359 @example
|
|
360 (list 'local "xftp" efs-ftp-program-args)
|
|
361 @end example
|
|
362
|
|
363 If @t{xftp} required special arguments, then give them in place of
|
|
364 @t{efs-ftp-program-args}.
|
|
365 @vindex efs-ftp-program-args
|
|
366
|
|
367 @item proxy
|
|
368
|
|
369 This indicates that your gateway works by first FTP'ing to it, and
|
|
370 then issuing a @code{USER} command of the form
|
|
371
|
|
372 @example
|
|
373 USER <username>@@<host>
|
|
374 @end example
|
|
375
|
|
376 In this case, you might set @code{efs-gateway-type} to
|
|
377
|
|
378 @example
|
|
379 (list 'proxy "ftp" efs-ftp-program-args)
|
|
380 @end example
|
|
381
|
|
382 If you need to use a nonstandard client, such as @t{iftp}, give this
|
|
383 @pindex iftp
|
|
384 instead of @t{ftp}. If this client needs to take special arguments,
|
|
385 give them instead of @t{efs-ftp-program-args}.
|
|
386
|
|
387 @item remsh
|
|
388
|
|
389 For this type of gateway, you need to start a remote shell on
|
|
390 your gateway, using either @t{remsh} or @t{rsh}. You should set
|
|
391 @pindex remsh
|
|
392 @pindex rsh
|
|
393 @sc{efs-gateway-type} to something like
|
|
394
|
|
395 @example
|
|
396 (list 'remsh "remsh" nil "ftp" efs-ftp-program-args)
|
|
397 @end example
|
|
398
|
|
399 If you use @t{rsh} instead of @r{remsh}, change the second element from
|
|
400 @code{"remsh"} to @code{"rsh"}. Note that the symbol indicating the gateway
|
|
401 type should still be @code{'remsh}. If you want to pass arguments
|
|
402 to the remsh program, give them as the third element. For example,
|
|
403 if you need to specify a user, make this @code{(list "-l" "sandy")}.
|
|
404 If you need to use a nonstandard FTP client, specify that as the fourth
|
|
405 element. If your FTP client needs to be given special arguments,
|
|
406 give them instead of @code{efs-ftp-program-args}.
|
|
407
|
|
408 @item interactive
|
|
409
|
|
410 This indicates that you need to establish a login on the gateway,
|
|
411 using either @t{telnet} or @t{rlogin}.
|
|
412 @pindex telnet
|
|
413 @pindex rlogin
|
|
414 You should set @code{efs-gateway-type} to something like
|
|
415
|
|
416 @example
|
|
417 (list 'interactive "rlogin" nil "exec ftp" efs-ftp-program-args)
|
|
418 @end example
|
|
419
|
|
420 If you need to use @t{telnet}, then give @code{"telnet"} in place of the second
|
|
421 element @code{"rlogin"}. If your login program needs to be given arguments,
|
|
422 then they should be given in the third slot. The fourth element
|
|
423 is for the name of the FTP client program. Giving this as @code{"exec ftp"},
|
|
424 instead of @code{"ftp"}, ensures that you are logged out if the FTP client
|
|
425 dies. If the FTP client takes special arguments, give these instead
|
|
426 of @code{efs-ftp-program-args}. Furthermore, you should see the documentation
|
|
427 at the top of @file{efs-gwp.el}. You may need to set the variables
|
|
428 @code{efs-gwp-setup-term-command}, and @code{efs-gwp-prompt-pattern}.
|
|
429 @vindex efs-gwp-setup-term-command
|
|
430 @vindex efs-gwp-prompt-pattern
|
|
431
|
|
432 @item raptor
|
|
433 This is a type of gateway where efs is expected to specify a gateway
|
|
434 user, and send a password for this user using the @code{ACCOUNT} command.
|
|
435 For example, to log in to @samp{foobar.edu} as sandy, while using the account
|
|
436 ange on the gateway, the following commands would be sent:
|
|
437
|
|
438 @example
|
|
439 open raptorgate.com
|
|
440 quote USER sandy@@foobar.edu ange
|
|
441 quote pass <sandy's password on foobar>
|
|
442 quote account <ange's password on raptorgate>
|
|
443 @end example
|
|
444
|
|
445 For such a gateway, you would set @code{efs-gateway-type} to
|
|
446
|
|
447 @example
|
|
448 (list 'raptor efs-ftp-program efs-ftp-program-args <GATEWAY USER>)
|
|
449 @end example
|
|
450
|
|
451 where @code{<GATEWAY USER>} is the name of your account on the gateway. In
|
|
452 the above example, this would be @code{"ange"}. You can set your gateway
|
|
453 password by simply setting an account password for the gateway host.
|
|
454 This can be done with either efs-set-account, or within your .netrc
|
|
455 file. If no password is set, you will be prompted for one.
|
|
456
|
|
457 @item interlock
|
|
458 This is a type of gateway where you are expected to send a PASS
|
|
459 command after opening the connection to the gateway.
|
|
460 The precise login sequence is
|
|
461
|
|
462 @example
|
|
463 open interlockgate
|
|
464 quote PASS <sandy's password on interlockgate>
|
|
465 quote USER sandy@@foobar.edu
|
|
466 quote PASS <sandy's password on foobar.edu>
|
|
467 @end example
|
|
468
|
|
469 For such a gateway, you should set @code{efs-gateway-type} to
|
|
470
|
|
471 @example
|
|
472 (list 'interlock efs-ftp-program efs-ftp-program-args)
|
|
473 @end example
|
|
474
|
|
475 If you need to use a nonstandard name for your FTP client,
|
|
476 then replace @code{efs-ftp-program} with this name. If your FTP client
|
|
477 needs to take nonstandard arguments, then replace @code{efs-ftp-program-args}
|
|
478 with these arguments.
|
|
479
|
|
480 If your gateway returns both a 220 code and a 331 code to the
|
|
481 @code{"open interlockgate"} command, then you should add a regular
|
|
482 expression to @code{efs-skip-msgs} that matches the 220 response.
|
|
483 Returning two response codes to a single FTP command is not permitted
|
|
484 in RFC 959. It is not possible for efs to ignore the 220 by default,
|
|
485 because than it would hang for interlock installations which do not
|
|
486 require a password.
|
|
487
|
|
488 @item kerberos
|
|
489 With this gateway, you need to authenticate yourself by getting a
|
|
490 kerberos "ticket" first. Usually, this is done with the kinit program.
|
|
491 Once authenticated, you connect to @samp{foobar.com} as user sandy with the
|
|
492 sequence: (Note that the @code{"-n"} argument inhibits automatic login.
|
|
493 Although, in manual use you probably don't use it, EFS always uses it.)
|
|
494
|
|
495 @example
|
|
496 iftp -n
|
|
497 open foobar.com
|
|
498 user sandy@@foobar.com
|
|
499 @end example
|
|
500 @pindex iftp
|
|
501
|
|
502 You should set @code{efs-gateway-type} to something like
|
|
503
|
|
504 @example
|
|
505 (list 'kerberos "iftp" efs-ftp-program-args "kinit" <KINIT-ARGS>)
|
|
506 @end example
|
|
507
|
|
508 If you use an FTP client other than @t{iftp}, insert its name instead of
|
|
509 @code{"iftp"} above. If your FTP client needs special arguments, give
|
|
510 them as a list of strings in place of @code{efs-ftp-program-args}. If
|
|
511 the program that you use to collect a ticket in not called
|
|
512 @code{"kinit"}, then give its name in place of @code{"kinit"} above.
|
|
513 @code{<KINIT-ARGS>} should be any arguments that you need to pass to
|
|
514 your kinit program, given as a list of strings. Most likely, you will
|
|
515 give this as nil.
|
|
516
|
|
517 See the file @file{efs-kerberos.el} for more configuration variables. If you
|
|
518 need to adjust any of these variables, please report this to us so that
|
|
519 we can fix them for other users.
|
|
520
|
|
521 If EFS detects that you are not authenticated to use the gateway, it
|
|
522 will run the kinit program automatically, prompting you for a password.
|
|
523 If you give a password in your @file{.netrc} file for login the value of
|
|
524 @code{efs-gateway-host} and user @t{kerberos}, then EFS will use this to
|
|
525 obtain gateway authentication.
|
|
526
|
|
527 @item Transparent gateways
|
|
528
|
|
529 If your gateway is completely transparent (for example it uses socks),
|
|
530 then you should set @code{efs-gateway-type} to @code{nil}. Also, set
|
|
531 @code{efs-ftp-local-host-regexp} to @code{".*"}. However,
|
|
532 @code{efs-local-host-regexp}, must still be set to a regular expression
|
|
533 matching hosts in your local domain. EFS uses this to determine which
|
|
534 machines that it can open-network-stream to. Furthermore, you should
|
|
535 still set @code{efs-gateway-host} to the name of your gateway machine.
|
|
536 That way EFS will know that this is a special machine having direct
|
|
537 TCP/IP access to both hosts in the outside world, and hosts in your
|
|
538 local domain.
|
|
539
|
|
540 @end table
|
|
541
|
|
542
|
|
543
|
|
544 @node Gateway problems, Other options, Gateway types, Installing EFS
|
|
545 @comment node-name, next, previous, up
|
|
546 @section Common Problems with Gateways
|
|
547
|
|
548 @subsection Spurious 220 responses
|
|
549
|
|
550 Some proxy-style gateways (eg gateway type @code{'proxy} or @code{'raptor}),
|
|
551 return two 3-digit FTP reply codes to the @code{USER} command.
|
|
552 For example:
|
|
553
|
|
554 @example
|
|
555 open gateway.weird
|
|
556 220 Connected to gateway.weird
|
|
557 quote USER sandy@@foobar
|
|
558 220 Connected to foobar
|
|
559 331 Password required for sandy
|
|
560 @end example
|
|
561
|
|
562 This is wrong, according to the FTP Protocol. Each command must return
|
|
563 exactly one 3-digit reply code. It may be preceded by continuation
|
|
564 lines. What should really be returned is:
|
|
565
|
|
566 @example
|
|
567 quote USER sandy@@foobar
|
|
568 331-Connected to foobar.
|
|
569 331 Password required for sandy.
|
|
570 @end example
|
|
571
|
|
572 or even
|
|
573
|
|
574 @example
|
|
575 quote USER sandy@@foobar
|
|
576 331-220 Connected to foobar.
|
|
577 331 Password required for sandy.
|
|
578 @end example
|
|
579
|
|
580 Even though the @samp{"331-220"} looks strange, it is correct protocol,
|
|
581 and EFS will parse it properly.
|
|
582
|
|
583 If your gateway is returning a spurious 220 to @code{USER}, a work-around
|
|
584 is to add a regular expression to @code{efs-skip-msgs} that matches
|
|
585 @vindex efs-skip-msgs
|
|
586 this line. It must not match the 220 line returned to the open
|
|
587 command. This work-around may not work, as some system FTP clients
|
|
588 also get confused by the spurious 220. In this case, the only
|
|
589 solution is to patch the gateway server. In either case, please
|
|
590 send a bug report to the author of your gateway software.
|
|
591
|
|
592 @subsection Case-sensitive parsing of FTP commands
|
|
593
|
|
594 Some gateway servers seem to treat FTP commands case-sensitively.
|
|
595 This is incorrect, as RFC 959 clearly states that FTP commands
|
|
596 are always to be case-insensitive. If this is a problem with your
|
|
597 gateway server, you should send a bug report to its author.
|
|
598 If efs is using a case for FTP commands that does not suit your server,
|
|
599 a possible work-around is to edit the efs source so that the required
|
|
600 case is used. However, we will not be making any changes to the
|
|
601 standard EFS distribution to support this type of server behaviour.
|
|
602 If you need help changing the efs source, you should enquire with the
|
|
603 efs-help mailing list.
|
|
604
|
|
605 @node Other options, , Gateway problems, Installing EFS
|
|
606 @comment node-name, next, previous, up
|
|
607 @section Other user options
|
|
608
|
|
609 Here are other user options available in EFS:
|
|
610
|
|
611 @code{efs-netrc-filename}: The name of a file in @code{netrc(5)}
|
|
612 format that EFS will use to match hostnames, users and their
|
|
613 respective passwords. Hostnames specified here are also used for hostname
|
|
614 completion.
|
|
615 The default is @code{"~/.netrc"}.
|
|
616 @vindex efs-netrc-filename
|
|
617
|
|
618 @code{efs-default-user}: If this is a string, it is the username to
|
|
619 use when none is specified in a filename. If @code{nil}, then the
|
|
620 name under which the user is logged in is used. If non-@code{nil} but
|
|
621 not a string, the user is prompted for the name. The default is @code{nil}.
|
|
622 @vindex efs-default-user
|
|
623
|
|
624 @code{efs-default-password}: The password to use when the user is the
|
|
625 same as @code{efs-default-user}. The default is @code{nil}.
|
|
626 @vindex efs-default-password
|
|
627
|
|
628 @code{efs-default-account}: Account password to use when the user
|
|
629 is the same as @code{efs-default-user}. The default is @code{nil}.
|
|
630 @vindex efs-default-account
|
|
631
|
|
632 @code{efs-dumb-unix-host-regexp}: The FTP servers on some machines have
|
|
633 problems if the @code{ls} command is used. The usual indication that
|
|
634 something is wrong is when EFS erroneously thinks that a directory
|
|
635 is just a plain file. The routine @code{efs-add-host} can
|
|
636 be called to tell EFS to limit itself to the @code{DIR} command and
|
|
637 not @code{ls} for a given host (but this change will take effect for the
|
|
638 current Emacs session only) when called like this:
|
|
639
|
|
640 @example
|
|
641 (efs-add-host 'dumb-unix "hostname")
|
|
642 @end example
|
|
643
|
|
644 If a large number of machines with similar hostnames have this problem
|
|
645 then it is easier to change the value of this variable to a regexp which
|
|
646 matches hostnames which have this problem, particularly since EFS cannot
|
|
647 automatically detect such hosts. The default is @code{nil}.
|
|
648 @vindex efs-dumb-unix-host-regexp
|
|
649 @findex efs-add-host
|
|
650
|
|
651 @code{efs-binary-file-name-regexp}: By default EFS will
|
|
652 transfer files in ASCII mode. If a file being transferred matches the
|
|
653 value of this regexp then the FTP process will be toggled into BINARY
|
|
654 mode before the transfer and back to ASCII mode after the transfer. The
|
|
655 default is:
|
|
656 @example
|
|
657 (concat "\\." ; the dot
|
|
658 ;; extensions
|
|
659 "\\([zZ]\\|t?gz\\|lzh\\|arc\\|zip\\|zoo\\|ta[rz]\\|dvi\\|sit\\|"
|
|
660 "ps\\|elc\\|gif\\|Z-part-..\\|tpz\\|exe\\|[jm]pg\\|TZ[a-z]?\\|lib\\)"
|
|
661 "\\(~\\|~[0-9]+~\\)?$" ; backups
|
|
662 "\\|"
|
|
663 ;; UPPER CASE LAND
|
|
664 "\\."
|
|
665 "\\(ARC\\|ELC\\|TAGS\\|EXE\\|ZIP\\|DVI\|ZOO\\|GIF\\|T?GZ\\|"
|
|
666 "[JM]PG\\)"
|
|
667 "\\([.#;][0-9]+\\)?$" ; versions
|
|
668 )
|
|
669 @end example
|
|
670 @vindex efs-binary-file-name-regexp
|
|
671
|
|
672 @code{efs-hash-mark-size}: EFS by default requests that the
|
|
673 FTP process sends hash marks (just @code{#} characters) during transfers
|
|
674 to keep track of how much data has been sent or received. This variable,
|
|
675 if non-@code{nil}, should be the number of kilobytes represented by the
|
|
676 FTP client's hash mark. The default value of 1 doesn't work for me --- I
|
|
677 use 2 instead.
|
|
678 @vindex efs-hash-mark-size
|
|
679
|
|
680 @code{efs-verbose}: If this is @code{t} then EFS will be chatty about
|
|
681 interaction with the FTP process. The default is @code{t}.
|
|
682 @vindex efs-process-verbose
|
|
683
|
|
684 @code{efs-ftp-program-name}: This should be the name of the FTP
|
|
685 program to run on the local host. The default value of @code{"ftp"}
|
|
686 should be fine for most systems.
|
|
687 @vindex efs-ftp-program-name
|
|
688
|
|
689 @code{efs-make-backup-files}: A list of operating systems for which
|
|
690 EFS will make Emacs backup files on the remote host. For example,
|
|
691 @code{'(unix)} makes sense, but @code{'(unix vms)} or @code{'(vms)}
|
|
692 would be silly, since VMS makes its own backups. The host type is
|
|
693 determined by the function @code{efs-host-type}. Possible host
|
|
694 types are: @code{dumb-unix}; @code{vos}; @code{vms}; @code{mts}; and
|
|
695 @code{unix}. The default of @code{nil} means make no backups on remote
|
|
696 hosts.
|
|
697 @vindex efs-make-backup-files
|
|
698 @cindex backup files
|
|
699
|
|
700 @code{efs-skip-msgs}: A regular expression matching messages from
|
|
701 the ftp process that can be ignored. The default is
|
|
702 @example
|
|
703 (concat
|
|
704 "^110 \\|" ; Restart marker reply.
|
|
705 "^125 \\|" ; Data connection already open; transfer starting.
|
|
706 "^150 ") ; File status OK; about to open connection.
|
|
707 @end example
|
|
708 @noindent
|
|
709 but you might need to tweak it if EFS is giving up when it
|
|
710 shouldn't.
|
|
711 @vindex efs-skip-msgs
|
|
712
|
|
713 @code{efs-fatal-msgs}: A regular expression matching messages from
|
|
714 the FTP process that indicate something has gone drastically wrong
|
|
715 attempting the action that was initiated and that the FTP process should
|
|
716 (or already has) been killed. The default is
|
|
717 @example
|
|
718 (concat
|
|
719 ;; RFC959 codes
|
|
720 "^221 \\|" ; Service closing control connection.
|
|
721 "^421 \\|" ; Service not available.
|
|
722 "^425 \\|" ; Can't open data connection.
|
|
723 "^426 \\|" ; Connection closed, transfer aborted.
|
|
724 "^451 \\|" ; Requested action aborted, local error in processing.
|
|
725 ;; RFC959 non-compliant codes
|
|
726 "^552 Maximum Idle Time Exceded\\.$\\|" ; Hellsoft server uses this to
|
|
727 ; indicate a timeout. 552 is
|
|
728 ; supposed to be used for exceeded
|
|
729 ; storage allocation. Note that
|
|
730 ; they also misspelled the error
|
|
731 ; message.
|
|
732 ;; client problems
|
|
733 "^ftp: \\|^Not connected\\|^rcmd: \\|^No control connection\\|"
|
|
734 "^unknown host\\|: unknown host$\\|^lost connection\\|"
|
|
735 "^[Ss]egmentation fault\\|"
|
|
736 ;; Make sure that the "local: " isn't just a message about a file.
|
|
737 "^local: [^/]\\|"
|
|
738 ;; Gateways
|
|
739 "^iftp: cannot authenticate to server\\b"
|
|
740 )
|
|
741 @end example
|
|
742 @vindex efs-fatal-msgs
|
|
743
|
|
744 @code{efs-gateway-fatal-msgs}: Regular expression matching messages
|
|
745 from the rlogin / telnet process that indicates that logging in to the
|
|
746 gateway machine has gone wrong. The default is
|
|
747 @example
|
|
748 "No route to host\\|Connection closed\\|No such host\\|Login incorrect"
|
|
749 @end example
|
|
750 @vindex efs-gateway-fatal-msgs
|
|
751
|
|
752 @code{efs-tmp-name-template}: This should be a directory and a
|
|
753 filename prefix indicating where EFS should make temporary files.
|
|
754 The default of @code{"/tmp/efs"} should be fine for most systems.
|
|
755 @vindex efs-tmp-name-template
|
|
756 @cindex temporary files
|
|
757
|
|
758 @code{efs-retry-time}: Number of seconds to wait before retrying if
|
|
759 a file or listing doesn't arrive. For slow connections, you might get a
|
|
760 ``listing unreadable'' error messages
|
|
761 @cindex listing unreadable error
|
|
762 or an empty buffer for a file that you know has something in it. The
|
|
763 solution is to increase the value of @code{efs-retry-time}. Its default
|
|
764 value is 5 which is plenty for reasonable connections. However, for
|
|
765 some transatlantic connections 20 might be a better value.
|
|
766 @vindex efs-retry-time
|
|
767
|
|
768 @node Using EFS, Getting help, Installing EFS, Top
|
|
769 @comment node-name, next, previous, up
|
|
770 @chapter Using EFS
|
|
771
|
|
772 Once installed, efs operates largely transparently. All files normally
|
|
773 accessible to you on the internet, become part of a large virtual file
|
|
774 system. These files are accessed using an extended file name syntax. To
|
|
775 access file @code{<path>} on remote host @code{<host>} by logging in as
|
|
776 user @code{<user>}, you simply specify the full path of the file as
|
|
777 @code{/<user>@@<host>:<path>}. Nearly all Emacs file handling functions
|
|
778 work for remote files. It is not possible to access remote files using
|
|
779 shell commands in an emacs *shell* buffer, as such commands are passed
|
|
780 directly to the shell, and not handled by emacs.
|
|
781
|
|
782 FTP is the underlying utility that efs uses to operate on remote files.
|
|
783
|
|
784 For example, if @code{find-file} is given a filename of:
|
|
785
|
|
786 @example
|
|
787 /ange@@anorman:/tmp/notes
|
|
788 @end example
|
|
789
|
|
790 then EFS will spawn an FTP process, connect to the host 'anorman' as
|
|
791 user 'ange', get the file @file{/tmp/notes} and pop up a buffer containing the
|
|
792 contents of that file as if it were on the local file system. If efs
|
|
793 needed a password to connect then it would prompt the user in the
|
|
794 minibuffer. For further discussion of the EFS path syntax, see the
|
|
795 paragraph on extended file name syntax @ref{Remote filenames}.
|
|
796
|
|
797 Full file-name completion is supported on every type of remote host. To
|
|
798 do filename completion, EFS needs a listing from the remote host.
|
|
799 Therefore, for very slow connections, it might not save any
|
|
800 time. However, the listing is cached, so subsequent uses of file-name
|
|
801 completion will be just as fast as for local file names.
|
|
802
|
|
803 @menu
|
|
804 * Ports:: Using nonstandard ports.
|
|
805 * Remote filenames:: The EFS extended filename syntax.
|
|
806 * Passwords::
|
|
807 * Using Dired:: Browsing directories.
|
|
808 * Using a .netrc:: Preventing password pestering.
|
|
809 * EFS commands:: Interactive commands supplied by EFS.
|
|
810 * FTP processes:: How EFS does its work
|
|
811 * Tips:: Some stuff to help you use EFS
|
|
812 * DL support:: Descriptive directory listings
|
|
813 * Non-Unix Hosts:: Some of what you want to know
|
|
814 * Completion:: Works but has its price
|
|
815 * Accessing the FTP process:: ... manually
|
|
816 @end menu
|
|
817
|
|
818 @node Ports, Remote filenames, Using EFS, Using EFS
|
|
819 @comment node-name, next, previous, up
|
|
820 @section Using nonstandard ports
|
|
821
|
|
822 EFS supports the use of nonstandard ports on remote hosts. To specify
|
|
823 that port @code{<port>} should be used, give the host name as
|
|
824 @code{host#<port>}. Host names may be given in this form anywhere that
|
|
825 efs normally expects a host name. This includes in the @file{.netrc} file.
|
|
826 Logically, EFS treats different ports to correspond to different remote
|
|
827 hosts.
|
|
828
|
|
829 @node Remote filenames, Passwords, Ports, Using EFS
|
|
830 @comment node-name, next, previous, up
|
|
831 @section Extended filename syntax
|
|
832
|
|
833 The default full EFS path syntax is
|
|
834
|
|
835 @example
|
|
836 /<user>@@<host>#<port>:<path>
|
|
837 @end example
|
|
838
|
|
839 Both the @code{#<port>'}and @code{<user>@@} may be omitted.
|
|
840
|
|
841 If the @code{#<port>} is omitted, then the default port is taken to be 21,
|
|
842 the usual FTP port. For most users, the port syntax will only
|
|
843 very rarely be necessary.
|
|
844
|
|
845 If the @code{<user>@@} is omitted, then EFS will use a default user. If
|
|
846 a login token is specified in your @file{.netrc} file, then this will be
|
|
847 used as the default user for @code{<host>}. Otherwise, it is determined
|
|
848 based on the value of the variable @code{efs-default-user}.
|
|
849 @vindex efs-default-user
|
|
850
|
|
851 This EFS path syntax can be customised to a certain extent by changing a
|
|
852 number of variables. To
|
|
853 undertake such a customization requires some knowledge about the
|
|
854 internal workings of EFS.
|
|
855
|
|
856 @node Passwords, Using Dired, Remote filenames, Using EFS
|
|
857 @comment node-name, next, previous, up
|
|
858 @section Passwords
|
|
859
|
|
860 A password is required for each host / user pair. This will be prompted
|
|
861 for when needed, unless already set by calling @code{efs-set-passwd},
|
|
862 @findex efs-set-passwd
|
|
863 or specified in a @emph{valid} @file{~/.netrc} file.
|
|
864
|
|
865 When EFS prompts for a password, it provides defaults from its cache of
|
|
866 currently known passwords. The defaults are ordered such that passwords
|
|
867 for accounts which have the same user name as the login which is
|
|
868 currently underway have priority. You can cycle through your list of
|
|
869 defaults with @kbd{C-n} to cycle forwards and @kbd{C-p} to cycle
|
|
870 backwards. The list is circular.
|
|
871
|
|
872 @subsection Passwords for anonymous user
|
|
873
|
|
874 Passwords for the user @t{anonymous} (or @t{ftp}) are handled specially.
|
|
875 The variable @code{efs-generate-anonymous-password} controls what
|
|
876 \vindex efs-generate-anonymous-password happens. If the value of this
|
|
877 variable is a string, then this is used as the password; if
|
|
878 non-@code{nil}, then a password is created from the name of the user and
|
|
879 the hostname of the machine on which Emacs is running; if @code{nil}
|
|
880 (the default) then the user is prompted for a password as normal.
|
|
881
|
|
882 @subsection Account passwords
|
|
883
|
|
884 Some FTP servers require an additional password which is sent by the
|
|
885 @code{ACCOUNT} command. EFS will detect this and prompt the user for an
|
|
886 account password if the server expects one. Also, an account password
|
|
887 can be set by calling @code{efs-set-account}, or by specifying an
|
|
888 @findex efs-set-account
|
|
889 account token in the @file{.netrc} file.
|
|
890
|
|
891 Some operating systems, such as CMS, require that @code{ACCOUNT} be used
|
|
892 to give a write access password for minidisks. @code{efs-set-account} can be
|
|
893 used to set a write password for a specific minidisk. Also, tokens of
|
|
894 the form
|
|
895
|
|
896 @example
|
|
897 minidisk <minidisk name> <password>
|
|
898 @end example
|
|
899
|
|
900 may be added to host lines in your @file{.netrc} file. Minidisk tokens
|
|
901 must be at the end of the host line, however there may be an arbitrary
|
|
902 number of them for any given host.
|
|
903
|
|
904 @node Using Dired, Using a .netrc, Passwords, Using EFS
|
|
905 @comment node-name, next, previous, up
|
|
906 @section Using Dired
|
|
907
|
|
908 This feature of EFS is particularly useful when file transfers, as
|
|
909 opposed to file editing, are the order of the day. Simply run
|
|
910 @code{find-file} on a directory to
|
|
911 get a listing of the files in that directory. For example, you might
|
|
912 run @code{find-file} on
|
|
913 @example
|
|
914 /anonymous@@archive.site.com:pub
|
|
915 @end example
|
|
916 @noindent
|
|
917 to see what's in the @file{pub} directory of your favourite archive
|
|
918 @cindex archive sites
|
|
919 site. This brings up a Dired buffer of all the files in that directory.
|
|
920 The @kbd{f} command is useful for looking at @file{README} files --- if
|
|
921 you then decide to save it @kbd{C-x C-w} is useful. You can also use
|
|
922 this method to copy files, but the @kbd{c} command is easier. The
|
|
923 @kbd{f} command can also be used to descend the directory tree by
|
|
924 applying it to directories.
|
|
925
|
|
926 You can also use Dired to refresh EFS's internal cache. If you
|
|
927 (or anybody else) has changed a remote directory since you first accessed it
|
|
928 with EFS, completion is not provided on any new files that EFS
|
|
929 does not know about. If you have
|
|
930 (or create) a Dired buffer which contains the modified directory,
|
|
931 executing @code{revert-buffer}
|
|
932 @findex revert-buffer
|
|
933 with a prefix argument (@kbd{C-u g} in the Dired buffer)
|
|
934 will force a refresh of both the the buffer @emph{and also EFS's
|
|
935 internal cache}. If you find that filename completion isn't working on a
|
|
936 @cindex filename completion
|
|
937 file that you @emph{know} is there, this is how to fix the problem.
|
|
938
|
|
939 Dired provides facilities for maintaining an
|
|
940 entire directory tree in a Dired buffer, for marking files which match a
|
|
941 certain regexp (or you can select files interactively) and then copying
|
|
942 all those files to your local host (or even a different remote host).
|
|
943 Another useful feature is Virtual Dired, which allows you to save Dired
|
|
944 @cindex virtual dired
|
|
945 buffers of remote hosts, allowing you to browse them at a later date
|
|
946 without actually needing to connect to the host.
|
|
947
|
|
948 @node Using a .netrc, EFS commands, Using Dired, Using EFS
|
|
949 @comment node-name, next, previous, up
|
|
950 @section Using a .netrc file
|
|
951
|
|
952 Being prompted for passwords all the time can get rather annoying, but
|
|
953 there is a way to fix the problem --- a @file{.netrc} (but @xref{Other
|
|
954 options} and @code{efs-netrc-filename}
|
|
955 @vindex efs-netrc-filename
|
|
956 if you want another
|
|
957 filename) file in your home directory. Basically, this is a file (in the
|
|
958 format of Unix @code{netrc(5)}) which
|
|
959 contains the names of all the machines you regularly login to, as well
|
|
960 as the username and password you use for that machine. You can also
|
|
961 supply an account password, if required.
|
|
962
|
|
963 Your @file{.netrc} file consists of lines of the form
|
|
964 @example
|
|
965 machine <machine-name> login <user-name> password <password>
|
|
966 @end example
|
|
967 @noindent
|
|
968 It doesn't all have to be on the one line, though: any @code{login} or
|
|
969 @code{password} commands in the file refer to the previous
|
|
970 @code{machine} command. You can also have @code{account
|
|
971 <account-passwd>} commands if you need special account passwords.
|
|
972
|
|
973 For example, you might have the following line in your @file{.netrc}:
|
|
974 @example
|
|
975 machine Y.local.lan.edu login myname password secret
|
|
976 @end example
|
|
977 @noindent
|
|
978 Then if you run @code{find-file} on the file @file{/Y.local.lan.edu:somefile}
|
|
979 you will automatically be logged in as user @code{myname} with password
|
|
980 @code{secret}. You can still login under another name and password, if
|
|
981 you so desire: just include the @code{user@@} part of the filename.
|
|
982
|
|
983 You may also include a default option, as follows:
|
|
984 @example
|
|
985 default login <user-name> password <password>
|
|
986 @end example
|
|
987 @noindent
|
|
988 which applies to any other machines not mentioned elsewhere in your
|
|
989 @file{.netrc}. A particularly useful application of this is with
|
|
990 anonymous logins:
|
|
991 @cindex anonymous FTP
|
|
992 @example
|
|
993 default login myname password myname@@myhost.edu
|
|
994 @end example
|
|
995 @noindent
|
|
996 so that accessing @file{/anyhost:anyfile} will automatically log you in
|
|
997 anonymously, provided the host is not mentioned in the @file{.netrc}.
|
|
998 Note also that if the value of @code{efs-default-user} is
|
|
999 @vindex efs-default-user
|
|
1000 non-@code{nil}, its value will have precedence over the username
|
|
1001 supplied in the default option of the @file{.netrc}.
|
|
1002
|
|
1003 The @file{.netrc} file is also useful in another regard: machines
|
|
1004 included in it are provided with hostname completion. That is, for any
|
|
1005 @cindex hostname completion
|
|
1006 machine in the @file{.netrc}, you need only type a slash and the first
|
|
1007 few characters of its name and then press @key{TAB} to be logged in
|
|
1008 automatically with a username and password from the @file{.netrc} file.
|
|
1009 So it's a good idea to put hosts you use regularly in your @file{.netrc}
|
|
1010 as well:
|
|
1011 @example
|
|
1012 machine archive.site.com login anonymous password myname@@X.local.lan.edu
|
|
1013 @end example
|
|
1014
|
|
1015 @node EFS commands, FTP processes, Using a .netrc, Using EFS
|
|
1016 @comment node-name, next, previous, up
|
|
1017 @section EFS commands
|
|
1018
|
|
1019 EFS supplies a few interactive commands to make connecting with
|
|
1020 hosts a little easier.
|
|
1021
|
|
1022 @noindent
|
|
1023 Command @code{efs-set-user}: Prompts for a hostname and a username.
|
|
1024 Next time access to the host is attempted, EFS will attempt to log
|
|
1025 in again with the new username.
|
|
1026 @findex efs-set-user
|
|
1027
|
|
1028 @noindent
|
|
1029 Command @code{efs-set-passwd}: Prompts for a hostname, user and
|
|
1030 password. Future logins to that host as that user will use the given
|
|
1031 password.
|
|
1032 @findex efs-set-passwd
|
|
1033
|
|
1034 @noindent
|
|
1035 Command @code{efs-set-account}: Prompts for a hostname, user and
|
|
1036 account. Future logins to that host as that user will use the given
|
|
1037 account.
|
|
1038 @findex efs-set-account
|
|
1039
|
|
1040 Note that the effects of the above three commands only last the duration
|
|
1041 of the current Emacs session. To make their effects permanent, you may
|
|
1042 include them as lisp code in your @file{.emacs}:
|
|
1043 @example
|
|
1044 (efs-set-user HOST USER)
|
|
1045 (efs-set-password HOST USER PASSWORD)
|
|
1046 (efs-set-account HOST USER ACCOUNT)
|
|
1047 @end example
|
|
1048 @noindent
|
|
1049 This is an alternative to using a @file{.netrc}; @xref{Using a .netrc}.
|
|
1050
|
|
1051 @noindent
|
|
1052 Command @code{efs-kill-ftp-process}: kill the FTP process
|
|
1053 associated with a given buffer's filename (by default the current
|
|
1054 buffer). This is an easy way to achieve a resynch: any future accesses
|
|
1055 to the remote host will cause the FTP process to be recreated.
|
|
1056 @findex efs-kill-ftp-process
|
|
1057
|
|
1058 @node FTP processes, Tips, EFS commands, Using EFS
|
|
1059 @comment node-name, next, previous, up
|
|
1060 @section FTP processes
|
|
1061
|
|
1062 When EFS starts up an FTP process, it leaves it running for speed
|
|
1063 purposes. Some FTP servers will close the connection after a period of
|
|
1064 time, but EFS should be able to quietly reconnect the next time that
|
|
1065 the process is needed.
|
|
1066
|
|
1067 The FTP process will be killed should the associated @samp{*ftp user@@host*}
|
|
1068 buffer be deleted. This should not cause efs any grief.
|
|
1069
|
|
1070 @subsection Showing background FTP activity on the mode-line
|
|
1071
|
|
1072 After EFS is loaded, the command @code{efs-display-ftp-activity} will cause
|
|
1073 @findex efs-display-ftp-activity
|
|
1074 background FTP activity to be displayed on the mode line. The variable
|
|
1075 @code{efs-mode-line-format} is used to determine how this data is displayed.
|
|
1076 @vindex efs-mode-line-format
|
|
1077 efs does not continuously track the number of active sessions, as this
|
|
1078 would cause the display to change too rapidly. Rather, it uses a heuristic
|
|
1079 algorithm to determine when there is a significant change in FTP activity.
|
|
1080
|
|
1081 @subsection File types
|
|
1082
|
|
1083 By default EFS will assume that all files are ASCII. If a file
|
|
1084 being transferred matches the value of @code{efs-binary-file-name-regexp}
|
|
1085 @vindex efs-binary-file-name-regexp
|
|
1086 then the file will be assumed to be a binary file, and EFS will
|
|
1087 transfer it using "type image". ASCII files will be transferred
|
|
1088 using a transfer type which efs computes to be correct according
|
|
1089 to its knowledge of the file system of the remote host. The
|
|
1090 command @code{efs-prompt-for-transfer-type} toggles the variable
|
|
1091 @findex efs-prompt-for-transfer-type
|
|
1092 @code{efs-prompt-for-transfer-type}. When this variable is
|
|
1093 @vindex efs-prompt-for-transfer-type
|
|
1094 non-@code{nil}, EFS will prompt the user for the transfer type to use
|
|
1095 for every FTP transfer. Having this set all the time is annoying, but
|
|
1096 it is useful to give special treatment to a small set of files. There
|
|
1097 is also a variable @code{efs-text-file-name-regexp}. This is tested
|
|
1098 @vindex efs-text-file-name-regexp
|
|
1099 before @code{efs-binary-file-name-regexp}, so if you set
|
|
1100 @code{efs-text-file-name-regexp} to a non-trivial regular expression,
|
|
1101 and @code{efs-binary-file-name-regexp} to @samp{".*"}, the result will
|
|
1102 to make image the default tranfer type.
|
|
1103
|
|
1104 Also, if you set @code{efs-treat-crlf-as-nl},
|
|
1105 @vindex efs-treat-crlf-as-nl
|
|
1106 then EFS will use type image
|
|
1107 to transfer files between hosts whose file system differ only in that
|
|
1108 one specifies end of line as CR-LF, and the other as NL. This is useful
|
|
1109 if you are transferring files between UNIX and DOS machines, and have a
|
|
1110 package such as @file{dos-mode.el}, that handles the extra @key{^M}'s.
|
|
1111
|
|
1112 @subsection Status reports
|
|
1113
|
|
1114 Most EFS commands that talk to the FTP process output a status
|
|
1115 message on what they are doing. In addition, efs can take advantage
|
|
1116 of the FTP client's @code{HASH} command to display the status of transferring
|
|
1117 files and listing directories. See the documentation for the variables
|
|
1118 @code{efs-hash-mark-size},
|
|
1119 @vindex efs-hash-mark-size
|
|
1120 @code{efs-send-hash}
|
|
1121 @vindex efs-send-hash
|
|
1122 and @code{efs-verbose}
|
|
1123 @vindex efs-verbose
|
|
1124 for more details.
|
|
1125
|
|
1126 @subsection Caching of directory information
|
|
1127
|
|
1128 EFS keeps an internal cache of file listings from remote hosts.
|
|
1129 If this cache gets out of synch, it can be renewed by reverting a
|
|
1130 dired buffer for the appropriate directory (@code{dired-revert} is usually
|
|
1131 bound to @kbd{g}).
|
|
1132
|
|
1133 Alternatively, you can add the following two lines to your @file{.emacs} file
|
|
1134 if you want @kbd{C-r} to refresh EFS's cache whilst doing filename
|
|
1135 completion.
|
|
1136
|
|
1137 @example
|
|
1138 (define-key minibuffer-local-completion-map "\C-r" 'efs-re-read-dir)
|
|
1139 (define-key minibuffer-local-must-match-map "\C-r" 'efs-re-read-dir)
|
|
1140 @end example
|
|
1141
|
|
1142 @node Tips, DL support, FTP processes, Using EFS
|
|
1143 @comment node-name, next, previous, up
|
|
1144
|
|
1145 @section Tips for using EFS
|
|
1146
|
|
1147 @enumerate
|
|
1148 @item
|
|
1149 Beware of compressing files on non-UNIX hosts. EFS will do it by
|
|
1150 copying the file to the local machine, compressing it there, and then
|
|
1151 sending it back. Binary file transfers between machines of different
|
|
1152 architectures can be a risky business. Test things out first on some
|
|
1153 test files. @xref{Bugs} Also, note that EFS sometimes
|
|
1154 copies files by moving them through the local machine. Again,
|
|
1155 be careful when doing this with binary files on non-Unix
|
|
1156 machines.
|
|
1157
|
|
1158 @item
|
|
1159 Beware that dired over ftp will use your setting of
|
|
1160 @code{dired-no-confirm}
|
|
1161 @vindex dired-no-confirm
|
|
1162 (list of dired commands for which confirmation is not asked).
|
|
1163 You might want to reconsider your setting of this variable,
|
|
1164 because you might want confirmation for more commands on remote
|
|
1165 direds than on local direds. For example, I strongly recommend
|
|
1166 that you not include compress in this list. If there is enough
|
|
1167 demand it might be a good idea to have an alist
|
|
1168 @code{efs-dired-no-confirm} of pairs @code{( TYPE . LIST )}, where @code{TYPE} is an
|
|
1169 operating system type and @code{LIST} is a list of commands for which
|
|
1170 confirmation would be suppressed. Then remote dired listings
|
|
1171 would take their (buffer-local) value of @code{dired-no-confirm} from
|
|
1172 this alist. Who votes for this?
|
|
1173
|
|
1174 @item
|
|
1175 Some combinations of FTP clients and servers break and get out of sync
|
|
1176 when asked to list a non-existent directory. Some of the @t{ai.mit.edu}
|
|
1177 machines cause this problem for some FTP clients. Using
|
|
1178 @code{efs-kill-ftp-process}
|
|
1179 @findex efs-kill-ftp-process
|
|
1180 can be used to restart the ftp process, which
|
|
1181 should get things back in synch.
|
|
1182
|
|
1183 @item
|
|
1184 Some ftp servers impose a length limit on the password that can
|
|
1185 be sent. If this limit is exceeded they may bomb in an
|
|
1186 incomprehensible way. This sort of behaviour is common with
|
|
1187 MVS servers. Therefore, you should beware of this possibility
|
|
1188 if you are generating a long password (like an email address)
|
|
1189 with @code{efs-generate-anonymous-password}.
|
|
1190 @vindex efs-generate-anonymous-password
|
|
1191
|
|
1192 @item
|
|
1193 Some antiquated FTP servers hang when asked for an @code{RNFR} command.
|
|
1194 EFS sometimes uses this to test whether its local cache is stale.
|
|
1195 If your server for @code{HOST} hangs when asked for this command, put
|
|
1196
|
|
1197 @example
|
|
1198 (efs-set-host-property HOST 'rnfr-failed t)
|
|
1199 @end example
|
|
1200
|
|
1201 in your @code{efs-ftp-startup-function-alist}
|
|
1202 @vindex efs-ftp-startup-function-alist
|
|
1203 entry for @code{HOST}.
|
|
1204
|
|
1205 @item
|
|
1206 The FTP servers on some Unix machines have problems if the @code{ls}
|
|
1207 command is used. EFS will try to correct for this automatically,
|
|
1208 and send the @code{dir} command instead. If it fails, you can call the
|
|
1209 function @code{efs-add-host},
|
|
1210 @findex efs-add-host
|
|
1211 and give the host type as @code{dumb-unix}. Note that this change will
|
|
1212 take effect for the current Emacs session only. To make this
|
|
1213 specification for future emacs sessions, put
|
|
1214
|
|
1215 @example
|
|
1216 (efs-add-host 'dumb-unix "hostname")
|
|
1217 @end example
|
|
1218
|
|
1219 in your @file{.emacs} file. Also, please report any failure to
|
|
1220 automatically recognize dumb unix to the "bugs" address given below, so
|
|
1221 that we can fix the auto recognition code.
|
|
1222
|
|
1223 @end enumerate
|
|
1224
|
|
1225 @node DL support, Non-Unix Hosts, Tips, Using EFS
|
|
1226 @comment node-name, next, previous, up
|
|
1227 @section Descriptive directory listings
|
|
1228
|
|
1229 Some hosts (such as @code{cs.uwp.edu}) now use descriptive directory
|
|
1230 listings
|
|
1231 @cindex descriptive directory listings
|
|
1232 @cindex extended directory listings
|
|
1233 (which in fact contain @emph{less} information than the
|
|
1234 standard listing!) when issued the @code{ls} command, and EFS has
|
|
1235 been modified to cope with this. EFS can detect such listings, but
|
|
1236 if you regularly use a remote host which uses this extended listing
|
|
1237 format you should set the variable @code{efs-dl-dir-regexp} to a
|
|
1238 @vindex efs-dl-dir-regexp
|
|
1239 regular expression which matches directories using the extended listing
|
|
1240 format. You shouldn't anchor the regexp with @samp{$} -- that way the
|
|
1241 regexp will match subdirectories as well. Alternatively, you can use
|
|
1242 the interactive command @code{efs-add-dl-dir} to temporarily add a
|
|
1243 @findex efs-add-dl-dir
|
|
1244 remote directory for this Emacs session only.
|
|
1245
|
|
1246 Dired has been modified to work with such descriptive listings.
|
|
1247
|
|
1248 @node Non-Unix Hosts, Completion, DL support, Using EFS
|
|
1249 @comment node-name, next, previous, up
|
|
1250 @section Using EFS with non-Unix hosts
|
|
1251
|
|
1252 EFS also works with some non-Unix hosts, although not necessarily
|
|
1253 with all the features available with Unix hosts. VMS, CMS, and MTS
|
|
1254 systems will all now work with EFS and Dired. It also works with a whole
|
|
1255 bunch of others, but documentation for that has not been written yet.
|
|
1256 This section was taken straight from the ange-ftp manual, and is
|
|
1257 therefore in all likelihood out-of-date.
|
|
1258
|
|
1259 EFS should be able to automatically detect which type of host you
|
|
1260 are using (VMS, CMS or MTS), but if it is unable to do so you can fix
|
|
1261 the problem by setting the appropriate
|
|
1262 @code{efs-TYPE-host-regexp} variable (where @code{TYPE} is one of
|
|
1263 @samp{vms}, @samp{cms} or @samp{mts}) -- see below. If EFS is unable
|
|
1264 to automatically detect any VMS, CMS or MTS host, please report this as
|
|
1265 a bug: @xref{Bugs}.
|
|
1266
|
|
1267 In all cases the file-name conventions of the remote host are converted
|
|
1268 to a UNIX-ish format, and this is the format you should use to find
|
|
1269 files on such hosts.
|
|
1270
|
|
1271 @menu
|
|
1272 * VMS support:: Using EFS with VMS systems
|
|
1273 * CMS support:: Using EFS with CMS systems
|
|
1274 * MTS support:: Using EFS with MTS systems
|
|
1275 @end menu
|
|
1276
|
|
1277 @node VMS support, CMS support, Non-Unix Hosts, Non-Unix Hosts
|
|
1278 @comment node-name, next, previous, up
|
|
1279 @subsection VMS support
|
|
1280 @cindex VMS filenames
|
|
1281 VMS filenames are of the form @code{FILE.TYPE;##}, where both
|
|
1282 @code{FILE} and @code{TYPE} can be up to 39 characters long, and
|
|
1283 @code{##} is an integer version number between 1 and 32,767. Valid
|
|
1284 characters in filenames are @samp{A}-@samp{Z}, @samp{0}-@samp{9},
|
|
1285 @samp{_}, @samp{-} and @samp{$}, however @samp{$} cannot begin a
|
|
1286 filename and @samp{-} cannot be used as the first or last character.
|
|
1287
|
|
1288 Directories in VMS are converted to the standard UNIX @samp{/} notation.
|
|
1289 For example, the VMS filename
|
|
1290 @example
|
|
1291 PUB$:[ANONYMOUS.SDSCPUB.NEXT]README.TXT;1
|
|
1292 @end example
|
|
1293 would be entered as
|
|
1294 @noindent
|
|
1295 @example
|
|
1296 /PUB$$:/ANONYMOUS/SDSCPUB/NEXT/README.TXT;1
|
|
1297 @end example
|
|
1298 @noindent
|
|
1299 (The double @samp{$} is required to prevent Emacs from attempting to
|
|
1300 expand an environment variable.) Similarly, to anonymously FTP the file
|
|
1301 @file{[.CSV.POLICY]RULES.MEM;1} from @code{ymir.claremont.edu} you would
|
|
1302 type @kbd{C-x C-f
|
|
1303 /anonymous@@ymir.claremont.edu:CSV/POLICY/RULES.MEM;1}. You can always
|
|
1304 drop off the @samp{;##} part at the end of the filename to get the
|
|
1305 latest version.
|
|
1306
|
|
1307 Sandy Rutherford provides some tips for using VMS hosts:
|
|
1308 @itemize @bullet
|
|
1309 @item
|
|
1310 Although VMS is not case sensitive, EMACS running under UNIX is.
|
|
1311 Therefore, to access a VMS file, you must enter the filename with upper
|
|
1312 case letters.
|
|
1313
|
|
1314 @item
|
|
1315 To access the latest version of file under VMS, you use the filename
|
|
1316 without the @samp{;} and version number. You should always edit the
|
|
1317 latest version of a file. If you want to edit an earlier version, copy
|
|
1318 it to a new file first. This has nothing to do with EFS, but is
|
|
1319 simply good VMS operating practice. Therefore, to edit @file{FILE.TXT;3}
|
|
1320 (say 3 is latest version), do @kbd{C-x C-f
|
|
1321 /ymir.claremont.edu:FILE.TXT}. If you inadvertently do
|
|
1322 @example
|
|
1323 @kbd{C-x C-f /ymir.claremont.edu:FILE.TXT;3}
|
|
1324 @end example
|
|
1325 @noindent
|
|
1326 you will find that VMS will not allow
|
|
1327 you to save the file because it will refuse to overwrite
|
|
1328 @file{FILE.TXT;3}, but instead will want to create @file{FILE.TXT;4},
|
|
1329 and attach the buffer to this file. To get out of this situation,
|
|
1330 @kbd{M-x write-file /ymir.claremont.edu:FILE.TXT} will attach the buffer
|
|
1331 to latest version of the file. For this reason, in Dired @kbd{f}
|
|
1332 (@code{dired-find-file}),
|
|
1333 @findex dired-find-file
|
|
1334 always loads the file sans version, whereas @kbd{v},
|
|
1335 (@code{dired-view-file}),
|
|
1336 @findex dired-view-file
|
|
1337 always loads the explicit version number. The
|
|
1338 reasoning being that it reasonable to view old versions of a file, but
|
|
1339 not to edit them.
|
|
1340
|
|
1341 @item
|
|
1342 VMS filenames often contain @samp{$} characters: make sure you always
|
|
1343 quote these as @samp{$$} and watch out for the Emacs bug which fails to
|
|
1344 quote @samp{$}'s when defaults are presented in the minibuffer: see
|
|
1345 @xref{Bugs}.
|
|
1346 @end itemize
|
|
1347
|
|
1348 EFS should automatically detect that you are using a VMS host. If
|
|
1349 it fails to do so (which should be reported as a bug) you can use the
|
|
1350 command @code{efs-add-vms-host}
|
|
1351 @findex efs-add-vms-host
|
|
1352 to inform EFS manually. For a more permanent effect, or
|
|
1353 if you use a VMS host regularly, it's a good idea to set
|
|
1354 @code{efs-vms-host-regexp} to a regular expression matching that
|
|
1355 @vindex efs-vms-host-regexp
|
|
1356 host's name. For instance, if use use @code{ymir.claremont.edu} a lot,
|
|
1357 place the following in your .emacs:
|
|
1358 @example
|
|
1359 (setq efs-vms-host-regexp "^ymir.claremont.edu$")
|
|
1360 @end example
|
|
1361
|
|
1362 @node CMS support, MTS support, VMS support, Non-Unix Hosts
|
|
1363 @comment node-name, next, previous, up
|
|
1364 @subsection CMS support
|
|
1365 EFS has full support, including Dired support, for hosts
|
|
1366 running CMS.
|
|
1367
|
|
1368 @cindex CMS filenames
|
|
1369 CMS filenames are entered in a UNIX-y way. Minidisks are
|
|
1370 treated as UNIX directories; for example to access the file @file{READ.ME} in
|
|
1371 minidisk @file{*.311} on @file{cuvmb.cc.columbia.edu}, you would enter
|
|
1372 @example
|
|
1373 /anonymous@@cuvmb.cc.columbia.edu:/*.311/READ.ME
|
|
1374 @end example
|
|
1375 If @file{*.301} is the default minidisk for this account, you could access
|
|
1376 @file{FOO.BAR} on this minidisk as
|
|
1377 @example
|
|
1378 /anonymous@@cuvmb.cc.columbia.edu:FOO.BAR
|
|
1379 @end example
|
|
1380 CMS filenames are of the form @file{FILE.TYPE}, where both @file{FILE}
|
|
1381 and @file{TYPE} can be up to 8 characters. Again, beware that CMS
|
|
1382 filenames are always upper case, and hence must be entered as such.
|
|
1383
|
|
1384 Sandy Rutherford provides some tips on using CMS hosts:
|
|
1385 @itemize @bullet
|
|
1386 @item
|
|
1387 CMS machines, with the exception of anonymous accounts, nearly always
|
|
1388 need an account password. To have EFS send an account password,
|
|
1389 you can either include it in your @file{.netrc} (@xref{Using a .netrc}), or use
|
|
1390 @code{efs-set-account}.
|
|
1391 @findex efs-set-account
|
|
1392
|
|
1393 @item
|
|
1394 EFS cannot send ``write passwords'' for a minidisk. Hopefully, we
|
|
1395 can fix this.
|
|
1396 @end itemize
|
|
1397
|
|
1398 EFS should automatically detect that you are using a CMS host. If
|
|
1399 it fails to do so (which should be reported as a bug) you can use the
|
|
1400 command @code{efs-add-cms-host}
|
|
1401 @findex efs-add-cms-host
|
|
1402 to inform EFS manually. For a more permanent effect, or
|
|
1403 if you use a CMS host regularly, it's a good idea to set
|
|
1404 @code{efs-cms-host-regexp} to a regular expression matching that
|
|
1405 @vindex efs-cms-host-regexp
|
|
1406 host's name.
|
|
1407
|
|
1408 @node MTS support, , CMS support, Non-Unix Hosts
|
|
1409 @comment node-name, next, previous, up
|
|
1410 @subsection MTS support
|
|
1411 EFS has full support, including Dired support, for hosts
|
|
1412 running the Michigan terminal system, and should be able to
|
|
1413 automatically recognise any MTS machine.
|
|
1414
|
|
1415 @cindex MTS filenames
|
|
1416 MTS filenames are entered in a UNIX-y way. For example, if your account
|
|
1417 was @file{YYYY}, the file @file{FILE} in the account @file{XXXX:} on
|
|
1418 @file{mtsg.ubc.ca} would be entered as
|
|
1419 @example
|
|
1420 /YYYY@@mtsg.ubc.ca:/XXXX:/FILE
|
|
1421 @end example
|
|
1422 In other words, MTS accounts are treated as UNIX directories. Of course,
|
|
1423 to access a file in another account, you must have access permission for
|
|
1424 it. If @file{FILE} were in your own account, then you could enter it in a
|
|
1425 relative path fashion as
|
|
1426 @example
|
|
1427 /YYYY@@mtsg.ubc.ca:FILE
|
|
1428 @end example
|
|
1429 MTS filenames can be up to 12 characters. Like UNIX, the structure of the
|
|
1430 filename does not contain a type (i.e. it can have as many @samp{.}'s as you
|
|
1431 like.) MTS filenames are always in upper case, and hence be sure to enter
|
|
1432 them as such! MTS is not case sensitive, but an EMACS running under UNIX
|
|
1433 is.
|
|
1434
|
|
1435 EFS should automatically detect that you are using an MTS host. If
|
|
1436 it fails to do so (which should be reported as a bug) you can use the
|
|
1437 command @code{efs-add-mts-host}
|
|
1438 @findex efs-add-mts-host
|
|
1439 to inform EFS manually. For a more permanent effect, or
|
|
1440 if you use an MTS host regularly, it's a good idea to set
|
|
1441 @code{efs-mts-host-regexp} to a regular expression matching that
|
|
1442 @vindex efs-mts-host-regexp
|
|
1443 host's name.
|
|
1444
|
|
1445 @node Completion, Accessing the FTP process, Non-Unix Hosts, Using EFS
|
|
1446 @comment node-name, next, previous, up
|
|
1447 @section File- and host-name completion
|
|
1448
|
|
1449 Full filename completion is supported on all remote UNIX hosts and some
|
|
1450 non-Unix hosts. Hostnames also have completion if they are mentioned in
|
|
1451 the @file{.netrc} and no username is specified. However using the
|
|
1452 filename completion feature can be a bit of a two edged sword.
|
|
1453
|
|
1454 To understand why, we need to discuss how EFS works. Whenever
|
|
1455 EFS is asked to find a remote file (or directory) an @code{ls}
|
|
1456 command is sent to the FTP process to list all the files in the
|
|
1457 directory. This list is maintained in an internal cache, to provide
|
|
1458 filename completion for later requests on that directory. EFS keeps
|
|
1459 this cache up-to-date by monitoring Emacs commands which affect files
|
|
1460 and directories, but if a process outside Emacs (such as another user)
|
|
1461 changes a directory (e.g. a new file is added)
|
|
1462 completion won't work on
|
|
1463 that file since EFS doesn't know about it yet. The solution if to
|
|
1464 force EFS to reread the directory and update it's cache, and the
|
|
1465 easiest way to do that is with Dired --- @xref{Using Dired} to see how.
|
|
1466
|
|
1467 Another problem is that the @code{ls} command can take a long time,
|
|
1468 especially when dealing with distant hosts over slow links. So if you're
|
|
1469 after a file in the @file{pub/images} directory but nothing else, it's a
|
|
1470 better idea to type @kbd{pub/images/file @key{TAB}} than @kbd{pub/im @key{TAB}}
|
|
1471 which will force a read of the @file{pub} directory (since
|
|
1472 EFS needs to know how to complete @code{im}). A little extra typing
|
|
1473 can often save a lot of waiting. Don't be afraid to use the @key{TAB}
|
|
1474 key once the directory is cached, though.
|
|
1475
|
|
1476 @node Accessing the FTP process, , Completion, Using EFS
|
|
1477 @comment node-name, next, previous, up
|
|
1478 @section Accessing the FTP process buffer
|
|
1479
|
|
1480 The FTP process used to access the remote files is available for access
|
|
1481 if you wish. It will be in a buffer
|
|
1482 @cindex process buffers
|
|
1483 @cindex buffers
|
|
1484 called @samp{"*ftp @var{remote-file-name}*"},
|
|
1485 i.e. if you found the file
|
|
1486 @example
|
|
1487 /anonymous@@archive.site.com:pub/README
|
|
1488 @end example
|
|
1489 @noindent
|
|
1490 there will be a buffer
|
|
1491 @example
|
|
1492 *ftp anonymous@@archive.site.com*
|
|
1493 @end example
|
|
1494 @noindent
|
|
1495 where all the transfers are taking place. You can have a look at the
|
|
1496 buffer using @kbd{C-x b} as usual, and even type in commands to the FTP
|
|
1497 process under an interface very much like @samp{shell-mode}. There are
|
|
1498 two instances when doing this can be very useful: one is accessing
|
|
1499 non-UNIX hosts, where Dired and filename completion may not work (if EFS
|
|
1500 even works at all). If you are going to use @code{mget} or @code{mput},
|
|
1501 make sure you type @code{glob} first: EFS turns globbing off by
|
|
1502 default. Don't be afraid of changing directories, either --- EFS always
|
|
1503 uses absolute pathnames when communicating with the FTP process.
|
|
1504
|
|
1505 You can kill the FTP process at any time simply by killing this buffer.
|
|
1506 @cindex FTP processes
|
|
1507 @cindex processes
|
|
1508 You can also call @code{efs-kill-ftp-process}.
|
|
1509 @findex efs-kill-ftp-process
|
|
1510 This won't cause EFS any grief whatsoever --- if you later make
|
|
1511 another request to that host, EFS will simply fire up another
|
|
1512 process and create a new buffer to hold it.
|
|
1513
|
|
1514 @node Getting help, Bugs, Using EFS, Top
|
|
1515 @comment node-name, next, previous, up
|
|
1516 @chapter Getting help
|
|
1517
|
|
1518 EFS has its own mailing list called @t{efs-help}. All users of EFS
|
|
1519 are welcome to subscribe (see below) and to discuss aspects of
|
|
1520 EFS.
|
|
1521
|
|
1522 To [un]subscribe to @t{efs-help}, or to report mailer problems with the
|
|
1523 list, please mail one of the following addresses:
|
|
1524
|
|
1525 @example
|
|
1526 efs-help-request@@cuckoo.hpl.hp.com
|
|
1527 @end example
|
|
1528 or
|
|
1529 @example
|
|
1530 efs-help-request%cuckoo.hpl.hp.com@@hplb.hpl.hp.com
|
|
1531 @end example
|
|
1532
|
|
1533 Please don't forget the @t{-request} part.
|
|
1534
|
|
1535 For mail to be posted directly to @t{efs-help}, send to one of the
|
|
1536 following addresses:
|
|
1537
|
|
1538 @example
|
|
1539 efs-help@@cuckoo.hpl.hp.com
|
|
1540 @end example
|
|
1541 or
|
|
1542 @example
|
|
1543 efs-help%cuckoo.hpl.hp.com@@hplb.hpl.hp.com
|
|
1544 @end example
|
|
1545
|
|
1546 Alternatively, there is a mailing list that only gets
|
|
1547 announcements of new EFS releases. This is called @t{efs-announce},
|
|
1548 and can be subscribed to by e-mailing to the @t{-request} address as
|
|
1549 above. Please make it clear in the request which mailing list you
|
|
1550 wish to join.
|
|
1551
|
|
1552 Mailing list archives are also accessible from this web page:
|
|
1553
|
|
1554 @example
|
|
1555 http://www-uk.hpl.hp.com/people/ange/efs
|
|
1556 @end example
|
|
1557
|
|
1558
|
|
1559 @node Bugs, Concept Index, Getting help, Top
|
|
1560 @comment node-name, next, previous, up
|
|
1561 @chapter Bugs and Wish List
|
|
1562
|
|
1563
|
|
1564 If you find any bugs or problems with this package, @strong{please}
|
|
1565 e-mail the authors. Ideas and constructive comments are especially
|
|
1566 welcome. So are any enhancements to EFS, preferably debugged and
|
|
1567 documented. Also welcome are any typo fixes, corrections or additions to
|
|
1568 this manual.
|
|
1569
|
|
1570 Here is a list of known bugs:
|
|
1571
|
|
1572 If you hit a bug in this list, please report it anyway. Most of
|
|
1573 the bugs here remain unfixed because they are considered too
|
|
1574 esoteric to be a high priority. If one of them gets reported
|
|
1575 enough, we will likely change our view on that.
|
|
1576
|
|
1577 @enumerate
|
|
1578 @item
|
|
1579 EFS does not check to make sure that when creating a new file,
|
|
1580 you provide a valid filename for the remote operating system.
|
|
1581 If you do not, then the remote FTP server will most likely
|
|
1582 translate your filename in some way. This may cause EFS to
|
|
1583 get confused about what exactly is the name of the file.
|
|
1584
|
|
1585 @item
|
|
1586 For CMS support, we send too many @code{cd}'s. Since @code{cd}'s are
|
|
1587 cheap, I haven't worried about this too much. Eventually, we should have
|
|
1588 some caching of the current minidisk. This is complicated by the fact
|
|
1589 that some CMS servers lie about the current minidisk, so sending
|
|
1590 redundant cd's helps us recover in this case.
|
|
1591
|
|
1592 @item
|
|
1593 The code to do compression of files over ftp is not as careful as it
|
|
1594 should be. It deletes the old remote version of the file, before
|
|
1595 actually checking if the local to remote transfer of the compressed file
|
|
1596 succeeds. Of course to delete the original version of the file after
|
|
1597 transferring the compressed version back is also dangerous, because some
|
|
1598 OS's have severe restrictions on the length of filenames, and when the
|
|
1599 compressed version is copied back the @code{"-Z"} or @code{".Z"} may be
|
|
1600 truncated. Then, EFS would delete the only remaining version of the
|
|
1601 file. Maybe EFS should make backups when it compresses files (of
|
|
1602 course, the backup @code{"~"} could also be truncated off, sigh...).
|
|
1603 Suggestions?
|
|
1604
|
|
1605 @item
|
|
1606 If a dir listing is attempted for an empty directory on (at least
|
|
1607 some) VMS hosts, an ftp error is given. This is really an ftp bug, and
|
|
1608 I don't know how to get EFS work to around it.
|
|
1609
|
|
1610 @item
|
|
1611 EFS gets confused by directories containing file names with embedded
|
|
1612 newlines. A temporary solution is to add @code{"q"} to your dired
|
|
1613 listing switches. As long as your dired listing switches also contain
|
|
1614 @code{"l"} and either @code{"a"} or @code{"A"}, EFS will use these
|
|
1615 switches to get listings for its internal cache. The "q" switch should
|
|
1616 force listings to be exactly one file per line. You still will not be
|
|
1617 able to access a file with embedded newlines, but at least it won't mess
|
|
1618 up the parsing of the rest of the files.
|
|
1619
|
|
1620 @item
|
|
1621 EFS cannot parse symlinks which have an embedded @code{" -> "} in their
|
|
1622 name. It's alright to have an embedded @code{" -> "} in the name of any
|
|
1623 other type of file. A fix is possible, but probably not worth the
|
|
1624 trouble. If you disagree, send us a bug report.
|
|
1625
|
|
1626 @item
|
|
1627 EFS doesn't handle context-dep. files in H-switch listings on
|
|
1628 HP's. It wouldn't be such a big roaring deal to fix this. I'm
|
|
1629 waiting until I get an actual bug report though.
|
|
1630
|
|
1631 @item
|
|
1632 If a hard link is added or deleted, EFS will not update its
|
|
1633 internal cache of the link count for other names of the file.
|
|
1634 This may cause file-nlinks to return incorrectly. Reverting
|
|
1635 any dired buffer containing other names for the file will
|
|
1636 cause the file data to be updated, including the link counts.
|
|
1637 A fix for this problem is known and will be eventually
|
|
1638 implemented. How it is implemented will depend on how we decide
|
|
1639 to handle inodes. See below.
|
|
1640
|
|
1641 @item
|
|
1642 EFS is unable to parse R-switch listings from remote Unix hosts.
|
|
1643 This is inefficient, because EFS will insist on doing individual
|
|
1644 listings of the subdirectories to get its file information.
|
|
1645 This may be fixed if there is enough demand.
|
|
1646
|
|
1647 @item
|
|
1648 In file-attributes, EFS returns a fake inode number. Of course
|
|
1649 this is necessary, but this inode number is not even necessarily
|
|
1650 unique. It is simply the sum of the characters (treated as
|
|
1651 integers) in the host name, user name, and file name. Possible
|
|
1652 ways to get a unique inode number are:
|
|
1653
|
|
1654 @enumerate
|
|
1655 @item
|
|
1656 Simply keep a count of all remote file in the cache, and
|
|
1657 return the file's position in this count as a negative number.
|
|
1658 @item
|
|
1659 For unix systems, we could actually get at the real inode number on the
|
|
1660 remote host, by adding an @code{"i"} to the ls switches. The inode
|
|
1661 numbers would then be removed from the listing returned by @code{efs-ls}, if
|
|
1662 the caller hadn't requested the @code{"i"} switch. We could then make a
|
|
1663 unique number out of the host name and the real inode number.
|
|
1664 @end enumerate
|
|
1665
|
|
1666 @item
|
|
1667 EFS tries to determine if a file is readable or writable by comparing
|
|
1668 the file modes, file owner, and user name under which it is logged
|
|
1669 into the remote host. This does not take into account groups.
|
|
1670 We simply assume that the user belongs to all groups. As a result
|
|
1671 we may assume that a file is writable, when in fact it is not.
|
|
1672 Groups are tough to handle correctly over FTP. Suggestions?
|
|
1673 (For new FTP servers, can do a @code{"QUOTE SITE EXEC groups"} to
|
|
1674 handle this.)
|
|
1675 @end enumerate
|
|
1676
|
|
1677
|
|
1678 @node Concept Index, Variable and function index, Bugs, Top
|
|
1679 @comment node-name, next, previous, up
|
|
1680 @unnumbered Concept Index
|
|
1681
|
|
1682 @printindex cp
|
|
1683
|
|
1684 @node Variable and function index, , Concept Index, Top
|
|
1685 @unnumbered Variable and function index
|
|
1686
|
|
1687 @printindex vr
|
|
1688
|
|
1689 @contents
|
|
1690
|
|
1691 @bye
|
|
1692
|