90 lines
2.6 KiB
Bash
Executable file
90 lines
2.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
PREREQ="cryptroot"
|
|
|
|
prereqs()
|
|
{
|
|
echo "$PREREQ"
|
|
}
|
|
|
|
case "$1" in
|
|
prereqs)
|
|
prereqs
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
. /usr/share/initramfs-tools/hook-functions
|
|
. /lib/cryptsetup/functions
|
|
|
|
if [ ! -x "$DESTDIR/lib/cryptsetup/scripts/decrypt_pkcs" ] || [ ! -f "$TABFILE" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
# Fetching local parameters
|
|
if [ -f /etc/default/decrypt_pkcs ] ; then
|
|
. /etc/default/decrypt_pkcs
|
|
fi
|
|
DECIPHER_COMMAND=${DECIPHER_COMMAND:-/usr/bin/pkcs15-crypt}
|
|
SMARTCARD_PRESENCE_COMMAND=${SMARTCARD_PRESENCE_COMMAND:-/usr/bin/opensc-tool}
|
|
|
|
DECIPHER_MULTI=${DECIPHER_MULTI:-0}
|
|
|
|
# Hooks for loading smartcard reading software into the initramfs
|
|
copy_keys() {
|
|
crypttab_parse_options
|
|
if [ "${CRYPTTAB_OPTION_keyscript-}" = "/lib/cryptsetup/scripts/decrypt_pkcs" ]; then
|
|
if [ -f "$CRYPTTAB_KEY" ]; then
|
|
[ -f "$DESTDIR$CRYPTTAB_KEY" ] || copy_file keyfile "$CRYPTTAB_KEY" || RV=$?
|
|
else
|
|
cryptsetup_message "ERROR: Target $CRYPTTAB_NAME has a non-existing key file $CRYPTTAB_KEY"
|
|
RV=1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
RV=0
|
|
#copy default key
|
|
crypttab_foreach_entry copy_keys
|
|
if [ $DECIPHER_MULTI = 1 ] ; then
|
|
#copy all keys
|
|
mkdir -p "$DESTDIR/${DECIPHER_MULTI_FOLDER}"
|
|
cp -t "$DESTDIR/${DECIPHER_MULTI_FOLDER}" "${DECIPHER_MULTI_FOLDER}/${DECIPHER_MULTI_PATTERN}"*
|
|
fi
|
|
|
|
# Install directories needed by smartcard reading daemon, command, and
|
|
# key-script
|
|
mkdir -p -- "$DESTDIR/etc/opensc" "$DESTDIR/usr/lib/pcsc" "$DESTDIR/var/run" "$DESTDIR/tmp" "$DESTDIR/etc/default"
|
|
|
|
# Install pcscd daemon, drivers, conf file
|
|
copy_exec /usr/sbin/pcscd
|
|
LIBC_DIR="$(ldd /usr/sbin/pcscd | sed -nr 's#.* => (/lib.*)/libc\.so\.[0-9.-]+ \(0x[[:xdigit:]]+\)$#\1#p')"
|
|
find -L "$LIBC_DIR" "/usr$LIBC_DIR" -maxdepth 1 \( -name 'libgcc_s.*' -o -name 'libusb-*.so*' -o -name 'libpcsclite.so*' \) -type f | while read so; do
|
|
copy_exec "$so"
|
|
done
|
|
|
|
cp -rt "$DESTDIR/usr/lib" /usr/lib/pcsc
|
|
cp -t "$DESTDIR/etc" /etc/reader.conf || true
|
|
cp -t "$DESTDIR/etc" /etc/libccid_Info.plist
|
|
|
|
# Install opensc commands and conf file
|
|
copy_exec /usr/bin/opensc-tool
|
|
copy_exec $SMARTCARD_PRESENCE_COMMAND
|
|
copy_exec $DECIPHER_COMMAND
|
|
cp -t "$DESTDIR/etc/opensc" /etc/opensc/opensc.conf
|
|
cp -t "$DESTDIR/etc/default" /etc/default/decrypt_pkcs
|
|
|
|
# If Multi
|
|
if [ $DECIPHER_MULTI = 1 ] ; then
|
|
mkdir -p $DESTDIR/$(dirname "${DECIPHER_MULTI_SCRIPT}")
|
|
cp -t $DESTDIR/$(dirname "${DECIPHER_MULTI_SCRIPT}") "${DECIPHER_MULTI_SCRIPT}"
|
|
chmod +x $DESTDIR/"${DECIPHER_MULTI_SCRIPT}"
|
|
for bin in $DECIPHER_MULTI_SCRIPT_DEPENDS ; do
|
|
copy_exec $bin
|
|
done
|
|
fi
|
|
|
|
|
|
exit $RV
|