Allow wpa_cli/hostapd_cli client socket directory to be specified
[mech_eap.git] / src / common / wpa_ctrl.c
index 82d4655..820dd12 100644 (file)
@@ -85,6 +85,13 @@ struct wpa_ctrl {
 
 struct wpa_ctrl * wpa_ctrl_open(const char *ctrl_path)
 {
+       return wpa_ctrl_open2(ctrl_path, NULL);
+}
+
+
+struct wpa_ctrl * wpa_ctrl_open2(const char *ctrl_path,
+                                const char *cli_path)
+{
        struct wpa_ctrl *ctrl;
        static int counter = 0;
        int ret;
@@ -108,10 +115,18 @@ struct wpa_ctrl * wpa_ctrl_open(const char *ctrl_path)
        ctrl->local.sun_family = AF_UNIX;
        counter++;
 try_again:
-       ret = os_snprintf(ctrl->local.sun_path, sizeof(ctrl->local.sun_path),
-                         CONFIG_CTRL_IFACE_CLIENT_DIR "/"
-                         CONFIG_CTRL_IFACE_CLIENT_PREFIX "%d-%d",
-                         (int) getpid(), counter);
+       if (cli_path && cli_path[0] == '/') {
+               ret = os_snprintf(ctrl->local.sun_path,
+                                 sizeof(ctrl->local.sun_path),
+                                 "%s/" CONFIG_CTRL_IFACE_CLIENT_PREFIX "%d-%d",
+                                 cli_path, (int) getpid(), counter);
+       } else {
+               ret = os_snprintf(ctrl->local.sun_path,
+                                 sizeof(ctrl->local.sun_path),
+                                 CONFIG_CTRL_IFACE_CLIENT_DIR "/"
+                                 CONFIG_CTRL_IFACE_CLIENT_PREFIX "%d-%d",
+                                 (int) getpid(), counter);
+       }
        if (os_snprintf_error(sizeof(ctrl->local.sun_path), ret)) {
                close(ctrl->s);
                os_free(ctrl);