libbe(3): use libzfs name validation for datasets/snapshot names
Our home-rolled solution didn't quite capture all of the details, and we didn't actually validate snapshot names at all. zfs_name_valid captures the important details, but it doesn't necessarily expose the errors that we're wanting to see in the be_validate_* functions. Validating lengths independently, then the names, should make this a non-issue.
This commit is contained in:
parent
93a07b2278
commit
fcb47c42ec
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=346082
@ -593,6 +593,9 @@ be_validate_snap(libbe_handle_t *lbh, const char *snap_name)
|
|||||||
if (strlen(snap_name) >= BE_MAXPATHLEN)
|
if (strlen(snap_name) >= BE_MAXPATHLEN)
|
||||||
return (BE_ERR_PATHLEN);
|
return (BE_ERR_PATHLEN);
|
||||||
|
|
||||||
|
if (!zfs_name_valid(snap_name, ZFS_TYPE_SNAPSHOT))
|
||||||
|
return (BE_ERR_INVALIDNAME);
|
||||||
|
|
||||||
if (!zfs_dataset_exists(lbh->lzh, snap_name,
|
if (!zfs_dataset_exists(lbh->lzh, snap_name,
|
||||||
ZFS_TYPE_SNAPSHOT))
|
ZFS_TYPE_SNAPSHOT))
|
||||||
return (BE_ERR_NOENT);
|
return (BE_ERR_NOENT);
|
||||||
@ -646,12 +649,6 @@ be_root_concat(libbe_handle_t *lbh, const char *name, char *result)
|
|||||||
int
|
int
|
||||||
be_validate_name(libbe_handle_t *lbh, const char *name)
|
be_validate_name(libbe_handle_t *lbh, const char *name)
|
||||||
{
|
{
|
||||||
for (int i = 0; *name; i++) {
|
|
||||||
char c = *(name++);
|
|
||||||
if (isalnum(c) || (c == '-') || (c == '_') || (c == '.'))
|
|
||||||
continue;
|
|
||||||
return (BE_ERR_INVALIDNAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Impose the additional restriction that the entire dataset name must
|
* Impose the additional restriction that the entire dataset name must
|
||||||
@ -659,6 +656,10 @@ be_validate_name(libbe_handle_t *lbh, const char *name)
|
|||||||
*/
|
*/
|
||||||
if (strlen(lbh->root) + 1 + strlen(name) > MAXNAMELEN)
|
if (strlen(lbh->root) + 1 + strlen(name) > MAXNAMELEN)
|
||||||
return (BE_ERR_PATHLEN);
|
return (BE_ERR_PATHLEN);
|
||||||
|
|
||||||
|
if (!zfs_name_valid(name, ZFS_TYPE_DATASET))
|
||||||
|
return (BE_ERR_INVALIDNAME);
|
||||||
|
|
||||||
return (BE_ERR_SUCCESS);
|
return (BE_ERR_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user