67 lines
1.9 KiB
Bash
Executable File
67 lines
1.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Script to remove a Samba share, archive its data, and clean up configs
|
|
# Usage: ./remove_samba_share.sh <share_name>
|
|
|
|
set -euo pipefail
|
|
|
|
if [ "$#" -ne 2 ]; then
|
|
echo "Usage: $0 <share_name> <username>"
|
|
exit 1
|
|
fi
|
|
|
|
SHARE_NAME="$1"
|
|
USERNAME="$2"
|
|
SHARE_CONFIG_DIR="/etc/samba/shares.d"
|
|
SMBCONF="/etc/samba/smb.conf"
|
|
SHARE_CONFIG_FILE="$SHARE_CONFIG_DIR/$USERNAME/$SHARE_NAME.conf"
|
|
TRASH_BASE="$SMB_DATA_FOLDER/trash"
|
|
|
|
# 1. Read the .conf file if it exists
|
|
if [ ! -f "$SHARE_CONFIG_FILE" ]; then
|
|
echo "Error: Share config file does not exist: $SHARE_CONFIG_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Found share config: $SHARE_CONFIG_FILE"
|
|
|
|
# Extract path and username
|
|
SHARE_PATH=$(grep -i '^[[:space:]]*path[[:space:]]*=' "$SHARE_CONFIG_FILE" | cut -d'=' -f2- | xargs)
|
|
VALID_USER=$(grep -i '^[[:space:]]*valid users[[:space:]]*=' "$SHARE_CONFIG_FILE" | cut -d'=' -f2- | xargs)
|
|
|
|
# Validate extracted data
|
|
if [ -z "$SHARE_PATH" ] || [ -z "$VALID_USER" ]; then
|
|
echo "Error: Could not extract share path or user from config."
|
|
exit 1
|
|
fi
|
|
|
|
# Move share folder if it exists
|
|
if [ -d "$SHARE_PATH" ]; then
|
|
USER_TRASH_DIR="$TRASH_BASE/$VALID_USER"
|
|
DEST="$USER_TRASH_DIR/$(basename "$SHARE_PATH")"
|
|
|
|
echo "Moving share folder '$SHARE_PATH' to '$DEST'"
|
|
mkdir -p "$USER_TRASH_DIR"
|
|
mv "$SHARE_PATH" "$DEST"
|
|
else
|
|
echo "Note: Share path '$SHARE_PATH' does not exist or is not a directory — skipping move."
|
|
fi
|
|
|
|
# Remove the config file
|
|
echo "Removing share config file: $SHARE_CONFIG_FILE"
|
|
rm -f "$SHARE_CONFIG_FILE"
|
|
|
|
# Remove include line and related comment from smb.conf
|
|
INCLUDE_LINE="include = $SHARE_CONFIG_FILE"
|
|
sed -i "/# Include share definition for $SHARE_NAME/d" "$SMBCONF"
|
|
sed -i "\|$INCLUDE_LINE|d" "$SMBCONF"
|
|
|
|
# Restart Samba
|
|
echo "Restarting Samba service..."
|
|
if systemctl restart smbd; then
|
|
echo "Samba restarted successfully."
|
|
else
|
|
echo "Error restarting Samba. Please check logs."
|
|
exit 2
|
|
fi
|