summaryrefslogtreecommitdiffstats
path: root/crypto/heimdal/appl/rcp/rcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/heimdal/appl/rcp/rcp.c')
-rw-r--r--crypto/heimdal/appl/rcp/rcp.c84
1 files changed, 34 insertions, 50 deletions
diff --git a/crypto/heimdal/appl/rcp/rcp.c b/crypto/heimdal/appl/rcp/rcp.c
index d4a062d..bfa700e 100644
--- a/crypto/heimdal/appl/rcp/rcp.c
+++ b/crypto/heimdal/appl/rcp/rcp.c
@@ -92,6 +92,7 @@ main(int argc, char **argv)
char *targ;
int optind = 0;
+ setprogname(argv[0]);
if (getarg (args, sizeof(args) / sizeof(args[0]), argc, argv,
&optind))
usage (1);
@@ -133,8 +134,9 @@ main(int argc, char **argv)
remin = remout = -1;
/* Command to be executed on remote system using "rsh". */
- sprintf(cmd, "rcp%s%s%s", iamrecursive ? " -r" : "",
- pflag ? " -p" : "", targetshouldbedirectory ? " -d" : "");
+ snprintf(cmd, sizeof(cmd),
+ "rcp%s%s%s", iamrecursive ? " -r" : "",
+ pflag ? " -p" : "", targetshouldbedirectory ? " -d" : "");
signal(SIGPIPE, lostconn);
@@ -151,7 +153,7 @@ main(int argc, char **argv)
void
toremote(char *targ, int argc, char **argv)
{
- int i, len;
+ int i;
char *bp, *host, *src, *suser, *thost, *tuser;
*targ++ = 0;
@@ -178,37 +180,34 @@ toremote(char *targ, int argc, char **argv)
if (*src == 0)
src = ".";
host = strchr(argv[i], '@');
- len = strlen(_PATH_RSH) + strlen(argv[i]) +
- strlen(src) + (tuser ? strlen(tuser) : 0) +
- strlen(thost) + strlen(targ) + CMDNEEDS + 20;
- if (!(bp = malloc(len)))
- err(1, "malloc");
if (host) {
- *host++ = 0;
+ *host++ = '\0';
suser = argv[i];
if (*suser == '\0')
suser = pwd->pw_name;
else if (!okname(suser))
continue;
- snprintf(bp, len,
+ asprintf(&bp,
"%s %s -l %s -n %s %s '%s%s%s:%s'",
_PATH_RSH, host, suser, cmd, src,
tuser ? tuser : "", tuser ? "@" : "",
thost, targ);
- } else
- snprintf(bp, len,
+ } else {
+ asprintf(&bp,
"exec %s %s -n %s %s '%s%s%s:%s'",
_PATH_RSH, argv[i], cmd, src,
tuser ? tuser : "", tuser ? "@" : "",
thost, targ);
+ }
+ if (bp == NULL)
+ err (1, "malloc");
susystem(bp, userid);
free(bp);
} else { /* local to remote */
if (remin == -1) {
- len = strlen(targ) + CMDNEEDS + 20;
- if (!(bp = malloc(len)))
- err(1, "malloc");
- snprintf(bp, len, "%s -t %s", cmd, targ);
+ asprintf(&bp, "%s -t %s", cmd, targ);
+ if (bp == NULL)
+ err (1, "malloc");
host = thost;
if (do_cmd(host, tuser, bp, &remin, &remout) < 0)
@@ -227,18 +226,16 @@ toremote(char *targ, int argc, char **argv)
void
tolocal(int argc, char **argv)
{
- int i, len;
+ int i;
char *bp, *host, *src, *suser;
for (i = 0; i < argc - 1; i++) {
if (!(src = colon(argv[i]))) { /* Local to local. */
- len = strlen(_PATH_CP) + strlen(argv[i]) +
- strlen(argv[argc - 1]) + 20;
- if (!(bp = malloc(len)))
- err(1, "malloc");
- snprintf(bp, len, "exec %s%s%s %s %s", _PATH_CP,
+ asprintf(&bp, "exec %s%s%s %s %s", _PATH_CP,
iamrecursive ? " -PR" : "", pflag ? " -p" : "",
argv[i], argv[argc - 1]);
+ if (bp == NULL)
+ err (1, "malloc");
if (susystem(bp, userid))
++errs;
free(bp);
@@ -258,10 +255,9 @@ tolocal(int argc, char **argv)
else if (!okname(suser))
continue;
}
- len = strlen(src) + CMDNEEDS + 20;
- if ((bp = malloc(len)) == NULL)
- err(1, "malloc");
- snprintf(bp, len, "%s -f %s", cmd, src);
+ asprintf(&bp, "%s -f %s", cmd, src);
+ if (bp == NULL)
+ err (1, "malloc");
if (do_cmd(host, suser, bp, &remin, &remout) < 0) {
free(bp);
++errs;
@@ -275,22 +271,6 @@ tolocal(int argc, char **argv)
}
}
-static char *
-sizestr(off_t size)
-{
- static char ss[32];
- char *p;
- ss[sizeof(ss) - 1] = '\0';
- for(p = ss + sizeof(ss) - 2; p >= ss; p--) {
- *p = '0' + size % 10;
- size /= 10;
- if(size == 0)
- break;
- }
- return ss;
-}
-
-
void
source(int argc, char **argv)
{
@@ -339,8 +319,10 @@ syserr: run_err("%s: %s", name, strerror(errno));
goto next;
}
#define MODEMASK (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)
- snprintf(buf, sizeof(buf), "C%04o %s %s\n",
- stb.st_mode & MODEMASK, sizestr(stb.st_size), last);
+ snprintf(buf, sizeof(buf), "C%04o %lu %s\n",
+ stb.st_mode & MODEMASK,
+ (unsigned long)stb.st_size,
+ last);
write(remout, buf, strlen(buf));
if (response() < 0)
goto next;
@@ -531,7 +513,7 @@ sink(int argc, char **argv)
if (*cp++ != ' ')
SCREWUP("mode not delimited");
- for (size = 0; isdigit(*cp);)
+ for (size = 0; isdigit((unsigned char)*cp);)
size = size * 10 + (*cp++ - '0');
if (*cp++ != ' ')
SCREWUP("size not delimited");
@@ -702,21 +684,23 @@ run_err(const char *fmt, ...)
{
static FILE *fp;
va_list ap;
- va_start(ap, fmt);
++errs;
if (fp == NULL && !(fp = fdopen(remout, "w")))
return;
+ va_start(ap, fmt);
fprintf(fp, "%c", 0x01);
fprintf(fp, "rcp: ");
vfprintf(fp, fmt, ap);
fprintf(fp, "\n");
fflush(fp);
-
- if (!iamremote)
- vwarnx(fmt, ap);
-
va_end(ap);
+
+ if (!iamremote) {
+ va_start(ap, fmt);
+ vwarnx(fmt, ap);
+ va_end(ap);
+ }
}
/*
OpenPOWER on IntegriCloud