From d6ad8ebc3a44749cf04adf7f0e8dec1106f5f280 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Thu, 26 Nov 2009 14:58:03 -0500 Subject: Port rest of demo to new cookie signature; fix parsing of multiple incoming cookies --- demo/cookieSec.ur | 2 +- src/c/urweb.c | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/demo/cookieSec.ur b/demo/cookieSec.ur index 447d38ad..98615c78 100644 --- a/demo/cookieSec.ur +++ b/demo/cookieSec.ur @@ -25,7 +25,7 @@ fun main () = and set r = - setCookie username r.User; + setCookie username {Value = r.User, Expires = None, Secure = False}; main () and imHere () = diff --git a/src/c/urweb.c b/src/c/urweb.c index cbe065c3..aaa1278f 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -2667,10 +2667,19 @@ uw_Basis_string uw_Basis_get_cookie(uw_context ctx, uw_Basis_string c) { } if (p = uw_Basis_requestHeader(ctx, "Cookie")) { + char *p2; + while (1) { - if (!strncmp(p, c, len) && p[len] == '=') - return p + 1 + len; - else if (p = strchr(p, ';')) + if (!strncmp(p, c, len) && p[len] == '=') { + if (p2 = strchr(p, ';')) { + size_t n = p2 - (p + len); + char *r = uw_malloc(ctx, n); + memcpy(r, p + 1 + len, n-1); + r[n-1] = 0; + return r; + } else + return p + 1 + len; + } else if (p = strchr(p, ';')) p += 2; else return NULL; -- cgit v1.2.3