OpenZFS 9193 - bootcfg -C doesn't work

When given an empty string as a rootds value, bootcfg -C fails with
the error message 'could not set nextboot: '' is an invalid name'.
This should be allowed because it represents clearing the nextboot
configuration.

Authored by: Paul Dagnelie <pcd@delphix.com>
Reviewed by: Chris Williamson <chris.williamson@delphix.com>
Reviewed by: Sebastien Roy <sebastien.roy@delphix.com>
Reviewed by: Igor Kozhukhov <igor@dilos.org>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Approved by: Robert Mustacchi <rm@joyent.com>
Ported-by: Giuseppe Di Natale <dinatale2@llnl.gov>

OpenZFS-issue: https://www.illumos.org/issues/9193
OpenZFS-commit: https://github.com/openzfs/openzfs/commit/504645d227
Closes #7230
This commit is contained in:
Paul Dagnelie 2017-03-23 15:28:22 -07:00 committed by Brian Behlendorf
parent 910f3ce739
commit 387b6856d6
1 changed files with 3 additions and 2 deletions

View File

@ -410,6 +410,8 @@ static boolean_t
bootfs_name_valid(const char *pool, char *bootfs) bootfs_name_valid(const char *pool, char *bootfs)
{ {
int len = strlen(pool); int len = strlen(pool);
if (bootfs[0] == '\0')
return (B_TRUE);
if (!zfs_name_valid(bootfs, ZFS_TYPE_FILESYSTEM|ZFS_TYPE_SNAPSHOT)) if (!zfs_name_valid(bootfs, ZFS_TYPE_FILESYSTEM|ZFS_TYPE_SNAPSHOT))
return (B_FALSE); return (B_FALSE);
@ -567,8 +569,7 @@ zpool_valid_proplist(libzfs_handle_t *hdl, const char *poolname,
* bootfs property value has to be a dataset name and * bootfs property value has to be a dataset name and
* the dataset has to be in the same pool as it sets to. * the dataset has to be in the same pool as it sets to.
*/ */
if (strval[0] != '\0' && !bootfs_name_valid(poolname, if (!bootfs_name_valid(poolname, strval)) {
strval)) {
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "'%s' " zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "'%s' "
"is an invalid name"), strval); "is an invalid name"), strval);
(void) zfs_error(hdl, EZFS_INVALIDNAME, errbuf); (void) zfs_error(hdl, EZFS_INVALIDNAME, errbuf);