From 7c58cca134f827ca57d16d4126dc0247248b43bb Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Fri, 18 Oct 2019 19:44:49 +0200 Subject: [PATCH] Support old Samba versions in Tramp * doc/misc/tramp.texi (Relevant connection properties to override): New subsection. * lisp/net/tramp-smb.el (tramp-smb-get-cifs-capabilities): Check "posix" connection property. * lisp/net/tramp.el (with-tramp-progress-reporter): Fix docstring. --- doc/misc/tramp.texi | 106 ++++++++++++++++++++++++++++-------------- lisp/net/tramp-smb.el | 9 +++- lisp/net/tramp.el | 2 +- 3 files changed, 79 insertions(+), 38 deletions(-) diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi index f34484ba711..0252620eb71 100644 --- a/doc/misc/tramp.texi +++ b/doc/misc/tramp.texi @@ -1170,8 +1170,8 @@ of the configured system storage. Optional flags to the different @option{rclone} operations could be passed as connection property, @xref{Predefined connection -information}. Supported properties are @samp{mount-args}, -@samp{copyto-args} and @samp{moveto-args}. +information}. Supported properties are @t{"mount-args"}, +@t{"copyto-args"} and @t{"moveto-args"}. Access via @option{rclone} is slow. If you have an alternative method for accessing the system storage, you shall prefer this. @@ -1954,7 +1954,7 @@ property's value. @var{property} is any method specific parameter contained in @code{tramp-methods}. The parameter key in @code{tramp-methods} is a symbol name @code{tramp-}. To overwrite that property, use the -string @samp{} for @var{property}. For example, this changes the +string @t{""} for @var{property}. For example, this changes the remote shell: @lisp @@ -1975,37 +1975,73 @@ The parameters @code{tramp-remote-shell} and @code{tramp-remote-shell-login} in @code{tramp-methods} now have new values for the remote host. -A common use case is to override the session timeout of a connection, -that is the time (in seconds) after a connection is disabled, and must -be reestablished. This can be set for any connection; for the -@option{sudo} and @option{doas} methods there exist predefined values. -A value of @code{nil} disables this feature. For example: +@var{property} could also be any property found in +@code{tramp-persistency-file-name}. -@lisp -@group -(add-to-list 'tramp-connection-properties - (list (regexp-quote "@trampfn{sudo,root@@system-name,}") - "session-timeout" 30)) -@end group -@end lisp -@noindent -@samp{system-name} stands here for the host returned by the function -@command{(system-name)}. +@subsection Relevant connection properties to override -@var{property} could also be any property found in -@code{tramp-persistency-file-name}. +Not all connection properties need to be changed. The most relevant +properties are listed here: -To get around how restricted shells randomly drop connections, set the -special property @samp{busybox}. For example: +@itemize +@item @t{"login-program"} -@lisp -@group -(add-to-list 'tramp-connection-properties - (list (regexp-quote "@trampfn{ssh,user@@randomhost.your.domain,}") - "busybox" t)) -@end group -@end lisp +The property @t{"login-program"} keeps the program to be called in +order to connect the remote host. Sometimes, the program might have +another name on your host, or it is located on another path. In this +case, you can overwrite the default value, which is special for every +connection method. It is used in all connection methods of +@file{tramp-sh.el}. + +@item @t{"login-args"} + +@t{"login-args"} specifies a list of lists of arguments to pass to +@t{"login-program"}. Read the docstring of @code{tramp-methods} how +to construct these lists. + +@item @t{"remote-shell"} + +This property tells Tramp which remote shell to apply on the remote +host. It is used in all connection methods of @file{tramp-sh.el}. +The default value is @t{"/bin/sh"}. + +@item @t{"remote-shell-login"} + +A property to be used in conjunction with @t{"remote-shell"}. It +specifies, which shell argument triggers a login shell. Its default +value is @t{"-l"}, but some shells, like @command{ksh}, prefer +@t{"-"}. + +@item @t{"session-timeout"} + +All @file{tramp-sh.el} based methods accept the property +@t{"session-timeout"}. This is the time (in seconds) after a +connection is disabled for security reasons, and must be +reestablished. A value of @code{nil} disables this feature. Most of +the methods do not set this property except the @option{sudo} and +@option{doas} methods, which use predefined values. + +@item @t{"posix"} + +Connections using the @option{smb} method check, whether the remote +host supports posix commands. If the remote host runs Samba, it +confirms this capability. However, some very old Samba versions have +errors in their implementation. In order to suppress the posix +commands for those hosts, the property @t{"posix"} shall be set to +@code{nil}. + +The default value of this property is @code{t} (not specified in +@code{tramp-methods}). If the remote host runs native MS Windows, +there is no effect of this property. + +@item @t{"mount-args"}@* +@t{"copyto-args"}@* +@t{"moveto-args"} + +These properties keep optional flags to the different @option{rclone} +operations. Their default value is @code{nil}. +@end itemize @node Remote programs @@ -2106,7 +2142,7 @@ be recomputed. To force @value{tramp} to recompute afresh, call Per default, @value{tramp} uses the command @command{/bin/sh} for starting a shell on the remote host. This can be changed by setting -the connection property @option{remote-shell}, see @xref{Predefined +the connection property @t{"remote-shell"}, see @xref{Predefined connection information}. If you want, for example, use @command{/usr/bin/zsh} on a remote host, you might apply @@ -2215,7 +2251,7 @@ prompts, for which @value{tramp} uses @code{tramp-wrong-passwd-regexp}. @value{tramp} uses the user option @code{tramp-terminal-type} to set the remote environment variable @env{TERM} for the shells it runs. -Per default, it is @samp{"dumb"}, but this could be changed. A dumb +Per default, it is @t{"dumb"}, but this could be changed. A dumb terminal is best suited to run the background sessions of @value{tramp}. However, running interactive remote shells might require a different setting. This could be achieved by tweaking the @@ -3782,10 +3818,10 @@ following line to @file{~/.zshrc}: [[ $TERM == "dumb" ]] && unsetopt zle && PS1='$ ' && return @end example -This uses the default value of @code{tramp-terminal-type}, -@samp{"dumb"}, as value of the @env{TERM} environment variable. If -you want to use another value for @env{TERM}, change -@code{tramp-terminal-type} and this line accordingly. +This uses the default value of @code{tramp-terminal-type}, @t{"dumb"}, +as value of the @env{TERM} environment variable. If you want to use +another value for @env{TERM}, change @code{tramp-terminal-type} and +this line accordingly. Alternatively, you could set the remote login shell explicitly. See @ref{Remote shell setup} for discussion of this technique, diff --git a/lisp/net/tramp-smb.el b/lisp/net/tramp-smb.el index b008e6b25eb..2a9cf6a6d75 100644 --- a/lisp/net/tramp-smb.el +++ b/lisp/net/tramp-smb.el @@ -1814,8 +1814,13 @@ Result is the list (LOCALNAME MODE SIZE MTIME)." (defun tramp-smb-get-cifs-capabilities (vec) "Check, whether the SMB server supports POSIX commands." - ;; When we are not logged in yet, we return nil. - (if (process-live-p (tramp-get-connection-process vec)) + ;; When we are not logged in yet, we return nil. The + ;; connection-local property "posix" is not set explicitly; it is + ;; just checked in order to let a user configure it to nil on hosts + ;; which return cifs properties, but lack a proper implementation. + ;; Very old Samba implementations, for example. + (if (and (process-live-p (tramp-get-connection-process vec)) + (tramp-get-connection-property vec "posix" t)) (with-tramp-connection-property (tramp-get-connection-process vec) "cifs-capabilities" (save-match-data diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el index 84a6febf240..6ff313e8fb3 100644 --- a/lisp/net/tramp.el +++ b/lisp/net/tramp.el @@ -1922,7 +1922,7 @@ If VAR is nil, then we bind `v' to the structure and `method', `user', (tramp-compat-progress-reporter-update reporter value suffix)))) (defmacro with-tramp-progress-reporter (vec level message &rest body) - "Executes BODY, spinning a progress reporter with MESSAGE. + "Execute BODY, spinning a progress reporter with MESSAGE. If LEVEL does not fit for visible messages, there are only traces without a visible progress reporter." (declare (indent 3) (debug t)) -- 2.39.2