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

When PSFTP exits in batch mode due to a command failure, set exit status != 0.

There are possibly other circumstances when PSFTP should also return
failure, but that one seems particularly obvious.
This commit is contained in:
Ben Harris 2015-06-25 23:27:16 +01:00
parent 31ff9e0f96
commit 95501a148c

18
psftp.c
View File

@ -2388,7 +2388,7 @@ void do_sftp_cleanup()
} }
} }
void do_sftp(int mode, int modeflags, char *batchfile) int do_sftp(int mode, int modeflags, char *batchfile)
{ {
FILE *fp; FILE *fp;
int ret; int ret;
@ -2421,8 +2421,9 @@ void do_sftp(int mode, int modeflags, char *batchfile)
fp = fopen(batchfile, "r"); fp = fopen(batchfile, "r");
if (!fp) { if (!fp) {
printf("Fatal: unable to open %s\n", batchfile); printf("Fatal: unable to open %s\n", batchfile);
return; return 1;
} }
ret = 0;
while (1) { while (1) {
struct sftp_command *cmd; struct sftp_command *cmd;
cmd = sftp_getcmd(fp, mode, modeflags); cmd = sftp_getcmd(fp, mode, modeflags);
@ -2437,8 +2438,13 @@ void do_sftp(int mode, int modeflags, char *batchfile)
} }
} }
fclose(fp); fclose(fp);
/*
* In batch mode, and if exit on command failure is enabled,
* any command failure causes the whole of PSFTP to fail.
*/
if (ret == 0 && !(modeflags & 2)) return 2;
} }
return 0;
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
@ -2894,7 +2900,7 @@ const int share_can_be_upstream = FALSE;
*/ */
int psftp_main(int argc, char *argv[]) int psftp_main(int argc, char *argv[])
{ {
int i; int i, ret;
int portnumber = 0; int portnumber = 0;
char *userhost, *user; char *userhost, *user;
int mode = 0; int mode = 0;
@ -2990,7 +2996,7 @@ int psftp_main(int argc, char *argv[])
" to connect\n"); " to connect\n");
} }
do_sftp(mode, modeflags, batchfile); ret = do_sftp(mode, modeflags, batchfile);
if (back != NULL && back->connected(backhandle)) { if (back != NULL && back->connected(backhandle)) {
char ch; char ch;
@ -3004,5 +3010,5 @@ int psftp_main(int argc, char *argv[])
console_provide_logctx(NULL); console_provide_logctx(NULL);
sk_cleanup(); sk_cleanup();
return 0; return ret;
} }