mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-03 17:30:16 +01:00
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:
parent
92e50873c7
commit
ecc005aa03
10 changed files with 109 additions and 12 deletions
35
ChangeLog
35
ChangeLog
|
|
@ -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>:
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue