2006-02-09 Dan Williams <dcbw@redhat.com>

Patch from: Vinay A R <rvinay@novell.com>
	* src/vpn-manager/nm-vpn-act-request.[ch]
		- Added 'routes' and 'routes_count' to struct NMVPNActRequest since
			IPSec VPNs require them for std gateway.
		- (nm_vpn_act_request_new): takes arguments for 'user_routes'
			and 'user_routes_count'
		- (nm_vpn_act_request_get_user_routes): new function; gets user
			defined routes	from NMVPNActRequest object, returns the string
			array of routes.

	* src/vpn-manager/nm-vpn-manager.[ch]
		- (nm_vpn_manager_activate_vpn_connection): take additional arguments
			for 'user_routes' and 'user_routes_count'

	* src/vpn-manager/nm-dbus-vpn.c
		- (nm_dbus_vpn_activate_connection): gets 'user_routes' from
			nm_dbus_vpn_get_routes() to pass to nm_vpn_manager_activate_vpn_connection()

	* src/vpn-manager/nm-vpn-service.c
		- (nm_vpn_service_stage3_connect): pass user routes over dbus to
			the vpn daemon

	Modifications by Dan:
	* src/vpn-manager/nm-vpn-service.c
		- (nm_vpn_service_stage3_connect): ensure that we don't pass NULL string
			arrays into dbus

	* vpn-daemons/vpnc/src/nm-vpnc-service.c
	* vpn-daemons/pptp/src/nm-pptp-service.c
	* vpn-daemons/openvpn/src/nm-openvpn-service.c
		- Grab user routes from dbus message
		- Free all string arrays we got from dbus


git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@1463 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Vinay A R 2006-02-13 02:01:44 +00:00 committed by Dan Williams
parent 92e50873c7
commit ecc005aa03
10 changed files with 109 additions and 12 deletions

View file

@ -1,3 +1,38 @@
2006-02-09 Dan Williams <dcbw@redhat.com>
Patch from: Vinay A R <rvinay@novell.com>
* src/vpn-manager/nm-vpn-act-request.[ch]
- Added 'routes' and 'routes_count' to struct NMVPNActRequest since
IPSec VPNs require them for std gateway.
- (nm_vpn_act_request_new): takes arguments for 'user_routes'
and 'user_routes_count'
- (nm_vpn_act_request_get_user_routes): new function; gets user
defined routes from NMVPNActRequest object, returns the string
array of routes.
* src/vpn-manager/nm-vpn-manager.[ch]
- (nm_vpn_manager_activate_vpn_connection): take additional arguments
for 'user_routes' and 'user_routes_count'
* src/vpn-manager/nm-dbus-vpn.c
- (nm_dbus_vpn_activate_connection): gets 'user_routes' from
nm_dbus_vpn_get_routes() to pass to nm_vpn_manager_activate_vpn_connection()
* src/vpn-manager/nm-vpn-service.c
- (nm_vpn_service_stage3_connect): pass user routes over dbus to
the vpn daemon
Modifications by Dan:
* src/vpn-manager/nm-vpn-service.c
- (nm_vpn_service_stage3_connect): ensure that we don't pass NULL string
arrays into dbus
* vpn-daemons/vpnc/src/nm-vpnc-service.c
* vpn-daemons/pptp/src/nm-pptp-service.c
* vpn-daemons/openvpn/src/nm-openvpn-service.c
- Grab user routes from dbus message
- Free all string arrays we got from dbus
2006-02-07 Robert Love <rml@novell.com>
Patch by Stefan Seyfried <seife@suse.de>:

View file

