nutools/modav

114 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
source "$(dirname -- "$0")/lib/ulib/auto" || exit 1
function display_help() {
uecho "$scriptname: Monter un répertoire sur un hôte distant avec davfs
USAGE
$scriptname http[s]://host[/path] [mountpoint]
Par défaut, le répertoire distant est montée sur un répertoire avec le même nom
de base que l'hôte. Si le répertoire distant est déjà monté, il est démonté.
Les options -M et -U permettent de modifier le comportement par défaut.
OPTIONS
-M
Forcer le montage
-U
Forcer le démontage
-o OPTIONS
Ajouter les options spécifiées à la commande de montage
-u USERNAME
-p PASSWORD
-c USERNAME:PASSWORD
Si les credentials à utiliser ne sont pas configuré dans le fichier
/etc/davfs2/secrets, cette option permet de les spécifier. Si cette
option est utilisée, il est possible de rajouter
ask_auth 0
dans le fichier /etc/davfs2/davfs2.conf pour éviter le conflit qui se
produit quand des informations sont demandées interactivement. C'est le
cas par exemple si une connexion en https est faite et que la chaine de
certification n'est pas configurée. Pour mémoire, cela se fait avec
servercert myCAs.pem
dans le fichier /etc/davfs2/davfs2.conf
Bien entendu, il est préférable de configurer les credentials dans le
fichier /etc/davfs2/secrets avec la syntaxe
url username password
ou
mountpoint username password"
}
action=auto
options=
username=
password=
credentials=
parse_opts "${PRETTYOPTS[@]}" \
--help '$exit_with display_help' \
-M action=mount \
-U action=umount \
-o:,--options: options= \
-u:,--user: username= \
-p:,--password:,--passwd: password= \
-c:,--credentials: credentials= \
@ args -- "$@" && set -- "${args[@]}" || die "$args"
if ! progexists mount.davfs; then
[ -x /usr/sbin/mount.davfs ] || die "Ce script nécessite davfs2. Sur debian, vous pouvez l'installer avec la commande
sudo apt-get install davfs2"
fi
if is_root; then
sudo=
else
sudo=sudo
options="${options:+"$options,"}uid=$USER,gid=$USER"
fi
url="$1"
[ -n "$url" ] || die "Vous devez spécifier l'url à monter"
spliturl "$url" scheme cusername cpassword host port path
[ -n "$cusername" ] && username="$cusername"
[ -n "$cpassword" ] && password="$cpassword"
if [ -n "$credentials" ]; then
splitpair "$credentials" cusername cpassword
[ -n "$cusername" ] && username="$cusername"
[ -n "$cpassword" ] && password="$cpassword"
fi
[ -n "$username" ] && options="${options:+"$options,"}username=$username"
mountpoint="$2"
[ -n "$mountpoint" ] || mountpoint="$host"
[ -n "$mountpoint" ] || mountpoint=davfs
mountpoint="$(abspath "$mountpoint")"
if [ "$action" == "auto" ]; then
if mount | grep -q "$mountpoint"; then
action=umount
else
action=mount
fi
fi
if [ "$action" == "umount" ]; then
if $sudo umount "$mountpoint"; then
echo "Volume $mountpoint démonté avec succès"
rmdir "$mountpoint" 2>/dev/null
exit 0
fi
elif [ "$action" == "mount" ]; then
mkdir -p "$mountpoint" || die
cmd=($sudo mount -t davfs "$url" "$mountpoint" ${options:+-o "$options"})
if [ -n "$password" ]; then
echo "$password" | "${cmd[@]}"
else
"${cmd[@]}"
fi && {
echo "Volume $url monté avec succès sur $(ppath "$mountpoint")"
exit 0
}
fi
exit 1