ports/net/rdist6/files/patch-src_server.c
2020-09-01 19:24:29 +00:00

200 lines
5.8 KiB
C

--- src/server.c.orig 1998-11-10 04:15:31 UTC
+++ src/server.c
@@ -62,8 +62,8 @@ char *ptarget; /* pointer to end of target name */
int catname = 0; /* cat name to target name */
char *sptarget[32]; /* stack of saved ptarget's for directories */
char *fromhost = NULL; /* Client hostname */
-static long min_freespace = 0; /* Minimium free space on a filesystem */
-static long min_freefiles = 0; /* Minimium free # files on a filesystem */
+static int64_t min_freespace = 0; /* Minimium free space on a filesystem */
+static int64_t min_freefiles = 0; /* Minimium free # files on a filesystem */
int oumask; /* Old umask */
/*
@@ -645,8 +645,8 @@ static void query(name)
case S_IFLNK:
case S_IFDIR:
case S_IFREG:
- (void) sendcmd(QC_YES, "%ld %ld %o %s %s",
- (long) stb.st_size,
+ (void) sendcmd(QC_YES, "%lld %ld %o %s %s",
+ (long long) stb.st_size,
stb.st_mtime,
stb.st_mode & 07777,
getusername(stb.st_uid, target, options),
@@ -767,9 +767,9 @@ static void recvfile(new, opts, mode, owner, group, mt
/*
* Create temporary file
*/
- if ((f = creat(new, mode)) < 0) {
+ if ((f = open(new, O_CREAT|O_TRUNC|O_WRONLY|O_EXCL, mode)) < 0) {
if (errno != ENOENT || chkparent(new, opts) < 0 ||
- (f = creat(new, mode)) < 0) {
+ (f = open(new, O_CREAT|O_TRUNC|O_WRONLY|O_EXCL, mode)) < 0) {
error("%s: create failed: %s", new, SYSERR);
(void) unlink(new);
return;
@@ -783,13 +783,13 @@ static void recvfile(new, opts, mode, owner, group, mt
wrerr = 0;
olderrno = 0;
for (i = 0; i < size; i += BUFSIZ) {
- int amt = BUFSIZ;
+ off_t amt = BUFSIZ;
cp = buf;
if (i + amt > size)
amt = size - i;
do {
- int j;
+ ssize_t j;
j = readrem(cp, amt);
if (j <= 0) {
@@ -1245,18 +1245,35 @@ static void hardlink(cmd)
return;
}
- oldname = strtok(cp, " ");
- if (oldname == NULL) {
- error("hardlink: oldname name not delimited");
- return;
- }
+{ unsigned int len;
- newname = strtok((char *)NULL, " ");
- if (newname == NULL) {
- error("hardlink: new name not specified");
- return;
- }
+ if( *( cp += strspn( cp, " " ) ) == '\0' ) {
+ error("hardlink: oldnamelen name not found");
+ return;
+ }
+ len = strtoul( cp, &cp, 10 );
+
+ if( *( cp += strspn( cp, " " ) ) == '\0' ) {
+ error("hardlink: oldname not found");
+ return;
+ }
+ oldname = cp;
+ if( strlen( cp ) < len + 2 ) {
+ error("hardlink: oldname too short or nothing following found");
+ return;
+ }
+ cp += len;
+ *cp++ = '\0';
+
+ if( *( cp += strspn( cp, " " ) ) == '\0' ) {
+ error("hardlink: newname not found");
+ return;
+ }
+
+ newname = cp;
+}
+
if (exptilde(expbuf, oldname) == NULL) {
error("hardlink: tilde expansion failed");
return;
@@ -1306,6 +1323,7 @@ static void setconfig(cmd)
{
register char *cp = cmd;
char *estr;
+ const char *errstr;
switch (*cp++) {
case SC_HOSTNAME: /* Set hostname */
@@ -1322,19 +1340,15 @@ static void setconfig(cmd)
break;
case SC_FREESPACE: /* Minimium free space */
- if (!isdigit(*cp)) {
- fatalerr("Expected digit, got '%s'.", cp);
- return;
- }
- min_freespace = (unsigned long) atoi(cp);
+ min_freespace = (int64_t)strtonum(cp, 0, LLONG_MAX, &errstr);
+ if (errstr)
+ fatalerr("Minimum free space is %s: '%s'", errstr, optarg);
break;
case SC_FREEFILES: /* Minimium free files */
- if (!isdigit(*cp)) {
- fatalerr("Expected digit, got '%s'.", cp);
- return;
- }
- min_freefiles = (unsigned long) atoi(cp);
+ min_freefiles = (int64_t)strtonum(cp, 0, LLONG_MAX, &errstr);
+ if (errstr)
+ fatalerr("Minimum free files is %s: '%s'", errstr, optarg);
break;
case SC_LOGGING: /* Logging options */
@@ -1364,7 +1378,7 @@ static void recvit(cmd, type)
time_t mtime, atime;
char *owner, *group, *file;
char new[MAXPATHLEN];
- long freespace = -1, freefiles = -1;
+ int64_t freespace = -1, freefiles = -1;
char *cp = cmd;
/*
@@ -1388,7 +1402,7 @@ static void recvit(cmd, type)
/*
* Get file size
*/
- size = strtol(cp, &cp, 10);
+ size = (off_t) strtoll(cp, &cp, 10);
if (*cp++ != ' ') {
error("recvit: size not delimited");
return;
@@ -1397,7 +1411,7 @@ static void recvit(cmd, type)
/*
* Get modification time
*/
- mtime = strtol(cp, &cp, 10);
+ mtime = (time_t) strtol(cp, &cp, 10);
if (*cp++ != ' ') {
error("recvit: mtime not delimited");
return;
@@ -1441,8 +1455,8 @@ static void recvit(cmd, type)
}
debugmsg(DM_MISC,
- "recvit: opts = %04o mode = %04o size = %d mtime = %d",
- opts, mode, size, mtime);
+ "recvit: opts = %04o mode = %04o size = %lld mtime = %d",
+ opts, mode, (long long) size, mtime);
debugmsg(DM_MISC,
"recvit: owner = '%s' group = '%s' file = '%s' catname = %d isdir = %d",
owner, group, file, catname, (type == S_IFDIR) ? 1 : 0);
@@ -1486,7 +1500,7 @@ static void recvit(cmd, type)
*/
if (min_freespace || min_freefiles) {
/* Convert file size to kilobytes */
- long fsize = (long) (size / 1024);
+ int64_t fsize = (int64_t)size / 1024;
if (getfilesysinfo(target, &freespace, &freefiles) != 0)
return;
@@ -1498,15 +1512,15 @@ static void recvit(cmd, type)
if (min_freespace && (freespace >= 0) &&
(freespace - fsize < min_freespace)) {
error(
- "%s: Not enough free space on filesystem: min %d free %d",
- target, min_freespace, freespace);
+ "%s: Not enough free space on filesystem: min %lld "
+ "free %lld", target, min_freespace, freespace);
return;
}
if (min_freefiles && (freefiles >= 0) &&
(freefiles - 1 < min_freefiles)) {
error(
- "%s: Not enough free files on filesystem: min %d free %d",
- target, min_freefiles, freefiles);
+ "%s: Not enough free files on filesystem: min %lld free "
+ "%lld", target, min_freefiles, freefiles);
return;
}
}