version 1.230, 2021/08/10 03:33:34 |
version 1.231, 2021/08/11 14:05:19 |
|
|
|
|
#define COPY_BUFLEN 16384 |
#define COPY_BUFLEN 16384 |
|
|
int do_cmd(char *program, char *host, char *remuser, int port, char *cmd, |
int do_cmd(char *, char *, char *, int, int, char *, int *, int *, pid_t *); |
int *fdin, int *fdout, pid_t *pidp); |
int do_cmd2(char *, char *, int, char *, int, int); |
int do_cmd2(char *host, char *remuser, int port, char *cmd, |
|
int fdin, int fdout); |
|
|
|
/* Struct for addargs */ |
/* Struct for addargs */ |
arglist args; |
arglist args; |
|
|
*/ |
*/ |
|
|
int |
int |
do_cmd(char *program, char *host, char *remuser, int port, char *cmd, |
do_cmd(char *program, char *host, char *remuser, int port, int subsystem, |
int *fdin, int *fdout, pid_t *pid) |
char *cmd, int *fdin, int *fdout, pid_t *pid) |
{ |
{ |
int pin[2], pout[2], reserved[2]; |
int pin[2], pout[2], reserved[2]; |
|
|
|
|
addargs(&args, "-l"); |
addargs(&args, "-l"); |
addargs(&args, "%s", remuser); |
addargs(&args, "%s", remuser); |
} |
} |
|
if (subsystem) |
|
addargs(&args, "-s"); |
addargs(&args, "--"); |
addargs(&args, "--"); |
addargs(&args, "%s", host); |
addargs(&args, "%s", host); |
addargs(&args, "%s", cmd); |
addargs(&args, "%s", cmd); |
|
|
int *reminp, int *remoutp, int *pidp) |
int *reminp, int *remoutp, int *pidp) |
{ |
{ |
if (sftp_direct == NULL) { |
if (sftp_direct == NULL) { |
addargs(&args, "-s"); |
if (do_cmd(ssh_program, host, user, port, 1, "sftp", |
if (do_cmd(ssh_program, host, user, port, "sftp", |
|
reminp, remoutp, pidp) < 0) |
reminp, remoutp, pidp) < 0) |
return NULL; |
return NULL; |
|
|
} else { |
} else { |
args.list = NULL; |
args.list = NULL; |
addargs(&args, "sftp-server"); |
addargs(&args, "sftp-server"); |
if (do_cmd(sftp_direct, host, NULL, -1, "sftp", |
if (do_cmd(sftp_direct, host, NULL, -1, 0, "sftp", |
reminp, remoutp, pidp) < 0) |
reminp, remoutp, pidp) < 0) |
return NULL; |
return NULL; |
} |
} |
|
|
} else { |
} else { |
xasprintf(&bp, "%s -f %s%s", cmd, |
xasprintf(&bp, "%s -f %s%s", cmd, |
*src == '-' ? "-- " : "", src); |
*src == '-' ? "-- " : "", src); |
if (do_cmd(ssh_program, host, suser, sport, |
if (do_cmd(ssh_program, host, suser, sport, 0, |
bp, &remin, &remout, &do_cmd_pid) < 0) |
bp, &remin, &remout, &do_cmd_pid) < 0) |
exit(1); |
exit(1); |
free(bp); |
free(bp); |
|
|
if (remin == -1) { |
if (remin == -1) { |
xasprintf(&bp, "%s -t %s%s", cmd, |
xasprintf(&bp, "%s -t %s%s", cmd, |
*targ == '-' ? "-- " : "", targ); |
*targ == '-' ? "-- " : "", targ); |
if (do_cmd(ssh_program, thost, tuser, tport, bp, |
if (do_cmd(ssh_program, thost, tuser, tport, 0, |
&remin, &remout, &do_cmd_pid) < 0) |
bp, &remin, &remout, &do_cmd_pid) < 0) |
exit(1); |
exit(1); |
if (response() < 0) |
if (response() < 0) |
exit(1); |
exit(1); |
|
|
/* SCP */ |
/* SCP */ |
xasprintf(&bp, "%s -f %s%s", |
xasprintf(&bp, "%s -f %s%s", |
cmd, *src == '-' ? "-- " : "", src); |
cmd, *src == '-' ? "-- " : "", src); |
if (do_cmd(ssh_program, host, suser, sport, bp, |
if (do_cmd(ssh_program, host, suser, sport, 0, bp, |
&remin, &remout, &do_cmd_pid) < 0) { |
&remin, &remout, &do_cmd_pid) < 0) { |
free(bp); |
free(bp); |
++errs; |
++errs; |