summaryrefslogtreecommitdiff
path: root/mount
blob: 3d8884adf01650414be17b0e758472b1343893b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash

set -e

base_dir="$(readlink -f "${0%/*}")"

if ! mountpoint -q "${base_dir}"; then
  echo 'Komisch, das Skript liegt nicht, wo es sein sollte.'
  exit 1
fi

if ! [ -d "${base_dir%1}2" ]; then
  echo 'Neben dem Verzeichnis des Skriptes sollte es noch ein zweites geben.'
  exit
fi

if mountpoint -q "${base_dir%1}2"; then
  mount=false
else
  mount=true
fi

device="$(
  mount | \
    grep "^\S\+1 on ${base_dir} " | \
    awk '{print $1}' | \
    sed 's|1$||'
)"

if ! [ -b "${device}" ] || \
  ! [ -b "${device}1" ] || \
  ! [ -b "${device}2" ]; then
  echo 'Komisch, das Skript befindet sich nicht auf der Partition, wo es sein sollte.'
  exit 1
fi

crypt_device="usb-disk-$(
  sha512sum "$0" | \
    head -c16
)"

tmp_dir="$(mktemp -d)"
trap 'rm -rf --one-file-system "${tmp_dir}"' EXIT

if ${mount}; then

  mkfifo "${tmp_dir}/fifo"

  gpg -o - -d "/mnt/usb/usbhd-sdg1/key_$(whoami).gpg" > \
    /dev/null

  gpg -o - -d "/mnt/usb/usbhd-sdg1/key_$(whoami).gpg" > \
    "${tmp_dir}/fifo" &

  su -c '
    cryptsetup luksOpen "'"${device}2"'" "'"${crypt_device}"'" --key-file "'"${tmp_dir}/fifo"'"
    mount "/dev/mapper/'"${crypt_device}"'" "'"${base_dir%1}2"'"
  '

else

  su -c '
    umount -l "'"${base_dir%1}2"'"
    cryptsetup luksClose "'"${crypt_device}"'"
  '

fi