[prev in list] [next in list] [prev in thread] [next in thread]
List: openbsd-tech
Subject: Re: [patch] ftp(1): change mtime for http/https links
From: Jesper Wallin <jesper () ifconfig ! se>
Date: 2017-09-24 17:25:33
Message-ID: 20170924172533.GA4406 () nostromo ! ifconfig ! se
[Download RAW message or body]
On Sat, Sep 23, 2017 at 11:50:46PM +0200, Jesper Wallin wrote:
> Woups, seems like I managed to break ftp(1) in the installer due to
> pledge being a bit too tight. Here is an updated version of the patch
> and with Philips changes as well.
...and hopefully a final version, sorry for the noise.
Changed the order of the pledge promises to their canonical order as
given by the manual and removed some empty lines. (thanks anton@)
I will of course still bump this once we're out of beta.
Index: fetch.c
===================================================================
RCS file: /cvs/src/usr.bin/ftp/fetch.c,v
retrieving revision 1.163
diff -u -p -r1.163 fetch.c
--- fetch.c 7 Mar 2017 08:00:23 -0000 1.163
+++ fetch.c 24 Sep 2017 08:06:26 -0000
@@ -210,6 +210,7 @@ url_get(const char *origline, const char
int status;
int save_errno;
const size_t buflen = 128 * 1024;
+ time_t mtime = -1;
direction = "received";
@@ -647,7 +648,7 @@ noslash:
if (pledge("stdio rpath inet dns tty", NULL) == -1)
err(1, "pledge");
} else {
- if (pledge("stdio rpath wpath cpath inet dns tty", NULL) == -1)
+ if (pledge("stdio rpath wpath cpath inet fattr dns tty", NULL) == -1)
err(1, "pledge");
}
}
@@ -860,6 +861,12 @@ noslash:
if (restart_point)
filesize += restart_point;
#endif /* !SMALL */
+#define LASTMOD "Last-Modified: "
+ } else if (strncasecmp(cp, LASTMOD, sizeof(LASTMOD) - 1) == 0) {
+ struct tm tm;
+ cp += sizeof(LASTMOD) - 1;
+ if (strptime(cp, "%a, %d %b %Y %T %z", &tm) != NULL)
+ mtime = mktime(&tm);
#define LOCATION "Location: "
} else if (isredirect &&
strncasecmp(cp, LOCATION, sizeof(LOCATION) - 1) == 0) {
@@ -1043,8 +1050,19 @@ cleanup_url_get:
fclose(fin);
else if (s != -1)
close(s);
- if (out >= 0 && out != fileno(stdout))
+ if (out >= 0 && out != fileno(stdout)) {
+ if (mtime != -1) {
+ struct timespec tv[2];
+ tv[0].tv_nsec = UTIME_NOW;
+ tv[1].tv_sec = mtime;
+ tv[1].tv_nsec = 0;
+ if (futimens(out, tv) == -1)
+ fprintf(ttyout,
+ "Can't change modification time on %s to %s\n",
+ savefile, ctime(&mtime));
+ }
close(out);
+ }
free(buf);
free(proxyhost);
free(proxyurl);
Index: ftp.c
===================================================================
RCS file: /cvs/src/usr.bin/ftp/ftp.c,v
retrieving revision 1.100
diff -u -p -r1.100 ftp.c
--- ftp.c 22 Aug 2016 16:27:00 -0000 1.100
+++ ftp.c 24 Sep 2017 08:06:26 -0000
@@ -1217,8 +1217,8 @@ break2:
ut.modtime = mtime;
if (utime(local, &ut) == -1)
fprintf(ttyout,
- "Can't change modification time on %s to %s",
- local, asctime(localtime(&mtime)));
+ "Can't change modification time on %s to %s\n",
+ local, ctime(&mtime));
}
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic