# HG changeset patch # User Adam Chlipala # Date 1259265483 18000 # Node ID 731e6aa6655ae993acee74192b7ca61cf4f90f80 # Parent 93315ac0039475747ea30c6cbd7fca6c26d0c4ad Port rest of demo to new cookie signature; fix parsing of multiple incoming cookies diff -r 93315ac00394 -r 731e6aa6655a demo/cookieSec.ur --- a/demo/cookieSec.ur Thu Nov 26 14:20:00 2009 -0500 +++ b/demo/cookieSec.ur Thu Nov 26 14:58:03 2009 -0500 @@ -25,7 +25,7 @@ and set r = - setCookie username r.User; + setCookie username {Value = r.User, Expires = None, Secure = False}; main () and imHere () = diff -r 93315ac00394 -r 731e6aa6655a src/c/urweb.c --- a/src/c/urweb.c Thu Nov 26 14:20:00 2009 -0500 +++ b/src/c/urweb.c Thu Nov 26 14:58:03 2009 -0500 @@ -2667,10 +2667,19 @@ } 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;