[BACK]Return to cvsweb.cgi CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / cvsweb

Diff for /cvsweb/cvsweb.cgi between version 1.1.1.20 and 1.1.1.21

version 1.1.1.20, 2001/01/03 03:36:03 version 1.1.1.21, 2001/01/12 04:17:16
Line 43 
Line 43 
 # SUCH DAMAGE.  # SUCH DAMAGE.
 #  #
 # $zId: cvsweb.cgi,v 1.104 2000/11/01 22:05:12 hnordstrom Exp $  # $zId: cvsweb.cgi,v 1.104 2000/11/01 22:05:12 hnordstrom Exp $
 # $kId: cvsweb.cgi,v 1.57 2001/01/03 02:55:30 knu Exp $  # $kId: cvsweb.cgi,v 1.63 2001/01/11 23:42:01 knu Exp $
 #  #
 ###  ###
   
Line 52  require 5.000;
Line 52  require 5.000;
 use strict;  use strict;
   
 use vars qw (  use vars qw (
     $config $allow_version_select $verbose      $mydir $uname $config $allow_version_select $verbose
     @CVSrepositories @CVSROOT %CVSROOT %CVSROOTdescr      @CVSrepositories @CVSROOT %CVSROOT %CVSROOTdescr
     %MIRRORS %DEFAULTVALUE %ICONS %MTYPES      %MIRRORS %DEFAULTVALUE %ICONS %MTYPES
     @DIFFTYPES %DIFFTYPES @LOGSORTKEYS %LOGSORTKEYS      @DIFFTYPES %DIFFTYPES @LOGSORTKEYS %LOGSORTKEYS
Line 67  use vars qw (
Line 67  use vars qw (
     %input $query $barequery $sortby $bydate $byrev $byauthor      %input $query $barequery $sortby $bydate $byrev $byauthor
     $bylog $byfile $defaultDiffType $logsort $cvstree $cvsroot      $bylog $byfile $defaultDiffType $logsort $cvstree $cvsroot
     $mimetype $charset $defaultTextPlain $defaultViewable      $mimetype $charset $defaultTextPlain $defaultViewable
     $allow_compress $GZIPBIN $backicon $diricon $fileicon      $command_path %CMD $allow_compress
       $backicon $diricon $fileicon
     $fullname $newname $cvstreedefault      $fullname $newname $cvstreedefault
     $body_tag $body_tag_for_src $logo $defaulttitle $address      $body_tag $body_tag_for_src $logo $defaulttitle $address
     $long_intro $short_instruction $shortLogLen      $long_intro $short_instruction $shortLogLen
Line 82  use vars qw (
Line 83  use vars qw (
     $navigationHeaderColor $tableBorderColor $markupLogColor      $navigationHeaderColor $tableBorderColor $markupLogColor
     $tabstop $state $annTable $sel $curbranch @HideModules      $tabstop $state $annTable $sel $curbranch @HideModules
     $module $use_descriptions %descriptions @mytz $dwhere $moddate      $module $use_descriptions %descriptions @mytz $dwhere $moddate
     $use_moddate $has_zlib $gzip_open $allow_tar @tar_options @cvs_options      $use_moddate $has_zlib $gzip_open
       $allow_tar @tar_options @gzip_options @cvs_options
     $LOG_FILESEPARATOR $LOG_REVSEPARATOR      $LOG_FILESEPARATOR $LOG_REVSEPARATOR
 );  );
   
Line 98  sub revcmp($$);
Line 100  sub revcmp($$);
 sub fatal($$);  sub fatal($$);
 sub redirect($);  sub redirect($);
 sub safeglob($);  sub safeglob($);
   sub search_path($);
 sub getMimeTypeFromSuffix($);  sub getMimeTypeFromSuffix($);
 sub head($;$);  sub head($;$);
 sub scan_directives(@);  sub scan_directives(@);
Line 133  sub link_tags($);
Line 136  sub link_tags($);
 sub forbidden_module($);  sub forbidden_module($);
   
 ##### Start of Configuration Area ########  ##### Start of Configuration Area ########
   delete $ENV{PATH};
   
 use File::Basename;  use File::Basename;
   
   ($mydir) = (dirname($0) =~ /(.*)/); # untaint
   
 # == EDIT this ==  # == EDIT this ==
 # Locations to search for user configuration, in order:  # Locations to search for user configuration, in order:
 for (  for (
      (dirname $0) . '/cvsweb.conf',       "$mydir/cvsweb.conf",
      '/usr/local/etc/cvsweb/cvsweb.conf'       '/usr/local/etc/cvsweb/cvsweb.conf'
     ) {      ) {
     if (defined($_) && -r $_) {      if (defined($_) && -r $_) {
         ($config) = /(.*)/; # untaint          $config = $_;
         last;          last;
     }      }
 }  }
Line 235  $verbose = $v;
Line 242  $verbose = $v;
 $checkoutMagic = "~checkout~";  $checkoutMagic = "~checkout~";
 $pathinfo = defined($ENV{PATH_INFO}) ? $ENV{PATH_INFO} : '';  $pathinfo = defined($ENV{PATH_INFO}) ? $ENV{PATH_INFO} : '';
 $where = $pathinfo;  $where = $pathinfo;
 $where =~ tr|/|/|s;  $doCheckout = ($where =~ m|^/$checkoutMagic/|);
 $doCheckout = ($where =~ /^\/$checkoutMagic/);  $where =~ s|^/$checkoutMagic/|/|;
 $where =~ s|^/($checkoutMagic)?||;  $where =~ s|^/||;
 $where =~ s|/$||;  
 $scriptname = defined($ENV{SCRIPT_NAME}) ? $ENV{SCRIPT_NAME} : '';  $scriptname = defined($ENV{SCRIPT_NAME}) ? $ENV{SCRIPT_NAME} : '';
 $scriptname =~ s|^/?|/|;  $scriptname =~ s|^/*|/|;
 $scriptname =~ s|/+$||;  
 $scriptwhere = $scriptname;  # Let's workaround thttpd's stupidness..
 if ($where) {  if ($scriptname =~ m|/$|) {
     $scriptwhere .= '/' . urlencode($where);      $pathinfo .= '/';
       my $re = quotemeta $pathinfo;
       $scriptname =~ s/$re$//;
 }  }
   
   $scriptwhere = $scriptname;
   $scriptwhere .= '/' . urlencode($where);
   $where = '/' if ($where eq '');
   
 $is_mod_perl = defined($ENV{MOD_PERL});  $is_mod_perl = defined($ENV{MOD_PERL});
   
 # in lynx, it it very annoying to have two links  # in lynx, it it very annoying to have two links
Line 460  $mimetype = &getMimeTypeFromSuffix ($fullname);
Line 472  $mimetype = &getMimeTypeFromSuffix ($fullname);
 $defaultTextPlain = ($mimetype eq "text/plain");  $defaultTextPlain = ($mimetype eq "text/plain");
 $defaultViewable = $allow_markup && viewable($mimetype);  $defaultViewable = $allow_markup && viewable($mimetype);
   
 # search for GZIP if compression allowed  my $rewrite = 0;
 # We've to find out if the GZIP-binary exists .. otherwise  
 # ge get an Internal Server Error if we try to pipe the  if ($pathinfo =~ m|//|) {
 # output through the nonexistent gzip ..      $pathinfo =~ y|/|/|s;
 # any more elegant ways to prevent this are welcome!      $rewrite = 1;
 if ($allow_compress && $maycompress && !$has_zlib) {  
     foreach (split(/:/, $ENV{PATH})) {  
         if (-x "$_/gzip") {  
             $GZIPBIN = "$_/gzip";  
             last;  
         }  
     }  
 }  }
   
 if (-d $fullname) {  if (-d $fullname && $pathinfo !~ m|/$|) {
     #      $pathinfo .= '/';
     # ensure, that directories always end with (exactly) one '/'      $rewrite = 1;
     # to allow relative URL's. If they're not, make a redirect.  
     ##  
     if (!($pathinfo =~ m|/$|) || ($pathinfo =~ m |/{2,}$|)) {  
         redirect("$scriptwhere/$query");  
     }  
     else {  
         $where .= '/';  
         $scriptwhere .= '/';  
     }  
 }  }
   
   if (!-d $fullname && $pathinfo =~ m|/$|) {
       chop $pathinfo;
       $rewrite = 1;
   }
   
   if ($rewrite) {
       redirect($scriptname . urlencode($pathinfo) . $query);
   }
   
   undef $rewrite;
   
 if (!-d $cvsroot) {  if (!-d $cvsroot) {
     &fatal("500 Internal Error",'$CVSROOT not found!<P>The server on which the CVS tree lives is probably down.  Please try again in a few minutes.');      &fatal("500 Internal Error",'$CVSROOT not found!<P>The server on which the CVS tree lives is probably down.  Please try again in a few minutes.');
 }  }
Line 526  if ($input{tarball}) {
Line 533  if ($input{tarball}) {
         my $tag = (exists $input{only_with_tag} && length $input{only_with_tag})          my $tag = (exists $input{only_with_tag} && length $input{only_with_tag})
           ? $input{only_with_tag} : "HEAD";            ? $input{only_with_tag} : "HEAD";
   
         system "cvs", @cvs_options, "-Qd", $cvsroot, "export", "-r", $tag, "-d", "$tmpdir/$basedir", $module          system $CMD{cvs}, @cvs_options, '-Qd', $cvsroot, 'export', '-r', $tag, '-d', "$tmpdir/$basedir", $module
           and $fatal = "500 Internal Error","cvs co failure: $!: $module"            and $fatal = "500 Internal Error","cvs co failure: $!: $module"
             && last;              && last;
   
Line 534  if ($input{tarball}) {
Line 541  if ($input{tarball}) {
   
         print "Content-type: application/x-gzip\r\n\r\n";          print "Content-type: application/x-gzip\r\n\r\n";
   
         system "tar", @tar_options, "-zcf", "-", "-C", $tmpdir, $basedir          system "$CMD{tar} @tar_options -cf - -C $tmpdir $basedir | $CMD{gzip} @gzip_options -c"
           and $fatal = "500 Internal Error","tar zc failure: $!: $basedir"            and $fatal = "500 Internal Error","tar zc failure: $!: $basedir"
             && last;              && last;
   
         last;          last;
     }      }
   
     system "rm", "-rf", $tmpdir if -d $tmpdir;      system $CMD{rm}, '-rf', $tmpdir if -d $tmpdir;
   
     &fatal($fatal) if $fatal;      &fatal($fatal) if $fatal;
   
Line 1006  if (-d $fullname) {
Line 1013  if (-d $fullname) {
         # Assume it's a module name with a potential path following it.          # Assume it's a module name with a potential path following it.
         $xtra = (($module = $where) =~ s|/.*||) ? $& : '';          $xtra = (($module = $where) =~ s|/.*||) ? $& : '';
         # Is there an indexed version of modules?          # Is there an indexed version of modules?
         if (open($fh, "$cvsroot/CVSROOT/modules")) {          if (open($fh, "< $cvsroot/CVSROOT/modules")) {
             while (<$fh>) {              while (<$fh>) {
                 if (/^(\S+)\s+(\S+)/o && $module eq $1                  if (/^(\S+)\s+(\S+)/o && $module eq $1
                     && -d "$cvsroot/$2" && $module ne $2) {                      && -d "$cvsroot/$2" && $module ne $2) {
Line 1213  sub spacedHtmlText($;$) {
Line 1220  sub spacedHtmlText($;$) {
 }  }
   
 sub link($$) {  sub link($$) {
         my($name, $where) = @_;          my($name, $url) = @_;
   
         sprintf '<A HREF="%s">%s</A>', hrefquote($where), $name;          sprintf '<A HREF="%s">%s</A>', hrefquote($url), $name;
 }  }
   
 sub revcmp($$) {  sub revcmp($$) {
Line 1297  sub safeglob($) {
Line 1304  sub safeglob($) {
         @results;          @results;
 }  }
   
   sub search_path($) {
       my($command) = @_;
       my $d;
   
       for $d (split(/:/, $command_path)) {
           return "$d/$command" if -x "$d/$command";
       }
   
       $command;
   }
   
 sub getMimeTypeFromSuffix($) {  sub getMimeTypeFromSuffix($) {
     my ($fullname) = @_;      my ($fullname) = @_;
     my ($mimetype, $suffix);      my ($mimetype, $suffix);
Line 1370  sub doAnnotate($$) {
Line 1388  sub doAnnotate($$) {
     my $reader = do {local(*FH);};      my $reader = do {local(*FH);};
     my $writer = do {local(*FH);};      my $writer = do {local(*FH);};
   
     # make sure the revisions a wellformed, for security      # make sure the revisions are wellformed, for security
     # reasons ..      # reasons ..
     if ($rev =~ /[^\w.]/) {      if ($rev =~ /[^\w.]/) {
         &fatal("404 Not Found",          &fatal("404 Not Found",
Line 1581  sub doCheckout($$) {
Line 1599  sub doCheckout($$) {
     #      #
     # Safely for a child process to read from.      # Safely for a child process to read from.
     if (! open($fh, "-|")) { # child      if (! open($fh, "-|")) { # child
       open(STDERR, ">&STDOUT"); # Redirect stderr to stdout          open(STDERR, ">&STDOUT"); # Redirect stderr to stdout
       exec("cvs", @cvs_options, "-d", $cvsroot, "co", "-p", $revopt, $where);          exec($CMD{cvs}, @cvs_options, '-d', $cvsroot, 'co', '-p', $revopt, $where);
     }      }
   
     if (eof($fh)) {      if (eof($fh)) {
Line 1762  sub doDiff($$$$$$) {
Line 1780  sub doDiff($$$$$$) {
         }          }
         if (! open($fh, "-|")) { # child          if (! open($fh, "-|")) { # child
             open(STDERR, ">&STDOUT"); # Redirect stderr to stdout              open(STDERR, ">&STDOUT"); # Redirect stderr to stdout
             exec("rcsdiff",@difftype,"-r$rev1","-r$rev2",$fullname);              exec($CMD{rcsdiff}, @difftype, "-r$rev1", "-r$rev2", $fullname);
         }          }
         if ($human_readable) {          if ($human_readable) {
             http_header();              http_header();
Line 1846  sub getDirLogs($$@) {
Line 1864  sub getDirLogs($$@) {
     if (defined($tag)) {      if (defined($tag)) {
         #can't use -r<tag> as - is allowed in tagnames, but misinterpreated by rlog..          #can't use -r<tag> as - is allowed in tagnames, but misinterpreated by rlog..
         if (! open($fh, "-|")) {          if (! open($fh, "-|")) {
                 open(STDERR, '>/dev/null'); # rlog may complain; ignore.              open(STDERR, '>/dev/null'); # rlog may complain; ignore.
                 exec('rlog', @files);              exec($CMD{rlog}, @files);
         }          }
     }      }
     else {      else {
         my $kidpid = open($fh, "-|");          if (! open($fh, "-|")) {
         if (! $kidpid) {              open(STDERR, '>/dev/null'); # rlog may complain; ignore.
                 open(STDERR, '>/dev/null'); # rlog may complain; ignore.              exec($CMD{rlog}, '-r', @files);
                 exec('rlog', '-r', @files);  
         }          }
     }      }
     $state = "start";      $state = "start";
Line 1984  again:
Line 2001  again:
     }      }
     if ($. == 0) {      if ($. == 0) {
         fatal("500 Internal Error",          fatal("500 Internal Error",
               "Failed to spawn GNU rlog on <em>'".join(", ", @files)."'</em><p>did you set the <b>\$ENV{PATH}</b> in your configuration file correctly ?");                "Failed to spawn GNU rlog on <em>'".join(", ", @files)."'</em><p>Did you set the <b>\$command_path</b> in your configuration file correctly ? (Currently '$command_path'");
     }      }
     close($fh);      close($fh);
 }  }
Line 2012  sub readLog($;$) {
Line 2029  sub readLog($;$) {
   
         print("Going to rlog '$fullname'\n") if ($verbose);          print("Going to rlog '$fullname'\n") if ($verbose);
         if (! open($fh, "-|")) { # child          if (! open($fh, "-|")) { # child
                 if ($revision ne '') {              if ($revision ne '') {
                         exec("rlog",$revision,$fullname);                  exec($CMD{rlog}, $revision, $fullname);
                 }              }
                 else {              else {
                         exec("rlog",$fullname);                  exec($CMD{rlog}, $fullname);
                 }              }
         }          }
         while (<$fh>) {          while (<$fh>) {
             print if ($verbose);              print if ($verbose);
Line 2738  sub navigateHeader($$$$$) {
Line 2755  sub navigateHeader($$$$$) {
     print qq`<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">`;      print qq`<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">`;
     print "<HTML>\n<HEAD>\n";      print "<HTML>\n<HEAD>\n";
     print qq`<META name="robots" content="nofollow">\n`;      print qq`<META name="robots" content="nofollow">\n`;
     print '<!-- CVSweb $zRevision: 1.104 $  $kRevision: 1.57 $ -->';      print '<!-- CVSweb $zRevision: 1.104 $  $kRevision: 1.63 $ -->';
     print "\n<TITLE>$path$filename - $title - $rev</TITLE></HEAD>\n";      print "\n<TITLE>$path$filename - $title - $rev</TITLE></HEAD>\n";
     print  "$body_tag_for_src\n";      print  "$body_tag_for_src\n";
     print "<table width=\"100%\" border=0 cellspacing=0 cellpadding=1 bgcolor=\"$navigationHeaderColor\">";      print "<table width=\"100%\" border=0 cellspacing=0 cellpadding=1 bgcolor=\"$navigationHeaderColor\">";
Line 3092  sub http_header(;$) {
Line 3109  sub http_header(;$) {
             print "Content-type: $content_type\r\n";              print "Content-type: $content_type\r\n";
     }      }
     if ($allow_compress && $maycompress) {      if ($allow_compress && $maycompress) {
         if ($has_zlib || (defined($GZIPBIN) && open(GZIP, "|$GZIPBIN -1 -c"))) {          if ($has_zlib || (defined($CMD{gzip}) && open(GZIP, "| $CMD{gzip} -1 -c"))) {
             if ($is_mod_perl) {              if ($is_mod_perl) {
                     Apache->request->content_encoding("x-gzip");                      Apache->request->content_encoding("x-gzip");
                     Apache->request->header_out(Vary => "Accept-Encoding");                      Apache->request->header_out(Vary => "Accept-Encoding");
Line 3118  sub http_header(;$) {
Line 3135  sub http_header(;$) {
             else {              else {
                     print "\r\n"; # Close headers                      print "\r\n"; # Close headers
             }              }
             print "<font size=-1>Unable to find gzip binary in the \$PATH to compress output</font><br>";              print "<font size=-1>Unable to find gzip binary in the <b>\$command_path</b> ($command_path) to compress output</font><br>";
         }          }
     }      }
     else {      else {
Line 3133  sub http_header(;$) {
Line 3150  sub http_header(;$) {
   
 sub html_header($) {  sub html_header($) {
     my ($title) = @_;      my ($title) = @_;
     my $version = '$zRevision: 1.104 $  $kRevision: 1.57 $'; #'      my $version = '$zRevision: 1.104 $  $kRevision: 1.63 $'; #'
     http_header("text/html");      http_header("text/html");
     print <<EOH;      print <<EOH;
 <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"  <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"

Legend:
Removed from v.1.1.1.20  
changed lines
  Added in v.1.1.1.21

CVSweb