1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-26 01:32:25 +00:00

Darryl L. Miles's patch to support an optional port number argument

on the PSFTP `open' command; it was arguably a bug that this command
couldn't do such an obvious thing that could be done from the main
command line. Also had to fix a NULL-dereference in do_sftp_cleanup
in the process.

[originally from svn r3754]
This commit is contained in:
Simon Tatham 2004-01-21 19:56:08 +00:00
parent 4dec95f80f
commit 2379e69619

25
psftp.c
View File

@ -1014,6 +1014,8 @@ int sftp_cmd_chmod(struct sftp_command *cmd)
static int sftp_cmd_open(struct sftp_command *cmd) static int sftp_cmd_open(struct sftp_command *cmd)
{ {
int portnumber;
if (back != NULL) { if (back != NULL) {
printf("psftp: already connected\n"); printf("psftp: already connected\n");
return 0; return 0;
@ -1024,7 +1026,16 @@ static int sftp_cmd_open(struct sftp_command *cmd)
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 */ back = NULL; /* connection is already closed */
return -1; /* this is fatal */ return -1; /* this is fatal */
} }
@ -1216,7 +1227,7 @@ static struct sftp_cmd_lookup {
}, },
{ {
"open", TRUE, "connect to a host", "open", TRUE, "connect to a host",
" [<user>@]<hostname>\n" " [<user>@]<hostname> [<port>]\n"
" Establishes an SFTP connection to a given host. Only usable\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" " when you did not already specify a host name on the command\n"
" line.\n", " line.\n",
@ -1509,10 +1520,12 @@ static int do_sftp_init(void)
void do_sftp_cleanup() void do_sftp_cleanup()
{ {
char ch; char ch;
back->special(backhandle, TS_EOF); if (back) {
sftp_recvdata(&ch, 1); back->special(backhandle, TS_EOF);
back->free(backhandle); sftp_recvdata(&ch, 1);
sftp_cleanup_request(); back->free(backhandle);
sftp_cleanup_request();
}
if (pwd) { if (pwd) {
sfree(pwd); sfree(pwd);
pwd = NULL; pwd = NULL;