ofono: Fix potential crash
[framework/connectivity/connman.git] / plugins / l2tp.c
index fce8902..5a655e6 100644 (file)
@@ -3,7 +3,7 @@
  *  Connection Manager
  *
  *  Copyright (C) 2010  BMW Car IT GmbH. All rights reserved.
- *  Copyright (C) 2011  Intel Corporation. All rights reserved.
+ *  Copyright (C) 2012  Intel Corporation. All rights reserved.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2 as
@@ -158,6 +158,9 @@ static int l2tp_notify(DBusMessage *msg, struct connman_provider *provider)
                return VPN_STATE_FAILURE;
        }
 
+       if (strcmp(reason, "auth failed") == 0)
+               return VPN_STATE_AUTH_FAILURE;
+
        if (strcmp(reason, "connect"))
                return VPN_STATE_DISCONNECT;
 
@@ -237,6 +240,26 @@ static int l2tp_notify(DBusMessage *msg, struct connman_provider *provider)
        return VPN_STATE_CONNECT;
 }
 
+static int l2tp_save(struct connman_provider *provider, GKeyFile *keyfile)
+{
+       const char *option;
+       int i;
+
+       for (i = 0; i < (int)ARRAY_SIZE(pppd_options); i++) {
+               if (strncmp(pppd_options[i].cm_opt, "L2TP.", 5) == 0) {
+                       option = connman_provider_get_string(provider,
+                                                       pppd_options[i].cm_opt);
+                       if (option == NULL)
+                               continue;
+
+                       g_key_file_set_string(keyfile,
+                                       connman_provider_get_save_group(provider),
+                                       pppd_options[i].cm_opt, option);
+               }
+       }
+       return 0;
+}
+
 static ssize_t full_write(int fd, const void *buf, size_t len)
 {
        ssize_t byte_write;
@@ -473,12 +496,9 @@ static int l2tp_connect(struct connman_provider *provider,
 
 static int l2tp_error_code(int exit_code)
 {
-
        switch (exit_code) {
        case 1:
                return CONNMAN_PROVIDER_ERROR_CONNECT_FAILED;
-       case 2:
-               return CONNMAN_PROVIDER_ERROR_LOGIN_FAILED;
        default:
                return CONNMAN_PROVIDER_ERROR_UNKNOWN;
        }
@@ -489,6 +509,7 @@ static struct vpn_driver vpn_driver = {
        .notify         = l2tp_notify,
        .connect        = l2tp_connect,
        .error_code     = l2tp_error_code,
+       .save           = l2tp_save,
 };
 
 static int l2tp_init(void)