58 lines
No EOL
1.9 KiB
Bash
58 lines
No EOL
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# https://discord.com/channels/689189992417067052/1114882414670516294/1142858186085367919
|
|
# Used to make old home and old mail available to users who owned them
|
|
|
|
|
|
# Function to recursively change owner and permissions
|
|
change_owner_and_permissions() {
|
|
local dir="$1"
|
|
local username="$2"
|
|
|
|
# Change owner of the directory and its contents
|
|
chown -R "$username" "$dir"
|
|
}
|
|
|
|
iter_dirs(){
|
|
local root="$1"
|
|
|
|
# Loop through each directory in /home
|
|
for dir in $root/*; do
|
|
if [ -d "$dir" ]; then
|
|
# Extract the directory name without the leading path
|
|
username=$(basename "$dir")
|
|
|
|
# handle caps
|
|
username_lower=$(echo "$username" | tr '[:upper:]' '[:lower:]')
|
|
if [ "$username" != "$username_lower" ]; then
|
|
mv "$root/$username" "$root/$username_lower"
|
|
echo "Changed $username to $username_lower"
|
|
dir="$root/$username_lower"
|
|
username=$username_lower
|
|
fi
|
|
|
|
# names must atart with either underscore or letter
|
|
if [[ $username =~ ^[0-9] ]]; then
|
|
mv "$root/$username" "$root/_$username"
|
|
echo "Changed $username to _$username"
|
|
dir="$root/_$username"
|
|
username="_$username"
|
|
fi
|
|
|
|
# Set permissions to read-only for the owner and not readable by others
|
|
# folders have to be executable to be able to read their contents
|
|
chmod -R u+rX "$dir"
|
|
|
|
# Check if the user exists before changing ownership and permissions
|
|
if id "$username" &>/dev/null; then
|
|
change_owner_and_permissions "$dir" "$username"
|
|
echo "Changed owner and permissions of $dir to $username"
|
|
# else
|
|
# echo "User $username not found. Leaving $dir owned by root."
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
iter_dirs /skynet_old/home
|
|
iter_dirs /skynet_old/mail |