mirror of
https://git.proxmox.com/git/mirror_zfs
synced 2025-05-01 09:41:39 +00:00
zpool: allow relative vdev paths
`zpool create` won't let you use relative paths to disks. This is annoying when you want to do: zpool create tank ./diskfile But have to do.. zpool create tank `pwd`/diskfile This fixes it. Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Tony Hutter <hutter2@llnl.gov> Closes #17042
This commit is contained in:
parent
ab3db6d15d
commit
ece35e0e66
@ -57,6 +57,7 @@ int
|
|||||||
zfs_resolve_shortname(const char *name, char *path, size_t len)
|
zfs_resolve_shortname(const char *name, char *path, size_t len)
|
||||||
{
|
{
|
||||||
const char *env = getenv("ZPOOL_IMPORT_PATH");
|
const char *env = getenv("ZPOOL_IMPORT_PATH");
|
||||||
|
char resolved_path[PATH_MAX];
|
||||||
|
|
||||||
if (env) {
|
if (env) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
@ -85,6 +86,20 @@ zfs_resolve_shortname(const char *name, char *path, size_t len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The user can pass a relative path like ./file1 for the vdev. The path
|
||||||
|
* must contain a directory prefix like './file1' or '../file1'. Simply
|
||||||
|
* passing 'file1' is not allowed, as it may match a block device name.
|
||||||
|
*/
|
||||||
|
if ((strncmp(name, "./", 2) == 0 || strncmp(name, "../", 3) == 0) &&
|
||||||
|
realpath(name, resolved_path) != NULL) {
|
||||||
|
if (access(resolved_path, F_OK) == 0) {
|
||||||
|
if (strlen(resolved_path) + 1 <= len) {
|
||||||
|
if (strlcpy(path, resolved_path, len) < len)
|
||||||
|
return (0); /* success */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return (errno = ENOENT);
|
return (errno = ENOENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user