08f137fc11
- Fixed 926225 - Fixed dependency to libreswan. - Created a new sub package NetworkManager-openswan-gnome - Various other spec file fixes. - Additional code changes are as follows: - Fixed an issue where proper network stack is not loaded unless _stackmanager is run before starting pluto daemon service. - Fixed the termination operation of pluto daemon to comply with libreswan changes. - Fixed various debug messages. - Fixed initiation of pluto daemon by this plugin to reflect the changes in libreaswan. - Fixed defaults values for more parameters to help the VPN connection stay more reliable. - Rewrote pluto watch API which watches the pluto process for its status. Fixed memory leak issues as not all child processes were reaped correctly. Also g_spwan_close_pid was not being called after children were reaped. Also modified debugs and added more to help with debugging in the future. - Fixed an issue where nm-openswan service is searching for ipsec binary in both /sbin and /usr/sbin leading to same operation twice, as /sbin is just symlink to /usr/sbin, so removed /sbin from the search paths. - Fixed some libreswan related macro changes. - Fixed netmask issue when sending IP information to the nm openswan plugin service. - Fixed the current code as it does not set the default route field NM_VPN_PLUGIN_IP4_CONFIG_NEVER_DEFAULT when sending VPN information to nm-openswan plugin. This fix sets the field to TRUE. - Fixed some issues found by coverity scan. - Fixed an issue where writing configuration on stdin should not end with \n as it gives error. It used to work previously, but not with latest NetworkManager versions. - libreswan related fixes, as some macros have been modified after forking to libreswan from openswan. - openswan/libreswan does not provide tun0 interface, so fixed the code where it sends tun0 interface. - Fix prcoessing of nm-openswan-dialog.ui file and added more error notifications. - Fixed dead code based on coverity scan. - Fixed gnomekeyring lib dependencies. - Fixed Networkmanager and related lib dependencies. - Fixed gtk label max width issue by setting it to 35. - NM-openswan was missing support for nm-openswan-auth-dialog.desktop.in.in. So added a new nm-openswan-auth-dialog.desktop.in.in, and modified related Makefile and configure.ac files.
132 lines
4.9 KiB
Diff
132 lines
4.9 KiB
Diff
From 24e2b36b20f2b6d42f715618e13c2919ad0fc51c Mon Sep 17 00:00:00 2001
|
|
From: Avesh Agarwal <avagarwa@redhat.com>
|
|
Date: Tue, 10 Dec 2013 15:04:09 -0500
|
|
Subject: [PATCH 15/20] Rewrite pluto watch API which watches the pluto process
|
|
for its status. Fixed memory leak issues as not all child processes were
|
|
reaped correctly. Also g_spwan_close_pid was not being called after children
|
|
were reaped. Also modified debugs and added more to help with debugging in
|
|
the future.
|
|
|
|
---
|
|
src/nm-openswan-service.c | 52 +++++++++++++++++++++++++++--------------------
|
|
1 file changed, 30 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/src/nm-openswan-service.c b/src/nm-openswan-service.c
|
|
index 7f1a9c9..b73ab1f 100644
|
|
--- a/src/nm-openswan-service.c
|
|
+++ b/src/nm-openswan-service.c
|
|
@@ -207,30 +207,33 @@ nm_openswan_secrets_validate (NMSettingVPN *s_vpn, GError **error)
|
|
}
|
|
|
|
static void
|
|
-openswan_watch_cb_auto (GPid pid, gint status, gpointer user_data)
|
|
+pluto_watch_cb (GPid pid, gint status, gpointer user_data)
|
|
{
|
|
NMOPENSWANPlugin *plugin = NM_OPENSWAN_PLUGIN (user_data);
|
|
NMOPENSWANPluginPrivate *priv = NM_OPENSWAN_PLUGIN_GET_PRIVATE (plugin);
|
|
guint error = 0;
|
|
|
|
+ if(debug)
|
|
+ g_printf("pluto_watch: current child pid = %d, pluto pid=%d\n", pid, priv->pid);
|
|
+
|
|
if (WIFEXITED (status)) {
|
|
error = WEXITSTATUS (status);
|
|
if (error != 0)
|
|
- g_warning ("openswan: ipsec auto exited with error code %d", error);
|
|
+ g_printf ("pluto_watch: pluto exited with error code %d\n", error);
|
|
}
|
|
else if (WIFSTOPPED (status))
|
|
- g_warning ("openswan: ipsec auto stopped unexpectedly with signal %d", WSTOPSIG (status));
|
|
+ g_printf ("pluto_watch: pluto stopped unexpectedly with signal %d\n", WSTOPSIG (status));
|
|
else if (WIFSIGNALED (status))
|
|
- g_warning ("openswan: ipsec auto died with signal %d", WTERMSIG (status));
|
|
+ g_printf ("pluto_watch: pluto died with signal %d\n", WTERMSIG (status));
|
|
else
|
|
- g_warning ("openswan: ipsec auto died from an unknown cause");
|
|
+ g_printf ("pluto_watch: pluto died from an unknown cause\n");
|
|
|
|
/* Reap child if needed. */
|
|
- //waitpid (priv->pid_auto, NULL, WNOHANG);
|
|
- //priv->pid_auto = 0;
|
|
+ waitpid (pid, NULL, WNOHANG);
|
|
+
|
|
+ if(debug)
|
|
+ g_printf ("pluto_watch: reaped child pid =%d\n", pid);
|
|
|
|
- waitpid (priv->pid, NULL, WNOHANG);
|
|
- priv->pid = 0;
|
|
|
|
/* Must be after data->state is set since signals use data->state */
|
|
switch (error) {
|
|
@@ -246,18 +249,29 @@ openswan_watch_cb_auto (GPid pid, gint status, gpointer user_data)
|
|
break;
|
|
}
|
|
|
|
- nm_vpn_plugin_set_state (NM_VPN_PLUGIN (plugin), NM_VPN_SERVICE_STATE_STOPPED);
|
|
+ if(pid == priv->pid || error) {
|
|
+ priv->pid = 0;
|
|
+
|
|
+ if(debug)
|
|
+ g_printf ("pluto_watch: nm pluto service is stopping\n");
|
|
+
|
|
+ nm_vpn_plugin_set_state (NM_VPN_PLUGIN (plugin), NM_VPN_SERVICE_STATE_STOPPED);
|
|
+ }
|
|
+
|
|
+ if(debug)
|
|
+ g_printf ("pluto_watch: nm pluto service will continue after reaping a child\n");
|
|
+
|
|
+ /*closing pid*/
|
|
+ g_spawn_close_pid(pid);
|
|
}
|
|
|
|
|
|
static gint
|
|
-//nm_openswan_start_openswan_binary (NMSettingVPN *s_vpn, NMOPENSWANPlugin *plugin, GError **error)
|
|
nm_openswan_start_openswan_binary (NMOPENSWANPlugin *plugin, GError **error)
|
|
{
|
|
GPid pid, pid_auto;
|
|
const char **openswan_binary = NULL;
|
|
GPtrArray *openswan_argv;
|
|
- GSource *openswan_watch;
|
|
gint stdin_fd;
|
|
|
|
/* Find openswan ipsec */
|
|
@@ -293,11 +307,8 @@ nm_openswan_start_openswan_binary (NMOPENSWANPlugin *plugin, GError **error)
|
|
|
|
g_message ("openswan: ipsec started with pid %d", pid);
|
|
|
|
- NM_OPENSWAN_PLUGIN_GET_PRIVATE (plugin)->pid = pid;
|
|
- openswan_watch = g_child_watch_source_new (pid);
|
|
- g_source_set_callback (openswan_watch, (GSourceFunc) openswan_watch_cb_auto, plugin, NULL);
|
|
- g_source_attach (openswan_watch, NULL);
|
|
- g_source_unref (openswan_watch);
|
|
+ NM_OPENSWAN_PLUGIN_GET_PRIVATE (plugin)->pid = pid;
|
|
+ g_child_watch_add(pid, (GChildWatchFunc) pluto_watch_cb, plugin);
|
|
|
|
sleep(2);
|
|
|
|
@@ -322,11 +333,7 @@ nm_openswan_start_openswan_binary (NMOPENSWANPlugin *plugin, GError **error)
|
|
|
|
g_message ("openswan: ipsec auto started with pid %d", pid_auto);
|
|
|
|
- /*NM_OPENSWAN_PLUGIN_GET_PRIVATE (plugin)->pid_auto = pid_auto;
|
|
- openswan_watch = g_child_watch_source_new (pid_auto);
|
|
- g_source_set_callback (openswan_watch, (GSourceFunc) openswan_watch_cb_auto, plugin, NULL);
|
|
- g_source_attach (openswan_watch, NULL);
|
|
- g_source_unref (openswan_watch);*/
|
|
+ g_child_watch_add(pid_auto, (GChildWatchFunc) pluto_watch_cb, plugin);
|
|
|
|
return stdin_fd;
|
|
}
|
|
@@ -376,6 +383,7 @@ nm_openswan_start_openswan_connection (NMOPENSWANPlugin *plugin, GError **error)
|
|
g_ptr_array_free (openswan_argv, TRUE);
|
|
|
|
sleep(3);
|
|
+ g_child_watch_add(pid, (GChildWatchFunc) pluto_watch_cb, plugin);
|
|
|
|
g_message ("openswan: ipsec auto connection started with pid %d", pid);
|
|
|
|
--
|
|
1.8.3.1
|
|
|