summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@homebase.dk>2012-11-29 14:17:57 +0100
committerroot <root@homebase.dk>2012-11-29 14:17:57 +0100
commita6b58de72e1de658b0919434855fb92a7000c380 (patch)
tree332cbaf1559a3843a6904505b61f126d202ba7ea
parentdf39d96771d7347941a99d718169232c1235a504 (diff)
Add new script localrmstaleaccounts.
-rwxr-xr-xlocalrmstaleaccounts54
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