smb_utilities/functions/remove_share.sh
2025-05-25 16:14:55 +00:00

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