X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=vpn%2Fplugins%2Fl2tp.c;h=48894aa5286503d640c4b0210678c84507d364b3;hb=c647a4b6f1132684c9d8b8ad71ec38d81147b278;hp=5d83eb8842fe793278169dcf4d2e4965144e4c6b;hpb=04d1dbacf6aabbb44f16f6776496192964d460d8;p=platform%2Fupstream%2Fconnman.git diff --git a/vpn/plugins/l2tp.c b/vpn/plugins/l2tp.c index 5d83eb8..48894aa 100755 --- a/vpn/plugins/l2tp.c +++ b/vpn/plugins/l2tp.c @@ -65,6 +65,7 @@ enum { OPT_L2G = 2, OPT_L2 = 3, OPT_PPPD = 4, + OPT_L2LNS = 5, }; struct { @@ -83,7 +84,7 @@ struct { { "L2TP.DefaultRoute", "defaultroute", OPT_L2, NULL, OPT_STRING }, { "L2TP.FlowBit", "flow bit", OPT_L2, NULL, OPT_STRING }, { "L2TP.TunnelRWS", "tunnel rws", OPT_L2, NULL, OPT_STRING }, - { "L2TP.Exclusive", "exclusive", OPT_L2, NULL, OPT_STRING }, + { "L2TP.Exclusive", "exclusive", OPT_L2LNS, NULL, OPT_STRING }, { "L2TP.Autodial", "autodial", OPT_L2, "yes", OPT_STRING }, { "L2TP.Redial", "redial", OPT_L2, "yes", OPT_STRING }, { "L2TP.RedialTimeout", "redial timeout", OPT_L2, "10", OPT_STRING }, @@ -96,7 +97,7 @@ struct { { "L2TP.ForceUserSpace", "force userspace", OPT_L2G, NULL, OPT_STRING }, { "L2TP.ListenAddr", "listen-addr", OPT_L2G, NULL, OPT_STRING }, { "L2TP.Rand Source", "rand source", OPT_L2G, NULL, OPT_STRING }, - { "L2TP.IPsecSaref", "ipsec saref", OPT_L2G, NULL, OPT_STRING }, + { "L2TP.IPsecSaref", "ipsec saref", OPT_L2G, "no", OPT_STRING }, { "L2TP.Port", "port", OPT_L2G, NULL, OPT_STRING }, { "PPPD.EchoFailure", "lcp-echo-failure", OPT_PPPD, "0", OPT_STRING }, { "PPPD.EchoInterval", "lcp-echo-interval", OPT_PPPD, "0", OPT_STRING }, @@ -178,7 +179,8 @@ static int l2tp_notify(DBusMessage *msg, struct vpn_provider *provider) DBG("authentication failure"); vpn_provider_set_string(provider, "L2TP.User", NULL); - vpn_provider_set_string(provider, "L2TP.Password", NULL); + vpn_provider_set_string_hide_value(provider, "L2TP.Password", + NULL); return VPN_STATE_AUTH_FAILURE; } @@ -454,6 +456,9 @@ static int l2tp_write_config(struct vpn_provider *provider, l2tp_write_option(fd, "[global]", NULL); l2tp_write_fields(provider, fd, OPT_L2G); + l2tp_write_option(fd, "[lns default]", NULL); + l2tp_write_fields(provider, fd, OPT_L2LNS); + l2tp_write_option(fd, "[lac l2tp]", NULL); option = vpn_provider_get_string(provider, "Host"); @@ -491,16 +496,28 @@ struct request_input_reply { static void request_input_reply(DBusMessage *reply, void *user_data) { struct request_input_reply *l2tp_reply = user_data; + struct l2tp_private_data *data; const char *error = NULL; char *username = NULL, *password = NULL; char *key; DBusMessageIter iter, dict; + int err; DBG("provider %p", l2tp_reply->provider); - if (!reply || dbus_message_get_type(reply) == DBUS_MESSAGE_TYPE_ERROR) { - if (reply) - error = dbus_message_get_error_name(reply); + if (!reply) + goto done; + + data = l2tp_reply->user_data; + + err = vpn_agent_check_and_process_reply_error(reply, + l2tp_reply->provider, data->task, data->cb, + data->user_data); + if (err) { + /* Ensure cb is called only once */ + data->cb = NULL; + data->user_data = NULL; + error = dbus_message_get_error_name(reply); goto done; } @@ -593,6 +610,9 @@ static int request_input(struct vpn_provider *provider, connman_dbus_dict_open(&iter, &dict); + if (vpn_provider_get_authentication_errors(provider)) + vpn_agent_append_auth_failure(&dict, provider, NULL); + vpn_agent_append_user_info(&dict, provider, "L2TP.User"); vpn_agent_append_host_and_name(&dict, provider); @@ -633,7 +653,7 @@ static int run_connect(struct vpn_provider *provider, int l2tp_fd, pppd_fd; int err; - if (!username || !password) { + if (!username || !*username || !password || !*password) { DBG("Cannot connect username %s password %p", username, password); err = -EINVAL; @@ -704,7 +724,7 @@ static void request_input_cb(struct vpn_provider *provider, { struct l2tp_private_data *data = user_data; - if (!username || !password) + if (!username || !*username || !password || !*password) DBG("Requesting username %s or password failed, error %s", username, error); else if (error) @@ -739,7 +759,7 @@ static int l2tp_connect(struct vpn_provider *provider, DBG("user %s password %p", username, password); - if (!username || !password) { + if (!username || !*username || !password || !*password) { struct l2tp_private_data *data; data = g_try_new0(struct l2tp_private_data, 1); @@ -783,7 +803,12 @@ static int l2tp_error_code(struct vpn_provider *provider, int exit_code) static void l2tp_disconnect(struct vpn_provider *provider) { - vpn_provider_set_string(provider, "L2TP.Password", NULL); + if (!provider) + return; + + vpn_provider_set_string_hide_value(provider, "L2TP.Password", NULL); + + connman_agent_cancel(provider); } static struct vpn_driver vpn_driver = {