Adding a white_listed_devices parameter to find_cow_device and find_files.
authorTails developers <amnesia@boum.org>
Mon, 1 Nov 2010 16:35:45 +0000 (17:35 +0100)
committerTails developers <amnesia@boum.org>
Wed, 7 Sep 2011 12:53:41 +0000 (14:53 +0200)
This will be needed for the upcoming persistent-media={removable,removable-usb}
boot option.

scripts/live
scripts/live-helpers

index 82f5413..de82082 100755 (executable)
@@ -1033,16 +1033,17 @@ find_snap ()
        # Look for ${snap_label}.* in block devices
        snap_label="${1}"
        black_listed_devices="${2}"
+       white_listed_devices="${3}"
 
        if [ "${PERSISTENT}" != "nofiles" ]
        then
                # search for image files
-               snapdata=$(find_files "${PERSISTENT_PATH}${snap_label}.squashfs ${PERSISTENT_PATH}${snap_label}.cpio.gz ${PERSISTENT_PATH}${snap_label}.ext2 ${PERSISTENT_PATH}${snap_label}.ext3 ${PERSISTENT_PATH}${snap_label}.ext4 ${PERSISTENT_PATH}${snap_label}.jffs2" "${black_listed_devices}")
+               snapdata=$(find_files "${PERSISTENT_PATH}${snap_label}.squashfs ${PERSISTENT_PATH}${snap_label}.cpio.gz ${PERSISTENT_PATH}${snap_label}.ext2 ${PERSISTENT_PATH}${snap_label}.ext3 ${PERSISTENT_PATH}${snap_label}.ext4 ${PERSISTENT_PATH}${snap_label}.jffs2" "${black_listed_devices}" "${white_listed_devices}")
        fi
 
        if [ -z "${snapdata}" ]
        then
-               snapdata=$(find_cow_device "${snap_label}" "${black_listed_devices}")
+               snapdata=$(find_cow_device "${snap_label}" "${black_listed_devices}" "${white_listed_devices}")
        fi
        echo "${snapdata}"
 }
@@ -1351,7 +1352,7 @@ setup_unionfs ()
                fi
 
                # search for label and files (this could be hugely optimized)
-               cowprobe=$(find_cow_device "${root_persistence}")
+               cowprobe=$(find_cow_device "${root_persistence}" "${blacklistdev}" "${whitelistdev}")
                if [ -b "${cowprobe}" ]
                then
                        # Blacklist /cow device, to avoid inconsistent setups for overlapping snapshots
@@ -1363,17 +1364,17 @@ setup_unionfs ()
                        export PERSISTENCE_IS_ON
                fi
                # homecow just mount something on /home, this should be generalized some way
-               homecow=$(find_cow_device "${home_persistence}" "${blacklistdev}")
+               homecow=$(find_cow_device "${home_persistence}" "${blacklistdev}" "${whitelistdev}")
                if [ -b "${homecow}" ]
                then
                        PERSISTENCE_IS_ON="1"
                        export PERSISTENCE_IS_ON
                fi
-               root_snapdata=$(find_snap "${root_snapshot_label}" "${blacklistdev}")
+               root_snapdata=$(find_snap "${root_snapshot_label}" "${blacklistdev}" "${whitelistdev}")
                # This second type should be removed when snapshot will get smarter,
                # hence when "/etc/live-snapshot*list" will be supported also by
                # ext2|ext3|ext4|jffs2 snapshot types.
-               home_snapdata=$(find_snap "${home_snapshot_label}" "${blacklistdev}")
+               home_snapdata=$(find_snap "${home_snapshot_label}" "${blacklistdev}" "${whitelistdev}")
 
                if [ -b "${cowprobe}" ]
                then
index 06bd186..7f8649f 100644 (file)
@@ -283,10 +283,13 @@ find_cow_device ()
 {
        # Returns a device containing a partition labeled "${pers_label}" or containing a file named the same way
        #  in the latter case the partition containing the file is left mounted
-       #  if is not in black_listed_devices
+       #  if is not in black_listed_devices.
+       #  Additionally, if the white_listed_devices list is non-empty, the
+       #  parent block device of the returned device must be part of this list.
        pers_label="${1}"
        cow_backing="/${pers_label}-backing"
        black_listed_devices="${2}"
+       white_listed_devices="${3}"
 
        if [ -z "${PERSISTENT_PATH}" ]
        then
@@ -305,6 +308,15 @@ find_cow_device ()
                        break
                fi
 
+               if [ -n "${white_listed_devices}" ]
+               then
+                       if echo "${white_listed_devices}" | grep -v -q -w "${fulldevname}"
+                       then
+                               # skip this device entirely
+                               break
+                       fi
+               fi
+
                for dev in $(subdevices "${sysblock}")
                do
                        devname=$(sys2dev "${dev}")
@@ -383,11 +395,15 @@ find_cow_device ()
 find_files ()
 {
        # return the a string composed by device name, mountpoint an the first of ${filenames} found on a supported partition
+       #  if is not in black_listed_devices.
+       #  Additionally, if the white_listed_devices list is non-empty, the
+       #  parent block device of the returned device must be part of this list.
        # FIXME: merge with above function
 
        filenames="${1}"
        snap_backing="/snap-backing"
        black_listed_devices="${2}"
+       white_listed_devices="${3}"
 
        for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram | grep -v fd)
        do
@@ -399,6 +415,15 @@ find_files ()
                        break
                fi
 
+               if [ -n "${white_listed_devices}" ]
+               then
+                       if echo "${white_listed_devices}" | grep -v -q -w "${fulldevname}"
+                       then
+                               # skip this device entirely
+                               break
+                       fi
+               fi
+
                for dev in $(subdevices "${sysblock}")
                do
                        devname=$(sys2dev "${dev}")