commit 7af1423a989cac5af9cada6fbc5972f2b769c56b
Author: Richard Hughes <richard@hughsie.com>
Date: Fri Apr 24 15:42:55 2009 +0100
bugfix: To fix spawned backends, http_proxy has to be a URI not a bare proxy. Fixes RH#491859
diff --git a/src/pk-backend-spawn.c b/src/pk-backend-spawn.c
index 2942584..a283e97 100644
--- a/src/pk-backend-spawn.c
+++ b/src/pk-backend-spawn.c
@@ -538,6 +538,33 @@ pk_backend_spawn_stderr_cb (PkBackendSpawn *spawn, const gchar *line, PkBackendS
}
/**
+ * pk_backend_spawn_convert_uri:
+ *
+ * Our proxy variable is typically 'username:password@server:port'
+ * but http_proxy expects 'http://username:password@server:port/'
+ **/
+static gchar *
+pk_backend_spawn_convert_uri (const gchar *proxy)
+{
+ GString *string;
+ string = g_string_new (proxy);
+
+ /* if we didn't specify a prefix, add a default one */
+ if (!g_str_has_prefix (proxy, "http://") &&
+ !g_str_has_prefix (proxy, "https://") &&
+ !g_str_has_prefix (proxy, "ftp://")) {
+ g_string_prepend (string, "http://");
+ }
+
+ /* if we didn't specify a trailing slash, add one */
+ if (!g_str_has_suffix (proxy, "/")) {
+ g_string_append_c (string, '/');
+ }
+
+ return g_string_free (string, FALSE);
+}
+
+/**
* pk_backend_spawn_get_envp:
*
* Return all the environment variables the script will need
@@ -548,6 +575,7 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
gchar **envp;
gchar *value;
gchar *line;
+ gchar *uri;
GPtrArray *array;
gboolean ret;
@@ -556,18 +584,22 @@ pk_backend_spawn_get_envp (PkBackendSpawn *backend_spawn)
/* http_proxy */
value = pk_backend_get_proxy_http (backend_spawn->priv->backend);
if (!egg_strzero (value)) {
- line = g_strdup_printf ("%s=%s", "http_proxy", value);
+ uri = pk_backend_spawn_convert_uri (value);
+ line = g_strdup_printf ("%s=%s", "http_proxy", uri);
egg_debug ("setting evp '%s'", line);
g_ptr_array_add (array, line);
+ g_free (uri);
}
g_free (value);
/* ftp_proxy */
value = pk_backend_get_proxy_ftp (backend_spawn->priv->backend);
if (!egg_strzero (value)) {
- line = g_strdup_printf ("%s=%s", "ftp_proxy", value);
+ uri = pk_backend_spawn_convert_uri (value);
+ line = g_strdup_printf ("%s=%s", "ftp_proxy", uri);
egg_debug ("setting evp '%s'", line);
g_ptr_array_add (array, line);
+ g_free (uri);
}
g_free (value);
@@ -897,6 +929,7 @@ pk_backend_test_spawn (EggTest *test)
const gchar *text;
guint refcount;
gboolean ret;
+ gchar *uri;
loop = g_main_loop_new (NULL, FALSE);
@@ -1029,6 +1062,26 @@ pk_backend_test_spawn (EggTest *test)
egg_test_assert (test, !ret);
/************************************************************
+ ********** Check uri conversion ***********
+ ************************************************************/
+ egg_test_title (test, "convert proxy uri (bare)");
+ uri = pk_backend_spawn_convert_uri ("username:password@server:port");
+ egg_test_assert (test, (g_strcmp0 (uri, "http://username:password@server:port/") == 0));
+ g_free (uri);
+
+ /************************************************************/
+ egg_test_title (test, "convert proxy uri (full)");
+ uri = pk_backend_spawn_convert_uri ("http://username:password@server:port/");
+ egg_test_assert (test, (g_strcmp0 (uri, "http://username:password@server:port/") == 0));
+ g_free (uri);
+
+ /************************************************************/
+ egg_test_title (test, "convert proxy uri (partial)");
+ uri = pk_backend_spawn_convert_uri ("ftp://username:password@server:port");
+ egg_test_assert (test, (g_strcmp0 (uri, "ftp://username:password@server:port/") == 0));
+ g_free (uri);
+
+ /************************************************************
********** Check parsing common out ***********
************************************************************/
egg_test_title (test, "test pk_backend_spawn_parse_common_out Package");