]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - psftp.c
Some extra int64 functions.
[PuTTY.git] / psftp.c
diff --git a/psftp.c b/psftp.c
index 904ddb885618ca79cdb3f8dc8b23bf2f18951d54..2b0a1371b55be609c2d156d8d7f2b003c142d62f 100644 (file)
--- a/psftp.c
+++ b/psftp.c
@@ -189,6 +189,11 @@ static int bare_name_compare(const void *av, const void *bv)
     return strcmp(*a, *b);
 }
 
+static void not_connected(void)
+{
+    printf("psftp: not connected to a host; use \"open host.name\"\n");
+}
+
 /* ----------------------------------------------------------------------
  * The meat of the `get' and `put' commands.
  */
@@ -376,7 +381,7 @@ int sftp_get_file(char *fname, char *outfname, int recurse, int restart)
     fh = fxp_open_recv(pktin, rreq);
 
     if (!fh) {
-       printf("%s: %s\n", fname, fxp_error());
+       printf("%s: open for read: %s\n", fname, fxp_error());
        return 0;
     }
 
@@ -619,7 +624,7 @@ int sftp_put_file(char *fname, char *outfname, int recurse, int restart)
     fh = fxp_open_recv(pktin, rreq);
 
     if (!fh) {
-       printf("%s: %s\n", outfname, fxp_error());
+       printf("%s: open for write: %s\n", outfname, fxp_error());
        return 0;
     }
 
