#!/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