proxy: merge branch 'jk/proxy-fixes'

https://bugzilla.gnome.org/show_bug.cgi?id=777385
This commit is contained in:
Thomas Haller 2017-01-17 14:27:42 +01:00
commit 4100fc1d4d
7 changed files with 173 additions and 35 deletions

View file

@ -2033,6 +2033,7 @@ EXTRA_DIST += \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port-1 \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port-2 \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-team-port-empty-config \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-read-proxy-basic \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-vlan-trailing-spaces \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-dns-options \
src/settings/plugins/ifcfg-rh/tests/network-scripts/ifcfg-test-wired-wake-on-lan \

View file

@ -5657,6 +5657,8 @@ should_complete_files (const char *prompt, const char *line)
"phase2-private-key",
/* 'team' and 'team-port' properties */
"config",
/* 'proxy' properties */
"pac-script",
NULL
};
return _get_and_check_property (prompt, line, file_properties, NULL, NULL);

View file

@ -2354,6 +2354,18 @@ nmc_property_proxy_set_method (NMSetting *setting, const char *prop,
return TRUE;
}
static const char **
nmc_property_proxy_allowed_method (NMSetting *setting, const char *prop)
{
static const char **words = NULL;
if (!words)
words = nm_utils_enum_get_values (nm_setting_proxy_method_get_type(),
NM_SETTING_PROXY_METHOD_NONE,
G_MAXINT);
return words;
}
static gboolean
nmc_property_proxy_set_pac_script (NMSetting *setting, const char *prop,
const char *val, GError **error)
@ -8155,7 +8167,7 @@ nmc_properties_init (void)
nmc_property_proxy_set_method,
NULL,
NULL,
NULL,
nmc_property_proxy_allowed_method,
NULL);
nmc_add_prop_funcs (GLUE (PROXY, BROWSER_ONLY),
nmc_property_proxy_get_browser_only,

View file

@ -27,15 +27,15 @@
/**
* SECTION:nm-setting-proxy
* @short_description: Describes Proxy Url, Script and other related properties
* @short_description: Describes proxy URL, script and other related properties
*
* The #NMSettingProxy object is a #NMSetting subclass that describes properties
* related to Proxy settings like Pac Url, Pac Script etc.
* related to Proxy settings like PAC URL, PAC script etc.
*
* NetworkManager support 2 values for the #NMSettingProxy:method property for
* proxy. If "auto" is specified then WPAD takes places and the appropriate details
* are pushed into PacRunner or user can override this URL with a new PAC url or a
* PAC Script. If "none" is selected then no proxy configuration is given to PacRunner
* proxy. If "auto" is specified then WPAD takes place and the appropriate details
* are pushed into PacRunner or user can override this URL with a new PAC URL or a
* PAC script. If "none" is selected then no proxy configuration is given to PacRunner
* to fulfill client queries.
**/
@ -81,8 +81,8 @@ nm_setting_proxy_new (void)
* nm_setting_proxy_get_method:
* @setting: the #NMSettingProxy
*
* Returns the proxy configuration method. By default the value is "NONE".
* "NONE" should be selected for a connection intended for direct network
* Returns the proxy configuration method. By default the value is %NM_SETTING_PROXY_METHOD_NONE.
* %NM_SETTING_PROXY_METHOD_NONE should be selected for a connection intended for direct network
* access.
*
* Returns: the proxy configuration method
@ -101,8 +101,8 @@ nm_setting_proxy_get_method (NMSettingProxy *setting)
* nm_setting_proxy_get_browser_only:
* @setting: the #NMSettingProxy
*
* Returns: TRUE if this proxy configuration is only for Browser
* clients/schemes otherwise FALSE.
* Returns: %TRUE if this proxy configuration is only for browser
* clients/schemes, %FALSE otherwise.
*
* Since: 1.6
**/
@ -118,7 +118,7 @@ nm_setting_proxy_get_browser_only (NMSettingProxy *setting)
* nm_setting_proxy_get_pac_url:
* @setting: the #NMSettingProxy
*
* Returns: the PAC url for obtaining PAC file
* Returns: the PAC URL for obtaining PAC file
*
* Since: 1.6
**/
@ -134,7 +134,7 @@ nm_setting_proxy_get_pac_url (NMSettingProxy *setting)
* nm_setting_proxy_get_pac_script:
* @setting: the #NMSettingProxy
*
* Returns: the PAC Script
* Returns: the PAC script
*
* Since: 1.6
**/
@ -301,10 +301,19 @@ nm_setting_proxy_class_init (NMSettingProxyClass *setting_class)
/**
* NMSettingProxy:method:
*
* Method for proxy configuration, Default is "NONE"
* 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---
*/
g_object_class_install_property
(object_class, PROP_METHOD,
g_param_spec_int (NM_SETTING_PROXY_METHOD, "", "",
@ -316,24 +325,38 @@ nm_setting_proxy_class_init (NMSettingProxyClass *setting_class)
/**
* NMSettingProxy:browser-only:
*
* TRUE if Proxy is for Browser Stuff.
* 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---
*/
g_object_class_install_property
(object_class, PROP_BROWSER_ONLY,
g_param_spec_boolean (NM_SETTING_PROXY_BROWSER_ONLY, "", "",
FALSE,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
FALSE,
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS));
/**
* NMSettingProxy:pac-url:
*
* PAC Url for obtaining PAC File.
* 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---
*/
g_object_class_install_property
(object_class, PROP_PAC_URL,
g_param_spec_string (NM_SETTING_PROXY_PAC_URL, "", "",
@ -344,10 +367,17 @@ nm_setting_proxy_class_init (NMSettingProxyClass *setting_class)
/**
* NMSettingProxy:pac-script:
*
* PAC Script For the connection.
* 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---
*/
g_object_class_install_property
(object_class, PROP_PAC_SCRIPT,
g_param_spec_string (NM_SETTING_PROXY_PAC_SCRIPT, "", "",

View file

@ -119,7 +119,7 @@ add_ip4_config (NMPacrunnerManager *self, GVariantBuilder *proxy_data, NMIP4Conf
int i;
char *cidr = NULL;
/* Extract Searches */
/* Extract searches */
for (i = 0; i < nm_ip4_config_get_num_searches (ip4); i++)
g_ptr_array_add (priv->domains, g_strdup (nm_ip4_config_get_search (ip4, i)));
@ -127,7 +127,7 @@ add_ip4_config (NMPacrunnerManager *self, GVariantBuilder *proxy_data, NMIP4Conf
for (i = 0; i < nm_ip4_config_get_num_domains (ip4); i++)
g_ptr_array_add (priv->domains, g_strdup (nm_ip4_config_get_domain (ip4, i)));
/* Add Addresses and routes in CIDR form */
/* Add addresses and routes in CIDR form */
for (i = 0; i < nm_ip4_config_get_num_addresses (ip4); i++) {
const NMPlatformIP4Address *address = nm_ip4_config_get_address (ip4, i);
@ -164,7 +164,7 @@ add_ip6_config (NMPacrunnerManager *self, GVariantBuilder *proxy_data, NMIP6Conf
for (i = 0; i < nm_ip6_config_get_num_domains (ip6); i++)
g_ptr_array_add (priv->domains, g_strdup (nm_ip6_config_get_domain (ip6, i)));
/* Add Addresses and routes in CIDR form */
/* Add addresses and routes in CIDR form */
for (i = 0; i < nm_ip6_config_get_num_addresses (ip6); i++) {
const NMPlatformIP6Address *address = nm_ip6_config_get_address (ip6, i);
@ -205,7 +205,7 @@ pacrunner_send_done (GObject *source, GAsyncResult *res, gpointer user_data)
g_variant_get (variant, "(&o)", &path);
/* Replace the old path (if any) of proxy config with the new one returned
* from CreateProxyConfiguration() DBus method on PacRunner.
* from CreateProxyConfiguration() DBus method on pacrunner.
*/
for (iter = g_list_first (priv->remove); iter; iter = g_list_next (iter)) {
struct remove_data *r = iter->data;
@ -258,12 +258,12 @@ name_owner_changed (GObject *object,
owner = g_dbus_proxy_get_name_owner (G_DBUS_PROXY (object));
if (owner) {
_LOGD ("PacRunner appeared as %s", owner);
_LOGD ("pacrunner appeared as %s", owner);
for (iter = g_list_first(priv->args); iter; iter = g_list_next(iter)) {
send_pacrunner_proxy_data (self, iter->data);
}
} else {
_LOGD ("PacRunner disappeared");
_LOGD ("pacrunner disappeared");
}
}
@ -293,12 +293,12 @@ pacrunner_proxy_cb (GObject *source, GAsyncResult *res, gpointer user_data)
}
/**
* nm_pacrunner_manager_send():
* nm_pacrunner_manager_send:
* @self: the #NMPacrunnerManager
* @iface: the iface for the connection or %NULL
* @proxy_config: Proxy config of the connection
* @ip4_conifg: IP4 Cofig of the connection
* @ip6_config: IP6 Config of the connection
* @proxy_config: proxy config of the connection
* @ip4_config: IP4 config of the connection
* @ip6_config: IP6 config of the connection
*/
void
nm_pacrunner_manager_send (NMPacrunnerManager *self,
@ -345,7 +345,7 @@ nm_pacrunner_manager_send (NMPacrunnerManager *self,
priv->domains = g_ptr_array_new_with_free_func (g_free);
/* Extract stuff from Configs */
/* Extract stuff from configs */
add_proxy_config (self, &proxy_data, proxy_config);
if (ip4_config)
@ -366,9 +366,9 @@ nm_pacrunner_manager_send (NMPacrunnerManager *self,
pacrunner_manager_args = g_variant_ref_sink (g_variant_new ("(a{sv})", &proxy_data));
priv->args = g_list_append (priv->args, pacrunner_manager_args);
/* Send if PacRunner is available on Bus, otherwise
/* Send if pacrunner is available on Bus, otherwise
* argument has already been appended above to be
* sent when PacRunner appears.
* sent when pacrunner appears.
*/
send_pacrunner_proxy_data (self, pacrunner_manager_args);
}
@ -387,14 +387,14 @@ pacrunner_remove_done (GObject *source, GAsyncResult *res, gpointer user_data)
if (!ret)
_LOGD ("Couldn't remove proxy config from pacrunner: %s", error->message);
else
_LOGD ("Sucessfully removed proxy config from pacrunner");
_LOGD ("Successfully removed proxy config from pacrunner");
}
/**
* nm_pacrunner_manager_remove():
* nm_pacrunner_manager_remove:
* @self: the #NMPacrunnerManager
* @iface: the iface for the connection to be removed
* from PacRunner
* from pacrunner
*/
void
nm_pacrunner_manager_remove (NMPacrunnerManager *self, const char *iface)

View file

@ -0,0 +1,15 @@
# Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile)
TYPE=Ethernet
DEVICE=eth0
HWADDR=00:11:22:33:44:ee
BOOTPROTO=dhcp
ONBOOT=yes
USERCTL=yes
IPV6INIT=no
NM_CONTROLLED=yes
PEERDNS=no
# proxy configuration
PROXY_METHOD=auto
PAC_URL=http://wpad.mycompany.com/wpad.dat
BROWSER_ONLY=yes

View file

@ -8268,6 +8268,81 @@ test_read_team_port_empty_config (void)
g_object_unref (connection);
}
static void
test_read_proxy_basic (void)
{
NMConnection *connection;
NMSettingProxy *s_proxy;
/* Test basic proxy configuration */
connection = _connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-read-proxy-basic",
NULL, TYPE_ETHERNET, NULL);
/* ===== Proxy setting ===== */
s_proxy = nm_connection_get_setting_proxy (connection);
g_assert (s_proxy);
/* Proxy method */
g_assert_cmpint (nm_setting_proxy_get_method (s_proxy), ==, NM_SETTING_PROXY_METHOD_AUTO);
g_assert (nm_setting_proxy_get_browser_only (s_proxy));
g_assert_cmpstr (nm_setting_proxy_get_pac_url (s_proxy), ==, "http://wpad.mycompany.com/wpad.dat");
g_object_unref (connection);
}
static void
test_write_proxy_basic (void)
{
nmtst_auto_unlinkfile char *testfile = NULL;
gs_unref_object NMConnection *connection = NULL;
gs_unref_object NMConnection *reread = NULL;
NMSettingConnection *s_con;
NMSettingWired *s_wired;
NMSettingProxy *s_proxy;
const char *expected_url = "https://wpad.neverland.org/wpad.dat";
shvarFile *f;
connection = nm_simple_connection_new ();
/* Connection setting */
s_con = (NMSettingConnection *) nm_setting_connection_new ();
nm_connection_add_setting (connection, NM_SETTING (s_con));
g_object_set (s_con,
NM_SETTING_CONNECTION_ID, "Test Write Proxy Basic",
NM_SETTING_CONNECTION_UUID, nm_utils_uuid_generate_a (),
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
NULL);
/* Proxy setting */
s_proxy = (NMSettingProxy *) nm_setting_proxy_new ();
nm_connection_add_setting (connection, NM_SETTING (s_proxy));
g_object_set (s_proxy, NM_SETTING_PROXY_METHOD, NM_SETTING_PROXY_METHOD_AUTO, NULL);
g_object_set (s_proxy, NM_SETTING_PROXY_PAC_URL, expected_url, NULL);
/* Wired setting */
s_wired = (NMSettingWired *) nm_setting_wired_new ();
nm_connection_add_setting (connection, NM_SETTING (s_wired));
nmtst_assert_connection_verifies (connection);
_writer_new_connection (connection,
TEST_SCRATCH_DIR "/network-scripts/",
&testfile);
f = _svOpenFile (testfile);
_svGetValue_check (f, "TYPE", "Ethernet");
_svGetValue_check (f, "PROXY_METHOD", "auto");
_svGetValue_check (f, "PAC_URL", expected_url);
svCloseFile (f);
reread = _connection_from_file (testfile, NULL, TYPE_ETHERNET,
NULL);
nmtst_assert_connection_equals (connection, TRUE, reread, FALSE);
}
/*****************************************************************************/
static const char *
@ -9059,6 +9134,9 @@ int main (int argc, char **argv)
g_test_add_func (TPATH "team/write-port", test_write_team_port);
g_test_add_func (TPATH "team/read-port-empty-config", test_read_team_port_empty_config);
g_test_add_func (TPATH "proxy/read-proxy-basic", test_read_proxy_basic);
g_test_add_func (TPATH "proxy/write-proxy-basic", test_write_proxy_basic);
g_test_add_func (TPATH "sit/read/ignore", test_sit_read_ignore);
/* Stuff we expect to fail for now */