#!/bin/bash # Usage check if [ "$#" -ne 2 ]; then echo "Usage: $0 " exit 1 fi FOLDER_PATH="$SMB_DATA_FOLDER/$2/$1" USERNAME="$2" SMBCONF="/etc/samba/smb.conf" SHARE_CONFIG_DIR="/etc/samba/shares.d" # 1. Check if user exists if ! id "$USERNAME" &>/dev/null; then echo "Error: User '$USERNAME' does not exist." exit 2 fi # 2. Create folder if it doesn't exist, set ownership and permissions if [ ! -d "$FOLDER_PATH" ]; then echo "Creating directory: $FOLDER_PATH" mkdir -p "$FOLDER_PATH" chown "$USERNAME":"$USERNAME" "$FOLDER_PATH" chmod 770 "$FOLDER_PATH" else echo "Directory already exists: $FOLDER_PATH" fi # 3. Determine share name from folder name SHARE_NAME=$(basename "$FOLDER_PATH") # 4. Ensure shares.d directory exists if [ ! -d "$SHARE_CONFIG_DIR/$USERNAME" ]; then mkdir -p "$SHARE_CONFIG_DIR/$USERNAME" fi # Controllare che uerfolder esista # 5. Create Samba share config file SHARE_CONFIG_FILE="$SHARE_CONFIG_DIR/$USERNAME/$SHARE_NAME.conf" echo $SHARE_CONFIG_FILE if [ -f "$SHARE_CONFIG_FILE" ]; then echo "Warning: Share config already exists: $SHARE_CONFIG_FILE" else cat < "$SHARE_CONFIG_FILE" [$USERNAME-$SHARE_NAME] path = $FOLDER_PATH valid users = $USERNAME read only = no browseable = yes guest ok = no create mask = 0660 directory mask = 0770 EOF echo "Created Samba share config: $SHARE_CONFIG_FILE" fi # 6. Append include directive to main smb.conf if not already present INCLUDE_LINE="include = $SHARE_CONFIG_FILE" if ! grep -Fxq "$INCLUDE_LINE" "$SMBCONF"; then echo "Appending include directive to $SMBCONF" echo "\n# Include share definition for $SHARE_NAME" >> "$SMBCONF" echo "$INCLUDE_LINE" >> "$SMBCONF" else echo "Include directive already present in $SMBCONF" fi # 7. Restart Samba service to apply changes echo "Restarting Samba service..." systemctl restart smbd && echo "Samba restarted successfully." || echo "Failed to restart Samba. Check logs."