diff options
-rwxr-xr-x | localrmaccount | 1 | ||||
-rwxr-xr-x | localrmstaleaccounts | 32 |
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 |