=================================================================== RCS file: /cvs/cvsweb/cvsweb.cgi,v retrieving revision 1.1.1.23 retrieving revision 1.1.1.27 diff -u -p -r1.1.1.23 -r1.1.1.27 --- cvsweb/cvsweb.cgi 2001/03/22 19:52:43 1.1.1.23 +++ cvsweb/cvsweb.cgi 2001/07/06 09:54:57 1.1.1.27 @@ -42,8 +42,8 @@ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # -# $zId: cvsweb.cgi,v 1.106 2001/03/10 01:16:27 hnordstrom Exp $ -# $Idaemons: /home/cvs/cvsweb/cvsweb.cgi,v 1.68 2001/03/22 19:46:59 knu Exp $ +# $zId: cvsweb.cgi,v 1.110 2001/06/29 09:29:36 hnordstrom Exp $ +# $Idaemons: /home/cvs/cvsweb/cvsweb.cgi,v 1.78 2001/07/06 09:49:01 knu Exp $ # ### @@ -85,7 +85,7 @@ use vars qw ( $tabstop $state $annTable $sel $curbranch @HideModules $module $use_descriptions %descriptions @mytz $dwhere $moddate $use_moddate $has_zlib $gzip_open - $allow_tar @tar_options @gzip_options @cvs_options + $allow_tar @tar_options @gzip_options @zip_options @cvs_options $LOG_FILESEPARATOR $LOG_REVSEPARATOR ); @@ -139,8 +139,8 @@ sub forbidden_module($); ##### Start of Configuration Area ######## delete $ENV{PATH}; -$cvsweb_revision = '1.106' . '.' . (split(/ /, - q$Idaemons: /home/cvs/cvsweb/cvsweb.cgi,v 1.68 2001/03/22 19:46:59 knu Exp $ +$cvsweb_revision = '1.110' . '.' . (split(/ /, + q$Idaemons: /home/cvs/cvsweb/cvsweb.cgi,v 1.78 2001/07/06 09:49:01 knu Exp $ ))[2]; use File::Basename; @@ -170,7 +170,7 @@ $allow_version_select = 1; # These are defined to allow checking with perl -cw @CVSrepositories = @CVSROOT = %CVSROOT = %MIRRORS = %DEFAULTVALUE = %ICONS = %MTYPES = -%tags = %alltags = @tabcolors = (); +%tags = %alltags = @tabcolors = %fileinfo = (); $cvstreedefault = $body_tag = $body_tag_for_src = $logo = $defaulttitle = $address = $long_intro = $short_instruction = $shortLogLen = @@ -518,7 +518,8 @@ if ($input{tarball}) { &fatal("403 Forbidden", "Downloading tarballs is prohibited.") unless $allow_tar; my($module) = ($where =~ m,^/?(.*),); # untaint - $module =~ s,/[^/]*$,,; + $module =~ s,/([^/]*)$,,; + my($ext) = ($1 =~ /(\.tar\.gz|\.zip)$/); my($basedir) = ($module =~ m,([^/]+)$,); if ($basedir eq '' || $module eq '') { @@ -530,30 +531,34 @@ if ($input{tarball}) { mkdir($tmpdir, 0700) or &fatal("500 Internal Error", "Unable to make temporary directory: $!"); - my $fatal = ''; + my @fatal; - while (1) { - my $tag = (exists $input{only_with_tag} && length $input{only_with_tag}) - ? $input{only_with_tag} : "HEAD"; + my $tag = (exists $input{only_with_tag} && length $input{only_with_tag}) + ? $input{only_with_tag} : "HEAD"; - system $CMD{cvs}, @cvs_options, '-Qd', $cvsroot, 'export', '-r', $tag, '-d', "$tmpdir/$basedir", $module - and $fatal = "500 Internal Error","cvs co failure: $!: $module" - && last; - + if (system $CMD{cvs}, @cvs_options, '-Qd', $cvsroot, 'export', '-r', $tag, '-d', "$tmpdir/$basedir", $module) { + @fatal = ("500 Internal Error", "cvs co failure: $!: $module"); + } else { $| = 1; # Essential to get the buffering right. - print "Content-type: application/x-gzip\r\n\r\n"; + if ($ext eq '.tar.gz') { + print "Content-type: application/x-gzip\r\n\r\n"; - system "$CMD{tar} @tar_options -cf - -C $tmpdir $basedir | $CMD{gzip} @gzip_options -c" - and $fatal = "500 Internal Error","tar zc failure: $!: $basedir" - && last; + system "$CMD{tar} @tar_options -cf - -C $tmpdir $basedir | $CMD{gzip} @gzip_options -c" + and @fatal = ("500 Internal Error", "tar zc failure: $!: $basedir"); + } elsif ($ext eq '.zip' && $CMD{zip}) { + print "Content-type: application/zip\r\n\r\n"; - last; + system "cd $tmpdir && $CMD{zip} @zip_options -r - $basedir" + and @fatal = ("500 Internal Error", "zip failure: $!: $basedir"); + } else { + @fatal = ("500 Internal Error", "unsupported file type"); + } } system $CMD{rm}, '-rf', $tmpdir if -d $tmpdir; - &fatal($fatal) if $fatal; + &fatal(@fatal) if @fatal; exit; } @@ -748,10 +753,10 @@ if (-d $fullname) { else { print &link($backicon, $url); } - print " ", &link("Previous Directory", $url); + print " ", &link("Parent Directory", $url); } else { - $url = urlencode($_) . "/$query"; + $url = './' . urlencode($_) . "/$query"; print ""; if ($nofilelinks) { print $diricon; @@ -814,7 +819,7 @@ if (-d $fullname) { } elsif (s/,v$//) { $fileurl = ($attic ? "Attic/" : "") . urlencode($_); - $url = $fileurl . $query; + $url = './' . $fileurl . $query; my $rev = ''; my $date = ''; my $log = ''; @@ -908,13 +913,19 @@ if (-d $fullname) { if (defined($basefile) && $basefile ne '') { print "
\n", - "
", - &link("Download this directory in tarball", - # Mangle the filename so browsers show a reasonable - # filename to download. - "$basefile.tar.gz$query". - ($query ? "&" : "?")."tarball=1"), - "
"; + "
Download this directory in "; + # Mangle the filename so browsers show a reasonable + # filename to download. + print &link("tarball", + "./$basefile.tar.gz$query". + ($query ? "&" : "?")."tarball=1"); + if ($CMD{zip}) { + print " or ", + &link("zip archive", + "./$basefile.zip$query". + ($query ? "&" : "?")."tarball=1"); + } + print "
"; } } @@ -1106,11 +1117,11 @@ sub findLastModifiedSubdirs(@) { sub htmlify_sub(&$) { (my $proc, local $_) = @_; - local @_ = split(m`(]+>[^<]*)`i); + my @a = split(m`(]+>[^<]*)`i); my $linked; my $result = ''; - while (($_, $linked) = splice(@_, 0, 2)) { + while (($_, $linked) = splice(@a, 0, 2)) { &$proc(); $result .= $_ if defined($_); $result .= $linked if defined($linked); @@ -1226,7 +1237,7 @@ sub spacedHtmlText($;$) { sub link($$) { my($name, $url) = @_; - $url =~ s/:/sprintf("%%%02x", ord($&))/eg; + $url =~ s/:/sprintf("%%%02x", ord($&))/eg if $url =~ /^[^a-z]/; # relative sprintf '%s', hrefquote($url), $name; } @@ -1319,7 +1330,7 @@ sub search_path($) { return "$d/$command" if -x "$d/$command"; } - $command; + ''; } sub getMimeTypeFromSuffix($) { @@ -1622,6 +1633,7 @@ sub doCheckout($$) { # Parse CVS header my ($revision, $filename, $cvsheader); + $filename = ""; while(<$fh>) { last if (/^\*\*\*\*/); $revision = $1 if (/^VERS: (.*)$/); @@ -1705,7 +1717,11 @@ sub cvswebMarkup($$$) { print ""; } else { - print "\n", <$filehandle>; + print "<PRE>"; + while (<$filehandle>) { + print htmlquote($_); + } + print "</PRE>"; } } @@ -1772,7 +1788,7 @@ sub doDiff($$$$$$) { while (($re1, $re2) = each %funcline_regexp) { if ($fullname =~ /$re1/) { - push @difftype, '-F', '$re2'; + push @difftype, '-F', $re2; last; } } @@ -2664,6 +2680,7 @@ sub human_readable_diff($){ if ($difftxt =~ /^@@/) { ($oldline,$newline,$funname) = $difftxt =~ /@@ \-([0-9]+).*\+([0-9]+).*@@(.*)/; + $funname = htmlquote($funname); print "<tr bgcolor=\"$diffcolorHeading\"><td width=\"50%\">"; print "<table width=\"100%\" border=1 cellpadding=5><tr><td><b>Line $oldline</b>"; print "&nbsp;<font size=-1>$funname</font></td></tr></table>"; @@ -2758,7 +2775,7 @@ sub human_readable_diff($){ sub navigateHeader($$$$$) { my ($swhere,$path,$filename,$rev,$title) = @_; $swhere = "" if ($swhere eq $scriptwhere); - $swhere = urlencode($filename) if ($swhere eq ""); + $swhere = './' . urlencode($filename) if ($swhere eq ""); print <<EOF; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> @@ -2773,7 +2790,7 @@ $body_tag_for_src EOF print &link($backicon, "$swhere$query#rev$rev"); - print "</a> <b>Return to ", &link("$filename","$swhere$query#rev$rev")," CVS log"; + print "<b>Return to ", &link($filename,"$swhere$query#rev$rev")," CVS log"; print "</b> $fileicon</td>"; print "<td align=right>$diricon <b>Up to ", &clickablePath($path, 1), "</b></td>"; @@ -2982,8 +2999,6 @@ sub download_url($$;$) { $url .= "?rev=$revision"; $url .= '&content-type=' . urlencode($mimetype) if (defined($mimetype)); - $url =~ s/:/sprintf("%%%02x", ord($&))/eg; - $url; } @@ -2993,6 +3008,8 @@ sub download_link($$$;$) { my ($url, $revision, $textlink, $mimetype) = @_; my ($fullurl) = download_url($url, $revision, $mimetype); + $fullurl =~ s/:/sprintf("%%%02x", ord($&))/eg; + printf '<A HREF="%s"', hrefquote("$fullurl$barequery"); if ($open_extern_window && (!defined($mimetype) || $mimetype ne "text/x-cvsweb-markup")) { @@ -3189,7 +3206,7 @@ sub link_tags($) { my ($fileurl,$filename); ($filename = $where) =~ s/^.*\///; - $fileurl = urlencode($filename); + $fileurl = './' . urlencode($filename); foreach my $sym (split(", ", $tags)) { $ret .= ",\n" if ($ret ne "");