diff options
| author | Elijah Saxon <elijah@riseup.net> | 2005-01-08 00:05:28 +0000 | 
|---|---|---|
| committer | Elijah Saxon <elijah@riseup.net> | 2005-01-08 00:05:28 +0000 | 
| commit | 6dc566098abcf32b3bdac4ea820561f7668c7305 (patch) | |
| tree | c73f35b7d9ab198e931fba1ba2ff5d298910832f /handlers/maildir | |
| parent | f329fc8f428190dd79b6aa3d255284f54366bf56 (diff) | |
| download | backupninja-6dc566098abcf32b3bdac4ea820561f7668c7305.tar.gz backupninja-6dc566098abcf32b3bdac4ea820561f7668c7305.tar.bz2 | |
Diffstat (limited to 'handlers/maildir')
| -rw-r--r-- | handlers/maildir | 127 | 
1 files changed, 127 insertions, 0 deletions
| diff --git a/handlers/maildir b/handlers/maildir new file mode 100644 index 0000000..c07cd7e --- /dev/null +++ b/handlers/maildir @@ -0,0 +1,127 @@ +#!/usr/bin/php4 -q +<?php + +############################################################### +# +#  This handler slowly creates a backup of each user's maildir +#  to a remote server. It is designed to be run with low overhead +#  in terms of cpu and bandwidth so it runs pretty slow. +# +############################################################## + +getconf rotate yes +getconf remove yes + +getconf loadlimit 5 +getconf speedlimit 0 +getconf keepdaily 7 +getconf keepweekly 4 + +getconf srcdir /var/maildir +getconf destdir +getconf desthost +getconf destport 22 +getconf destuser + +# used for testing +getconf letter +getconf user + +[ -d $srcdir ] || fatal "source directory $srcdir doesn't exist" + +[ ! $test ] || testflags="--dry-run -v" +rsyncflags="$testflags -e 'ssh -p $destport'" +flags_mail="$rsyncflags --archive --ignore-existing --delete --numeric-ids --size-only --bwlimit=$speedlimit" +flags_folders="$rsyncflags --archive --delete --numeric-ids" +excludes='--exclude ".Trash/*" --exclude ".Mistakes/*" --exclude ".Spam/*"' + +# see if we can login +debug "ssh -o PasswordAuthentication=no $desthost -l $destuser 'echo -n 1'" +if [ ! $test ]; then +	result=`ssh -o PasswordAuthentication=no $desthost -l $destuser 'echo -n 1' 2>&1` +	if [ "$result" != "1" ]; then +		fatal "Can't connect to $desthost as $destuser." +	fi +fi + +################################################################## +### FUNCTIONS + +function do_letters() { +	for i in a b c d e f g h i j k l m n o p q r s t u v w x y z; do +		do_maildirs "$srcdir/$i" +	done +} + +function do_maildirs() { +	local dir=$1 +	[ -d $dir ] || fatal "directory $dir not found." +	for userdir in `ls -1 $dir`; do +		do_userdir $userdir +	done +} + +function do_user() { +	local user=$1 +	local letter=${user:0:1} +	local dir="$srcdir/$letter/$user" +	[ -d $dir ] || fatal "maildir $dir not found". + +	while 1; do +		load=`uptime | sed 's/^.*load average: \\([^,]*\\).*$/\\1/'` +		if [ $load -lt $loadlimit ]; then +			info "load $load, sleeping..." +			sleep 600 +		else +			break +		fi +	done +	 +  	cmd="rsync $maildirrsyncflags $excludes '$dir' '$destuser@$desthost:$destdir/maildir/$letter'" +  	debug $cmd +	# ret=`rsync $maildirrsyncflags $excludes '$dir' '$destuser@$desthost:$destdir/maildir/$letter' 2>&1` +} + +# remove any maildirs from backup which might have been deleted +# and add new ones which have just been created. + +function do_remove() { +	local tmp1=/tmp/maildirtmpfile$$ +	local tmp2=/tmp/maildirtmpfile$$ +	 +	for i in a b c d e f g h i j k l m n o p q r s t u v w x y z; do +		ls -1 "$srcdir/$i" | sort > $tmp1 +		ssh -p $destport $desthost 'ls -1 '$destdir/maildir/$i' | sort > $tmp2 +		for deluser in `join -v 2 $tmp1 $tmp2`; do +			cmd="ssh -p $destport $desthost rm -vr '$destdir/maildir/$i/$deluser/'" +			debug $cmd +		done +	done +	rm $tmp1 +	rm $tmp2	 +} + +### +################################################################## + +### ROTATE BACKUPS ### + +if [ "$remove" == "yes" ]; then + +fi + +### REMOVE OLD MAILDIRS ### + +if [ "$rotate" == "yes" ]; then + +fi + +### ROTATE BACKUPS ### + +if [ "$letter" != "" ]; then + +fi + +if [ "$user" != "" ]; then + +fi | 
