If the device string is not an alias, check if it's a wwid. This allows
multipathd commands to use WWIDs for $map arguments. In find_mp_by_wwid,
only check strings that are small enough to be WWIDs.

Signed-off-by: Benjamin Marzinski <[email protected]>
---
 libmultipath/structs.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/libmultipath/structs.c b/libmultipath/structs.c
index d89f2187..be3125ed 100644
--- a/libmultipath/structs.c
+++ b/libmultipath/structs.c
@@ -443,7 +443,7 @@ find_mp_by_wwid (const struct _vector *mpvec, const char * 
wwid)
        int i;
        struct multipath * mpp;
 
-       if (!mpvec)
+       if (!mpvec || strlen(wwid) >= WWID_SIZE)
                return NULL;
 
        vector_foreach_slot (mpvec, mpp, i)
@@ -487,6 +487,8 @@ find_mp_by_str (const struct _vector *mpvec, const char * 
str)
                mpp = find_mp_by_minor(mpvec, minor);
        if (!mpp)
                mpp = find_mp_by_alias(mpvec, str);
+       if (!mpp)
+               mpp = find_mp_by_wwid(mpvec, str);
 
        if (!mpp)
                condlog(2, "%s: invalid map name.", str);
-- 
2.45.0


Reply via email to