From 9a79248fe21554e6cb99dd6ed044e7cbff18f777 Mon Sep 17 00:00:00 2001 From: David Teigland Date: Fri, 27 May 2022 14:27:03 -0500 Subject: [PATCH 2/7] 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. (cherry picked from commit bfe072e4388b530cbf5369be8a8f1305220198bf) --- 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 3aaf6a2e5..ed9c726c9 100644 --- a/lib/device/dev-cache.c +++ b/lib/device/dev-cache.c @@ -1863,6 +1863,15 @@ int setup_devices(struct cmd_context *cmd) 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 9c3455c76..77fe265a0 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