[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Eclipse, cvs, and extssh
From: |
Mark D. Baushke |
Subject: |
Re: Eclipse, cvs, and extssh |
Date: |
Fri, 25 Jan 2008 09:46:15 -0800 |
Hi Bruno,
For cvs 1.12.x, you could use CVSROOT=":ext;CVS_RSH=ssh:hostname:/path" for
those repositories that need to use ssh and
CVSROOT=":ext;CVS_RSH=rsh:hostname:/path" for those repositories that
need to use rsh. This is probably a superior method for handing these
problems providing that it does not give Eclipse heartburn...
For cvs 1.11.x, you are correct. Both that the default is still "rsh"
(the test host I checked does not appear to have "rsh" installed, so
RSH_DFLT was "ssh" and I regret any confusion my previous message
caused) and that setting CVS_RSH will impact both :ext: and :extssh:
methods at the same time which was part of Derek's original intent.
For the current cvs 1.11.x (without the tentative patch given after my
.signature), there is no way to set CVS_RSH or CVSROOT to anything where
:extssh: is not a simple alias for :ext: and a CVSROOT (or CVS/Root)
which uses the extended syntax for 1.12.x will not work properly for cvs
1.11.x.
I suppose I could consider the addition of a CVS_SSH environment
variable, but it is not clear to me that "rsh" is viable enough to
continue to use it at all and I suspect it might be better to convert to
a default of "ssh" and try to get folks to stop using "rsh" as a
'security' fix...
Are any folks really still using "rsh" these days?
-- Mark
PS: Below is an experimental (untested) patch to cvs 1.11.x (current
top-of-tree sources) which would implement a CVS_SSH and SSH_DFLT for
the :extssh: method. I'd like to know if it completely solves your
problem or if I have managed to forget something.
Index: Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/Makefile.in,v
retrieving revision 1.88.4.17
diff -u -p -r1.88.4.17 Makefile.in
--- Makefile.in 22 Aug 2007 21:24:08 -0000 1.88.4.17
+++ Makefile.in 25 Jan 2008 17:39:27 -0000
@@ -189,6 +189,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
# Unix source subdirs, where we'll want to run lint and etags:
# This is a legacy variable from b4 Automake
Index: config.h.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/config.h.in,v
retrieving revision 1.71.4.13
diff -u -p -r1.71.4.13 config.h.in
--- config.h.in 28 Jun 2006 20:49:30 -0000 1.71.4.13
+++ config.h.in 25 Jan 2008 17:39:27 -0000
@@ -433,6 +433,10 @@
it. */
#undef SIZE_MAX
+/* The default remote shell to use, if one does not specify the CVS_SSH
+ environment variable. */
+#undef SSH_DFLT
+
/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
#undef STAT_MACROS_BROKEN
Index: configure
===================================================================
RCS file: /cvsroot/cvs/ccvs/configure,v
retrieving revision 1.174.2.81
diff -u -p -r1.174.2.81 configure
--- configure 14 Dec 2007 17:22:54 -0000 1.174.2.81
+++ configure 25 Jan 2008 17:39:28 -0000
@@ -716,6 +716,7 @@ LIBOBJS
KRB4
includeopt
EDITOR
+with_default_ssh
with_default_rsh
LTLIBOBJS'
ac_subst_files='MKTEMP_SH_FUNCTION'
@@ -1365,6 +1366,8 @@ Optional Packages:
--with-gssapi GSSAPI directory (default autoselects)
--with-editor The default text editor CVS should use for log
messages (default autoselects)
+ --with-ssh The default remote shell CVS will use for :extssh:
+ transport (default autodetects)
--with-rsh The default remote shell CVS will use for :ext:
transport (default autodetects)
--with-tmpdir The temporary directory CVS should use as a default
@@ -12125,13 +12128,100 @@ _ACEOF
+# What remote shell transport should the :extssh: client cvs default to using?
+
+# Check whether --with-ssh was given.
+if test "${with_ssh+set}" = set; then
+ withval=$with_ssh;
+else
+ with_ssh="ssh ssh2 ssh1"
+fi
+
+
+if test no = "$with_ssh"; then
+ { echo "$as_me:$LINENO: WARNING: Failed to find usable remote shell. Using
'ssh'." >&5
+echo "$as_me: WARNING: Failed to find usable remote shell. Using 'ssh'." >&2;}
+ with_ssh=ssh
+elif test yes = "$with_ssh"; then
+ # Make --with-ssh mean the same thing as --with-ssh=ssh
+ with_ssh=ssh
+fi
+
+if echo $with_ssh |grep ^/ >/dev/null; then
+ # If $with_ssh is an absolute path, issue a warning if the executable
+ # doesn't exist or isn't usable, but then trust the user and use it
+ # regardless
+ with_default_ssh=$with_ssh
+ { echo "$as_me:$LINENO: checking for a remote shell" >&5
+echo $ECHO_N "checking for a remote shell... $ECHO_C" >&6; }
+ if ! test -f $with_ssh \
+ || ! test -x $with_ssh; then
+ # warn the user that they may encounter problems
+ { echo "$as_me:$LINENO: WARNING: $with_ssh is not a path to an executable
file" >&5
+echo "$as_me: WARNING: $with_ssh is not a path to an executable file" >&2;}
+ fi
+else
+ # Search for a remote shell
+ for ac_prog in $with_ssh
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with
args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_with_default_ssh+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$with_default_ssh"; then
+ ac_cv_prog_with_default_ssh="$with_default_ssh" # Let the user override the
test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x
"$as_dir/$ac_word$ac_exec_ext"; }; then
+ ac_cv_prog_with_default_ssh="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+with_default_ssh=$ac_cv_prog_with_default_ssh
+if test -n "$with_default_ssh"; then
+ { echo "$as_me:$LINENO: result: $with_default_ssh" >&5
+echo "${ECHO_T}$with_default_ssh" >&6; }
+else
+ { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+ test -n "$with_default_ssh" && break
+done
+test -n "$with_default_ssh" || with_default_ssh=""ssh""
+
+fi
+
+
+cat >>confdefs.h <<_ACEOF
+#define SSH_DFLT "$with_default_ssh"
+_ACEOF
+
+
+
+
# What remote shell transport should our client cvs default to using?
# Check whether --with-rsh was given.
if test "${with_rsh+set}" = set; then
withval=$with_rsh;
else
- with_rsh="remsh rsh ssh"
+ with_rsh="remsh rsh ssh ssh2 ssh1"
fi
@@ -14034,11 +14124,12 @@ LIBOBJS!$LIBOBJS$ac_delim
KRB4!$KRB4$ac_delim
includeopt!$includeopt$ac_delim
EDITOR!$EDITOR$ac_delim
+with_default_ssh!$with_default_ssh$ac_delim
with_default_rsh!$with_default_rsh$ac_delim
LTLIBOBJS!$LTLIBOBJS$ac_delim
_ACEOF
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 8; then
+ if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 9; then
break
elif $ac_last_try; then
{ { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
Index: configure.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/configure.in,v
retrieving revision 1.176.2.72
diff -u -p -r1.176.2.72 configure.in
--- configure.in 14 Dec 2007 17:22:54 -0000 1.176.2.72
+++ configure.in 25 Jan 2008 17:39:29 -0000
@@ -495,6 +495,53 @@ dnl end --with-editor
dnl
dnl
+dnl begin --with-ssh
+dnl
+
+# What remote shell transport should the :extssh: client cvs default to using?
+AC_ARG_WITH(
+ [ssh],
+ AC_HELP_STRING(
+ [--with-ssh],
+ [The default remote shell CVS will use for :extssh: transport
+ (default autodetects)]), ,
+ [with_ssh="ssh ssh2 ssh1"])
+
+if test no = "$with_ssh"; then
+ AC_MSG_WARN([Failed to find usable remote shell. Using 'ssh'.])
+ with_ssh=ssh
+elif test yes = "$with_ssh"; then
+ # Make --with-ssh mean the same thing as --with-ssh=ssh
+ with_ssh=ssh
+fi
+
+if echo $with_ssh |grep ^/ >/dev/null; then
+ # If $with_ssh is an absolute path, issue a warning if the executable
+ # doesn't exist or isn't usable, but then trust the user and use it
+ # regardless
+ with_default_ssh=$with_ssh
+ AC_MSG_CHECKING([for a remote shell])
+ if ! test -f $with_ssh \
+ || ! test -x $with_ssh; then
+ # warn the user that they may encounter problems
+ AC_MSG_WARN([$with_ssh is not a path to an executable file])
+ fi
+else
+ # Search for a remote shell
+ AC_CHECK_PROGS([with_default_ssh], [$with_ssh], "ssh")
+fi
+
+AC_DEFINE_UNQUOTED(
+ [SSH_DFLT], ["$with_default_ssh"],
+ [The default remote shell to use, if one does not specify the
+ CVS_SSH environment variable.])
+dnl done with finding a default CVS_SSH value
+dnl
+dnl end --with-ssh
+dnl
+
+
+dnl
dnl begin --with-rsh
dnl
dnl Many sites no longer desire the use of "rsh" as the default
@@ -511,7 +558,7 @@ AC_ARG_WITH(
dnl and `remsh' is the remote shell, but look for it first since it
dnl probably won't exist on any platform where it shouldn't be preferred
dnl to `rsh'.
- [with_rsh="remsh rsh ssh"])
+ [with_rsh="remsh rsh ssh ssh2 ssh1"])
if test no = "$with_rsh"; then
AC_MSG_WARN([Failed to find usable remote shell. Using 'rsh'.])
Index: contrib/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/contrib/Makefile.in,v
retrieving revision 1.51.4.13
diff -u -p -r1.51.4.13 Makefile.in
--- contrib/Makefile.in 22 Aug 2007 21:24:55 -0000 1.51.4.13
+++ contrib/Makefile.in 25 Jan 2008 17:39:29 -0000
@@ -181,6 +181,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
contribdir = $(pkgdatadir)/contrib
contrib_SCRIPTS = \
check_cvs \
Index: diff/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/diff/Makefile.in,v
retrieving revision 1.28.4.12
diff -u -p -r1.28.4.12 Makefile.in
--- diff/Makefile.in 22 Aug 2007 21:24:55 -0000 1.28.4.12
+++ diff/Makefile.in 25 Jan 2008 17:39:29 -0000
@@ -165,6 +165,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
INCLUDES = -I$(top_srcdir)/lib
noinst_LIBRARIES = libdiff.a
libdiff_a_SOURCES = diff.c diff3.c analyze.c cmpbuf.c cmpbuf.h io.c \
Index: doc/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/doc/Makefile.in,v
retrieving revision 1.55.4.25
diff -u -p -r1.55.4.25 Makefile.in
--- doc/Makefile.in 22 Aug 2007 21:24:55 -0000 1.55.4.25
+++ doc/Makefile.in 25 Jan 2008 17:39:29 -0000
@@ -183,6 +183,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
info_TEXINFOS = cvs.texinfo cvsclient.texi
man_MANS = $(srcdir)/cvs.1
PSS = \
Index: doc/cvs.texinfo
===================================================================
RCS file: /cvsroot/cvs/ccvs/doc/cvs.texinfo,v
retrieving revision 1.545.2.71
diff -u -p -r1.545.2.71 cvs.texinfo
--- doc/cvs.texinfo 25 Jan 2008 00:11:27 -0000 1.545.2.71
+++ doc/cvs.texinfo 25 Jan 2008 17:39:30 -0000
@@ -2183,7 +2183,14 @@ For information on disk space requiremen
@ref{Creating a repository}.
@node Connecting via rsh
-@subsection Connecting with rsh
+@subsection Connecting with rsh or ssh
+
+@cindex ssh
+@sc{cvs} may use the @samp{ssh} protocol to perform
+these operations, so the remote user host needs to have
+a either an agent like @code{ssh-agent} to hold
+credentials or a @file{.shosts} file which grants
+access to the local user.
@cindex rsh
@sc{cvs} uses the @samp{rsh} protocol to perform these
@@ -2208,6 +2215,13 @@ Then test that @samp{rsh} is working wit
rsh -l bach faun.example.org 'echo $PATH'
@end example
+@noindent
+To test that @samp{ssh} is working use
+
+@example
+ssh -l bach faun.example.org 'echo $PATH'
+@end example
+
@cindex CVS_SERVER, environment variable
Next you have to make sure that @code{rsh} will be able
to find the server. Make sure that the path which
@@ -2229,12 +2243,17 @@ There is no need to edit @file{inetd.con
@cindex :server:, setting up
@cindex :ext:, setting up
+@cindex :extssh:, setting up
@cindex Kerberos, using kerberized rsh
@cindex SSH (rsh replacement)
@cindex rsh replacements (Kerberized, SSH, &c)
-There are two access methods that you use in @code{CVSROOT}
-for rsh. @code{:server:} specifies an internal rsh
+There are three access methods that you use in @code{CVSROOT}
+for rsh or ssh. @code{:server:} specifies an internal rsh
client, which is supported only by some @sc{cvs} ports.
+@code{:extssh:} specifies an external ssh program. By
+default this is @code{ssh} but you may set the
+@code{CVS_SSH} environment variable to invoke another
+program or wrapper script.
@code{:ext:} specifies an external rsh program. By
default this is @code{rsh} but you may set the
@code{CVS_RSH} environment variable to invoke another
@@ -2255,8 +2274,8 @@ to be inapplicable; consult the document
replacement.
@c FIXME: there should be a way to specify the
@c program in CVSROOT, not CVS_RSH, so that one can use
-@c different ones for different roots. e.g. ":ext;rsh=remsh:"
-@c instead of ":ext:".
+@c different ones for different roots. e.g.
+@c ":ext;CVS_RSH=remsh:" instead of ":ext:".
@c See also the comment in src/client.c for rationale
@c concerning "rsh" being the default and never
@c "remsh".
@@ -13891,6 +13910,12 @@ Specifies the external program which @sc
when @code{:ext:} access method is specified.
@pxref{Connecting via rsh}.
+@cindex CVS_SSH, environment variable
+@item $CVS_SSH
+Specifies the external program which @sc{cvs} connects with,
+when @code{:extssh:} access method is specified.
+@pxref{Connecting via rsh}.
+
@item $CVS_SERVER
Used in client-server mode when accessing a remote
repository using @sc{rsh}. It specifies the name of
Index: lib/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/lib/Makefile.in,v
retrieving revision 1.61.4.18
diff -u -p -r1.61.4.18 Makefile.in
--- lib/Makefile.in 22 Aug 2007 21:24:56 -0000 1.61.4.18
+++ lib/Makefile.in 25 Jan 2008 17:39:30 -0000
@@ -193,6 +193,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
# For now we need to include $(top_srcdir)/src because some systems
# (at least 'AIX rioscpu2 3 4 000030498200',
Index: man/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/man/Makefile.in,v
retrieving revision 1.32.4.13
diff -u -p -r1.32.4.13 Makefile.in
--- man/Makefile.in 22 Aug 2007 21:24:56 -0000 1.32.4.13
+++ man/Makefile.in 25 Jan 2008 17:39:31 -0000
@@ -166,6 +166,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
man_MANS = cvs.5 cvsbug.8
EXTRA_DIST = \
.cvsignore \
Index: src/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/Makefile.in,v
retrieving revision 1.83.4.15
diff -u -p -r1.83.4.15 Makefile.in
--- src/Makefile.in 22 Aug 2007 21:24:57 -0000 1.83.4.15
+++ src/Makefile.in 25 Jan 2008 17:39:31 -0000
@@ -199,6 +199,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
# $(includeopt) is CVS specific and set by configure
# FIXME - This includes line is dependant on its order. This means there is
Index: src/client.c
===================================================================
RCS file: /cvsroot/cvs/ccvs/src/client.c,v
retrieving revision 1.318.4.47
diff -u -p -r1.318.4.47 client.c
--- src/client.c 25 Jan 2008 00:11:28 -0000 1.318.4.47
+++ src/client.c 25 Jan 2008 17:39:31 -0000
@@ -4726,15 +4726,20 @@ start_rsh_server (root, to_server, from_
/* If you're working through firewalls, you can set the
CVS_RSH environment variable to a script which uses rsh to
invoke another rsh on a proxy machine. */
- char *cvs_rsh = getenv ("CVS_RSH");
+ char *env_cvs_rsh = getenv ("CVS_RSH");
+ char *env_cvs_ssh = getenv ("CVS_SSH");
+ char *cvs_rsh;
char *cvs_server = getenv ("CVS_SERVER");
int i = 0;
/* This needs to fit "rsh", "-b", "-l", "USER", "host",
"cmd (w/ args)", and NULL. We leave some room to grow. */
char *rsh_argv[10];
+ if (root->method == extssh_method)
+ cvs_rsh = env_cvs_ssh ? env_cvs_ssh : SSH_DFLT;
if (!cvs_rsh)
- cvs_rsh = RSH_DFLT;
+ cvs_rsh = env_cvs_rsh ? env_cvs_rsh : RSH_DFLT;
+
if (!cvs_server)
cvs_server = "cvs";
@@ -4788,14 +4793,19 @@ start_rsh_server (root, to_server, from_
/* If you're working through firewalls, you can set the
CVS_RSH environment variable to a script which uses rsh to
invoke another rsh on a proxy machine. */
- char *cvs_rsh = getenv ("CVS_RSH");
+ char *env_cvs_rsh = getenv ("CVS_RSH");
+ char *env_cvs_ssh = getenv ("CVS_SSH");
+ char *cvs_rsh;
char *cvs_server = getenv ("CVS_SERVER");
char *command;
int tofd, fromfd;
int child_pid;
+ if (root->method == extssh_method)
+ cvs_rsh = env_cvs_ssh ? env_cvs_ssh : SSH_DFLT;
if (!cvs_rsh)
- cvs_rsh = RSH_DFLT;
+ cvs_rsh = env_cvs_rsh ? env_cvs_rsh : RSH_DFLT;
+
if (!cvs_server)
cvs_server = "cvs";
Index: tools/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/tools/Makefile.in,v
retrieving revision 1.23.4.12
diff -u -p -r1.23.4.12 Makefile.in
--- tools/Makefile.in 22 Aug 2007 21:24:57 -0000 1.23.4.12
+++ tools/Makefile.in 25 Jan 2008 17:39:31 -0000
@@ -162,6 +162,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
EXTRA_DIST = \
README .cvsignore
Index: vms/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/vms/Makefile.in,v
retrieving revision 1.22.4.17
diff -u -p -r1.22.4.17 Makefile.in
--- vms/Makefile.in 22 Aug 2007 21:24:57 -0000 1.22.4.17
+++ vms/Makefile.in 25 Jan 2008 17:39:31 -0000
@@ -165,6 +165,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
EXTRA_DIST = \
.cvsignore \
ChangeLog \
Index: windows-NT/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/windows-NT/Makefile.in,v
retrieving revision 1.29.4.21
diff -u -p -r1.29.4.21 Makefile.in
--- windows-NT/Makefile.in 22 Aug 2007 21:24:57 -0000 1.29.4.21
+++ windows-NT/Makefile.in 25 Jan 2008 17:39:31 -0000
@@ -179,6 +179,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
EXTRA_DIST = \
JmgStat.c \
JmgStat.h \
Index: windows-NT/SCC/Makefile.in
===================================================================
RCS file: /cvsroot/cvs/ccvs/windows-NT/SCC/Makefile.in,v
retrieving revision 1.18.4.11
diff -u -p -r1.18.4.11 Makefile.in
--- windows-NT/SCC/Makefile.in 22 Aug 2007 21:24:57 -0000 1.18.4.11
+++ windows-NT/SCC/Makefile.in 25 Jan 2008 17:39:31 -0000
@@ -163,6 +163,7 @@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
with_default_rsh = @with_default_rsh@
+with_default_ssh = @with_default_ssh@
EXTRA_DIST = \
.cvsignore \
README.txt \
- Eclipse, cvs, and extssh, Bruno Haible, 2008/01/22
- Re: Eclipse, cvs, and extssh, Mark D. Baushke, 2008/01/22
- Re: Eclipse, cvs, and extssh, Mark D. Baushke, 2008/01/25
- Re: Eclipse, cvs, and extssh, Bruno Haible, 2008/01/25
- Re: Eclipse, cvs, and extssh,
Mark D. Baushke <=
- Re: Eclipse, cvs, and extssh, Larry Jones, 2008/01/25
- Re: Eclipse, cvs, and extssh, Bruno Haible, 2008/01/25
- Re: cvs, rsh, ssh, Bruno Haible, 2008/01/25
- Re: Eclipse, cvs, and extssh, Bruno Haible, 2008/01/25
- Re: Eclipse, cvs, and extssh, Mark D. Baushke, 2008/01/28
- Re: Eclipse, cvs, and extssh, Bruno Haible, 2008/01/28
- Re: Eclipse, cvs, and extssh, Mark D. Baushke, 2008/01/28