}
}
+/*
+ * Return a pointer to the portion of str that comes after the last
+ * slash (or backslash or colon, if `local' is TRUE).
+ */
+static char *stripslashes(char *str, int local)
+{
+ char *p;
+
+ if (local) {
+ p = strchr(str, ':');
+ if (p) str = p+1;
+ }
+
+ p = strrchr(str, '/');
+ if (p) str = p+1;
+
+ if (local) {
+ p = strrchr(str, '\\');
+ if (p) str = p+1;
+ }
+
+ return str;
+}
+
/* ----------------------------------------------------------------------
* Actual sftp commands.
*/
}
/*
+ * Print current directory. Easy as pie.
+ */
+int sftp_cmd_pwd(struct sftp_command *cmd)
+{
+ printf("Remote directory is %s\n", pwd);
+ return 0;
+}
+
+/*
* Get a file and save it at the local end. We have two very
* similar commands here: `get' and `reget', which differ in that
* `reget' checks for the existence of the destination file and
printf("%s: %s\n", cmd->words[1], fxp_error());
return 0;
}
- outfname = (cmd->nwords == 2 ? cmd->words[1] : cmd->words[2]);
+ outfname = (cmd->nwords == 2 ?
+ stripslashes(cmd->words[1], 0) : cmd->words[2]);
fh = fxp_open(fname, SSH_FXF_READ);
if (!fh) {
}
fname = cmd->words[1];
- origoutfname = (cmd->nwords == 2 ? cmd->words[1] : cmd->words[2]);
+ origoutfname = (cmd->nwords == 2 ?
+ stripslashes(cmd->words[1], 1) : cmd->words[2]);
outfname = canonify(origoutfname);
if (!outfname) {
printf("%s: %s\n", origoutfname, fxp_error());
sftp_cmd_put
},
{
+ "pwd", "print your remote working directory",
+ "\n"
+ " Print the current remote working directory for your SFTP session.\n",
+ sftp_cmd_pwd
+ },
+ {
"quit", "bye", NULL,
sftp_cmd_quit
},
/* SFTP uses SSH2 by default always */
cfg.sshprot = 2;
+ /*
+ * Disable scary things which shouldn't be enabled for simple
+ * things like SCP and SFTP: agent forwarding, port forwarding,
+ * X forwarding.
+ */
+ cfg.x11_forward = 0;
+ cfg.agentfwd = 0;
+ cfg.portfwd[0] = cfg.portfwd[1] = '\0';
+
/* Set up subsystem name. */
strcpy(cfg.remote_cmd, "sftp");
cfg.ssh_subsys = TRUE;