lars
3500b67a40
refresh link for logs feature change default setting of UseConfigPartition to "0" README file rewritten README.samba added README.davfs added README.Debian rewritten event scripts for samba and apach2_dav improved do not redirect to "disks overview" after successful plugin execution (e.g. date, ...) unclean web dataset fixed removed some non-translateable strings from po and pot files automatically update the cryptobox version according to the debian package version number
129 lines
3.1 KiB
Bash
Executable file
129 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/samba-include.conf
|
|
# and you should create this file and chown it to the cryptobox user:
|
|
# touch /var/cache/cryptobox-server/samba-include.conf
|
|
#
|
|
#
|
|
# Params: $event $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/samba.conf.d
|
|
MAIN_SAMBA_CONF_FILE=/var/cache/cryptobox-server/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
|
|
# TODO: improve the later parsing of _SHARE_DIR_ in update_include_conf_file
|
|
# for now it depends on non existing whitespaces around the dirname
|
|
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=$(cat "$fname" | grep "path.*=" | cut -f 2 -d "=")
|
|
# 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
|
|
|