summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlocalrmaccount1
-rwxr-xr-xlocalrmstaleaccounts32
2 files changed, 22 insertions, 11 deletions
diff --git a/localrmaccount b/localrmaccount
index 8424acd..ac0abf8 100755
--- a/localrmaccount
+++ b/localrmaccount
@@ -6,4 +6,5 @@ u="$1"; shift
p=/var/backups/users-dropped/
getent passwd "$u" > "$p/$u.getent"
getent group "$u" >> "$p/$u.getent"
+[ -z "$1" ] || echo "$1" >> "$p/$u.getent"
deluser --remove-home --backup --backup-to "$p" "$u"
diff --git a/localrmstaleaccounts b/localrmstaleaccounts
index dbb92f0..88efd28 100755
--- a/localrmstaleaccounts
+++ b/localrmstaleaccounts
@@ -1,4 +1,12 @@
#!/bin/sh
+#
+# /usr/local/sbin/localrmstaleaccounts
+# Copyright 2012, 2014, 2019 Jonas Smedegaard <dr@jones.dk>
+#
+# Remove unused user accounts
+#
+# TODO: collect all indicators before making a verdict
+# TODO: ask before actual removal, listing reasons, unless --force
set -e
@@ -47,10 +55,11 @@ info() {
}
remove_account() {
- [ -n "$DRY_RUN" ] || localrmaccount "$1"
+ warn "Removing user $1: $2"
+ [ -n "$DRY_RUN" ] || localrmaccount "$1" "$2"
}
-for user in $@; do
+for user in "$@"; do
home=$(getent passwd "$user" | cut -d: -f6)
if [ -z "$home" ]; then
warn "Skipping user $user: failed resolving homedir"
@@ -58,15 +67,16 @@ for user in $@; do
warn "Skipping user $user: Email gets forwarded"
elif [ ! -d "$home/Maildir" ]; then
warn "Skipping user $user: Missing Maildir"
- elif find "$home/Maildir/new" -maxdepth 0 -type d -mtime +365 | grep -q .; then
- info "Removing user $user: Maildir INBOX/new untouched for a year"
- remove_account "$user"
- elif find "$home/Maildir/cur" -maxdepth 0 -type d -mtime +365 | grep -q .; then
- info "Removing user $user: Maildir INBOX/cur untouched for a year"
- remove_account "$user"
- elif find "$home/Maildir/new" -type f -mtime +365 | grep -q .; then
- info "Removing user $user: new mail in INBOX untouched for a year"
- remove_account "$user"
+ elif [ -d "/var/www/vhosts/$user" ]; then
+ warn "Skipping user $user: Web hosting at /var/www/vhosts"
+ elif grep -q "$home" /etc/apache2/sites-enabled/*.conf; then
+ warn "Skipping user $user: Web hosting below /etc/apache2/sites-enabled"
+ elif postalias -s /etc/aliases | grep -qP ':\s+'"$user"'$'; then
+ warn "Skipping user $user: target in /etc/aliases"
+ elif find -- /var/lib/radicale/collections/collection-root -maxdepth 1 -type d -name "$user" -not -empty | grep -q '^'; then
+ warn "Skipping user $user: Uses Radicale"
+ elif doveadm search -u "$user" MAILBOX INBOX SAVEDBEFORE 52weeks NEW | grep -q . && ! doveadm search -u "$user" MAILBOX INBOX SAVEDSINCE 52weeks \( NOT NEW \) | grep -q .; then
+ remove_account "$user" "new mail in INBOX untouched for a year, and none touched more recently"
else
info "Skipping user $user"
fi