]> git.decadent.org.uk Git - dak.git/commitdiff
merge from master
authorMike O'Connor <stew@vireo.org>
Wed, 18 Feb 2009 13:56:09 +0000 (08:56 -0500)
committerMike O'Connor <stew@vireo.org>
Wed, 18 Feb 2009 13:56:09 +0000 (08:56 -0500)
Signed-off-by: Mike O'Connor <stew@vireo.org>
46 files changed:
config/backports.org/Contents.top [new file with mode: 0644]
config/backports.org/apt.conf [new file with mode: 0644]
config/backports.org/bpo-copy-packages [new file with mode: 0755]
config/backports.org/cron.buildd [new file with mode: 0755]
config/backports.org/cron.daily [new file with mode: 0755]
config/backports.org/cron.hourly [new file with mode: 0755]
config/backports.org/cron.monthly [new file with mode: 0755]
config/backports.org/cron.unchecked [new file with mode: 0755]
config/backports.org/cron.weekly [new file with mode: 0755]
config/backports.org/dak.conf [new file with mode: 0644]
config/backports.org/mail-whitelist [new file with mode: 0644]
config/backports.org/vars [new file with mode: 0644]
config/debian-security/apt.conf
config/debian-security/apt.conf.buildd
config/debian-security/cron.buildd
config/debian-security/cron.daily
config/debian-security/dak.conf
config/debian-security/map.sh [new file with mode: 0755]
config/debian-security/vars
config/debian/apt.conf
config/debian/apt.conf.oldstable [new file with mode: 0644]
config/debian/apt.conf.stable
config/debian/cron.dinstall
config/debian/dak.conf
config/debian/vars
dak/add_user.py [new file with mode: 0755]
dak/check_archive.py
dak/control_suite.py
dak/dak.py
dak/dakdb/update1.py
dak/dakdb/update2.py
dak/dakdb/update3.py
dak/new_security_install.py
dak/update_db.py
daklib/dak_exceptions.py
daklib/regexes.py
daklib/utils.py
scripts/backports.org/copyoverrides [new file with mode: 0755]
scripts/backports.org/mkchecksums [new file with mode: 0755]
scripts/backports.org/mklslar [new file with mode: 0755]
scripts/backports.org/mkmaintainers [new file with mode: 0755]
scripts/debian/ddtp-i18n-check.sh
scripts/debian/mkfilesindices
templates/add-user.added [new file with mode: 0644]
web/index.html
web/keys.html

