static int sftp_cmd_open(struct sftp_command *cmd)
{
+ int portnumber;
+
if (back != NULL) {
printf("psftp: already connected\n");
return 0;
return 0;
}
- if (psftp_connect(cmd->words[1], NULL, 0)) {
+ if (cmd->nwords > 2) {
+ portnumber = atoi(cmd->words[2]);
+ if (portnumber == 0) {
+ printf("open: invalid port number\n");
+ return 0;
+ }
+ } else
+ portnumber = 0;
+
+ if (psftp_connect(cmd->words[1], NULL, portnumber)) {
back = NULL; /* connection is already closed */
return -1; /* this is fatal */
}
},
{
"open", TRUE, "connect to a host",
- " [<user>@]<hostname>\n"
+ " [<user>@]<hostname> [<port>]\n"
" Establishes an SFTP connection to a given host. Only usable\n"
" when you did not already specify a host name on the command\n"
" line.\n",
void do_sftp_cleanup()
{
char ch;
- back->special(backhandle, TS_EOF);
- sftp_recvdata(&ch, 1);
- back->free(backhandle);
- sftp_cleanup_request();
+ if (back) {
+ back->special(backhandle, TS_EOF);
+ sftp_recvdata(&ch, 1);
+ back->free(backhandle);
+ sftp_cleanup_request();
+ }
if (pwd) {
sfree(pwd);
pwd = NULL;
{
printf("PuTTY Secure File Transfer (SFTP) client\n");
printf("%s\n", ver);
- printf("Usage: psftp [options] user@host\n");
+ printf("Usage: psftp [options] [user@]host\n");
printf("Options:\n");
printf(" -b file use specified batchfile\n");
printf(" -bc output batchfile commands\n");