diff options
Diffstat (limited to 'libnm-core/nm-setting-proxy.c')
| -rw-r--r-- | libnm-core/nm-setting-proxy.c | 487 |
1 files changed, 249 insertions, 238 deletions
diff --git a/libnm-core/nm-setting-proxy.c b/libnm-core/nm-setting-proxy.c index a81b2d03..df91fdd0 100644 --- a/libnm-core/nm-setting-proxy.c +++ b/libnm-core/nm-setting-proxy.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: LGPL-2.1+ +/* SPDX-License-Identifier: LGPL-2.1+ */ /* * Copyright (C) 2016 Atul Anand <atulhjp@gmail.com>. */ @@ -26,23 +26,19 @@ /*****************************************************************************/ -NM_GOBJECT_PROPERTIES_DEFINE_BASE ( - PROP_METHOD, - PROP_BROWSER_ONLY, - PROP_PAC_URL, - PROP_PAC_SCRIPT, -); +NM_GOBJECT_PROPERTIES_DEFINE_BASE(PROP_METHOD, PROP_BROWSER_ONLY, PROP_PAC_URL, PROP_PAC_SCRIPT, ); typedef struct { - char *pac_url; - char *pac_script; - int method; - bool browser_only:1; + char *pac_url; + char *pac_script; + int method; + bool browser_only : 1; } NMSettingProxyPrivate; -G_DEFINE_TYPE (NMSettingProxy, nm_setting_proxy, NM_TYPE_SETTING) +G_DEFINE_TYPE(NMSettingProxy, nm_setting_proxy, NM_TYPE_SETTING) -#define NM_SETTING_PROXY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_PROXY, NMSettingProxyPrivate)) +#define NM_SETTING_PROXY_GET_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE((o), NM_TYPE_SETTING_PROXY, NMSettingProxyPrivate)) /*****************************************************************************/ @@ -59,11 +55,11 @@ G_DEFINE_TYPE (NMSettingProxy, nm_setting_proxy, NM_TYPE_SETTING) * Since: 1.6 **/ NMSettingProxyMethod -nm_setting_proxy_get_method (NMSettingProxy *setting) +nm_setting_proxy_get_method(NMSettingProxy *setting) { - g_return_val_if_fail (NM_IS_SETTING_PROXY (setting), NM_SETTING_PROXY_METHOD_NONE); + g_return_val_if_fail(NM_IS_SETTING_PROXY(setting), NM_SETTING_PROXY_METHOD_NONE); - return NM_SETTING_PROXY_GET_PRIVATE (setting)->method; + return NM_SETTING_PROXY_GET_PRIVATE(setting)->method; } /** @@ -76,11 +72,11 @@ nm_setting_proxy_get_method (NMSettingProxy *setting) * Since: 1.6 **/ gboolean -nm_setting_proxy_get_browser_only (NMSettingProxy *setting) +nm_setting_proxy_get_browser_only(NMSettingProxy *setting) { - g_return_val_if_fail (NM_IS_SETTING_PROXY (setting), FALSE); + g_return_val_if_fail(NM_IS_SETTING_PROXY(setting), FALSE); - return NM_SETTING_PROXY_GET_PRIVATE (setting)->browser_only; + return NM_SETTING_PROXY_GET_PRIVATE(setting)->browser_only; } /** @@ -92,11 +88,11 @@ nm_setting_proxy_get_browser_only (NMSettingProxy *setting) * Since: 1.6 **/ const char * -nm_setting_proxy_get_pac_url (NMSettingProxy *setting) +nm_setting_proxy_get_pac_url(NMSettingProxy *setting) { - g_return_val_if_fail (NM_IS_SETTING_PROXY (setting), NULL); + g_return_val_if_fail(NM_IS_SETTING_PROXY(setting), NULL); - return NM_SETTING_PROXY_GET_PRIVATE (setting)->pac_url; + return NM_SETTING_PROXY_GET_PRIVATE(setting)->pac_url; } /** @@ -108,139 +104,150 @@ nm_setting_proxy_get_pac_url (NMSettingProxy *setting) * Since: 1.6 **/ const char * -nm_setting_proxy_get_pac_script (NMSettingProxy *setting) +nm_setting_proxy_get_pac_script(NMSettingProxy *setting) { - g_return_val_if_fail (NM_IS_SETTING_PROXY (setting), NULL); + g_return_val_if_fail(NM_IS_SETTING_PROXY(setting), NULL); - return NM_SETTING_PROXY_GET_PRIVATE (setting)->pac_script; + return NM_SETTING_PROXY_GET_PRIVATE(setting)->pac_script; } static gboolean -verify (NMSetting *setting, NMConnection *connection, GError **error) +verify(NMSetting *setting, NMConnection *connection, GError **error) { - NMSettingProxyPrivate *priv = NM_SETTING_PROXY_GET_PRIVATE (setting); - - if (!NM_IN_SET (priv->method, - NM_SETTING_PROXY_METHOD_NONE, - NM_SETTING_PROXY_METHOD_AUTO)) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("invalid proxy method")); - g_prefix_error (error, "%s.%s: ", NM_SETTING_PROXY_SETTING_NAME, NM_SETTING_PROXY_PAC_URL); - return FALSE; - } - - if (priv->method != NM_SETTING_PROXY_METHOD_AUTO) { - if (priv->pac_url) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("this property is not allowed for method none")); - g_prefix_error (error, "%s.%s: ", NM_SETTING_PROXY_SETTING_NAME, NM_SETTING_PROXY_PAC_URL); - return FALSE; - } - - if (priv->pac_script) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("this property is not allowed for method none")); - g_prefix_error (error, "%s.%s: ", NM_SETTING_PROXY_SETTING_NAME, NM_SETTING_PROXY_PAC_SCRIPT); - return FALSE; - } - } - - if (priv->pac_script) { - if (strlen (priv->pac_script) > 1*1024*1024) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("the script is too large")); - g_prefix_error (error, "%s.%s: ", NM_SETTING_PROXY_SETTING_NAME, NM_SETTING_PROXY_PAC_SCRIPT); - return FALSE; - } - if (!g_utf8_validate (priv->pac_script, -1, NULL)) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("the script is not valid utf8")); - g_prefix_error (error, "%s.%s: ", NM_SETTING_PROXY_SETTING_NAME, NM_SETTING_PROXY_PAC_SCRIPT); - return FALSE; - } - if (!strstr (priv->pac_script, "FindProxyForURL")) { - g_set_error (error, - NM_CONNECTION_ERROR, - NM_CONNECTION_ERROR_INVALID_PROPERTY, - _("the script lacks FindProxyForURL function")); - g_prefix_error (error, "%s.%s: ", NM_SETTING_PROXY_SETTING_NAME, NM_SETTING_PROXY_PAC_SCRIPT); - return FALSE; - } - } - - return TRUE; + NMSettingProxyPrivate *priv = NM_SETTING_PROXY_GET_PRIVATE(setting); + + if (!NM_IN_SET(priv->method, NM_SETTING_PROXY_METHOD_NONE, NM_SETTING_PROXY_METHOD_AUTO)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("invalid proxy method")); + g_prefix_error(error, "%s.%s: ", NM_SETTING_PROXY_SETTING_NAME, NM_SETTING_PROXY_PAC_URL); + return FALSE; + } + + if (priv->method != NM_SETTING_PROXY_METHOD_AUTO) { + if (priv->pac_url) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("this property is not allowed for method none")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_PROXY_SETTING_NAME, + NM_SETTING_PROXY_PAC_URL); + return FALSE; + } + + if (priv->pac_script) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("this property is not allowed for method none")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_PROXY_SETTING_NAME, + NM_SETTING_PROXY_PAC_SCRIPT); + return FALSE; + } + } + + if (priv->pac_script) { + if (strlen(priv->pac_script) > 1 * 1024 * 1024) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("the script is too large")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_PROXY_SETTING_NAME, + NM_SETTING_PROXY_PAC_SCRIPT); + return FALSE; + } + if (!g_utf8_validate(priv->pac_script, -1, NULL)) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("the script is not valid utf8")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_PROXY_SETTING_NAME, + NM_SETTING_PROXY_PAC_SCRIPT); + return FALSE; + } + if (!strstr(priv->pac_script, "FindProxyForURL")) { + g_set_error(error, + NM_CONNECTION_ERROR, + NM_CONNECTION_ERROR_INVALID_PROPERTY, + _("the script lacks FindProxyForURL function")); + g_prefix_error(error, + "%s.%s: ", + NM_SETTING_PROXY_SETTING_NAME, + NM_SETTING_PROXY_PAC_SCRIPT); + return FALSE; + } + } + + return TRUE; } /*****************************************************************************/ static void -get_property (GObject *object, guint prop_id, - GValue *value, GParamSpec *pspec) +get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { - NMSettingProxy *setting = NM_SETTING_PROXY (object); - - switch (prop_id) { - case PROP_METHOD: - g_value_set_int (value, nm_setting_proxy_get_method (setting)); - break; - case PROP_BROWSER_ONLY: - g_value_set_boolean (value, nm_setting_proxy_get_browser_only (setting)); - break; - case PROP_PAC_URL: - g_value_set_string (value, nm_setting_proxy_get_pac_url (setting)); - break; - case PROP_PAC_SCRIPT: - g_value_set_string (value, nm_setting_proxy_get_pac_script (setting)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + NMSettingProxy *setting = NM_SETTING_PROXY(object); + + switch (prop_id) { + case PROP_METHOD: + g_value_set_int(value, nm_setting_proxy_get_method(setting)); + break; + case PROP_BROWSER_ONLY: + g_value_set_boolean(value, nm_setting_proxy_get_browser_only(setting)); + break; + case PROP_PAC_URL: + g_value_set_string(value, nm_setting_proxy_get_pac_url(setting)); + break; + case PROP_PAC_SCRIPT: + g_value_set_string(value, nm_setting_proxy_get_pac_script(setting)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } } static void -set_property (GObject *object, guint prop_id, - const GValue *value, GParamSpec *pspec) +set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { - NMSettingProxyPrivate *priv = NM_SETTING_PROXY_GET_PRIVATE (object); - - switch (prop_id) { - case PROP_METHOD: - priv->method = g_value_get_int (value); - break; - case PROP_BROWSER_ONLY: - priv->browser_only = g_value_get_boolean (value); - break; - case PROP_PAC_URL: - g_free (priv->pac_url); - priv->pac_url = g_value_dup_string (value); - break; - case PROP_PAC_SCRIPT: - g_free (priv->pac_script); - priv->pac_script = g_value_dup_string (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + NMSettingProxyPrivate *priv = NM_SETTING_PROXY_GET_PRIVATE(object); + + switch (prop_id) { + case PROP_METHOD: + priv->method = g_value_get_int(value); + break; + case PROP_BROWSER_ONLY: + priv->browser_only = g_value_get_boolean(value); + break; + case PROP_PAC_URL: + g_free(priv->pac_url); + priv->pac_url = g_value_dup_string(value); + break; + case PROP_PAC_SCRIPT: + g_free(priv->pac_script); + priv->pac_script = g_value_dup_string(value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); + break; + } } /*****************************************************************************/ static void -nm_setting_proxy_init (NMSettingProxy *self) +nm_setting_proxy_init(NMSettingProxy *self) { - nm_assert (NM_SETTING_PROXY_GET_PRIVATE (self)->method == NM_SETTING_PROXY_METHOD_NONE); + nm_assert(NM_SETTING_PROXY_GET_PRIVATE(self)->method == NM_SETTING_PROXY_METHOD_NONE); } /** @@ -253,120 +260,124 @@ nm_setting_proxy_init (NMSettingProxy *self) * Since: 1.6 **/ NMSetting * -nm_setting_proxy_new (void) +nm_setting_proxy_new(void) { - return (NMSetting *) g_object_new (NM_TYPE_SETTING_PROXY, NULL); + return (NMSetting *) g_object_new(NM_TYPE_SETTING_PROXY, NULL); } static void -finalize (GObject *object) +finalize(GObject *object) { - NMSettingProxy *self = NM_SETTING_PROXY (object); - NMSettingProxyPrivate *priv = NM_SETTING_PROXY_GET_PRIVATE (self); + NMSettingProxy * self = NM_SETTING_PROXY(object); + NMSettingProxyPrivate *priv = NM_SETTING_PROXY_GET_PRIVATE(self); - g_free (priv->pac_url); - g_free (priv->pac_script); + g_free(priv->pac_url); + g_free(priv->pac_script); - G_OBJECT_CLASS (nm_setting_proxy_parent_class)->finalize (object); + G_OBJECT_CLASS(nm_setting_proxy_parent_class)->finalize(object); } static void -nm_setting_proxy_class_init (NMSettingProxyClass *klass) +nm_setting_proxy_class_init(NMSettingProxyClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - NMSettingClass *setting_class = NM_SETTING_CLASS (klass); - - g_type_class_add_private (klass, sizeof (NMSettingProxyPrivate)); - - object_class->get_property = get_property; - object_class->set_property = set_property; - object_class->finalize = finalize; - - setting_class->verify = verify; - - /** - * NMSettingProxy:method: - * - * Method for proxy configuration, Default is %NM_SETTING_PROXY_METHOD_NONE - * - * Since: 1.6 - **/ - /* ---ifcfg-rh--- - * property: method - * variable: PROXY_METHOD(+) - * default: none - * description: Method for proxy configuration. For "auto", WPAD is used for - * proxy configuration, or set the PAC file via PAC_URL or PAC_SCRIPT. - * values: none, auto - * ---end--- - */ - obj_properties[PROP_METHOD] = - g_param_spec_int (NM_SETTING_PROXY_METHOD, "", "", - G_MININT32, G_MAXINT32, NM_SETTING_PROXY_METHOD_NONE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - - /** - * NMSettingProxy:browser-only: - * - * Whether the proxy configuration is for browser only. - * - * Since: 1.6 - **/ - /* ---ifcfg-rh--- - * property: browser-only - * variable: BROWSER_ONLY(+) - * default: no - * description: Whether the proxy configuration is for browser only. - * ---end--- - */ - obj_properties[PROP_BROWSER_ONLY] = - g_param_spec_boolean (NM_SETTING_PROXY_BROWSER_ONLY, "", "", - FALSE, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - - /** - * NMSettingProxy:pac-url: - * - * PAC URL for obtaining PAC file. - * - * Since: 1.6 - **/ - /* ---ifcfg-rh--- - * property: pac-url - * variable: PAC_URL(+) - * description: URL for PAC file. - * example: PAC_URL=http://wpad.mycompany.com/wpad.dat - * ---end--- - */ - obj_properties[PROP_PAC_URL] = - g_param_spec_string (NM_SETTING_PROXY_PAC_URL, "", "", - NULL, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - - /** - * NMSettingProxy:pac-script: - * - * PAC script for the connection. - * - * Since: 1.6 - **/ - /* ---ifcfg-rh--- - * property: pac-script - * variable: PAC_SCRIPT(+) - * description: Path of the PAC script. - * example: PAC_SCRIPT=/home/joe/proxy.pac - * ---end--- - */ - obj_properties[PROP_PAC_SCRIPT] = - g_param_spec_string (NM_SETTING_PROXY_PAC_SCRIPT, "", "", - NULL, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS); - - g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties); - - _nm_setting_class_commit (setting_class, NM_META_SETTING_TYPE_PROXY); + GObjectClass * object_class = G_OBJECT_CLASS(klass); + NMSettingClass *setting_class = NM_SETTING_CLASS(klass); + + g_type_class_add_private(klass, sizeof(NMSettingProxyPrivate)); + + object_class->get_property = get_property; + object_class->set_property = set_property; + object_class->finalize = finalize; + + setting_class->verify = verify; + + /** + * NMSettingProxy:method: + * + * Method for proxy configuration, Default is %NM_SETTING_PROXY_METHOD_NONE + * + * Since: 1.6 + **/ + /* ---ifcfg-rh--- + * property: method + * variable: PROXY_METHOD(+) + * default: none + * description: Method for proxy configuration. For "auto", WPAD is used for + * proxy configuration, or set the PAC file via PAC_URL or PAC_SCRIPT. + * values: none, auto + * ---end--- + */ + obj_properties[PROP_METHOD] = g_param_spec_int(NM_SETTING_PROXY_METHOD, + "", + "", + G_MININT32, + G_MAXINT32, + NM_SETTING_PROXY_METHOD_NONE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingProxy:browser-only: + * + * Whether the proxy configuration is for browser only. + * + * Since: 1.6 + **/ + /* ---ifcfg-rh--- + * property: browser-only + * variable: BROWSER_ONLY(+) + * default: no + * description: Whether the proxy configuration is for browser only. + * ---end--- + */ + obj_properties[PROP_BROWSER_ONLY] = + g_param_spec_boolean(NM_SETTING_PROXY_BROWSER_ONLY, + "", + "", + FALSE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingProxy:pac-url: + * + * PAC URL for obtaining PAC file. + * + * Since: 1.6 + **/ + /* ---ifcfg-rh--- + * property: pac-url + * variable: PAC_URL(+) + * description: URL for PAC file. + * example: PAC_URL=http://wpad.mycompany.com/wpad.dat + * ---end--- + */ + obj_properties[PROP_PAC_URL] = g_param_spec_string(NM_SETTING_PROXY_PAC_URL, + "", + "", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + /** + * NMSettingProxy:pac-script: + * + * PAC script for the connection. + * + * Since: 1.6 + **/ + /* ---ifcfg-rh--- + * property: pac-script + * variable: PAC_SCRIPT(+) + * description: Path of the PAC script. + * example: PAC_SCRIPT=/home/joe/proxy.pac + * ---end--- + */ + obj_properties[PROP_PAC_SCRIPT] = + g_param_spec_string(NM_SETTING_PROXY_PAC_SCRIPT, + "", + "", + NULL, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties(object_class, _PROPERTY_ENUMS_LAST, obj_properties); + + _nm_setting_class_commit(setting_class, NM_META_SETTING_TYPE_PROXY); } |