In systemd installments, users can already override the socket names
that systemd listens on. With this patch, clients using libmpathcmd
can be customized to use a non-standard socket by setting an environment
variable.

Signed-off-by: Martin Wilck <mwi...@suse.com>
---
 libmpathcmd/mpath_cmd.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libmpathcmd/mpath_cmd.c b/libmpathcmd/mpath_cmd.c
index ba5bb31..405267f 100644
--- a/libmpathcmd/mpath_cmd.c
+++ b/libmpathcmd/mpath_cmd.c
@@ -20,6 +20,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/un.h>
@@ -104,6 +105,7 @@ int mpath_connect__(int nonblocking)
        int flags = 0;
        const char *names[2] = {PATHNAME_SOCKET, ABSTRACT_SOCKET};
        int name_idx = 0;
+       const char *env_name = getenv("MULTIPATH_SOCKET_NAME"), *name;
 
 retry:
        fd = socket(AF_LOCAL, SOCK_STREAM, 0);
@@ -116,12 +118,13 @@ retry:
                        (void)fcntl(fd, F_SETFL, flags|O_NONBLOCK);
        }
 
-       len = mpath_fill_sockaddr__(&addr, names[name_idx]);
+       name = env_name ? env_name : names[name_idx];
+       len = mpath_fill_sockaddr__(&addr, name);
        if (connect(fd, (struct sockaddr *)&addr, len) == -1) {
                int err = errno;
 
                close(fd);
-               if (err == ECONNREFUSED && ++name_idx == 1)
+               if (name != env_name && err == ECONNREFUSED && ++name_idx == 1)
                        goto retry;
                else {
                        errno = err;
-- 
2.48.1


Reply via email to