From 88c7e302a60194f68bc1b6d20c1547b62e1436d3 Mon Sep 17 00:00:00 2001
From: Colin Watson
Date: Sun, 18 Aug 2002 02:05:11 +0000
Subject: [PATCH 1/1] Initial import of $HOME/bin.
---
6to4 | 42 +++++
Pnews-wrapper | 30 +++
Rnmail-wrapper | 20 ++
afe-stats | 2 +
afec-faq | 5 +
afeweb-backup | 40 ++++
alarm-clock | 6 +
archive-news.pl | 62 ++++++
authstartx | 9 +
backupnewsrc | 2 +
build-sig | 8 +
buildd-logs | 8 +
cancel-this | 7 +
catylog.pl | 2 +
check-characters.pl | 16 ++
command-args | 15 ++
countafe | 3 +
crondiv | 28 +++
dctrl-mailbox.pl | 36 ++++
debian-mirror | 153 +++++++++++++++
deja-check-votes | 8 +
desymlink | 16 ++
dinstall-private | 120 ++++++++++++
dinstall-riva | 157 ++++++++++++++++
dpkg-myscan | 27 +++
expandvars.pl | 98 ++++++++++
faq-pointer | 5 +
faq2html.pl | 445 ++++++++++++++++++++++++++++++++++++++++++++
find-package | 4 +
find-visible | 2 +
find-zlib | 100 ++++++++++
format | 29 +++
ftp-removals | 8 +
genheaders | 2 +
get-bugs | 2 +
get-corr | 54 ++++++
get-deb | 12 ++
get-kernel | 11 ++
get-newgroup | 3 +
get-news-ntlworld | 2 +
get-rfc | 2 +
get-sig | 20 ++
get-var.pl | 20 ++
get-with-referrer | 14 ++
grep-services | 28 +++
hermes-unread | 18 ++
horja | 4 +
httpclient | Bin 0 -> 337468 bytes
iSilo386 | Bin 0 -> 357980 bytes
irccat | 87 +++++++++
ircnotify | 3 +
ircnotify.debian | 3 +
ircwho | 2 +
ircwho.pl | 48 +++++
ircwhois | 2 +
ircwhois.pl | 47 +++++
kill-netscape | 4 +
kill-wine | 1 +
m2n | 5 +
m2n.pl | 222 ++++++++++++++++++++++
mailkill | 2 +
mailsort.pl | 46 +++++
mailsplit | 34 ++++
mailtonews.wrapper | 3 +
mesghere | 27 +++
mordja | 9 +
mordja-zip | 9 +
my-debmirror | 7 +
my-debmirror-riva | 5 +
nmu-announce | 36 ++++
plonk | 35 ++++
print-calendar | 16 ++
proto-address | 2 +
prune-history | 15 ++
prune-sessions | 3 +
query-hermes.pl | 50 +++++
read-newsrc | 2 +
reprieve | 32 ++++
riva-moderate | 3 +
run-horja | 6 +
silver-suggestions | 5 +
sops-virginizer | 129 +++++++++++++
sponge | Bin 0 -> 5196 bytes
ssh-chiark | 2 +
ssh-v | 2 +
ssize.pl | 23 +++
start-ssh | 3 +
stop-ssh | 2 +
tabulateafe | 1 +
taskbot.pl | 116 ++++++++++++
unknown-package | 2 +
validate-directory | 10 +
validate-tree | 7 +
verify-status.pl | 50 +++++
when-dinstall | 2 +
wnpp | 2 +
write-newsrc | 43 +++++
write-sig | 32 ++++
xauthhere | 1 +
xterm-title | 2 +
xterm-wrapper | 6 +
101 files changed, 2911 insertions(+)
create mode 100644 6to4
create mode 100644 Pnews-wrapper
create mode 100644 Rnmail-wrapper
create mode 100644 afe-stats
create mode 100644 afec-faq
create mode 100644 afeweb-backup
create mode 100644 alarm-clock
create mode 100644 archive-news.pl
create mode 100644 authstartx
create mode 100644 backupnewsrc
create mode 100644 build-sig
create mode 100644 buildd-logs
create mode 100644 cancel-this
create mode 100644 catylog.pl
create mode 100644 check-characters.pl
create mode 100644 command-args
create mode 100644 countafe
create mode 100644 crondiv
create mode 100644 dctrl-mailbox.pl
create mode 100644 debian-mirror
create mode 100644 deja-check-votes
create mode 100644 desymlink
create mode 100644 dinstall-private
create mode 100644 dinstall-riva
create mode 100644 dpkg-myscan
create mode 100644 expandvars.pl
create mode 100644 faq-pointer
create mode 100644 faq2html.pl
create mode 100644 find-package
create mode 100644 find-visible
create mode 100644 find-zlib
create mode 100644 format
create mode 100644 ftp-removals
create mode 100644 genheaders
create mode 100644 get-bugs
create mode 100644 get-corr
create mode 100644 get-deb
create mode 100644 get-kernel
create mode 100644 get-newgroup
create mode 100644 get-news-ntlworld
create mode 100644 get-rfc
create mode 100644 get-sig
create mode 100644 get-var.pl
create mode 100644 get-with-referrer
create mode 100644 grep-services
create mode 100644 hermes-unread
create mode 100644 horja
create mode 100644 httpclient
create mode 100644 iSilo386
create mode 100644 irccat
create mode 100644 ircnotify
create mode 100644 ircnotify.debian
create mode 100644 ircwho
create mode 100644 ircwho.pl
create mode 100644 ircwhois
create mode 100644 ircwhois.pl
create mode 100644 kill-netscape
create mode 100644 kill-wine
create mode 100644 m2n
create mode 100644 m2n.pl
create mode 100644 mailkill
create mode 100644 mailsort.pl
create mode 100644 mailsplit
create mode 100644 mailtonews.wrapper
create mode 100644 mesghere
create mode 100644 mordja
create mode 100644 mordja-zip
create mode 100644 my-debmirror
create mode 100644 my-debmirror-riva
create mode 100644 nmu-announce
create mode 100644 plonk
create mode 100644 print-calendar
create mode 100644 proto-address
create mode 100644 prune-history
create mode 100644 prune-sessions
create mode 100644 query-hermes.pl
create mode 100644 read-newsrc
create mode 100644 reprieve
create mode 100644 riva-moderate
create mode 100644 run-horja
create mode 100644 silver-suggestions
create mode 100644 sops-virginizer
create mode 100644 sponge
create mode 100644 ssh-chiark
create mode 100644 ssh-v
create mode 100644 ssize.pl
create mode 100644 start-ssh
create mode 100644 stop-ssh
create mode 100644 tabulateafe
create mode 100644 taskbot.pl
create mode 100644 unknown-package
create mode 100644 validate-directory
create mode 100644 validate-tree
create mode 100644 verify-status.pl
create mode 100644 when-dinstall
create mode 100644 wnpp
create mode 100644 write-newsrc
create mode 100644 write-sig
create mode 100644 xauthhere
create mode 100644 xterm-title
create mode 100644 xterm-wrapper
diff --git a/6to4 b/6to4
new file mode 100644
index 0000000..6a2765b
--- /dev/null
+++ b/6to4
@@ -0,0 +1,42 @@
+#!/bin/bash -e
+
+VERBOSE=1
+LOCAL_IF=ppp0
+
+case "$1" in
+ start)
+ if [ -z "$LOCAL4" ]; then
+ [ "$LOCAL_IF" ] || LOCAL_IF=ppp0
+ LOCAL4=$(ip -o addr show $LOCAL_IF | awk '/inet/ { print $4 }')
+ if [ -z "$LOCAL4" ]; then
+ echo "Cannot find the IP assigned to $LOCAL_IF"
+ exit 1
+ fi
+ fi
+
+ LOCAL6=$(printf "%x%02x:%x%02x\n" $(echo $LOCAL4 | sed -e 's/\./ /g'))
+ LOCAL6="2002:$LOCAL6::1/48"
+
+ [ "$RELAY" ] || RELAY=192.88.99.1
+
+ if [ "$VERBOSE" ]; then
+ echo "Local v4 address: $LOCAL4"
+ echo "Local v6 address: $LOCAL6"
+ echo "6to4 Relay address: $RELAY"
+ fi
+
+ ip link set sit0 up
+ ip addr add $LOCAL6 dev sit0
+ ip route add 2000::/3 via ::$RELAY
+ ;;
+ stop)
+ ip link set sit0 down
+ ;;
+ *)
+ echo "Usage: $0 {start|stop}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
diff --git a/Pnews-wrapper b/Pnews-wrapper
new file mode 100644
index 0000000..e2c1265
--- /dev/null
+++ b/Pnews-wrapper
@@ -0,0 +1,30 @@
+#! /bin/sh
+
+if grep '^Newsgroups:.*alt\.fan\.eddings\.creative' $2; then
+ get-sig afec > ~/.news_sig
+elif grep '^Newsgroups:.*alt\.fan\.eddings' $2; then
+ get-sig afe > ~/.news_sig
+else
+ get-sig general > ~/.news_sig
+fi
+
+if grep '^Newsgroups:.*riva.lists' $2; then
+ cat < /dev/null; then
+ echo ""
+ echo -n "Remove original poster's .signature (if present)? [yn] "
+ read ans
+ case $ans in
+ n*) ;;
+ *) sed -n -e "/^\($QUOTECHARS\)\?-- \$/q" -e p $2 | sponge $2
+ ;;
+ esac
+fi
+
+exec Pnews "$@"
diff --git a/Rnmail-wrapper b/Rnmail-wrapper
new file mode 100644
index 0000000..3fca7d6
--- /dev/null
+++ b/Rnmail-wrapper
@@ -0,0 +1,20 @@
+#! /bin/sh
+
+if grep '^From:.*Kamion' $2; then
+ get-sig afe > ~/.mail_sig
+else
+ get-sig general > ~/.mail_sig
+fi
+
+if [ "X$1" = X-h ] && grep '^In-Reply-To: ' $2 > /dev/null; then
+ echo ""
+ echo -n "Remove original poster's .signature (if present)? [yn] "
+ read ans
+ case $ans in
+ n*) ;;
+ *) sed -n -e "/^$QUOTECHARS-- \$/q" -e p $2 | sponge $2
+ ;;
+ esac
+fi
+
+exec /usr/bin/Rnmail "$@"
diff --git a/afe-stats b/afe-stats
new file mode 100644
index 0000000..669ff97
--- /dev/null
+++ b/afe-stats
@@ -0,0 +1,2 @@
+#! /bin/sh
+statnews --from=`date -d '1 week ago' +%d/%m/%Y` --nocapitalize alt.fan.eddings
diff --git a/afec-faq b/afec-faq
new file mode 100644
index 0000000..a234904
--- /dev/null
+++ b/afec-faq
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+# Post the alt.fan.eddings.creative FAQ every fortnight
+cd $HOME/afe/daemons
+$HOME/bin/crondiv 2 afec-faq.log inews -hS afec-faq.txt
diff --git a/afeweb-backup b/afeweb-backup
new file mode 100644
index 0000000..d836c52
--- /dev/null
+++ b/afeweb-backup
@@ -0,0 +1,40 @@
+#! /bin/sh
+
+YEARTHISWEEK=`date +%Y-w%V`
+YEARLASTWEEK=`date -d '1 week ago' +%Y-w%V`
+DAY=`date +%w | sed 's/0/7/'`
+
+LABDIR=/tmp/afeweb.$YEARTHISWEEK-$DAY
+if [ $DAY -eq 1 ]; then
+ OLDTAR=$HOME/backups/afeweb-$YEARLASTWEEK.tar.gz
+ NEWTAR=$HOME/backups/afeweb-$YEARTHISWEEK.tar.gz
+else
+ OLDTAR=$HOME/backups/afeweb-$YEARTHISWEEK.tar.gz
+ unset NEWTAR
+fi
+DIFFGZ=$HOME/backups/afeweb-$YEARTHISWEEK-$DAY.diff.gz
+TOPDIR=tolhoneth
+SOURCEPARENT=/var/www
+SOURCEDIR=tolhoneth
+
+if [ -f $OLDTAR ]; then
+ # Extract old tarball and set up diffing environment
+ mkdir $LABDIR
+ cd $LABDIR
+ tar xzf $OLDTAR
+ mv $TOPDIR $TOPDIR.orig
+ ln -s $SOURCEPARENT/$SOURCEDIR $TOPDIR
+
+ # Do the diff and clean up
+ diff -Naru $TOPDIR.orig $TOPDIR | gzip > $DIFFGZ
+ cd -
+ rm -rf $LABDIR
+fi
+
+if [ "$NEWTAR" ]; then
+ # First day of the week, so build a new tarball
+ cd $SOURCEPARENT
+ tar czf $NEWTAR $SOURCEDIR
+ cd -
+fi
+
diff --git a/alarm-clock b/alarm-clock
new file mode 100644
index 0000000..c1a9d21
--- /dev/null
+++ b/alarm-clock
@@ -0,0 +1,6 @@
+#! /bin/sh
+mpg123 -q /home/cjwatson/mp3/OMWF---01---*.mp3
+mpg123 -q /home/cjwatson/mp3/OMWF---02---*.mp3
+mpg123 -q /home/cjwatson/mp3/OMWF---03---*.mp3
+mpg123 -q /home/cjwatson/mp3/OMWF---13---*.mp3
+mpg123 -q /home/cjwatson/mp3/OMWF---14---*.mp3
diff --git a/archive-news.pl b/archive-news.pl
new file mode 100644
index 0000000..4f6f44b
--- /dev/null
+++ b/archive-news.pl
@@ -0,0 +1,62 @@
+#! /usr/bin/perl -w
+use diagnostics;
+use strict;
+
+use Net::NNTP;
+
+my $nntp;
+
+sub usage ()
+{
+ print STDERR <<"EOF";
+Usage: $0 hostname newsgroup-name archive-directory
+EOF
+ exit 1;
+}
+
+sub bail ($)
+{
+ my $msg = shift;
+ $nntp->quit;
+ print STDERR "$msg\n";
+ exit 1;
+}
+
+my $host = shift or usage;
+my $group = shift or usage;
+my $archive = shift or usage;
+-d $archive or usage;
+
+opendir ARCHIVE, $archive or die "can't opendir $archive: $!";
+my @list = grep m/^\d+$/, readdir ARCHIVE;
+closedir ARCHIVE;
+
+@list = sort { $a <=> $b } @list;
+my $start = scalar @list ? $list[$#list] + 1 : 0;
+
+$nntp = Net::NNTP->new($host);
+# Bah, password in clear, oh well, it's only passworded to keep the
+# howling masses out anyway ...
+#$nntp->authinfo('afe', 'MyTest');
+
+my ($narticles, $first, $last, $name) = $nntp->group($group);
+(defined $first and defined $last) or bail "Couldn't set group to $group";
+
+exit if $last <= $start;
+$start = $first if $first > $start;
+
+for my $index ($start..$last)
+{
+ my $article = $nntp->article($index);
+ if (defined $article)
+ {
+ open ARTICLE, ">$archive/$index"
+ or die "can't open $archive/$index for writing: $!";
+ print ARTICLE join '', @$article;
+ close ARTICLE;
+ }
+ #print STDERR "$group $index\n";
+}
+
+$nntp->quit;
+
diff --git a/authstartx b/authstartx
new file mode 100644
index 0000000..2a2929e
--- /dev/null
+++ b/authstartx
@@ -0,0 +1,9 @@
+#!/bin/sh
+set -e
+if [ -n "$XAUTHORITY" ]; then
+ export XAUTHORITY=$HOME/.Xauthority
+fi
+auth=`mcookie`
+xauth add :0 . $auth
+xauth add `hostname -f`:0 . $auth
+startx -- :0 -auth $XAUTHORITY
diff --git a/backupnewsrc b/backupnewsrc
new file mode 100644
index 0000000..3e04579
--- /dev/null
+++ b/backupnewsrc
@@ -0,0 +1,2 @@
+#! /bin/sh
+cp ~/.newsrc ~/.newsrc-backup
diff --git a/build-sig b/build-sig
new file mode 100644
index 0000000..3e46ad9
--- /dev/null
+++ b/build-sig
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+for s in $(find ~/.signatures -mindepth 2 -path '*/old/*' -prune -o \
+ -type f ! -name '*.dat' ! -name static -print | \
+ sort); do
+ strfile $s
+done | perl -ne \
+ '$s += $1 if /There.*?([0-9]+)/; print; END { print "Total: $s\n"; }'
diff --git a/buildd-logs b/buildd-logs
new file mode 100644
index 0000000..001e353
--- /dev/null
+++ b/buildd-logs
@@ -0,0 +1,8 @@
+#! /bin/sh
+set -e
+
+if [ -z "$1" ]; then
+ ${BROWSER:-lynx} http://buildd.debian.org/build.php
+else
+ ${BROWSER:-lynx} "http://buildd.debian.org/build.php?pkg=$1"
+fi
diff --git a/cancel-this b/cancel-this
new file mode 100644
index 0000000..1009b35
--- /dev/null
+++ b/cancel-this
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+MSGID=`grep -i '^Message-ID: ' | sed 's/^Message-ID: //' | head -1`
+
+echo 'Locally cancelling a post with the following Message-ID:'
+echo " $MSGID"
+[ "$1" = "test" ] || ctlinnd cancel "$MSGID"
diff --git a/catylog.pl b/catylog.pl
new file mode 100644
index 0000000..61e1861
--- /dev/null
+++ b/catylog.pl
@@ -0,0 +1,2 @@
+#! /usr/bin/perl -p
+s/(?:^|.)\xfe// while /\xfe/;
diff --git a/check-characters.pl b/check-characters.pl
new file mode 100644
index 0000000..eed4859
--- /dev/null
+++ b/check-characters.pl
@@ -0,0 +1,16 @@
+#! /usr/bin/perl -w
+use diagnostics;
+use strict;
+
+local $/ = undef;
+my $file = <>;
+while ($file =~ /(.*?)<\/A>/gs)
+{
+ if ($1 ne $2 || "$2$3" ne lc $4)
+ {
+ my $name = $4;
+ $name =~ y/\n/ /;
+ print "$name\n";
+ }
+}
+
diff --git a/command-args b/command-args
new file mode 100644
index 0000000..32fc111
--- /dev/null
+++ b/command-args
@@ -0,0 +1,15 @@
+#! /bin/bash
+
+echo $COMP_CWORD
+
+if [ "$COMP_CWORD" = 1 ]; then
+ compgen -c $2
+else
+ case ${2:0:1} in
+ $) compgen -v $2;;
+ ~) compgen -u $2;;
+ @) compgen -A hostname $2;;
+ *) compgen -f $2;;
+ esac
+fi
+
diff --git a/countafe b/countafe
new file mode 100644
index 0000000..b2ea8a9
--- /dev/null
+++ b/countafe
@@ -0,0 +1,3 @@
+#! /bin/sh -e
+echo -n "$* "
+grep -c "$*" afe-posters
diff --git a/crondiv b/crondiv
new file mode 100644
index 0000000..666171c
--- /dev/null
+++ b/crondiv
@@ -0,0 +1,28 @@
+#! /bin/bash
+
+# "Divide" a crontab frequency down by the first argument on the command line,
+# logging to the second argument, and executing the remainder.
+
+if [ "X$1" = "X" -o "X$2" = "X" -o "X$3" = "X" ]; then
+ echo "Usage: $0 frequency logfile command [ arguments ]" >&2
+ exit 1
+fi
+
+FREQUENCY=$1
+LOGFILE=$2
+shift 2
+
+if [ -f $LOGFILE ]; then
+ LASTEXEC=$(($(tail -n 1 $LOGFILE)+1))
+else
+ LASTEXEC=1
+fi
+
+if [ $LASTEXEC -ge $FREQUENCY ]; then
+ echo "$*" executed at $(date) >> $LOGFILE
+ echo 0 >> $LOGFILE
+ eval "$*"
+else
+ echo $LASTEXEC >> $LOGFILE
+fi
+
diff --git a/dctrl-mailbox.pl b/dctrl-mailbox.pl
new file mode 100644
index 0000000..c5c65d7
--- /dev/null
+++ b/dctrl-mailbox.pl
@@ -0,0 +1,36 @@
+#! /usr/bin/perl -w
+use diagnostics;
+use strict;
+use Date::Format;
+
+my $fromdate = time2str("%a %b %e %T %Y %z", time, 'GMT');
+my $headerdate = time2str("%a, %e %b %Y %T %z", time, 'GMT');
+
+local $/ = "\n\n";
+
+while (<>)
+{
+ /^Package: (.*)/m;
+ my $package = $1;
+ /^Section: (.*)/m;
+ my $section = $1;
+ $section =~ s|/|.|g;
+ /^Maintainer: (.*)/m;
+ my $maintainer = $1;
+ $maintainer =~ /<(.*)>/;
+ my $maintaddr = $1;
+ /^Description: (.*)/m;
+ my $shortdesc = $1;
+ s/^ (.*)//ms;
+ my $longdesc = $1;
+ $longdesc =~ s/^ //gm;
+ $longdesc =~ s/^\.$//gm;
+ $_ = "From $maintaddr $fromdate\n" .
+ "From: $maintainer\n" .
+ "Date: $headerdate\n" .
+ "Subject: $package - $shortdesc\n" .
+ "Newsgroups: $section\n" .
+ "$_\n$longdesc";
+ print $_;
+}
+
diff --git a/debian-mirror b/debian-mirror
new file mode 100644
index 0000000..58e4678
--- /dev/null
+++ b/debian-mirror
@@ -0,0 +1,153 @@
+#!/bin/sh -e
+# Anon rsync partial mirror of Debian with package pool support.
+# Copyright 1999, 2000 by Joey Hess , GPL'd.
+# Beaten on by Colin Watson .
+
+# Flags to pass to rsync. More can be specified on the command line.
+# These flags are always passed to rsync:
+FLAGS="$@ -rLpt --partial"
+# These flags are not passed in when we are getting files from pools.
+# In particular, --delete is a horrid idea at that point, but good here.
+FLAGS_NOPOOL="$FLAGS --exclude Packages --delete"
+# And these flags are passed in only when we are getting files from pools.
+# Remember, do _not_ include --delete.
+FLAGS_POOL="$FLAGS"
+# The host to connect to. Currently must carry both non-us and main
+# and support anon rsync, which limits the options somewhat.
+HOST=ftp.uk.debian.org
+# Where to put the mirror (absolute path, please):
+DEST=/mirror/debian
+# The distribution to mirror:
+DIST=unstable
+# Architecture to mirror:
+ARCH=i386
+# Should source be mirrored too?
+SOURCE=yes
+# The sections to mirror (main, non-free, etc):
+SECTIONS="main contrib non-free"
+# Should a contents file kept up to date?
+CONTENTS=yes
+# Should symlinks be generated to every deb, in an "all" directory?
+# I find this is very handy to ease looking up deb filenames.
+SYMLINK_FARM=no
+
+###############################################################################
+
+mkdir -p $DEST/dists $DEST/pool $DEST/non-US/pool
+
+# Snarf the contents file.
+if [ "$CONTENTS" = yes ]; then
+ mkdir -p $DEST/misc
+ rsync $FLAGS_NOPOOL \
+ $HOST::debian/dists/$DIST/Contents-${ARCH}.gz \
+ $DEST/misc/
+fi
+
+if [ "$SOURCE" = yes ]; then
+ SOURCE=source
+else
+ SOURCE=""
+fi
+
+# Download packages files (and .debs and sources too, until we move fully
+# to pools).
+for type in binary-${ARCH} $SOURCE; do
+ for section in $SECTIONS; do
+ mkdir -p $DEST/non-US/dists/$DIST/non-US/$section/$type
+ rsync $FLAGS_NOPOOL \
+ $HOST::debian/non-US/dists/$DIST/non-US/$section/$type \
+ $DEST/non-US/dists/$DIST/non-US/$section/
+ mkdir -p $DEST/dists/$DIST/$section/$type
+ rsync $FLAGS_NOPOOL \
+ $HOST::debian/dists/$DIST/$section/$type \
+ $DEST/dists/$DIST/$section/
+ done
+done
+
+# Update the non-US package pool.
+# TODO: probably needs to be optimized, we'll see as time goes by..
+cd $DEST/non-US/pool || exit 1
+rm -f .filelist
+
+# Get a list of all the files that are in the pool based on the Packages
+# files that were already updated. Thanks to aj for the awk-fu.
+for file in `find $DEST/non-US -name Packages.gz | \
+ xargs -r zgrep -i ^Filename: | cut -d ' ' -f 2 | grep ^pool/` \
+ `find $DEST/non-US -name Sources.gz | xargs -r zcat | \
+ awk '/^Directory:/ {D=$2} /Files:/,/^$/ { \
+ if ($1 != "Files:" && $0 != "") print D "/" $3; \
+ }' | grep ^pool/`
+do
+ DIRS="`dirname $file` $DIRS"
+ echo $file >> .filelist
+done
+
+# Remove leading "pool" from all files in the file list.
+# The "./" we change it to is there so the file names
+# exactly match in the delete step and the files that get downloaded
+# are not deleted.
+sed 's!^pool/!./!' .filelist > .filelist.new
+mv -f .filelist.new .filelist
+
+(cd .. && mkdir -p $DIRS)
+# Tell rsync to download only the files in the list. The exclude is here
+# to make the recursion not get anything else.
+# TODO: main pool needs to be donwloaded from too, once there is one.
+rsync $FLAGS_POOL \
+ $HOST::debian/non-US/pool/ --include-from .filelist --exclude '*' .
+echo non-US pool rsynced
+exit 0
+# Delete all files that are not in the list, then any empty directories.
+# This also kills the filelist.
+find -type f | fgrep -vxf .filelist | xargs -r rm -f
+find -type d -empty | xargs -r rmdir -p --ignore-fail-on-non-empty
+# End of non-US package pool update.
+
+# Update the package pool.
+# TODO: probably needs to be optimized, we'll see as time goes by..
+cd $DEST/pool || exit 1
+rm -f .filelist
+
+# Get a list of all the files that are in the pool based on the Packages
+# files that were already updated. Thanks to aj for the awk-fu.
+for file in `find $DEST -name non-US -prune -o -name Packages.gz | \
+ xargs -r zgrep -i ^Filename: | cut -d ' ' -f 2 | grep ^pool/` \
+ `find $DEST -name non-US -prune -o -name Sources.gz | \
+ xargs -r zcat | \
+ awk '/^Directory:/ {D=$2} /Files:/,/^$/ { \
+ if ($1 != "Files:" && $0 != "") print D "/" $3; \
+ }' | grep ^pool/`
+do
+ DIRS="`dirname $file` $DIRS"
+ echo $file >> .filelist
+done
+
+# Remove leading "pool" from all files in the file list.
+# The "./" we change it to is there so the file names
+# exactly match in the delete step and the files that get downloaded
+# are not deleted.
+sed 's!^pool/!./!' .filelist > .filelist.new
+mv -f .filelist.new .filelist
+
+(cd .. && mkdir -p $DIRS)
+# Tell rsync to download only the files in the list. The exclude is here
+# to make the recursion not get anything else.
+# TODO: main pool needs to be donwloaded from too, once there is one.
+rsync $FLAGS_POOL \
+ $HOST::debian/pool/ --include-from .filelist --exclude '*' .
+# Delete all files that are not in the list, then any empty directories.
+# This also kills the filelist.
+find -type f | fgrep -vxf .filelist | xargs -r rm -f
+find -type d -empty | xargs -r rmdir -p --ignore-fail-on-non-empty
+# End of package pool update.
+
+# Update symlinks (I like to have a link to every .deb in one directory).
+if [ "$SYMLINK_FARM" = yes ]; then
+ install -d $DEST/all
+ cd $DEST/all || exit 1
+ find -name \*.deb | xargs -r rm -f
+ find .. -name "*.deb" -type f | grep -v ^../all | \
+ xargs -r -i ln -sf {} .
+fi
+
+# Waste bandwidth. Put a partial mirror on your laptop today!
diff --git a/deja-check-votes b/deja-check-votes
new file mode 100644
index 0000000..c8e3c50
--- /dev/null
+++ b/deja-check-votes
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+for x in `cat $1`; do
+ dejasearch -format classic -max 1 ~a $x;
+ if [ ! -s summary.html ]; then
+ echo $x >> possible-fraud
+ fi
+done
diff --git a/desymlink b/desymlink
new file mode 100644
index 0000000..a1a40ee
--- /dev/null
+++ b/desymlink
@@ -0,0 +1,16 @@
+#! /usr/bin/perl -w
+use strict;
+
+for (@ARGV) {
+ my $source = $_;
+ next unless -l $source;
+ my $target = readlink $source or die "readlink: $!";
+ my $trap = sub { unlink $source;
+ symlink $target, $source;
+ print "Caught a SIG$_[0]!\n";
+ exit; };
+ local ($SIG{HUP}, $SIG{INT}, $SIG{TERM}, $SIG{QUIT}, $SIG{__DIE__}) =
+ ($trap, $trap, $trap, $trap, $trap);
+ unlink $source;
+ system '/bin/cp', $target, $source;
+}
diff --git a/dinstall-private b/dinstall-private
new file mode 100644
index 0000000..7b0c879
--- /dev/null
+++ b/dinstall-private
@@ -0,0 +1,120 @@
+#! /bin/sh
+# The name is a deliberate echo of the "real" Debian dinstall; it moves
+# packages into /usr/src/debian, removes any old versions of those packages
+# there, and re-runs dpkg-myscan {packages,sources}.
+
+if [ $# -lt 2 ]; then
+ echo "Usage: $0 package-name version-number" >&2
+ exit 1
+fi
+
+PACKAGE=$1
+VERSION=$2
+UPSTREAM=`echo $VERSION | sed -e 's/-[^-]*$//'`
+
+echo -n "Dinstalling package $PACKAGE, "
+echo -n "version $VERSION, "
+echo "upstream version $UPSTREAM"
+
+ARCH=i386
+DEB=$PWD/${PACKAGE}_${VERSION}_${ARCH}.deb
+ORIG=$PWD/${PACKAGE}_$UPSTREAM.orig.tar.gz
+DIFF=$PWD/${PACKAGE}_${VERSION}.diff.gz
+DSC=$PWD/${PACKAGE}_${VERSION}.dsc
+CHANGES=$PWD/${PACKAGE}_${VERSION}_${ARCH}.changes
+
+# Sanity checks
+
+ERROR=
+if [ ! -f $DEB ]; then echo $DEB 'not found' >&2; ERROR=1; fi
+if [ ! -f $ORIG ]; then echo $ORIG 'not found' >&2; ERROR=1; fi
+if [ ! -f $DIFF ]; then echo $DIFF 'not found' >&2; ERROR=1; fi
+if [ ! -f $DSC ]; then echo $DSC 'not found' >&2; ERROR=1; fi
+if [ ! -f $CHANGES ]; then echo $CHANGES 'not found' >&2; ERROR=1; fi
+[ "$ERROR" ] && exit 1
+
+SECTION=`dpkg -f $DEB Section`
+if [ "$SECTION" ]; then
+ echo "Section: $SECTION"
+else
+ echo "Section not found." >&2
+ exit 1
+fi
+
+if echo $SECTION | egrep -q '^(contrib|non-free)/'; then
+ BINARYDIR=`echo $SECTION | sed -e "s|/|/binary-$ARCH/|"`
+ SOURCEDIR=`echo $SECTION | sed -e "s|/|/source/|"`
+elif echo $SECTION | egrep -q '^non-US/'; then
+ BINARYDIR=$SECTION/binary-$ARCH
+ SOURCEDIR=$SECTION/source
+else
+ BINARYDIR=main/binary-$ARCH/$SECTION
+ SOURCEDIR=main/source/$SECTION
+fi
+
+echo "Binaries in $BINARYDIR, sources in $SOURCEDIR"
+
+cd /usr/src/debian/dists/unstable
+
+ERROR=
+if [ ! -d $BINARYDIR ]; then echo 'Binary dir not found.' >&2; ERROR=1; fi
+if [ ! -d $SOURCEDIR ]; then echo 'Source dir not found.' >&2; ERROR=1; fi
+[ "$ERROR" ] && exit 1
+
+shopt -s nullglob
+
+BINARIES=`echo $BINARYDIR/${PACKAGE}_*`
+if [ "$BINARIES" ]; then
+ echo 'Binaries found in binary dir:'
+ echo $BINARIES | xargs -n1
+ read -n1 -esp 'Remove: (y/N) ' REMOVE
+ if [ "$REMOVE" == y ]; then
+ echo -n 'Removing ... '
+ echo $BINARIES | xargs rm
+ echo 'done.'
+ else
+ echo 'Aborting.'
+ exit
+ fi
+fi
+
+SOURCES=`echo $SOURCEDIR/${PACKAGE}_*`
+if [ "$SOURCES" ]; then
+ echo 'Sources found in source dir:'
+ echo $SOURCES | xargs -n1
+ read -n1 -esp 'Remove: (y/N) ' REMOVE
+ if [ "$REMOVE" == y ]; then
+ echo -n 'Removing ... '
+ echo $SOURCES | xargs rm
+ echo 'done.'
+ else
+ echo 'Aborting.'
+ exit
+ fi
+fi
+
+echo "Moving $DEB to $BINARYDIR ..."
+mv -f $DEB $BINARYDIR
+echo "Copying $ORIG to $SOURCEDIR ..."
+cp -f $ORIG $SOURCEDIR
+echo "Copying $DIFF to $SOURCEDIR ..."
+cp -f $DIFF $SOURCEDIR
+echo "Moving $DSC to $SOURCEDIR ..."
+mv -f $DSC $SOURCEDIR
+echo "Moving $CHANGES to $SOURCEDIR ..."
+mv -f $CHANGES $SOURCEDIR
+
+echo
+
+cd ../..
+
+dpkg-myscan packages
+
+echo
+
+dpkg-myscan sources
+
+echo
+
+echo "Dinstallation of $PACKAGE-$VERSION complete."
+
diff --git a/dinstall-riva b/dinstall-riva
new file mode 100644
index 0000000..86a9f91
--- /dev/null
+++ b/dinstall-riva
@@ -0,0 +1,157 @@
+#! /bin/sh
+# The name is a deliberate echo of the "real" Debian dinstall; it moves
+# packages into http://riva.ucam.org/~cjw44/debian/, removes any old versions
+# of those packages there, and re-runs dpkg-myscan {packages,sources}.
+
+if [ $# -lt 2 ]; then
+ echo "Usage: $0 package-name version-number" >&2
+ exit 1
+fi
+
+PACKAGE=$1
+VERSION=$2
+UPSTREAM=`echo $VERSION | sed -e 's/-[^-]*$//'`
+NATIVE=
+if [ "$VERSION" = "$UPSTREAM" ]; then
+ NATIVE=y
+fi
+
+echo -n "Dinstalling package $PACKAGE, "
+echo -n "version $VERSION, "
+echo "upstream version $UPSTREAM"
+[ "$NATIVE" ] && echo "Native Debian package"
+
+ARCH=i386
+BINARCH=i386
+DEB=$PWD/${PACKAGE}_${VERSION}_${BINARCH}.deb
+if [ ! -f $DEB ]; then
+ BINARCH=all
+ ALLDEB=$PWD/${PACKAGE}_${VERSION}_${BINARCH}.deb
+else
+ ALLDEB=$DEB
+fi
+if [ "$NATIVE" ]; then
+ ORIG=$PWD/${PACKAGE}_${VERSION}.tar.gz
+ DIFF=
+else
+ ORIG=$PWD/${PACKAGE}_${UPSTREAM}.orig.tar.gz
+ DIFF=$PWD/${PACKAGE}_${VERSION}.diff.gz
+fi
+DSC=$PWD/${PACKAGE}_${VERSION}.dsc
+CHANGES=$PWD/${PACKAGE}_${VERSION}_${ARCH}.changes
+
+# Sanity checks
+
+ERROR=
+if [ ! -f $DEB -a ! -f $ALLDEB ]; then
+ echo $DEB 'not found' >&2
+ [ $BINARCH = all ] && echo $ALLDEB 'not found' >&2
+ ERROR=1
+fi
+DEB=$ALLDEB
+if [ ! -f $ORIG ]; then echo $ORIG 'not found' >&2; ERROR=1; fi
+if [ "$DIFF" -a ! -f "$DIFF" ]; then
+ echo $DIFF 'not found' >&2
+ ERROR=1
+fi
+if [ ! -f $DSC ]; then echo $DSC 'not found' >&2; ERROR=1; fi
+if [ ! -f $CHANGES ]; then echo $CHANGES 'not found' >&2; ERROR=1; fi
+[ "$ERROR" ] && exit 1
+
+SECTION=`dpkg -f $DEB Section`
+if [ "$SECTION" ]; then
+ echo "Section: $SECTION"
+else
+ echo "Section not found." >&2
+ exit 1
+fi
+
+if echo $SECTION | egrep -q '^(contrib|non-free)/'; then
+ BINARYDIR=`echo $SECTION | sed -e "s|/|/binary-$BINARCH/|"`
+ SOURCEDIR=`echo $SECTION | sed -e "s|/|/source/|"`
+elif echo $SECTION | egrep -q '^non-US/'; then
+ BINARYDIR=$SECTION/binary-$BINARCH
+ SOURCEDIR=$SECTION/source
+else
+ BINARYDIR=main/binary-$BINARCH/$SECTION
+ SOURCEDIR=main/source/$SECTION
+fi
+
+echo "Binaries in $BINARYDIR, sources in $SOURCEDIR"
+
+cd /home/httpd/users/$USER/debian
+
+ERROR=
+if [ ! -d $BINARYDIR ]; then echo 'Binary dir not found.' >&2; ERROR=1; fi
+if [ ! -d $SOURCEDIR ]; then echo 'Source dir not found.' >&2; ERROR=1; fi
+[ "$ERROR" ] && exit 1
+
+shopt -s nullglob
+
+BINARIES=`echo $BINARYDIR/${PACKAGE}_*`
+if [ "$BINARIES" ]; then
+ echo 'Binaries found in binary dir:'
+ echo $BINARIES | xargs -n1
+ read -n1 -esp 'Remove: (y/N) ' REMOVE
+ if [ "$REMOVE" = y ]; then
+ echo -n 'Removing ... '
+ echo $BINARIES | xargs rm
+ echo 'done.'
+ else
+ echo 'Aborting.'
+ exit
+ fi
+fi
+
+SOURCES=`echo $SOURCEDIR/${PACKAGE}_*`
+if [ "$SOURCES" ]; then
+ echo 'Sources found in source dir:'
+ echo $SOURCES | xargs -n1
+ read -n1 -esp 'Remove: (y/N) ' REMOVE
+ if [ "$REMOVE" = y ]; then
+ echo -n 'Removing ... '
+ echo $SOURCES | xargs rm
+ echo 'done.'
+ else
+ echo 'Aborting.'
+ exit
+ fi
+fi
+
+echo "Moving $DEB to $BINARYDIR ..."
+mv -f $DEB $BINARYDIR
+echo "Copying $ORIG to $SOURCEDIR ..."
+cp -f $ORIG $SOURCEDIR
+if [ "$DIFF" ]; then
+ echo "Copying $DIFF to $SOURCEDIR ..."
+ cp -f $DIFF $SOURCEDIR
+fi
+echo "Moving $DSC to $SOURCEDIR ..."
+mv -f $DSC $SOURCEDIR
+echo "Moving $CHANGES to $SOURCEDIR ..."
+mv -f $CHANGES $SOURCEDIR
+
+echo
+
+dpkg-myscan packages
+
+echo
+
+dpkg-myscan sources
+
+echo
+
+echo -n 'Updating index.html ...'
+if [ "$NATIVE" ]; then
+ perl -pi -l \
+ -e 's/('$PACKAGE'_).*?(_|\.dsc)/${1}'$VERSION'$2/;' \
+ -e 's/('$PACKAGE'_).*?(\.tar\.gz)/${1}'$VERSION'$2/;' index.html
+else
+ perl -pi -l \
+ -e 's/('$PACKAGE'_).*?(_|\.diff\.gz|\.dsc)/${1}'$VERSION'$2/;' \
+ -e 's/('$PACKAGE'_).*?(\.orig\.tar\.gz)/${1}'$UPSTREAM'$2/;' index.html
+fi
+echo ' done.'
+
+echo "Dinstallation of $PACKAGE-$VERSION complete."
+
diff --git a/dpkg-myscan b/dpkg-myscan
new file mode 100644
index 0000000..b9d980a
--- /dev/null
+++ b/dpkg-myscan
@@ -0,0 +1,27 @@
+#! /bin/sh
+
+if [ "$1" = packages -o -z "$1" ]; then
+ type=packages
+ topdir=binary-i386
+ outfile=Packages
+elif [ "$1" = sources ]; then
+ type=sources
+ topdir=source
+ outfile=Sources
+else
+ echo "Usage: $0 packages|sources" >&2
+ exit 1
+fi
+
+echo Searching for $type ...
+
+for x in main non-US/main non-free; do
+ echo Scanning $x ...
+ dir=dists/unstable/$x/$topdir
+ if [ -e $dir ]; then
+ dpkg-scan$type $dir override > $dir/$outfile
+ gzip -c $dir/$outfile > $dir/$outfile.gz
+ else
+ echo $x not found.
+ fi
+done
diff --git a/expandvars.pl b/expandvars.pl
new file mode 100644
index 0000000..a7ea667
--- /dev/null
+++ b/expandvars.pl
@@ -0,0 +1,98 @@
+#! /usr/bin/perl -w
+use diagnostics;
+use strict;
+use Getopt::Long;
+
+sub usage ()
+{
+ print STDERR <<"EOF";
+Usage: $0 [options] source-filename
+EOF
+ print STDERR <<'EOF';
+where options are:
+
+ -h, -?, --help print this message
+ -c, --conf FILENAME use FILENAME as configuration file, default
+ '.headers'
+ -d, --directory DIR change to directory DIR
+ -s, --suffix SUFFIX use SUFFIX for all output filenames, default null
+
+The configuration file is of the following form:
+
+# Comments are preceded by hashes and extend to the end of the line.
+# List of names of parameters to be substituted (as $param1$, $param2$,
+# etc.) in order.
+param1 param2 ...
+
+# Multiple records, one per line.
+# Each record consists of an output filename (automatically used as the value
+# of the name parameter; suffix will be added if present) followed by a list of
+# parameter values. Fields are space-separated. Double quotes (") may be used
+# to delimit fields containing spaces, and double quotes themselves may be
+# escaped with backslashes.
+
+EOF
+ exit;
+}
+
+my %opts = (conf => '.headers', directory => '', suffix => '');
+GetOptions(\%opts, 'help|h|?', 'conf|c=s', 'directory|d=s', 'suffix|s=s');
+my $source = shift;
+usage unless defined $source;
+
+usage if $opts{'help'};
+chdir $opts{'directory'} if $opts{'directory'};
+open CONF, $opts{'conf'} or
+ die "Can't open configuration file " . $opts{'conf'} . ": $!";
+-r $source or die "Can't read source file $source: $!";
+
+my @params;
+while ()
+{
+ next if /^#/ || /^\s+/;
+ @params = split;
+ last;
+}
+
+usage unless defined @params && $#params >= 0;
+
+# Eek. This matches the next (optionally double-quoted) string on the line.
+my $stringre = qr/\s*("(?:[^\\]|\\.)*?"|(?:[^\\]|\\.)+?)(?:\s|$)/;
+while ()
+{
+ next if /^#/ || /^\s+/;
+ my $confline = $_;
+ next unless $confline =~ /$stringre/g;
+ my $target = $1;
+ my %values = (name => $target);
+ my @conffields = ($confline =~ /\G$stringre/g);
+ my $offset = 0;
+ for (my $i = 0; $i + $offset <= $#params && $i <= $#conffields; $i++)
+ {
+ $offset++ while $params[$i + $offset] eq 'name';
+ last if $i + $offset > $#params;
+ my $value = $conffields[$i];
+ $value =~ s/^"(.*)"$/$1/;
+ $value =~ s/\\(.)/$1/g;
+ $values{$params[$i + $offset]} = $value;
+ }
+
+ # Do the substitution in the source file.
+ open SOURCE, $source or die "Can't open source file $source: $!";
+ open TARGET, ">$target" . $opts{'suffix'} or
+ die "Can't open target file $target" . $opts{'suffix'} . ": $!";
+ select TARGET;
+ while ()
+ {
+ foreach my $param (keys %values)
+ {
+ my $value = $values{$param};
+ s/\$\Q$param\E\$/$value/g;
+ }
+ s/\$\$/\$/g;
+ print;
+ }
+ select STDOUT;
+ close TARGET;
+}
+
diff --git a/faq-pointer b/faq-pointer
new file mode 100644
index 0000000..cbd76f3
--- /dev/null
+++ b/faq-pointer
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+# Post the alt.fan.eddings FAQ pointer every six days
+cd $HOME/afe/daemons
+$HOME/bin/crondiv 6 faq-pointer.log inews -hS faq-pointer.txt
diff --git a/faq2html.pl b/faq2html.pl
new file mode 100644
index 0000000..15305de
--- /dev/null
+++ b/faq2html.pl
@@ -0,0 +1,445 @@
+#! /usr/bin/perl -w
+use strict;
+require 5.000;
+use lib qw(.);
+use Style qw(html_header html_footer);
+
+# The AFE FAQ HTMLizer
+# Perl version written by Kamion; based on a sed script by Aquarius
+
+sub usage ()
+{
+ print STDERR <<"EOF";
+Usage: $0 index-filename [up-URL] < faq-document
+
+URLs may be absolute or relative.
+
+EOF
+ exit 1;
+}
+
+sub html_escape (\$)
+{
+ my $line = shift;
+ return unless defined $$line;
+ $$line =~ s/\&/&/g;
+ $$line =~ s/</g;
+ $$line =~ s/>/>/g;
+ $$line =~ s/"/"/g;
+ $$line =~ s/æ/æ/g;
+ return $$line;
+}
+
+#my $sts_link = "http://riva.ucam.org/~kamion/archive-bin/" .
+# "article.pl?msgid=5n0qq5\$d9p\@mercury.dur.ac.uk";
+my $sts_link = 'http://groups.google.com/groups?' .
+ 'q=Easter+Egg&ic=1&selm=5n0qq5%24d9p%40mercury.dur.ac.uk';
+
+# Paragraph to format and undefine, followed optionally by open and close tags.
+sub print_paragraph (\$;$$)
+{
+ my $para = shift;
+ return unless defined $$para && $$para !~ /^\s*$/;
+ my $open_tags = shift;
+ my $close_tags = shift;
+
+ # Make URLs links
+ $$para =~ s#(http:(?:[^\ \&<]|\&(?!gt;))*)
+ #$1#gx;
+
+ # Make all text within pairs of underscores outside URLs emphasized
+ $$para =~ s[_((?:[^_.-])+\.?)_
+ (?![^"]*">|[^<]*)][$1]gx;
+
+ # Similarly, strengthen bold text within asterisks
+ $$para =~ s[\*((?:[^*.])+\.?)\*
+ (?![^"]*">|[^<]*)][$1]gx;
+
+ # Easter egg
+ $$para =~ s|(Sephrenia the Styric)|$1|g;
+
+ $$para = "$open_tags$$para" if defined $open_tags;
+ $$para .= $close_tags if defined $close_tags;
+
+ print "$$para\n";
+ undef $$para;
+}
+
+my $index_file = shift or usage;
+my $up_url = shift;
+
+open CONTROL, ">control.html" or die "Can't write to control.html: $!";
+select CONTROL;
+
+html_header "Revision information", $index_file;
+print "\n";
+
+my $changes_done = 0;
+
+print "\n";
+while (<>)
+{
+ $changes_done = 1 if (/^Archive-name:/);
+ next unless $changes_done;
+ chomp;
+ html_escape $_;
+ last if (/^\s*$/);
+ unless (/^([^:]+:)\s*(.+)$/)
+ {
+ warn "Non-header line found in control section: $_";
+ next;
+ }
+ print "$_\n";
+}
+print "
\n\n";
+
+html_footer $index_file;
+
+open INDEX, ">$index_file" or die "Can't write to $index_file: $!";
+select INDEX;
+
+html_header "Contents", $up_url;
+print "\n";
+
+print "\n";
+while (<>)
+{
+ last if /^\s*$/;
+ html_escape $_;
+ print;
+}
+print "
\n\n";
+
+print "Revision information
\n";
+
+my $paragraph;
+my $listentry = 0;
+my $level = 0;
+my @lastvalues = ();
+
+while (<>)
+{
+ chomp;
+ s/^\s*//;
+ html_escape $_;
+ # Stop at TOC-body separator
+ if (/--------/)
+ {
+ print_paragraph $paragraph, "", $listentry ? "" : "";
+ last;
+ }
+ # Convert headings to links
+ my $line = $_;
+ if ($line =~ /([0-9]+)((?:.[0-9]+)*)[\)\s]/)
+ {
+ my $firstcomp = $1;
+ my $heading = "$1$2";
+ my @components = split /\./, $heading;
+ if (@components > 0)
+ {
+ $line =~ /\s+(.*)$/g;
+ my $linetail = $1;
+ print_paragraph $paragraph, "", $listentry ? "" : "";
+
+ # Change level of ordered list if necessary
+ if (@components > $level)
+ {
+ print "\n" x (@components - $level);
+ }
+ elsif (@components < $level)
+ {
+ print "
\n" x ($level - @components);
+ }
+ #print "
\n\n" if @components == 1 && $level > 0;
+ print "\n
\n\n" if @components == 1 && $level > 0;
+ $level = @components;
+ $#lastvalues = $level;
+ #print "\n" if $level == 1;
+
+ # Reformat the current line
+ my $value = $components[$#components];
+ if (defined $lastvalues[$level] &&
+ $lastvalues[$level] + 1 != $value)
+ {
+ warn "Missing item in contents before $heading";
+ print "
";
+ }
+ elsif ($value != 1)
+ {
+ print "";
+ }
+ else
+ {
+ print "";
+ }
+ $lastvalues[$level] = $value;
+ print "\n";
+ $paragraph = $linetail;
+ $listentry = 1;
+ next;
+ }
+ }
+ elsif (/^[A-Z][^a-z]+$/)
+ {
+ print_paragraph $paragraph, "", $listentry ? "" : "";
+ if ($level == 0)
+ {
+ print "\n$_
\n\n";
+ }
+ else
+ {
+ #print "\n\n";
+ print "\n\n" x ($level - 1);
+ print "\n" if $level == 1;
+ print "$_
\n\n";
+ print "\n" x ($level - 1);
+ #print "\n";
+ $#lastvalues = 0;
+ }
+ $listentry = 0;
+ next;
+ }
+ elsif (/^$/)
+ {
+ print_paragraph $paragraph, "", $listentry ? "" : "";
+ $listentry = 0;
+ next;
+ }
+ print_paragraph $paragraph;
+ $paragraph = $_;
+}
+
+# Do all the necessary end tags
+#print "
\n" if $level > 0;
+print "\n
\n" if $level > 0;
+print "\n";
+print "
\n\n" x $level;
+
+html_footer $up_url;
+select STDOUT;
+close INDEX;
+
+$paragraph = <>;
+my $oldsection;
+my $section;
+my $section_open = 0;
+my $num_sections = $lastvalues[1];
+my $in_heading = 0;
+my $in_h2 = 0;
+$level = 0;
+$#lastvalues = -1;
+
+my $heading_pat = qr/^\s*([0-9]+(?:.[0-9]+)*)\)\s+/;
+
+while (<>)
+{
+ s/\s+\n/\n/;
+ html_escape $_;
+
+ if (/^\s*([0-9]+)\)\s/)
+ {
+ chomp $paragraph if defined $paragraph;
+ if ($section_open)
+ {
+ if ($in_heading)
+ {
+ print_paragraph $paragraph, "", "";
+ }
+ else
+ {
+ print_paragraph $paragraph, "\n", "\n
";
+ }
+ }
+ $in_heading = $in_h2 = 0;
+ $oldsection = $section;
+ $section = $1;
+ print "\n" if $section_open;
+ print "\n\n" x $level if $section_open;
+ html_footer $index_file,
+ ($oldsection > 1) ?
+ ("part" . ($oldsection - 1) . ".html") :
+ undef,
+ "part" . ($oldsection + 1) . ".html"
+ if $section_open;
+ open SECTION, ">part$section.html" or
+ die "Couldn't write to part$section.html: $!";
+ select SECTION;
+ html_header "section $section",
+ $index_file,
+ "part" . ($section - 1) . ".html",
+ ($section < $num_sections) ?
+ ("part" . ($section + 1) . ".html") :
+ undef;
+ $section_open = 1;
+ $level = 0;
+ $#lastvalues = -1;
+ }
+
+ # Convert headings to anchors in list items
+ if (/$heading_pat/)
+ {
+ my $heading = $1;
+ my @components = split /\./, $heading;
+ chomp $paragraph if defined $paragraph;
+ if ($in_heading)
+ {
+ print_paragraph $paragraph, "", "\n";
+ }
+ else
+ {
+ print_paragraph $paragraph, "\n", "\n
\n";
+ }
+ $in_h2 = 0;
+
+ # Change level of ordered list if necessary
+ if (@components > $level)
+ {
+ print "\n\n" x (@components - $level);
+ }
+ elsif (@components < $level)
+ {
+ print "
\n\n" x ($level - @components);
+ }
+ $level = @components;
+ $#lastvalues = $level;
+
+ my $value = $components[$#components];
+ if (@components == 1)
+ {
+ chomp;
+ s|$heading_pat|\n";
+ $in_h2 = 0;
+ }
+ else
+ {
+ if ($in_heading)
+ {
+ print_paragraph $paragraph, "", "";
+ }
+ else
+ {
+ print_paragraph $paragraph, "\n", "\n
";
+ }
+ }
+ $in_heading = 0;
+ $paragraph = "$_" unless /^\n?$/;
+ }
+ elsif (defined $paragraph)
+ {
+ $paragraph .= "$_";
+ }
+ else
+ {
+ $paragraph = "$_" unless /^\n?$/;
+ }
+}
+
+if ($section_open)
+{
+ chomp $paragraph if defined $paragraph;
+ if ($in_heading)
+ {
+ print_paragraph $paragraph, "", "";
+ }
+ else
+ {
+ print_paragraph $paragraph, "\n", "\n
";
+ }
+ print "\n";
+ print "\n\n" x $level;
+
+ html_footer $index_file,
+ ($section > 1) ? ("part" . ($section - 1) . ".html") : undef,
+ undef;
+ close SECTION if $section_open;
+}
+else
+{
+ warn "No sections encountered";
+}
+
diff --git a/find-package b/find-package
new file mode 100644
index 0000000..713a67c
--- /dev/null
+++ b/find-package
@@ -0,0 +1,4 @@
+#! /bin/sh
+zcat /mirror/debian/dists/unstable/*/binary-$1/Packages.gz \
+ /mirror/debian/non-US/dists/unstable/non-US/*/binary-$1/Packages.gz \
+ | grep-dctrl -nsFilename -PX $2
diff --git a/find-visible b/find-visible
new file mode 100644
index 0000000..a1dc244
--- /dev/null
+++ b/find-visible
@@ -0,0 +1,2 @@
+#! /bin/sh
+find ! -perm -004 -prune -o -type f -perm -004 -print
diff --git a/find-zlib b/find-zlib
new file mode 100644
index 0000000..5999d34
--- /dev/null
+++ b/find-zlib
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+
+# find-zlib - scan for zlib tables in compiled code
+# Copyright (C) 2002 RUS-CERT, University of Stuttgart.
+# Written by Florian Weimer .
+#
+# 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.
+
+if (@ARGV == 0) {
+ print "usage: find-zlib filename...\n";
+ exit 1;
+}
+
+use strict;
+
+$/ = undef;
+
+my @inflate_table = (3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227,
+ 258, 0, 0);
+
+sub table_to_re (@) {
+ my $be = "";
+ my $le = "";
+ my $e;
+ foreach $e (@_) {
+ $be .= pack "N", $e;
+ $le .= pack "V", $e;
+ }
+ return (quotemeta($be), quotemeta($le));
+}
+
+sub table_to_re_config (@) {
+ my $be = "";
+ my $le = "";
+ my $e;
+ foreach $e (@_) {
+ $be .= pack "n", $e;
+ $le .= pack "v", $e;
+ }
+ return (quotemeta($be), quotemeta($le));
+}
+
+my ($inflate_table_be, $inflate_table_le) = table_to_re (@inflate_table);
+
+my $line;
+my (@config_table_le, @config_table_be) = ();
+foreach $line ([8, 32, 128, 256],
+ [32, 128, 258, 1024],
+ [32, 258, 258, 4096]) {
+ my ($be, $le) = table_to_re_config(@$line);
+ push @config_table_be, $be;
+ push @config_table_le, $le;
+}
+my ($config_table_be_32,
+ $config_table_be_64,
+ $config_table_le_32,
+ $config_table_le_64)
+ = (join("....", @config_table_be),
+ join("........", @config_table_be),
+ join("....", @config_table_le),
+ join("........", @config_table_le));
+
+my $file;
+my $found = 1;
+for $file (@ARGV) {
+ open (FILE, "<$file");
+ my $data = ;
+ close FILE;
+
+ if ($data =~ /$config_table_le_32/o) {
+ print "$file: zlib configuration table, little endian, 32 bit\n";
+ $found = 0;
+ }
+
+ if ($data =~ /$config_table_be_32/o) {
+ print "$file: zlib configuration table, big endian, 32 bit\n";
+ $found = 0;
+ }
+ if ($data =~ /$config_table_le_64/o) {
+ print "$file: zlib configuration table, little endian, 64 bit\n";
+ $found = 0;
+ }
+
+ if ($data =~ /$config_table_be_64/o) {
+ print "$file: zlib configuration table, big endian, 64bit\n";
+ }
+ if ($data =~ /$inflate_table_le/o) {
+ print "$file: zlib inflate table, little endian\n";
+ $found = 0;
+ }
+ if ($data =~ /$inflate_table_be/o) {
+ print "$file: zlib inflate table, big endian\n";
+ $found = 0;
+ }
+}
+exit $found;
diff --git a/format b/format
new file mode 100644
index 0000000..08a9d45
--- /dev/null
+++ b/format
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Parameterizes a document.
+# Input arguments Param1 Value1 Param2 Value2 ... will replace
+# $Param1$ with Value1, $Param2$ with Value2, and so on.
+
+# Arguments with spaces in must be quoted.
+
+function getargs ()
+{
+ while [ $# != 0 -a $# != 1 ]; do
+ SUBST=${2//\'/\'\\\'\'};
+ SUBST=${SUBST//\//\\\/};
+ echo -n -;
+ echo -n e \'s/\\\$$1\\\$/$SUBST/g\'\ ;
+ shift 2;
+ done
+ echo -n -;
+ echo -n e \'s/\\\$\%/\$/g\' -e \'s/\\\$\\\$/\$/g\'\ ;
+ echo -n $1;
+}
+
+if [ "$1" == "-v" ]; then
+ shift;
+ bash --norc -vc "sed `getargs \"$@\"`";
+else
+ bash --norc -c "sed `getargs \"$@\"`";
+fi
+
diff --git a/ftp-removals b/ftp-removals
new file mode 100644
index 0000000..2a0837d
--- /dev/null
+++ b/ftp-removals
@@ -0,0 +1,8 @@
+#! /bin/sh
+set -e
+
+if [ -z "$1" -o "$1" = main ]; then
+ ${BROWSER:-lynx} http://ftp-master.debian.org/removals.txt
+else
+ ${BROWSER:-lynx} http://non-us.debian.org/~troup/removals.txt
+fi
diff --git a/genheaders b/genheaders
new file mode 100644
index 0000000..8c8073c
--- /dev/null
+++ b/genheaders
@@ -0,0 +1,2 @@
+#! /bin/sh
+expandvars.pl -s .header.ssi header.ssi
diff --git a/get-bugs b/get-bugs
new file mode 100644
index 0000000..a53e0b8
--- /dev/null
+++ b/get-bugs
@@ -0,0 +1,2 @@
+#! /bin/sh -e
+ssh master grep "^$1 " /var/lib/debbugs/spool/index.db
diff --git a/get-corr b/get-corr
new file mode 100644
index 0000000..a1edfda
--- /dev/null
+++ b/get-corr
@@ -0,0 +1,54 @@
+#! /usr/bin/perl -w
+use diagnostics;
+use strict;
+
+use Mail::Util qw(read_mbox);
+
+sub recurse ($)
+{
+ my $file = shift;
+ -d $file or return ($file);
+ opendir DIR, $file or return ($file);
+ my @contents = map { recurse("$file/$_") } grep !/^\.\.?$/, readdir DIR;
+ closedir DIR;
+ return @contents;
+}
+
+my @folders = recurse "$ENV{HOME}/mail";
+
+foreach my $folder (@folders)
+{
+ my @messages = read_mbox($folder);
+ foreach my $message (@messages)
+ {
+ my $from;
+ my $print_from = 0;
+ my $scan = 0;
+ foreach my $line (@$message)
+ {
+ last if $line =~ /^$/;
+ if ($line =~ /^From:[ \t](.*)/)
+ {
+ $from = $1;
+ }
+ if ($line =~ /^(?:To|Cc)/)
+ {
+ $scan = 1;
+ }
+ elsif ($line !~ /^[ \t]/)
+ {
+ $scan = 0;
+ }
+ if ($scan)
+ {
+ if ($line =~ /cjw44/)
+ {
+ $print_from = 1;
+ last;
+ }
+ }
+ }
+ print "$from\n" if $print_from and defined $from;
+ }
+}
+
diff --git a/get-deb b/get-deb
new file mode 100644
index 0000000..517b44c
--- /dev/null
+++ b/get-deb
@@ -0,0 +1,12 @@
+#! /bin/sh
+set -e
+
+FILENAME=$(grep-available -PXnsFilename $1)
+
+if [ -n "$FILENAME" ]; then
+ if echo "$FILENAME" | grep non-US; then
+ lftpget "ftp://ftp.uk.debian.org/debian-non-US/$FILENAME"
+ else
+ lftpget "ftp://ftp.uk.debian.org/debian/$FILENAME"
+ fi
+fi
diff --git a/get-kernel b/get-kernel
new file mode 100644
index 0000000..c4d9b92
--- /dev/null
+++ b/get-kernel
@@ -0,0 +1,11 @@
+#! /bin/sh -e
+
+VERSION=$1
+MAJOR=`expr $1 : '\(^[0-9]*\.[0-9]*\)'`
+
+rm -f linux
+wget -c ftp://ftp.kernel.org/pub/linux/kernel/v$MAJOR/linux-$VERSION.tar.bz2
+tar xjvf linux-$VERSION.tar.bz2
+rm -f linux-$VERSION.tar.bz2
+mv linux linux-$VERSION
+ln -s linux-$VERSION linux
diff --git a/get-newgroup b/get-newgroup
new file mode 100644
index 0000000..2385e6f
--- /dev/null
+++ b/get-newgroup
@@ -0,0 +1,3 @@
+#! /bin/sh
+wget ftp://ftp.isc.org/pub/usenet/control/`echo $1 | cut -d. -f1`/$1.Z
+if [ -f $1.Z ]; then uncompress -f $1.Z; fi
diff --git a/get-news-ntlworld b/get-news-ntlworld
new file mode 100644
index 0000000..5d6ba72
--- /dev/null
+++ b/get-news-ntlworld
@@ -0,0 +1,2 @@
+#! /bin/sh
+sudo su - news -c '/etc/news/scripts/ntlworld -v'
diff --git a/get-rfc b/get-rfc
new file mode 100644
index 0000000..ca7c2aa
--- /dev/null
+++ b/get-rfc
@@ -0,0 +1,2 @@
+#! /bin/sh
+wget --passive http://www.ietf.org/rfc/rfc$1.txt
diff --git a/get-sig b/get-sig
new file mode 100644
index 0000000..f15776b
--- /dev/null
+++ b/get-sig
@@ -0,0 +1,20 @@
+#! /bin/bash
+
+if [ "X$1" == "X" ]; then
+ NAME=$(grep '^\*' ~/.siglist | head -1 | tr -s '\t' ' ' | cut -d' ' -f2)
+ if [ "X$NAME" == "X" ]; then
+ echo "Usage: $0 signature-name [pattern]" 2>&1
+ exit 1
+ fi
+else
+ NAME=$1
+fi
+
+ARGS=$(grep ^$NAME'\>' ~/.siglist | head -1 | tr -s '\t' ' ' | cut -d' ' -f2-)
+BASEDIR=$(eval echo $(echo $ARGS | cut -d' ' -f1))
+STATICFILE=$(eval echo $(echo $ARGS | cut -d' ' -f2))
+FORTUNEARGS=$(eval echo $(echo $ARGS | cut -d' ' -f3-))
+
+cd $BASEDIR
+cat $STATICFILE
+if [ "$2" ]; then fortune $FORTUNEARGS -m $2; else fortune $FORTUNEARGS; fi
diff --git a/get-var.pl b/get-var.pl
new file mode 100644
index 0000000..9b8f930
--- /dev/null
+++ b/get-var.pl
@@ -0,0 +1,20 @@
+#! /usr/bin/perl -wn
+BEGIN {
+ unless (defined ($var = shift)) {
+ print STDERR "Usage: $0 var-name\n";
+ exit 1;
+ }
+}
+if (/^\Q$var\E=/) {
+ s/^\Q$var\E=//;
+ print, last unless /^'/;
+ do {
+ $quotes = (grep /'/g, (split //, $_)) % 3;
+ $inside = $quotes ... $quotes;
+ s/^'// if $inside == 1;
+ s/'$// if $quotes == 2 || $inside =~ /E0$/;
+ s/'\\''/'/g;
+ print;
+ last if $quotes == 2 || $inside =~ /E0$/;
+ } while (<>);
+}
diff --git a/get-with-referrer b/get-with-referrer
new file mode 100644
index 0000000..09a9cfb
--- /dev/null
+++ b/get-with-referrer
@@ -0,0 +1,14 @@
+#! /usr/bin/perl -w
+use strict;
+use LWP::UserAgent;
+
+my $url = <>;
+my $referrer = <>;
+my $target = <>;
+
+my $ua = new LWP::UserAgent;
+
+my $req = new HTTP::Request(GET => $url);
+$req->header(Referer => $referrer);
+my $res = $ua->request($req, $target);
+
diff --git a/grep-services b/grep-services
new file mode 100644
index 0000000..cf6615a
--- /dev/null
+++ b/grep-services
@@ -0,0 +1,28 @@
+#! /usr/bin/perl -ws
+use strict;
+use vars qw($f);
+
+sub getservice ($)
+{
+ (my $search) = @_;
+
+ open SERVICES, "/etc/services" or die "Couldn't open /etc/services";
+ while () { print if /\b\Q$search\E\b/; }
+ close SERVICES;
+}
+
+if ($f)
+{
+ while (<>)
+ {
+ chomp;
+ getservice $_;
+ }
+}
+else
+{
+ while (defined (my $arg = shift))
+ {
+ getservice $arg;
+ }
+}
diff --git a/hermes-unread b/hermes-unread
new file mode 100644
index 0000000..d69cf0d
--- /dev/null
+++ b/hermes-unread
@@ -0,0 +1,18 @@
+#! /usr/bin/perl -w
+use diagnostics;
+use strict;
+use Socket;
+
+my $sin = sockaddr_in 2345, inet_aton 'hermes.cam.ac.uk';
+for (@ARGV)
+{
+ socket HERMES, PF_INET, SOCK_STREAM, getprotobyname 'tcp' or
+ die "Couldn't create socket: $!";
+ connect HERMES, $sin or die "Couldn't connect: $!";
+ send HERMES, "$_\015\012", 0;
+ my $text;
+ recv HERMES, $text, 256, MSG_WAITALL;
+ print((split /\n/, $text, 2)[1]);
+ close HERMES;
+}
+
diff --git a/horja b/horja
new file mode 100644
index 0000000..e56129d
--- /dev/null
+++ b/horja
@@ -0,0 +1,4 @@
+grep -v ^# birthdays.txt | grep '[^/]*'/$(date +%m/%d) | tr '\t' ' ' | sed \
+'s|/../.. *|\\|'|awk -F\\ '{A='$(date +%Y)'-$1; gsub("['\''\"( ]","\\\\&", \
+$2);srand();system("sed "($1=="XXXX"?"/AGE/,/^/d":"s/AGE/"A"/")" message." \
+"txt | sed s/NAME/"$2"/|cat - horja"(rand()>10?"":".sig")" | inews -hOS");}'
diff --git a/httpclient b/httpclient
new file mode 100644
index 0000000000000000000000000000000000000000..48988150911f7b25410a9ebdc0f58cd5820b121e
GIT binary patch
literal 337468
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
FJvo*HylMNI4`|X*oHo}j#GoD
zg5$VSdK8UR=*Y>iy@6qi{uVZV3Lvz-pF_(KHb@cy_35oZvc6THD^8#wd0ZxvG#GA^
zXn56`oc3@R7p6dUg0etrwtA9@bI(&9vkazNH(9qr{kbH4f)Jlc^n6;0zB1D?upS5U
z8O2tJ@lOy9R<#hI*;hU*SR!UZM?x+V9Gougs$mja*$2xTcK5#%DMLSJk}jIJM#uwW
z)eA%WtnK2QsREq8MC}Vg`~)4YH#SLQ58K2E+IqCj>jU0Y>G@5N1-QUo=_E1HH(K?d
z>j}h!GPOY7@`9!LJ1MbP*Qa7~K`~{EP_8&d(alNG&q+~AyqprW*hH909*Q$D7nQQ3
zxwPW7N-O=t9!q;6Ap2&p`@ws8U6%v^mzy^U{SSZC3gvU}H&nujrd0yhLODToivUz+6
z6S~AD#w<)*u@oR?tb$n}37B6?S0!isBG`r&X-o4$1CrWQY&pTkq1GyJCa}7M=s$oOSsf_cXA2W$R*rn36I+D
zO)lYympCt>v6Ws~q-&E8ZSUH^-`UO{AIy3RbJu%0NHC^u!~Tc1yq|^U|38Rt3bGO@
zez@)bLH0y~5YGP#R7|Fc%b>|#GV~i}p;*rN%9SLy*KV}8<}0^1LYhaf2R7Jv9a+jg@J-ilRyOvlSC)jvfxIyx|B=%9
z)zCXS>EnZ_ZLluRQfT|Za{iMR*XHMjz}a&XlKFvyBr&{NURXgzOsMfpXaz?MUKm_>bTls5_GZ}+01N8JAWs0r7XXz5
zGR1O4W*+cbzKax)1a%Ix=mgLaKH3~Gw3GRMDT3Ii=AyWdzZmQt6n|=$dkX=ufHiO!*H)f8$`5J#C#J
zeyrLlBZz+5g0WJu-XcVQsP*<40v)lj7Y6$*qESOn9%!l^Dd{6#!F1hf6`R8x=AH2B_*S)yz!F4yT
zKj2!6>-V^RhwCm}cjCGO*X_7|i|aOAx8jnanBrI92R|AHIUE~rQ~IaX*xKj(vkv=M
z&eDR{4QUe~=G_7W+{rK6z6V&R#X*GlGN6rpTRjWUlR`W@_yX$?@
zrRxL!&JK=^Ai!~Wa-UXZv5H0~?Dd~|HRF{EUNGX7V(}#|F1czD{V)$_WPD6|S@vrH5a{&JpjP$Q7I2ML+szpyJJ8`(dqeEEh
zqHjq(9lzW!=Hu~NXJ%IU9oGKpuD1yc>k(d@>OG)VA=WPgc^skj*bS#yu&3MAxygu_
zlMQTcBr91TsI4Cwp-VCy~7%3
zsPo_jpQjC3H^?$w|70?KpLvP(bxpFMpxc1VDf9{{}#Y34jY*{~G|ACIBvM{civW
zhfL|mos0iBg|lSsokd@|uq6D2*|VY2l;)vTb%SEQ(%ZGm0um<1FFe!%{njmf)f!I@
zy0i&r&SOohw&*FfjZ5OQfH8GOnfB+^P*J$6;_?FCcvj#I{oLiu!EMi2G)7nFQ4Ce8
z&8gVNV|~?w3Xw3YXxp{!Gx3&-EmexR^%QMYY-i%xRkRa+cv;$YitQJ4bLU_`3pVJX
z8veMsUNZ}o)6G81*?E)Lel6ODa$-X^YR8cds6oVlhr-yr#|7|Wq!-3h-3atRY5`L7
z;;9a3Bc%F~>Win^@JQD_wnF_{rlBqGGYa$R96%+`iBkCpoXX7^7$=HkOb&QoE2o
z6P(w5gs!`=oHXU(6-}-Br)!3X+xoyMu`Gp!wIL*gHhSdRGQ|S%bFuN}ma901{n{LF
z;&GHccmb$JeDA_?o>GScOYR3S`G8}KZs!Beufv)~i+-c1#&5>|CdCDn5E$pqq%mm8
z_1#ryqK5S}E^{>V6HnjOY?DHR&LtBu#6TLXTM^>~nAUbnbly5z6Zu;a$78&4;tee&
ze9gnf0I)F5YPN(qUE(