diff options
| author | Cy Schubert <cy@FreeBSD.org> | 2020-09-01 19:24:29 +0000 |
|---|---|---|
| committer | Cy Schubert <cy@FreeBSD.org> | 2020-09-01 19:24:29 +0000 |
| commit | 83f7ef0a7d829d3eb99ded3f35d7518b0059d16d (patch) | |
| tree | 5a01d08c2e0587fee7688eee1885990c297355d2 /net/rdist6/files/patch-src_server.c | |
| parent | rdist6 fails to hardlink files with whitespace in them. This (diff) | |
Regen patches using makepatch.
Notes
Notes:
svn path=/head/; revision=547290
Diffstat (limited to 'net/rdist6/files/patch-src_server.c')
| -rw-r--r-- | net/rdist6/files/patch-src_server.c | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/net/rdist6/files/patch-src_server.c b/net/rdist6/files/patch-src_server.c new file mode 100644 index 000000000000..63af164e889d --- /dev/null +++ b/net/rdist6/files/patch-src_server.c @@ -0,0 +1,199 @@ +--- 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; + } + } |
