summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2022-05-27 14:27:03 -0500
committerDavid Teigland <teigland@redhat.com>2022-06-09 14:33:30 -0500
commitbf0b3962088fb18f4a2aba00f38955e1fc6e31fe (patch)
tree9cdd30540125a1fab50c6bede8ce8d4328a6eb7e
parenteda98e4b9418568d6793d2c853aaa54db051cc9f (diff)
downloadlvm2-bf0b3962088fb18f4a2aba00f38955e1fc6e31fe.tar.gz
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.
-rw-r--r--lib/device/dev-cache.c9
-rw-r--r--test/shell/devicesfile-basic.sh4
2 files changed, 13 insertions, 0 deletions
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
@@ -1883,6 +1883,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