@@ -869,7 +874,7 @@ int wildcard_iterate(char *filename, int (*func)(void *, char *), void *ctx)
        while ( (newname = sftp_wildcard_get_filename(swcm)) != NULL ) {
            cname = canonify(newname);
            if (!cname) {
-               printf("%s: %s\n", newname, fxp_error());
+               printf("%s: canonify: %s\n", newname, fxp_error());
                ret = 0;
            }
            matched = TRUE;
@@ -886,7 +891,7 @@ int wildcard_iterate(char *filename, int (*func)(void *, char *), void *ctx)
     } else {
        cname = canonify(unwcfname);
        if (!cname) {
-           printf("%s: %s\n", filename, fxp_error());
+           printf("%s: canonify: %s\n", filename, fxp_error());
            ret = 0;
        }
        ret = func(ctx, cname);
@@ -936,7 +941,7 @@ int sftp_cmd_quit(struct sftp_command *cmd)
 int sftp_cmd_close(struct sftp_command *cmd)
 {
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -966,7 +971,7 @@ int sftp_cmd_ls(struct sftp_command *cmd)
     int i;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1002,7 +1007,7 @@ int sftp_cmd_ls(struct sftp_command *cmd)
 
     cdir = canonify(dir);
     if (!cdir) {
-       printf("%s: %s\n", dir, fxp_error());
+       printf("%s: canonify: %s\n", dir, fxp_error());
        sfree(unwcdir);
        return 0;
     }
@@ -1088,7 +1093,7 @@ int sftp_cmd_cd(struct sftp_command *cmd)
     char *dir;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1098,7 +1103,7 @@ int sftp_cmd_cd(struct sftp_command *cmd)
        dir = canonify(cmd->words[1]);
 
     if (!dir) {
-       printf("%s: %s\n", dir, fxp_error());
+       printf("%s: canonify: %s\n", dir, fxp_error());
        return 0;
     }
 
@@ -1131,7 +1136,7 @@ int sftp_cmd_cd(struct sftp_command *cmd)
 int sftp_cmd_pwd(struct sftp_command *cmd)
 {
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1155,7 +1160,7 @@ int sftp_general_get(struct sftp_command *cmd, int restart, int multiple)
     int recurse = FALSE;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1209,7 +1214,7 @@ int sftp_general_get(struct sftp_command *cmd, int restart, int multiple)
            fname = canonify(origwfname);
 
            if (!fname) {
-               printf("%s: %s\n", origwfname, fxp_error());
+               printf("%s: canonify: %s\n", origwfname, fxp_error());
                sfree(unwcfname);
                return 0;
            }
@@ -1269,7 +1274,7 @@ int sftp_general_put(struct sftp_command *cmd, int restart, int multiple)
     int recurse = FALSE;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1320,7 +1325,7 @@ int sftp_general_put(struct sftp_command *cmd, int restart, int multiple)
 
            outfname = canonify(origoutfname);
            if (!outfname) {
-               printf("%s: %s\n", origoutfname, fxp_error());
+               printf("%s: canonify: %s\n", origoutfname, fxp_error());
                if (wcm) {
                    sfree(wfname);
                    finish_wildcard_matching(wcm);
@@ -1370,7 +1375,7 @@ int sftp_cmd_mkdir(struct sftp_command *cmd)
     int i, ret;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1383,7 +1388,7 @@ int sftp_cmd_mkdir(struct sftp_command *cmd)
     for (i = 1; i < cmd->nwords; i++) {
        dir = canonify(cmd->words[i]);
        if (!dir) {
-           printf("%s: %s\n", dir, fxp_error());
+           printf("%s: canonify: %s\n", dir, fxp_error());
            return 0;
        }
 
@@ -1394,7 +1399,6 @@ int sftp_cmd_mkdir(struct sftp_command *cmd)
 
        if (!result) {
            printf("mkdir %s: %s\n", dir, fxp_error());
-           sfree(dir);
            ret = 0;
        } else
            printf("mkdir %s: OK\n", dir);
@@ -1431,7 +1435,7 @@ int sftp_cmd_rmdir(struct sftp_command *cmd)
     int i, ret;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1473,7 +1477,7 @@ int sftp_cmd_rm(struct sftp_command *cmd)
     int i, ret;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1532,7 +1536,7 @@ static int sftp_action_mv(void *vctx, char *srcfname)
        newname = dupcat(ctx->dstfname, "/", p, NULL);
        newcanon = canonify(newname);
        if (!newcanon) {
-           printf("%s: %s\n", newname, fxp_error());
+           printf("%s: canonify: %s\n", newname, fxp_error());
            sfree(newname);
            return 0;
        }
@@ -1568,7 +1572,7 @@ int sftp_cmd_mv(struct sftp_command *cmd)
     int i, ret;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -1579,7 +1583,7 @@ int sftp_cmd_mv(struct sftp_command *cmd)
 
     ctx->dstfname = canonify(cmd->words[cmd->nwords-1]);
     if (!ctx->dstfname) {
-       printf("%s: %s\n", ctx->dstfname, fxp_error());
+       printf("%s: canonify: %s\n", ctx->dstfname, fxp_error());
        return 0;
     }
 
@@ -1662,7 +1666,7 @@ int sftp_cmd_chmod(struct sftp_command *cmd)
     struct sftp_context_chmod actx, *ctx = &actx;
 
     if (back == NULL) {
-       printf("psftp: not connected to a host; use \"open host.name\"\n");
+       not_connected();
        return 0;
     }
 
@@ -2519,6 +2523,15 @@ int from_backend(void *frontend, int is_stderr, const char *data, int datalen)
 
     return 0;
 }
+int from_backend_untrusted(void *frontend_handle, const char *data, int len)
+{
+    /*
+     * No "untrusted" output should get here (the way the code is
+     * currently, it's all diverted by FLAG_STDERR).
+     */
+    assert(!"Unexpected call to from_backend_untrusted()");
+    return 0; /* not reached */
+}
 int sftp_recvdata(char *buf, int len)
 {
     outptr = (unsigned char *) buf;
@@ -2568,6 +2581,8 @@ static void usage(void)
     printf("%s\n", ver);
     printf("Usage: psftp [options] [user@]host\n");
     printf("Options:\n");
+    printf("  -V        print version information and exit\n");
+    printf("  -pgpfp    print PGP key fingerprints and exit\n");
     printf("  -b file   use specified batchfile\n");
     printf("  -bc       output batchfile commands\n");
     printf("  -be       don't stop batchfile processing if errors\n");
@@ -2580,8 +2595,9 @@ static void usage(void)
     printf("  -4 -6     force use of IPv4 or IPv6\n");
     printf("  -C        enable compression\n");
     printf("  -i key    private key file for authentication\n");
+    printf("  -noagent  disable use of Pageant\n");
+    printf("  -agent    enable use of Pageant\n");
     printf("  -batch    disable all interactive prompts\n");
-    printf("  -V        print version information\n");
     cleanup_exit(1);
 }
 
@@ -2708,17 +2724,6 @@ static int psftp_connect(char *userhost, char *user, int portnumber)
        strncpy(cfg.username, user, sizeof(cfg.username) - 1);
        cfg.username[sizeof(cfg.username) - 1] = '\0';
     }
-    if (!cfg.username[0]) {
-       if (!console_get_line("login as: ",
-                             cfg.username, sizeof(cfg.username), FALSE)) {
-           fprintf(stderr, "psftp: no username, aborting\n");
-           cleanup_exit(1);
-       } else {
-           int len = strlen(cfg.username);
-           if (cfg.username[len - 1] == '\n')
-               cfg.username[len - 1] = '\0';
-       }
-    }
 
     if (portnumber)
        cfg.port = portnumber;
@@ -2738,7 +2743,7 @@ static int psftp_connect(char *userhost, char *user, int portnumber)
     cfg.nopty = TRUE;
 
     /*
-     * Set up fallback option, for SSH1 servers or servers with the
+     * Set up fallback option, for SSH-1 servers or servers with the
      * sftp subsystem not enabled but the server binary installed
      * in the usual place. We only support fallback on Unix
      * systems, and we use a kludgy piece of shellery which should
@@ -2814,7 +2819,6 @@ int psftp_main(int argc, char *argv[])
 #endif
        ;
     cmdline_tooltype = TOOLTYPE_FILETRANSFER;
-    ssh_get_line = &console_get_line;
     sk_init();
 
     userhost = user = NULL;
@@ -2845,6 +2849,9 @@ int psftp_main(int argc, char *argv[])
        } else if (strcmp(argv[i], "-h") == 0 ||
                   strcmp(argv[i], "-?") == 0) {
            usage();
+        } else if (strcmp(argv[i], "-pgpfp") == 0) {
+            pgp_fingerprints();
+            return 1;
        } else if (strcmp(argv[i], "-V") == 0) {
            version();
        } else if (strcmp(argv[i], "-batch") == 0) {