Commit 5ec2cc41 authored by Kai Großjohann's avatar Kai Großjohann
Browse files

Tramp: sync with upstream version 2.0.39.

parent cc86f83f
2004-02-29 Kai Grossjohann <kai.grossjohann@gmx.net>
Version 2.0.39 of Tramp released.
* net/tramp.el (tramp-handle-file-local-copy)
(tramp-handle-write-region, tramp-open-connection-rsh): Variable
name typo. Small change. From Patrick Tullmann
<tullmann@flux.utah.edu>.
(tramp-process-connection-type): New variable.
(tramp-maybe-open-connection): Use it.
(tramp-do-copy-or-rename-via-buffer): Handle KEEP-DATE arg, if
possible.
(tramp-touch): Set last-modified time of a remote file.
(tramp-handle-write-region): Say which function is used when
encoding.
2004-02-29 Michael Albinus <Michael.Albinus@alcatel.de>
* net/tramp-smb.el (tramp-smb-handle-file-writable-p): Handle the
case of non-existing filename, too. Reported by Christoph Bauer
<c_bauer@informatik.uni-kl.de>.
(tramp-smb-get-file-entries): The directory in question should
have permissions "drwxrwxrwx". Just virtual, because we don't
know the real permissions. Don't we know?
(tramp-smb-prompt): Add virtual prompt from listing shares, too.
(tramp-smb-errors): Add "NT_STATUS_ACCOUNT_LOCKED_OUT".
(tramp-smb-wait-for-output): Optimize algorithm getting pending
output. If it was received chunkwise, there have been problems.
Remove the "prompt not found" error message; it is obvious.
Simplify algorithm.
(tramp-smb-process-running): Removed. Since we acknowledge the
virtual prompt for shares, there's no need for distinction of
reading shares (process ends afterwards) and interactive mode of
smblient.
(tramp-smb-open-connection): Setting process sentinel removed.
(tramp-smb-errors): Add "NT_STATUS_WRONG_PASSWORD" and
"NT_STATUS_NETWORK_ACCESS_DENIED".
(tramp-smb-maybe-open-connection): Set `process-connection-type'
to 'pty. Suggested by Piet van Oostrum <piet@cs.uu.nl>.
(top-level): Setting default value in `tramp-default-method-alist'
corrected. Order of USER and HOST have been wrong. Nobody
claimed for months ...
(tramp-smb-maybe-open-connection): Use
`tramp-process-connection-type'.
(tramp-smb-open-connection): Clear password cache if login has
failed.
* net/tramp.el (tramp-completion-mode) Don't check for 'xemacs but
`tramp-unified-filenames'.
(tramp-completion-mode): Make test for XEmacs explicitely.
`event-to-character' can exists in Emacs packages too. Reported
by Matt Swift <swift@alum.mit.edu>.
(tramp-buffer-name): Buffer name must contain the user if exists.
Reported by Adrian Phillips <a.phillips@met.no>.
(tramp-do-copy-or-rename-file): Handle out-of-band methods. Call
`tramp-do-copy-or-rename-file-out-of-band' this case.
(tramp-do-copy-or-rename-file-out-of-band): Renamed from
`tramp-do-copy-or-rename-file-one-local', because it handles also
the case both files use the same out-of-band method.
Implementation added.
(tramp-handle-file-local-copy, tramp-handle-write-region):
Out-of-band handling removed. `copy-file' called instead, which
calls `tramp-do-copy-or-rename-file-out-of-band'.
(tramp-action-password): Check for out-of-band method removed.
This function is used for 'login-program.
(tramp-post-connection): Use `tramp-method-out-of-band-p' when
appropriate.
(tramp-completion-function-alist-ssh): Add `tramp-parse-shostkeys'
and `tramp-parse-sknownhosts'.
(tramp-completion-function-alist): It's a defvar now, because we
want to apply the optimized `tramp-set-completion-function'
instead of a static list.
(tramp-set-completion-function): Implementation tuned. Avoid
double entries, and entries where the function or the
file/directory doesn't exist.
(tramp-parse-shostkeys, tramp-parse-sknownhosts): New functions
for SSH2.
(tramp-file-name-handler-alist): Add `dired-compress-file' entry.
(tramp-handle-dired-compress-file): New function.
(tramp-async-proc): New variable.
(tramp-handle-shell-command): Adding asynchronous processes. They
are far from being perfect, but it works at least for
`find-grep-dired' and `find-name-dired' in Emacs 21.4.
(top-level): Require password.el if visible. Should be mandatory
once No Gnus has found its way into (X)Emacs.
(tramp-read-passwd): Invoke `password-read' if available,
`read-passwd' otherwise. `ange-ftp-read-passwd' isn't used as
fallback any longer.
(tramp-clear-passwd): New function.
(tramp-process-actions, tramp-process-multi-actions): Clear
password cache if login has failed.
* net/tramp-ftp.el (Commentary): Remove pointer to EFS. It has
its own module.
(tramp-ftp-file-name-handler): Unset `ange-ftp-ftp-name-arg' and
`ange-ftp-ftp-name-res'. There could be incorrect values from
previous calls in case the "ftp" method is used in the Tramp file
name. Reported by Katsumi Yamaoka <yamaoka@jpl.org>.
2004-02-28 Richard M. Stallman <rms@gnu.org>
* term.el (term-mouse-paste): Call mouse-set-point.
......
;;; tramp-ftp.el --- Tramp convenience functions for Ange-FTP and EFS -*- coding: iso-8859-1; -*-
;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
;; Author: Michael Albinus <Michael.Albinus@alcatel.de>
;; Keywords: comm, processes
......@@ -24,8 +24,8 @@
;;; Commentary:
;; Convenience functions for calling Ange-FTP (and maybe EFS, later on)
;; from Tramp. Most of them are displaced from tramp.el.
;; Convenience functions for calling Ange-FTP from Tramp.
;; Most of them are displaced from tramp.el.
;;; Code:
......@@ -98,9 +98,16 @@ pass to the OPERATION."
(list (nth 0 tramp-file-name-structure)
(nth 3 tramp-file-name-structure)
(nth 2 tramp-file-name-structure)
(nth 4 tramp-file-name-structure))))
(nth 4 tramp-file-name-structure)))
;; ange-ftp uses `ange-ftp-ftp-name-arg' and `ange-ftp-ftp-name-res'
;; for optimization in `ange-ftp-ftp-name'. If Tramp wasn't active,
;; there could be incorrect values from previous calls in case the
;; "ftp" method is used in the Tramp file name. So we unset
;; those values.
(ange-ftp-ftp-name-arg "")
(ange-ftp-ftp-name-res nil))
(cond
;; If argument is a symlink, 'file-directory-p` and 'file-exists-p`
;; If argument is a symlink, `file-directory-p' and `file-exists-p'
;; call the traversed file recursively. So we cannot disable the
;; file-name-handler this case.
((memq operation '(file-directory-p file-exists-p))
......
;;; tramp-smb.el --- Tramp access functions for SMB servers -*- coding: iso-8859-1; -*-
;; Copyright (C) 2002, 2003 Free Software Foundation, Inc.
;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
;; Author: Michael Albinus <Michael.Albinus@alcatel.de>
;; Keywords: comm, processes
......@@ -50,7 +50,7 @@
;; Add a default for `tramp-default-method-alist'. Rule: If there is
;; a domain in USER, it must be the SMB method.
(add-to-list 'tramp-default-method-alist
(list "%" "" tramp-smb-method))
(list "" "%" tramp-smb-method))
;; Add completion function for SMB method.
(tramp-set-completion-function
......@@ -62,7 +62,7 @@
:group 'tramp
:type 'string)
(defconst tramp-smb-prompt "^smb: \\S-+> "
(defconst tramp-smb-prompt "^smb: \\S-+> \\|^\\s-+Server\\s-+Comment$"
"Regexp used as prompt in smbclient.")
(defconst tramp-smb-errors
......@@ -71,8 +71,8 @@
'(; Connection error
"Connection to \\S-+ failed"
; Samba
"ERRSRV"
"ERRDOS"
"ERRSRV"
"ERRbadfile"
"ERRbadpw"
"ERRfilexists"
......@@ -81,13 +81,16 @@
"ERRnosuchshare"
; Windows NT 4.0, Windows 5.0 (Windows 2000), Windows 5.1 (Windows XP)
"NT_STATUS_ACCESS_DENIED"
"NT_STATUS_ACCOUNT_LOCKED_OUT"
"NT_STATUS_BAD_NETWORK_NAME"
"NT_STATUS_CANNOT_DELETE"
"NT_STATUS_LOGON_FAILURE"
"NT_STATUS_NETWORK_ACCESS_DENIED"
"NT_STATUS_NO_SUCH_FILE"
"NT_STATUS_OBJECT_NAME_INVALID"
"NT_STATUS_OBJECT_NAME_NOT_FOUND"
"NT_STATUS_SHARING_VIOLATION")
"NT_STATUS_SHARING_VIOLATION"
"NT_STATUS_WRONG_PASSWORD")
"\\|")
"Regexp for possible error strings of SMB servers.
Used instead of analyzing error codes of commands.")
......@@ -102,12 +105,6 @@ This variable is local to each buffer.")
This variable is local to each buffer.")
(make-variable-buffer-local 'tramp-smb-share-cache)
(defvar tramp-smb-process-running nil
"Flag whether a corresponding process is still running.
Will be changed by corresponding `process-sentinel'.
This variable is local to each buffer.")
(make-variable-buffer-local 'tramp-smb-process-running)
(defvar tramp-smb-inodes nil
"Keeps virtual inodes numbers for SMB files.")
......@@ -452,19 +449,23 @@ KEEP-DATE is not handled in case NEWNAME resides on an SMB server."
(defun tramp-smb-handle-file-writable-p (filename)
"Like `file-writable-p' for tramp files."
; (with-parsed-tramp-file-name filename nil
(let (user host localname)
(with-parsed-tramp-file-name filename l
(setq user l-user host l-host localname l-localname))
(save-excursion
(let* ((share (tramp-smb-get-share localname))
(file (tramp-smb-get-localname localname nil))
(entries (tramp-smb-get-file-entries user host share file))
(entry (and entries
(assoc (file-name-nondirectory file) entries))))
(and entry
(string-match "w" (nth 1 entry))
t)))))
(if (not (file-exists-p filename))
(let ((dir (file-name-directory filename)))
(and (file-exists-p dir)
(file-writable-p dir)))
; (with-parsed-tramp-file-name filename nil
(let (user host localname)
(with-parsed-tramp-file-name filename l
(setq user l-user host l-host localname l-localname))
(save-excursion
(let* ((share (tramp-smb-get-share localname))
(file (tramp-smb-get-localname localname nil))
(entries (tramp-smb-get-file-entries user host share file))
(entry (and entries
(assoc (file-name-nondirectory file) entries))))
(and share entry
(string-match "w" (nth 1 entry))
t))))))
(defun tramp-smb-handle-insert-directory
(filename switches &optional wildcard full-directory-p)
......@@ -733,9 +734,12 @@ Result is a list of (LOCALNAME MODE SIZE MONTH DAY TIME YEAR)."
;; Cache share entries
(setq tramp-smb-share-cache res)))
;; Add directory itself
(add-to-list 'res '("" "dr-xr-xr-x" 0 (0 0)))
(add-to-list 'res '("" "drwxrwxrwx" 0 (0 0)))
;; There's a very strange error (debugged with XEmacs 21.4.14)
;; If there's no short delay, it returns nil. No idea about
(when (featurep 'xemacs) (sleep-for 0.01))
;; Check for matching entries
(delq nil (mapcar
......@@ -913,7 +917,8 @@ there has been an error message from smbclient."
"Maybe open a connection to HOST, logging in as USER, using `tramp-smb-program'.
Does not do anything if a connection is already open, but re-opens the
connection if a previous connection has died for some reason."
(let ((p (get-buffer-process
(let ((process-connection-type tramp-process-connection-type)
(p (get-buffer-process
(tramp-get-buffer nil tramp-smb-method user host))))
(save-excursion
(set-buffer (tramp-get-buffer nil tramp-smb-method user host))
......@@ -987,11 +992,7 @@ Domain names in USER and port numbers in HOST are acknowledged."
(tramp-message 9 "Started process %s" (process-command p))
(process-kill-without-query p)
(set-buffer buffer)
(set-process-sentinel
p (lambda (proc str) (setq tramp-smb-process-running nil)))
; If no share is given, the process will terminate
(setq tramp-smb-process-running share
tramp-smb-share share)
(setq tramp-smb-share share)
; send password
(when real-user
......@@ -1000,54 +1001,44 @@ Domain names in USER and port numbers in HOST are acknowledged."
(tramp-enter-password p pw-prompt)))
(unless (tramp-smb-wait-for-output user host)
(tramp-clear-passwd user host)
(error "Cannot open connection //%s@%s/%s"
user host (or share "")))))))
;; We don't use timeouts. If needed, the caller shall wrap around.
(defun tramp-smb-wait-for-output (user host)
"Wait for output from smbclient command.
Sets position to begin of buffer.
Returns nil if an error message has appeared."
(save-excursion
(let ((proc (get-buffer-process (current-buffer)))
(found (progn (goto-char (point-max))
(beginning-of-line)
(looking-at tramp-smb-prompt)))
err)
(save-match-data
;; Algorithm: get waiting output. See if last line contains
;; tramp-smb-prompt sentinel, or process has exited.
;; If not, wait a bit and again get waiting output.
(while (and (not found) tramp-smb-process-running)
(accept-process-output proc)
(goto-char (point-max))
(beginning-of-line)
(setq found (looking-at tramp-smb-prompt)))
;; There might be pending output. If tramp-smb-prompt sentinel
;; hasn't been found, the process has died already. We should
;; give it a chance.
(when (not found) (accept-process-output nil 1))
;; Search for errors.
(goto-char (point-min))
(setq err (re-search-forward tramp-smb-errors nil t)))
;; Add output to debug buffer if appropriate.
(when tramp-debug-buffer
(append-to-buffer
(tramp-get-debug-buffer nil tramp-smb-method user host)
(point-min) (point-max))
(when (and (not found) tramp-smb-process-running)
(save-excursion
(set-buffer
(tramp-get-debug-buffer nil tramp-smb-method user host))
(goto-char (point-max))
(insert (format "[[Remote prompt `%s' not found]]\n"
tramp-smb-prompt)))))
(let ((proc (get-buffer-process (current-buffer)))
(found (progn (goto-char (point-min))
(re-search-forward tramp-smb-prompt nil t)))
(err (progn (goto-char (point-min))
(re-search-forward tramp-smb-errors nil t))))
;; Algorithm: get waiting output. See if last line contains
;; tramp-smb-prompt sentinel or tramp-smb-errors strings.
;; If not, wait a bit and again get waiting output.
(while (and (not found) (not err))
;; Accept pending output.
(accept-process-output proc)
;; Search for prompt.
(goto-char (point-min))
;; Return value is whether no error message has appeared.
(not err))))
(setq found (re-search-forward tramp-smb-prompt nil t))
;; Search for errors.
(goto-char (point-min))
(setq err (re-search-forward tramp-smb-errors nil t)))
;; Add output to debug buffer if appropriate.
(when tramp-debug-buffer
(append-to-buffer
(tramp-get-debug-buffer nil tramp-smb-method user host)
(point-min) (point-max)))
;; Return value is whether no error message has appeared.
(not err)))
;; Snarfed code from time-date.el and parse-time.el
......@@ -1125,8 +1116,6 @@ Return the difference in the format of a time value."
;; * Provide a local smb.conf. The default one might not be readable.
;; * Error handling in case password is wrong.
;; * Read password from "~/.netrc".
;; * Use different buffers for different shares. By this, the password
;; won't be requested again when changing shares on the same host.
;; * Return more comprehensive file permission string. Think whether it is
;; possible to implement `set-file-modes'.
;; * Handle WILDCARD and FULL-DIRECTORY-P in
......
This diff is collapsed.
......@@ -30,7 +30,7 @@
;; are auto-frobbed from configure.ac, so you should edit that file and run
;; "autoconf && ./configure" to change them.
(defconst tramp-version "2.0.38"
(defconst tramp-version "2.0.39"
"This version of Tramp.")
(defconst tramp-bug-report-address "tramp-devel@mail.freesoftware.fsf.org"
......
2004-02-29 Kai Grossjohann <kgrossjo@eu.uu.net>
Tramp version 2.0.39 released.
2004-02-29 Michael Albinus <Michael.Albinus@alcatel.de>
* tramp.texi (Customizing Completion): Explain new functions
`tramp-parse-shostkeys' and `tramp-parse-sknownhosts'.
(all): Savannah URLs unified to "http://savannah.nongnu.org".
(Top): Refer to Savannah mailing list as the major one. Mention
older mailing lists in HTML mode only.
(Auto-save and Backup): Add auto-save. Based on wording of Kai.
(Frequently Asked Questions): Remote hosts must not be Unix-like
for "smb" method.
(Password caching): New node.
(External transfer methods): Refer to password caching for "smb"
method.
2004-02-23 Nick Roberts <nick@nick.uklinux.net>
* building.texi (Watch Expressions): Update.
......
This diff is collapsed.
......@@ -5,7 +5,7 @@
@c configure.ac, so you should edit that file and run
@c "autoconf && ./configure" to change the version number.
@macro trampver{}
2.0.38
2.0.39
@end macro
@c Other flags from configuration
......@@ -60,6 +60,3 @@
@c Otherwise, '/dev/null/' is taken, which leaves this part empty.
@ignore
arch-tag: e0fe322c-e06b-46eb-bb5b-d091b521f41c
@end ignore
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment