Add zone-cleanup.sh
This commit is contained in:
commit
c6cf2602d3
1 changed files with 96 additions and 0 deletions
96
zone-cleanup.sh
Normal file
96
zone-cleanup.sh
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Script to find DNS zones not linked to a user
|
||||
# and optionally delete them.
|
||||
|
||||
echo "Checking for DNS zones without a linked user..."
|
||||
echo "======================================================"
|
||||
|
||||
# --- Preparation ---
|
||||
|
||||
# Check if required files/directories exist
|
||||
if [[ ! -d "/var/named" ]]; then
|
||||
echo "Error: Directory /var/named not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "/etc/userdomains" ]]; then
|
||||
echo "Error: File /etc/userdomains not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create temporary files for comparison
|
||||
ZONES_FILE=$(mktemp)
|
||||
DOMAINS_FILE=$(mktemp)
|
||||
ORPHANED_ZONES_FILE=$(mktemp)
|
||||
|
||||
# Clean up temporary files on exit (even on error)
|
||||
trap 'rm -f "$ZONES_FILE" "$DOMAINS_FILE" "$ORPHANED_ZONES_FILE"' EXIT
|
||||
|
||||
# --- Analysis ---
|
||||
|
||||
# 1. Create a list of all DNS zones
|
||||
for db_file in /var/named/*.db; do
|
||||
if [[ -f "$db_file" ]]; then
|
||||
basename "$db_file" .db
|
||||
fi
|
||||
done | sort > "$ZONES_FILE"
|
||||
|
||||
# 2. Create a list of all domains linked to users
|
||||
cut -d: -f1 /etc/userdomains | sort > "$DOMAINS_FILE"
|
||||
|
||||
# 3. Compare the lists and save the "orphaned" zones
|
||||
comm -23 "$ZONES_FILE" "$DOMAINS_FILE" > "$ORPHANED_ZONES_FILE"
|
||||
|
||||
# --- Action & Confirmation ---
|
||||
|
||||
# Check if the file with orphaned zones is empty or not
|
||||
if [[ ! -s "$ORPHANED_ZONES_FILE" ]]; then
|
||||
echo
|
||||
echo "Good news! No orphaned DNS zones found."
|
||||
else
|
||||
ZONE_COUNT=$(wc -l < "$ORPHANED_ZONES_FILE")
|
||||
echo
|
||||
echo "Found $ZONE_COUNT zone(s) that are NOT linked to a user:"
|
||||
echo "---------------------------------------------------------"
|
||||
# Display the list of zones that can be deleted
|
||||
cat "$ORPHANED_ZONES_FILE"
|
||||
echo "---------------------------------------------------------"
|
||||
echo
|
||||
|
||||
# --- FIRST CONFIRMATION ---
|
||||
read -p "Do you want to proceed with deleting these $ZONE_COUNT zone(s)? (yes/no): " confirm1
|
||||
|
||||
if [[ "$confirm1" == "yes" ]]; then
|
||||
echo
|
||||
echo "WARNING: This action is permanent and cannot be undone."
|
||||
|
||||
# --- SECOND CONFIRMATION ---
|
||||
read -p "Are you ABSOLUTELY sure you want to delete the zones shown? (yes/no): " confirm2
|
||||
|
||||
if [[ "$confirm2" == "yes" ]]; then
|
||||
echo
|
||||
echo "Confirmation received. The following zones will now be deleted:"
|
||||
|
||||
# Loop through the file and delete each zone
|
||||
while read -r domain; do
|
||||
# Make sure the line is not empty
|
||||
if [[ -n "$domain" ]]; then
|
||||
echo " -> Deleting DNS zone for: $domain"
|
||||
# Execute the WHM API command
|
||||
whmapi1 killdns domain="$domain"
|
||||
fi
|
||||
done < "$ORPHANED_ZONES_FILE"
|
||||
|
||||
echo
|
||||
echo "All selected zones have been processed."
|
||||
else
|
||||
echo "Second confirmation not received. Action canceled."
|
||||
fi
|
||||
else
|
||||
echo "First confirmation not received. Action canceled."
|
||||
fi
|
||||
fi
|
||||
|
||||
echo
|
||||
echo "Script finished."
|
||||
Loading…
Add table
Add a link
Reference in a new issue