====== Mailman-History ======
{{tag>project software computing infrastructure}}
{{process:shack-heritage-badge.png}}
===== Masterplan =====
* Informationsverteilung an Neubienen
* Rechteentzug bei Vereinsaustritt
==== Skizze ====
Mitglieder werden auf den Mailinglisten angemeldet
und bei Austritt abgemeldet. Die Aenderung der Listen
enthaelt Hinweise fuer die Systemadminsitration (Privilegienrueckbau)
und eine Informationssystem fuer Neumitglieder.
===== Plan I =====
History fuer Listenmitgliedschaften bereitstellen.
==== Skizze ====
* Taeglich wird (mit list_members) die Liste der Subscriber gedumpt.
* Diese wird in eine Datei geschrieben, die unter RCS steht.
* Die Aenderungen zum Vortag werden festgestellt
* Historie anhand der System-Backups restaurieren
#!/bin/bash
export PATH=$PATH:/usr/sbin
DIR=/var/lib/watch-lists
LISTS="
mitglieder
mitglieder-announce
"
for i in $LISTS ; do
FILE="$DIR/$i"
if [ ! -e "$FILE" ]; then
mkdir -p $DIR
mkdir -p $DIR/RCS
touch $FILE
ci -u -q $FILE < /dev/null
fi
co -q -l $FILE
list_members $i | sort | uniq > $FILE
rcsdiff -q $FILE
ci -q -u -m. $FILE
done
10 07 * * * root /usr/local/bin/watch-lists
Das Diff wird cron an admin@ vermailt.
Die History wird anhand der Datensicherungen restauriert
und im RCS abgelegt. Dafuer werden die Listenmitglieder aus der
config.pck-Datei extrahiert und wird das RCS-Eincheckdatum auf
den Zeitpunkt der Sicherung gesetzt.
#!/bin/bash
#
# fake rcs history for mailman list files:
# reverse history from backed up pickle files
#
if false ; then
find ~/sys01 ~/sys02 -type f | awk -F'[/.]' '{ print $0,$4,$6,$11 }' | (
while read file sys date list ; do
# echo "$file*$sys*$date*$list"
~chris/bin/unpickle.py $file |
awk '$1 == "members" {print $0}' |
sed 's/^.*{//;s/}$//;s/,/\n/g;' |
sed 's/'"'"':.*$//;s/^.*'"'"'//' |
sort -u |
tee ~/sysall/$sys.$list.$date
done
)
fi
rm -f ~/sysall/mitglieder ~/sysall/mitglieder-announce
rm -f ~/sysall/mitglieder,v ~/sysall/mitglieder-announce,v
touch ~/sysall/mitglieder ~/sysall/mitglieder-announce
ci -u -d"2011-06-13 00:00:00" ~/sysall/mitglieder < /dev/null
ci -u -d"2011-06-13 00:00:00" ~/sysall/mitglieder-announce < /dev/null
set -xv
for i in ~/sysall/mm/sys* ; do
read sys list datetime <<< ${i//\./ }
read date time <<< ${datetime//\-/ }
#echo "$sys*$date*$time*$list"
year=${date:0:4}
mon=${date:4:2}
day=${date:6:2}
h=${time:0:2}
m=${time:2:2}
s=${time:4:2}
# echo "$year*$mon*$day"
# echo "$h*$m*$s"
outdate="$year-$mon-$day $h:$m:$s"
echo $outdate
co -l ~/sysall/$list
cat $i > ~/sysall/$list
ci -u -m. -d"$outdate" ~/sysall/$list
done
===== Plan II =====
Privilegienrueckbau.
==== Skizze ====
* Feststellen, welche Privilegien existieren
* Privilegien entziehen
#!/bin/bash
# find user assets inside the system
# you may want this to get rid of a closed account
USERNAME="$1"
grep "$1" /etc/passwd /etc/shadow /etc/group /etc/sudoers /etc/aliases
for i in $( list_lists | awk '{print $1}' ) ; do
X=$( list_admins $i | grep "$1" )
if [ -n "$X" ]; then
echo $i "$X"
fi
done
ls -ld /home/"$1"
for i in $( list_lists | awk '{print $1}' ) ; do
X=$( list_members $i | grep "$1" )
if [ -n "$X" ]; then
echo $i "$X"
fi
done
Das ist gerade noch recht grob, aber hilft trotzdem, Zugaenge nicht zu uebersehen.
===== Plan III =====
Information fuer Neumitglieder.
Den Leuten gleich zu Anfang "alles" "reinzudruecken" tut nicht.
==== Skizze ====
* Im Laufe der Zeit nach dem Eintritt die Informationen in Haeppchen zukommen lassen.
* Dazu muss man wissen, wen es neues gibt und seit wann.
* Nach vorgegebenem Zeitplan Mails zusenden.
#!/bin/bash
/usr/local/bin/make_it_happen