From bf0b3962088fb18f4a2aba00f38955e1fc6e31fe Mon Sep 17 00:00:00 2001 From: David Teigland Date: Fri, 27 May 2022 14:27:03 -0500 Subject: [PATCH 50/54] devices file: fail if --devicesfile filename doesn't exist A typo of the filename after --devicesfile should result in a command error rather than the command falling back to using no devices file at all. Exception is vgcreate|pvcreate which create a new devices file if the file name doesn't exist. --- lib/device/dev-cache.c | 9 +++++++++ test/shell/devicesfile-basic.sh | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/lib/device/dev-cache.c b/lib/device/dev-cache.c index b0759b06c..0eb2568b5 100644 --- a/lib/device/dev-cache.c +++ b/lib/device/dev-cache.c @@ -1882,6 +1882,15 @@ static int _setup_devices(struct cmd_context *cmd, int no_file_match) file_exists = devices_file_exists(cmd); + /* + * Fail if user specifies a file name that doesn't exist and + * the command is not creating a new devices file. + */ + if (!file_exists && !cmd->create_edit_devices_file && cmd->devicesfile && strlen(cmd->devicesfile)) { + log_error("Devices file not found: %s", cmd->devices_file_path); + return 0; + } + /* * Removing the devices file is another way of disabling the use of * a devices file, unless the command creates the devices file. diff --git a/test/shell/devicesfile-basic.sh b/test/shell/devicesfile-basic.sh index 7ba9e2c7f..d1cfb6a35 100644 --- a/test/shell/devicesfile-basic.sh +++ b/test/shell/devicesfile-basic.sh @@ -104,6 +104,10 @@ not ls "$DFDIR/system.devices" vgs --devicesfile test.devices $vg1 not vgs --devicesfile test.devices $vg2 +# misspelled override name fails +not vgs --devicesfile doesnotexist $vg1 +not vgs --devicesfile doesnotexist $vg2 + # devicesfile and devices cannot be used together not vgs --devicesfile test.devices --devices "$dev1","$dev1" $vg1 -- 2.34.3