aboutsummaryrefslogtreecommitdiff
path: root/lib/mk-ca-bundle.pl
diff options
context:
space:
mode:
authorAsk Bjørn Hansen <ask@develooper.com>2011-03-14 06:52:33 +0100
committerDaniel Stenberg <daniel@haxx.se>2011-03-14 10:20:21 +0100
commit3e00af34c8b271cb946b2a8a4977b599dcf2d9e3 (patch)
tree53348c80caa55f4078a3c7bc4c6635e2e52141b8 /lib/mk-ca-bundle.pl
parent3eac14b43c62717cc14733aba6827c0c3d38dc9a (diff)
mk-ca-bundle.pl: Only download if modified
Only download and convert the certdata to the ca-bundle.crt if Mozilla changed the data The Perl LWP module (which in a bit of a circular reference is used by mk-ca-bundle.pl) is now indirectly using this script. I made this small tweak to make it easier to automatically maintain the generated ca-bundle.crt file in version control.
Diffstat (limited to 'lib/mk-ca-bundle.pl')
-rwxr-xr-xlib/mk-ca-bundle.pl25
1 files changed, 13 insertions, 12 deletions
diff --git a/lib/mk-ca-bundle.pl b/lib/mk-ca-bundle.pl
index d054f0044..07f092001 100755
--- a/lib/mk-ca-bundle.pl
+++ b/lib/mk-ca-bundle.pl
@@ -75,20 +75,22 @@ my $crt = $ARGV[0] || 'ca-bundle.crt';
my $txt = substr($url, rindex($url, '/') + 1);
$txt =~ s/\?.*//;
-if (!$opt_n || !-e $txt) {
+my $resp;
+
+unless ($opt_n and -e $txt) {
print "Downloading '$txt' ...\n" if (!$opt_q);
+
my $ua = new LWP::UserAgent(agent => "$0/$version");
- my $req = new HTTP::Request('GET', $url);
- my $res = $ua->request($req);
- if ($res->is_success) {
- open(TXT,">$txt") or die "Couldn't open $txt: $!";
- print TXT $res->content . "\n";
- close(TXT) or die "Couldn't close $txt: $!";
- } else {
- die $res->status_line;
- }
+ $resp = $ua->mirror($url, 'certdata.txt');
}
+if ($resp && $resp->code eq '304') {
+ print "Not modified\n" unless $opt_q;
+ exit 0;
+}
+
+my $currentdate = scalar gmtime($resp ? $resp->last_modified : (stat($txt))[9]);
+
if ($opt_b && -e $crt) {
my $bk = 1;
while (-e "$crt.~${bk}~") {
@@ -98,13 +100,12 @@ if ($opt_b && -e $crt) {
}
my $format = $opt_t ? "plain text and " : "";
-my $currentdate = scalar gmtime() . " UTC";
open(CRT,">$crt") or die "Couldn't open $crt: $!";
print CRT <<EOT;
##
## $crt -- Bundle of CA Root Certificates
##
-## Converted at: ${currentdate}
+## Certificate data from Mozilla as of: ${currentdate}
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates