X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=d1dfe502b62748282e28f3f328c262319e0bcfb2;hp=144c0f484750a4be912e42f64977044a989ad6b1;hb=3d536728dae01844f9a2b89337eb3b3fdb759382;hpb=a2a90fc5775ae4d90cdff3c636fadf42315db540 diff --git a/client/client.c b/client/client.c index 144c0f4..d1dfe50 100644 --- a/client/client.c +++ b/client/client.c @@ -1280,6 +1280,8 @@ static int send_SRW_redirect(const char *uri, Z_HTTP_Response *cookie_hres) const char *username = 0; const char *password = 0; struct Z_HTTP_Header *h; + char *combined_cookies; + int combined_cookies_len = 0; Z_GDU *gdu = get_HTTP_Request_url(out, uri); gdu->u.HTTP_Request->method = odr_strdup(out, "GET"); @@ -1288,9 +1290,24 @@ static int send_SRW_redirect(const char *uri, Z_HTTP_Response *cookie_hres) for (h = cookie_hres->headers; h; h = h->next) { - if (!strcmp(h->name, "Set-Cookie")) - z_HTTP_header_add(out, &gdu->u.HTTP_Request->headers, - "Cookie", h->value); + if (!strcmp(h->name, "Set-Cookie")) { + char *cp; + + if (!(cp = strchr(h->value, ';'))) + cp = h->value + strlen(h->value); + if (cp - h->value >= 1) { + combined_cookies = xrealloc(combined_cookies, combined_cookies_len + cp - h->value + 3); + memcpy(combined_cookies+combined_cookies_len, h->value, cp - h->value); + combined_cookies[combined_cookies_len + cp - h->value] = '\0'; + strcat(combined_cookies,"; "); + combined_cookies_len = strlen(combined_cookies); + } + } + } + if (combined_cookies_len) + { + z_HTTP_header_add(out, &gdu->u.HTTP_Request->headers, "Cookie", combined_cookies); + xfree(combined_cookies); } if (auth)