Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
NetworkManager-l2tp
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
CeRiAl
NetworkManager-l2tp
Commits
76bf1d39
Commit
76bf1d39
authored
May 31, 2012
by
Сергей Прохоров
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Synchronize codebase with pptp v0.9.4 plugin + fix warnings
parent
1b16c522
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
253 additions
and
257 deletions
+253
-257
README
README
+1
-1
main.c
auth-dialog/main.c
+2
-2
autogen.sh
autogen.sh
+20
-3
Makefile.am
properties/Makefile.am
+5
-11
advanced-dialog.c
properties/advanced-dialog.c
+5
-5
import-export.c
properties/import-export.c
+1
-5
ipsec-dialog.c
properties/ipsec-dialog.c
+0
-6
nm-l2tp.c
properties/nm-l2tp.c
+6
-7
nm-l2tp-pppd-plugin.c
src/nm-l2tp-pppd-plugin.c
+2
-2
nm-l2tp-service.c
src/nm-l2tp-service.c
+211
-215
No files found.
README
View file @
76bf1d39
...
@@ -9,7 +9,7 @@ Build
...
@@ -9,7 +9,7 @@ Build
=====
=====
./autogen.sh
./autogen.sh
./configure
./configure
# (optional)
make
make
sudo make install
sudo make install
...
...
auth-dialog/main.c
View file @
76bf1d39
...
@@ -153,7 +153,7 @@ get_secrets (const char *vpn_uuid,
...
@@ -153,7 +153,7 @@ get_secrets (const char *vpn_uuid,
g_key_file_set_string
(
keyfile
,
UI_KEYFILE_GROUP
,
"Description"
,
prompt
);
g_key_file_set_string
(
keyfile
,
UI_KEYFILE_GROUP
,
"Description"
,
prompt
);
g_key_file_set_string
(
keyfile
,
UI_KEYFILE_GROUP
,
"Title"
,
_
(
"Authenticate VPN"
));
g_key_file_set_string
(
keyfile
,
UI_KEYFILE_GROUP
,
"Title"
,
_
(
"Authenticate VPN"
));
keyfile_add_entry_info
(
keyfile
,
NM_
PP
TP_KEY_PASSWORD
,
pw
?
pw
:
""
,
_
(
"Password:"
),
TRUE
,
allow_interaction
);
keyfile_add_entry_info
(
keyfile
,
NM_
L2
TP_KEY_PASSWORD
,
pw
?
pw
:
""
,
_
(
"Password:"
),
TRUE
,
allow_interaction
);
keyfile_print_stdout
(
keyfile
);
keyfile_print_stdout
(
keyfile
);
g_key_file_unref
(
keyfile
);
g_key_file_unref
(
keyfile
);
...
@@ -278,7 +278,7 @@ main (int argc, char *argv[])
...
@@ -278,7 +278,7 @@ main (int argc, char *argv[])
if
(
!
external_ui_mode
)
{
if
(
!
external_ui_mode
)
{
/* dump the passwords to stdout */
/* dump the passwords to stdout */
if
(
password
)
if
(
password
)
printf
(
"%s
\n
%s
\n
"
,
NM_
PP
TP_KEY_PASSWORD
,
password
);
printf
(
"%s
\n
%s
\n
"
,
NM_
L2
TP_KEY_PASSWORD
,
password
);
printf
(
"
\n\n
"
);
printf
(
"
\n\n
"
);
gnome_keyring_memory_free
(
password
);
gnome_keyring_memory_free
(
password
);
...
...
autogen.sh
View file @
76bf1d39
#!/bin/sh
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
srcdir
=
`
dirname
$0
`
test
-z
"
$srcdir
"
&&
srcdir
=
.
REQUIRED_AUTOMAKE_VERSION
=
1.9
PKG_NAME
=
NetworkManager-l2tp
(
test
-f
$srcdir
/configure.ac
\
&&
test
-f
$srcdir
/auth-dialog/main.c
)
||
{
echo
-n
"**Error**: Directory "
\`
$srcdir
\'
" does not look like the"
echo
" top-level
$PKG_NAME
directory"
exit
1
}
(
cd
$srcdir
;
autoreconf
--install
--symlink
&&
intltoolize
--force
&&
autoreconf
&&
./configure
--enable-maintainer-mode
$@
)
[
!
-e
m4
]
&&
mkdir
m4
autoreconf
--verbose
--install
--force
intltoolize
--copy
--force
--automake
properties/Makefile.am
View file @
76bf1d39
...
@@ -16,22 +16,16 @@ ui_DATA = nm-l2tp-dialog.ui
...
@@ -16,22 +16,16 @@ ui_DATA = nm-l2tp-dialog.ui
libnm_l2tp_properties_la_CFLAGS
=
\
libnm_l2tp_properties_la_CFLAGS
=
\
$(GTK_CFLAGS)
\
$(GTK_CFLAGS)
\
$(GCONF_CFLAGS)
\
$(NM_CFLAGS)
\
$(LIBGNOMEUI_CFLAGS)
\
$(GNOMEKEYRING_CFLAGS)
\
$(NM_CFLAGS)
\
-DICONDIR
=
\"
"
$(datadir)
/pixmaps"
\"
\
-DICONDIR
=
\"
"
$(datadir)
/pixmaps"
\"
\
-DUIDIR
=
\"
"
$(uidir)
"
\"
\
-DUIDIR
=
\"
"
$(uidir)
"
\"
\
-DG_DISABLE_DEPRECATED
\
-DG_DISABLE_DEPRECATED
\
-DGDK_DISABLE_DEPRECATED
\
-DGDK_DISABLE_DEPRECATED
\
-DGNOME_DISABLE_DEPRECATED
\
-DGTK_DISABLE_DEPRECATED
\
-DGNOMELOCALEDIR
=
\"
$(datadir)
/locale
\"
\
-DVERSION
=
\"
$(VERSION)
\"
-DVERSION
=
\"
$(VERSION)
\"
libnm_l2tp_properties_la_LIBADD
=
\
libnm_l2tp_properties_la_LIBADD
=
\
$(GTK_LIBS)
\
$(GTK_LIBS)
\
$(GCONF_LIBS)
\
$(LIBGNOMEUI_LIBS)
\
$(NM_LIBS)
$(NM_LIBS)
libnm_l2tp_properties_la_LDFLAGS
=
\
libnm_l2tp_properties_la_LDFLAGS
=
\
...
...
properties/advanced-dialog.c
View file @
76bf1d39
...
@@ -551,23 +551,23 @@ advanced_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error)
...
@@ -551,23 +551,23 @@ advanced_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error)
}
}
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_allow_bsdcomp"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_allow_bsdcomp"
));
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
/* negate */
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NOBSDCOMP
),
g_strdup
(
"yes"
));
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NOBSDCOMP
),
g_strdup
(
"yes"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_allow_deflate"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_allow_deflate"
));
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
/* negate */
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NODEFLATE
),
g_strdup
(
"yes"
));
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NODEFLATE
),
g_strdup
(
"yes"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_usevj"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_usevj"
));
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
/* negate */
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NO_VJ_COMP
),
g_strdup
(
"yes"
));
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NO_VJ_COMP
),
g_strdup
(
"yes"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_usepcomp"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_usepcomp"
));
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
/* negate */
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NO_PCOMP
),
g_strdup
(
"yes"
));
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NO_PCOMP
),
g_strdup
(
"yes"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_useaccomp"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_useaccomp"
));
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
/* negate */
if
(
!
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
widget
)))
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NO_ACCOMP
),
g_strdup
(
"yes"
));
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_NO_ACCOMP
),
g_strdup
(
"yes"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_send_echo_packets"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
builder
,
"ppp_send_echo_packets"
));
...
...
properties/import-export.c
View file @
76bf1d39
...
@@ -201,7 +201,6 @@ import_ip4 (GKeyFile *keyfile, NMSettingIP4Config *s_ip4, GError **error)
...
@@ -201,7 +201,6 @@ import_ip4 (GKeyFile *keyfile, NMSettingIP4Config *s_ip4, GError **error)
char
**
dnses
;
char
**
dnses
;
gsize
length
;
gsize
length
;
struct
in_addr
addr
;
struct
in_addr
addr
;
guint32
dns
;
dnses
=
g_key_file_get_string_list
(
keyfile
,
IP4_SECTION
,
NM_SETTING_IP4_CONFIG_DNS
,
dnses
=
g_key_file_get_string_list
(
keyfile
,
IP4_SECTION
,
NM_SETTING_IP4_CONFIG_DNS
,
&
length
,
error
);
&
length
,
error
);
...
@@ -240,7 +239,7 @@ import_ip4 (GKeyFile *keyfile, NMSettingIP4Config *s_ip4, GError **error)
...
@@ -240,7 +239,7 @@ import_ip4 (GKeyFile *keyfile, NMSettingIP4Config *s_ip4, GError **error)
&
length
,
error
);
&
length
,
error
);
for
(
i
=
0
;
i
<
length
;
i
++
){
for
(
i
=
0
;
i
<
length
;
i
++
){
NMIP4Route
*
route
;
NMIP4Route
*
route
;
guint32
dest
,
prefix
,
next_hop
,
metric
;
guint32
prefix
,
metric
;
char
*
ptr
,
*
dest_s
,
*
prefix_s
,
*
next_hop_s
,
*
metric_s
;
char
*
ptr
,
*
dest_s
,
*
prefix_s
,
*
next_hop_s
,
*
metric_s
;
route
=
nm_ip4_route_new
();
route
=
nm_ip4_route_new
();
...
@@ -489,7 +488,6 @@ static gboolean
...
@@ -489,7 +488,6 @@ static gboolean
export_ip4
(
NMSettingIP4Config
*
s_ip4
,
GKeyFile
*
keyfile
,
GError
**
error
)
export_ip4
(
NMSettingIP4Config
*
s_ip4
,
GKeyFile
*
keyfile
,
GError
**
error
)
{
{
const
char
*
str_val
;
const
char
*
str_val
;
int
int_val
;
gboolean
bool_val
;
gboolean
bool_val
;
guint32
num_dns
;
guint32
num_dns
;
guint32
num_dns_searches
;
guint32
num_dns_searches
;
...
@@ -532,8 +530,6 @@ export_ip4(NMSettingIP4Config *s_ip4, GKeyFile *keyfile, GError **error)
...
@@ -532,8 +530,6 @@ export_ip4(NMSettingIP4Config *s_ip4, GKeyFile *keyfile, GError **error)
char
*
routes
[
num_routes
];
char
*
routes
[
num_routes
];
NMIP4Route
*
route
;
NMIP4Route
*
route
;
struct
in_addr
addr
;
struct
in_addr
addr
;
char
*
dest_addr
;
char
*
nhop_addr
;
for
(
i
=
0
;
i
<
num_routes
;
i
++
){
for
(
i
=
0
;
i
<
num_routes
;
i
++
){
guint32
dest
,
prefix
,
nhop
,
metric
;
guint32
dest
,
prefix
,
nhop
,
metric
;
...
...
properties/ipsec-dialog.c
View file @
76bf1d39
...
@@ -81,9 +81,6 @@ handle_enable_changed (GtkWidget *check, gboolean is_init, GtkBuilder *builder)
...
@@ -81,9 +81,6 @@ handle_enable_changed (GtkWidget *check, gboolean is_init, GtkBuilder *builder)
{
{
GtkWidget
*
widget
;
GtkWidget
*
widget
;
gboolean
enabledp
;
gboolean
enabledp
;
GtkTreeModel
*
model
;
GtkTreeIter
iter
;
gboolean
valid
;
enabledp
=
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
check
));
enabledp
=
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
check
));
...
@@ -172,9 +169,6 @@ ipsec_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error)
...
@@ -172,9 +169,6 @@ ipsec_dialog_new_hash_from_dialog (GtkWidget *dialog, GError **error)
GHashTable
*
hash
;
GHashTable
*
hash
;
GtkWidget
*
widget
;
GtkWidget
*
widget
;
GtkBuilder
*
builder
;
GtkBuilder
*
builder
;
GtkTreeModel
*
model
;
GtkTreeIter
iter
;
gboolean
valid
;
g_return_val_if_fail
(
dialog
!=
NULL
,
NULL
);
g_return_val_if_fail
(
dialog
!=
NULL
,
NULL
);
if
(
error
)
if
(
error
)
...
...
properties/nm-l2tp.c
View file @
76bf1d39
...
@@ -29,6 +29,7 @@
...
@@ -29,6 +29,7 @@
#include <arpa/inet.h>
#include <arpa/inet.h>
#include <errno.h>
#include <errno.h>
#include <stdlib.h>
#include <stdlib.h>
#include <ctype.h>
#include <glib/gi18n-lib.h>
#include <glib/gi18n-lib.h>
#include <string.h>
#include <string.h>
#include <gtk/gtk.h>
#include <gtk/gtk.h>
...
@@ -162,7 +163,7 @@ check_validity (L2tpPluginUiWidget *self, GError **error)
...
@@ -162,7 +163,7 @@ check_validity (L2tpPluginUiWidget *self, GError **error)
L2tpPluginUiWidgetPrivate
*
priv
=
L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE
(
self
);
L2tpPluginUiWidgetPrivate
*
priv
=
L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE
(
self
);
GtkWidget
*
widget
;
GtkWidget
*
widget
;
const
char
*
str
;
const
char
*
str
;
char
*
s
;
char
*
s
=
NULL
;
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
priv
->
builder
,
"gateway_entry"
));
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
priv
->
builder
,
"gateway_entry"
));
str
=
gtk_entry_get_text
(
GTK_ENTRY
(
widget
));
str
=
gtk_entry_get_text
(
GTK_ENTRY
(
widget
));
...
@@ -253,8 +254,7 @@ advanced_button_clicked_cb (GtkWidget *button, gpointer user_data)
...
@@ -253,8 +254,7 @@ advanced_button_clicked_cb (GtkWidget *button, gpointer user_data)
{
{
L2tpPluginUiWidget
*
self
=
L2TP_PLUGIN_UI_WIDGET
(
user_data
);
L2tpPluginUiWidget
*
self
=
L2TP_PLUGIN_UI_WIDGET
(
user_data
);
L2tpPluginUiWidgetPrivate
*
priv
=
L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE
(
self
);
L2tpPluginUiWidgetPrivate
*
priv
=
L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE
(
self
);
GtkWidget
*
dialog
;
GtkWidget
*
dialog
,
*
toplevel
;
GtkWindow
*
toplevel
;
toplevel
=
gtk_widget_get_toplevel
(
priv
->
widget
);
toplevel
=
gtk_widget_get_toplevel
(
priv
->
widget
);
g_return_if_fail
(
gtk_widget_is_toplevel
(
toplevel
));
g_return_if_fail
(
gtk_widget_is_toplevel
(
toplevel
));
...
@@ -283,8 +283,7 @@ ipsec_button_clicked_cb (GtkWidget *button, gpointer user_data)
...
@@ -283,8 +283,7 @@ ipsec_button_clicked_cb (GtkWidget *button, gpointer user_data)
{
{
L2tpPluginUiWidget
*
self
=
L2TP_PLUGIN_UI_WIDGET
(
user_data
);
L2tpPluginUiWidget
*
self
=
L2TP_PLUGIN_UI_WIDGET
(
user_data
);
L2tpPluginUiWidgetPrivate
*
priv
=
L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE
(
self
);
L2tpPluginUiWidgetPrivate
*
priv
=
L2TP_PLUGIN_UI_WIDGET_GET_PRIVATE
(
self
);
GtkWidget
*
dialog
;
GtkWidget
*
dialog
,
*
toplevel
;
GtkWindow
*
toplevel
;
toplevel
=
gtk_widget_get_toplevel
(
priv
->
widget
);
toplevel
=
gtk_widget_get_toplevel
(
priv
->
widget
);
g_return_if_fail
(
gtk_widget_is_toplevel
(
toplevel
));
g_return_if_fail
(
gtk_widget_is_toplevel
(
toplevel
));
...
@@ -576,7 +575,7 @@ update_connection (NMVpnPluginUiWidgetInterface *iface,
...
@@ -576,7 +575,7 @@ update_connection (NMVpnPluginUiWidgetInterface *iface,
NMSettingVPN
*
s_vpn
;
NMSettingVPN
*
s_vpn
;
GtkWidget
*
widget
;
GtkWidget
*
widget
;
const
char
*
str
;
const
char
*
str
;
char
*
s
;
char
*
s
=
NULL
;
gboolean
valid
=
FALSE
;
gboolean
valid
=
FALSE
;
if
(
!
check_validity
(
self
,
error
))
if
(
!
check_validity
(
self
,
error
))
...
@@ -669,7 +668,7 @@ nm_vpn_plugin_ui_widget_interface_new (NMConnection *connection, GError **error)
...
@@ -669,7 +668,7 @@ nm_vpn_plugin_ui_widget_interface_new (NMConnection *connection, GError **error)
g_object_unref
(
object
);
g_object_unref
(
object
);
return
NULL
;
return
NULL
;
}
}
g_free
(
ui_file
);
g_free
(
ui_file
);
priv
->
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
priv
->
builder
,
"l2tp-vbox"
));
priv
->
widget
=
GTK_WIDGET
(
gtk_builder_get_object
(
priv
->
builder
,
"l2tp-vbox"
));
if
(
!
priv
->
widget
)
{
if
(
!
priv
->
widget
)
{
...
...
src/nm-l2tp-pppd-plugin.c
View file @
76bf1d39
...
@@ -230,13 +230,13 @@ nm_ip_up (void *data, int arg)
...
@@ -230,13 +230,13 @@ nm_ip_up (void *data, int arg)
}
}
static
int
static
int
get_chap_check
()
get_chap_check
(
void
)
{
{
return
1
;
return
1
;
}
}
static
int
static
int
get_pap_check
()
get_pap_check
(
void
)
{
{
return
1
;
return
1
;
}
}
...
...
src/nm-l2tp-service.c
View file @
76bf1d39
...
@@ -24,11 +24,11 @@
...
@@ -24,11 +24,11 @@
* (C) Copyright 2011 Geo Carncross <geocar@gmail.com>
* (C) Copyright 2011 Geo Carncross <geocar@gmail.com>
* (C) Copyright 2012 Sergey Prokhorov <me@seriyps.ru>
* (C) Copyright 2012 Sergey Prokhorov <me@seriyps.ru>
*/
*/
#ifdef HAVE_CONFIG_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#include <config.h>
#endif
#endif
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <string.h>
#include <stdlib.h>
#include <stdlib.h>
...
@@ -129,65 +129,102 @@ enum {
...
@@ -129,65 +129,102 @@ enum {
static
guint
signals
[
LAST_SIGNAL
]
=
{
0
};
static
guint
signals
[
LAST_SIGNAL
]
=
{
0
};
static
gboolean
static
gboolean
ensure_killed
(
gpointer
data
)
_service_cache_credentials
(
NML2tpPppService
*
self
,
NMConnection
*
connection
,
GError
**
error
)
{
{
int
pid
=
GPOINTER_TO_INT
(
data
);
NML2tpPppServicePrivate
*
priv
=
NM_L2TP_PPP_SERVICE_GET_PRIVATE
(
self
);
NMSettingVPN
*
s_vpn
;
const
char
*
username
,
*
password
,
*
domain
;
if
(
kill
(
pid
,
0
)
==
0
){
g_return_val_if_fail
(
self
!=
NULL
,
FALSE
);
g_warning
(
"Kill process %d by SIGKILL"
,
pid
);
g_return_val_if_fail
(
connection
!=
NULL
,
FALSE
);
kill
(
pid
,
SIGKILL
);
s_vpn
=
(
NMSettingVPN
*
)
nm_connection_get_setting
(
connection
,
NM_TYPE_SETTING_VPN
);
if
(
!
s_vpn
)
{
g_set_error_literal
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID
,
_
(
"Could not find secrets (connection invalid, no vpn setting)."
));
return
FALSE
;
}
}
return
FALSE
;
/* Username; try L2TP specific username first, then generic username */
}
username
=
nm_setting_vpn_get_data_item
(
s_vpn
,
NM_L2TP_KEY_USER
);
if
(
username
&&
strlen
(
username
))
{
/* FIXME: This check makes about 0 sense. */
if
(
!
username
||
!
strlen
(
username
))
{
g_set_error_literal
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID
,
_
(
"Invalid VPN username."
));
return
FALSE
;
}
}
else
{
username
=
nm_setting_vpn_get_user_name
(
s_vpn
);
if
(
!
username
||
!
strlen
(
username
))
{
g_set_error_literal
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID
,
_
(
"Missing VPN username."
));
return
FALSE
;
}
}
password
=
nm_setting_vpn_get_secret
(
s_vpn
,
NM_L2TP_KEY_PASSWORD
);
if
(
!
password
||
!
strlen
(
password
))
{
g_set_error_literal
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID
,
_
(
"Missing or invalid VPN password."
));
return
FALSE
;
}
domain
=
nm_setting_vpn_get_data_item
(
s_vpn
,
NM_L2TP_KEY_DOMAIN
);
if
(
domain
&&
strlen
(
domain
))
priv
->
domain
=
g_strdup
(
domain
);
priv
->
username
=
g_strdup
(
username
);
priv
->
password
=
g_strdup
(
password
);
return
TRUE
;
}
static
NML2tpPppService
*
static
NML2tpPppService
*
nm_l2tp_ppp_service_new
(
void
)
nm_l2tp_ppp_service_new
(
NMConnection
*
connection
,
GError
**
error
)
{
{
DBusGConnection
*
connection
;
NML2tpPppService
*
self
=
NULL
;
DBusGConnection
*
bus
;
DBusGProxy
*
proxy
;
DBusGProxy
*
proxy
;
GError
*
error
=
NULL
;
gboolean
success
=
FALSE
;
gboolean
success
=
FALSE
;
guint
request_name_result
;
guint
result
;
GObject
*
object
;
object
=
g_object_new
(
NM_TYPE_L2TP_PPP_SERVICE
,
NULL
);
dbus_connection_set_change_sigpipe
(
TRUE
);
bus
=
dbus_g_bus_get
(
DBUS_BUS_SYSTEM
,
error
);
if
(
!
bus
)
connection
=
dbus_g_bus_get
(
DBUS_BUS_SYSTEM
,
&
error
);
if
(
!
connection
)
{
g_warning
(
_
(
"Could not get the system bus. Make sure "
"the message bus daemon is running! Message: %s"
),
error
->
message
);
g_error_free
(
error
);
g_object_unref
(
object
);
return
NULL
;
return
NULL
;
}
dbus_connection_set_change_sigpipe
(
TRUE
);
proxy
=
dbus_g_proxy_new_for_name
(
connection
,
"org.freedesktop.DBus"
,
"/org/freedesktop/DBus"
,
"org.freedesktop.DBus"
);
if
(
dbus_g_proxy_call
(
proxy
,
"RequestName"
,
&
error
,
proxy
=
dbus_g_proxy_new_for_name
(
bus
,
"org.freedesktop.DBus"
,
"/org/freedesktop/DBus"
,
"org.freedesktop.DBus"
);
g_assert
(
proxy
);
if
(
dbus_g_proxy_call
(
proxy
,
"RequestName"
,
error
,
G_TYPE_STRING
,
NM_DBUS_SERVICE_L2TP_PPP
,
G_TYPE_STRING
,
NM_DBUS_SERVICE_L2TP_PPP
,
G_TYPE_UINT
,
0
,
G_TYPE_UINT
,
0
,
G_TYPE_INVALID
,
G_TYPE_INVALID
,
G_TYPE_UINT
,
&
re
quest_name_re
sult
,
G_TYPE_UINT
,
&
result
,
G_TYPE_INVALID
))
{
G_TYPE_INVALID
))
{
dbus_g_connection_register_g_object
(
connection
,
NM_DBUS_PATH_L2TP_PPP
,
object
);
self
=
(
NML2tpPppService
*
)
g_object_new
(
NM_TYPE_L2TP_PPP_SERVICE
,
NULL
);
g_assert
(
self
);
dbus_g_connection_register_g_object
(
bus
,
NM_DBUS_PATH_L2TP_PPP
,
G_OBJECT
(
self
));
success
=
TRUE
;
success
=
TRUE
;
}
else
{
}
else
{
g_warning
(
_
(
"Could not register D-Bus service name. Message: %s"
),
error
->
message
);
g_warning
(
_
(
"Could not register D-Bus service name. Message: %s"
),
(
*
error
)
->
message
);
g_error_free
(
error
);
g_object_unref
(
object
);
object
=
NULL
;
}
}
g_object_unref
(
proxy
);
g_object_unref
(
proxy
);
return
(
NML2tpPppService
*
)
object
;
dbus_g_connection_unref
(
bus
);
return
self
;
}
}
static
void
static
void
...
@@ -251,71 +288,6 @@ nm_l2tp_ppp_service_class_init (NML2tpPppServiceClass *service_class)
...
@@ -251,71 +288,6 @@ nm_l2tp_ppp_service_class_init (NML2tpPppServiceClass *service_class)
&
dbus_glib_nm_l2tp_pppd_service_object_info
);
&
dbus_glib_nm_l2tp_pppd_service_object_info
);
}
}
static
gboolean
nm_l2tp_ppp_service_cache_credentials
(
NML2tpPppService
*
self
,
NMConnection
*
connection
,
GError
**
error
)
{
NML2tpPppServicePrivate
*
priv
=
NM_L2TP_PPP_SERVICE_GET_PRIVATE
(
self
);
NMSettingVPN
*
s_vpn
;
const
char
*
username
,
*
password
,
*
domain
;
g_return_val_if_fail
(
self
!=
NULL
,
FALSE
);
g_return_val_if_fail
(
connection
!=
NULL
,
FALSE
);
s_vpn
=
(
NMSettingVPN
*
)
nm_connection_get_setting
(
connection
,
NM_TYPE_SETTING_VPN
);
if
(
!
s_vpn
)
{
g_set_error
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID
,
"%s"
,
_
(
"Could not find secrets (connection invalid, no vpn setting)."
));
return
FALSE
;
}
/* Username; try L2TP specific username first, then generic username */
username
=
nm_setting_vpn_get_data_item
(
s_vpn
,
NM_L2TP_KEY_USER
);
if
(
username
&&
strlen
(
username
))
{
/* FIXME: This check makes about 0 sense. */
if
(
!
username
||
!
strlen
(
username
))
{
g_set_error
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID
,
"%s"
,
_
(
"Invalid VPN username."
));
return
FALSE
;
}
}
else
{
username
=
nm_setting_vpn_get_user_name
(
s_vpn
);
if
(
!
username
||
!
strlen
(
username
))
{
g_set_error
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID
,
"%s"
,
_
(
"Missing VPN username."
));
return
FALSE
;
}
}
password
=
nm_setting_vpn_get_secret
(
s_vpn
,
NM_L2TP_KEY_PASSWORD
);
if
(
!
password
||
!
strlen
(
password
))
{
g_set_error
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_CONNECTION_INVALID
,
"%s"
,
_
(
"Missing or invalid VPN password."
));
return
FALSE
;
}
domain
=
nm_setting_vpn_get_data_item
(
s_vpn
,
NM_L2TP_KEY_DOMAIN
);
if
(
domain
&&
strlen
(
domain
))
priv
->
domain
=
g_strdup
(
domain
);
priv
->
username
=
g_strdup
(
username
);
priv
->
password
=
g_strdup
(
password
);
return
TRUE
;
}
static
gboolean
static
gboolean
impl_l2tp_service_need_secrets
(
NML2tpPppService
*
self
,
impl_l2tp_service_need_secrets
(
NML2tpPppService
*
self
,
char
**
out_username
,
char
**
out_username
,
...
@@ -543,7 +515,6 @@ validate_one_property (const char *key, const char *value, gpointer user_data)
...
@@ -543,7 +515,6 @@ validate_one_property (const char *key, const char *value, gpointer user_data)
_
(
"invalid integer property '%s'"
),
_
(
"invalid integer property '%s'"
),
key
);
key
);
break
;
break
;
case
G_TYPE_BOOLEAN
:
case
G_TYPE_BOOLEAN
:
if
(
!
strcmp
(
value
,
"yes"
)
||
!
strcmp
(
value
,
"no"
))
if
(
!
strcmp
(
value
,
"yes"
)
||
!
strcmp
(
value
,
"no"
))
return
;
/* valid */
return
;
/* valid */
...
@@ -569,7 +540,7 @@ validate_one_property (const char *key, const char *value, gpointer user_data)
...
@@ -569,7 +540,7 @@ validate_one_property (const char *key, const char *value, gpointer user_data)
g_set_error
(
info
->
error
,
g_set_error
(
info
->
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS
,
NM_VPN_PLUGIN_ERROR_BAD_ARGUMENTS
,
_
(
"property '%s' invalid or not supported
x
"
),
_
(
"property '%s' invalid or not supported"
),
key
);
key
);
}
}
}
}
...
@@ -758,75 +729,12 @@ pppd_timed_out (gpointer user_data)
...
@@ -758,75 +729,12 @@ pppd_timed_out (gpointer user_data)
{
{
NML2tpPlugin
*
plugin
=
NM_L2TP_PLUGIN
(
user_data
);
NML2tpPlugin
*
plugin
=
NM_L2TP_PLUGIN
(
user_data
);
g_warning
(
_
(
"Looks like pppd didn't initialize our dbus module"
));
g_warning
(
_
(
"
pppd timeout.
Looks like pppd didn't initialize our dbus module"
));
nm_vpn_plugin_failure
(
NM_VPN_PLUGIN
(
plugin
),
NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT
);
nm_vpn_plugin_failure
(
NM_VPN_PLUGIN
(
plugin
),
NM_VPN_CONNECTION_STATE_REASON_SERVICE_START_TIMEOUT
);
return
FALSE
;
return
FALSE
;
}
}
static
void
remove_timeout_handler
(
NML2tpPlugin
*
plugin
)
{
NML2tpPluginPrivate
*
priv
=
NM_L2TP_PLUGIN_GET_PRIVATE
(
plugin
);
if
(
priv
->
ppp_timeout_handler
)
{
g_source_remove
(
priv
->
ppp_timeout_handler
);
priv
->
ppp_timeout_handler
=
0
;
}
}
static
void
service_plugin_alive_cb
(
NML2tpPppService
*
service
,
NML2tpPlugin
*
plugin
)
{
remove_timeout_handler
(
plugin
);
}
static
void
service_ppp_state_cb
(
NML2tpPppService
*
service
,
guint32
ppp_state
,
NML2tpPlugin
*
plugin
)
{
NMVPNServiceState
plugin_state
=
nm_vpn_plugin_get_state
(
NM_VPN_PLUGIN
(
plugin
));
switch
(
ppp_state
)
{
case
NM_PPP_STATUS_DEAD
:
case
NM_PPP_STATUS_DISCONNECT
:
if
(
plugin_state
==
NM_VPN_SERVICE_STATE_STARTED
)
nm_vpn_plugin_disconnect
(
NM_VPN_PLUGIN
(
plugin
),
NULL
);
else
if
(
plugin_state
==
NM_VPN_SERVICE_STATE_STARTING
)
nm_vpn_plugin_failure
(
NM_VPN_PLUGIN
(
plugin
),
NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED
);
break
;
default:
break
;
}
}
static
void
nm_gvalue_destroy
(
gpointer
data
)
{
g_value_unset
((
GValue
*
)
data
);
g_slice_free
(
GValue
,
data
);
}
static
GValue
*
nm_gvalue_dup
(
const
GValue
*
value
)
{
GValue
*
value_dup
;
value_dup
=
g_slice_new0
(
GValue
);
g_value_init
(
value_dup
,
G_VALUE_TYPE
(
value
));
g_value_copy
(
value
,
value_dup
);
return
value_dup
;
}
static
void
copy_hash
(
gpointer
key
,
gpointer
value
,
gpointer
user_data
)
{
g_hash_table_insert
((
GHashTable
*
)
user_data
,
g_strdup
(
key
),
nm_gvalue_dup
((
GValue
*
)
value
));
}
static
gboolean
static
gboolean
nm_l2tp_resolve_gateway
(
NML2tpPlugin
*
plugin
,
nm_l2tp_resolve_gateway
(
NML2tpPlugin
*
plugin
,
NMSettingVPN
*
s_vpn
,
NMSettingVPN
*
s_vpn
,
...
@@ -923,31 +831,6 @@ nm_l2tp_resolve_gateway (NML2tpPlugin *plugin,
...
@@ -923,31 +831,6 @@ nm_l2tp_resolve_gateway (NML2tpPlugin *plugin,
return
TRUE
;
return
TRUE
;
}
}
static
void
service_ip4_config_cb
(
NML2tpPppService
*
service
,
GHashTable
*
config_hash
,
NMVPNPlugin
*
plugin
)
{
NML2tpPluginPrivate
*
priv
=
NM_L2TP_PLUGIN_GET_PRIVATE
(
plugin
);
GHashTable
*
hash
;
GValue
*
value
;
hash
=
g_hash_table_new_full
(
g_str_hash
,
g_str_equal
,
g_free
,
nm_gvalue_destroy
);
g_hash_table_foreach
(
config_hash
,
copy_hash
,
hash
);
/* Insert the external VPN gateway into the table, which the pppd plugin
* simply doesn't know about.
*/
value
=
g_slice_new0
(
GValue
);
g_value_init
(
value
,
G_TYPE_UINT
);
g_value_set_uint
(
value
,
priv
->
naddr
);
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_GATEWAY
),
value
);
nm_vpn_plugin_set_ip4_config
(
plugin
,
hash
);
g_hash_table_destroy
(
hash
);
}
static
void
static
void
free_args
(
GPtrArray
*
args
)
free_args
(
GPtrArray
*
args
)
{
{
...
@@ -996,12 +879,13 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
...
@@ -996,12 +879,13 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
NMSettingVPN
*
s_vpn
,
NMSettingVPN
*
s_vpn
,
GError
**
error
)
GError
**
error
)
{
{
NML2tpPluginPrivate
*
priv
=
NM_L2TP_PLUGIN_GET_PRIVATE
(
plugin
);
//
NML2tpPluginPrivate *priv = NM_L2TP_PLUGIN_GET_PRIVATE (plugin);
const
char
*
ipsec_binary
;
const
char
*
ipsec_binary
;
const
char
*
value
;
const
char
*
value
;
char
tmp_secrets
[
128
];
char
tmp_secrets
[
128
];
char
cmd1
[
4096
],
cmd11
[
4096
],
cmd2
[
4096
];
char
cmd1
[
4096
],
cmd11
[
4096
],
cmd2
[
4096
];
char
session_name
[
128
];
char
session_name
[
128
];
guint
sys
=
0
;
FILE
*
fp
;
FILE
*
fp
;
if
(
!
(
ipsec_binary
=
nm_find_ipsec
()))
{
if
(
!
(
ipsec_binary
=
nm_find_ipsec
()))
{
...
@@ -1014,11 +898,11 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
...
@@ -1014,11 +898,11 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
}
}
sprintf
(
session_name
,
"nm-ipsec-l2tpd-%d"
,
getpid
());
sprintf
(
session_name
,
"nm-ipsec-l2tpd-%d"
,
getpid
());
(
void
)
system
(
". /var/run/pluto/ipsec.info;"
sys
+=
system
(
". /var/run/pluto/ipsec.info;"
"PATH=/usr/local/sbin:/usr/sbin:/sbin; export PATH;"
"PATH=/usr/local/sbin:/usr/sbin:/sbin; export PATH;"
"[
\"
x$defaultrouteaddr
\"
=
\"
x
\"
] && ipsec setup restart"
);
"[
\"
x$defaultrouteaddr
\"
=
\"
x
\"
] && ipsec setup restart"
);
(
void
)
system
(
"PATH=/usr/local/sbin:/usr/sbin:/sbin ipsec "
sys
+=
system
(
"PATH=/usr/local/sbin:/usr/sbin:/sbin ipsec "
" --listen"
);
" --listen"
);
sprintf
(
cmd1
,
". /var/run/pluto/ipsec.info;"
sprintf
(
cmd1
,
". /var/run/pluto/ipsec.info;"
"PATH=/usr/local/sbin:/usr/sbin:/sbin ipsec addconn "
"PATH=/usr/local/sbin:/usr/sbin:/sbin ipsec addconn "
...
@@ -1051,7 +935,7 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
...
@@ -1051,7 +935,7 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
}
}
if
(
!
(
fp
=
fopen
(
"/etc/ipsec.secrets"
,
"w"
)))
{
if
(
!
(
fp
=
fopen
(
"/etc/ipsec.secrets"
,
"w"
)))
{
(
void
)
rename
(
tmp_secrets
,
"/etc/ipsec.secrets"
);
rename
(
tmp_secrets
,
"/etc/ipsec.secrets"
);
g_set_error
(
error
,
g_set_error
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED
,
NM_VPN_PLUGIN_ERROR_LAUNCH_FAILED
,
...
@@ -1070,13 +954,15 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
...
@@ -1070,13 +954,15 @@ nm_l2tp_start_ipsec(NML2tpPlugin *plugin,
fprintf
(
fp
,
": PSK
\"
%s
\"\n
"
,
value
);
fprintf
(
fp
,
": PSK
\"
%s
\"\n
"
,
value
);
fclose
(
fp
);
fclose
(
fp
);
(
void
)
system
(
"PATH=
\"
/sbin:/usr/sbin:/usr/local/sbin:$PATH
\"
ipsec secrets"
);
sys
+=
system
(
"PATH=
\"
/sbin:/usr/sbin:/usr/local/sbin:$PATH
\"
ipsec secrets"
);
(
void
)
system
(
cmd11
);
sys
+=
system
(
cmd11
);
(
void
)
system
(
cmd1
);
sys
+=
system
(
cmd1
);
(
void
)
system
(
cmd2
);
sys
+=
system
(
cmd2
);
(
void
)
rename
(
tmp_secrets
,
"/etc/ipsec.secrets"
);
rename
(
tmp_secrets
,
"/etc/ipsec.secrets"
);
(
void
)
system
(
"PATH=
\"
/sbin:/usr/sbin:/usr/local/sbin:$PATH
\"
ipsec secrets"
);
sys
+=
system
(
"PATH=
\"
/sbin:/usr/sbin:/usr/local/sbin:$PATH
\"
ipsec secrets"
);
if
(
sys
!=
0
)
g_warning
(
"Possible error in IPSec setup."
);
g_message
(
_
(
"ipsec ready for action"
));
g_message
(
_
(
"ipsec ready for action"
));
return
TRUE
;
return
TRUE
;
...
@@ -1199,7 +1085,7 @@ is_port_free(int port)
...
@@ -1199,7 +1085,7 @@ is_port_free(int port)
return
TRUE
;
return
TRUE
;
}
}
/* XXX: currently unused! May be useful if l2tp client doesn't accept 0 as port number
*/
/* XXX: currently unused! May be useful if l2tp client doesn't accept 0 as port number
static int
static int
get_free_l2tp_port(void)
get_free_l2tp_port(void)
{
{
...
@@ -1208,11 +1094,12 @@ get_free_l2tp_port(void)
...
@@ -1208,11 +1094,12 @@ get_free_l2tp_port(void)
while (!is_port_free (port) && port < 65535)
while (!is_port_free (port) && port < 65535)
port++;
port++;
if
(
port
==
65535
)
/
* oh no.. */
if (port == 65535) /
/ oh no..
return -1;
return -1;
g_message("found free port %d", port);
g_message("found free port %d", port);
return port;
return port;
}
}
*/
static
gboolean
static
gboolean
nm_l2tp_config_write
(
NML2tpPlugin
*
plugin
,
nm_l2tp_config_write
(
NML2tpPlugin
*
plugin
,
...
@@ -1224,7 +1111,7 @@ nm_l2tp_config_write (NML2tpPlugin *plugin,
...
@@ -1224,7 +1111,7 @@ nm_l2tp_config_write (NML2tpPlugin *plugin,
char
*
filename
;
char
*
filename
;
pid_t
pid
=
getpid
();
pid_t
pid
=
getpid
();
const
char
*
value
;
const
char
*
value
;
const
char
*
username
;
//
const char *username;
gint
conf_fd
=
-
1
;
gint
conf_fd
=
-
1
;
gint
ipsec_fd
=
-
1
;
gint
ipsec_fd
=
-
1
;
gint
pppopt_fd
=
-
1
;
gint
pppopt_fd
=
-
1
;
...
@@ -1413,6 +1300,94 @@ nm_l2tp_config_write (NML2tpPlugin *plugin,
...
@@ -1413,6 +1300,94 @@ nm_l2tp_config_write (NML2tpPlugin *plugin,
return
TRUE
;
return
TRUE
;
}
}
static
void
remove_timeout_handler
(
NML2tpPlugin
*
plugin
)
{
NML2tpPluginPrivate
*
priv
=
NM_L2TP_PLUGIN_GET_PRIVATE
(
plugin
);
if
(
priv
->
ppp_timeout_handler
)
{
g_source_remove
(
priv
->
ppp_timeout_handler
);
priv
->
ppp_timeout_handler
=
0
;
}
}
static
void
service_plugin_alive_cb
(
NML2tpPppService
*
service
,
NML2tpPlugin
*
plugin
)
{
remove_timeout_handler
(
plugin
);
}
static
void
service_ppp_state_cb
(
NML2tpPppService
*
service
,
guint32
ppp_state
,
NML2tpPlugin
*
plugin
)
{
NMVPNServiceState
plugin_state
=
nm_vpn_plugin_get_state
(
NM_VPN_PLUGIN
(
plugin
));
switch
(
ppp_state
)
{
case
NM_PPP_STATUS_DEAD
:
case
NM_PPP_STATUS_DISCONNECT
:
if
(
plugin_state
==
NM_VPN_SERVICE_STATE_STARTED
)
nm_vpn_plugin_disconnect
(
NM_VPN_PLUGIN
(
plugin
),
NULL
);
else
if
(
plugin_state
==
NM_VPN_SERVICE_STATE_STARTING
)
nm_vpn_plugin_failure
(
NM_VPN_PLUGIN
(
plugin
),
NM_VPN_PLUGIN_FAILURE_CONNECT_FAILED
);
break
;
default:
break
;
}
}
static
void
nm_gvalue_destroy
(
gpointer
data
)
{
g_value_unset
((
GValue
*
)
data
);
g_slice_free
(
GValue
,
data
);
}
static
GValue
*
nm_gvalue_dup
(
const
GValue
*
value
)
{
GValue
*
value_dup
;
value_dup
=
g_slice_new0
(
GValue
);
g_value_init
(
value_dup
,
G_VALUE_TYPE
(
value
));
g_value_copy
(
value
,
value_dup
);
return
value_dup
;
}
static
void
copy_hash
(
gpointer
key
,
gpointer
value
,
gpointer
user_data
)
{
g_hash_table_insert
((
GHashTable
*
)
user_data
,
g_strdup
(
key
),
nm_gvalue_dup
((
GValue
*
)
value
));
}
static
void
service_ip4_config_cb
(
NML2tpPppService
*
service
,
GHashTable
*
config_hash
,
NMVPNPlugin
*
plugin
)
{
NML2tpPluginPrivate
*
priv
=
NM_L2TP_PLUGIN_GET_PRIVATE
(
plugin
);
GHashTable
*
hash
;
GValue
*
value
;
hash
=
g_hash_table_new_full
(
g_str_hash
,
g_str_equal
,
g_free
,
nm_gvalue_destroy
);
g_hash_table_foreach
(
config_hash
,
copy_hash
,
hash
);
/* Insert the external VPN gateway into the table, which the pppd plugin
* simply doesn't know about.
*/
value
=
g_slice_new0
(
GValue
);
g_value_init
(
value
,
G_TYPE_UINT
);
g_value_set_uint
(
value
,
priv
->
naddr
);
g_hash_table_insert
(
hash
,
g_strdup
(
NM_L2TP_KEY_GATEWAY
),
value
);
nm_vpn_plugin_set_ip4_config
(
plugin
,
hash
);
g_hash_table_destroy
(
hash
);
}
static
gboolean
static
gboolean
real_connect
(
NMVPNPlugin
*
plugin
,
real_connect
(
NMVPNPlugin
*
plugin
,
NMConnection
*
connection
,
NMConnection
*
connection
,
...
@@ -1442,7 +1417,7 @@ real_connect (NMVPNPlugin *plugin,
...
@@ -1442,7 +1417,7 @@ real_connect (NMVPNPlugin *plugin,
priv
->
connection
=
NULL
;
priv
->
connection
=
NULL
;
}
}
priv
->
service
=
nm_l2tp_ppp_service_new
();
priv
->
service
=
nm_l2tp_ppp_service_new
(
connection
,
error
);
if
(
!
priv
->
service
)
{
if
(
!
priv
->
service
)
{
g_set_error
(
error
,
g_set_error
(
error
,
NM_VPN_PLUGIN_ERROR
,
NM_VPN_PLUGIN_ERROR
,
...
@@ -1461,7 +1436,7 @@ real_connect (NMVPNPlugin *plugin,
...
@@ -1461,7 +1436,7 @@ real_connect (NMVPNPlugin *plugin,
/* Cache the username and password so we can relay the secrets to the pppd
/* Cache the username and password so we can relay the secrets to the pppd
* plugin when it asks for them.
* plugin when it asks for them.
*/
*/
if
(
!
nm_l2tp_ppp
_service_cache_credentials
(
priv
->
service
,
connection
,
error
))
if
(
!
_service_cache_credentials
(
priv
->
service
,
connection
,
error
))
return
FALSE
;
return
FALSE
;
if
(
!
nm_l2tp_resolve_gateway
(
NM_L2TP_PLUGIN
(
plugin
),
s_vpn
,
error
))
if
(
!
nm_l2tp_resolve_gateway
(
NM_L2TP_PLUGIN
(
plugin
),
s_vpn
,
error
))
...
@@ -1490,16 +1465,37 @@ real_need_secrets (NMVPNPlugin *plugin,
...
@@ -1490,16 +1465,37 @@ real_need_secrets (NMVPNPlugin *plugin,
char
**
setting_name
,
char
**
setting_name
,
GError
**
error
)
GError
**
error
)
{
{
NMSettingVPN
*
s_vpn
;
NMSetting
*
s_vpn
;
NMSettingSecretFlags
flags
=
NM_SETTING_SECRET_FLAG_NONE
;
g_return_val_if_fail
(
NM_IS_VPN_PLUGIN
(
plugin
),
FALSE
);
g_return_val_if_fail
(
NM_IS_VPN_PLUGIN
(
plugin
),
FALSE
);
g_return_val_if_fail
(
NM_IS_CONNECTION
(
connection
),
FALSE
);
g_return_val_if_fail
(
NM_IS_CONNECTION
(
connection
),
FALSE
);
s_vpn
=
NM_SETTING_VPN
(
nm_connection_get_setting
(
connection
,
NM_TYPE_SETTING_VPN
)
);
s_vpn
=
nm_connection_get_setting
(
connection
,
NM_TYPE_SETTING_VPN
);
if
(
!
nm_setting_vpn_get_secret
(
s_vpn
,
NM_L2TP_KEY_PASSWORD
))
{
nm_setting_get_secret_flags
(
NM_SETTING
(
s_vpn
),
NM_L2TP_KEY_PASSWORD
,
&
flags
,
NULL
);
*
setting_name
=
NM_SETTING_VPN_SETTING_NAME
;
return
TRUE
;
/* Don't need the password if it's not required */
if
(
flags
&
NM_SETTING_SECRET_FLAG_NOT_REQUIRED
)
return
FALSE
;
/* Don't need the password if we already have one */
if
(
nm_setting_vpn_get_secret
(
NM_SETTING_VPN
(
s_vpn
),
NM_L2TP_KEY_PASSWORD
))
return
FALSE
;
/* Otherwise we need a password */
*
setting_name
=
NM_SETTING_VPN_SETTING_NAME
;
return
TRUE
;
}
static
gboolean
ensure_killed
(
gpointer
data
)
{
int
pid
=
GPOINTER_TO_INT
(
data
);
if
(
kill
(
pid
,
0
)
==
0
){
g_warning
(
"Kill process %d by SIGKILL"
,
pid
);
kill
(
pid
,
SIGKILL
);
}
}
return
FALSE
;
return
FALSE
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment