Skip to content

Commit

Permalink
cam_get_device: resolve path links before parsing device name
Browse files Browse the repository at this point in the history
The CAM subsystem uses bus:taget:lun tuple to address peripherals.  But
for convenience many userland programs such as camcontrol accept devices
names such as da0.  There is a libcam function, cam_open_device, to
support that.  It first calls cam_get_device() to parse the device name
as a driver name and a unit (and handle some special device name
prefixes) and then uses cam_lookup_pass() to find a matching pass
device.

This change extends cam_get_device() to apply realpath(3) to the device
name before parsing it.  This will allow to use tools such as camcontrol
and smartctl with symbolic links that could be friendlier (more
distinguished) names for devices.

Relnotes:	maybe

(cherry picked from commit 1abf1e8)
  • Loading branch information
avg-I committed Feb 16, 2022
1 parent bd8bde1 commit e32acf9
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions lib/libcam/camlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,13 @@ cam_get_device(const char *path, char *dev_name, int devnamelen, int *unit)
}

/*
* We can be rather destructive to the path string. Make a copy of
* it so we don't hose the user's string.
* Resolve the given path to a real device path in case we are given
* an alias or other symbolic link. If the path cannot be resolved
* then try to parse it as is.
*/
newpath = (char *)strdup(path);
newpath = realpath(path, NULL);
if (newpath == NULL)
newpath = strdup(path);
if (newpath == NULL)
return (-1);

Expand Down

0 comments on commit e32acf9

Please sign in to comment.