diff --git a/config/backports.org/Contents.top b/config/backports.org/Contents.top
new file mode 100644 (file)
index 0000000..ee791eb
--- /dev/null
@@ -0,0 +1,32 @@
+This file maps each file available in the backports.org archive system to
+the package from which it originates.  It includes packages from the
+DIST distribution for the ARCH architecture.
+
+You can use this list to determine which package contains a specific
+file, or whether or not a specific file is available.  The list is
+updated weekly, each architecture on a different day.
+
+When a file is contained in more than one package, all packages are
+listed.  When a directory is contained in more than one package, only
+the first is listed.
+
+The best way to search quickly for a file is with the Unix `grep'
+utility, as in `grep <regular expression> CONTENTS':
+
+ $ grep nose Contents
+ etc/nosendfile                                          net/sendfile
+ usr/X11R6/bin/noseguy                                   x11/xscreensaver
+ usr/X11R6/man/man1/noseguy.1x.gz                        x11/xscreensaver
+ usr/doc/examples/ucbmpeg/mpeg_encode/nosearch.param     graphics/ucbmpeg
+ usr/lib/cfengine/bin/noseyparker                        admin/cfengine
+
+This list contains files in all packages, even though not all of the
+packages are installed on an actual system at once.  If you want to
+find out which packages on an installed Debian system provide a
+particular file, you can use `dpkg --search <filename>':
+
+ $ dpkg --search /usr/bin/dselect
+ dpkg: /usr/bin/dselect
+
+
+FILE                                                    LOCATION
diff --git a/config/backports.org/apt.conf b/config/backports.org/apt.conf
new file mode 100644 (file)
index 0000000..1fe25ae
--- /dev/null
@@ -0,0 +1,71 @@
+Dir
+{
+   ArchiveDir "/org/backports.org/ftp/";
+   OverrideDir "/org/backports.org/scripts/override/";
+   CacheDir "/org/backports.org/database/";
+};
+
+Default
+{
+   Packages::Compress ". gzip bzip2";
+   Sources::Compress ". gzip bzip2";
+   DeLinkLimit 0;
+   FileMode 0664;
+   Contents::Compress "gzip";
+   MaxContentsChange 12000;
+};
+
+TreeDefault
+{
+   Contents::Header "/org/backports.org/dak-config/Contents.top";
+};
+
+tree "dists/lenny-backports"
+{
+   FileList "/org/backports.org/database/dists/lenny-backports_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/org/backports.org/database/dists/lenny-backports_$(SECTION)_source.list";
+   Sections "main contrib non-free";
+   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.lenny-backports.$(SECTION)";
+   ExtraOverride "override.lenny-backports.extra.$(SECTION)";
+   SrcOverride "override.lenny-backports.$(SECTION).src";
+   Packages::Compress ". gzip bzip2";
+   Sources::Compress ". gzip bzip2";
+};
+
+tree "dists/lenny-backports/main"
+{
+   FileList "/org/backports.org/database/dists/lenny-backports_main_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.lenny-backports.main.$(SECTION)";
+   SrcOverride "override.lenny-backports.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   Contents "$(DIST)/../Contents-udeb";
+};
+
+tree "dists/etch-backports"
+{
+   FileList "/org/backports.org/database/dists/etch-backports_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/org/backports.org/database/dists/etch-backports_$(SECTION)_source.list";
+   Sections "main contrib non-free";
+   Architectures "alpha amd64 arm hppa hurd-i386 i386 ia64 mips mipsel m68k powerpc s390 sh sparc source";
+   BinOverride "override.etch-backports.$(SECTION)";
+   ExtraOverride "override.etch-backports.extra.$(SECTION)";
+   SrcOverride "override.etch-backports.$(SECTION).src";
+   Packages::Compress ". gzip bzip2";
+   Sources::Compress ". gzip bzip2";
+};
+
+tree "dists/etch-backports/main"
+{
+   FileList "/org/backports.org/database/dists/etch-backports_main_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "alpha amd64 arm hppa hurd-i386 i386 ia64 mips mipsel m68k powerpc s390 sh sparc source";
+   BinOverride "override.etch-backports.main.$(SECTION)";
+   SrcOverride "override.etch-backports.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   Contents "$(DIST)/../Contents-udeb";
+};
diff --git a/config/backports.org/bpo-copy-packages b/config/backports.org/bpo-copy-packages
new file mode 100755 (executable)
index 0000000..3c5073f
--- /dev/null
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+# Copyright (c) 2005 Peter Palfrader <peter@palfrader.org>
+
+# WARNING: spaces in filenames/paths considered harmful.
+
+export SCRIPTVARS=/org/backports.org/dak/config/backports.org/vars
+. $SCRIPTVARS
+
+cd ${configdir}
+
+for suite in etch lenny; do
+    source="${ftpdir}/dists/${suite}-backports"
+    target="${base}/buildd/dists/${suite}-backports"
+
+    if ! [ -d "$source" ]; then
+           echo "Source '$source' does not exist or is not a directory or we can't acess it." >&2
+           exit 1;
+    fi
+    if ! [ -d "$target" ]; then
+           echo "Target '$target' does not exist or is not a directory or we can't acess it." >&2
+           exit 1;
+    fi
+
+    for file in $( cd "$source" && find . -name 'Packages.gz' -o -name 'Packages' -o -name 'Sources.gz' -o -name 'Sources' -o -name 'Release' ); do
+           basedir=$(dirname "$file")
+           basename=$(basename "$file")
+           targetdir="$target/$basedir"
+           [ -d "$targetdir" ] || mkdir -p "$targetdir"
+           if [ "$basename" = "Release" ]; then
+                   cp -a "$source/$file" "$target/$file"
+                   echo 'NotAutomatic: yes' >> "$target/$file"
+           else
+                   cp -a "$source/$file" "$target/$file"
+           fi
+    done
+
+# postprocess top level Release file
+    if ! [ -e "$target/Release" ]; then
+           echo "Did not find $target/Release after copying stuff.  something's fishy" >&2
+           exit 1;
+    fi
+
+    cd "$target"
+
+    perl -a -p -i -e '
+       if (substr($_,0,1) eq " ") {
+               if ($in_sha1 || $in_md5) {
+                       ($hash, $size, $file) = @F;
+                       $_="",next unless -f $file;
+
+                       (undef,undef,undef,undef,undef,undef,undef,$filesize,
+                        undef,undef,undef,undef,undef) = stat($file);
+                       if ($size != $filesize) {
+                               if ($in_sha1) {
+                                       $hash = `sha1sum "$file" | cut -d " " -f 1`
+                               } else {
+                                       $hash = `md5sum "$file" | cut -d " " -f 1`
+                               };
+                               chomp $hash;
+                               $_ = sprintf(" %s %16d %s\n", $hash, $filesize, $file);
+                       }
+               }
+       } else {
+               $in_sha1 = ($F[0] eq "SHA1:") ? 1 : 0;
+               $in_md5  = ($F[0] eq "MD5Sum:") ? 1 : 0;
+       }
+' Release
+
+    rm -f ${base}/buildd/dists/${suite}-backports/Release.gpg
+    gpg --no-options --batch --no-tty --secret-keyring ${basedir}/s3kr1t/dot-gnupg/secring.gpg --output "Release.gpg" --armor --detach-sign "Release"
+done
diff --git a/config/backports.org/cron.buildd b/config/backports.org/cron.buildd
new file mode 100755 (executable)
index 0000000..f48f98f
--- /dev/null
@@ -0,0 +1,10 @@
+#! /bin/bash -e
+
+# Executed hourly via cron, out of katie's crontab.
+# stolen from newraff and adjusted by aba on 2005-04-30
+#exit 0
+
+export SCRIPTVARS=/org/backports.org/dak-config/vars
+. $SCRIPTVARS
+ssh -i $base/s3kr1t/dot-ssh/id_rsa wanna-build@wanna-build.farm.ftbfs.de echo broken
+exit 0
diff --git a/config/backports.org/cron.daily b/config/backports.org/cron.daily
new file mode 100755 (executable)
index 0000000..b84d801
--- /dev/null
@@ -0,0 +1,19 @@
+#! /bin/sh
+#
+# Executed daily via cron, out of katie's crontab.
+
+set -e
+export SCRIPTVARS=/org/backports.org/dak-config/vars
+. $SCRIPTVARS
+
+################################################################################
+# Clean out old packages
+dak clean-suites
+dak clean-queues
+
+# Send a report on NEW/BYHAND packages
+dak queue-report | mail -e -s "NEW and BYHAND on $(date +%D)" ftpmaster@backports.org
+# and one on crufty packages
+dak cruft-report | tee $webdir/cruft-report-daily.txt | mail -e -s "Debian archive cruft report for $(date +%D)" ftpmaster@backports.org
+
+echo Daily cron scripts successful.
diff --git a/config/backports.org/cron.hourly b/config/backports.org/cron.hourly
new file mode 100755 (executable)
index 0000000..4598006
--- /dev/null
@@ -0,0 +1,116 @@
+#! /bin/sh
+#
+# Executed daily via cron, out of katie's crontab.
+set -e
+export SCRIPTVARS=/org/backports.org/dak-config/vars
+. $SCRIPTVARS
+
+################################################################################
+cd $accepted
+
+changes=$(find . -maxdepth 1 -mindepth 1 -type f -name \*.changes | sed -e "s,./,," | xargs)
+
+if [ -z "$changes" ]; then
+ exit 0;
+fi
+
+echo Archive maintenance started at $(date +%X)
+
+NOTICE="$ftpdir/Archive_Maintenance_In_Progress"
+LOCKCU="$lockdir/daily.lock"
+LOCKAC="$lockdir/unchecked.lock"
+
+cleanup() {
+  rm -f "$NOTICE"
+  rm -f "$LOCKCU"
+}
+trap cleanup 0
+
+rm -f "$NOTICE"
+lockfile -l 3600 $LOCKCU
+cat > "$NOTICE" <<EOF
+Packages are currently being installed and indices rebuilt.
+Maintenance is automatic, starting hourly at 5 minutes past the hour.
+Most of the times it is finished after about 10 til 15 minutes.
+
+You should not mirror the archive during this period.
+EOF
+
+################################################################################
+
+cd $accepted
+rm -f REPORT
+dak process-accepted -pa *.changes | tee REPORT | \
+     mail -s "Install for $(date +%d.%m.%Y)" ftpmaster@backports.org
+chgrp debadmin REPORT
+chmod 664 REPORT
+
+cd $masterdir
+
+rm -f $LOCKAC
+
+symlinks -d -r $ftpdir
+
+cd $masterdir
+dak make-suite-file-list
+
+# Generate override files
+cd $overridedir
+dak make-overrides
+
+# Generate Packages and Sources files
+cd $configdir
+apt-ftparchive generate apt.conf
+# Generate *.diff/ incremental updates
+dak generate-index-diffs
+# Generate Release files
+dak generate-releases
+
+# Clean out old packages
+# Now in cron.daily. JJ[03.05.2005.]
+#rhona
+#shania
+
+cd $scriptsdir
+./mkmaintainers
+./copyoverrides
+./mklslar
+./mkchecksums
+
+rm -f $NOTICE
+rm -f $LOCKCU
+echo Archive maintenance finished at $(date +%X)
+
+################################################################################
+
+echo "Creating post-hourly-cron-job backup of projectb database..."
+POSTDUMP=/org/backports.org/backup/dump_$(date +%Y.%m.%d-%H:%M:%S)
+pg_dump projectb > $POSTDUMP
+(cd /org/backports.org/backup; ln -sf $POSTDUMP current)
+
+################################################################################
+
+# Vacuum the database
+echo "VACUUM; VACUUM ANALYZE;" | psql projectb 2>&1 | grep -v "^NOTICE:  Skipping.*only table owner can VACUUM it$"
+
+################################################################################
+
+# Now in cron.daily JJ[03.05.2005]
+# Send a report on NEW/BYHAND packages
+#helena | mail -e -s "NEW and BYHAND on $(date +%D)" ftpmaster@amd64.debian.net
+# and one on crufty package
+#rene | mail -e -s "rene run for $(date +%D)" ftpmaster@amd64.debian.net
+
+################################################################################
+
+(cd /org/backports.org/stats; rm -f master.list; ./dmc.pl get >/dev/null 2>&1; \
+./mirror.pl>$ftpdir/README.mirrors.html; cd $ftpdir; /usr/bin/links -dump README.mirrors.html >README.mirrors.txt)
+
+
+################################################################################
+
+ulimit -m 90000 -d 90000 -s 10000 -v 90000
+
+run-parts --report /org/backports.org/scripts/distmnt
+
+echo Daily cron scripts successful.
diff --git a/config/backports.org/cron.monthly b/config/backports.org/cron.monthly
new file mode 100755 (executable)
index 0000000..f604936
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# Run at the beginning of the month via cron, out of katie's crontab.
+
+set -e
+export SCRIPTVARS=/org/backports.org/dak-config/vars
+. $SCRIPTVARS
+
+################################################################################
+
+DATE=`date -d yesterday +%y%m`
+
+cd ${basedir}/mail/archive
+for m in mail import; do
+    if [ -f $m ]; then
+        mv $m ${m}-$DATE
+        sleep 20
+        gzip -9 ${m}-$DATE
+        chgrp debadmin ${m}-$DATE.gz
+        chmod 660 ${m}-$DATE.gz
+    fi;
+done
+
+DATE=`date +%Y-%m`
+cd ${basedir}/log
+touch $DATE
+rm current
+ln -s $DATE current
+chmod g+w $DATE
+chown dak:debadmin $DATE
+
+dak split-done
+################################################################################
diff --git a/config/backports.org/cron.unchecked b/config/backports.org/cron.unchecked
new file mode 100755 (executable)
index 0000000..bb2337e
--- /dev/null
@@ -0,0 +1,34 @@
+#! /bin/sh
+set -e
+export SCRIPTVARS=/org/backports.org/dak-config/vars
+. $SCRIPTVARS
+
+LOCKFILE="$lockdir/unchecked.lock"
+NOTICE="$lockdir/daily.lock"
+
+cleanup() {
+  rm -f "$LOCKFILE"
+  if [ ! -z $LOCKDAILY ]; then
+         rm -f "$NOTICE"
+  fi
+}
+trap cleanup 0
+
+# only run one cron.unchecked
+if lockfile -r3 $LOCKFILE; then
+       cd $unchecked
+
+       changes=$(find . -maxdepth 1 -mindepth 1 -type f -name \*.changes | sed -e "s,./,," | xargs)
+       report=$queuedir/REPORT
+       timestamp=$(date "+%Y-%m-%d %H:%M")
+
+       if [ ! -z "$changes" ]; then
+               echo "$timestamp": "$changes"  >> $report
+               dak process-unchecked -a $changes >> $report
+               echo "--" >> $report
+       else
+               echo "$timestamp": Nothing to do >> $report
+       fi
+fi
+
+rm -f "$LOCKFILE"
diff --git a/config/backports.org/cron.weekly b/config/backports.org/cron.weekly
new file mode 100755 (executable)
index 0000000..0ab9afd
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# Run once a week via cron, out of katie's crontab.
+
+set -e
+export SCRIPTVARS=/org/backports.org/dak-config/vars
+. $SCRIPTVARS
+
+################################################################################
+
+# Purge empty directories
+
+if [ ! -z "$(find $ftpdir/pool/ -type d -empty)" ]; then
+   find $ftpdir/pool/ -type d -empty | xargs rmdir;
+fi
+
+# Clean up apt-ftparchive's databases
+
+cd $configdir
+apt-ftparchive -q clean apt.conf
+
+################################################################################
diff --git a/config/backports.org/dak.conf b/config/backports.org/dak.conf
new file mode 100644 (file)
index 0000000..684d4f9
--- /dev/null
@@ -0,0 +1,425 @@
+Dinstall
+{
+   // Both need to be defined at the moment, but they can point to the
+   // same file.
+   GPGKeyring {
+      "/org/backports.org/keyrings/keyring.gpg";
+   };
+   // To sign the release files. Adjust the keyid!
+   // Note: Key must be without a passphrase or it wont work automagically!
+   SigningKeyring "/org/backports.org/s3kr1t/dot-gnupg/secring.gpg";
+   SigningPubKeyring "/org/backports.org/s3kr1t/dot-gnupg/pubring.gpg";
+   SigningKeyIds "16BA136C";
+   SendmailCommand "/usr/sbin/sendmail -odq -oi -t";
+   MyEmailAddress "Backports.org archive Installer <installer@backports.org>";
+   MyAdminAddress "ftpmaster@backports.org";
+   MyHost "backports.org";  // used for generating user@my_host addresses in e.g. manual_reject()
+   MyDistribution "Backports.org archive"; // Used in emails
+   // Alicia and melanie can use it
+   BugServer "bugs.backports.org";
+   // melanie uses the packages server.
+   // PackagesServer "packages.test.backports.org";
+   // If defined then the package@this.server gets a copy of most of the
+   // actions related to the package. For an example look at
+   // packages.qa.debian.org
+   // TrackingServer "packages.qa.test.backports.org";
+   LockFile "/org/backports.org/lock/dinstall.lock";
+   // If defined this address gets a bcc of all mails.
+   // FIXME: Einrichten wenn das hier produktiv geht!
+   Bcc "backports-archive@lists.backports.org";
+   GroupOverrideFilename "override.group-maint";
+   FutureTimeTravelGrace 28800; // 8 hours
+   PastCutoffYear "1984";
+   SkipTime 300;
+   // If defined then mails to close bugs are sent to the bugserver.
+   CloseBugs "false";
+   OverrideDisparityCheck "true";
+   DefaultSuite "etch-backports";
+   Reject
+   {
+     NoSourceOnly "true";
+     ReleaseTransitions "/org/backports.org/hints/transitions.yaml";
+   };
+   // If set, only send mails to addresses listed there.
+   MailWhiteList "/org/backports.org/dak/config/backports.org/mail-whitelist";
+};
+
+Generate-Index-Diffs
+{
+   Options
+   {
+     TempDir "/org/backports.org/tiffani";
+     MaxDiffs { Default 50; };
+   };
+};
+
+Override
+{
+   MyEmailAddress "Backports.org archive FTP Masters <ftpmaster@backports.org>";
+};
+
+Add-User
+{
+// Should we sent a mail to newly added users?
+  SendEmail "true";
+
+// Should we create an account so they can login?
+// Account will be created with the defaults from adduser, so adjust
+// it's configuration to fit your needs.
+// NOTE: This requires that your dak user has a sudo entry, allowing
+// to run /usr/sbin/useradd!
+  CreateAccount "false";
+
+// Note: This is a comma separated list of additional groupnames to
+// which uma should add the user. NO spaces between the groupnames or
+// useradd will die.
+// Disable it if you dont want or need that feature.
+  GID "debuser";
+
+};
+
+Check-Overrides
+{
+  OverrideSuites
+  {
+    lenny-backports
+    {
+      Process "1";
+//      OriginSuite "Unstable";
+    };
+
+    etch-backports
+    {
+      Process "1";
+//      OriginSuite "Unstable";
+    };
+
+//    Unstable
+//    {
+//    Process "0";
+//  };
+  };
+};
+
+
+Import-Users-From-Passwd
+{
+  // The Primary GID of your users. Using uma it is the gid from group users.
+  ValidGID "1001";
+  // Comma separated list of users who are in Postgres but not the passwd file
+  KnownPostgres "postgres,katie";
+};
+
+Clean-Queues
+{
+  Options
+  {
+    Days 14;
+   };
+ MorgueSubDir "queues";
+};
+
+Control-Overrides
+{
+  Options
+  {
+    Component "main";
+    Suite "etch-backports";
+    Type "deb";
+   };
+
+ ComponentPosition "prefix"; // Whether the component is prepended or appended to the section name
+};
+
+Rm
+{
+  Options
+  {
+    Suite "etch-backports";
+   };
+
+   MyEmailAddress "Backports.org archive Maintenance <ftpmaster@backports.org>";
+   LogFile "/org/backports.org/ftp/removals.txt";
+};
+
+Import-Archive
+{
+  ExportDir "/org/backports.org/dak/import-archive-files/";
+};
+
+Clean-Suites
+{
+  // How long (in seconds) dead packages are left before being killed
+  StayOfExecution 1209600; // 14 days
+  AcceptedAutoBuildStayOfExecution 86400; // 24 hours
+  MorgueSubDir "pool";
+};
+
+Process-New
+{
+  AcceptedLockFile "/org/backports.org/lock/unchecked.lock";
+};
+
+Suite
+{
+  lenny-backports
+  {
+       Components
+       {
+         main;
+         contrib;
+         non-free;
+       };
+       Architectures
+       {
+         source;
+         all;
+         alpha;
+         amd64;
+         arm;
+         armel;
+         hppa;
+         i386;
+         ia64;
+         mips;
+         mipsel;
+         powerpc;
+         s390;
+         sparc;
+       };
+
+       Announce "backports-changes@lists.backports.org";
+       Origin "Backports.org archive";
+       Description "Backports for the Lenny Distribution";
+       CodeName "lenny-backports";
+       OverrideCodeName "lenny-backports";
+       Priority "7";
+       NotAutomatic "yes";
+  };
+
+  etch-backports
+  {
+       Components
+       {
+         main;
+         contrib;
+         non-free;
+       };
+       Architectures
+       {
+         source;
+         all;
+         alpha;
+         amd64;
+         arm;
+         hppa;
+         hurd-i386;
+         i386;
+         ia64;
+         m68k;
+         mips;
+         mipsel;
+         powerpc;
+         s390;
+         sh;
+         sparc;
+       };
+       Announce "backports-changes@lists.backports.org";
+       Origin "Backports.org archive";
+       Description "Backports for the Etch Distribution";
+       CodeName "etch-backports";
+       OverrideCodeName "etch-backports";
+       Priority "7";
+       NotAutomatic "yes";
+  };
+
+};
+
+Dir
+{
+  Root "/org/backports.org/ftp/";
+  Pool "/org/backports.org/ftp/pool/";
+  Templates "/org/backports.org/dak/templates/";
+  PoolRoot "pool/";
+  Lists "/org/backports.org/database/dists/";
+  Log "/org/backports.org/log/";
+  Morgue "/org/backports.org/morgue/";
+  MorgueReject "reject";
+  Lock "/org/backports.org/lock";
+  Override "/org/backports.org/scripts/override/";
+  UrgencyLog "/org/backports.org/testing/urgencies/";
+  Queue
+  {
+    Accepted "/org/backports.org/queue/accepted/";
+    Byhand "/org/backports.org/queue/byhand/";
+    Done "/org/backports.org/queue/done/";
+    Holding "/org/backports.org/queue/holding/";
+    New "/org/backports.org/queue/new/";
+    ProposedUpdates "/org/backports.org/queue/p-u-new/";
+    Reject "/org/backports.org/queue/reject/";
+    Unchecked "/org/backports.org/queue/unchecked/";
+    BTSVersionTrack "/org/backports.org/queue/bts_version_track/";
+    Embargoed "/org/backports.org/queue/Embargoed/";
+    Unembargoed "/org/backports.org/queue/Unembargoed/";
+    OldProposedUpdates "/org/backports.org/queue/Unembargoed/";
+  };
+};
+
+DB
+{
+  Name "projectb";
+  Host "";
+  Port -1;
+};
+
+SuiteMappings
+{
+ "propup-version stable-security testing";
+ "propup-version testing-security unstable";
+// "map stable proposed-updates";
+ "map lenny lenny-backports";
+ "map lenny-bpo lenny-backports";
+ "map etch etch-backports";
+// formi mag des nit
+// "map stable etch-backports";
+ "map etch-bpo etch-backports";
+// "map stable-security proposed-updates";
+// "map-unreleased stable unstable";
+// "map-unreleased proposed-updates unstable";
+// "map testing testing-proposed-updates";
+// "map testing-security testing-proposed-updates";
+// "map-unreleased testing unstable";
+// "map-unreleased testing-proposed-updates unstable";
+};
+
+Architectures
+{
+  source "Source";
+  all "Architecture Independent";
+  alpha "DEC Alpha";
+  amd64 "AMD x86_64 (AMD64)";
+  hurd-i386 "Intel ia32 running the HURD";
+  hppa "HP PA RISC";
+  arm "ARM";
+  armel "ARM EABI";
+  i386 "Intel ia32";
+  ia64 "Intel ia64";
+  m68k "Motorola Mc680x0";
+  mips "MIPS (Big Endian)";
+  mipsel "MIPS (Little Endian)";
+  powerpc "PowerPC";
+  s390 "IBM S/390";
+  sh "Hitatchi SuperH";
+  sparc "Sun SPARC/UltraSPARC";
+};
+
+Archive
+{
+  backports
+  {
+    OriginServer "backports.org";
+    PrimaryMirror "backports.org";
+    Description "Master Archive for Backports.org archive";
+  };
+};
+
+Component
+{
+  main
+  {
+       Description "Main";
+       MeetsDFSG "true";
+  };
+
+  contrib
+  {
+       Description "Contrib";
+       MeetsDFSG "true";
+  };
+
+  non-free
+  {
+        Description "Software that fails to meet the DFSG";
+        MeetsDFSG "false";
+  };
+
+};
+
+Section
+{
+  admin;
+  base;
+  comm;
+  debian-installer;
+  devel;
+  doc;
+  editors;
+  embedded;
+  electronics;
+  games;
+  gnome;
+  graphics;
+  hamradio;
+  interpreters;
+  kde;
+  libdevel;
+  libs;
+  mail;
+  math;
+  misc;
+  net;
+  news;
+  oldlibs;
+  otherosfs;
+  perl;
+  python;
+  science;
+  shells;
+  sound;
+  tex;
+  text;
+  utils;
+  web;
+  x11;
+};
+
+Priority
+{
+  required 1;
+  important 2;
+  standard 3;
+  optional 4;
+  extra 5;
+  source 0; // i.e. unused
+};
+
+OverrideType
+{
+  deb;
+  udeb;
+  dsc;
+};
+
+Location
+{
+  // Pool locations on backports.org
+  /org/backports.org/ftp/pool/
+    {
+      Archive "backports";
+      Type "pool";
+    };
+
+};
+
+Urgency
+{
+  Default "low";
+  Valid
+  {
+    low;
+    medium;
+    high;
+    emergency;
+    critical;
+  };
+};
diff --git a/config/backports.org/mail-whitelist b/config/backports.org/mail-whitelist
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/config/backports.org/vars b/config/backports.org/vars
new file mode 100644 (file)
index 0000000..e61a11b
--- /dev/null
@@ -0,0 +1,45 @@
+# locations used by many scripts
+
+base=/org/backports.org
+ftpdir=$base/ftp/
+webdir=$base/web
+
+archs="alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sh sparc"
+
+masterdir=$base/dak/
+overridedir=$base/scripts/override
+extoverridedir=$scriptdir/external-overrides
+configdir=$base/dak/config/backports.org/
+scriptsdir=$base/dak/scripts/backports.org/
+
+queuedir=$base/queue
+unchecked=$queuedir/unchecked/
+accepted=$queuedir/accepted/
+done=$queuedir/done/
+over=$base/over/
+lockdir=$base/lock/
+incoming=$base/incoming
+
+dbdir=$base/database/
+indices=$ftpdir/indices
+
+ftpgroup=debadmin
+
+copyoverrides="lenny-backports.contrib lenny-backports.contrib.src lenny-backports.main lenny-backports.main.debian-installer lenny-backports.main.src lenny-backports.extra.contrib lenny-backports.extra.main"
+
+# Change this to your hostname
+uploadhost=localhost
+uploaddir=/pub/UploadQueue/
+
+# What components to support
+components="main contrib non-free"
+suites="lenny-backports"
+override_types="deb dsc udeb"
+
+# temporary fix only!
+# export TMP=/org/backports.org/tmp
+# export TEMP=/org/backports.org/tmp
+# export TMPDIR==/org/backports.org/tmp
+
+PATH=$masterdir:$PATH
+umask 022
index 2df6072da4a7f83f9deb3f20978feac73402dd35..fcaa611348f265c5db5390ff1f68da52348a1468 100644 (file)
@@ -15,10 +15,10 @@ Default
    FileMode 0664;
 }
 
-tree "dists/stable/updates"
+tree "dists/oldstable/updates"
 {
-   FileList "/org/security.debian.org/dak-database/dists/stable_updates/$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/org/security.debian.org/dak-database/dists/stable_updates/$(SECTION)_source.list";
+   FileList "/org/security.debian.org/dak-database/dists/oldstable_updates/$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/org/security.debian.org/dak-database/dists/oldstable_updates/$(SECTION)_source.list";
    Sections "main contrib non-free";
    Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc source";
    BinOverride "override.etch.$(SECTION)";
@@ -29,10 +29,10 @@ tree "dists/stable/updates"
    Sources::Compress "gzip bzip2";
 };
 
-tree "dists/testing/updates"
+tree "dists/stable/updates"
 {
-   FileList "/org/security.debian.org/dak-database/dists/testing_updates/$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/org/security.debian.org/dak-database/dists/testing_updates/$(SECTION)_source.list";
+   FileList "/org/security.debian.org/dak-database/dists/stable_updates/$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/org/security.debian.org/dak-database/dists/stable_updates/$(SECTION)_source.list";
    Sections "main contrib non-free";
    Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
    BinOverride "override.lenny.$(SECTION)";
@@ -42,3 +42,17 @@ tree "dists/testing/updates"
    Packages::Compress "gzip bzip2";
    Sources::Compress "gzip bzip2";
 };
+
+tree "dists/testing/updates"
+{
+   FileList "/org/security.debian.org/dak-database/dists/testing_updates/$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/org/security.debian.org/dak-database/dists/testing_updates/$(SECTION)_source.list";
+   Sections "main contrib non-free";
+   Architectures "alpha amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.squeeze.$(SECTION)";
+   ExtraOverride "override.squeeze.extra.$(SECTION)";
+   SrcOverride "override.squeeze.$(SECTION).src";
+   Contents " ";
+   Packages::Compress "gzip bzip2";
+   Sources::Compress "gzip bzip2";
+};
index 16154a64dbaab4c92db2d91ca30fd46d4735f60c..85c1f3dca0ab91c99f30b175abe28fdb8193e166 100644 (file)
@@ -41,3 +41,16 @@ bindirectory "lenny"
    Packages::Extensions ".deb .udeb";
 };
 
+bindirectory "squeeze"
+{
+   Packages "squeeze/Packages";
+   Sources "squeeze/Sources";
+   Contents " ";
+
+   BinOverride "override.squeeze.all3";
+   SrcOverride "override.squeeze.all3.src";
+   BinCacheDB "packages-accepted-squeeze.db";
+   PathPrefix "";
+   Packages::Extensions ".deb .udeb";
+};
+
index c5bcbb055c7d7230fcaf570be9f650d4e284fce7..51110027f28578418622931e378907b74f27af92 100755 (executable)
@@ -2,9 +2,10 @@
 #
 # Executed after cron.unchecked
 
-ARCHS_stable="alpha amd64 arm hppa i386 ia64 mips mipsel powerpc sparc s390"
+ARCHS_oldstable="alpha amd64 arm hppa i386 ia64 mips mipsel powerpc sparc s390"
+ARCHS_stable="alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc sparc s390"
 ARCHS_testing="alpha amd64 armel hppa i386 ia64 mips mipsel powerpc sparc s390"
-DISTS="stable testing"
+DISTS="oldstable stable testing"
 SSH_SOCKET=~/.ssh/buildd.debian.org.socket
 
 set -e
index 8d949781f9816b891695bca67a69ae7fe8d7575b..e482a192b4b2e44a23b4a52690aa89e1b1acce75 100755 (executable)
@@ -20,9 +20,9 @@ find . -maxdepth 1 -mindepth 1 -type l | xargs --no-run-if-empty rm
 
 for suite in $suites; do
     case $suite in
-               oldstable) override_suite=sarge;;
-               stable) override_suite=etch;;
-               testing) override_suite=lenny;;
+               oldstable) override_suite=etch;;
+               stable) override_suite=lenny;;
+               testing) override_suite=squeeze;;
                *) echo "Unknown suite type ($suite)"; exit 1;;
     esac
     for component in $components; do
@@ -44,7 +44,7 @@ for suite in $suites; do
 done
 
 # Generate .all3 overides for the buildd support
-for dist in etch lenny; do
+for dist in etch lenny squeeze; do
     rm -f override.$dist.all3
     components="main contrib non-free";
     if [ -f override.$dist.main.debian-installer.gz ]; then
index ff74a599bf07cc5fed1f18f01b252b77b767ab34..7496da4aa41d0318b4f1ab34b2c70d4188ae760c 100644 (file)
@@ -25,6 +25,7 @@ Dinstall
    BXANotify "false";
    QueueBuildSuites
    {
+     oldstable;
      stable;
      testing;
    };
@@ -110,7 +111,7 @@ Suite
   // Priority determines which suite is used for the Maintainers file
   // as generated by 'dak make-maintainers' (highest wins).
 
-  Stable
+  OldStable
   {
        Components 
        {
@@ -145,7 +146,7 @@ Suite
        CopyDotDak "/org/security.debian.org/queue/done/";
   };
 
-  Testing
+  Stable
   {
        Components 
        {
@@ -174,20 +175,57 @@ Suite
        Version "";
        Origin "Debian";
        Label "Debian-Security";
-       Description "Debian testing Security Updates";
+       Description "Debian 5.0 Security Updates";
        ValidTime 864000; // 10 days
        CodeName "lenny";
        OverrideCodeName "lenny";
        CopyDotDak "/org/security.debian.org/queue/done/";
   };
+
+  Testing
+  {
+       Components
+       {
+         updates/main;
+         updates/contrib;
+         updates/non-free;
+       };
+       Architectures
+       {
+         source;
+         all;
+         amd64;
+         alpha;
+         armel;
+         hppa;
+         i386;
+         ia64;
+         mips;
+         mipsel;
+         powerpc;
+         s390;
+         sparc;
+       };
+       Announce "dak@security.debian.org";
+       Version "";
+       Origin "Debian";
+       Label "Debian-Security";
+       Description "Debian testing Security Updates";
+       ValidTime 864000; // 10 days
+       CodeName "squeeze";
+       OverrideCodeName "squeeze";
+       CopyDotDak "/org/security.debian.org/queue/done/";
+  };
 };
 
 SuiteMappings
 {
  "silent-map stable-security stable";
+ "silent-map oldstable-security oldstable";
  // JT - FIXME, hackorama
  // "silent-map testing-security stable";
-  "silent-map etch-secure stable";
+  "silent-map etch-secure oldstable";
+  "silent-map lenny-secure stable";
   "silent-map testing-security testing";
 };
 
@@ -367,6 +405,7 @@ Location
       Archive "security";
       Suites 
        {
+         OldStable;
          Stable;
          Testing;
         };
diff --git a/config/debian-security/map.sh b/config/debian-security/map.sh
new file mode 100755 (executable)
index 0000000..d0cbaf4
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+dak make-pkg-file-mapping | bzip2 -9 > /org/security.debian.org/ftp/indices/package-file.map.bz2
index e4757455a19c0a13b018f355d463f93888e2b43c..2add99ea8016e57d71d24b870920e4a1e5296944 100644 (file)
@@ -14,7 +14,7 @@ uploadhost=ftp-master.debian.org
 uploaddir=/pub/UploadQueue/
 
 components="main non-free contrib"
-suites="stable testing"
+suites="oldstable stable testing"
 override_types="deb dsc udeb"
 
 PATH=$masterdir:$PATH
index ff821f6979b0119281a521914ac124251666aea9..360177628f8baf08d03ffb1ea5d49a804b639b14 100644 (file)
@@ -20,10 +20,10 @@ TreeDefault
    Contents::Header "/srv/ftp.debian.org/dak/config/debian/Contents.top";
 };
 
-tree "dists/proposed-updates"
+tree "dists/oldstable-proposed-updates"
 {
-   FileList "/srv/ftp.debian.org/database/dists/proposed-updates_$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/srv/ftp.debian.org/database/dists/proposed-updates_$(SECTION)_source.list";
+   FileList "/srv/ftp.debian.org/database/dists/oldstable-proposed-updates_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp.debian.org/database/dists/oldstable-proposed-updates_$(SECTION)_source.list";
    Sections "main contrib non-free";
    Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc source";
    BinOverride "override.etch.$(SECTION)";
@@ -32,16 +32,28 @@ tree "dists/proposed-updates"
    Contents " ";
 };
 
-tree "dists/testing"
+tree "dists/proposed-updates"
 {
-   FakeDI "dists/unstable";
-   FileList "/srv/ftp.debian.org/database/dists/testing_$(SECTION)_binary-$(ARCH).list";
-   SourceFileList "/srv/ftp.debian.org/database/dists/testing_$(SECTION)_source.list";
+   FileList "/srv/ftp.debian.org/database/dists/proposed-updates_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp.debian.org/database/dists/proposed_updates_$(SECTION)_source.list";
    Sections "main contrib non-free";
    Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
    BinOverride "override.lenny.$(SECTION)";
    ExtraOverride "override.lenny.extra.$(SECTION)";
    SrcOverride "override.lenny.$(SECTION).src";
+   Contents " ";
+};
+
+tree "dists/testing"
+{
+   FakeDI "dists/unstable";
+   FileList "/srv/ftp.debian.org/database/dists/testing_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp.debian.org/database/dists/testing_$(SECTION)_source.list";
+   Sections "main contrib non-free";
+   Architectures "alpha amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.squeeze.$(SECTION)";
+   ExtraOverride "override.squeeze.extra.$(SECTION)";
+   SrcOverride "override.squeeze.$(SECTION).src";
 };
 
 tree "dists/testing-proposed-updates"
@@ -49,10 +61,10 @@ tree "dists/testing-proposed-updates"
    FileList "/srv/ftp.debian.org/database/dists/testing-proposed-updates_$(SECTION)_binary-$(ARCH).list";
    SourceFileList "/srv/ftp.debian.org/database/dists/testing-proposed-updates_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-   BinOverride "override.lenny.$(SECTION)";
-   ExtraOverride "override.lenny.extra.$(SECTION)";
-   SrcOverride "override.lenny.$(SECTION).src";
+   Architectures "alpha amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.squeeze.$(SECTION)";
+   ExtraOverride "override.squeeze.extra.$(SECTION)";
+   SrcOverride "override.squeeze.$(SECTION).src";
    Contents " ";
 };
 
@@ -61,7 +73,7 @@ tree "dists/unstable"
    FileList "/srv/ftp.debian.org/database/dists/unstable_$(SECTION)_binary-$(ARCH).list";
    SourceFileList "/srv/ftp.debian.org/database/dists/unstable_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc source";
+   Architectures "alpha amd64 armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc source";
    BinOverride "override.sid.$(SECTION)";
    ExtraOverride "override.sid.extra.$(SECTION)";
    SrcOverride "override.sid.$(SECTION).src";
@@ -69,9 +81,9 @@ tree "dists/unstable"
 
 // debian-installer
 
-tree "dists/proposed-updates/main"
+tree "dists/oldstable-proposed-updates/main"
 {
-   FileList "/srv/ftp.debian.org/database/dists/proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
+   FileList "/srv/ftp.debian.org/database/dists/oldstable-proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
    Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc";
    BinOverride "override.etch.main.$(SECTION)";
@@ -81,15 +93,27 @@ tree "dists/proposed-updates/main"
    Contents " ";
 };
 
-tree "dists/testing/main"
+tree "dists/proposed-updates/main"
 {
-   FileList "/srv/ftp.debian.org/database/dists/testing_main_$(SECTION)_binary-$(ARCH).list";
+   FileList "/srv/ftp.debian.org/database/dists/proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
    Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
    BinOverride "override.lenny.main.$(SECTION)";
    SrcOverride "override.lenny.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
+   Contents " ";
+};
+
+tree "dists/testing/main"
+{
+   FileList "/srv/ftp.debian.org/database/dists/testing_main_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "alpha amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
+   BinOverride "override.squeeze.main.$(SECTION)";
+   SrcOverride "override.squeeze.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
    Contents "$(DIST)/../Contents-udeb";
 };
 
@@ -97,9 +121,9 @@ tree "dists/testing/non-free"
 {
    FileList "/srv/ftp.debian.org/database/dists/testing_non-free_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.lenny.main.$(SECTION)";
-   SrcOverride "override.lenny.main.src";
+   Architectures "alpha amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
+   BinOverride "override.squeeze.main.$(SECTION)";
+   SrcOverride "override.squeeze.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents "$(DIST)/../Contents-udeb-nf";
@@ -109,9 +133,9 @@ tree "dists/testing-proposed-updates/main"
 {
    FileList "/srv/ftp.debian.org/database/dists/testing-proposed-updates_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.lenny.main.$(SECTION)";
-   SrcOverride "override.lenny.main.src";
+   Architectures "alpha amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
+   BinOverride "override.squeeze.main.$(SECTION)";
+   SrcOverride "override.squeeze.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents " ";
@@ -121,7 +145,7 @@ tree "dists/unstable/main"
 {
    FileList "/srv/ftp.debian.org/database/dists/unstable_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc";
+   Architectures "alpha amd64 armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc";
    BinOverride "override.sid.main.$(SECTION)";
    SrcOverride "override.sid.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
@@ -133,7 +157,7 @@ tree "dists/unstable/non-free"
 {
    FileList "/srv/ftp.debian.org/database/dists/unstable_non-free_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc";
+   Architectures "alpha amd64 armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc";
    BinOverride "override.sid.main.$(SECTION)";
    SrcOverride "override.sid.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
@@ -145,7 +169,7 @@ tree "dists/experimental/main"
 {
    FileList "/srv/ftp.debian.org/database/dists/experimental_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
+   Architectures "alpha amd64 armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
    BinOverride "override.sid.main.$(SECTION)";
    SrcOverride "override.sid.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
@@ -157,7 +181,7 @@ tree "dists/experimental/non-free"
 {
    FileList "/srv/ftp.debian.org/database/dists/experimental_non-free_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc";
+   Architectures "alpha amd64 armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc";
    BinOverride "override.sid.main.$(SECTION)";
    SrcOverride "override.sid.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
@@ -172,7 +196,7 @@ tree "dists/experimental"
    FileList "/srv/ftp.debian.org/database/dists/experimental_$(SECTION)_binary-$(ARCH).list";
    SourceFileList "/srv/ftp.debian.org/database/dists/experimental_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 arm armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc source";
+   Architectures "alpha amd64 armel hppa hurd-i386 i386 ia64 mips mipsel powerpc s390 sparc source";
    BinOverride "override.sid.$(SECTION)";
    SrcOverride "override.sid.$(SECTION).src";
 };
diff --git a/config/debian/apt.conf.oldstable b/config/debian/apt.conf.oldstable
new file mode 100644 (file)
index 0000000..5f96e40
--- /dev/null
@@ -0,0 +1,58 @@
+Dir
+{
+   ArchiveDir "/srv/ftp.debian.org/ftp/";
+   OverrideDir "/srv/ftp.debian.org/scripts/override/";
+   CacheDir "/srv/ftp.debian.org/database/";
+};
+
+Default
+{
+   Packages::Compress "gzip bzip2";
+   Sources::Compress "gzip bzip2";
+   Contents::Compress "gzip";
+   DeLinkLimit 0;
+   FileMode 0664;
+}
+
+TreeDefault
+{
+   Contents::Header "/srv/ftp.debian.org/dak/config/debian/Contents.top";
+};
+
+tree "dists/oldstable"
+{
+   FileList "/srv/ftp.debian.org/database/dists/oldstable_$(SECTION)_binary-$(ARCH).list";
+   SourceFileList "/srv/ftp.debian.org/database/dists/oldstable_$(SECTION)_source.list";
+   Sections "main contrib non-free";
+   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.etch.$(SECTION)";
+   ExtraOverride "override.etch.extra.$(SECTION)";
+   SrcOverride "override.etch.$(SECTION).src";
+};
+
+// debian-installer
+
+tree "dists/oldstable/main"
+{
+   FileList "/srv/ftp.debian.org/database/dists/oldstable_main_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc";
+   BinOverride "override.etch.main.$(SECTION)";
+   SrcOverride "override.etch.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   Contents "$(DIST)/../Contents-udeb";
+};
+
+tree "dists/oldstable/non-free"
+{
+   FileList "/srv/ftp.debian.org/database/dists/oldstable_non-free_$(SECTION)_binary-$(ARCH).list";
+   Sections "debian-installer";
+   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc";
+   BinOverride "override.etch.main.$(SECTION)";
+   SrcOverride "override.etch.main.src";
+   BinCacheDB "packages-debian-installer-$(ARCH).db";
+   Packages::Extensions ".udeb";
+   Contents "$(DIST)/../Contents-udeb-nf";
+};
+
index c75b5f04dc5e3dc49cb223d7f73f7affa8017412..7a16f0663d872e768ec1a61a4342b65b51761585 100644 (file)
@@ -1,4 +1,4 @@
-Dir 
+Dir
 {
    ArchiveDir "/srv/ftp.debian.org/ftp/";
    OverrideDir "/srv/ftp.debian.org/scripts/override/";
@@ -24,10 +24,10 @@ tree "dists/stable"
    FileList "/srv/ftp.debian.org/database/dists/stable_$(SECTION)_binary-$(ARCH).list";
    SourceFileList "/srv/ftp.debian.org/database/dists/stable_$(SECTION)_source.list";
    Sections "main contrib non-free";
-   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc source";
-   BinOverride "override.etch.$(SECTION)";
-   ExtraOverride "override.etch.extra.$(SECTION)";
-   SrcOverride "override.etch.$(SECTION).src";
+   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc source";
+   BinOverride "override.lenny.$(SECTION)";
+   ExtraOverride "override.lenny.extra.$(SECTION)";
+   SrcOverride "override.lenny.$(SECTION).src";
 };
 
 // debian-installer
@@ -36,9 +36,9 @@ tree "dists/stable/main"
 {
    FileList "/srv/ftp.debian.org/database/dists/stable_main_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.etch.main.$(SECTION)";
-   SrcOverride "override.etch.main.src";
+   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
+   BinOverride "override.lenny.main.$(SECTION)";
+   SrcOverride "override.lenny.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents "$(DIST)/../Contents-udeb";
@@ -48,9 +48,9 @@ tree "dists/stable/non-free"
 {
    FileList "/srv/ftp.debian.org/database/dists/stable_non-free_$(SECTION)_binary-$(ARCH).list";
    Sections "debian-installer";
-   Architectures "alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc";
-   BinOverride "override.etch.main.$(SECTION)";
-   SrcOverride "override.etch.main.src";
+   Architectures "alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc";
+   BinOverride "override.lenny.main.$(SECTION)";
+   SrcOverride "override.lenny.main.src";
    BinCacheDB "packages-debian-installer-$(ARCH).db";
    Packages::Extensions ".udeb";
    Contents "$(DIST)/../Contents-udeb-nf";
index 15096657235cc09b43b70157f34d1db174b4466e..0629a102ae59545c78df18f258be489c6784e8d0 100755 (executable)
@@ -91,9 +91,6 @@ ts "o-p-u-new"
 
 ################################################################################
 
-# Temporary until lenny is there
-dak control-suite -s lenny-r0 /srv/ftp.debian.org/misc/lenny-r0.txt
-
 echo "Synchronizing i18n package descriptions"
 # First sync their newest data
 cd ${scriptdir}/i18nsync
@@ -110,7 +107,7 @@ if $(gpgv --keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/pubring.gpg timestamp.g
         # Lets check!
         if ${scriptsdir}/ddtp-i18n-check.sh . ${scriptdir}/i18n/${TSTAMP}; then
                        # Yay, worked, lets copy around
-                       for dir in lenny sid; do
+                       for dir in squeeze sid; do
                                if [ -d dists/${dir}/ ]; then
                                        cd dists/${dir}/main/i18n
                                        rsync -aq --delete --delete-after  . ${ftpdir}/dists/${dir}/main/i18n/.
@@ -285,8 +282,8 @@ echo "Exporting package data foo for i18n project"
 STAMP=$(date "+%Y%m%d%H%M")
 mkdir -p ${scriptdir}/i18n/${STAMP}
 cd ${scriptdir}/i18n/${STAMP}
-dak control-suite -l stable > etch
-dak control-suite -l testing > lenny
+dak control-suite -l stable > lenny
+dak control-suite -l testing > squeeze
 dak control-suite -l unstable > sid
 echo "${STAMP}" > timestamp
 gpg --secret-keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/secring.gpg --keyring /srv/ftp.debian.org/s3kr1t/dot-gnupg/pubring.gpg --no-options --batch --no-tty --armour --default-key 6070D3A1 --detach-sign -o timestamp.gpg timestamp
index 3e73e4bac6a0d57848bb4dd908018495b7eec7f2..e5a82864f49a4fe6203a5e32f83310192638d603 100644 (file)
@@ -37,6 +37,14 @@ Dinstall
      NoSourceOnly "true";
      ReleaseTransitions "/srv/ftp.debian.org/web/transitions.yaml";
    };
+   // if you setup an own dak repository and want to upload Debian packages you most possibly want
+   // to set the following option to a real path/filename and then enter those mail addresses that
+   // you want to be able to receive mails generated by your dak installation. This avoids spamming
+   // the real maintainers of a package you upload with mail.
+   // format of entries: one entry per line. Either an email address directly, or a regular expression,
+   // prefixed by "RE:". Examples: "jane.doe@domain.com" or "RE:jane[^@]@domain.com", where the first will
+   // only allow to mail jane.doe@domain.com while the second will mail all of jane*@domain.com
+   //  MailWhiteList "/some/path/to/a/file";
 };
 
 Transitions
@@ -140,7 +148,7 @@ Reject-Proposed-Updates
 {
    StableRejector "the Stable Release Team";
    StableMail "debian-release@lists.debian.org";
-   MoreInfoURL "http://release.debian.org/stable/4.0/4.0r6/";
+   MoreInfoURL "http://release.debian.org/stable/4.0/4.0r7/";
 };
 
 Import-LDAP-Fingerprints
@@ -193,7 +201,7 @@ Check-Overrides
 
 Suite
 {
-  Stable
+  OldStable
   {
        Components
        {
@@ -225,6 +233,107 @@ Suite
        OverrideCodeName "etch";
        Priority "5";
        Untouchable "1";
+       ChangeLogBase "dists/oldstable/";
+       UdebComponents
+       {
+         main;
+         non-free;
+       };
+  };
+
+  Oldstable-Proposed-Updates
+  {
+       Components
+       {
+         main;
+         contrib;
+         non-free;
+       };
+       Architectures
+       {
+         source;
+         all;
+         alpha;
+         amd64;
+         arm;
+         hppa;
+         i386;
+         ia64;
+         mips;
+         mipsel;
+         powerpc;
+         s390;
+         sparc;
+       };
+       Announce "debian-changes@lists.debian.org";
+       CopyChanges "dists/oldstable-proposed-updates/";
+       CopyDotDak "/srv/ftp.debian.org/queue/oldstable-proposed-updates/";
+       CommentsDir "/srv/ftp.debian.org/queue/o-p-u-new/COMMENTS/";
+       Version "4.0-updates";
+       Origin "Debian";
+       Description "Debian 4.0 Proposed Updates - Not Released";
+       CodeName "etch-proposed-updates";
+       OverrideCodeName "etch";
+       OverrideSuite "oldstable";
+       ValidTime 604800; // 7 days
+       Priority "4";
+       VersionChecks
+       {
+         MustBeNewerThan
+         {
+           OldStable;
+         };
+         MustBeOlderThan
+         {
+           Stable;
+           Testing;
+           Unstable;
+           Experimental;
+         };
+         Enhances
+          {
+           OldStable;
+         };
+       };
+       UdebComponents
+       {
+         main;
+       };
+  };
+
+  Stable
+  {
+       Components
+       {
+         main;
+         contrib;
+         non-free;
+       };
+       Architectures
+       {
+         source;
+         all;
+         alpha;
+         amd64;
+         arm;
+         armel;
+         hppa;
+         i386;
+         ia64;
+         mips;
+         mipsel;
+         powerpc;
+         s390;
+         sparc;
+       };
+       Announce "debian-changes@lists.debian.org";
+       // Version "5.0r0";
+       Origin "Debian";
+       // Description "Debian 5.0r0 Released 14 February 2009";
+       CodeName "lenny";
+       OverrideCodeName "lenny";
+       Priority "5";
+       Untouchable "1";
        ChangeLogBase "dists/stable/";
        UdebComponents
        {
@@ -248,6 +357,7 @@ Suite
          alpha;
          amd64;
          arm;
+          armel;
          hppa;
          i386;
          ia64;
@@ -261,11 +371,11 @@ Suite
        CopyChanges "dists/proposed-updates/";
        CopyDotDak "/srv/ftp.debian.org/queue/proposed-updates/";
        CommentsDir "/srv/ftp.debian.org/queue/p-u-new/COMMENTS/";
-       Version "4.0-updates";
+       Version "5.0-updates";
        Origin "Debian";
-       Description "Debian 4.0 Proposed Updates - Not Released";
-       CodeName "etch-proposed-updates";
-       OverrideCodeName "etch";
+       Description "Debian 5.0 Proposed Updates - Not Released";
+       CodeName "lenny-proposed-updates";
+       OverrideCodeName "lenny";
        OverrideSuite "stable";
        ValidTime 604800; // 7 days
        Priority "4";
@@ -289,6 +399,7 @@ Suite
        UdebComponents
        {
          main;
+         non-free;
        };
   };
 
@@ -306,7 +417,6 @@ Suite
          all;
          alpha;
          amd64;
-         arm;
          armel;
          hppa;
          i386;
@@ -320,8 +430,8 @@ Suite
        Announce "debian-testing-changes@lists.debian.org";
        Origin "Debian";
        Description "Debian Testing distribution - Not Released";
-       CodeName "lenny";
-       OverrideCodeName "lenny";
+       CodeName "squeeze";
+       OverrideCodeName "squeeze";
        ValidTime 604800; // 7 days
        Priority "5";
        UdebComponents
@@ -345,7 +455,6 @@ Suite
          all;
          alpha;
          amd64;
-         arm;
          armel;
          hppa;
          i386;
@@ -359,8 +468,8 @@ Suite
        Announce "debian-testing-changes@lists.debian.org";
        Origin "Debian";
        Description "Debian Testing distribution updates - Not Released";
-       CodeName "lenny-proposed-updates";
-       OverrideCodeName "lenny";
+       CodeName "squeeze-proposed-updates";
+       OverrideCodeName "squeeze";
        OverrideSuite "testing";
        ValidTime 604800; // 7 days
        Priority "6";
@@ -430,7 +539,6 @@ Suite
          all;
          alpha;
          amd64;
-         arm;
          armel;
          hppa;
          hurd-i386;
@@ -480,7 +588,6 @@ Suite
          all;
          alpha;
          amd64;
-         arm;
          armel;
          hppa;
          hurd-i386;
@@ -523,11 +630,11 @@ Suite
 
 SuiteMappings
 {
-// "propup-version oldstable-security stable testing testing-proposed-updates unstable";
+ "propup-version oldstable-security stable testing testing-proposed-updates unstable";
  "propup-version stable-security testing testing-proposed-updates unstable";
  "propup-version testing-security unstable";
-// "map oldstable oldstable-proposed-updates";
-// "map oldstable-security oldstable-proposed-updates";
+ "map oldstable oldstable-proposed-updates";
+ "map oldstable-security oldstable-proposed-updates";
  "map stable proposed-updates";
  "map stable-security proposed-updates";
  "map stable-proposed-updates proposed-updates";
index 8f311dd8ce94f381f5a43c8d8d5249e0a39fb777..d37df0e35a367ad2f20bb287e61f2fd2f8e6ae5a 100644 (file)
@@ -25,7 +25,7 @@ incoming=$base/incoming
 
 ftpgroup=debadmin
 
-copyoverrides="etch.contrib etch.contrib.src etch.main etch.main.src etch.non-free etch.non-free.src etch.extra.main etch.extra.non-free etch.extra.contrib etch.main.debian-installer sid.contrib sid.contrib.src sid.main sid.main.debian-installer sid.main.src sid.non-free sid.non-free.src sid.extra.contrib sid.extra.main sid.extra.non-free lenny.contrib lenny.contrib.src lenny.main lenny.main.src lenny.non-free lenny.non-free.src lenny.extra.main lenny.extra.contrib lenny.extra.non-free"
+copyoverrides="etch.contrib etch.contrib.src etch.main etch.main.src etch.non-free etch.non-free.src etch.extra.main etch.extra.non-free etch.extra.contrib etch.main.debian-installer sid.contrib sid.contrib.src sid.main sid.main.debian-installer sid.main.src sid.non-free sid.non-free.src sid.extra.contrib sid.extra.main sid.extra.non-free lenny.contrib lenny.contrib.src lenny.main lenny.main.src lenny.non-free lenny.non-free.src lenny.extra.main lenny.extra.contrib lenny.extra.non-free squeeze.contrib squeeze.contrib.src squeeze.main squeeze.main.src squeeze.non-free squeeze.non-free.src squeeze.extra.main squeeze.extra.contrib squeeze.extra.non-free"
 
 PATH=$masterdir:$PATH
 umask 022
diff --git a/dak/add_user.py b/dak/add_user.py
new file mode 100755 (executable)
index 0000000..fd06a72
--- /dev/null
@@ -0,0 +1,251 @@
+#!/usr/bin/env python
+
+"""
+Add a user to to the uid/maintainer/fingerprint table and
+add his key to the GPGKeyring
+
+@contact: Debian FTP Master <ftpmaster@debian.org>
+@copyright: 2004, 2009  Joerg Jaspert <joerg@ganneff.de>
+@license: GNU General Public License version 2 or later
+"""
+
+################################################################################
+# <elmo> wow, sounds like it'll be a big step up.. configuring dak on a
+#        new machine even scares me :)
+################################################################################
+
+# You don't want to read this script if you know python.
+# I know what I say. I dont know python and I wrote it. So go and read some other stuff.
+
+import commands
+import pg
+import re
+import sys
+import time
+import os
+import apt_pkg
+from daklib import database
+from daklib import logging
+from daklib import queue
+from daklib import utils
+from daklib.regexes import re_gpg_fingerprint, re_user_address, re_user_mails, re_user_name
+
+################################################################################
+
+Cnf = None
+projectB = None
+Logger = None
+Upload = None
+Subst = None
+
+################################################################################
+
+def usage(exit_code=0):
+    print """Usage: add-user [OPTION]...
+Adds a new user to the dak databases and keyrings
+
+    -k, --key                keyid of the User
+    -u, --user               userid of the User
+    -c, --create             create a system account for the user
+    -h, --help               show this help and exit."""
+    sys.exit(exit_code)
+
+################################################################################
+# Stolen from userdir-ldap
+# Compute a random password using /dev/urandom.
+def GenPass():
+   # Generate a 10 character random string
+   SaltVals = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/."
+   Rand = open("/dev/urandom")
+   Password = ""
+   for i in range(0,15):
+      Password = Password + SaltVals[ord(Rand.read(1)[0]) % len(SaltVals)]
+   return Password
+
+# Compute the MD5 crypted version of the given password
+def HashPass(Password):
+   import crypt
+   # Hash it telling glibc to use the MD5 algorithm - if you dont have
+   # glibc then just change Salt = "$1$" to Salt = ""
+   SaltVals = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/."
+   Salt  = "$1$"
+   Rand = open("/dev/urandom")
+   for x in range(0,10):
+      Salt = Salt + SaltVals[ord(Rand.read(1)[0]) % len(SaltVals)]
+   Pass = crypt.crypt(Password,Salt)
+   if len(Pass) < 14:
+      raise "Password Error", "MD5 password hashing failed, not changing the password!"
+   return Pass
+
+################################################################################
+
+def createMail(login, passwd, keyid, keyring):
+    import GnuPGInterface
+
+    message= """
+
+Additionally there is now an account created for you.
+
+"""
+    message+= "\nYour password for the login %s is: %s\n" % (login, passwd)
+
+    gnupg = GnuPGInterface.GnuPG()
+    gnupg.options.armor = 1
+    gnupg.options.meta_interactive = 0
+    gnupg.options.extra_args.append("--no-default-keyring")
+    gnupg.options.extra_args.append("--always-trust")
+    gnupg.options.extra_args.append("--no-secmem-warning")
+    gnupg.options.extra_args.append("--keyring=%s" % keyring)
+    gnupg.options.recipients = [keyid]
+    proc = gnupg.run(['--encrypt'], create_fhs=['stdin', 'stdout'])
+    proc.handles['stdin'].write(message)
+    proc.handles['stdin'].close()
+    output = proc.handles['stdout'].read()
+    proc.handles['stdout'].close()
+    proc.wait()
+    return output
+
+################################################################################
+
+def main():
+    global Cnf, projectB
+    keyrings = None
+
+    Cnf = daklib.utils.get_conf()
+
+    Arguments = [('h',"help","Add-User::Options::Help"),
+                 ('c',"create","Add-User::Options::Create"),
+                 ('k',"key","Add-User::Options::Key", "HasArg"),
+                 ('u',"user","Add-User::Options::User", "HasArg"),
+                 ]
+
+    for i in [ "help", "create" ]:
+       if not Cnf.has_key("Add-User::Options::%s" % (i)):
+           Cnf["Add-User::Options::%s" % (i)] = ""
+
+    apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv)
+
+    Options = Cnf.SubTree("Add-User::Options")
+    if Options["help"]:
+        usage()
+
+    projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"]))
+    daklib.database.init(Cnf, projectB)
+
+    if not keyrings:
+        keyrings = Cnf.ValueList("Dinstall::GPGKeyring")
+
+# Ignore the PGP keyring for download of new keys. Ignore errors, if key is missing it will
+# barf with the next commands.
+    cmd = "gpg --no-secmem-warning --no-default-keyring %s --recv-keys %s" \
+           % (daklib.utils.gpg_keyring_args(keyrings), Cnf["Add-User::Options::Key"])
+    (result, output) = commands.getstatusoutput(cmd)
+
+    cmd = "gpg --with-colons --no-secmem-warning --no-auto-check-trustdb --no-default-keyring %s --with-fingerprint --list-key %s" \
+           % (daklib.utils.gpg_keyring_args(keyrings),
+              Cnf["Add-User::Options::Key"])
+    (result, output) = commands.getstatusoutput(cmd)
+    m = re_gpg_fingerprint.search(output)
+    if not m:
+       print output
+        daklib.utils.fubar("0x%s: (1) No fingerprint found in gpg output but it returned 0?\n%s" \
+                                       % (Cnf["Add-User::Options::Key"], daklib.utils.prefix_multi_line_string(output, \
+                                                                                                                                                               " [GPG output:] ")))
+    primary_key = m.group(1)
+    primary_key = primary_key.replace(" ","")
+
+    uid = ""
+    if Cnf.has_key("Add-User::Options::User") and Cnf["Add-User::Options::User"]:
+        uid = Cnf["Add-User::Options::User"]
+        name = Cnf["Add-User::Options::User"]
+    else:
+        u = re_user_address.search(output)
+        if not u:
+            print output
+            daklib.utils.fubar("0x%s: (2) No userid found in gpg output but it returned 0?\n%s" \
+                        % (Cnf["Add-User::Options::Key"], daklib.utils.prefix_multi_line_string(output, " [GPG output:] ")))
+        uid = u.group(1)
+        n = re_user_name.search(output)
+        name = n.group(1)
+
+# Look for all email addresses on the key.
+    emails=[]
+    for line in output.split('\n'):
+        e = re_user_mails.search(line)
+        if not e:
+            continue
+        emails.append(e.group(2))
+
+
+    print "0x%s -> %s <%s> -> %s -> %s" % (Cnf["Add-User::Options::Key"], name, emails[0], uid, primary_key)
+
+    prompt = "Add user %s with above data (y/N) ? " % (uid)
+    yn = daklib.utils.our_raw_input(prompt).lower()
+
+    if yn == "y":
+# Create an account for the user?
+          summary = ""
+          if Cnf.FindB("Add-User::CreateAccount") or Cnf["Add-User::Options::Create"]:
+              password = GenPass()
+              pwcrypt = HashPass(password)
+              if Cnf.has_key("Add-User::GID"):
+                  cmd = "sudo /usr/sbin/useradd -g users -m -p '%s' -c '%s' -G %s %s" \
+                         % (pwcrypt, name, Cnf["Add-User::GID"], uid)
+              else:
+                  cmd = "sudo /usr/sbin/useradd -g users -m -p '%s' -c '%s' %s" \
+                         % (pwcrypt, name, uid)
+              (result, output) = commands.getstatusoutput(cmd)
+              if (result != 0):
+                   daklib.utils.fubar("Invocation of '%s' failed:\n%s\n" % (cmd, output), result)
+              try:
+                  summary+=createMail(uid, password, Cnf["Add-User::Options::Key"], Cnf["Dinstall::GPGKeyring"])
+              except:
+                  summary=""
+                  daklib.utils.warn("Could not prepare password information for mail, not sending password.")
+
+# Now add user to the database.
+          projectB.query("BEGIN WORK")
+          uid_id = daklib.database.get_or_set_uid_id(uid)
+          projectB.query('CREATE USER "%s"' % (uid))
+          projectB.query("COMMIT WORK")
+# The following two are kicked out in rhona, so we don't set them. kelly adds
+# them as soon as she installs a package with unknown ones, so no problems to expect here.
+# Just leave the comment in, to not think about "Why the hell aren't they added" in
+# a year, if we ever touch uma again.
+#          maint_id = daklib.database.get_or_set_maintainer_id(name)
+#          projectB.query("INSERT INTO fingerprint (fingerprint, uid) VALUES ('%s', '%s')" % (primary_key, uid_id))
+
+# Lets add user to the email-whitelist file if its configured.
+          if Cnf.has_key("Dinstall::MailWhiteList") and Cnf["Dinstall::MailWhiteList"] != "":
+              file = daklib.utils.open_file(Cnf["Dinstall::MailWhiteList"], "a")
+              for mail in emails:
+                  file.write(mail+'\n')
+              file.close()
+
+          print "Added:\nUid:\t %s (ID: %s)\nMaint:\t %s\nFP:\t %s" % (uid, uid_id, \
+                    name, primary_key)
+
+# Should we send mail to the newly added user?
+          if Cnf.FindB("Add-User::SendEmail"):
+              mail = name + "<" + emails[0] +">"
+              Upload = daklib.queue.Upload(Cnf)
+              Subst = Upload.Subst
+              Subst["__NEW_MAINTAINER__"] = mail
+              Subst["__UID__"] = uid
+              Subst["__KEYID__"] = Cnf["Add-User::Options::Key"]
+              Subst["__PRIMARY_KEY__"] = primary_key
+              Subst["__FROM_ADDRESS__"] = Cnf["Dinstall::MyEmailAddress"]
+              Subst["__HOSTNAME__"] = Cnf["Dinstall::MyHost"]
+              Subst["__SUMMARY__"] = summary
+              new_add_message = daklib.utils.TemplateSubst(Subst,Cnf["Dir::Templates"]+"/add-user.added")
+              daklib.utils.send_mail(new_add_message)
+
+    else:
+          uid = None
+
+
+#######################################################################################
+
+if __name__ == '__main__':
+    main()
+
index bf10e6d4156e055beb032ced97c2bb9e9e446a7b..65b5cae4c13f5b1e4f906dc4c77cdf54d2ce9dd4 100755 (executable)
@@ -86,8 +86,8 @@ def process_dir (unused, dirname, filenames):
     @type dirname: string
     @param dirname: the directory to look at
 
-    @type filename: dict
-    @param filename: Known filenames to ignore
+    @type filenames: dict
+    @param filenames: Known filenames to ignore
     """
     global waste, db_files, excluded
 
index f648b5ece88ca2032fe2d3db2839161978f83580..c6084d8bb2bf3e958714acff62cd9897b096f4eb 100755 (executable)
@@ -275,7 +275,7 @@ def main ():
         utils.fubar("No action specified.")
 
     # Safety/Sanity check
-    if action == "set" and suite not in ["testing", "etch-m68k", "lenny-r0"]:
+    if action == "set" and suite not in ["testing", "etch-m68k"]:
         utils.fubar("Will not reset suite %s" % (suite))
 
     if action == "list":
index aa6efdee840555190e25b9590a3700368b487e6d..15c3e1add0efcdbcccdf187ee5d1b84c1608f39a 100755 (executable)
@@ -175,6 +175,8 @@ def init():
          "Calculate missing sha1sums and sha256sums"),
         ("bts-categorize",
          "Categorize uncategorized bugs filed against ftp.debian.org"),
+        ("add-user",
+         "Add a user to the archive"),
         ]
     return functionality
 
index 7778b1be7cfe41fbc9e5b9fc70262674885cd341..92fc44983cac2ea396f6698c4200770d3d7820e8 100755 (executable)
@@ -24,7 +24,9 @@
 
 ################################################################################
 
-import psycopg2, time
+import psycopg2
+import time
+from daklib.dak_exceptions import DBUpdateError
 
 ################################################################################
 
@@ -59,6 +61,4 @@ def do_update(self):
 
     except psycopg2.ProgrammingError, msg:
         self.db.rollback()
-        print "FATAL: Unable to apply DM table update 1!"
-        print "Error Message: " + str(msg)
-        print "Database changes have been rolled back."
+        raise DBUpdateError, "Unable to appy DM table updates, rollback issued. Error message : %s" % (str(msg))
index e411662c69fd50860c135173ceeda6cacb02c2c2..10407a9c510ce7daa38405b1c165c014025b00be 100755 (executable)
@@ -21,7 +21,9 @@
 
 ################################################################################
 
-import psycopg2, time
+import psycopg2
+import time
+from daklib.dak_exceptions import DBUpdateError
 
 ################################################################################
 
@@ -393,6 +395,4 @@ $$
 
     except psycopg2.ProgrammingError, msg:
         self.db.rollback()
-        print "FATAL: Unable to apply debversion table update 2!"
-        print "Error Message: " + str(msg)
-        print "Database changes have been rolled back."
+        raise DBUpdateError, "Unable to appy debversion updates, rollback issued. Error message : %s" % (str(msg))
index df89fb9d6300710e85ec890d51a830b25f8b3a76..eef7d4c6a003ade245a2afc2bc7a49054f64ba40 100755 (executable)
@@ -20,7 +20,9 @@
 
 ################################################################################
 
-import psycopg2, time
+import psycopg2
+import time
+from daklib.dak_exceptions import DBUpdateError
 
 ################################################################################
 
@@ -36,6 +38,4 @@ def do_update(self):
 
     except psycopg2.ProgrammingError, msg:
         self.db.rollback()
-        print "FATAL: Unable to apply db update 3!"
-        print "Error Message: " + str(msg)
-        print "Database changes have been rolled back."
+        raise DBUpdateError, "Unable to appy versioncmp removal, rollback issued. Error message : %s" % (str(msg))
index b1a47dba8f2527bbe733afea5f014f064acf4634..c72641a2236b71f43ee0cf6867f18710e1af3f98 100755 (executable)
@@ -474,6 +474,7 @@ def _do_Approve():
     print "Updating file lists for apt-ftparchive..."
     spawn("dak make-suite-file-list")
     print "Updating Packages and Sources files..."
+    spawn("/org/security.debian.org/dak/config/debian-security/map.sh")
     spawn("apt-ftparchive generate %s" % (utils.which_apt_conf_file()))
     print "Updating Release files..."
     spawn("dak generate-releases")
index 8bb88f65c41a71685a7b2aff385bd82fba374992..f7d13750d9be48738ee8cb7c78d6ac4c77a28b3a 100755 (executable)
@@ -137,9 +137,15 @@ Updates dak's database schema to the lastest version. You should disable crontab
 
         for i in range (database_revision, required_database_schema):
             print "updating databse schema from " + str(database_revision) + " to " + str(i+1)
-            dakdb = __import__("dakdb", globals(), locals(), ['update'+str(i+1)])
-            update_module = getattr(dakdb, "update"+str(i+1))
-            update_module.do_update(self)
+            try:
+                dakdb = __import__("dakdb", globals(), locals(), ['update'+str(i+1)])
+                update_module = getattr(dakdb, "update"+str(i+1))
+                update_module.do_update(self)
+            except DBUpdateError, e:
+                # Seems the update did not work.
+                print "Was unable to update database schema from %s to %s." % (str(database_revision), str(i+1))
+                print "The error message received was %s" % (e)
+                utils.fubar("DB Schema upgrade failed")
             database_revision += 1
 
 ################################################################################
index b210a6f4f9a0978a09255934c391e17ef393cf05..d18bee1e6f1691c6940268175fddcd9fa18b1e17 100755 (executable)
@@ -57,7 +57,8 @@ dakerrors = {
     "SendmailFailedError": """Exception raised when Sendmail invocation failed.""",
     "NoFreeFilenameError": """Exception raised when no alternate filename was found.""",
     "TransitionsError":    """Exception raised when transitions file can't be parsed.""",
-    "NoSourceFieldError":  """Exception raised - we cant find the source - wtf?"""
+    "NoSourceFieldError":  """Exception raised - we cant find the source - wtf?""",
+    "DBUpdateError":       """Exception raised - could not update the database"""
 } #: All dak exceptions
 
 def construct_dak_exception(name, description):
index b94c53b314ce74378e62e1899f5202e531a63a5c..ee26430ce8673b1908b5a948cce877898328e4f7 100755 (executable)
@@ -7,6 +7,7 @@ Central repository of regexes for dak
 @contact: Debian FTP Master <ftpmaster@debian.org>
 @copyright: 2001, 2002, 2003, 2004, 2005, 2006  James Troup <james@nocrew.org>
 @copyright: 2009  Mark Hymers <mhy@debian.org>
+@copyright: 2009  Joerg Jaspert <joerg@debian.org>
 @license: GNU General Public License version 2 or later
 """
 
@@ -97,3 +98,12 @@ re_build_dep_arch = re.compile(r"\[[^]]+\]")
 
 # From dak/transitions.py
 re_broken_package = re.compile(r"[a-zA-Z]\w+\s+\-.*")
+
+# From dak/add_user.py
+re_gpg_fingerprint = re.compile(r"^fpr:+(.*):$", re.MULTILINE);
+# The next one is dirty
+re_user_address = re.compile(r"^pub:.*<(.*)@.*>.*$", re.MULTILINE);
+re_user_mails = re.compile(r"^(pub|uid):[^rdin].*<(.*@.*)>.*$", re.MULTILINE);
+re_user_name = re.compile(r"^pub:.*:(.*)<.*$", re.MULTILINE);
+re_re_mark = re.compile(r'^RE:')
+
index 5cb502d6d3b51a15fc08fba8843ce9530637bda6..1b35feef2eb697e930152b85ca612b3f1ea9e29e 100755 (executable)
@@ -38,10 +38,13 @@ import apt_pkg
 import database
 import time
 import tarfile
+import re
+import string
+import email as modemail
 from dak_exceptions import *
 from regexes import re_html_escaping, html_escaping, re_single_line_field, \
                     re_multi_line_field, re_srchasver, re_verwithext, \
-                    re_parse_maintainer, re_taint_free, re_gpg_uid
+                    re_parse_maintainer, re_taint_free, re_gpg_uid, re_re_mark
 
 ################################################################################
 
@@ -599,6 +602,67 @@ def send_mail (message, filename=""):
         os.write (fd, message)
         os.close (fd)
 
+    if Cnf.has_key("Dinstall::MailWhiteList") and \
+           Cnf["Dinstall::MailWhiteList"] != "":
+        message_in = open_file(filename)
+        message_raw = modemail.message_from_file(message_in)
+        message_in.close();
+
+        whitelist = [];
+        whitelist_in = open_file(Cnf["Dinstall::MailWhiteList"])
+        try:
+            for line in whitelist_in:
+                if re_re_mark.match(line):
+                    whitelist.append(re.compile(re_re_mark.sub("", line.strip(), 1)))
+                else:
+                    whitelist.append(re.compile(re.escape(line.strip())))
+        finally:
+            whitelist_in.close()
+
+        # Fields to check.
+        fields = ["To", "Bcc", "Cc"]
+        for field in fields:
+            # Check each field
+            value = message_raw.get(field, None)
+            if value != None:
+                match = [];
+                for item in value.split(","):
+                    (rfc822_maint, rfc2047_maint, name, email) = fix_maintainer(item.strip())
+                    mail_whitelisted = 0
+                    for wr in whitelist:
+                        if wr.match(email):
+                            mail_whitelisted = 1
+                            break
+                    if not mail_whitelisted:
+                        print "Skipping %s since it's not in %s" % (item, Cnf["Dinstall::MailWhiteList"])
+                        continue
+                    match.append(item)
+
+                # Doesn't have any mail in whitelist so remove the header
+                if len(match) == 0:
+                    del message_raw[field]
+                else:
+                    message_raw.replace_header(field, string.join(match, ", "))
+
+        # Change message fields in order if we don't have a To header
+        if not message_raw.has_key("To"):
+            fields.reverse()
+            for field in fields:
+                if message_raw.has_key(field):
+                    message_raw[fields[-1]] = message_raw[field]
+                    del message_raw[field]
+                    break
+            else:
+                # Clean up any temporary files
+                # and return, as we removed all recipients.
+                if message:
+                    os.unlink (filename);
+                return;
+
+        fd = os.open(filename, os.O_RDWR|os.O_EXCL, 0700);
+        os.write (fd, message_raw.as_string(True));
+        os.close (fd);
+
     # Invoke sendmail
     (result, output) = commands.getstatusoutput("%s < %s" % (Cnf["Dinstall::SendmailCommand"], filename))
     if (result != 0):
diff --git a/scripts/backports.org/copyoverrides b/scripts/backports.org/copyoverrides
new file mode 100755 (executable)
index 0000000..a90db62
--- /dev/null
@@ -0,0 +1,29 @@
+#! /bin/sh
+
+set -e
+. $SCRIPTVARS
+echo 'Copying override files into public view ...'
+
+for f in $copyoverrides ; do
+       cd $overridedir
+       chmod g+w override.$f
+
+       cd $indices
+       rm -f .newover-$f.gz
+       pc="`gzip 2>&1 -9nv <$overridedir/override.$f >.newover-$f.gz`"
+       set +e
+       nf=override.$f.gz
+       cmp -s .newover-$f.gz $nf
+       rc=$?
+       set -e
+        if [ $rc = 0 ]; then
+               rm -f .newover-$f.gz
+       elif [ $rc = 1 -o ! -f $nf ]; then
+               echo "   installing new $nf $pc"
+               mv -f .newover-$f.gz $nf
+               chmod g+w $nf
+       else
+               echo $? $pc
+               exit 1
+       fi
+done
diff --git a/scripts/backports.org/mkchecksums b/scripts/backports.org/mkchecksums
new file mode 100755 (executable)
index 0000000..575d55c
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh
+# Update the md5sums file
+
+set -e
+. $SCRIPTVARS
+
+dsynclist=$dbdir/dsync.list
+md5list=$indices/md5sums
+
+echo -n "Creating md5 / dsync index file ... "
+
+cd "$ftpdir"
+dsync-flist -q generate $dsynclist --exclude $dsynclist --md5
+dsync-flist -q md5sums $dsynclist | gzip -9n > ${md5list}.gz
+dsync-flist -q link-dups $dsynclist || true
diff --git a/scripts/backports.org/mklslar b/scripts/backports.org/mklslar
new file mode 100755 (executable)
index 0000000..19363f1
--- /dev/null
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Update the ls-lR.
+
+set -e
+. $SCRIPTVARS
+
+cd $ftpdir
+
+filename=ls-lR
+
+echo "Removing any core files ..."
+find -type f -name core -print0 | xargs -0r rm -v
+
+echo "Checking permissions on files in the FTP tree ..."
+find -type f \( \! -perm -444 -o -perm +002 \) -ls
+find -type d \( \! -perm -555 -o -perm +002 \) -ls
+
+echo "Checking symlinks ..."
+symlinks -rd .
+
+echo "Creating recursive directory listing ... "
+rm -f .$filename.new
+TZ=UTC ls -lR | grep -v Archive_Maintenance_In_Progress > .$filename.new
+
+if [ -r ${filename}.gz ] ; then
+  mv -f ${filename}.gz $filename.old.gz
+  mv -f .$filename.new $filename
+  rm -f $filename.patch.gz
+  zcat $filename.old.gz | diff -u - $filename | gzip -9cfn - >$filename.patch.gz
+  rm -f $filename.old.gz
+else
+  mv -f .$filename.new $filename
+fi
+
+gzip -9cfN $filename >$filename.gz
+rm -f $filename
diff --git a/scripts/backports.org/mkmaintainers b/scripts/backports.org/mkmaintainers
new file mode 100755 (executable)
index 0000000..edb0f20
--- /dev/null
@@ -0,0 +1,31 @@
+#! /bin/sh
+
+echo
+echo -n 'Creating Maintainers index ... '
+
+set -e
+. $SCRIPTVARS
+cd $base/misc/
+
+nonusmaint="$base/misc/Maintainers_Versions-non-US"
+
+
+cd $indices
+dak make-maintainers | sed -e "s/~[^  ]*\([   ]\)/\1/"  | awk '{printf "%-20s ", $1; for (i=2; i<=NF; i++) printf "%s ", $i; printf "\n";}' > .new-maintainers
+
+set +e
+cmp .new-maintainers Maintainers >/dev/null
+rc=$?
+set -e
+if [ $rc = 1 ] || [ ! -f Maintainers ] ; then
+       echo -n "installing Maintainers ... "
+       mv -f .new-maintainers Maintainers
+       gzip -9v <Maintainers >.new-maintainers.gz
+       mv -f .new-maintainers.gz Maintainers.gz
+elif [ $rc = 0 ] ; then
+       echo '(same as before)'
+       rm -f .new-maintainers
+else
+       echo cmp returned $rc
+       false
+fi
index c42286c3155b339c15a96ec86c091334909a8353..4d84e60781b663c801fc2930cad3eee7baecbe68 100755 (executable)
@@ -21,8 +21,8 @@ export LC_ALL=C
 # Otherwise, list all the errors.
 DEBUG=0
 
-#STABLE="etch"
-TESTING="lenny"
+#STABLE="lenny"
+TESTING="squeeze"
 UNSTABLE="sid"
 
 # Original SHA256SUMS, generated by i18n.debian.net
index 03b3ea0cc2650906c12cee50b0920101b042de2a..b9d31a021bd579e054a15f42024f2f36d4afb981 100755 (executable)
@@ -82,12 +82,12 @@ for a in $ARCHES; do
 done
 
 (cd $base/ftp/
-       for dist in sid lenny; do
+       for dist in sid squeeze; do
                find ./dists/$dist/main/i18n/ \! -type d | sort -u | gzip -9 > $base/ftp/indices/files/components/translation-$dist.list.gz
        done
 )
 
-(cat ../arch-i386.files ../arch-amd64.files; zcat suite-proposed-updates.list.gz ; zcat translation-sid.list.gz ; zcat translation-lenny.list.gz) |
+(cat ../arch-i386.files ../arch-amd64.files; zcat suite-oldstable.list.gz suite-proposed-updates.list.gz ; zcat translation-sid.list.gz ; zcat translation-squeeze.list.gz) |
    sort -u | poolfirst > ../typical.files
 
 rm -f $ARCHLIST
diff --git a/templates/add-user.added b/templates/add-user.added
new file mode 100644 (file)
index 0000000..1a93491
--- /dev/null
@@ -0,0 +1,18 @@
+From: __FROM_ADDRESS__
+To: __NEW_MAINTAINER__
+Subject: Account on __HOSTNAME__ activated
+
+Hi __UID__,
+
+your account on __HOSTNAME__ has just been activated. You are now able
+to upload packages there, using dput or dupload as you wish.
+The gpg-key you need to sign your packages with is key 0x__KEYID__
+with the fingerprint __PRIMARY_KEY__.
+
+__SUMMARY__
+
+This message was generated automatically; if you believe that there is
+a problem with it please contact the archive administrators by mailing
+__ADMIN_ADDRESS__.
+
+__DISTRO__ distribution maintenance software
index 7e3ca97c8310c824ea3fc3d73b6400a9c370fb0d..062be98d8b8007a35ecd1f54abfb2ace5174fa40 100644 (file)
 
         <div id="testing">
             <h1>Testing</h1>
-            <p>Lenny is testing, sid is unstable. For more details please look
+            <p>Squeeze is testing, sid is unstable. For more details please look
             at the <a href="http://www.debian.org/devel/testing">testing</a> pages.</p>
         </div>
 
index 7fd38e85af70d2c7efde2d6e87372f9f716ab424..78e35474bae44e73e1c2a7569a7fc56cb0f0477e 100644 (file)
         </div>
 
         <div id="revokation">
-            <h1>Key Revokation Procedure</h1>
+            <h1>Key Revocation Procedure</h1>
             <p>A revokation certificate for the archive key is produced at the time of the creation
-            of an archive key.  The program ssss (a Shamir's secret sharing scheme implementation)
-            is then used to produce 20 shares of which 10 are needed to recover the revokation cert.
+            of an archive key.  The program gfshare (package
+                 <a href="http://packages.debian.org/lenny/libgfshare-bin">libgfshare-bin</a>)
+                   (a Shamir's secret sharing scheme implementation) is then used to produce 12 shares of
+                   which 7 are needed to recover the revokation cert.
             This procedure is for use in emergencies only (such as losing ftp-master.debian.org and
             all of the backups, a hopefully unlikely event) as the key can normally be used to produce
             its own revokation certificate.</p>
         </div>
 
+               <div id="keysplit">
+                 <h1>Key Backup / Restore Procedure</h1>
+                 <p>After the creation of the archive key, the secret part of it will be backed up in one additional
+                 way. The program  gfshare (package
+                 <a href="http://packages.debian.org/lenny/libgfshare-bin">libgfshare-bin</a>)
+                 (a Shamir's secret sharing scheme implementation) is used to produce 14 shares of which 9 are needed
+                 to recover the secret key.</p>
         </div>
+
+               <div id="ssss">
+                 <h1>SSSS holders</h1>
+                 <p>The following people each hold one of the shares of the revocation certificate / private key.</p>
+                 <h2>Revocation shares</h2>
+                 <p>7 of those shares are needed to reproduce the revocation certificate</p>
+                 <table>
+                       <tr><th>Debian uid</th><th>Name</th></tr>
+                       <tr><td>sho</td><td>Samuel Hocevar</td></tr>
+                       <tr><td>don</td><td>Don Armstrong</td></tr>
+                       <tr><td>neilm</td><td>Neil McGovern</td></tr>
+                       <tr><td>djpig</td><td>Frank Lichtenheld</td></tr>
+                       <tr><td>jimmy</td><td>Jimmy Kaplowitz</td></tr>
+                       <tr><td>killer</td><td>Kalle Kivimaa</td></tr>
+                       <tr><td>noodles</td><td>Jonathan McDowell</td></tr>
+                       <tr><td>rra</td><td>Russ Allbery</td></tr>
+                       <tr><td>marga</td><td>Margarita Manterola</td></tr>
+                       <tr><td>thijs</td><td>Thijs Kinkhorst</td></tr>
+                       <tr><td>meike</td><td>Meike Reichle</td></tr>
+                       <tr><td>miriam</td><td>Miriam Ruiz</td></tr>
+                 </table>
+
+                 <h2>Key shares</h2>
+                 <p>9 of those shares are needed to reproduce the secret key</p>
+                 <table>
+                       <tr><th>Debian uid</th><th>Name</th></tr>
+                       <tr><td>luk</td><td>Luk Claes</td></tr>
+                       <tr><td>maxx</td><td>Martin Wuertele</td></tr>
+                       <tr><td>adeodato</td><td>Adeodato Simó</td></tr>
+                       <tr><td>myon</td><td>Christoph Berg</td></tr>
+                       <tr><td>93sam</td><td>Steve McIntyre</td></tr>
+                       <tr><td>bdale</td><td>Bdale Garbee</td></tr>
+                       <tr><td>sgran</td><td>Stephen Gran</td></tr>
+                       <tr><td>dannf</td><td>Dann Frazier</td></tr>
+                       <tr><td>weasel</td><td>Peter Palfrader</td></tr>
+                       <tr><td>enrico</td><td>Enrico Zini</td></tr>
+                       <tr><td>wouter</td><td>Wouter Verhelst</td></tr>
+                       <tr><td>mhy</td><td>Mark Hymers</td></tr>
+                       <tr><td>bzed</td><td>Bernd Zeimetz</td></tr>
+                       <tr><td>stew</td><td>Mike O'Connor</td></tr>
+               </table>
+               </div>
     <hr />
     <address><a href="mailto:ftpmaster@ftp-master.debian.org">Debian FTP team</a></address>