From 4c4780f4772acb5abcc57b03d114c5e1364af63a Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Wed, 14 Aug 2002 22:54:20 +0000 Subject: Create .meta files with the expiry date of pages. Also put the expiry date in HTML meta headers. Make indexfilebasename a configure option. Code cleanup: renamed some functions. --- Echolot/Config.pm | 6 ++- Echolot/Stats.pm | 105 +++++++++++++++++++++--------------------- Echolot/Thesaurus.pm | 49 +++----------------- Echolot/Tools.pm | 83 ++++++++++++++++++++++++++++++++- NEWS | 6 +++ README | 5 +- doc/pingd.conf.pod | 25 +++++++++- templates/clist.html | 3 +- templates/echolot.html | 3 +- templates/mlist.html | 3 +- templates/mlist2.html | 3 +- templates/rlist-clear.html | 3 +- templates/rlist-dsa.html | 3 +- templates/rlist-rsa.html | 3 +- templates/rlist.html | 3 +- templates/rlist2-clear.html | 3 +- templates/rlist2-dsa.html | 3 +- templates/rlist2-rsa.html | 3 +- templates/rlist2.html | 3 +- templates/thesaurusindex.html | 3 +- 20 files changed, 205 insertions(+), 113 deletions(-) diff --git a/Echolot/Config.pm b/Echolot/Config.pm index 62a1c00..c5a1c77 100644 --- a/Echolot/Config.pm +++ b/Echolot/Config.pm @@ -1,7 +1,7 @@ package Echolot::Config; # (c) 2002 Peter Palfrader -# $Id: Config.pm,v 1.38 2002/08/12 03:06:53 weasel Exp $ +# $Id: Config.pm,v 1.39 2002/08/14 22:54:20 weasel Exp $ # =pod @@ -111,6 +111,7 @@ sub init($) { thesaurusdir => 'results/thesaurus', thesaurusindexfile => 'results/thesaurus/index.html', private_resultdir => 'results.private', + indexfilebasename => 'echolot.html', gnupghome => 'gnupghome', gnupg => '', mixhome => 'mixhome', @@ -123,6 +124,9 @@ sub init($) { commands_file => 'commands.txt', pidfile => 'pingd.pid', + write_meta_files => 1, + meta_extension => '.meta', + storage => { backend => 'File', File => { diff --git a/Echolot/Stats.pm b/Echolot/Stats.pm index 5d64f35..6c9c001 100644 --- a/Echolot/Stats.pm +++ b/Echolot/Stats.pm @@ -1,7 +1,7 @@ package Echolot::Stats; # (c) 2002 Peter Palfrader -# $Id: Stats.pm,v 1.27 2002/08/10 01:36:47 weasel Exp $ +# $Id: Stats.pm,v 1.28 2002/08/14 22:54:20 weasel Exp $ # =pod @@ -23,30 +23,26 @@ use Carp qw{cluck}; use constant DAYS => 12; use constant SECS_PER_DAY => 24 * 60 * 60; use English; -use HTML::Template; use Statistics::Distrib::Normal qw{}; -my @WDAY = qw{Sun Mon Tue Wed Thu Fri Sat}; -my @MON = qw{Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec}; - my $NORMAL = new Statistics::Distrib::Normal; $NORMAL->mu(0); $NORMAL->sigma(1); -sub makeDate() { +sub make_date() { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(); sprintf("%s %02d %s %4d %02d:%02d:%02d GMT", - $WDAY[$wday], + Echolot::Tools::make_dayname($wday), $mday, - $MON[$mon], + Echolot::Tools::make_monthname($mon), $year + 1900, $hour, $min, $sec); }; -sub makeMinHr($$) { +sub make_min_hr($$) { my ($sec, $includesec) = @_; my ($s, $m, $h); @@ -270,46 +266,30 @@ sub read_file($;$) { return $result; }; -sub write_file($$;$) { - my ($filebasename, $html_template, $output) = @_; +sub write_file($$$$) { + my ($filebasename, $html_template, $expires, $output) = @_; - my $filename; - if (defined $output) { - $filename = $filebasename.'.txt'; - open(F, '>'.$filename) or - cluck("Cannot open $filename: $!\n"), + my $filename = $filebasename.'.txt'; + open(F, '>'.$filename) or + cluck("Cannot open $filename: $!\n"), + return 0; + print F $output; + close (F); + if (defined $expires) { + Echolot::Tools::write_meta_information($filename, + Expires => time + $expires) or + cluck ("Error while writing meta information for $filename"), return 0; - print F $output; - close (F); }; - return 1 unless defined $html_template; - my $template = HTML::Template->new( - filename => $html_template, - strict => 0, - die_on_bad_params => 0, - global_vars => 1 ); if (defined $output) { $output =~ s/&/&/g; $output =~ s/"/"/g; $output =~ s//>/g; - $template->param ( list => $output ); }; - $template->param ( CURRENT_TIMESTAMP => scalar gmtime() ); - $template->param ( SITE_NAME => Echolot::Config::get()->{'sitename'} ); - $template->param ( seperate_rlist => Echolot::Config::get()->{'seperate_rlists'} ); - $template->param ( combined_list => Echolot::Config::get()->{'combined_list'} ); - $template->param ( thesaurus => Echolot::Config::get()->{'thesaurus'} ); - $template->param ( version => Echolot::Globals::get()->{'version'} ); - - $filename = $filebasename.'.html'; - open(F, '>'.$filename) or - cluck("Cannot open $filename: $!\n"), - return 0; - print F $template->output(); - close (F); + Echolot::Tools::write_HTML_file($filebasename.'.html', $html_template, $expires, output => $output); return 1; }; @@ -322,7 +302,7 @@ sub build_mlist1($$$$$;$) { $output .= sprintf "\nBroken type-I remailer chains:\n$broken1\n" if (defined $broken1); $output .= sprintf "\nBroken type-II remailer chains:\n$broken2\n" if (defined $broken2); - $output .= sprintf "Last update: %s\n", makeDate(); + $output .= sprintf "Last update: %s\n", make_date(); $output .= sprintf "mixmaster history latency uptime\n"; $output .= sprintf "--------------------------------------------\n"; @@ -330,11 +310,11 @@ sub build_mlist1($$$$$;$) { $output .= sprintf "%-14s %-12s %8s %6.2f%%\n", substr($remailer->{'nick'},0,14), build_list1_latencystr($remailer->{'stats'}->{'latency_day'}), - makeMinHr($remailer->{'stats'}->{'avr_latency'}, 1), + make_min_hr($remailer->{'stats'}->{'avr_latency'}, 1), $remailer->{'stats'}->{'avr_reliability'} * 100; }; - write_file($filebasename, $html_template, $output) or + write_file($filebasename, $html_template, Echolot::Config::get()->{'buildstats'}, $output) or cluck("writefile failed"), return 0; return 1; @@ -353,7 +333,7 @@ sub build_rlist1($$$$$;$) { $output .= sprintf "\nBroken type-II remailer chains:\n$broken2\n" if (defined $broken2); $output .= sprintf "\n"; - $output .= sprintf "Last update: %s\n", makeDate(); + $output .= sprintf "Last update: %s\n", make_date(); $output .= sprintf "remailer email address history latency uptime\n"; $output .= sprintf "-----------------------------------------------------------------------\n"; @@ -362,12 +342,12 @@ sub build_rlist1($$$$$;$) { substr($remailer->{'nick'},0,8), substr($remailer->{'address'},0,32), build_list1_latencystr($remailer->{'stats'}->{'latency_day'}), - makeMinHr($remailer->{'stats'}->{'avr_latency'}, 1), + make_min_hr($remailer->{'stats'}->{'avr_latency'}, 1), $remailer->{'stats'}->{'avr_reliability'} * 100; }; - write_file($filebasename, $html_template, $output) or + write_file($filebasename, $html_template, Echolot::Config::get()->{'buildstats'}, $output) or cluck("writefile failed"), return 0; return 1; @@ -380,7 +360,7 @@ sub build_list2($$$$$;$) { my $output = ''; $output .= sprintf "Stats-Version: 2.0\n"; - $output .= sprintf "Generated: %s\n", makeDate(); + $output .= sprintf "Generated: %s\n", make_date(); $output .= sprintf "Mixmaster Latent-Hist Latent Uptime-Hist Uptime Options\n"; $output .= sprintf "------------------------------------------------------------------------\n"; @@ -388,7 +368,7 @@ sub build_list2($$$$$;$) { $output .= sprintf "%-12s %-12s %6s %-12s %5.1f%% %s\n", substr($remailer->{'nick'},0,12), build_list2_latencystr($remailer->{'stats'}->{'latency_day'}), - makeMinHr($remailer->{'stats'}->{'avr_latency'}, 0), + make_min_hr($remailer->{'stats'}->{'avr_latency'}, 0), build_list2_reliabilitystr($remailer->{'stats'}->{'reliability_day'}), $remailer->{'stats'}->{'avr_reliability'} * 100, build_list2_capsstr($remailer->{'caps'}); @@ -403,7 +383,7 @@ sub build_list2($$$$$;$) { $output .= $remailer->{'caps'}."\n" if defined $remailer->{'caps'}; } - write_file($filebasename, $html_template, $output) or + write_file($filebasename, $html_template, Echolot::Config::get()->{'buildstats'}, $output) or cluck("writefile failed"), return 0; return 1; @@ -415,7 +395,7 @@ sub build_clist($$$$$;$) { my $output = ''; $output .= sprintf "Stats-Version: 2.0.1\n"; - $output .= sprintf "Generated: %s\n", makeDate(); + $output .= sprintf "Generated: %s\n", make_date(); $output .= sprintf "Mixmaster Latent-Hist Latent Uptime-Hist Uptime Options Type\n"; $output .= sprintf "------------------------------------------------------------------------------------\n"; @@ -431,7 +411,7 @@ sub build_clist($$$$$;$) { $output .= sprintf "%-12s %-12s %6s %-12s %5.1f%% %s %s\n", $nick, build_list2_latencystr($all->{$nick}->{$type}->{'stats'}->{'latency_day'}), - makeMinHr($all->{$nick}->{$type}->{'stats'}->{'avr_latency'}, 0), + make_min_hr($all->{$nick}->{$type}->{'stats'}->{'avr_latency'}, 0), build_list2_reliabilitystr($all->{$nick}->{$type}->{'stats'}->{'reliability_day'}), $all->{$nick}->{$type}->{'stats'}->{'avr_reliability'} * 100, build_list2_capsstr($all->{$nick}->{$type}->{'caps'}), @@ -450,7 +430,7 @@ sub build_clist($$$$$;$) { }; } - write_file($filebasename, $html_template, $output) or + write_file($filebasename, $html_template, Echolot::Config::get()->{'buildstats'}, $output) or cluck("writefile failed"), return 0; return 1; @@ -565,25 +545,33 @@ sub build_lists() { build_clist( $pubclist, $broken1, $broken2, $sameop, Echolot::Config::get()->{'resultdir'}.'/'.'clist', Echolot::Config::get()->{'templates'}->{'clist'}); }; - - write_file(Echolot::Config::get()->{'resultdir'}.'/'.'echolot', Echolot::Config::get()->{'templates'}->{'indexfile'}); + Echolot::Tools::write_HTML_file( + Echolot::Config::get()->{'resultdir'}.'/'.Echolot::Config::get()->{'indexfilebasename'}, + Echolot::Config::get()->{'templates'}->{'indexfile'}, + Echolot::Config::get()->{'buildstats'}); }; sub build_mixring() { + my @filenames; + my $filename = Echolot::Config::get()->{'resultdir'}.'/pubring.mix'; + push @filenames, $filename; open(F, '>'.$filename) or cluck("Cannot open $filename: $!\n"), return 0; $filename = Echolot::Config::get()->{'resultdir'}.'/type2.list'; + push @filenames, $filename; open(T2L, '>'.$filename) or cluck("Cannot open $filename: $!\n"), return 0; $filename = Echolot::Config::get()->{'private_resultdir'}.'/pubring.mix'; + push @filenames, $filename; open(F_PRIV, '>'.$filename) or cluck("Cannot open $filename: $!\n"), return 0; $filename = Echolot::Config::get()->{'private_resultdir'}.'/type2.list'; + push @filenames, $filename; open(T2L_PRIV, '>'.$filename) or cluck("Cannot open $filename: $!\n"), return 0; @@ -625,6 +613,13 @@ sub build_mixring() { close(T2L); close(F_PRIV); close(T2L_PRIV); + + for my $filename (@filenames) { + Echolot::Tools::writeMetaInformation($filename, + Expires => time + Echolot::Config::get()->{'buildkeys'}) or + cluck ("Error while writing meta information for $filename"), + return 0; + }; }; @@ -722,6 +717,12 @@ sub build_pgpring_export($$$$) { return 0; print F $stdout; close F; + + Echolot::Tools::writeMetaInformation($file, + Expires => time + Echolot::Config::get()->{'buildkeys'}) or + cluck ("Error while writing meta information for $file"), + return 0; + return 1; }; diff --git a/Echolot/Thesaurus.pm b/Echolot/Thesaurus.pm index fed040e..201258b 100644 --- a/Echolot/Thesaurus.pm +++ b/Echolot/Thesaurus.pm @@ -1,7 +1,7 @@ package Echolot::Thesaurus; # (c) 2002 Peter Palfrader -# $Id: Thesaurus.pm,v 1.10 2002/08/07 23:33:19 weasel Exp $ +# $Id: Thesaurus.pm,v 1.11 2002/08/14 22:54:20 weasel Exp $ # =pod @@ -19,7 +19,6 @@ This package provides necessary functions for the thesaurus. use strict; use Carp qw{cluck}; use English; -use HTML::Template; sub save_thesaurus($$$) { @@ -100,48 +99,12 @@ sub build_thesaurus() { my @data = map {$data->{$_}} (sort { $data->{$a}->{'nick'} cmp $data->{$b}->{'nick'} } keys (%$data)); - my $template = HTML::Template->new( - filename => Echolot::Config::get()->{'templates'}->{'thesaurusindexfile'}, - global_vars => 1 ); - $template->param ( remailers => \@data ); - $template->param ( CURRENT_TIMESTAMP => scalar gmtime() ); - $template->param ( SITE_NAME => Echolot::Config::get()->{'sitename'} ); - - my $file = Echolot::Config::get()->{'thesaurusindexfile'}; - open (F, ">$file") or - cluck ("Cannot open '$file': $!"), - return 0; - print F $template->output(); - close F; - - return; - - print F 'Thesaurus

