]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
stroke: Use charon.piddir to determine default socket URI
authorTobias Brunner <tobias@strongswan.org>
Tue, 19 May 2015 15:03:07 +0000 (17:03 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 29 May 2015 12:17:01 +0000 (14:17 +0200)
src/libcharon/plugins/stroke/stroke_socket.c
src/starter/starterstroke.c
src/stroke/stroke.c
src/stroke/stroke_msg.h

index db7e66f14373a6af65d2d800da946f946a74181c..29976d75da3a165d67c42cb0279493dae2ca418e 100644 (file)
@@ -16,6 +16,8 @@
 
 #include "stroke_socket.h"
 
+#define _GNU_SOURCE /* for asprintf() */
+#include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -769,7 +771,7 @@ stroke_socket_t *stroke_socket_create()
 {
        private_stroke_socket_t *this;
        int max_concurrent;
-       char *uri;
+       char *uri, *uri_default, *piddir;
 
        INIT(this,
                .public = {
@@ -800,9 +802,17 @@ stroke_socket_t *stroke_socket_create()
        max_concurrent = lib->settings->get_int(lib->settings,
                                "%s.plugins.stroke.max_concurrent", MAX_CONCURRENT_DEFAULT,
                                lib->ns);
-       uri = lib->settings->get_str(lib->settings,
-                               "%s.plugins.stroke.socket", "unix://" STROKE_SOCKET, lib->ns);
+
+       piddir = lib->settings->get_str(lib->settings, "%s.piddir", IPSEC_PIDDIR,
+                                                                       lib->ns);
+       if (asprintf(&uri_default, "unix://%s/" STROKE_SOCKET_NAME, piddir) < 0)
+       {
+               uri_default = strdup("unix://" STROKE_SOCKET);
+       }
+       uri = lib->settings->get_str(lib->settings, "%s.plugins.stroke.socket",
+                                                                uri_default, lib->ns);
        this->service = lib->streams->create_service(lib->streams, uri, 10);
+       free(uri_default);
        if (!this->service)
        {
                DBG1(DBG_CFG, "creating stroke socket failed");
index 9a9911bbb22d29f57fdb4bed12318a0cdaa5b102..a339dd956b1523ed8fd8efae81f2da3c6ad3b54d 100644 (file)
@@ -91,9 +91,9 @@ static int send_stroke_msg(stroke_msg_t *msg)
        /* starter is not called from commandline, and therefore absolutely silent */
        msg->output_verbosity = -1;
 
-       if (asprintf(&uri_default, "unix://%s/charon.ctl", piddir) < 0)
+       if (asprintf(&uri_default, "unix://%s/" STROKE_SOCKET_NAME, piddir) < 0)
        {
-               uri_default = strdup("unix://" IPSEC_PIDDIR "/charon.ctl");
+               uri_default = strdup("unix://" STROKE_SOCKET);
        }
        uri = lib->settings->get_str(lib->settings, "%s.plugins.stroke.socket",
                                                                 uri_default, daemon_name);
index 07911d2d2762fa05ebb37b75d02be758d22679ef..c5d0ef186c66579b9335b8b6376896e47ef6d21d 100644 (file)
@@ -14,6 +14,7 @@
  * for more details.
  */
 
+#define _GNU_SOURCE /* for asprintf() */
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
@@ -75,7 +76,7 @@ static void push_string_impl(stroke_msg_t **msg, size_t offset, char *string)
 static int send_stroke_msg(stroke_msg_t *msg)
 {
        stream_t *stream;
-       char *uri, buffer[512], *pass;
+       char *uri, *uri_default, *piddir, buffer[512], *pass;
        int count;
 
        if (msg->length == UINT16_MAX)
@@ -87,15 +88,23 @@ static int send_stroke_msg(stroke_msg_t *msg)
 
        msg->output_verbosity = output_verbosity;
 
+       piddir = lib->settings->get_str(lib->settings, "%s.piddir", IPSEC_PIDDIR,
+                                                                       daemon_name);
+       if (asprintf(&uri_default, "unix://%s/" STROKE_SOCKET_NAME, piddir) < 0)
+       {
+               uri_default = strdup("unix://" STROKE_SOCKET);
+       }
        uri = lib->settings->get_str(lib->settings, "%s.plugins.stroke.socket",
-                                                                "unix://" STROKE_SOCKET, daemon_name);
+                                                                uri_default, daemon_name);
        stream = lib->streams->connect(lib->streams, uri);
        if (!stream)
        {
                fprintf(stderr, "failed to connect to stroke socket '%s'\n", uri);
+               free(uri_default);
                free(msg);
                return -1;
        }
+       free(uri_default);
 
        if (!stream->write_all(stream, msg, msg->length))
        {
index 17f8a4326f2ed9dc2c7f9e36742b4f1da9d163dd..742dcd89e700c4692b459c4966b5b59ebf5d75fb 100644 (file)
 #include <library.h>
 
 /**
- * Socket which is used to communicate between charon and stroke
+ * Socket file which is used to communicate between charon and stroke
  */
-#define STROKE_SOCKET IPSEC_PIDDIR "/charon.ctl"
+#define STROKE_SOCKET_NAME "charon.ctl"
+#define STROKE_SOCKET IPSEC_PIDDIR "/" STROKE_SOCKET_NAME
 
 /**
  * Number of bytes by which the buffer is increased as needed