summaryrefslogtreecommitdiff
path: root/mount-crypts
blob: 5bbdd52b559d47af59fca7bc5c2306c8ba409438 (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
68
#!/bin/bash

maxWait=60

sed 's/#.*$//' /etc/crypttab \
| grep -v '^ *$' \
| if [ "x$1" = 'x-u' ]; then
  tac
else
  cat
fi \
| while read -r name device key _; do

  while [ ${maxWait} -gt 0 ] && [ ! -b "${device}" ]; do
    sleep 1
    maxWait=$[${maxWait}-1]
  done

  # detects integrity correctly, too
  if cryptsetup status "${name}" 2>&1 >/dev/null; then
    is_mounted=true
  else
    is_mounted=false
  fi

  if [ "x$1" == 'x-u' ]; then
    if ! ${is_mounted}; then
      continue
    fi

    if [ -n "${key}" ]; then

      if ! /usr/sbin/cryptsetup luksClose "${name}"; then
        >&2 echo "FEHLER: cryptsetup luksClose $name"
        exit 1
      fi

    else

      if ! /usr/sbin/integritysetup close "${name}"; then
        >&2 echo "FEHLER: integritysetup close $name"
        exit 1
      fi

    fi

  else
    if ${is_mounted}; then
      continue
    fi

    if [ -n "${key}" ]; then

      if ! /usr/sbin/cryptsetup luksOpen "${device}" "${name}" --key-file "${key}"; then
        >&2 echo "FEHLER: cryptsetup luksOpen ${device} ${name} --key-file ${key}"
        exit 1
      fi

    else

      if ! /usr/sbin/integritysetup open "${device}" "${name}"; then
        >&2 echo "FEHLER: integritysetup open ${device} ${name}"
        exit 1
      fi

    fi
  fi
done