@ -701,16 +701,20 @@ static DBusMessage *nm_dbus_vpn_activate_connection (DBusConnection *connection,
{
int item_count = -1;
char **items;
int routes_count = -1;
char **routes;
routes = nm_dbus_vpn_get_routes (connection, vpn, &routes_count);
if ((items = nm_dbus_vpn_get_vpn_data (connection, vpn, &item_count)))
{
char * joined_string = g_strjoinv (" / ", items);
nm_info ("Will activate VPN connection '%s', service '%s', user_name '%s', vpn_data '%s'.",
name, nm_vpn_connection_get_service_name (vpn), nm_vpn_connection_get_user_name (vpn), joined_string);
nm_vpn_manager_activate_vpn_connection (data->data->vpn_manager, vpn, passwords, num_passwords, items, item_count);
char * routes_string = g_strjoinv (" / ", routes);
nm_info ("Will activate VPN connection '%s', service '%s', user_name '%s', vpn_data '%s', route '%s'.",
name, nm_vpn_connection_get_service_name (vpn), nm_vpn_connection_get_user_name (vpn), joined_string, routes_string);
nm_vpn_manager_activate_vpn_connection (data->data->vpn_manager, vpn, passwords, num_passwords, items, item_count,
routes, routes_count);
g_free (joined_string);
g_free (routes_string);
g_strfreev (items);
}
} else {

View file

@ -40,6 +40,8 @@ struct NMVPNActRequest
int password_count;
char ** data_items;
int data_count;
char ** user_routes;
int user_routes_count;
guint daemon_wait_count;
guint callback_id;
@ -48,7 +50,8 @@ struct NMVPNActRequest
NMVPNActRequest *nm_vpn_act_request_new (NMVPNManager *manager, NMVPNService *service, NMVPNConnection *vpn,
NMDevice *parent_dev, char **password_items, int password_count, char **data_items, int data_count)
NMDevice *parent_dev, char **password_items, int password_count, char **data_items, int data_count,
char **user_routes, int user_routes_count)
{
NMVPNActRequest *req;
@ -75,6 +78,8 @@ NMVPNActRequest *nm_vpn_act_request_new (NMVPNManager *manager, NMVPNService *se
req->password_count = password_count;
req->data_items = g_strdupv (data_items);
req->data_count = data_count;
req->user_routes = g_strdupv (user_routes);
req->user_routes_count = user_routes_count;
return req;
}
@ -194,6 +199,15 @@ const char ** nm_vpn_act_request_get_data_items (NMVPNActRequest *req, guint *co
return (const char **) (req->data_items);
}
const char ** nm_vpn_act_request_get_user_routes (NMVPNActRequest *req, guint *count)
{
g_return_val_if_fail (req != NULL, NULL);
g_return_val_if_fail (count != NULL, NULL);
*count = req->user_routes_count;
return (const char **) (req->user_routes);
}
void nm_vpn_act_request_cancel (NMVPNActRequest *req)
{
g_return_if_fail (req != NULL);

View file

@ -29,7 +29,8 @@
NMVPNActRequest * nm_vpn_act_request_new (NMVPNManager *manager, NMVPNService *service, NMVPNConnection *vpn,
NMDevice *parent_dev, char **password_items, int password_count, char **data_items, int data_count);
NMDevice *parent_dev, char **password_items, int password_count, char **data_items, int data_count,
char **user_routes, int user_routes_count);
void nm_vpn_act_request_ref (NMVPNActRequest *req);
void nm_vpn_act_request_unref (NMVPNActRequest *req);
@ -43,6 +44,7 @@ NMDevice * nm_vpn_act_request_get_parent_dev (NMVPNActRequest *req);
const char ** nm_vpn_act_request_get_password_items (NMVPNActRequest *req, guint *count);
const char ** nm_vpn_act_request_get_data_items (NMVPNActRequest *req, guint *count);
const char ** nm_vpn_act_request_get_user_routes (NMVPNActRequest *req, guint *count);
void nm_vpn_act_request_cancel (NMVPNActRequest *req);
gboolean nm_vpn_act_request_should_cancel (NMVPNActRequest *req);

View file

@ -335,7 +335,7 @@ gboolean nm_vpn_manager_process_name_owner_changed (NMVPNManager *manager, const
*
*/
void nm_vpn_manager_activate_vpn_connection (NMVPNManager *manager, NMVPNConnection *vpn,
char **password_items, int password_count, char **data_items, int data_count)
char **password_items, int password_count, char **data_items, int data_count, char **user_routes, int user_routes_count)
{
NMDevice * parent_dev;
NMVPNActRequest * req;
@ -360,7 +360,8 @@ void nm_vpn_manager_activate_vpn_connection (NMVPNManager *manager, NMVPNConnect
return;
}
req = nm_vpn_act_request_new (manager, service, vpn, parent_dev, password_items, password_count, data_items, data_count);
req = nm_vpn_act_request_new (manager, service, vpn, parent_dev, password_items, password_count, data_items, data_count,
user_routes, user_routes_count);
manager->act_req = req;
nm_vpn_service_start_connection (service, req);

View file

@ -37,7 +37,8 @@ NMVPNActRequest * nm_vpn_manager_get_vpn_act_request (NMVPNManager *manager);
GSList * nm_vpn_manager_vpn_connection_list_copy (NMVPNManager *manager);
void nm_vpn_manager_activate_vpn_connection (NMVPNManager *manager, NMVPNConnection *vpn, char **password_items,
int password_count, char **data_items, int data_count);
int password_count, char **data_items, int data_count,
char **user_routes, int user_routes_count );
void nm_vpn_manager_deactivate_vpn_connection (NMVPNManager *manager, NMDevice *dev);
NMVPNConnection * nm_vpn_manager_find_connection_by_name (NMVPNManager *manager, const char *con_name);

View file

@ -472,6 +472,22 @@ out:
}
static char **
sanitize_dbus_string_array (char **in_array, dbus_uint32_t *in_num)
{
char ** out_array;
g_return_val_if_fail (in_num != NULL, NULL);
if (in_array)
return in_array;
out_array = g_malloc0 (sizeof (char *));
out_array[0] = g_strdup ("");
*in_num = 1;
return out_array;
}
static gboolean nm_vpn_service_stage3_connect (gpointer user_data)
{
NMVPNActRequest * req = (NMVPNActRequest *) user_data;
@ -484,6 +500,8 @@ static gboolean nm_vpn_service_stage3_connect (gpointer user_data)
dbus_uint32_t password_count;
char ** data_items;
dbus_uint32_t data_count;
char ** user_routes;
dbus_uint32_t user_routes_count = 0;
DBusMessage * message;
DBusPendingCall * pcall = NULL;
@ -512,10 +530,17 @@ static gboolean nm_vpn_service_stage3_connect (gpointer user_data)
user_name = nm_vpn_connection_get_user_name (vpn);
password_items = (char **) nm_vpn_act_request_get_password_items (req, &password_count);
data_items = (char **) nm_vpn_act_request_get_data_items (req, &data_count);
user_routes = (char **) nm_vpn_act_request_get_user_routes(req, &user_routes_count);
/* Ensure that data_items and user_routes are safe to put through dbus */
data_items = sanitize_dbus_string_array (data_items, &data_count);
user_routes = sanitize_dbus_string_array (user_routes, &user_routes_count);
dbus_message_append_args (message, DBUS_TYPE_STRING, &name,
DBUS_TYPE_STRING, &user_name,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &password_items, password_count,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &data_items, data_count,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &user_routes, user_routes_count,
DBUS_TYPE_INVALID);
dbus_connection_send_with_reply (service->app_data->dbus_connection, message, &pcall, -1);

View file

@ -1007,6 +1007,8 @@ nm_openvpn_dbus_handle_start_vpn (DBusMessage *message, NmOpenVPNData *data)
int num_items = -1;
char ** password_items = NULL;
int num_passwords = -1;
char ** user_routes = NULL;
int user_routes_count = -1;
const char * name = NULL;
const char * user_name = NULL;
DBusError error;
@ -1024,6 +1026,7 @@ nm_openvpn_dbus_handle_start_vpn (DBusMessage *message, NmOpenVPNData *data)
DBUS_TYPE_STRING, &user_name,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &password_items, &num_passwords,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &data_items, &num_items,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &user_routes, &user_routes_count,
DBUS_TYPE_INVALID))
{
nm_warning ("Could not process the request because its arguments were invalid. dbus said: '%s'", error.message);
@ -1047,6 +1050,8 @@ nm_openvpn_dbus_handle_start_vpn (DBusMessage *message, NmOpenVPNData *data)
out:
dbus_free_string_array (data_items);
dbus_free_string_array (password_items);
dbus_free_string_array (user_routes);
if (!success)
nm_openvpn_set_state (data, NM_VPN_STATE_STOPPED);
return success;

View file

@ -596,6 +596,8 @@ static gboolean nm_pptp_dbus_handle_start_vpn (DBusMessage *message, NmPPTPData
int num_items = -1;
char ** password_items = NULL;
int num_passwords = -1;
char ** user_routes = NULL;
int user_routes_count = -1;
const char * name = NULL;
const char * user_name = NULL;
DBusError error;
@ -613,6 +615,7 @@ static gboolean nm_pptp_dbus_handle_start_vpn (DBusMessage *message, NmPPTPData
DBUS_TYPE_STRING, &user_name,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &password_items, &num_passwords,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &data_items, &num_items,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &user_routes, &user_routes_count,
DBUS_TYPE_INVALID))
{
nm_warning ("Could not process the request because its arguments were invalid. dbus said: '%s'", error.message);
@ -635,6 +638,8 @@ static gboolean nm_pptp_dbus_handle_start_vpn (DBusMessage *message, NmPPTPData
out:
dbus_free_string_array (data_items);
dbus_free_string_array (password_items);
dbus_free_string_array (user_routes);
if (!success)
nm_pptp_set_state (data, NM_VPN_STATE_STOPPED);
return success;

View file

@ -576,9 +576,11 @@ static gboolean nm_vpnc_config_options_validate (char **data_items, int num_item
static gboolean nm_vpnc_dbus_handle_start_vpn (DBusMessage *message, NmVpncData *data)
{
char ** data_items = NULL;
int num_items = -1;
int num_items = -1;
char ** password_items = NULL;
int num_passwords = -1;
int num_passwords = -1;
char ** user_routes = NULL;
int user_routes_count = -1;
const char * name = NULL;
const char * user_name = NULL;
DBusError error;
@ -596,6 +598,7 @@ static gboolean nm_vpnc_dbus_handle_start_vpn (DBusMessage *message, NmVpncData
DBUS_TYPE_STRING, &user_name,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &password_items, &num_passwords,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &data_items, &num_items,
DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &user_routes, &user_routes_count,
DBUS_TYPE_INVALID))
{
nm_warning ("Could not process the request because its arguments were invalid. dbus said: '%s'", error.message);
@ -622,6 +625,8 @@ static gboolean nm_vpnc_dbus_handle_start_vpn (DBusMessage *message, NmVpncData
out:
dbus_free_string_array (data_items);
dbus_free_string_array (password_items);
dbus_free_string_array (user_routes);
if (!success)
nm_vpnc_set_state (data, NM_VPN_STATE_STOPPED);
return success;