From: Frank Lichtenheld Date: Fri, 24 Oct 2008 16:41:38 +0000 (+0200) Subject: Merge branch 'master' into debian-master X-Git-Url: https://git.deb.at/?a=commitdiff_plain;h=c47edfa85b5312d5467a4b8c3132a518e6af7ae5;hp=6f5fa1dbee1bf3a6dba1fb1aa0f6575c0c10352e;p=deb%2Fpackages.git Merge branch 'master' into debian-master Leave out 50961b4eb963cdd14a4362fa8bab7335d5f504ca (Remove all code related to the mail forwarding from the master branch) --- diff --git a/bin/build-maintainerdb b/bin/build-maintainerdb new file mode 100755 index 0000000..b64be00 --- /dev/null +++ b/bin/build-maintainerdb @@ -0,0 +1,237 @@ +#! /usr/bin/perl + +# build-maintainerdb - convert several Packages files to maintainer database +# Copyright (c) 1998,9,2001,3,4,6 Martin Schulze +# Copyright (C) 2007 Joerg Jaspert +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +# Todo: +# . Read maintainer changes from overrides file(s), need to rub +# out all existing entries + +use strict; +use warnings; +use DB_File; + +use lib '../lib'; + +use Deb::Versions; + +# read the configuration +if (!open (C, "../config.sh")) { + print "\nInternal Error: Cannot open configuration file.\n\n"; + exit 0; +} +my $topdir = "/org/packages.debian.org"; +while () { + $topdir = $1 if (/^\s*topdir="?(.*)"?\s*$/); +} +close (C); + +my $maildomain = "packages.debian.org"; +my $ptsdomain = "packages.qa.debian.org"; + + +my $maintainerfile = "$topdir/../ftp.root/debian/indices/Maintainers"; +my $maintainerdb = "$topdir/conf/maintainer"; +my $overridefile = "$topdir/conf/maintainerdb.override"; +my @postcall = ( "/usr/sbin/postmap", $maintainerdb ); +my $opt_verbose = 0; +my $dbdir = "$topdir/files/db"; + +my %maint; +my %binsrc; + +# Lets take pdo database input files for the source mapping +sub read_bin_src_mapping +{ + tie my %src_packages, 'DB_File', "$dbdir/sources_small.db", + O_RDONLY, 0666, $DB_BTREE + or die "couldn't tie DB $dbdir/sources_small.db: $!"; + tie my %src2bin, 'DB_File', "$dbdir/sources_packages.db", + O_RDONLY, 0666, $DB_BTREE + or die "couldn't open $dbdir/sources_packages.db: $!"; + + my %bin; + while (my ($source, $data) = each %src_packages) { + my @src = map { [ split(/\s+/) ] } split( /\0/, $data ); + my $newest = (sort( { version_cmp($b->[-1],$a->[-1]) } @src))[0]; + my ($section, $version) = @{$newest}[2,5]; + + my $bin_data = $src2bin{$source}; + unless ($bin_data) { + warn "no binary data found for $source\n"; + # source packages without binaries have most + # likely been succeded + next; + } + + my @bin = map { [ split(/\s+/) ] } split( /\0/, $bin_data ); + my %seen; + foreach (@bin) { + my ($pkg, $ver) = @{$_}[2,3]; + next if $seen{"$pkg/$ver"}++; # weed out multiple arches/suites faster + if ($bin{$pkg} + && ($bin{$pkg}{source} ne $source) + && (version_cmp($bin{$pkg}{version},$ver) > 0)) { + next; + } else { + $bin{$pkg} = { version => $ver, source => $source, + target => "$section" }; + $binsrc{$pkg} = $source; + } + } + $binsrc{$source} = $source; + } +} + +sub package_maintainer +{ + my $pkg = shift; + my $login = shift; + my $addr = shift; + my $home = "/debian/home/$login"; + + if (-d $home) { + if (-f "$home/.forward-$pkg") { + return "$login-$pkg\@master.debian.org"; + } + } + return $addr; +} + +sub read_maintainer +{ + my $file = shift; + my $package; + my $maintainer; + my $maint; + + open (F, "$file") || die "Can't open $file, $!"; + printf "Reading %s\n", $file if ($opt_verbose); + while () { + next if (/^#/); + next if (/^$/); + /(\S+)\s+(.*)/; + $package=$1; $maint=$2; + if (! exists $maint{$package}) { + printf " EVAL (%s, \"%s\")\n", $package, $maint if ($opt_verbose > 2); + + if (exists $maint{$package}) { + $maint{$package} .= " "; + printf " EXPAND (%s)\n", $package if ($opt_verbose > 2); + } + if ($maint =~ /.*<(.*)>/) { + $maint{$package} .= $1; + printf " ADD (%s, %s)\n", $package, $1 if ($opt_verbose > 2); + } elsif ($maint =~ /\s*(\S+)\s+\(.*\)/) { + $maint{$package} .= $1; + printf " ADD (%s, %s)\n", $package, $1 if ($opt_verbose > 2); + } else { + $maint{$package} .= $maint; + printf " ADD (%s, %s)\n", $package, $maint if ($opt_verbose > 2); + } + + printf " %s: %s\n", $package, $maint{$package} if ($opt_verbose > 1); + +# Short what? Whats this supposed to do, except creating new (and 99% broken) something -> email mappings? +# my $pkgshort = ""; +# if ($package =~ /(.*[^\d\.]+)([\d\.]*\d)$/) { +# $pkgshort = $1; +# print "Short what? $pkgshort (long is $package)\n"; +# $maint{$pkgshort} = $maint{$package} if (! exists $maint{$pkgshort}); +# printf " %s: %s\n", $pkgshort, $maint{$package} if ($opt_verbose > 1); +# } +# if ($maint{$package} =~ /([^\@]+)\@(master\.)?debian\.org/) { +# my $addrsave = $maint{$package} if ($opt_verbose > 1); +# $maint{$package} = package_maintainer ($package, $1, $maint{$package}); +# printf " Changed to %s\n", $maint{$package} if ($opt_verbose > 1 && ($addrsave ne $maint{$package})); +# if (length ($pkgshort) > 0) { +# $maint{$pkgshort} = package_maintainer ($pkgshort, $1, $maint{$pkgshort}); +# } +# } + } else { + printf "Skipping double $package\n" if ($opt_verbose); + printf "LINE: $_" if ($opt_verbose > 2); + } + } + close (F); +} + + + +sub write_maintainer +{ + my $file = shift; + + printf "Writing to %s.new\n", $file if ($opt_verbose > 0); + open (CONF, ">$file.new") || die "Can't open $file.new, $!"; + my $forward; + foreach my $package (sort(keys(%maint))) { +# It is possible that we do not know a source package -> in that case fall back to old behaviour +# and only mail the maintainer. Can happen when pdo doesnt know the suite the source is in, like +# it doesnt know oldstable-proposed-updates at date of writing this code. + $forward = "$maint{$package}"; + if ($binsrc{$package}) { + $forward .= ", $binsrc{$package}_contact\@$ptsdomain"; + } + printf "%s -> %s\n", $package, $forward if ($opt_verbose); + printf CONF "%s@%s\t%s\n", $package, $maildomain, $forward; +# printf "%s -> %s and pts: %s\n", $package, $maint{$package}, $binsrc{$package} if ($opt_verbose); +# printf CONF "%s@%s\t%s, %s_contact@%s\n", $package, $maildomain, $maint{$package}, $binsrc{$package}, $ptsdomain; + } + close (CONF); + printf "Renaming to %s\n", $file if ($opt_verbose > 0); + system "mv -f $file.new $file"; + printf "Executing @postcall\n" if ($opt_verbose > 0); + system @postcall; +} + +sub help +{ + print "build-maintainerdb - Build the maintainer db for packages.debian.org.\n"; + print "-d debug, changes output file to ./maintainerdb\n"; + print "-h This help\n"; + print "-v Increase verbosity by 1\n"; + print "-vv Increase verbosity by 2\n"; + print "-vvv Increase verbosity by 3\n"; +} + +# +# Main program +# +while ($#ARGV > -1) { + if ($ARGV[0] eq "-v") { + $opt_verbose++; + } elsif ($ARGV[0] eq "-vv") { + $opt_verbose+= 2; + } elsif ($ARGV[0] eq "-vvv") { + $opt_verbose+= 3; + } elsif ($ARGV[0] eq "-h") { + help(); + } elsif ($ARGV[0] eq "-d") { + $maintainerdb = "./maintainerdb"; + } + shift; +} + +&read_bin_src_mapping(); + +&read_maintainer ($overridefile); +&read_maintainer ($maintainerfile); + +&write_maintainer ($maintainerdb); + diff --git a/cgi-bin/index.php b/cgi-bin/index.php deleted file mode 100644 index 006db80..0000000 --- a/cgi-bin/index.php +++ /dev/null @@ -1,60 +0,0 @@ - array('pipe', 'r'), - 1 => array('pipe', 'w'), - 2 => array('pipe', 'w') - ), $pipes); - foreach ($_GET as $k => $v) { - fwrite($pipes[0], urlencode($k)."=".urlencode($v)."\n"); - } - fclose($pipes[0]); - fpassthru($pipes[1]); - $stderr = fread($pipes[2], 4096); - $exit = proc_close($proc); - if ($exit) { - echo "

