*/
#include "includes.h"
-RCSID("$OpenBSD: scp.c,v 1.60 2001/03/02 18:54:31 deraadt Exp $");
+RCSID("$OpenBSD: scp.c,v 1.64 2001/03/28 20:04:38 stevesk Exp $");
#include "xmalloc.h"
#include "atomicio.h"
char *buf;
} BUF;
-extern int iamremote;
-
BUF *allocbuf(BUF *, int, int);
char *colon(char *);
void lostconn(int);
#define CMDNEEDS 64
char cmd[CMDNEEDS]; /* must hold "rcp -r -p -d\0" */
-int main(int, char *[]);
int response(void);
void rsource(char *, struct stat *);
void sink(int, char *[]);
iamremote = 1;
tflag = 1;
break;
- case '?':
default:
usage();
}
goto next;
}
#define FILEMODEMASK (S_ISUID|S_ISGID|S_IRWXU|S_IRWXG|S_IRWXO)
+#ifdef HAVE_LONG_LONG_INT
+ snprintf(buf, sizeof buf, "C%04o %lld %s\n",
+ (u_int) (stb.st_mode & FILEMODEMASK),
+ (long long) stb.st_size, last);
+#else
+ /* XXX: Handle integer overflow? */
snprintf(buf, sizeof buf, "C%04o %lu %s\n",
(u_int) (stb.st_mode & FILEMODEMASK),
(u_long) stb.st_size, last);
+#endif
+
if (verbose_mode) {
fprintf(stderr, "Sending file modes: %s", buf);
fflush(stderr);
closedir(dirp);
return;
}
- while ((dp = readdir(dirp))) {
+ while ((dp = readdir(dirp)) != NULL) {
if (dp->d_ino == 0)
continue;
if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
if (*cp++ != ' ')
SCREWUP("mode not delimited");
- for (size = 0; *cp >= '0' && *cp <= '9';)
+ for (size = 0; isdigit(*cp);)
size = size * 10 + (*cp++ - '0');
if (*cp++ != ' ')
SCREWUP("size not delimited");
continue;
} else if (j <= 0) {
run_err("%s", j ? strerror(errno) :
- "dropped connection");
+ "dropped connection");
exit(1);
}
amt -= j;
if (chmod(np, omode))
#endif /* HAVE_FCHMOD */
run_err("%s: set mode: %s",
- np, strerror(errno));
+ np, strerror(errno));
} else {
if (!exists && omode != mode)
#ifdef HAVE_FCHMOD
if (chmod(np, omode & ~mask))
#endif /* HAVE_FCHMOD */
run_err("%s: set mode: %s",
- np, strerror(errno));
+ np, strerror(errno));
}
if (close(ofd) == -1) {
wrerr = YES;
setimes = 0;
if (utimes(np, tv) < 0) {
run_err("%s: set times: %s",
- np, strerror(errno));
+ np, strerror(errno));
wrerr = DISPLAYED;
}
}
usage()
{
(void) fprintf(stderr, "usage: scp "
- "[-pqrvC46] [-S ssh] [-P port] [-c cipher] [-i identity] f1 f2; or:\n"
- " scp [options] f1 ... fn directory\n");
+ "[-pqrvBC46] [-S ssh] [-P port] [-c cipher] [-i identity] f1 f2\n"
+ " or: scp [options] f1 ... fn directory\n");
exit(1);
}