72 lines
2.0 KiB
Bash
Executable File
72 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Usage check
|
|
if [ "$#" -ne 2 ]; then
|
|
echo "Usage: $0 <folder_name> <username>"
|
|
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 <<EOF > "$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."
|