diff options
author | root <root@homebase.dk> | 2012-11-29 14:17:57 +0100 |
---|---|---|
committer | root <root@homebase.dk> | 2012-11-29 14:17:57 +0100 |
commit | a6b58de72e1de658b0919434855fb92a7000c380 (patch) | |
tree | 332cbaf1559a3843a6904505b61f126d202ba7ea | |
parent | df39d96771d7347941a99d718169232c1235a504 (diff) |
Add new script localrmstaleaccounts.
-rwxr-xr-x | localrmstaleaccounts | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/localrmstaleaccounts b/localrmstaleaccounts new file mode 100755 index 0000000..17c0f6e --- /dev/null +++ b/localrmstaleaccounts @@ -0,0 +1,54 @@ +#!/bin/sh + +set -e + +exit1() ( + echo >&2 "ERROR: $1" + exit 1 +) + +warn() ( + echo >&2 "WARNING: $1" +) + +backupdeluser() { + set -e + u="$1"; shift + p=/var/backups/users-dropped/ + getent passwd "$u" > "$p/$u.getent" + getent group "$u" >> "$p/$u.getent" + deluser --remove-home --backup --backup-to "$p" "$u" +} + +maybestaleuser() { + warn "Skipping possibly non-stale account for user $user" +} + +untouchedinbox() { + set -e + h="$1"; shift + [ -d "$home/Maildir" ] + find "$home/Maildir/new" -maxdepth 0 -type d -mtime +365 | grep -q . + find "$home/Maildir/cur" -maxdepth 0 -type d -mtime +365 | grep -q . +} + +untouchednewmail() { + set -e + h="$1"; shift + [ -d "$home/Maildir" ] + find "$home/Maildir/new" -type f -mtime +365 | grep -q +} + +for user in $@; do + home=$(getent passwd "$user" | cut -d: -f6) + [ -n "$home" ] || exit1 "Failed resolving homedir for user $user" + if [ -e "$home/.forward" ]; then + maybestaleuser "$user" + continue + fi + if untouchedinbox "$home" || untouchednewmail "$home"; then + backupdeluser "$user" + continue + fi + maybestaleuser "$user" +done |