Start transition to nm-wireguard naming
parent
5811801078
commit
0287e14285
|
@ -29,7 +29,7 @@ m4/gtk-doc.m4
|
||||||
m4/intltool.m4
|
m4/intltool.m4
|
||||||
m4/libtool.m4
|
m4/libtool.m4
|
||||||
m4/lt*.m4
|
m4/lt*.m4
|
||||||
appdata/network-manager-openvpn.metainfo.xml
|
appdata/network-manager-wireguard.metainfo.xml
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
/cscope.files
|
/cscope.files
|
||||||
|
@ -43,9 +43,9 @@ appdata/network-manager-openvpn.metainfo.xml
|
||||||
test-*.log
|
test-*.log
|
||||||
|
|
||||||
auth-dialog/nm-openvpn-auth-dialog
|
auth-dialog/nm-openvpn-auth-dialog
|
||||||
nm-openvpn-service.name
|
nm-wireguard-service.name
|
||||||
nm-openvpn.desktop
|
nm-openvpn.desktop
|
||||||
src/nm-openvpn-service
|
src/nm-wireguard-service
|
||||||
src/nm-openvpn-service-openvpn-helper
|
src/nm-openvpn-service-openvpn-helper
|
||||||
properties/tests/test-import-export
|
properties/tests/test-import-export
|
||||||
properties/tests/test-import-export-glib
|
properties/tests/test-import-export-glib
|
||||||
|
|
32
Makefile.am
32
Makefile.am
|
@ -23,12 +23,12 @@ plugindir = $(libdir)/NetworkManager
|
||||||
plugin_LTLIBRARIES =
|
plugin_LTLIBRARIES =
|
||||||
|
|
||||||
dbusservicedir = $(sysconfdir)/dbus-1/system.d
|
dbusservicedir = $(sysconfdir)/dbus-1/system.d
|
||||||
dbusservice_DATA = nm-openvpn-service.conf
|
dbusservice_DATA = nm-wireguard-service.conf
|
||||||
|
|
||||||
nmvpnservicedir = $(NM_VPN_SERVICE_DIR)
|
nmvpnservicedir = $(NM_VPN_SERVICE_DIR)
|
||||||
nmvpnservice_DATA = nm-openvpn-service.name
|
nmvpnservice_DATA = nm-wireguard-service.name
|
||||||
|
|
||||||
uidir = $(datadir)/gnome-vpn-properties/openvpn
|
uidir = $(datadir)/gnome-vpn-properties/wireguard
|
||||||
ui_DATA =
|
ui_DATA =
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
@ -49,7 +49,7 @@ src_cppflags = \
|
||||||
-DLOCALSTATEDIR=\""$(localstatedir)"\" \
|
-DLOCALSTATEDIR=\""$(localstatedir)"\" \
|
||||||
-DDATADIR=\"$(datadir)\" \
|
-DDATADIR=\"$(datadir)\" \
|
||||||
-DNM_OPENVPN_LOCALEDIR=\"$(datadir)/locale\" \
|
-DNM_OPENVPN_LOCALEDIR=\"$(datadir)/locale\" \
|
||||||
-DG_LOG_DOMAIN=\"nm-openvpn\" \
|
-DG_LOG_DOMAIN=\"nm-wireguard\" \
|
||||||
-I$(srcdir)/shared \
|
-I$(srcdir)/shared \
|
||||||
$(GLIB_CFLAGS) \
|
$(GLIB_CFLAGS) \
|
||||||
$(LIBNM_CFLAGS)
|
$(LIBNM_CFLAGS)
|
||||||
|
@ -62,16 +62,16 @@ src_libnm_utils_la_LIBADD = \
|
||||||
$(GLIB_LIBS) \
|
$(GLIB_LIBS) \
|
||||||
$(LIBNM_LIBS)
|
$(LIBNM_LIBS)
|
||||||
|
|
||||||
libexec_PROGRAMS += src/nm-openvpn-service
|
libexec_PROGRAMS += src/nm-wireguard-service
|
||||||
|
|
||||||
src_nm_openvpn_service_CPPFLAGS = $(src_cppflags)
|
src_nm_wireguard_service_CPPFLAGS = $(src_cppflags)
|
||||||
src_nm_openvpn_service_LDFLAGS = \
|
src_nm_wireguard_service_LDFLAGS = \
|
||||||
-Wl,--version-script="$(srcdir)/linker-script-binary.ver"
|
-Wl,--version-script="$(srcdir)/linker-script-binary.ver"
|
||||||
src_nm_openvpn_service_LDADD = \
|
src_nm_wireguard_service_LDADD = \
|
||||||
src/libnm-utils.la \
|
src/libnm-utils.la \
|
||||||
$(GLIB_LIBS) \
|
$(GLIB_LIBS) \
|
||||||
$(LIBNM_LIBS)
|
$(LIBNM_LIBS)
|
||||||
EXTRA_src_nm_openvpn_service_DEPENDENCIES = \
|
EXTRA_src_nm_wireguard_service_DEPENDENCIES = \
|
||||||
linker-script-binary.ver
|
linker-script-binary.ver
|
||||||
|
|
||||||
libexec_PROGRAMS += src/nm-openvpn-service-openvpn-helper
|
libexec_PROGRAMS += src/nm-openvpn-service-openvpn-helper
|
||||||
|
@ -232,7 +232,7 @@ EXTRA_DIST += \
|
||||||
properties/libnm-vpn-plugin-openvpn.ver \
|
properties/libnm-vpn-plugin-openvpn.ver \
|
||||||
properties/libnm-vpn-plugin-openvpn-editor.ver \
|
properties/libnm-vpn-plugin-openvpn-editor.ver \
|
||||||
properties/libnm-openvpn-properties.ver \
|
properties/libnm-openvpn-properties.ver \
|
||||||
properties/nm-openvpn-dialog.ui
|
properties/nm-wireguard-dialog.ui
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
@ -353,11 +353,11 @@ install-data-hook:
|
||||||
sed -e "1s|^|# This file is obsoleted by a file in $(NM_VPN_SERVICE_DIR)\n\n|" \
|
sed -e "1s|^|# This file is obsoleted by a file in $(NM_VPN_SERVICE_DIR)\n\n|" \
|
||||||
-e 's|[@]LIBEXECDIR[@]|$(libexecdir)|g' \
|
-e 's|[@]LIBEXECDIR[@]|$(libexecdir)|g' \
|
||||||
-e 's|[@]PLUGINDIR[@]|@NM_PLUGIN_DIR@|g' \
|
-e 's|[@]PLUGINDIR[@]|@NM_PLUGIN_DIR@|g' \
|
||||||
<$(srcdir)/nm-openvpn-service.name.in \
|
<$(srcdir)/nm-wireguard-service.name.in \
|
||||||
>$(DESTDIR)$(sysconfdir)/NetworkManager/VPN/nm-openvpn-service.name
|
>$(DESTDIR)$(sysconfdir)/NetworkManager/VPN/nm-wireguard-service.name
|
||||||
|
|
||||||
uninstall-hook:
|
uninstall-hook:
|
||||||
rm -f $(DESTDIR)$(sysconfdir)/NetworkManager/VPN/nm-openvpn-service.name
|
rm -f $(DESTDIR)$(sysconfdir)/NetworkManager/VPN/nm-wireguard-service.name
|
||||||
endif
|
endif
|
||||||
|
|
||||||
appdatadir = $(datadir)/appdata
|
appdatadir = $(datadir)/appdata
|
||||||
|
@ -365,10 +365,10 @@ appdata_files = $(appdata_in_files:.xml.in=.xml)
|
||||||
if WITH_GNOME
|
if WITH_GNOME
|
||||||
appdata_DATA = $(appdata_files)
|
appdata_DATA = $(appdata_files)
|
||||||
endif
|
endif
|
||||||
appdata_in_files = appdata/network-manager-openvpn.metainfo.xml.in
|
appdata_in_files = appdata/network-manager-wireguard.metainfo.xml.in
|
||||||
@INTLTOOL_XML_RULE@
|
@INTLTOOL_XML_RULE@
|
||||||
|
|
||||||
nm-openvpn-service.name: $(srcdir)/nm-openvpn-service.name.in
|
nm-wireguard-service.name: $(srcdir)/nm-wireguard-service.name.in
|
||||||
$(AM_V_GEN) sed -e 's|[@]LIBEXECDIR[@]|$(libexecdir)|g' \
|
$(AM_V_GEN) sed -e 's|[@]LIBEXECDIR[@]|$(libexecdir)|g' \
|
||||||
-e 's|[@]PLUGINDIR[@]/|@NM_PLUGIN_DIR_NAME_FILE@|g' \
|
-e 's|[@]PLUGINDIR[@]/|@NM_PLUGIN_DIR_NAME_FILE@|g' \
|
||||||
$^ >$@
|
$^ >$@
|
||||||
|
@ -380,7 +380,7 @@ TESTS = $(check_programs)
|
||||||
|
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
linker-script-binary.ver \
|
linker-script-binary.ver \
|
||||||
nm-openvpn-service.name.in \
|
nm-wireguard-service.name.in \
|
||||||
$(dbusservice_DATA) \
|
$(dbusservice_DATA) \
|
||||||
$(appdata_in_files) \
|
$(appdata_in_files) \
|
||||||
$(appdata_files) \
|
$(appdata_files) \
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Copyright Lubomir Rintel 2016 -->
|
<!-- Copyright Lubomir Rintel 2016 -->
|
||||||
<component type="addon">
|
<component type="addon">
|
||||||
<id>network-manager-openvpn</id>
|
<id>network-manager-wireguard</id>
|
||||||
<project_license>GPL-2.0+</project_license>
|
<project_license>GPL-2.0+</project_license>
|
||||||
<metadata_license>CC0-1.0</metadata_license>
|
<metadata_license>CC0-1.0</metadata_license>
|
||||||
<extends>nm-connection-editor.desktop</extends>
|
<extends>nm-connection-editor.desktop</extends>
|
||||||
<extends>gnome-control-center.desktop</extends>
|
<extends>gnome-control-center.desktop</extends>
|
||||||
<_name>OpenVPN client</_name>
|
<_name>Wireguard client</_name>
|
||||||
<_summary>Client for OpenVPN virtual private networks</_summary>
|
<_summary>Client for Wireguard virtual private networks</_summary>
|
||||||
|
|
||||||
<keywords>
|
<keywords>
|
||||||
<keyword>network</keyword>
|
<keyword>network</keyword>
|
||||||
|
@ -15,12 +15,12 @@
|
||||||
<keyword>NetworkManager</keyword>
|
<keyword>NetworkManager</keyword>
|
||||||
<keyword>connection</keyword>
|
<keyword>connection</keyword>
|
||||||
<keyword>VPN</keyword>
|
<keyword>VPN</keyword>
|
||||||
<keyword>OpenVPN</keyword>
|
<keyword>Wireguard</keyword>
|
||||||
</keywords>
|
</keywords>
|
||||||
|
|
||||||
<description>
|
<description>
|
||||||
<_p>Support for configuring OpenVPN virtual private network connections.</_p>
|
<_p>Support for configuring Wireguard virtual private network connections.</_p>
|
||||||
<_p>OpenVPN is a popular and flexible free-software VPN solution.</_p>
|
<_p>Wireguard is a modern VPN client built for simplicity.</_p>
|
||||||
</description>
|
</description>
|
||||||
|
|
||||||
<screenshots>
|
<screenshots>
|
|
@ -4,7 +4,7 @@
|
||||||
srcdir=`dirname $0`
|
srcdir=`dirname $0`
|
||||||
test -z "$srcdir" && srcdir=.
|
test -z "$srcdir" && srcdir=.
|
||||||
REQUIRED_AUTOMAKE_VERSION=1.9
|
REQUIRED_AUTOMAKE_VERSION=1.9
|
||||||
PKG_NAME=NetworkManager-openvpn
|
PKG_NAME=NetworkManager-wireguard
|
||||||
|
|
||||||
(test -f $srcdir/configure.ac \
|
(test -f $srcdir/configure.ac \
|
||||||
&& test -f $srcdir/auth-dialog/main.c) || {
|
&& test -f $srcdir/auth-dialog/main.c) || {
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
xmlns:gnome="http://api.gnome.org/doap-extensions#"
|
xmlns:gnome="http://api.gnome.org/doap-extensions#"
|
||||||
xmlns="http://usefulinc.com/ns/doap#">
|
xmlns="http://usefulinc.com/ns/doap#">
|
||||||
|
|
||||||
<name xml:lang="en">network-manager-openvpn</name>
|
<name xml:lang="en">network-manager-wireguard</name>
|
||||||
<shortdesc xml:lang="en">OpenVPN support for NetworkManager</shortdesc>
|
<shortdesc xml:lang="en">Wireguard support for NetworkManager</shortdesc>
|
||||||
|
|
||||||
<homepage rdf:resource="https://wiki.gnome.org/Projects/NetworkManager" />
|
<homepage rdf:resource="https://wiki.gnome.org/Projects/NetworkManager" />
|
||||||
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/networkmanager-list" />
|
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/networkmanager-list" />
|
|
@ -1,14 +0,0 @@
|
||||||
<!DOCTYPE busconfig PUBLIC
|
|
||||||
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
|
|
||||||
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
|
||||||
<busconfig>
|
|
||||||
<policy user="root">
|
|
||||||
<allow own_prefix="org.freedesktop.NetworkManager.openvpn"/>
|
|
||||||
<allow send_destination="org.freedesktop.NetworkManager.openvpn"/>
|
|
||||||
</policy>
|
|
||||||
<policy context="default">
|
|
||||||
<deny own_prefix="org.freedesktop.NetworkManager.openvpn"/>
|
|
||||||
<deny send_destination="org.freedesktop.NetworkManager.openvpn"/>
|
|
||||||
</policy>
|
|
||||||
</busconfig>
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
[VPN Connection]
|
|
||||||
name=openvpn
|
|
||||||
service=org.freedesktop.NetworkManager.openvpn
|
|
||||||
program=@LIBEXECDIR@/nm-openvpn-service
|
|
||||||
supports-multiple-connections=true
|
|
||||||
|
|
||||||
[libnm]
|
|
||||||
plugin=@PLUGINDIR@/libnm-vpn-plugin-openvpn.so
|
|
||||||
|
|
||||||
[GNOME]
|
|
||||||
auth-dialog=@LIBEXECDIR@/nm-openvpn-auth-dialog
|
|
||||||
properties=@PLUGINDIR@/libnm-openvpn-properties
|
|
||||||
supports-external-ui-mode=true
|
|
||||||
supports-hints=true
|
|
|
@ -5,19 +5,15 @@
|
||||||
<!-- you have to be allowed to use the bus name "….wireguard"! -->
|
<!-- you have to be allowed to use the bus name "….wireguard"! -->
|
||||||
<!-- thus, copy the "<allow own_prefix='…'/>" and "<allow send_destination='…'/>" from below to a DBUS conf file -->
|
<!-- thus, copy the "<allow own_prefix='…'/>" and "<allow send_destination='…'/>" from below to a DBUS conf file -->
|
||||||
<!-- e.g. i copied the entire file to "/etc/dbus-1/system.d/nm-wireguard-service.conf" -->
|
<!-- e.g. i copied the entire file to "/etc/dbus-1/system.d/nm-wireguard-service.conf" -->
|
||||||
|
|
||||||
<busconfig>
|
<busconfig>
|
||||||
<policy user="root">
|
<policy user="root">
|
||||||
<allow own_prefix="org.freedesktop.NetworkManager.openvpn"/>
|
|
||||||
<allow send_destination="org.freedesktop.NetworkManager.openvpn"/>
|
|
||||||
<allow own_prefix="org.freedesktop.NetworkManager.wireguard"/>
|
<allow own_prefix="org.freedesktop.NetworkManager.wireguard"/>
|
||||||
<allow send_destination="org.freedesktop.NetworkManager.wireguard"/>
|
<allow send_destination="org.freedesktop.NetworkManager.wireguard"/>
|
||||||
</policy>
|
</policy>
|
||||||
|
<!-- TODO deny per default -->
|
||||||
<policy context="default">
|
<policy context="default">
|
||||||
<allow own_prefix="org.freedesktop.NetworkManager.wireguard"/>
|
<allow own_prefix="org.freedesktop.NetworkManager.wireguard"/>
|
||||||
<allow send_destination="org.freedesktop.NetworkManager.wireguard"/>
|
<allow send_destination="org.freedesktop.NetworkManager.wireguard"/>
|
||||||
<deny own_prefix="org.freedesktop.NetworkManager.openvpn"/>
|
|
||||||
<deny send_destination="org.freedesktop.NetworkManager.openvpn"/>
|
|
||||||
</policy>
|
</policy>
|
||||||
</busconfig>
|
</busconfig>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
[VPN Connection]
|
||||||
|
name=wireguard
|
||||||
|
service=org.freedesktop.NetworkManager.wireguard
|
||||||
|
program=@LIBEXECDIR@/nm-wireguard-service
|
||||||
|
supports-multiple-connections=false
|
||||||
|
|
||||||
|
[libnm]
|
||||||
|
plugin=@PLUGINDIR@/libnm-vpn-plugin-openvpn.so
|
||||||
|
|
||||||
|
[GNOME]
|
||||||
|
auth-dialog=@LIBEXECDIR@/nm-openvpn-auth-dialog
|
||||||
|
properties=@PLUGINDIR@/libnm-openvpn-properties
|
||||||
|
supports-external-ui-mode=false
|
||||||
|
supports-hints=false
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<gresources>
|
<gresources>
|
||||||
<gresource prefix="/org/freedesktop/network-manager-openvpn">
|
<gresource prefix="/org/freedesktop/network-manager-wireguard">
|
||||||
<file preprocess="xml-stripblanks">nm-openvpn-dialog.ui</file>
|
<file preprocess="xml-stripblanks">nm-wireguard-dialog.ui</file>
|
||||||
</gresource>
|
</gresource>
|
||||||
</gresources>
|
</gresources>
|
||||||
|
|
|
@ -902,7 +902,7 @@ openvpn_editor_new (NMConnection *connection, GError **error)
|
||||||
|
|
||||||
gtk_builder_set_translation_domain (priv->builder, GETTEXT_PACKAGE);
|
gtk_builder_set_translation_domain (priv->builder, GETTEXT_PACKAGE);
|
||||||
|
|
||||||
if (!gtk_builder_add_from_resource (priv->builder, "/org/freedesktop/network-manager-openvpn/nm-openvpn-dialog.ui", error)) {
|
if (!gtk_builder_add_from_resource (priv->builder, "/org/freedesktop/network-manager-wireguard/nm-wireguard-dialog.ui", error)) {
|
||||||
g_object_unref (object);
|
g_object_unref (object);
|
||||||
g_return_val_if_reached (NULL);
|
g_return_val_if_reached (NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,6 +104,13 @@ NMWireguardPlugin *nm_wireguard_plugin_new (const char *bus_name);
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
typedef struct _Configs{
|
||||||
|
NMVpnServicePlugin *plugin;
|
||||||
|
GVariant *config;
|
||||||
|
GVariant *ip4config;
|
||||||
|
GVariant *ip6config;
|
||||||
|
} Configs;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
OPENVPN_BINARY_VERSION_INVALID,
|
OPENVPN_BINARY_VERSION_INVALID,
|
||||||
OPENVPN_BINARY_VERSION_UNKNOWN,
|
OPENVPN_BINARY_VERSION_UNKNOWN,
|
||||||
|
@ -149,6 +156,11 @@ G_DEFINE_TYPE (NMWireguardPlugin, nm_wireguard_plugin, NM_TYPE_VPN_SERVICE_PLUGI
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
||||||
|
typedef struct _PluginConnection {
|
||||||
|
NMVpnServicePlugin *plugin;
|
||||||
|
NMConnection *connection;
|
||||||
|
} PluginConnection;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *name;
|
const char *name;
|
||||||
GType type;
|
GType type;
|
||||||
|
@ -1014,7 +1026,6 @@ nm_openvpn_connect_timer_cb (gpointer data)
|
||||||
NMWireguardPluginIOData *io_data = priv->io_data;
|
NMWireguardPluginIOData *io_data = priv->io_data;
|
||||||
struct sockaddr_un remote = { 0 };
|
struct sockaddr_un remote = { 0 };
|
||||||
int fd;
|
int fd;
|
||||||
printf("Connect Timer Callback!\n");
|
|
||||||
|
|
||||||
priv->connect_count++;
|
priv->connect_count++;
|
||||||
|
|
||||||
|
@ -1055,7 +1066,6 @@ static void
|
||||||
nm_openvpn_schedule_connect_timer (NMWireguardPlugin *plugin)
|
nm_openvpn_schedule_connect_timer (NMWireguardPlugin *plugin)
|
||||||
{
|
{
|
||||||
NMWireguardPluginPrivate *priv = NM_WIREGUARD_PLUGIN_GET_PRIVATE (plugin);
|
NMWireguardPluginPrivate *priv = NM_WIREGUARD_PLUGIN_GET_PRIVATE (plugin);
|
||||||
printf("Scheduling timer\n");
|
|
||||||
|
|
||||||
if (priv->connect_timer == 0)
|
if (priv->connect_timer == 0)
|
||||||
priv->connect_timer = g_timeout_add (200, nm_openvpn_connect_timer_cb, plugin);
|
priv->connect_timer = g_timeout_add (200, nm_openvpn_connect_timer_cb, plugin);
|
||||||
|
@ -2158,6 +2168,206 @@ real_disconnect (NMVpnServicePlugin *plugin,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const gchar *
|
||||||
|
get_setting(NMSettingVpn *s_vpn, const char *key)
|
||||||
|
{
|
||||||
|
const gchar *setting = nm_setting_vpn_get_data_item(s_vpn, key);
|
||||||
|
|
||||||
|
if(!setting || !setting[0]){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GVariant *
|
||||||
|
ip4_to_gvariant (const char *str)
|
||||||
|
{
|
||||||
|
gchar *addr;
|
||||||
|
gchar **tmp, **tmp2;
|
||||||
|
struct in_addr temp_addr;
|
||||||
|
GVariant *res;
|
||||||
|
|
||||||
|
/* Empty */
|
||||||
|
if (!str || strlen (str) < 1){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// strip the port and subnet
|
||||||
|
tmp = g_strsplit(str, "/", 0);
|
||||||
|
tmp2 = g_strsplit(tmp[0], ":", 0);
|
||||||
|
addr = g_strdup(tmp[0]);
|
||||||
|
|
||||||
|
if (inet_pton (AF_INET, addr, &temp_addr) <= 0){
|
||||||
|
res = NULL;;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
res = g_variant_new_uint32 (temp_addr.s_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev(tmp);
|
||||||
|
g_strfreev(tmp2);
|
||||||
|
g_free(addr);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
static GVariant *
|
||||||
|
ip6_to_gvariant (const char *str)
|
||||||
|
{
|
||||||
|
struct in6_addr temp_addr;
|
||||||
|
gchar *addr;
|
||||||
|
gchar **tmp;
|
||||||
|
GVariantBuilder builder;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Empty */
|
||||||
|
if (!str || strlen (str) < 1){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// since we accept a subnet at the end, let's do away with that.
|
||||||
|
tmp = g_strsplit(str, "/", 0);
|
||||||
|
addr = g_strdup(tmp[0]);
|
||||||
|
g_strfreev(tmp);
|
||||||
|
|
||||||
|
if (inet_pton (AF_INET6, addr, &temp_addr) <= 0){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_variant_builder_init (&builder, G_VARIANT_TYPE ("ay"));
|
||||||
|
for (i = 0; i < sizeof (temp_addr); i++){
|
||||||
|
g_variant_builder_add (&builder, "y", ((guint8 *) &temp_addr)[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return g_variant_builder_end (&builder);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
send_config(gpointer data)
|
||||||
|
{
|
||||||
|
Configs *cfgs = data;
|
||||||
|
|
||||||
|
nm_vpn_service_plugin_set_config(cfgs->plugin, cfgs->config);
|
||||||
|
|
||||||
|
if(cfgs->ip4config){
|
||||||
|
nm_vpn_service_plugin_set_ip4_config(cfgs->plugin, cfgs->ip4config);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(cfgs->ip6config){
|
||||||
|
nm_vpn_service_plugin_set_ip6_config(cfgs->plugin, cfgs->ip6config);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we don't return FALSE, it's gonna get called again and again and again and...
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
set_config(NMVpnServicePlugin *plugin, NMConnection *connection)
|
||||||
|
{
|
||||||
|
NMSettingVpn *s_vpn = nm_connection_get_setting_vpn(connection);
|
||||||
|
GVariantBuilder builder, ip4builder, ip6builder;
|
||||||
|
GVariant *config, *ip4config, *ip6config;
|
||||||
|
GVariant *val;
|
||||||
|
const char *setting;
|
||||||
|
guint64 subnet = 24;
|
||||||
|
gboolean has_ip4 = FALSE;
|
||||||
|
gboolean has_ip6 = FALSE;
|
||||||
|
Configs *configs = malloc(sizeof(Configs));
|
||||||
|
memset(configs, 0, sizeof(Configs));
|
||||||
|
|
||||||
|
// get ready to build the IP4 stuff and send it
|
||||||
|
// (required that the connection does not time-out)
|
||||||
|
g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
|
||||||
|
g_variant_builder_init(&ip4builder, G_VARIANT_TYPE_VARDICT);
|
||||||
|
g_variant_builder_init(&ip6builder, G_VARIANT_TYPE_VARDICT);
|
||||||
|
|
||||||
|
// build the configs
|
||||||
|
setting = get_setting(s_vpn, NM_WG_KEY_ADDR_IP4);
|
||||||
|
if(setting){
|
||||||
|
val = ip4_to_gvariant(setting);
|
||||||
|
if(val){
|
||||||
|
g_variant_builder_add(&ip4builder, "{sv}", NM_VPN_PLUGIN_IP4_CONFIG_ADDRESS, val);
|
||||||
|
|
||||||
|
// try to find the subnet from the IP
|
||||||
|
if(g_strrstr(setting, "/")){
|
||||||
|
gchar **tmp;
|
||||||
|
tmp = g_strsplit(setting, "/", 2);
|
||||||
|
if(!g_ascii_string_to_unsigned(tmp[1], 10, 0, 32, &subnet, NULL)){
|
||||||
|
subnet = 24;
|
||||||
|
}
|
||||||
|
g_strfreev(tmp);
|
||||||
|
}
|
||||||
|
val = g_variant_new_uint32((guint32)subnet);
|
||||||
|
g_variant_builder_add(&ip4builder, "{sv}", NM_VPN_PLUGIN_IP4_CONFIG_PREFIX, val);
|
||||||
|
has_ip4 = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setting = get_setting(s_vpn, NM_WG_KEY_DNS);
|
||||||
|
if(setting){
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
setting = get_setting(s_vpn, NM_WG_KEY_ENDPOINT);
|
||||||
|
if(setting){
|
||||||
|
// TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
setting = get_setting(s_vpn, NM_WG_KEY_MTU);
|
||||||
|
if(setting){
|
||||||
|
guint32 mtu = 1420;
|
||||||
|
if(!g_ascii_string_to_unsigned(setting, 10, 0, 1500, &mtu, NULL)){
|
||||||
|
mtu = 1420;
|
||||||
|
}
|
||||||
|
val = g_variant_new_uint32(mtu);
|
||||||
|
g_variant_builder_add(&builder, "{sv}", NM_VPN_PLUGIN_CONFIG_MTU, val);
|
||||||
|
g_variant_builder_add(&ip4builder, "{sv}", NM_VPN_PLUGIN_IP4_CONFIG_MTU, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
val = g_variant_new_string(nm_connection_get_id(connection));
|
||||||
|
g_variant_builder_add(&builder, "{sv}", NM_VPN_PLUGIN_CONFIG_TUNDEV, val);
|
||||||
|
g_variant_builder_add(&ip4builder, "{sv}", NM_VPN_PLUGIN_IP4_CONFIG_TUNDEV, val);
|
||||||
|
|
||||||
|
setting = get_setting(s_vpn, NM_WG_KEY_ADDR_IP6);
|
||||||
|
if(setting){
|
||||||
|
val = ip6_to_gvariant(setting);
|
||||||
|
if(val){
|
||||||
|
g_variant_builder_add(&ip6builder, "{sv}", NM_VPN_PLUGIN_IP6_CONFIG_ADDRESS, setting);
|
||||||
|
has_ip6 = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if we have any of IP4 or IP6 and if so, include them in the config
|
||||||
|
if(!has_ip4 && !has_ip6){
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(has_ip4){
|
||||||
|
val = g_variant_new_boolean(TRUE);
|
||||||
|
g_variant_builder_add(&builder, "{sv}", NM_VPN_PLUGIN_CONFIG_HAS_IP4, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(has_ip6){
|
||||||
|
val = g_variant_new_boolean(TRUE);
|
||||||
|
g_variant_builder_add(&builder, "{sv}", NM_VPN_PLUGIN_CONFIG_HAS_IP6, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
// finish the builders
|
||||||
|
config = g_variant_builder_end(&builder);
|
||||||
|
ip4config = g_variant_builder_end(&ip4builder);
|
||||||
|
ip6config = g_variant_builder_end(&ip6builder);
|
||||||
|
|
||||||
|
// populate the configs struct and send the configuration asynchronously
|
||||||
|
configs->ip4config = (has_ip4) ? ip4config : NULL;
|
||||||
|
configs->ip6config = (has_ip6) ? ip6config : NULL;
|
||||||
|
configs->plugin = plugin;
|
||||||
|
configs->config = config;
|
||||||
|
g_timeout_add(0, send_config, configs);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
connect_common(NMVpnServicePlugin *plugin,
|
connect_common(NMVpnServicePlugin *plugin,
|
||||||
NMConnection *connection,
|
NMConnection *connection,
|
||||||
|
@ -2171,8 +2381,6 @@ connect_common(NMVpnServicePlugin *plugin,
|
||||||
int retcode = 1;
|
int retcode = 1;
|
||||||
char *filename = NULL;
|
char *filename = NULL;
|
||||||
GString *connection_config = NULL;
|
GString *connection_config = NULL;
|
||||||
GVariantBuilder builder, ip4builder, ip6builder;
|
|
||||||
GVariant *config, *ip4config, *ip6config;
|
|
||||||
|
|
||||||
_LOGI("Setting up Wireguard Connection ('%s')", connection_name);
|
_LOGI("Setting up Wireguard Connection ('%s')", connection_name);
|
||||||
if(wg_quick_path == NULL){
|
if(wg_quick_path == NULL){
|
||||||
|
@ -2212,33 +2420,18 @@ connect_common(NMVpnServicePlugin *plugin,
|
||||||
g_remove(filename);
|
g_remove(filename);
|
||||||
g_free(command);
|
g_free(command);
|
||||||
|
|
||||||
// get ready to build the IP4 stuff and send it
|
set_config(plugin, connection);
|
||||||
// (required that the connection does not time-out)
|
|
||||||
g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
|
|
||||||
g_variant_builder_init(&ip4builder, G_VARIANT_TYPE_VARDICT);
|
|
||||||
g_variant_builder_init(&ip6builder, G_VARIANT_TYPE_VARDICT);
|
|
||||||
config = g_variant_builder_end(&builder);
|
|
||||||
ip4config = g_variant_builder_end(&ip4builder);
|
|
||||||
ip6config = g_variant_builder_end(&ip6builder);
|
|
||||||
nm_vpn_service_plugin_set_config(plugin, config);
|
|
||||||
nm_vpn_service_plugin_set_ip4_config(plugin, ip4config);
|
|
||||||
nm_vpn_service_plugin_set_ip6_config(plugin, ip6config);
|
|
||||||
|
|
||||||
/*
|
|
||||||
[1] https://git.gnome.org/browse/network-manager-openvpn/tree/src/nm-openvpn-service-openvpn-helper.c?id=40e522aea2146ec20e0232545aa574664184be39#n114
|
|
||||||
[2] https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/libnm/nm-vpn-service-plugin.c?id=7044febf97debaf04b7f9ca4fbb2dc24fcf1b0b0#n876
|
|
||||||
[3] https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/libnm/nm-vpn-service-plugin.c?id=7044febf97debaf04b7f9ca4fbb2dc24fcf1b0b0#n345
|
|
||||||
[4] https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/vpn/nm-vpn-connection.c?id=7044febf97debaf04b7f9ca4fbb2dc24fcf1b0b0#n2072
|
|
||||||
*/
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// IMPLEMENT ME RIGHT
|
// IMPLEMENT ME RIGHT
|
||||||
static gboolean
|
static gboolean
|
||||||
wg_connect (NMVpnServicePlugin *plugin,
|
wg_connect (NMVpnServicePlugin *plugin,
|
||||||
NMConnection *connection,
|
NMConnection *connection,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
_LOGI("Connecting to Wireguard: '%s'", nm_connection_get_id(connection));
|
||||||
return connect_common(plugin, connection, NULL, error);
|
return connect_common(plugin, connection, NULL, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2250,6 +2443,7 @@ wg_connect_interactive(NMVpnServicePlugin *plugin,
|
||||||
GVariant *details,
|
GVariant *details,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
|
_LOGI("Connecting interactively to Wireguard: '%s'", nm_connection_get_id(connection));
|
||||||
if(!connect_common(plugin, connection, details, error)){
|
if(!connect_common(plugin, connection, details, error)){
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -2495,6 +2689,7 @@ nm_wireguard_plugin_new (const char *bus_name)
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
if (plugin) {
|
if (plugin) {
|
||||||
|
printf("Listening to bus-name %s\n", bus_name);
|
||||||
g_signal_connect (G_OBJECT (plugin), "state-changed", G_CALLBACK (plugin_state_changed), NULL);
|
g_signal_connect (G_OBJECT (plugin), "state-changed", G_CALLBACK (plugin_state_changed), NULL);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
@ -2600,11 +2795,8 @@ main (int argc, char *argv[])
|
||||||
// TODO what is this, rem
|
// TODO what is this, rem
|
||||||
if ( !g_file_test ("/sys/class/misc/tun", G_FILE_TEST_EXISTS)
|
if ( !g_file_test ("/sys/class/misc/tun", G_FILE_TEST_EXISTS)
|
||||||
&& (system ("/sbin/modprobe tun") == -1)){
|
&& (system ("/sbin/modprobe tun") == -1)){
|
||||||
|
|
||||||
printf("tun stuff not found :>\n");
|
|
||||||
exit (EXIT_FAILURE);
|
exit (EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
printf("tun stuff seems okay tho\n");
|
|
||||||
|
|
||||||
// TODO fails here:
|
// TODO fails here:
|
||||||
// nm-openvpn[27808] <warn> Failed to initialize a plugin instance: Connection ":1.598" is not allowed to own the service "org.freedesktop.NetworkManager.openvpn" due to security policies in the configuration file
|
// nm-openvpn[27808] <warn> Failed to initialize a plugin instance: Connection ":1.598" is not allowed to own the service "org.freedesktop.NetworkManager.openvpn" due to security policies in the configuration file
|
Loading…
Reference in New Issue