diff options
author | Damian Wojsław <[email protected]> | 2019-02-25 20:20:07 +0100 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-02-25 11:20:07 -0800 |
commit | e065034563c8ea34d647c83c22717d72315ca580 (patch) | |
tree | d312bff10559fa4cd80b20a502809efa1ef69211 /lib | |
parent | ba7b05cb257eeabbba503db89cd2ed58eaeabad6 (diff) |
Improve error message for zfs create with @ or # in name
Reorder the `zfs create` error messages in order to return the most
specific one first. If none of them apply then an expanded version of
the invalid name message is used.
Reviewed by: Tom Caputi <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed by: Matt Ahrens <[email protected]>
Signed-off-by: Damian Wojsław <[email protected]>
Closes #8155
Closes #8352
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libzfs/libzfs_dataset.c | 77 |
1 files changed, 39 insertions, 38 deletions
diff --git a/lib/libzfs/libzfs_dataset.c b/lib/libzfs/libzfs_dataset.c index be86e5692..0537b631e 100644 --- a/lib/libzfs/libzfs_dataset.c +++ b/lib/libzfs/libzfs_dataset.c @@ -108,6 +108,43 @@ zfs_validate_name(libzfs_handle_t *hdl, const char *path, int type, namecheck_err_t why; char what; + if (!(type & ZFS_TYPE_SNAPSHOT) && strchr(path, '@') != NULL) { + if (hdl != NULL) + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "snapshot delimiter '@' is not expected here")); + return (0); + } + + if (type == ZFS_TYPE_SNAPSHOT && strchr(path, '@') == NULL) { + if (hdl != NULL) + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "missing '@' delimiter in snapshot name, " + "did you mean to use -r?")); + return (0); + } + + if (!(type & ZFS_TYPE_BOOKMARK) && strchr(path, '#') != NULL) { + if (hdl != NULL) + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "bookmark delimiter '#' is not expected here")); + return (0); + } + + if (type == ZFS_TYPE_BOOKMARK && strchr(path, '#') == NULL) { + if (hdl != NULL) + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "missing '#' delimiter in bookmark name, " + "did you mean to use -r?")); + return (0); + } + + if (modifying && strchr(path, '%') != NULL) { + if (hdl != NULL) + zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, + "invalid character %c in name"), '%'); + return (0); + } + if (entity_namecheck(path, &why, &what) != 0) { if (hdl != NULL) { switch (why) { @@ -123,7 +160,8 @@ zfs_validate_name(libzfs_handle_t *hdl, const char *path, int type, case NAME_ERR_EMPTY_COMPONENT: zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "empty component in name")); + "empty component or misplaced '@'" + " or '#' delimiter in name")); break; case NAME_ERR_TRAILING_SLASH: @@ -168,43 +206,6 @@ zfs_validate_name(libzfs_handle_t *hdl, const char *path, int type, return (0); } - if (!(type & ZFS_TYPE_SNAPSHOT) && strchr(path, '@') != NULL) { - if (hdl != NULL) - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "snapshot delimiter '@' is not expected here")); - return (0); - } - - if (type == ZFS_TYPE_SNAPSHOT && strchr(path, '@') == NULL) { - if (hdl != NULL) - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "missing '@' delimiter in snapshot name, " - "did you mean to use -r?")); - return (0); - } - - if (!(type & ZFS_TYPE_BOOKMARK) && strchr(path, '#') != NULL) { - if (hdl != NULL) - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "bookmark delimiter '#' is not expected here")); - return (0); - } - - if (type == ZFS_TYPE_BOOKMARK && strchr(path, '#') == NULL) { - if (hdl != NULL) - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "missing '#' delimiter in bookmark name, " - "did you mean to use -r?")); - return (0); - } - - if (modifying && strchr(path, '%') != NULL) { - if (hdl != NULL) - zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, - "invalid character %c in name"), '%'); - return (0); - } - return (-1); } |