Error happened, code $exit

\n"; - } - echo "
".htmlspecialchars($stderr);
-	echo "
"; -} - -$SUITES = array('oldstable', 'stable', 'testing', 'unstable', 'experimental'); -$pi = substr($_SERVER["PATH_INFO"], 1); -$elems = explode('/', $pi); -if ($pi == "") { - readfile("index.html"); - exit; -} elseif ($pi == 'search') { - go("search_packages.pl"); -} elseif ($elems[0] == 'package' && count($elems) == 2) { - $_GET['searchon'] = 'names'; - $_GET['keywords'] = $elems[1]; - $_GET['suite'] = 'all'; - $_GET['exact'] = 1; - go("search_packages.pl"); -} elseif ($elems[0] == 'source' && count($elems) == 2) { - $_GET['searchon'] = 'sourcenames'; - $_GET['keywords'] = $elems[1]; - $_GET['suite'] = 'all'; - $_GET['exact'] = 1; - go("search_packages.pl"); -} elseif (in_array($elems[0], $SUITES) && count($elems) == 2) { - $_GET['package'] = $elems[1]; - $_GET['suite'] = $elems[0]; - go("show_package.pl"); -} elseif (in_array($elems[0], $SUITES) && count($elems) == 3) { - header("Location: http://merkel.debian.org/~jeroen/pdo/$elems[0]/".urlencode($elems[2])); - exit; -} elseif (substr($pi, 0, 4) == 'src:') { - header("Location: http://merkel.debian.org/~jeroen/pdo/source/".urlencode(substr($pi,4))); - exit; -} elseif (!eregi('[^a-z0-9+.-]', $pi)) { - header("Location: http://merkel.debian.org/~jeroen/pdo/package/".urlencode($pi)); - exit; -} else { - echo "404 not found"; -} diff --git a/conf/apache.conf.sed.in b/conf/apache.conf.sed.in index 8594aec..00b38ad 100644 --- a/conf/apache.conf.sed.in +++ b/conf/apache.conf.sed.in @@ -72,6 +72,8 @@ ErrorLog /var/log/apache2/%SITE%-error.log CustomLog /var/log/apache2/%SITE%-access.log combined + CBandUser pdo + Alias /cgi-bin/ %TOPDIR%/cgi-bin/ PerlModule ModPerl::Registry @@ -110,8 +112,8 @@ RewriteRule ^/favicon.ico$ - [L] RewriteRule ^/robots.txt$ - [L] -# RewriteRule ^/$ http://www.debian.org/distrib/packages - RewriteRule ^/$ /index.html [L] + RewriteRule ^/$ http://www.debian.org/distrib/packages +# RewriteRule ^/$ /index.html [L] RewriteRule ^/([^/+]*)([+])([^/]*)$ "/$1%%{%}2B$3" [N] RewriteRule ^/changelog:(.+)$ /changelogs/${changelog-url:$1} [R,L,NE] RewriteRule ^/src:([^/]+)$ /search?searchon=sourcenames&keywords=$1 [R,L,NE] diff --git a/conf/maintainerdb.override b/conf/maintainerdb.override new file mode 100644 index 0000000..0f6f11d --- /dev/null +++ b/conf/maintainerdb.override @@ -0,0 +1,8 @@ +packages.debian.org Martin Schulze +nonus.debian.org Archive Maintenance +nonus NonUS Archive +non-us NonUS Archive +bugs Bug Tracking System +egcs debian-gcc@lists.debian.org +gcc debian-gcc@lists.debian.org +glibc debian-glibc@lists.debian.org diff --git a/config.sh.sed.in b/config.sh.sed.in index 7bdb5e6..198effd 100644 --- a/config.sh.sed.in +++ b/config.sh.sed.in @@ -19,7 +19,7 @@ cachedir=${topdir}/cache # unset this if %SITE% moves somewhere where the packages files # cannot be obtained locally # -#localdir=/org/ftp.debian.org/debian +localdir=/org/ftp.root/debian # path to private ftp directory #ftproot=/org/ftp.root diff --git a/cron.d/100syncarchive_maintainers b/cron.d/100syncarchive_maintainers new file mode 100755 index 0000000..9055606 --- /dev/null +++ b/cron.d/100syncarchive_maintainers @@ -0,0 +1,21 @@ +#! /bin/bash + +. `dirname $0`/../config.sh + +test -d ${archivedir} || mkdir -p ${archivedir} +cd ${archivedir} + +# scp -q auric:/org/ftp.debian.org/ftp/indices/Maintainers . + +if [ -f /org/ftp.root/debian/indices/Maintainers ] +then + if [ ! -s Maintainers -a -L Maintainers ] + then + ln -s /org/ftp.root/debian/indices/Maintainers . + fi +else + if [ ! -L Maintainers ] + then + $wget_cmd -O Maintainers $ftpsite/indices/Maintainers + fi +fi diff --git a/cron.d/300maintainerdb b/cron.d/300maintainerdb new file mode 100755 index 0000000..898a4c0 --- /dev/null +++ b/cron.d/300maintainerdb @@ -0,0 +1,6 @@ +#! /bin/bash + +. `dirname $0`/../config.sh + +cd ${bindir} +${bindir}/build-maintainerdb diff --git a/debian/control b/debian/control index 3af54e0..5ca566a 100644 --- a/debian/control +++ b/debian/control @@ -1,5 +1,5 @@ Source: packages -Build-Depends: git-core, rsync, dpkg-dev, procmail, gettext, +Build-Depends: rsync, dpkg-dev, procmail, gettext, liblocale-maketext-lexicon-perl, libi18n-acceptlanguage-perl, libnumber-format-perl, libcompress-zlib-perl, libhtml-parser-perl, libio-stringy-perl, libmldbm-perl, libtext-iconv-perl, libhtml-template-perl, diff --git a/mail/aliases b/mail/aliases new file mode 100644 index 0000000..ace74b6 --- /dev/null +++ b/mail/aliases @@ -0,0 +1,14 @@ +root: joey@debian.org +admin: joey@debian.org +sysop: joey@debian.org +debian: debian@debian.org +postmaster: joey@debian.org +MAILER_DAEMON: joey@debian.org +usenet: joey@debian.org +news: joey@debian.org +newsmaster: joey@debian.org +joey: joey@debian.org + +submit: submit@bugs.debian.org + +base: base-files@packages.debian.org, base-passwd@packages.debian.org diff --git a/mail/dot.forward-default b/mail/dot.forward-default new file mode 100644 index 0000000..76b8f82 --- /dev/null +++ b/mail/dot.forward-default @@ -0,0 +1,13 @@ +# Exim Filter +# /org/packages.debian.org/mail/.forward-default + +# This filter looks up the package name in the maintainer database, if it is +# not found then a bounce message is generated. Although the docs say you +# can put spaces in the $lookup stuff you can't, don't try it. +if ${lookup{${local_part}}lsearch{/org/packages.debian.org/files/maintainerdb}{$value}{unknown}} is "unknown" +then + save /dev/null +else + seen deliver ${lookup{${local_part}}partial-lsearch{/org/packages.debian.org/files/maintainerdb}{$value}} +endif + diff --git a/setup-site.conf b/setup-site.conf index edaf9b6..c50889e 100644 --- a/setup-site.conf +++ b/setup-site.conf @@ -1,2 +1,2 @@ -topdir=/srv/packages.debian.org -site=packages.debian.net +topdir=/org/packages.debian.org +site=packages.debian.org diff --git a/templates/config.tmpl b/templates/config.tmpl index 5ce7cc7..22f00a0 100644 --- a/templates/config.tmpl +++ b/templates/config.tmpl @@ -5,7 +5,7 @@ organisation = 'Debian' project_homepage = 'http://www.debian.org/' - packages_homepage = 'http://packages.debian.net/' + packages_homepage = 'http://packages.debian.org/' searchformurl = packages_homepage search_url = '/search' tags_url = 'http://debtags.alioth.debian.org/' @@ -48,15 +48,16 @@ mail => 'webmaster@debian.org', } trademarknotes = g('%s is a trademark of %s', organisation, trademark.url, trademark.name) -# sponsor = { -# url => 'http://example.invalid/', -# name => 'Example Sponsor, Inc.', -# } + sponsor = { + url => 'http://1und1.de/', + name => '1&1 Internet AG', + } -%] [%- # possible values for importance: high, normal, low - sitewidemsg = { importance => "high", - txt => g('Please note that this is an experimental version of %s. Errors and obsolete information should be expected', 'packages.debian.org', 'packages.debian.org') } +# sitewidemsg = { importance => "high", +# txt => g('Please note that this is an experimental version of %s. Errors and obsolete information should be expected', 'packages.debian.org', 'packages.debian.org') } +# txt => "Site maintainance in progress, some temporary problems might occour." } -%] [%# @translators: . = decimal_point , = thousands_sep, see Number::Format %] [%- USE num = Number.Format( decimal_point => g('.'),