Thesaurus

'."\n"; - print F "\n"; - - for my $addr (sort { $data->{$a}->{'nick'} cmp $data->{$b}->{'nick'} } keys (%$data)) { - printf F ''."\n", - $data->{$addr}->{'nick'}, - $addr, - defined ($data->{$addr}->{'conf'}) ? - sprintf('%s
%s
', $data->{$addr}->{'conf'}->{'href'}, $data->{$addr}->{'conf'}->{'date'}, - $data->{$addr}->{'conf'}->{'time'}) : 'N/A', - defined ($data->{$addr}->{'help'}) ? - sprintf('%s
%s
', $data->{$addr}->{'help'}->{'href'}, $data->{$addr}->{'help'}->{'date'}, - $data->{$addr}->{'help'}->{'time'}) : 'N/A', - defined ($data->{$addr}->{'key'}) ? - sprintf('%s
%s
', $data->{$addr}->{'key'}->{'href'}, $data->{$addr}->{'key'}->{'date'}, - $data->{$addr}->{'key'}->{'time'}) : 'N/A', - defined ($data->{$addr}->{'stats'}) ? - sprintf('%s
%s
', $data->{$addr}->{'stats'}->{'href'}, $data->{$addr}->{'stats'}->{'date'}, - $data->{$addr}->{'stats'}->{'time'}) : 'N/A', - defined ($data->{$addr}->{'adminkey'}) ? - sprintf('%s
%s
', $data->{$addr}->{'adminkey'}->{'href'}, $data->{$addr}->{'adminkey'}->{'date'}, - $data->{$addr}->{'adminkey'}->{'time'}) : 'N/A', - }; - print F '
nickAddressconfhelpkeystatsadminkey
%s%s%s%s%s%s%s
'; - close (F); + Echolot::Tools::write_HTML_file( + Echolot::Config::get()->{'thesaurusindexfile'}, + Echolot::Config::get()->{'templates'}->{'thesaurusindexfile'}, + Echolot::Config::get()->{'buildthesaurus'}, + remailers => \@data); }; diff --git a/Echolot/Tools.pm b/Echolot/Tools.pm index e4bed61..dcdbab4 100644 --- a/Echolot/Tools.pm +++ b/Echolot/Tools.pm @@ -1,7 +1,7 @@ package Echolot::Tools; # (c) 2002 Peter Palfrader -# $Id: Tools.pm,v 1.7 2002/07/17 17:06:44 weasel Exp $ +# $Id: Tools.pm,v 1.8 2002/08/14 22:54:20 weasel Exp $ # =pod @@ -17,6 +17,7 @@ Echolot::Tools - Tools for echolot use strict; use Carp qw{cluck}; +use HTML::Template; use Digest::MD5 qw{}; sub hash($) { @@ -141,6 +142,86 @@ sub send_message(%) { return 1; }; +sub make_monthname($) { + my ($month) = @_; + my @MON = qw{Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec}; + return $MON[$month]; +}; + +sub make_dayname($) { + my ($day) = @_; + my @WDAY = qw{Sun Mon Tue Wed Thu Fri Sat}; + return $WDAY[$day]; +}; + +sub date822($) { + my ($date) = @_; + + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime($date); + # 14 Aug 2002 17:11:12 +0100 + return sprintf("%s, %02d %s %d %02d:%02d:%02d +0000", + make_dayname($wday), + $mday, + make_monthname($mon), + $year + 1900, + $hour, + $min, + $sec); +}; + +sub write_meta_information($%) { + my ($file, %data) = @_; + + return 1 unless Echolot::Config::get()->{'write_meta_files'}; + + $file .= Echolot::Config::get()->{'meta_extension'}; + open (F, ">$file") or + cluck ("Cannot open $file: $!"), + return 0; + if (defined $data{'Expires'}) { + my $date = date822($data{'Expires'}); + print F "Expires: $date\n"; + }; + close(F); + return 1; +}; + +sub write_HTML_file($$;$%) { + my ($file, $template_file, $expire, %templateparams) = @_; + + my $template = HTML::Template->new( + filename => $template_file, + strict => 0, + die_on_bad_params => 0, + global_vars => 1 ); + $template->param ( %templateparams ); + $template->param ( CURRENT_TIMESTAMP => scalar gmtime() ); + $template->param ( SITE_NAME => Echolot::Config::get()->{'sitename'} ); + $template->param ( seperate_rlist => Echolot::Config::get()->{'seperate_rlists'} ); + $template->param ( combined_list => Echolot::Config::get()->{'combined_list'} ); + $template->param ( thesaurus => Echolot::Config::get()->{'thesaurus'} ); + $template->param ( version => Echolot::Globals::get()->{'version'} ); + $template->param ( expires => date822( time + $expire )); + + open(F, '>'.$file) or + cluck("Cannot open $file: $!\n"), + return 0; + print F $template->output() or + cluck("Cannot print to $file: $!\n"), + return 0; + close (F) or + cluck("Cannot close $file: $!\n"), + return 0; + + if (defined $expire) { + write_meta_information($file, + Expires => time + $expire) or + cluck ("Error while writing meta information for $file"), + return 0; + }; + + return 1; +}; 1; # vim: set ts=4 shiftwidth=4: diff --git a/NEWS b/NEWS index 84c57a8..99e5c86 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +Changes in version + * Create .meta files with the expiry date of pages. + * Also put the expiry date in HTML meta headers. + * Make indexfilebasename a configure option. + * Code cleanup: renamed some functions. + Changes in version 2.0beta28 - 2002-08-13 * Write a standard mix.cfg configuration file for mixmaster. It only sets PUBRING and TYPE2LIST. Needed for systems where diff --git a/README b/README index 9c233d1..21c5b53 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -$Id: README,v 1.25 2002/08/12 03:06:53 weasel Exp $ +$Id: README,v 1.26 2002/08/14 22:54:20 weasel Exp $ ##################################################################### ## R E A D M E F O R E C H O L O T ########################### ##################################################################### @@ -143,7 +143,8 @@ o In the tools directory you find the o Echolot puts its stats in the result directory. It also produces an index file name echolot.html. If you want to have it as your default index page, symlink it to index.html with something like - »ln -s echolot.html index.html« in the result directory. + »ln -s echolot.html index.html« in the result directory or set + the indexfilebasename option to index.html. CONFIGURATION ------------- diff --git a/doc/pingd.conf.pod b/doc/pingd.conf.pod index cd5a499..1735ae7 100644 --- a/doc/pingd.conf.pod +++ b/doc/pingd.conf.pod @@ -381,6 +381,13 @@ show set to false are shown here too). =item B +The file to write the index.html to (relative to the result directory). + + Default: 'indexfilebasename' => 'echolot.html', + Example: 'indexfilebasename' => 'index.html', + +=item B + The directory which is used as temporal GnuPG home for all keyring and encryption/decryption actions. @@ -441,6 +448,7 @@ File listing broken type I remailer chains. If it does not exist, the part is skipped in generated stats. Otherwise its content is copied in verbatim. Default: 'broken1' => 'broken1.txt', + Example content: (havenco cmeclax) (frog3 nycrem) @@ -450,7 +458,7 @@ File listing broken type II remailer chains. If it does not exist, the part is skipped in generated stats. Otherwise its content is copied in verbatim. Default: 'broken2' => 'broken2.txt', - Example conent: + Example content: (freedom lcs) (* xganon) @@ -467,6 +475,21 @@ generated stats. Otherwise its content is copied in verbatim. =back +=head2 MISCELLANEOUS + +=item B [bool] + +Whether to write meta files for each created file. These files include +meta information for http servers and http clients like the date when +a specific page expires. + + Default: 'write_meta_files' => 1, + +=item B + +The extension that such metafiles (see above) should have. + + Default: 'meta_extension' => '.meta', =head2 PINGING TYPES diff --git a/templates/clist.html b/templates/clist.html index 2dd7398..a7174f4 100644 --- a/templates/clist.html +++ b/templates/clist.html @@ -1,7 +1,8 @@ Remailers (combined list) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/echolot.html b/templates/echolot.html index cf2804a..59e326a 100644 --- a/templates/echolot.html +++ b/templates/echolot.html @@ -1,7 +1,8 @@ Remailer Reliability Stats [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/mlist.html b/templates/mlist.html index 1c9f3b8..57833e4 100644 --- a/templates/mlist.html +++ b/templates/mlist.html @@ -1,7 +1,8 @@ Mixmaster Remailers [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/mlist2.html b/templates/mlist2.html index b705e23..45d24f5 100644 --- a/templates/mlist2.html +++ b/templates/mlist2.html @@ -1,7 +1,8 @@ Mixmaster Remailers (v2) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/rlist-clear.html b/templates/rlist-clear.html index 0ae3568..b4f80a0 100644 --- a/templates/rlist-clear.html +++ b/templates/rlist-clear.html @@ -1,7 +1,8 @@ Cypherpunk Remailers (cleartext only) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/rlist-dsa.html b/templates/rlist-dsa.html index 10bd5b7..3226399 100644 --- a/templates/rlist-dsa.html +++ b/templates/rlist-dsa.html @@ -1,7 +1,8 @@ Cypherpunk Remailers (DSA only) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/rlist-rsa.html b/templates/rlist-rsa.html index 0491bdf..dfc3888 100644 --- a/templates/rlist-rsa.html +++ b/templates/rlist-rsa.html @@ -1,7 +1,8 @@ Cypherpunk Remailers (RSA only) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/rlist.html b/templates/rlist.html index ec56616..0c59312 100644 --- a/templates/rlist.html +++ b/templates/rlist.html @@ -1,7 +1,8 @@ Cypherpunk Remailers [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/rlist2-clear.html b/templates/rlist2-clear.html index 8352aa8..46a1209 100644 --- a/templates/rlist2-clear.html +++ b/templates/rlist2-clear.html @@ -1,7 +1,8 @@ Cypherpunk Remailers (v2, cleartext only) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/rlist2-dsa.html b/templates/rlist2-dsa.html index f51367e..7d186f3 100644 --- a/templates/rlist2-dsa.html +++ b/templates/rlist2-dsa.html @@ -1,7 +1,8 @@ Cypherpunk Remailers (v2, DSA only) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/rlist2-rsa.html b/templates/rlist2-rsa.html index 3ab0eca..8977d23 100644 --- a/templates/rlist2-rsa.html +++ b/templates/rlist2-rsa.html @@ -1,7 +1,8 @@ Cypherpunk Remailers (v2, RSA only) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/rlist2.html b/templates/rlist2.html index e1cf15a..97bd522 100644 --- a/templates/rlist2.html +++ b/templates/rlist2.html @@ -1,7 +1,8 @@ Cypherpunk Remailers (v2) [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Remailer Reliability Stats []

diff --git a/templates/thesaurusindex.html b/templates/thesaurusindex.html index fc4d181..08b8bf8 100644 --- a/templates/thesaurusindex.html +++ b/templates/thesaurusindex.html @@ -1,7 +1,8 @@ Thesaurus [<TMPL_VAR NAME="SITE_NAME">] - + "> +

Thesaurus []

-- cgit v1.2.3