From f4e3b8c897df6893cbc4a44cd93584625e52c9b2 Mon Sep 17 00:00:00 2001 From: xf0r3m Date: Sun, 6 Jul 2025 15:38:08 +0200 Subject: [PATCH] =?utf8?q?Narz=C4=99dzie=20immudex-crypt=20z=20obs=C5=82ug?= =?utf8?q?=C4=85=20LVM=20do=20test=C3=B3w.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- tools/sbin/immudex-crypt | 55 +++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/tools/sbin/immudex-crypt b/tools/sbin/immudex-crypt index 964558d..d951a5f 100755 --- a/tools/sbin/immudex-crypt +++ b/tools/sbin/immudex-crypt @@ -29,7 +29,7 @@ function list() { if [ "$mapperDeviceList" ]; then for dmDevice in $mapperDeviceList; do if cryptsetup status /dev/mapper/${dmDevice} > /dev/null 2>&1; then - mountPoint=$(df --output=source,target /dev/mapper/${dmDevice} | tail -n 1 | awk '{printf $2}'); + mountPoint=$(df --output=source,target /media/${USER}/${dmDevice} | tail -n 1 | awk '{printf $2}'); device=$(sudo cryptsetup status /dev/mapper/${dmDevice} | grep "device" | awk '{printf $2}'); if [ "$mountPoint" ] && [ "$mountPoint" != "/dev" ]; then echo -e "$device\t /dev/mapper/${dmDevice}\t$mountPoint"; @@ -78,18 +78,42 @@ function open() { lastField=$(ls -l /dev/mapper/immudex-crypt${index} | grep -o ' ' | wc -l); dmDevice=$(ls -al /dev/mapper/immudex-crypt${index} | cut -d " " -f ${lastField}- | cut -d "/" -f2); if ! $(sudo file -s /dev/${dmDevice} | grep -q 'ext4'); then - echo "Could not determine filesystem of unlocked device."; - echo -n "Format this device to ext4? (y/n): " - read format; - if [ "$format" = "y" ]; then - mkfs.ext4 /dev/mapper/immudex-crypt${index}; + if $(sudo file -s /dev/${dmDevice} | grep -q 'LVM'); then + lvm_member=0; + else + echo "Could not determine filesystem of unlocked device."; + echo -n "Format this device to ext4? (y/n): " + read format; + if [ "$format" = "y" ]; then + mkfs.ext4 /dev/mapper/immudex-crypt${index}; + else + echo "Refuse to mount."; + cryptsetup close immudex-crypt${index}; + exit 1; + fi + fi + fi + if [ "$lvm_member" ]; then + luksDeviceName="immudex-crypt${index}"; + vgName=$(sudo pvs | grep "$luksDeviceName" | awk '{printf $2}'); + extLVS=$(sudo blkid | grep "$(echo "$vgName" | sed 's,-,--,g')" | grep 'ext4' | sed 's/://g' | awk '{printf $1" "}'); + if [ $(echo $extLVS | wc -w) -gt 0 ]; then + if [ $(echo $extLVS | wc -w) -gt 1 ]; then + select extLV in $extLVS; do + break; + done + mount $extLV /media/${USER}/immudex-crypt${index}; + else + mount $extLVS /media/${USER}/immudex-crypt${index}; + fi else echo "Refuse to mount."; cryptsetup close immudex-crypt${index}; exit 1; - fi + fi + else + mount /dev/mapper/immudex-crypt${index} /media/${USER}/immudex-crypt${index}; fi - mount /dev/mapper/immudex-crypt${index} /media/${USER}/immudex-crypt${index}; if [ ! -e /ic${index} ]; then ln -s /media/${USER}/immudex-crypt${index} /ic${index}; fi @@ -109,11 +133,24 @@ function close() { cryptfsName=$1; fi if cryptsetup status /dev/mapper/${cryptfsName} > /dev/null 2>&1; then - mountPoint=$(df --output=source,target /dev/mapper/${cryptfsName} | tail -1 | awk '{printf $2}'); + mountPoint=$(df --output=source,target /media/${USER}/${cryptfsName} | tail -1 | awk '{printf $2}'); if [ "$mountPoint" ] && [ "$mountPoint" != "/dev" ]; then umount -R $mountPoint; + if $(sudo blkid | grep "$cryptfsName" | grep -q 'LVM2_member'); then + vgName=$(sudo pvs | grep "$cryptfsName" | awk '{printf $2}' | sed 's/-/--/g'); + swapFile=$(cat /proc/swaps | sed -n 2p | awk '{printf $1}'); + if [ "$swapFile" ]; then + if $(ls -l /dev/mapper | grep "$(basename $swapFile)" | grep -q "$vgName"); then + sudo swapoff $swapFile; + fi + fi + sudo vgchange -a n; + fi cryptsetup close ${cryptfsName}; else + if $(sudo blkid | grep "${cryptfsName}" | grep -q 'LVM2_member'); then + sudo vgchange -a n; + fi cryptsetup close ${cryptfsName}; fi else -- 2.39.5