From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Tue, 14 Jun 2016 14:38:07 +0200 Subject: [PATCH] proxy: Fix persistent session with oVirt 3.6 commit d3683c2 "proxy: Only set 'Prefer: persistent-auth' with jsession-id" was working as expected when using the OvirtProxy::jsession-id and OvirtProxy::sso-token properties. However, when not using these properties and expecting the jsessionid to be set as a cookie during a regular HTTP session, this was not working properly as oVirt is not sending a jsessionid cookie when Prefer: persistent-auth is not set. Consequently, we need to set it upon OvirtProxy creation in order not to break this usecase. We don't add the header in RestProxyCall as was done before as we want to be able to disable this addition after OvirtProxy::sso-token has been set. --- govirt/ovirt-proxy.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/govirt/ovirt-proxy.c b/govirt/ovirt-proxy.c index fc0273f..08e42d2 100644 --- a/govirt/ovirt-proxy.c +++ b/govirt/ovirt-proxy.c @@ -801,9 +801,6 @@ static void ovirt_proxy_set_session_id(OvirtProxy *proxy, const char *session_id cookie = soup_cookie_new("JSESSIONID", session_id, domain, "/ovirt-engine/api", -1); soup_cookie_jar_add_cookie(proxy->priv->cookie_jar, cookie); proxy->priv->jsessionid_cookie = cookie; - ovirt_proxy_add_header(proxy, "Prefer", "persistent-auth"); - } else { - ovirt_proxy_add_header(proxy, "Prefer", NULL); } g_free(url); } @@ -815,6 +812,7 @@ static void ovirt_proxy_set_sso_token(OvirtProxy *proxy, const char *sso_token) g_free(proxy->priv->sso_token); proxy->priv->sso_token = g_strdup(sso_token); + ovirt_proxy_add_header(proxy, "Prefer", NULL); header_value = g_strdup_printf("Bearer %s", sso_token); ovirt_proxy_add_header(proxy, "Authorization", header_value); g_free(header_value); @@ -903,6 +901,7 @@ static void ovirt_proxy_constructed(GObject *gobject) g_warning("Disabling strict checking of SSL certificates"); g_object_set(OVIRT_PROXY(gobject), "ssl-strict", FALSE, NULL); } + ovirt_proxy_add_header(OVIRT_PROXY(gobject), "Prefer", "persistent-auth"); /* Chain up to the parent class */ if (G_OBJECT_CLASS(ovirt_proxy_parent_class)->constructed)