convert to use getarg
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9798 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
239
appl/rcp/rcp.c
239
appl/rcp/rcp.c
@@ -32,9 +32,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rcp_locl.h"
|
#include "rcp_locl.h"
|
||||||
|
#include <getarg.h>
|
||||||
|
|
||||||
#define RSH_PROGRAM "rsh"
|
#define RSH_PROGRAM "rsh"
|
||||||
#define OPTIONS "5dfFKpP:rtxz"
|
|
||||||
|
|
||||||
struct passwd *pwd;
|
struct passwd *pwd;
|
||||||
uid_t userid;
|
uid_t userid;
|
||||||
@@ -53,61 +53,57 @@ void sink (int, char *[]);
|
|||||||
void source (int, char *[]);
|
void source (int, char *[]);
|
||||||
void tolocal (int, char *[]);
|
void tolocal (int, char *[]);
|
||||||
void toremote (char *, int, char *[]);
|
void toremote (char *, int, char *[]);
|
||||||
void usage (void);
|
|
||||||
|
|
||||||
int do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout);
|
int do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout);
|
||||||
|
|
||||||
int
|
static int fflag, tflag;
|
||||||
main(argc, argv)
|
|
||||||
int argc;
|
static int version_flag, help_flag;
|
||||||
char *argv[];
|
|
||||||
{
|
struct getargs args[] = {
|
||||||
int ch, fflag, tflag;
|
{ NULL, '5', arg_flag, &usekrb5, "use Kerberos 5 authentication" },
|
||||||
char *targ;
|
{ NULL, 'F', arg_flag, &forwardtkt, "forward credentials" },
|
||||||
|
{ NULL, 'K', arg_flag, &usebroken, "use BSD authentication" },
|
||||||
|
{ NULL, 'P', arg_string, &port, "non-default port", "port" },
|
||||||
|
{ NULL, 'p', arg_flag, &pflag, "preserve file permissions" },
|
||||||
|
{ NULL, 'r', arg_flag, &iamrecursive, "recursive mode" },
|
||||||
|
{ NULL, 'x', arg_flag, &doencrypt, "use encryption" },
|
||||||
|
{ NULL, 'z', arg_flag, &noencrypt, "don't encrypt" },
|
||||||
|
{ NULL, 'd', arg_flag, &targetshouldbedirectory },
|
||||||
|
{ NULL, 'f', arg_flag, &fflag },
|
||||||
|
{ NULL, 't', arg_flag, &tflag },
|
||||||
|
{ "version", 0, arg_flag, &version_flag },
|
||||||
|
{ "help", 0, arg_flag, &help_flag }
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
usage (int ret)
|
||||||
|
{
|
||||||
|
arg_printusage (args,
|
||||||
|
sizeof(args) / sizeof(args[0]),
|
||||||
|
NULL,
|
||||||
|
"file1 file2|file... directory");
|
||||||
|
exit (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
char *targ;
|
||||||
|
int optind = 0;
|
||||||
|
|
||||||
|
if (getarg (args, sizeof(args) / sizeof(args[0]), argc, argv,
|
||||||
|
&optind))
|
||||||
|
usage (1);
|
||||||
|
if(help_flag)
|
||||||
|
usage(0);
|
||||||
|
if (version_flag) {
|
||||||
|
print_version (NULL);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
iamremote = (fflag || tflag);
|
||||||
|
|
||||||
fflag = tflag = 0;
|
|
||||||
while ((ch = getopt(argc, argv, OPTIONS)) != -1)
|
|
||||||
switch(ch) { /* User-visible flags. */
|
|
||||||
case '5':
|
|
||||||
usekrb5 = 1;
|
|
||||||
break;
|
|
||||||
case 'K':
|
|
||||||
usebroken = 1;
|
|
||||||
break;
|
|
||||||
case 'P':
|
|
||||||
port = optarg;
|
|
||||||
break;
|
|
||||||
case 'F':
|
|
||||||
forwardtkt = 1;
|
|
||||||
break;
|
|
||||||
case 'p':
|
|
||||||
pflag = 1;
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
iamrecursive = 1;
|
|
||||||
break;
|
|
||||||
case 'x':
|
|
||||||
doencrypt = 1;
|
|
||||||
break;
|
|
||||||
case 'z':
|
|
||||||
noencrypt = 1;
|
|
||||||
break;
|
|
||||||
/* Server options. */
|
|
||||||
case 'd':
|
|
||||||
targetshouldbedirectory = 1;
|
|
||||||
break;
|
|
||||||
case 'f': /* "from" */
|
|
||||||
iamremote = 1;
|
|
||||||
fflag = 1;
|
|
||||||
break;
|
|
||||||
case 't': /* "to" */
|
|
||||||
iamremote = 1;
|
|
||||||
tflag = 1;
|
|
||||||
break;
|
|
||||||
case '?':
|
|
||||||
default:
|
|
||||||
usage();
|
|
||||||
}
|
|
||||||
argc -= optind;
|
argc -= optind;
|
||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
@@ -118,29 +114,29 @@ main(argc, argv)
|
|||||||
remout = STDOUT_FILENO;
|
remout = STDOUT_FILENO;
|
||||||
|
|
||||||
if (fflag) { /* Follow "protocol", send data. */
|
if (fflag) { /* Follow "protocol", send data. */
|
||||||
(void)response();
|
response();
|
||||||
(void)setuid(userid);
|
setuid(userid);
|
||||||
source(argc, argv);
|
source(argc, argv);
|
||||||
exit(errs);
|
exit(errs);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tflag) { /* Receive data. */
|
if (tflag) { /* Receive data. */
|
||||||
(void)setuid(userid);
|
setuid(userid);
|
||||||
sink(argc, argv);
|
sink(argc, argv);
|
||||||
exit(errs);
|
exit(errs);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
usage();
|
usage(1);
|
||||||
if (argc > 2)
|
if (argc > 2)
|
||||||
targetshouldbedirectory = 1;
|
targetshouldbedirectory = 1;
|
||||||
|
|
||||||
remin = remout = -1;
|
remin = remout = -1;
|
||||||
/* Command to be executed on remote system using "rsh". */
|
/* Command to be executed on remote system using "rsh". */
|
||||||
(void) sprintf(cmd, "rcp%s%s%s", iamrecursive ? " -r" : "",
|
sprintf(cmd, "rcp%s%s%s", iamrecursive ? " -r" : "",
|
||||||
pflag ? " -p" : "", targetshouldbedirectory ? " -d" : "");
|
pflag ? " -p" : "", targetshouldbedirectory ? " -d" : "");
|
||||||
|
|
||||||
(void)signal(SIGPIPE, lostconn);
|
signal(SIGPIPE, lostconn);
|
||||||
|
|
||||||
if ((targ = colon(argv[argc - 1]))) /* Dest is remote host. */
|
if ((targ = colon(argv[argc - 1]))) /* Dest is remote host. */
|
||||||
toremote(targ, argc, argv);
|
toremote(targ, argc, argv);
|
||||||
@@ -153,9 +149,7 @@ main(argc, argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
toremote(targ, argc, argv)
|
toremote(char *targ, int argc, char **argv)
|
||||||
char *targ, *argv[];
|
|
||||||
int argc;
|
|
||||||
{
|
{
|
||||||
int i, len;
|
int i, len;
|
||||||
char *bp, *host, *src, *suser, *thost, *tuser;
|
char *bp, *host, *src, *suser, *thost, *tuser;
|
||||||
@@ -196,25 +190,25 @@ toremote(targ, argc, argv)
|
|||||||
suser = pwd->pw_name;
|
suser = pwd->pw_name;
|
||||||
else if (!okname(suser))
|
else if (!okname(suser))
|
||||||
continue;
|
continue;
|
||||||
(void)snprintf(bp, len,
|
snprintf(bp, len,
|
||||||
"%s %s -l %s -n %s %s '%s%s%s:%s'",
|
"%s %s -l %s -n %s %s '%s%s%s:%s'",
|
||||||
_PATH_RSH, host, suser, cmd, src,
|
_PATH_RSH, host, suser, cmd, src,
|
||||||
tuser ? tuser : "", tuser ? "@" : "",
|
tuser ? tuser : "", tuser ? "@" : "",
|
||||||
thost, targ);
|
thost, targ);
|
||||||
} else
|
} else
|
||||||
(void)snprintf(bp, len,
|
snprintf(bp, len,
|
||||||
"exec %s %s -n %s %s '%s%s%s:%s'",
|
"exec %s %s -n %s %s '%s%s%s:%s'",
|
||||||
_PATH_RSH, argv[i], cmd, src,
|
_PATH_RSH, argv[i], cmd, src,
|
||||||
tuser ? tuser : "", tuser ? "@" : "",
|
tuser ? tuser : "", tuser ? "@" : "",
|
||||||
thost, targ);
|
thost, targ);
|
||||||
(void)susystem(bp, userid);
|
susystem(bp, userid);
|
||||||
(void)free(bp);
|
free(bp);
|
||||||
} else { /* local to remote */
|
} else { /* local to remote */
|
||||||
if (remin == -1) {
|
if (remin == -1) {
|
||||||
len = strlen(targ) + CMDNEEDS + 20;
|
len = strlen(targ) + CMDNEEDS + 20;
|
||||||
if (!(bp = malloc(len)))
|
if (!(bp = malloc(len)))
|
||||||
err(1, "malloc");
|
err(1, "malloc");
|
||||||
(void)snprintf(bp, len, "%s -t %s", cmd, targ);
|
snprintf(bp, len, "%s -t %s", cmd, targ);
|
||||||
host = thost;
|
host = thost;
|
||||||
|
|
||||||
if (do_cmd(host, tuser, bp, &remin, &remout) < 0)
|
if (do_cmd(host, tuser, bp, &remin, &remout) < 0)
|
||||||
@@ -222,8 +216,8 @@ toremote(targ, argc, argv)
|
|||||||
|
|
||||||
if (response() < 0)
|
if (response() < 0)
|
||||||
exit(1);
|
exit(1);
|
||||||
(void)free(bp);
|
free(bp);
|
||||||
(void)setuid(userid);
|
setuid(userid);
|
||||||
}
|
}
|
||||||
source(1, argv+i);
|
source(1, argv+i);
|
||||||
}
|
}
|
||||||
@@ -231,9 +225,7 @@ toremote(targ, argc, argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
tolocal(argc, argv)
|
tolocal(int argc, char **argv)
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
int i, len;
|
int i, len;
|
||||||
char *bp, *host, *src, *suser;
|
char *bp, *host, *src, *suser;
|
||||||
@@ -244,12 +236,12 @@ tolocal(argc, argv)
|
|||||||
strlen(argv[argc - 1]) + 20;
|
strlen(argv[argc - 1]) + 20;
|
||||||
if (!(bp = malloc(len)))
|
if (!(bp = malloc(len)))
|
||||||
err(1, "malloc");
|
err(1, "malloc");
|
||||||
(void)snprintf(bp, len, "exec %s%s%s %s %s", _PATH_CP,
|
snprintf(bp, len, "exec %s%s%s %s %s", _PATH_CP,
|
||||||
iamrecursive ? " -PR" : "", pflag ? " -p" : "",
|
iamrecursive ? " -PR" : "", pflag ? " -p" : "",
|
||||||
argv[i], argv[argc - 1]);
|
argv[i], argv[argc - 1]);
|
||||||
if (susystem(bp, userid))
|
if (susystem(bp, userid))
|
||||||
++errs;
|
++errs;
|
||||||
(void)free(bp);
|
free(bp);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
*src++ = 0;
|
*src++ = 0;
|
||||||
@@ -269,16 +261,16 @@ tolocal(argc, argv)
|
|||||||
len = strlen(src) + CMDNEEDS + 20;
|
len = strlen(src) + CMDNEEDS + 20;
|
||||||
if ((bp = malloc(len)) == NULL)
|
if ((bp = malloc(len)) == NULL)
|
||||||
err(1, "malloc");
|
err(1, "malloc");
|
||||||
(void)snprintf(bp, len, "%s -f %s", cmd, src);
|
snprintf(bp, len, "%s -f %s", cmd, src);
|
||||||
if (do_cmd(host, suser, bp, &remin, &remout) < 0) {
|
if (do_cmd(host, suser, bp, &remin, &remout) < 0) {
|
||||||
(void)free(bp);
|
free(bp);
|
||||||
++errs;
|
++errs;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
(void)free(bp);
|
free(bp);
|
||||||
sink(1, argv + argc - 1);
|
sink(1, argv + argc - 1);
|
||||||
(void)seteuid(0);
|
seteuid(0);
|
||||||
(void)close(remin);
|
close(remin);
|
||||||
remin = remout = -1;
|
remin = remout = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -300,9 +292,7 @@ sizestr(off_t size)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
source(argc, argv)
|
source(int argc, char **argv)
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
struct stat stb;
|
struct stat stb;
|
||||||
static BUF buffer;
|
static BUF buffer;
|
||||||
@@ -341,21 +331,21 @@ syserr: run_err("%s: %s", name, strerror(errno));
|
|||||||
* Make it compatible with possible future
|
* Make it compatible with possible future
|
||||||
* versions expecting microseconds.
|
* versions expecting microseconds.
|
||||||
*/
|
*/
|
||||||
(void)snprintf(buf, sizeof(buf), "T%ld 0 %ld 0\n",
|
snprintf(buf, sizeof(buf), "T%ld 0 %ld 0\n",
|
||||||
(long)stb.st_mtime,
|
(long)stb.st_mtime,
|
||||||
(long)stb.st_atime);
|
(long)stb.st_atime);
|
||||||
(void)write(remout, buf, strlen(buf));
|
write(remout, buf, strlen(buf));
|
||||||
if (response() < 0)
|
if (response() < 0)
|
||||||
goto next;
|
goto next;
|
||||||
}
|
}
|
||||||
#define MODEMASK (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
|
#define MODEMASK (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
|
||||||
snprintf(buf, sizeof(buf), "C%04o %s %s\n",
|
snprintf(buf, sizeof(buf), "C%04o %s %s\n",
|
||||||
stb.st_mode & MODEMASK, sizestr(stb.st_size), last);
|
stb.st_mode & MODEMASK, sizestr(stb.st_size), last);
|
||||||
(void)write(remout, buf, strlen(buf));
|
write(remout, buf, strlen(buf));
|
||||||
if (response() < 0)
|
if (response() < 0)
|
||||||
goto next;
|
goto next;
|
||||||
if ((bp = allocbuf(&buffer, fd, BUFSIZ)) == NULL) {
|
if ((bp = allocbuf(&buffer, fd, BUFSIZ)) == NULL) {
|
||||||
next: (void)close(fd);
|
next: close(fd);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -370,7 +360,7 @@ next: (void)close(fd);
|
|||||||
haderr = result >= 0 ? EIO : errno;
|
haderr = result >= 0 ? EIO : errno;
|
||||||
}
|
}
|
||||||
if (haderr)
|
if (haderr)
|
||||||
(void)write(remout, bp->buf, amt);
|
write(remout, bp->buf, amt);
|
||||||
else {
|
else {
|
||||||
result = write(remout, bp->buf, amt);
|
result = write(remout, bp->buf, amt);
|
||||||
if (result != amt)
|
if (result != amt)
|
||||||
@@ -380,17 +370,15 @@ next: (void)close(fd);
|
|||||||
if (close(fd) && !haderr)
|
if (close(fd) && !haderr)
|
||||||
haderr = errno;
|
haderr = errno;
|
||||||
if (!haderr)
|
if (!haderr)
|
||||||
(void)write(remout, "", 1);
|
write(remout, "", 1);
|
||||||
else
|
else
|
||||||
run_err("%s: %s", name, strerror(haderr));
|
run_err("%s: %s", name, strerror(haderr));
|
||||||
(void)response();
|
response();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
rsource(name, statp)
|
rsource(char *name, struct stat *statp)
|
||||||
char *name;
|
|
||||||
struct stat *statp;
|
|
||||||
{
|
{
|
||||||
DIR *dirp;
|
DIR *dirp;
|
||||||
struct dirent *dp;
|
struct dirent *dp;
|
||||||
@@ -406,18 +394,18 @@ rsource(name, statp)
|
|||||||
else
|
else
|
||||||
last++;
|
last++;
|
||||||
if (pflag) {
|
if (pflag) {
|
||||||
(void)snprintf(path, sizeof(path), "T%ld 0 %ld 0\n",
|
snprintf(path, sizeof(path), "T%ld 0 %ld 0\n",
|
||||||
(long)statp->st_mtime,
|
(long)statp->st_mtime,
|
||||||
(long)statp->st_atime);
|
(long)statp->st_atime);
|
||||||
(void)write(remout, path, strlen(path));
|
write(remout, path, strlen(path));
|
||||||
if (response() < 0) {
|
if (response() < 0) {
|
||||||
closedir(dirp);
|
closedir(dirp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
(void)snprintf(path, sizeof(path),
|
snprintf(path, sizeof(path),
|
||||||
"D%04o %d %s\n", statp->st_mode & MODEMASK, 0, last);
|
"D%04o %d %s\n", statp->st_mode & MODEMASK, 0, last);
|
||||||
(void)write(remout, path, strlen(path));
|
write(remout, path, strlen(path));
|
||||||
if (response() < 0) {
|
if (response() < 0) {
|
||||||
closedir(dirp);
|
closedir(dirp);
|
||||||
return;
|
return;
|
||||||
@@ -431,19 +419,17 @@ rsource(name, statp)
|
|||||||
run_err("%s/%s: name too long", name, dp->d_name);
|
run_err("%s/%s: name too long", name, dp->d_name);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
(void)snprintf(path, sizeof(path), "%s/%s", name, dp->d_name);
|
snprintf(path, sizeof(path), "%s/%s", name, dp->d_name);
|
||||||
vect[0] = path;
|
vect[0] = path;
|
||||||
source(1, vect);
|
source(1, vect);
|
||||||
}
|
}
|
||||||
(void)closedir(dirp);
|
closedir(dirp);
|
||||||
(void)write(remout, "E\n", 2);
|
write(remout, "E\n", 2);
|
||||||
(void)response();
|
response();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
sink(argc, argv)
|
sink(int argc, char **argv)
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{
|
{
|
||||||
static BUF buffer;
|
static BUF buffer;
|
||||||
struct stat stb;
|
struct stat stb;
|
||||||
@@ -462,7 +448,7 @@ sink(argc, argv)
|
|||||||
setimes = targisdir = 0;
|
setimes = targisdir = 0;
|
||||||
mask = umask(0);
|
mask = umask(0);
|
||||||
if (!pflag)
|
if (!pflag)
|
||||||
(void)umask(mask);
|
umask(mask);
|
||||||
if (argc != 1) {
|
if (argc != 1) {
|
||||||
run_err("ambiguous target");
|
run_err("ambiguous target");
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -470,7 +456,7 @@ sink(argc, argv)
|
|||||||
targ = *argv;
|
targ = *argv;
|
||||||
if (targetshouldbedirectory)
|
if (targetshouldbedirectory)
|
||||||
verifydir(targ);
|
verifydir(targ);
|
||||||
(void)write(remout, "", 1);
|
write(remout, "", 1);
|
||||||
if (stat(targ, &stb) == 0 && S_ISDIR(stb.st_mode))
|
if (stat(targ, &stb) == 0 && S_ISDIR(stb.st_mode))
|
||||||
targisdir = 1;
|
targisdir = 1;
|
||||||
for (first = 1;; first = 0) {
|
for (first = 1;; first = 0) {
|
||||||
@@ -488,7 +474,7 @@ sink(argc, argv)
|
|||||||
|
|
||||||
if (buf[0] == '\01' || buf[0] == '\02') {
|
if (buf[0] == '\01' || buf[0] == '\02') {
|
||||||
if (iamremote == 0)
|
if (iamremote == 0)
|
||||||
(void)write(STDERR_FILENO,
|
write(STDERR_FILENO,
|
||||||
buf + 1, strlen(buf + 1));
|
buf + 1, strlen(buf + 1));
|
||||||
if (buf[0] == '\02')
|
if (buf[0] == '\02')
|
||||||
exit(1);
|
exit(1);
|
||||||
@@ -496,7 +482,7 @@ sink(argc, argv)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (buf[0] == 'E') {
|
if (buf[0] == 'E') {
|
||||||
(void)write(remout, "", 1);
|
write(remout, "", 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,7 +505,7 @@ sink(argc, argv)
|
|||||||
atime.tv_usec = strtol(cp, &cp, 10);
|
atime.tv_usec = strtol(cp, &cp, 10);
|
||||||
if (!cp || *cp++ != '\0')
|
if (!cp || *cp++ != '\0')
|
||||||
SCREWUP("atime.usec not delimited");
|
SCREWUP("atime.usec not delimited");
|
||||||
(void)write(remout, "", 1);
|
write(remout, "", 1);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (*cp != 'C' && *cp != 'D') {
|
if (*cp != 'C' && *cp != 'D') {
|
||||||
@@ -559,7 +545,7 @@ sink(argc, argv)
|
|||||||
if (!(namebuf = malloc(need)))
|
if (!(namebuf = malloc(need)))
|
||||||
run_err("%s", strerror(errno));
|
run_err("%s", strerror(errno));
|
||||||
}
|
}
|
||||||
(void)snprintf(namebuf, need, "%s%s%s", targ,
|
snprintf(namebuf, need, "%s%s%s", targ,
|
||||||
*targ ? "/" : "", cp);
|
*targ ? "/" : "", cp);
|
||||||
np = namebuf;
|
np = namebuf;
|
||||||
} else
|
} else
|
||||||
@@ -573,7 +559,7 @@ sink(argc, argv)
|
|||||||
goto bad;
|
goto bad;
|
||||||
}
|
}
|
||||||
if (pflag)
|
if (pflag)
|
||||||
(void)chmod(np, mode);
|
chmod(np, mode);
|
||||||
} else {
|
} else {
|
||||||
/* Handle copying from a read-only directory */
|
/* Handle copying from a read-only directory */
|
||||||
mod_flag = 1;
|
mod_flag = 1;
|
||||||
@@ -589,7 +575,7 @@ sink(argc, argv)
|
|||||||
np, strerror(errno));
|
np, strerror(errno));
|
||||||
}
|
}
|
||||||
if (mod_flag)
|
if (mod_flag)
|
||||||
(void)chmod(np, mode);
|
chmod(np, mode);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
omode = mode;
|
omode = mode;
|
||||||
@@ -598,9 +584,9 @@ sink(argc, argv)
|
|||||||
bad: run_err("%s: %s", np, strerror(errno));
|
bad: run_err("%s: %s", np, strerror(errno));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
(void)write(remout, "", 1);
|
write(remout, "", 1);
|
||||||
if ((bp = allocbuf(&buffer, ofd, BUFSIZ)) == NULL) {
|
if ((bp = allocbuf(&buffer, ofd, BUFSIZ)) == NULL) {
|
||||||
(void)close(ofd);
|
close(ofd);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
cp = bp->buf;
|
cp = bp->buf;
|
||||||
@@ -650,8 +636,8 @@ bad: run_err("%s: %s", np, strerror(errno));
|
|||||||
run_err("%s: set mode: %s",
|
run_err("%s: set mode: %s",
|
||||||
np, strerror(errno));
|
np, strerror(errno));
|
||||||
}
|
}
|
||||||
(void)close(ofd);
|
close(ofd);
|
||||||
(void)response();
|
response();
|
||||||
if (setimes && wrerr == NO) {
|
if (setimes && wrerr == NO) {
|
||||||
setimes = 0;
|
setimes = 0;
|
||||||
if (utimes(np, tv) < 0) {
|
if (utimes(np, tv) < 0) {
|
||||||
@@ -665,7 +651,7 @@ bad: run_err("%s: %s", np, strerror(errno));
|
|||||||
run_err("%s: %s", np, strerror(wrerrno));
|
run_err("%s: %s", np, strerror(wrerrno));
|
||||||
break;
|
break;
|
||||||
case NO:
|
case NO:
|
||||||
(void)write(remout, "", 1);
|
write(remout, "", 1);
|
||||||
break;
|
break;
|
||||||
case DISPLAYED:
|
case DISPLAYED:
|
||||||
break;
|
break;
|
||||||
@@ -677,7 +663,7 @@ screwup:
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
response()
|
response(void)
|
||||||
{
|
{
|
||||||
char ch, *cp, resp, rbuf[BUFSIZ];
|
char ch, *cp, resp, rbuf[BUFSIZ];
|
||||||
|
|
||||||
@@ -700,7 +686,7 @@ response()
|
|||||||
} while (cp < &rbuf[BUFSIZ] && ch != '\n');
|
} while (cp < &rbuf[BUFSIZ] && ch != '\n');
|
||||||
|
|
||||||
if (!iamremote)
|
if (!iamremote)
|
||||||
(void)write(STDERR_FILENO, rbuf, cp - rbuf);
|
write(STDERR_FILENO, rbuf, cp - rbuf);
|
||||||
++errs;
|
++errs;
|
||||||
if (resp == 1)
|
if (resp == 1)
|
||||||
return (-1);
|
return (-1);
|
||||||
@@ -709,15 +695,6 @@ response()
|
|||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
usage()
|
|
||||||
{
|
|
||||||
(void)fprintf(stderr, "%s\n%s\n",
|
|
||||||
"usage: rcp [-5FKpx] [-P port] f1 f2",
|
|
||||||
" rcp [-5FKprx] [-P port] f1 ... fn directory");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -730,11 +707,11 @@ run_err(const char *fmt, ...)
|
|||||||
++errs;
|
++errs;
|
||||||
if (fp == NULL && !(fp = fdopen(remout, "w")))
|
if (fp == NULL && !(fp = fdopen(remout, "w")))
|
||||||
return;
|
return;
|
||||||
(void)fprintf(fp, "%c", 0x01);
|
fprintf(fp, "%c", 0x01);
|
||||||
(void)fprintf(fp, "rcp: ");
|
fprintf(fp, "rcp: ");
|
||||||
(void)vfprintf(fp, fmt, ap);
|
vfprintf(fp, fmt, ap);
|
||||||
(void)fprintf(fp, "\n");
|
fprintf(fp, "\n");
|
||||||
(void)fflush(fp);
|
fflush(fp);
|
||||||
|
|
||||||
if (!iamremote)
|
if (!iamremote)
|
||||||
vwarnx(fmt, ap);
|
vwarnx(fmt, ap);
|
||||||
|
Reference in New Issue
Block a user