git: 568f805c8395 - releng/13.1 - bectl: push space-in-name check down into libbe
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 06 Apr 2022 14:33:21 UTC
The branch releng/13.1 has been updated by kevans:
URL: https://cgit.FreeBSD.org/src/commit/?id=568f805c83954a044bcd29dbc7b037b617fab4b9
commit 568f805c83954a044bcd29dbc7b037b617fab4b9
Author: Kyle Evans <kevans@FreeBSD.org>
AuthorDate: 2022-04-03 02:04:31 +0000
Commit: Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2022-04-06 14:32:51 +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.
Approved by: re (gjb)
Reported By: Christian McDonald <cmcdonald netgate com>
(cherry picked from commit dadb9c70938c4ae2c260f6af65752c67ac752284)
(cherry picked from commit 227e52a9c0b0be9656757fec47a2648f5619bf67)
---
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