version 1.22, 1999/12/06 20:15:28 |
version 1.23, 2000/01/04 00:07:59 |
|
|
/* Name of current file being transferred. */ |
/* Name of current file being transferred. */ |
char *curfile; |
char *curfile; |
|
|
|
/* This is set to non-zero if IPv4 is desired. */ |
|
int IPv4 = 0; |
|
|
|
/* This is set to non-zero if IPv6 is desired. */ |
|
int IPv6 = 0; |
|
|
/* This is set to non-zero to enable verbose mode. */ |
/* This is set to non-zero to enable verbose mode. */ |
int verbose_mode = 0; |
int verbose_mode = 0; |
|
|
|
|
args[i++] = SSH_PROGRAM; |
args[i++] = SSH_PROGRAM; |
args[i++] = "-x"; |
args[i++] = "-x"; |
args[i++] = "-oFallBackToRsh no"; |
args[i++] = "-oFallBackToRsh no"; |
|
if (IPv4) |
|
args[i++] = "-4"; |
|
if (IPv6) |
|
args[i++] = "-6"; |
|
args[i++] = "-oFallBackToRsh no"; |
if (verbose_mode) |
if (verbose_mode) |
args[i++] = "-v"; |
args[i++] = "-v"; |
if (compress) |
if (compress) |
|
|
extern int optind; |
extern int optind; |
|
|
fflag = tflag = 0; |
fflag = tflag = 0; |
while ((ch = getopt(argc, argv, "dfprtvBCc:i:P:q")) != EOF) |
while ((ch = getopt(argc, argv, "dfprtvBCc:i:P:q46")) != EOF) |
switch (ch) { |
switch (ch) { |
/* User-visible flags. */ |
/* User-visible flags. */ |
|
case '4': |
|
IPv4 = 1; |
|
break; |
|
case '6': |
|
IPv6 = 1; |
|
break; |
case 'p': |
case 'p': |
pflag = 1; |
pflag = 1; |
break; |
break; |
|
|
exit(errs != 0); |
exit(errs != 0); |
} |
} |
|
|
|
char * |
|
cleanhostname(host) |
|
char *host; |
|
{ |
|
if (*host == '[' && host[strlen(host) - 1] == ']') { |
|
host[strlen(host) - 1] = '\0'; |
|
return (host + 1); |
|
} else |
|
return host; |
|
} |
|
|
void |
void |
toremote(targ, argc, argv) |
toremote(targ, argc, argv) |
char *targ, *argv[]; |
char *targ, *argv[]; |
|
|
bp = xmalloc(len); |
bp = xmalloc(len); |
if (host) { |
if (host) { |
*host++ = 0; |
*host++ = 0; |
|
host = cleanhostname(host); |
suser = argv[i]; |
suser = argv[i]; |
if (*suser == '\0') |
if (*suser == '\0') |
suser = pwd->pw_name; |
suser = pwd->pw_name; |
|
|
suser, host, cmd, src, |
suser, host, cmd, src, |
tuser ? tuser : "", tuser ? "@" : "", |
tuser ? tuser : "", tuser ? "@" : "", |
thost, targ); |
thost, targ); |
} else |
} else { |
|
host = cleanhostname(argv[i]); |
(void) sprintf(bp, |
(void) sprintf(bp, |
"exec %s%s -x -o'FallBackToRsh no' -n %s %s %s '%s%s%s:%s'", |
"exec %s%s -x -o'FallBackToRsh no' -n %s %s %s '%s%s%s:%s'", |
SSH_PROGRAM, verbose_mode ? " -v" : "", |
SSH_PROGRAM, verbose_mode ? " -v" : "", |
argv[i], cmd, src, |
host, cmd, src, |
tuser ? tuser : "", tuser ? "@" : "", |
tuser ? tuser : "", tuser ? "@" : "", |
thost, targ); |
thost, targ); |
|
} |
if (verbose_mode) |
if (verbose_mode) |
fprintf(stderr, "Executing: %s\n", bp); |
fprintf(stderr, "Executing: %s\n", bp); |
(void) system(bp); |
(void) system(bp); |
|
|
len = strlen(targ) + CMDNEEDS + 20; |
len = strlen(targ) + CMDNEEDS + 20; |
bp = xmalloc(len); |
bp = xmalloc(len); |
(void) sprintf(bp, "%s -t %s", cmd, targ); |
(void) sprintf(bp, "%s -t %s", cmd, targ); |
host = thost; |
host = cleanhostname(thost); |
if (do_cmd(host, tuser, |
if (do_cmd(host, tuser, |
bp, &remin, &remout) < 0) |
bp, &remin, &remout) < 0) |
exit(1); |
exit(1); |
|
|
else if (!okname(suser)) |
else if (!okname(suser)) |
continue; |
continue; |
} |
} |
|
host = cleanhostname(host); |
len = strlen(src) + CMDNEEDS + 20; |
len = strlen(src) + CMDNEEDS + 20; |
bp = xmalloc(len); |
bp = xmalloc(len); |
(void) sprintf(bp, "%s -f %s", cmd, src); |
(void) sprintf(bp, "%s -f %s", cmd, src); |
|
|
colon(cp) |
colon(cp) |
char *cp; |
char *cp; |
{ |
{ |
|
int flag = 0; |
|
|
if (*cp == ':') /* Leading colon is part of file name. */ |
if (*cp == ':') /* Leading colon is part of file name. */ |
return (0); |
return (0); |
|
if (*cp == '[') |
|
flag = 1; |
|
|
for (; *cp; ++cp) { |
for (; *cp; ++cp) { |
if (*cp == ':') |
if (*cp == '@' && *(cp+1) == '[') |
|
flag = 1; |
|
if (*cp == ']' && *(cp+1) == ':' && flag) |
|
return (cp+1); |
|
if (*cp == ':' && !flag) |
return (cp); |
return (cp); |
if (*cp == '/') |
if (*cp == '/') |
return (0); |
return (0); |