diff options
author | Robert Wing <rew@FreeBSD.org> | 2021-06-03 16:36:11 +0000 |
---|---|---|
committer | Robert Wing <rew@FreeBSD.org> | 2021-06-11 17:28:41 +0000 |
commit | 01cf73198d1e0b3d00f9bb75027e75327c2c5b9b (patch) | |
tree | 18ee489afcb06d490c660a4f127ce94a68e118b2 | |
parent | 47ec64b3e801cbb793ccff49d21bc8eeb219ad9f (diff) | |
download | src-01cf73198d1e0b3d00f9bb75027e75327c2c5b9b.tar.gz src-01cf73198d1e0b3d00f9bb75027e75327c2c5b9b.zip |
bectl(8): don't allow creation of boot environments with spaces
Boot environment datasets that contain spaces are not bootable.
When a user attempts to create a boot environment with a space, abort
the creation and print an error message.
PR: 254441
Reviewed by: allanjude
Differential Revision: https://reviews.freebsd.org/D30194
(cherry picked from commit 0e6549c8745049e3d6fba3ad748034de2d5cbd2a)
-rw-r--r-- | sbin/bectl/bectl.c | 9 | ||||
-rwxr-xr-x | sbin/bectl/tests/bectl_test.sh | 4 |
2 files changed, 12 insertions, 1 deletions
diff --git a/sbin/bectl/bectl.c b/sbin/bectl/bectl.c index 50229b4b96b7..d3de58ea2982 100644 --- a/sbin/bectl/bectl.c +++ b/sbin/bectl/bectl.c @@ -233,7 +233,10 @@ bectl_cmd_create(int argc, char *argv[]) bootenv = *argv; err = BE_ERR_SUCCESS; - if ((atpos = strchr(bootenv, '@')) != NULL) { + if (strchr(bootenv, ' ') != NULL) + /* BE datasets with spaces are not bootable */ + err = BE_ERR_INVALIDNAME; + else if ((atpos = strchr(bootenv, '@')) != NULL) { /* * This is the "create a snapshot variant". No new boot * environment is to be created here. @@ -261,6 +264,10 @@ bectl_cmd_create(int argc, char *argv[]) switch (err) { case BE_ERR_SUCCESS: break; + case BE_ERR_INVALIDNAME: + fprintf(stderr, + "bectl create: boot environment name must not contain spaces\n"); + break; default: if (atpos != NULL) fprintf(stderr, diff --git a/sbin/bectl/tests/bectl_test.sh b/sbin/bectl/tests/bectl_test.sh index 221fe21e29ed..b101591c3ee9 100755 --- a/sbin/bectl/tests/bectl_test.sh +++ b/sbin/bectl/tests/bectl_test.sh @@ -122,6 +122,10 @@ bectl_create_body() atf_check zfs create -o mountpoint=/usr -o canmount=noauto \ ${zpool}/ROOT/default/usr + # BE datasets with spaces are not bootable, PR 254441. + atf_check -e not-empty -s not-exit:0 \ + bectl -r ${zpool}/ROOT create "foo bar" + # Test standard creation, creation of a snapshot, and creation from a # snapshot. atf_check bectl -r ${zpool}/ROOT create -e default default2 |