From c33d6e868f4ed930d421d46237685b15b18e8eb5 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Tue, 30 Jan 2007 22:36:26 +0000 Subject: [PATCH] 2007-01-30 Dan Williams * configure.in src/Makefile.am - Add configure bits to pick up libnm-util * src/nm-vpnc-service.c - Convert to new dict-based IP4Config signal format git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@2256 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- vpn-daemons/vpnc/ChangeLog | 9 ++ vpn-daemons/vpnc/configure.in | 6 +- vpn-daemons/vpnc/src/Makefile.am | 54 +++++------ vpn-daemons/vpnc/src/nm-vpnc-service.c | 124 +++++++++++++++++++------ 4 files changed, 136 insertions(+), 57 deletions(-) diff --git a/vpn-daemons/vpnc/ChangeLog b/vpn-daemons/vpnc/ChangeLog index c6b28fe3b2..e55dc2d69e 100644 --- a/vpn-daemons/vpnc/ChangeLog +++ b/vpn-daemons/vpnc/ChangeLog @@ -1,3 +1,12 @@ +2007-01-30 Dan Williams + + * configure.in + src/Makefile.am + - Add configure bits to pick up libnm-util + + * src/nm-vpnc-service.c + - Convert to new dict-based IP4Config signal format + 2006-12-07 Dan Williams Patch from Christian Persch diff --git a/vpn-daemons/vpnc/configure.in b/vpn-daemons/vpnc/configure.in index 88e2128fa0..cb04fdc7d9 100644 --- a/vpn-daemons/vpnc/configure.in +++ b/vpn-daemons/vpnc/configure.in @@ -52,7 +52,6 @@ AC_SUBST(DBUS_LIBS) PKG_CHECK_MODULES(NETWORK_MANAGER, NetworkManager >= 0.4.1) AC_SUBST(NETWORK_MANAGER_CFLAGS) -AC_SUBST(NETWORK_MANAGER_LIBS) PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.6) AC_SUBST(GTK_CFLAGS) @@ -78,6 +77,11 @@ PKG_CHECK_MODULES(GNOMEKEYRING, gnome-keyring-1) AC_SUBST(GNOMEKEYRING_CFLAGS) AC_SUBST(GNOMEKEYRING_LIBS) +AC_CHECK_LIB(nm-util, nmu_dbus_dict_append_string_array) +PKG_CHECK_MODULES(NM_UTILS, NetworkManager) +AC_SUBST(NM_UTILS_CFLAGS) +AC_SUBST(NM_UTILS_LIBS) + AS_AC_EXPAND(LOCALSTATEDIR, $localstatedir) AS_AC_EXPAND(SYSCONFDIR, $sysconfdir) AS_AC_EXPAND(DATADIR, $datadir) diff --git a/vpn-daemons/vpnc/src/Makefile.am b/vpn-daemons/vpnc/src/Makefile.am index b8cfac4843..60fdcfc2f4 100644 --- a/vpn-daemons/vpnc/src/Makefile.am +++ b/vpn-daemons/vpnc/src/Makefile.am @@ -1,42 +1,42 @@ INCLUDES = -I${top_srcdir} -I${top_srcdir}/utils -I${top_srcdir}/vpn-daemons/vpnc -AM_CPPFLAGS = \ - $(DBUS_CFLAGS) \ - $(GTHREAD_CFLAGS) \ - $(NETWORK_MANAGER_CFLAGS) \ - -Wall \ - -DDBUS_API_SUBJECT_TO_CHANGE \ - -DG_DISABLE_DEPRECATED \ - -DBINDIR=\"$(bindir)\" \ - -DPREFIX=\""$(prefix)"\" \ - -DSYSCONFDIR=\""$(sysconfdir)"\" \ - -DVERSION="\"$(VERSION)\"" \ - -DLIBDIR=\""$(libdir)"\" \ - -DLIBEXECDIR=\""$(libexecdir)"\" \ - -DLOCALSTATEDIR=\""$(localstatedir)"\" \ +AM_CPPFLAGS = \ + $(DBUS_CFLAGS) \ + $(GTHREAD_CFLAGS) \ + $(NETWORK_MANAGER_CFLAGS) \ + $(NM_UTILS_CFLAGS) \ + -Wall \ + -DDBUS_API_SUBJECT_TO_CHANGE \ + -DG_DISABLE_DEPRECATED \ + -DBINDIR=\"$(bindir)\" \ + -DPREFIX=\""$(prefix)"\" \ + -DSYSCONFDIR=\""$(sysconfdir)"\" \ + -DVERSION="\"$(VERSION)\"" \ + -DLIBDIR=\""$(libdir)"\" \ + -DLIBEXECDIR=\""$(libexecdir)"\" \ + -DLOCALSTATEDIR=\""$(localstatedir)"\" \ -DDATADIR=\"$(datadir)\" bin_PROGRAMS = nm-vpnc-service nm-vpnc-service-vpnc-helper -nm_vpnc_service_SOURCES = \ - nm-vpnc-service.c \ - nm-vpnc-service.h \ - nm-utils.c \ +nm_vpnc_service_SOURCES = \ + nm-vpnc-service.c \ + nm-vpnc-service.h \ + nm-utils.c \ nm-utils.h -nm_vpnc_service_LDADD = \ - $(DBUS_LIBS) \ - $(GTHREAD_LIBS) \ - $(NETWORK_MANAGER_LIBS) +nm_vpnc_service_LDADD = \ + $(DBUS_LIBS) \ + $(GTHREAD_LIBS) -nm_vpnc_service_vpnc_helper_SOURCES = \ +nm_vpnc_service_vpnc_helper_SOURCES = \ nm-vpnc-service-vpnc-helper.c -nm_vpnc_service_vpnc_helper_LDADD = \ - $(DBUS_LIBS) \ - $(GTHREAD_LIBS) \ - $(NETWORK_MANAGER_LIBS) +nm_vpnc_service_vpnc_helper_LDADD = \ + $(DBUS_LIBS) \ + $(GTHREAD_LIBS) \ + $(NM_UTILS_LIBS) CLEANFILES = *~ diff --git a/vpn-daemons/vpnc/src/nm-vpnc-service.c b/vpn-daemons/vpnc/src/nm-vpnc-service.c index e709d0d064..6704cb943f 100644 --- a/vpn-daemons/vpnc/src/nm-vpnc-service.c +++ b/vpn-daemons/vpnc/src/nm-vpnc-service.c @@ -46,6 +46,7 @@ #include "nm-vpnc-service.h" #include "nm-utils.h" +#include "dbus-dict-helpers.h" static const char *vpnc_binary_paths[] = @@ -868,7 +869,10 @@ print_vpn_config (guint32 ip4_vpn_gateway, * Signal the bus * */ -static void nm_vpnc_dbus_process_helper_ip4_config (DBusConnection *con, DBusMessage *message, NmVpncData *data) +static void +nm_vpnc_dbus_process_helper_ip4_config (DBusConnection *con, + DBusMessage *message, + NmVpncData *data) { guint32 ip4_vpn_gateway; char * tundev; @@ -879,11 +883,11 @@ static void nm_vpnc_dbus_process_helper_ip4_config (DBusConnection *con, DBusMes guint32 ip4_dns_len; guint32 * ip4_nbns; guint32 ip4_nbns_len; - guint32 mss; char * cisco_def_domain; char * cisco_banner; gboolean success = FALSE; DBusMessage * signal; + DBusMessageIter iter, iter_dict; g_return_if_fail (data != NULL); g_return_if_fail (con != NULL); @@ -896,44 +900,107 @@ static void nm_vpnc_dbus_process_helper_ip4_config (DBusConnection *con, DBusMes nm_vpnc_cancel_helper_timer (data); if (!dbus_message_get_args(message, NULL, - DBUS_TYPE_UINT32, &ip4_vpn_gateway, - DBUS_TYPE_STRING, &tundev, - DBUS_TYPE_UINT32, &ip4_address, - DBUS_TYPE_UINT32, &ip4_netmask, - DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &ip4_dns, &ip4_dns_len, - DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &ip4_nbns, &ip4_nbns_len, - DBUS_TYPE_STRING, &cisco_def_domain, - DBUS_TYPE_STRING, &cisco_banner, DBUS_TYPE_INVALID)) + DBUS_TYPE_UINT32, &ip4_vpn_gateway, + DBUS_TYPE_STRING, &tundev, + DBUS_TYPE_UINT32, &ip4_address, + DBUS_TYPE_UINT32, &ip4_netmask, + DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &ip4_dns, &ip4_dns_len, + DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &ip4_nbns, &ip4_nbns_len, + DBUS_TYPE_STRING, &cisco_def_domain, + DBUS_TYPE_STRING, &cisco_banner, DBUS_TYPE_INVALID)) goto out; /* For Cisco/vpnc, PtP address == local VPN address */ ip4_ptp_address = ip4_address; - /* and we don't specify an MSS */ - mss = 0; - #if 0 print_vpn_config (ip4_vpn_gateway, tundev, ip4_address, ip4_netmask, ip4_dns, ip4_dns_len, ip4_nbns, ip4_nbns_len, cisco_def_domain, cisco_banner); #endif - if (!(signal = dbus_message_new_signal (NM_DBUS_PATH_VPNC, NM_DBUS_INTERFACE_VPNC, NM_DBUS_VPN_SIGNAL_IP4_CONFIG))) + signal = dbus_message_new_signal (NM_DBUS_PATH_VPNC, + NM_DBUS_INTERFACE_VPNC, + NM_DBUS_VPN_SIGNAL_IP4_CONFIG); + if (signal == NULL) goto out; - dbus_message_append_args (signal, - DBUS_TYPE_UINT32, &ip4_vpn_gateway, - DBUS_TYPE_STRING, &tundev, - DBUS_TYPE_UINT32, &ip4_address, - DBUS_TYPE_UINT32, &ip4_ptp_address, - DBUS_TYPE_UINT32, &ip4_netmask, - DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &ip4_dns, ip4_dns_len, - DBUS_TYPE_ARRAY, DBUS_TYPE_UINT32, &ip4_nbns, ip4_nbns_len, - DBUS_TYPE_UINT32, &mss, - DBUS_TYPE_STRING, &cisco_def_domain, - DBUS_TYPE_STRING, &cisco_banner, DBUS_TYPE_INVALID); - if (!dbus_connection_send (data->con, signal, NULL)) - { + dbus_message_iter_init_append (signal, &iter); + if (!nmu_dbus_dict_open_write (&iter, &iter_dict)) { + nm_warning ("dict open write failed!"); + goto out; + } + + if (!nmu_dbus_dict_append_uint32 (&iter_dict, "gateway", ip4_vpn_gateway)) { + nm_warning ("couldn't append gateway to dict"); + goto out; + } + + if (!nmu_dbus_dict_append_string (&iter_dict, "tundev", tundev)) { + nm_warning ("couldn't append tundev to dict"); + goto out; + } + + if (!nmu_dbus_dict_append_uint32 (&iter_dict, "local_addr", ip4_address)) { + nm_warning ("couldn't append local_address to dict"); + goto out; + } + + if (!nmu_dbus_dict_append_uint32 (&iter_dict, "ptp_addr", ip4_ptp_address)) { + nm_warning ("couldn't append ptp_address to dict"); + goto out; + } + + if (!nmu_dbus_dict_append_uint32 (&iter_dict, "netmask", ip4_netmask)) { + nm_warning ("couldn't append local_address to dict"); + goto out; + } + + if (ip4_dns_len > 0) { + if (!nmu_dbus_dict_append_uint32_array (&iter_dict, + "dns_server", + ip4_dns, + ip4_dns_len)) { + nm_warning ("couldn't append dns_servers to dict"); + goto out; + } + } + + if (ip4_nbns_len > 0) { + if (!nmu_dbus_dict_append_uint32_array (&iter_dict, + "nbns_server", + ip4_nbns, + ip4_nbns_len)) { + nm_warning ("couldn't append nbns_servers to dict"); + goto out; + } + } + + if (!nmu_dbus_dict_append_uint32 (&iter_dict, "mtu", 1412)) { + nm_warning ("couldn't append mtu to dict"); + goto out; + } + + if (!nmu_dbus_dict_append_string (&iter_dict, + "dns_domain", + cisco_def_domain)) { + nm_warning ("couldn't append DNS domain"); + } + + if (cisco_banner && strlen (cisco_banner)) { + if (!nmu_dbus_dict_append_string (&iter_dict, + "banner", + cisco_banner)) { + nm_warning ("couldn't append login banner"); + } + } + + if (!nmu_dbus_dict_close_write (&iter, &iter_dict)) { + nm_warning ("dict close write failed!"); + goto out; + } + + if (!dbus_connection_send (data->con, signal, NULL)) { nm_warning ("Could not raise the "NM_DBUS_VPN_SIGNAL_IP4_CONFIG" signal!"); goto out; } @@ -943,8 +1010,7 @@ static void nm_vpnc_dbus_process_helper_ip4_config (DBusConnection *con, DBusMes success = TRUE; out: - if (!success) - { + if (!success) { nm_warning ("Received invalid IP4 Config information from helper, terminating vpnc."); nm_vpnc_dbus_handle_stop_vpn (data); }