116 lines
3.5 KiB
Plaintext
116 lines
3.5 KiB
Plaintext
|
#!/bin/bash
|
||
|
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||
|
|
||
|
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"
|
||
|
}
|
||
|
|
||
|
source "$(dirname "$0")/ulib/ulib" &&
|
||
|
urequire DEFAULTS ||
|
||
|
exit 1
|
||
|
|
||
|
if ! progexists mount.davfs; then
|
||
|
[ -x /usr/sbin/mount.davfs ] || die "Ce script nécessite davfs2"
|
||
|
fi
|
||
|
|
||
|
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 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
|