diff --git a/ChangeLog b/ChangeLog index 2554c3a0a9..85900fe579 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-04-17 Dan Williams + + * libnm-util/nm-setting-pppoe.c + - (verify): require a PPP setting too + + * src/ppp-manager/nm-ppp-manager.c + - (nm_ppp_manager_start): fail if no PPP setting is present instead of + segfaulting + 2008-04-17 Dan Williams * src/nm-device.c diff --git a/libnm-util/nm-setting-pppoe.c b/libnm-util/nm-setting-pppoe.c index 7b214a04b5..d3f99e62a8 100644 --- a/libnm-util/nm-setting-pppoe.c +++ b/libnm-util/nm-setting-pppoe.c @@ -2,6 +2,7 @@ #include #include "nm-setting-pppoe.h" +#include "nm-setting-ppp.h" G_DEFINE_TYPE (NMSettingPPPOE, nm_setting_pppoe, NM_TYPE_SETTING) @@ -20,6 +21,15 @@ nm_setting_pppoe_new (void) return (NMSetting *) g_object_new (NM_TYPE_SETTING_PPPOE, NULL); } +static gint +find_setting_by_name (gconstpointer a, gconstpointer b) +{ + NMSetting *setting = NM_SETTING (a); + const char *str = (const char *) b; + + return strcmp (nm_setting_get_name (setting), str); +} + static gboolean verify (NMSetting *setting, GSList *all_settings) { @@ -35,6 +45,11 @@ verify (NMSetting *setting, GSList *all_settings) return FALSE; } + if (!g_slist_find_custom (all_settings, NM_SETTING_PPP_SETTING_NAME, find_setting_by_name)) { + g_warning ("Invalid or missing PPP setting"); + return FALSE; + } + return TRUE; } diff --git a/src/ppp-manager/nm-ppp-manager.c b/src/ppp-manager/nm-ppp-manager.c index 661b4f81a0..2d7727a50d 100644 --- a/src/ppp-manager/nm-ppp-manager.c +++ b/src/ppp-manager/nm-ppp-manager.c @@ -634,8 +634,9 @@ nm_ppp_manager_start (NMPPPManager *manager, connection = nm_act_request_get_connection (req); ppp_setting = NM_SETTING_PPP (nm_connection_get_setting (connection, NM_TYPE_SETTING_PPP)); + g_return_val_if_fail (ppp_setting != NULL, FALSE); + pppoe_setting = (NMSettingPPPOE *) nm_connection_get_setting (connection, NM_TYPE_SETTING_PPPOE); - if (pppoe_setting) pppoe_fill_defaults (ppp_setting);