git: dadb9c70938c - main - bectl: push space-in-name check down into libbe
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 03 Apr 2022 02:04:45 UTC
The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=dadb9c70938c4ae2c260f6af65752c67ac752284 commit dadb9c70938c4ae2c260f6af65752c67ac752284 Author: Kyle Evans <kevans@FreeBSD.org> AuthorDate: 2022-04-03 02:04:31 +0000 Commit: Kyle Evans <kevans@FreeBSD.org> CommitDate: 2022-04-03 02:04:31 +0000 bectl: push space-in-name check down into libbe This check was previously in `create` only, not applying to renames. It should really be applied at the libbe level, so that we can avoid writing about this restriction over and over again. While we're here: `bectl rename` always succeeds, even when it doesn't. Start returning the error. Reported By: Christian McDonald <cmcdonald netgate com> Reviewed by: rew, jwmaag_gmail.com (earlier version) Differential Revision: https://reviews.freebsd.org/D34605 --- lib/libbe/be.c | 11 +++++++++++ sbin/bectl/bectl.c | 9 ++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lib/libbe/be.c b/lib/libbe/be.c index d6fe027f5df3..13f7a59d5215 100644 --- a/lib/libbe/be.c +++ b/lib/libbe/be.c @@ -961,6 +961,17 @@ be_validate_name(libbe_handle_t *lbh, const char *name) if (!zfs_name_valid(name, ZFS_TYPE_DATASET)) return (BE_ERR_INVALIDNAME); + /* + * ZFS allows spaces in boot environment names, but the kernel can't + * handle booting from such a dataset right now. vfs.root.mountfrom + * is defined to be a space-separated list, and there's no protocol for + * escaping whitespace in the path component of a dev:path spec. So + * while loader can handle this situation alright, it can't safely pass + * it on to mountroot. + */ + if (strchr(name, ' ') != NULL) + return (BE_ERR_INVALIDNAME); + return (BE_ERR_SUCCESS); } diff --git a/sbin/bectl/bectl.c b/sbin/bectl/bectl.c index d3de58ea2982..2b7af4e55419 100644 --- a/sbin/bectl/bectl.c +++ b/sbin/bectl/bectl.c @@ -134,7 +134,6 @@ get_cmd_info(const char *cmd) return (NULL); } - static int bectl_cmd_activate(int argc, char *argv[]) { @@ -233,10 +232,7 @@ bectl_cmd_create(int argc, char *argv[]) bootenv = *argv; err = BE_ERR_SUCCESS; - if (strchr(bootenv, ' ') != NULL) - /* BE datasets with spaces are not bootable */ - err = BE_ERR_INVALIDNAME; - else if ((atpos = strchr(bootenv, '@')) != NULL) { + if ((atpos = strchr(bootenv, '@')) != NULL) { /* * This is the "create a snapshot variant". No new boot * environment is to be created here. @@ -478,7 +474,6 @@ bectl_cmd_rename(int argc, char *argv[]) dest = argv[2]; err = be_rename(be, src, dest); - switch (err) { case BE_ERR_SUCCESS: break; @@ -487,7 +482,7 @@ bectl_cmd_rename(int argc, char *argv[]) src, dest); } - return (0); + return (err); } static int