From: Daniel Wagner <daniel.wag...@bmw-carit.de>

---
 plugins/openvpn.c |   25 +++++++++++++++++++------
 1 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/plugins/openvpn.c b/plugins/openvpn.c
index 0da6c74..ed06b5d 100644
--- a/plugins/openvpn.c
+++ b/plugins/openvpn.c
@@ -130,6 +130,7 @@ static int ov_connect(struct connman_provider *provider,
                struct connman_task *task, const char *if_name)
 {
        const char *vpnhost, *cafile, *mtu, *certfile, *keyfile;
+       const char *static_key, *ifconfig;
        int err, fd;
 
        vpnhost = connman_provider_get_string(provider, "Host");
@@ -141,6 +142,10 @@ static int ov_connect(struct connman_provider *provider,
        cafile = connman_provider_get_string(provider, "OpenVPN.CACert");
        certfile = connman_provider_get_string(provider, "OpenVPN.Cert");
        keyfile = connman_provider_get_string(provider, "OpenVPN.Key");
+
+       static_key = connman_provider_get_string(provider, "OpenVPN.StaticKey");
+       ifconfig = connman_provider_get_string(provider, "OpenVPN.Ifconfig");
+
        mtu = connman_provider_get_string(provider, "VPN.MTU");
 
        if (mtu)
@@ -188,21 +193,29 @@ static int ov_connect(struct connman_provider *provider,
         */
        connman_task_add_argument(task, "--ping-restart", "0");
 
-       connman_task_add_argument(task, "--client", NULL);
+       if (cafile != NULL && certfile != NULL && keyfile != NULL) {
+               /* connection type: TLS */
+               connman_task_add_argument(task, "--client", NULL);
 
-       if (cafile) {
                connman_task_add_argument(task, "--ca",
                                                (char *)cafile);
-       }
 
-       if (certfile) {
                connman_task_add_argument(task, "--cert",
                                                (char *)certfile);
-       }
 
-       if (keyfile) {
                connman_task_add_argument(task, "--key",
                                                (char *)keyfile);
+       } else if (static_key != NULL && ifconfig != NULL) {
+               /* connection type: static key */
+               connman_task_add_argument(task, "--secret",
+                                               (char *)static_key);
+
+               connman_task_add_argument(task, "--ifconfig",
+                                               (char *)ifconfig);
+       } else {
+               connman_error("Unknown connection type configuration "
+                               "(either tls or static key needed)");
+               return -EINVAL;
        }
 
        fd = fileno(stderr);
-- 
1.7.3.2

_______________________________________________
connman mailing list
connman@connman.net
http://lists.connman.net/listinfo/connman

Reply via email to