Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-1-5]: src/crypto/dist/ssh Pull up revisions 1.2-1.8 (requested by...



details:   https://anonhg.NetBSD.org/src/rev/b00dd0e39b45
branches:  netbsd-1-5
changeset: 490703:b00dd0e39b45
user:      he <he%NetBSD.org@localhost>
date:      Mon Feb 26 20:26:59 2001 +0000

description:
Pull up revisions 1.2-1.8 (requested by itojun):
  Update SSH to version found on trunk as of 26 Feb 2001.

diffstat:

 crypto/dist/ssh/scp.c |  1231 ++++++++++++++++++++++++++++++++++++++++++++++
 crypto/dist/ssh/ssh.1 |  1308 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 2539 insertions(+), 0 deletions(-)

diffs (truncated from 2547 to 300 lines):

diff -r 5bc8967b254e -r b00dd0e39b45 crypto/dist/ssh/scp.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/crypto/dist/ssh/scp.c     Mon Feb 26 20:26:59 2001 +0000
@@ -0,0 +1,1231 @@
+/*
+ * scp - secure remote copy.  This is basically patched BSD rcp which
+ * uses ssh to do the data transfer (instead of using rcmd).
+ *
+ * NOTE: This version should NOT be suid root.  (This uses ssh to
+ * do the transfer and ssh has the necessary privileges.)
+ *
+ * 1995 Timo Rinne <tri%iki.fi@localhost>, Tatu Ylonen <ylo%cs.hut.fi@localhost>
+ *
+ * As far as I am concerned, the code I have written for this software
+ * can be used freely for any purpose.  Any derived versions of this
+ * software must be clearly marked as such, and if the derived work is
+ * incompatible with the protocol description in the RFC file, it must be
+ * called by a name other than "ssh" or "Secure Shell".
+ */
+/*
+ * Copyright (c) 1999 Theo de Raadt. All rights reserved.
+ * Copyright (c) 1999 Aaron Campbell. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Parts from:
+ *
+ * Copyright (c) 1983, 1990, 1992, 1993, 1995
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+#include "includes.h"
+RCSID("$OpenBSD: scp.c,v 1.59 2001/02/19 10:36:25 deraadt Exp $");
+
+#include "xmalloc.h"
+#include "atomicio.h"
+#include "pathnames.h"
+#include "log.h"
+
+/* For progressmeter() -- number of seconds before xfer considered "stalled" */
+#define STALLTIME      5
+
+/* Visual statistics about files as they are transferred. */
+void progressmeter(int);
+
+/* Returns width of the terminal (for progress meter calculations). */
+int getttywidth(void);
+int do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout, int argc);
+
+/* setup arguments for the call to ssh */
+void addargs(char *fmt, ...) __attribute__((format(printf, 1, 2)));
+
+/* Time a transfer started. */
+static struct timeval start;
+
+/* Number of bytes of current file transferred so far. */
+volatile u_long statbytes;
+
+/* Total size of current file. */
+off_t totalbytes = 0;
+
+/* Name of current file being transferred. */
+char *curfile;
+
+/* This is set to non-zero to enable verbose mode. */
+int verbose_mode = 0;
+
+/* This is set to zero if the progressmeter is not desired. */
+int showprogress = 1;
+
+/* This is the program to execute for the secured connection. ("ssh" or -S) */
+char *ssh_program = _PATH_SSH_PROGRAM;
+
+/* This is the list of arguments that scp passes to ssh */
+struct {
+       char    **list;
+       int     num;
+       int     nalloc;
+} args;
+
+/*
+ * This function executes the given command as the specified user on the
+ * given host.  This returns < 0 if execution fails, and >= 0 otherwise. This
+ * assigns the input and output file descriptors on success.
+ */
+
+int
+do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout, int argc)
+{
+       int pin[2], pout[2], reserved[2];
+
+       if (verbose_mode)
+               fprintf(stderr, "Executing: program %s host %s, user %s, command %s\n",
+                   ssh_program, host, remuser ? remuser : "(unspecified)", cmd);
+
+       /*
+        * Reserve two descriptors so that the real pipes won't get
+        * descriptors 0 and 1 because that will screw up dup2 below.
+        */
+       pipe(reserved);
+
+       /* Create a socket pair for communicating with ssh. */
+       if (pipe(pin) < 0)
+               fatal("pipe: %s", strerror(errno));
+       if (pipe(pout) < 0)
+               fatal("pipe: %s", strerror(errno));
+
+       /* Free the reserved descriptors. */
+       close(reserved[0]);
+       close(reserved[1]);
+
+       /* For a child to execute the command on the remote host using ssh. */
+       if (fork() == 0)  {
+               /* Child. */
+               close(pin[1]);
+               close(pout[0]);
+               dup2(pin[0], 0);
+               dup2(pout[1], 1);
+               close(pin[0]);
+               close(pout[1]);
+
+               args.list[0] = ssh_program;
+               if (remuser != NULL)
+                       addargs("-l%s", remuser);
+               addargs("%s", host);
+               addargs("%s", cmd);
+
+               execvp(ssh_program, args.list);
+               perror(ssh_program);
+               exit(1);
+       }
+       /* Parent.  Close the other side, and return the local side. */
+       close(pin[0]);
+       *fdout = pin[1];
+       close(pout[1]);
+       *fdin = pout[0];
+       return 0;
+}
+
+typedef struct {
+       int cnt;
+       char *buf;
+} BUF;
+
+extern int iamremote;
+
+BUF *allocbuf(BUF *, int, int);
+char *colon(char *);
+void lostconn(int);
+void nospace(void);
+int okname(char *);
+void run_err(const char *,...);
+void verifydir(char *);
+
+struct passwd *pwd;
+uid_t userid;
+int errs, remin, remout;
+int pflag, iamremote, iamrecursive, targetshouldbedirectory;
+
+#define        CMDNEEDS        64
+char cmd[CMDNEEDS];            /* must hold "rcp -r -p -d\0" */
+
+int main(int, char *[]);
+int response(void);
+void rsource(char *, struct stat *);
+void sink(int, char *[]);
+void source(int, char *[]);
+void tolocal(int, char *[]);
+char *cleanhostname(char *);
+void toremote(char *, int, char *[]);
+void usage(void);
+
+int
+main(argc, argv)
+       int argc;
+       char *argv[];
+{
+       int ch, fflag, tflag;
+       char *targ;
+       extern char *optarg;
+       extern int optind;
+
+       args.list = NULL;
+       addargs("ssh");         /* overwritten with ssh_program */
+       addargs("-x");
+       addargs("-oFallBackToRsh no");
+
+       fflag = tflag = 0;
+       while ((ch = getopt(argc, argv, "dfprtvBCc:i:P:q46S:o:")) != -1)
+               switch (ch) {
+               /* User-visible flags. */
+               case '4':
+               case '6':
+               case 'C':
+                       addargs("-%c", ch);
+                       break;
+               case 'o':
+               case 'c':
+               case 'i':
+                       addargs("-%c%s", ch, optarg);
+                       break;
+               case 'P':
+                       addargs("-p%s", optarg);
+                       break;
+               case 'B':
+                       addargs("-oBatchmode yes");
+                       break;
+               case 'p':
+                       pflag = 1;
+                       break;
+               case 'r':
+                       iamrecursive = 1;
+                       break;
+               case 'S':
+                       ssh_program = xstrdup(optarg);
+                       break;
+               case 'v':
+                       verbose_mode = 1;
+                       break;
+               case 'q':
+                       showprogress = 0;
+                       break;
+
+               /* Server options. */
+               case 'd':
+                       targetshouldbedirectory = 1;
+                       break;
+               case 'f':       /* "from" */
+                       iamremote = 1;
+                       fflag = 1;
+                       break;
+               case 't':       /* "to" */
+                       iamremote = 1;
+                       tflag = 1;
+                       break;
+               case '?':
+               default:
+                       usage();
+               }
+       argc -= optind;
+       argv += optind;
+
+       if ((pwd = getpwuid(userid = getuid())) == NULL)
+               fatal("unknown user %d", (int) userid);
+
+       if (!isatty(STDERR_FILENO))
+               showprogress = 0;
+
+       remin = STDIN_FILENO;
+       remout = STDOUT_FILENO;
+



Home | Main Index | Thread Index | Old Index