127 lines
3.1 KiB
Bash
Executable file
127 lines
3.1 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Manage samba shares
|
|
# - after mounting: add the new samba share
|
|
# - before umounting: disable and remove the samba share
|
|
#
|
|
# The following line _must_ be added to your /etc/samba/smb.conf:
|
|
# include = /var/cache/cryptobox-server/settings/misc/samba-include.conf
|
|
# and you should create this file and chown it to the cryptobox user:
|
|
# touch /var/cache/cryptobox-server/settings/misc/samba-include.conf
|
|
#
|
|
#
|
|
# Params: $event $device $volume_name $volume_type $mount_dir
|
|
#
|
|
# event: premount | postmount | preumount | postumount
|
|
# device: name of the device
|
|
# volume_name: name of the volume
|
|
# volume_type: plain | luks
|
|
# mount_dir: mount directory
|
|
#
|
|
|
|
set -eu
|
|
|
|
# --------------=-=-=- some settings -=-=-=----------------
|
|
# adapt this part of the file to your needs
|
|
|
|
SAMBA_CONTROL=smbcontrol
|
|
SAMBA_CONF_DIR=/var/cache/cryptobox-server/settings/misc/samba.conf.d
|
|
MAIN_SAMBA_CONF_FILE=/var/cache/cryptobox-server/settings/misc/samba-include.conf
|
|
|
|
# this smb.conf snippet will get used for every published share
|
|
# _VOLUME_NAME and _SHARE_DIR_ are replaced by their actual values
|
|
SAMBA_SHARE_TEMPLATE=$(cat - <<-"EOF"
|
|
[_VOLUME_NAME_]
|
|
comment = CryptoBox share
|
|
path = _SHARE_DIR_
|
|
read only = no
|
|
guest ok = yes
|
|
EOF
|
|
)
|
|
|
|
# -----=-=-=- check environment and parameters -=-=-=------
|
|
|
|
# check if samba is installed
|
|
if which "$SAMBA_CONTROL"
|
|
then true
|
|
else echo "samba not installed ('$SAMBA_CONTROL' not found)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# create include-file directory
|
|
mkdir -p "$SAMBA_CONF_DIR"
|
|
|
|
# create the main include file
|
|
touch "$MAIN_SAMBA_CONF_FILE"
|
|
|
|
# check event argument
|
|
if test "$#" -eq 0
|
|
then echo "Syntax: $(basename $0) EVENT [EVENT_INFORMATION]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
event=$1
|
|
|
|
# ------------=-=-=- some functions -=-=-=-----------------
|
|
|
|
update_include_conf_file()
|
|
{
|
|
( echo "# this file was automatically generated by the CryptoBox"
|
|
echo "# DO NOT EDIT - all changes will get lost!"
|
|
find "$SAMBA_CONF_DIR" -type f -name "*.conf" | while read fname
|
|
do mdir=$(grep "path.*=" "$fname" | cut -f 2 -d "=" | sed 's/^[ \t]*//')
|
|
# check if the mount directory still exists
|
|
if test -d "$mdir"
|
|
then echo "include = $fname"
|
|
else rm "$fname"
|
|
fi
|
|
done ) >"$MAIN_SAMBA_CONF_FILE"
|
|
}
|
|
|
|
send_reload_command()
|
|
{
|
|
# reload config files
|
|
"$SAMBA_CONTROL" smbd reload-config
|
|
}
|
|
|
|
empty_conf_dir()
|
|
{
|
|
find "$SAMBA_CONF_DIR" -type f -name "*.conf" -print0 | xargs -0 rm
|
|
}
|
|
|
|
send_close_share_command()
|
|
{
|
|
# close all connections and deny further requests
|
|
"$SAMBA_CONTROL" smbd close-share "$1"
|
|
}
|
|
|
|
# -----------------=-=-=- main -=-=-=----------------------
|
|
|
|
case "$event" in
|
|
premount|postumount )
|
|
;;
|
|
postmount )
|
|
vol_name=$3
|
|
mount_dir=$5
|
|
echo "$SAMBA_SHARE_TEMPLATE" | sed "s#_SHARE_DIR_#$mount_dir#g; s#_VOLUME_NAME_#$vol_name#g" >"$SAMBA_CONF_DIR/${vol_name}.conf"
|
|
update_include_conf_file
|
|
send_reload_command
|
|
;;
|
|
preumount )
|
|
vol_name=$3
|
|
send_close_share_command "$vol_name"
|
|
rm "$SAMBA_CONF_DIR/${vol_name}.conf" || true
|
|
update_include_conf_file
|
|
send_reload_command
|
|
;;
|
|
shutdown|bootup )
|
|
empty_conf_dir
|
|
;;
|
|
* )
|
|
# ignore all unsupported events
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
exit 0
|
|
|