115 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			115 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/ulib" || exit 1
 | 
						|
urequire DEFAULTS
 | 
						|
 | 
						|
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"
 | 
						|
}
 | 
						|
 | 
						|
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
 | 
						|
 | 
						|
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
 |