From 7d54da0ea81ce1e724ffe461fb112c13677f4a4e Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 11 May 2005 20:35:54 +0000 Subject: [PATCH] 2005-05-11 Dan Williams * vpn-daemons/vpnc/nm-vpnc-service.c - (nm_vpnc_start_vpnc_binary): NULL-ify GError before using it - (nm_vpnc_config_file_generate): Attempt to ensure that the path for the config file exists before trying to write it out. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@619 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 7 +++++++ vpn-daemons/vpnc/nm-vpnc-service.c | 31 ++++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3f9ed9ce11..3c771e6548 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-05-11 Dan Williams + + * vpn-daemons/vpnc/nm-vpnc-service.c + - (nm_vpnc_start_vpnc_binary): NULL-ify GError before using it + - (nm_vpnc_config_file_generate): Attempt to ensure that the path for the config + file exists before trying to write it out. + 2005-05-10 Dan Williams * gnome/applet/applet-dbus-device.c diff --git a/vpn-daemons/vpnc/nm-vpnc-service.c b/vpn-daemons/vpnc/nm-vpnc-service.c index d21d0080e0..5d8c5b84db 100644 --- a/vpn-daemons/vpnc/nm-vpnc-service.c +++ b/vpn-daemons/vpnc/nm-vpnc-service.c @@ -341,7 +341,7 @@ static gboolean nm_vpnc_start_vpnc_binary (NmVpncData *data) GPid pid; const char * vpnc_binary; GPtrArray * vpnc_argv; - GError * error; + GError * error = NULL; gboolean success = FALSE; GSource * vpnc_watch; @@ -366,6 +366,7 @@ static gboolean nm_vpnc_start_vpnc_binary (NmVpncData *data) { g_ptr_array_free (vpnc_argv, TRUE); nm_warning ("vpnc failed to start. error: '%s'", error->message); + g_error_free(error); return FALSE; } g_ptr_array_free (vpnc_argv, TRUE); @@ -392,14 +393,36 @@ static gboolean nm_vpnc_start_vpnc_binary (NmVpncData *data) */ static gboolean nm_vpnc_config_file_generate (const char *user_name, const char *password, const char **data_items, const int num_items) { - char *string; - int out_fd; - int i, x; + char * string; + int out_fd; + int i, x; + char * dirname; + char * cmd; + int ret; g_return_val_if_fail (user_name != NULL, FALSE); g_return_val_if_fail (password != NULL, FALSE); g_return_val_if_fail (data_items != NULL, FALSE); + /* Ensure that the config file's directory exists */ + dirname = g_path_get_dirname (NM_VPNC_CONFIG_FILE_PATH); + if (!dirname || !strlen (dirname)) + { + nm_warning ("Could not get dirname for vpnc config file path '%s'.", NM_VPNC_CONFIG_FILE_PATH); + return FALSE; + } + + cmd = g_strdup_printf ("/bin/mkdir -p -m 700 %s", dirname); + ret = system (cmd); + if ((ret == -1) || (WEXITSTATUS(ret) != 0)) + { + nm_warning ("Could not create dirname for vpnc config file path '%s'.", NM_VPNC_CONFIG_FILE_PATH); + g_free (cmd); + g_free (dirname); + return FALSE; + } + g_free (cmd); + unlink (NM_VPNC_CONFIG_FILE_PATH); out_fd = open (NM_VPNC_CONFIG_FILE_PATH, O_WRONLY|O_CREAT|O_TRUNC, 0600); if (out_fd < 0)