Commit e25f49bb authored by Leigh B. Stoller's avatar Leigh B. Stoller

Yak, a bunch of changes for cvs access to project repos that have been

marked publically readable.

Anon users trying to find a project repo are silently redirected over
the ops web server.

Some really disgusting stuff in cvsweb.cgi; do not look!

Note we now install cvsweb and friends into ops:/usr/testbed/www/cvsweb
parent 84c1df2d
# -*-perl-*-
# Configuration of cvsweb.cgi, the
# CGI interface to CVS Repositories.
#
# (c) 1998-1999 H. Zeller <zeller@think.de>
# 1999 H. Nordstrom <hno@hem.passagen.se>
# 2000-2002 A. MUSHA <knu@FreeBSD.org>
# 2002 V. Skyttä <scop@FreeBSD.org>
# based on work by Bill Fenner <fenner@FreeBSD.org>
#
# $FreeBSD: projects/cvsweb/cvsweb.conf,v 1.36.2.3 2002/09/23 05:30:17 scop Exp $
# $Id: cvsweb-ops.conf,v 1.1 2005-09-02 22:07:23 stoller Exp $
# $Idaemons: /home/cvs/cvsweb/cvsweb.conf,v 1.27 2001/08/01 09:48:39 knu Exp $
#
###
# Set the path for the following commands:
# uname, cvs, rlog, rcsdiff
# gzip (if you enable $allow_compress)
# tar, rm, zip (if you enable $allow_tar)
$command_path = '/bin:/usr/bin:/usr/local/bin';
# Search the above directories for each command
for (qw(uname cvs rlog rcsdiff gzip tar rm zip)) {
$CMD{$_} = search_path($_);
}
# The name of the operating system implementation
chomp($uname = `$CMD{uname}`);
##############
# CVS Root
##############
# CVSweb can handle several CVS-Repositories
# at once. Enter a short symbolic names and the
# full path of these repositories here.
# NOTE that the symbolic names may not contain
# whitespaces.
# Note, that cvsweb.cgi currently needs to have physical access
# to the CVS repository so :pserver:someone@xyz.com:/data/cvsroot
# won't work!
# 'symbolic_name' => ['name_to_display', 'path_to_the_actual_repository']
# Listed in the order specified:
@CVSrepositories = (
'top' => ['CVS Repository', '/proj/cvsrepos'],
);
# This tree is enabled by default when
# you enter the page
$cvstreedefault = $CVSrepositories[2 * 0]; # The first one
##############
# Bug tracking system options
# ("PR" means Problem Report, as in GNATS)
##############
#@prcategories = qw(
# advocacy
# alpha
# bin
# conf
# docs
# gnu
# i386
# kern
# misc
# pending
# ports
# sparc
#);
#
#$prcgi = "http://www.FreeBSD.org/cgi/query-pr.cgi?pr=%s";
#
#$prkeyword = "PR";
##############
# Manual gateway
##############
$mancgi =
"http://www.FreeBSD.org/cgi/man.cgi?apropos=0&sektion=%s&query=%s&manpath=FreeBSD+5.0-current&format=html";
##############
# Defaults for UserSettings
##############
%DEFAULTVALUE = (
# sortby: File sort order
# file Sort by filename
# rev Sort by revision number
# date Sort by commit date
# author Sort by author
# log Sort by log message
"sortby" => "file",
# hideattic: Hide or show files in Attic
# 1 Hide files in Attic
# 0 Show files in Attic
"hideattic" => "1",
# logsort: Sort order for CVS logs
# date Sort revisions by date
# rev Sort revision by revision number
# cvs Don't sort them. Same order as CVS/RCS shows them.
"logsort" => "date",
# f: Default diff format
# h Human readable
# u Unified diff
# c Context diff
# s Side by side
"f" => "u",
# hidecvsroot: Don't show the CVSROOT directory
# 1 Hide CVSROOT directory
# 0 Show CVSROOT directory
"hidecvsroot" => "0",
# hidenonreadable: Don't show entries which cannot be read
# 1 Hide non-readable entries
# 0 Show non-readable entries
"hidenonreadable" => "1",
);
##############
# some layout stuff
##############
# The body-tag for directory views and logs
$body_tag = '<body text="#000000" bgcolor="#ffffff">';
# The body-tag for diffs and annotations
$body_tag_for_src = '<body text="#000000" bgcolor="#eeeeee">';
# Wanna have a logo on the page ?
# XXX: This is just a copy of the one from menu.php3, and has Utah-specific
# stuff hardcoded. Since it shouldn't run on other sites, seemed like a
# waste to spend to much time doing it in a more 'correct' way
$logo = '<table cellpadding=0 cellspacing=0 border=0 width=50%><tr>
<td align=left valign=top width="0%">
<table cellpadding=5 cellspacing=0 border=0 bgcolor="#880000">
<tr>
<td>
<b><font size=5 color=white face=Helvetica>
Emulab.Net
</font>
</b>
</td>
</tr>
</table>
</td>
<td align=left valign=top width=0%>
<table cellpadding=5 cellspacing=0 border=0
bgcolor=#ABABE0>
<tr>
<td nowrap>
<b>
<font size=5 face=helvetica color="#000000">
The Utah Network Testbed
</font>
</b>
</td>
<tr>
</table>
</td>
<td align=left width=100%>
<font size=5 face=helvetica>
&nbsp;[<a href="https://www.emulab.net/index.php3">Home</a>]
</font>
</td>
</tr>
</table>
';
# The title of the Page on startup. This will be put inside a <h1> tag.
$defaulttitle = "CVS Repository";
# The address is shown on the footer. This will be put inside a <address> tag.
$address = '<span style="font-size: smaller">FreeBSD-CVSweb &lt;<a href="mailto:freebsd-cvsweb@FreeBSD.org">freebsd-cvsweb@FreeBSD.org</a>&gt;</span>';
# color of navigation Header for
# diffs and annotations
$navigationHeaderColor = '#9999ee';
$long_intro = <<EOT;
<p>
This is a WWW interface for CVS Repositories.
You can browse the file hierarchy by picking directories
(which have slashes after them, <i>e.g.</i>, <b>src/</b>).
If you pick a file, you will see the revision history
for that file.
Selecting a revision number will download that revision of
the file. There is a link at each revision to display
diffs between that revision and the previous one, and
a form at the bottom of the page that allows you to
display diffs between arbitrary revisions.
</p>
EOT
$long_tag = <<EOT;
<br><br><br>
<hr noshade>
<p>
<font size=-1>
This script has been written by Bill Fenner and improved by Henner Zeller,
Henrik Nordstr&ouml;m, and Ken Coar, then Akinori MUSHA brought it
back to FreeBSD community and made further improvements; it is covered
by <a
href="http://www.opensource.org/licenses/bsd-license.html">The BSD Licence</a>.
</p>
<p>
If you would like to use this CGI script on your own web server and
CVS tree, download the latest version from &lt;URL:<a
href="http://www.FreeBSD.org/projects/cvsweb.html">http://www.FreeBSD.org/projects/cvsweb.html</a>&gt;.
</p>
<p>
Feel free to send any patches, suggestions and comments to the FreeBSD-CVSweb
mailing list at
&lt;<a
href="mailto:freebsd-cvsweb\@FreeBSD.org">freebsd-cvsweb\@FreeBSD.org</a>&gt;.
</p>
</font>
EOT
$short_instruction = <<EOT;
<p>
Click on a directory to enter that directory. Click on a file to display
its revision history and to get a chance to display diffs between revisions.
</p>
EOT
$license = <<EOT;
<p>
<b>Please remember that the Emulab
<a href="http://www.emulab.net/doc/docwrapper.php3?docname=LICENSE.txt">
<b>LICENSE</b></a> states that this source code is 1) for use only for
research and education, 2) cannot be used for commercial purposes,
and, 3) cannot be redistributed outside your research group.</b>
</p>
EOT
# used icons; if icon-url is empty, the text representation is used; if
# you do not want to have an ugly tooltip for the icon, remove the
# text-representation.
# The width and height of the icon allow the browser to correcly display
# the table while still loading the icons.
# These default icons are coming with apache.
# If these icons are too large, check out the miniicons in the
# icons/ directory; they have a width/height of 16/16
my $iconsdir = "/cvsweb";
# format: TEXT ICON-URL width height
%ICONS = (
back => [("[BACK]", "$iconsdir/back.gif", 20, 22)],
dir => [("[DIR]", "$iconsdir/dir.gif", 20, 22)],
file => [("[TXT]", "$iconsdir/text.gif", 20, 22)],
);
undef $iconsdir;
# the length to which the last logentry should
# be truncated when shown in the directory view
$shortLogLen = 80;
# Show author of last change
$show_author = 1;
##############
# table view for directories
##############
# Show directory as table
# this is much more readable but has one
# drawback: the whole table has to be loaded
# before common browsers display it which may
# be annoying if you have a slow link - and a
# large directory ..
$dirtable = 1;
# show different colors for even/odd rows
@tabcolors = ('#ffffff', '#ffffff');
$tablepadding = 2;
# Color of Header
$columnHeaderColorDefault = '#ffffcc';
$columnHeaderColorSorted = '#ffcc66';
#
# If you want to have colored borders
# around each row, uncomment this
$tableBorderColor = '#cccccc';
#
# Modules in the repository that should not be displayed, either by default
# nor by explicit path specification.
#
@HideModules = (
# "^my/secret/module",
);
#
# Files matching these pathnames shouldn't be checked out with cvsweb,
# since they may contain sensitive information. Simple file name based
# filter. Often, the CVSROOT/passwd is exposed and some people tend
# to check in their .cvspass, though this is a bad idea. These files
# shouldn't be readable by default. Thanks to Damian Gryski to point
# this out.
# Note that this affects only files, not directories.
@ForbiddenFiles = (
"^CVSROOT/passwd\$", # CVSROOT/passwd should not be cvs add'ed, though
"/\\.cvspass\$", # Ditto. Just in case.
);
#
# Use CVSROOT/CVSROOT/descriptions for describing the directories/modules
# See INSTALL section 8
#
$use_descriptions = 0;
##############
# Human Readable Diff
##############
# (c) 1998 H. Zeller <zeller@think.de>
#
# Generates two columns of color encoded
# diff; much like xdiff or emacs-ediff mode.
#
# The diff-stuff is a piece of code I once made for
# cvs2html which is under GPL,
# see http://www.sslug.dk/cvs2html
# (c) 1997/98 Peter Toft <pto@sslug.imm.dtu.dk>
#
# some parameters to screw:
##
# make lines breakable so that the columns do not
# exceed the width of the browser
$hr_breakable = 1;
# give out function names in diffs
# this just makes sense if we have C-files, otherwise
# diff's heuristic doesn't work well ..
# ( '-p' option to diff)
$showfunc = 1;
# For each pair of regexps, files that match the first regexp will be diff'ed
# with an '-F' option with the second regexp.
%funcline_regexp = (
"\\.(4th|fr)\$" => "\\(^\\|[ \t]\\): ",
"\\.rb\$" => "^[\t ]*\\(class\\|module\\|def\\) ",
);
# ignore whitespaces for human readable diffs
# (indendation and stuff ..)
# ( '-w' option to diff)
$hr_ignwhite = 0;
# ignore diffs which are caused by
# keyword-substitution like $Id - Stuff
# ( '-kk' option to rcsdiff)
$hr_ignkeysubst = 1;
# Colors and font to show the diff type of code changes
$diffcolorHeading = '#99cccc'; # color of 'Line'-head of each diffed file
$diffcolorEmpty = '#cccccc'; # color of 'empty' lines
$diffcolorRemove = '#ff9999'; # Removed line(s) (left) ( - )
$diffcolorChange = '#99ff99'; # Changed line(s) ( both )
$diffcolorAdd = '#ccccff'; # Added line(s) ( - ) (right)
$diffcolorDarkChange = '#99cc99'; # lines, which are empty in change
$difffontface = "Helvetica,Arial";
$difffontsize = "-1";
# the width of the textinput of the
# request-diff-form
$inputTextSize = 12;
##############
# Mime Types
##############
# mapping to mimetypes to help
# cvsweb to guess the correct mime-type on
# checkout; you can use the mime.types from
# apache here:
$mime_types = '/usr/local/etc/apache/mime.types';
# quick mime-type lookup; maps file-suffices to
# mime-types for displaying checkouts in the browser.
# Further MimeTypes will be found in the
# file $mime_types (apache style mime.types - file)
# - add common mappings here for faster lookup
%MTYPES = (
"html" => "text/html",
"shtml" => "text/html",
"gif" => "image/gif",
"jpeg" => "image/jpeg",
"jpg" => "image/jpeg",
"png" => "image/png",
"xpm" => "image/xpm",
"*" => "text/plain",
);
# Charset for HTML output
$charset = '';
# e.g.
#$charset = $where =~ m,/ru[/_-], ? 'koi8-r'
# : $where =~ m,/zh[/_-], ? 'big5'
# : $where =~ m,/ja[/_-], ? 'x-euc-jp'
# : $where =~ m,/ko[/_-], ? 'x-euc-kr'
# : 'iso-8859-1';
# Output filter
$output_filter = '';
# e.g.
## unify/convert Japanese code into EUC-JP
#$output_filter= '/usr/local/bin/nkf -e';
##############
# Misc
##############
# allow annotation of files
# this requires rw-access to the
# CVSROOT/history file (if you have one)
# and rw-access to the subdirectory to
# place the lock so you maybe don't want it
$allow_annotate = 1;
# allow pretty-printed version of files
$allow_markup = 1;
# allow extra hlink formatting (such as PR xrefs) in logs
$allow_log_extra = 1; # default: enabled
# allow extra hlink formatting (such as PR xrefs) in directories
$allow_dir_extra = 1;
# allow extra hlink formatting in source code/formatted diff views
$allow_source_extra = 1;
# allow compression with gzip
# of output if the Browser accepts
# it (HTTP_ACCEPT_ENCODING=gzip)
# [make sure to have gzip in the path]
$allow_compress = 0;
# Make use of javascript functions.
# This way you can select one of your CVSroot
# without pressing 'Go' (.. if you do have more
# than one CVSROOT defined)
$use_java_script = 1;
# open Download-Links in another window
$open_extern_window = 1;
# The size of this extern window; this size option
# needs use_java_script to be defined
# just comment them if you don't want to have a fixed
# size
#$extern_window_width = 600;
#$extern_window_height = 440;
# Edit Options
# Enable form to edit your options (hideattic,sortbydate)
# this isn't necessary if you've $dirtable defined 'cause
# this allows editing of all your options more intuitive
$edit_option_form = (not $dirtable);
# If you have files which automatically refers to other files
# (such as HTML) then this allows you to browse the checked
# out files as if outside CVS.
$checkout_magic = 1;
# Show last changelog message for sub directories
# The current implementation makes many assumptions and may show the
# incorrect file at some times. The main assumption is that the last
# modified file has the newest filedate. But some CVS operations
# touches the file without even when a new version is't checked in,
# and TAG based browsing essientially puts this out of order, unless
# the last checkin was on the same tag as you are viewing.
# Enable this if you like the feature, but don't rely on correct results.
$show_subdir_lastmod = 0;
# Background color of logentry in markup
$markupLogColor = "#ffffff";
# Show CVS log when viewing file contents
$show_log_in_markup = 1;
# Preformat when viewing file contents. This should be turned off
# when you have files in the repository that are in a multibyte
# encoding which uses HTML special characters ([<>&"]) as part of a
# multi-byte character. (such as iso-2022-jp, ShiftJIS, etc.)
# Otherwise those files will get screwed up in markup.
$preformat_in_markup = '';
# Tabstop used to expand tabs in colored diffs. If undefined then
# tabs are always expanded to 8 spaces.
$tabstop = 8;
# if you wish to display absolute times in your local timezone,
# then define mytz and fill in the strings for your standard and
# daylight time. Note that you must also make sure the system
# timezone is correctly set.
# @mytz=("EST", "EDT");
# cvsweb is friendly to caches by indicating a suitable
# last-modified timestamp. Doing this uses slightly more
# CPU so you might want to disable it if you have a slow
# server
$use_moddate = 1;
# Allows downloading a tarball of the current directory if set.
# Bear in mind that this allows downloading a tarball of your entire
# repository, which can take a lot of time and disk space to create!
# If you enable this, you may need to make sure that cvsweb can write to
# CVSROOT/val-tags, due to a bug in cvs.
$allow_tar = 1;
# Options to pass to tar(1).
@tar_options = qw(--ignore-failed-read);
# e.g. @tar_options = qw(--ignore-failed-read);
# GNU tar has some useful options against unexpected errors.
# Options to pass to gzip(1) when compressing a tarball to download.
@gzip_options = qw();
# e.g. @gzip_options = qw(-3);
# Try lower compression level than 6 (default) if you want faster
# compression, or higher, for better compression.
# Options to pass to zip(1) when compressing a zip archive to download.
@zip_options = qw();
# e.g. @zip_options = qw(-3);
# Try lower compression level than 6 (default) if you want faster
# compression, or higher, for better compression.
# Options to pass to cvs(1).
# For cvs versions prior to 1.11, the '-l' option doesn't work; If you want
# working checkouts with an older cvs version, you'll have to make sure that
# the cvsweb user can read and write to CVSROOT/history.
@cvs_options = qw(-f);
push @cvs_options, '-R' if ($uname eq 'FreeBSD' || $uname eq 'OpenBSD');
push @cvs_options, '-u' if ($uname eq 'NetBSD');
# Only FreeBSD's and OpenBSD's cvs(1) supports -R (read only access
# mode) option, which considerably speeds up checkouts over NFS.
# A similar effect is provided by -u on NetBSD.
# Options to pass to the 'cvs annotate' command, usually the normal
# @cvs_options are good enough here.
@annotate_options = @cvs_options;
# To make annotate work against a read only repository, add -n, e.g.:
# @annotate_options = (@cvs_options, '-n');
1;
#EOF
......@@ -46,7 +46,7 @@
# SUCH DAMAGE.
#
# $FreeBSD: projects/cvsweb/cvsweb.cgi,v 1.119.2.6 2002/09/26 20:56:05 scop Exp $
# $Id: cvsweb.cgi,v 1.4 2005-09-01 18:11:43 stoller Exp $
# $Id: cvsweb.cgi,v 1.5 2005-09-02 22:07:23 stoller Exp $
# $Idaemons: /home/cvs/cvsweb/cvsweb.cgi,v 1.84 2001/10/07 20:50:10 knu Exp $
#
###
......@@ -358,11 +358,39 @@ if (defined($input{"content-type"})) {
if ($input{"content-type"} !~ /^[-0-9A-Za-z]+\/[-0-9A-Za-z]+$/);
}
# Emulab Hacks!
if (@ARGV && $ARGV[0] eq "-repo") {
$license = undef;
@CVSrepositories = (
'top' => [$ARGV[1], $ARGV[1]],
);
$cvstreedefault = $CVSrepositories[2 * 0]; # The first one
}
elsif (! -e @{$CVSrepositories[1]}[1] . "/CVSROOT") {
my $dh = do { local (*DH); };
my $topdir = @{$CVSrepositories[1]}[1];
opendir($dh, $topdir) or
fatal("404 Not Found", '%s: %s', $topdir, $!);
my @dirfiles = readdir($dh);
closedir($dh);
@CVSrepositories = ();
foreach my $dir (@dirfiles) {
my $rdir = "$topdir/$dir";
next
if ($dir eq "." || $dir eq "..");
if (-r $rdir && -e "$rdir/CVSROOT") {
push(@CVSrepositories, $dir => [$dir, $rdir]);
}
}
if (! @CVSrepositories) {
fatal("404 Not Found", '%s: %s', $topdir, $!);
}
$cvstreedefault = $CVSrepositories[2 * 0]; # The first one
}
$DEFAULTVALUE{'cvsroot'} = $cvstreedefault;
......@@ -662,7 +690,7 @@ if (-d $fullname) {
# give direct access to dirs
if ($where eq '/') {
chooseMirror ();
#chooseCVSRoot ();
#chooseCVSRoot ();
} else {
print "<p>Current directory: <b>", &clickablePath($where, 0),
"</b></p>\n";
......
......@@ -9,7 +9,7 @@
# based on work by Bill Fenner <fenner@FreeBSD.org>
#
# $FreeBSD: projects/cvsweb/cvsweb.conf,v 1.36.2.3 2002/09/23 05:30:17 scop Exp $
# $Id: cvsweb.conf,v 1.5 2005-09-01 18:11:43 stoller Exp $
# $Id: cvsweb.conf,v 1.6 2005-09-02 22:07:23 stoller Exp $
# $Idaemons: /home/cvs/cvsweb/cvsweb.conf,v 1.27 2001/08/01 09:48:39 knu Exp $
#
###
......@@ -117,7 +117,7 @@ $mancgi =
# hidecvsroot: Don't show the CVSROOT directory
# 1 Hide CVSROOT directory
# 0 Show CVSROOT directory
"hidecvsroot" => "1",
"hidecvsroot" => "0",
# hidenonreadable: Don't show entries which cannot be read
# 1 Hide non-readable entries
......
......@@ -12,13 +12,10 @@ chdir("../");
require("defs.php3");
#
# Only known and logged in users can do this.
# We look for anon access, and if so, redirect to ops web server.
# WARNING: See the LOGGEDINORDIE() calls below.
#
$uid = GETLOGIN();
LOGGEDINORDIE($uid);
# Just for project specific
$scriptargs = "";
#
# Verify form arguments.
......@@ -30,14 +27,36 @@ if (isset($pid) && $pid != "") {
if (!TBvalid_pid($pid)) {
PAGEARGERROR("Invalid project ID.");
}
# Redirect now, to avoid phishing.
if ($uid) {
LOGGEDINORDIE($uid);
}
else {
$url = $OPSCVSURL . "?cvsroot=$pid";
header("Location: $url");
return;