Skip to content

Commit

Permalink
Merge pull request #1006 from joseivanlopez/improve_encryption_names
Browse files Browse the repository at this point in the history
Improve encryption names
  • Loading branch information
joseivanlopez committed Dec 12, 2019
2 parents 9120202 + 96ab5ad commit 2fc1461
Show file tree
Hide file tree
Showing 21 changed files with 182 additions and 145 deletions.
7 changes: 7 additions & 0 deletions package/yast2-storage-ng.changes
@@ -1,3 +1,10 @@
-------------------------------------------------------------------
Tue Dec 10 15:32:05 UTC 2019 - José Iván López González <jlopez@suse.com>

- Generate encryption names according to the mount point of the
encryption device (bsc#1125774).
- 4.2.61

-------------------------------------------------------------------
Wed Dec 4 12:17:37 UTC 2019 - José Iván López González <jlopez@suse.com>

Expand Down
2 changes: 1 addition & 1 deletion package/yast2-storage-ng.spec
Expand Up @@ -16,7 +16,7 @@
#

Name: yast2-storage-ng
Version: 4.2.60
Version: 4.2.61
Release: 0
Summary: YaST2 - Storage Configuration
License: GPL-2.0-only OR GPL-3.0-only
Expand Down
64 changes: 40 additions & 24 deletions src/lib/y2storage/encryption.rb
Expand Up @@ -149,6 +149,26 @@ def dm_table_name=(name)
super
end

# Generates an unused device mapper name for the encryption device
#
# This name is used for devices with auto dm names, see {.update_dm_names}.
#
# @return [String]
def auto_dm_table_name
name =
if !blk_device.dm_table_name.empty?
blk_device.dm_table_name
elsif !mount_point.nil?
mount_point_to_dm_name
elsif blk_device.udev_ids.any?
blk_device.udev_ids.first
else
blk_device.basename
end

self.class.ensure_unused_dm_name(devicegraph, "cr_#{name}")
end

# Whether {#dm_table_name} was automatically set by YaST.
#
# @note This relies on the userdata mechanism, see {#userdata_value}.
Expand Down Expand Up @@ -384,6 +404,18 @@ def propagate_mount_option(option, mount_points)
end
end

# Generates a base dm name from the mount point path
#
# @return [String, nil] nil if the encryption has no mount point.
def mount_point_to_dm_name
return nil if mount_point.nil?

return "root" if mount_point.root?

# Removes trailing slashes and replaces internal slashes by underscore
mount_point.path.gsub(/^\/|\/$/, "").gsub("/", "_")
end

class << self
# Updates the DeviceMapper name for all encryption devices in the device
# that have a name automatically set by YaST.
Expand All @@ -409,23 +441,21 @@ def update_dm_names(devicegraph)

# ...reassign them according to the current names of the block devices
encryptions.each do |enc|
dm_name = dm_name_for(enc.blk_device)
enc.assign_dm_table_name(dm_name)
enc.assign_dm_table_name(enc.auto_dm_table_name)
end
end

# Auto-generated DeviceMapper name to use for the encrypted version of the
# given device.
# Ensures that the given dm name is not used yet by adding a suffix if needed
#
# @param devicegraph [Devicegraph]
# @param dm_name [String]
#
# @param device [BlkDevice] block device to be encrypted
# @return [String]
def dm_name_for(device)
basename = dm_basename_for(device)
def ensure_unused_dm_name(devicegraph, dm_name)
suffix = ""
devicegraph = device.devicegraph

loop do
candidate = "#{basename}#{suffix}"
candidate = "#{dm_name}#{suffix}"
return candidate unless dm_name_in_use?(devicegraph, candidate)

suffix = next_dm_name_suffix(suffix)
Expand All @@ -444,21 +474,7 @@ def dm_name_in_use?(devicegraph, name)
devicegraph.blk_devices.any? { |i| i.dm_table_name == name }
end

# Initial part of {.dm_name_for}
#
# @param device [BlkDevice]
# @return [String]
def dm_basename_for(device)
device_name =
if device.dm_table_name.empty?
device.udev_ids.first || device.basename
else
device.dm_table_name
end
"cr_#{device_name}"
end

# @see #dm_name_for
# @see #ensure_unused_dm_name
#
# @param previous [String] previous value of the suffix
# @return [String]
Expand Down
3 changes: 3 additions & 0 deletions src/lib/y2storage/mount_point.rb
Expand Up @@ -19,6 +19,7 @@

require "y2storage/storage_class_wrapper"
require "y2storage/device"
require "y2storage/encryption"
require "y2storage/encryption_type"
require "y2storage/filesystems/mount_by_type"
require "pathname"
Expand Down Expand Up @@ -81,6 +82,8 @@ def path=(path)
else
0
end

Y2Storage::Encryption.update_dm_names(devicegraph)
end

# @!method mount_by
Expand Down
Expand Up @@ -16,7 +16,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda2"
name: "/dev/mapper/cr_root"
password: '12345678'
- partition:
size: 2 GiB
Expand All @@ -26,7 +26,7 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda3"
name: "/dev/mapper/cr_swap"
password: '12345678'
- partition:
size: unlimited
Expand All @@ -35,7 +35,7 @@
mount_point: "/home"
encryption:
type: luks
name: "/dev/mapper/cr_sda4"
name: "/dev/mapper/cr_home"
password: '12345678'
- free:
size: 16.5 KiB
Expand Up @@ -16,7 +16,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda2"
name: "/dev/mapper/cr_root"
password: '12345678'
- partition:
size: 2 GiB
Expand All @@ -26,5 +26,5 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda3"
name: "/dev/mapper/cr_swap"
password: '12345678'
6 changes: 3 additions & 3 deletions test/data/devicegraphs/output/multi-linux-pc-enc-sep-home.yml
Expand Up @@ -51,7 +51,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda6"
name: "/dev/mapper/cr_root"
password: '12345678'

- partition:
Expand All @@ -63,7 +63,7 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda7"
name: "/dev/mapper/cr_swap"
password: '12345678'

- partition:
Expand All @@ -75,5 +75,5 @@
mount_point: "/home"
encryption:
type: luks
name: "/dev/mapper/cr_sda8"
name: "/dev/mapper/cr_home"
password: '12345678'
4 changes: 2 additions & 2 deletions test/data/devicegraphs/output/multi-linux-pc-enc.yml
Expand Up @@ -47,7 +47,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda6"
name: "/dev/mapper/cr_root"
password: '12345678'
- partition:
size: 2 GiB
Expand All @@ -58,5 +58,5 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda7"
name: "/dev/mapper/cr_swap"
password: '12345678'
Expand Up @@ -43,7 +43,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda6"
name: "/dev/mapper/cr_root"
password: '12345678'

- partition:
Expand All @@ -54,7 +54,7 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda7"
name: "/dev/mapper/cr_swap"
password: '12345678'

- partition:
Expand All @@ -65,7 +65,7 @@
mount_point: "/home"
encryption:
type: luks
name: "/dev/mapper/cr_sda8"
name: "/dev/mapper/cr_home"
password: '12345678'

# The last 16.5 KiB of a GPT disk are not usable
Expand Down
4 changes: 2 additions & 2 deletions test/data/devicegraphs/output/multi-linux-pc-gpt-enc.yml
Expand Up @@ -43,7 +43,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda6"
name: "/dev/mapper/cr_root"
password: '12345678'

- partition:
Expand All @@ -54,7 +54,7 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda7"
name: "/dev/mapper/cr_swap"
password: '12345678'

- free:
Expand Down
Expand Up @@ -27,7 +27,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda3"
name: "/dev/mapper/cr_root"
password: '12345678'
- partition:
size: unlimited
Expand All @@ -43,7 +43,7 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda5"
name: "/dev/mapper/cr_swap"
password: '12345678'
- partition:
size: 210941 MiB (206.00 GiB)
Expand All @@ -54,5 +54,5 @@
mount_point: "/home"
encryption:
type: luks
name: "/dev/mapper/cr_sda6"
name: "/dev/mapper/cr_home"
password: '12345678'
Expand Up @@ -27,7 +27,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda3"
name: "/dev/mapper/cr_root"
password: '12345678'
- partition:
size: 2 GiB
Expand All @@ -38,5 +38,5 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda4"
name: "/dev/mapper/cr_swap"
password: '12345678'
Expand Up @@ -30,7 +30,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda4"
name: "/dev/mapper/cr_root"
password: '12345678'
- partition:
size: 2 GiB
Expand All @@ -41,7 +41,7 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda5"
name: "/dev/mapper/cr_swap"
password: '12345678'
- partition:
size: unlimited
Expand All @@ -51,7 +51,7 @@
mount_point: "/home"
encryption:
type: luks
name: "/dev/mapper/cr_sda6"
name: "/dev/mapper/cr_home"
password: '12345678'
- free:
size: 16.5 KiB
Expand Up @@ -29,7 +29,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda4"
name: "/dev/mapper/cr_root"
password: '12345678'
- partition:
size: 2 GiB
Expand All @@ -40,5 +40,5 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda5"
name: "/dev/mapper/cr_swap"
password: '12345678'
6 changes: 3 additions & 3 deletions test/data/devicegraphs/output/windows-pc-enc-sep-home.yml
Expand Up @@ -21,7 +21,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda3"
name: "/dev/mapper/cr_root"
password: '12345678'

- partition:
Expand All @@ -39,7 +39,7 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda5"
name: "/dev/mapper/cr_swap"
password: '12345678'

- partition:
Expand All @@ -51,7 +51,7 @@
mount_point: "/home"
encryption:
type: luks
name: "/dev/mapper/cr_sda6"
name: "/dev/mapper/cr_home"
password: '12345678'

- partition:
Expand Down
4 changes: 2 additions & 2 deletions test/data/devicegraphs/output/windows-pc-enc.yml
Expand Up @@ -21,7 +21,7 @@
mount_point: "/"
encryption:
type: luks
name: "/dev/mapper/cr_sda3"
name: "/dev/mapper/cr_root"
password: '12345678'

- partition:
Expand All @@ -32,7 +32,7 @@
mount_point: swap
encryption:
type: luks
name: "/dev/mapper/cr_sda4"
name: "/dev/mapper/cr_swap"
password: '12345678'

- partition:
Expand Down

0 comments on commit 2fc1461

Please sign in to comment.