cookies: add expiration
Implement: Expired Cookies These following situation, curl removes cookie(s) from struct CookieInfo if the cookie expired. - Curl_cookie_add() - Curl_cookie_getlist() - cookie_output()
This commit is contained in:
parent
dc016567ce
commit
4cfbb201c4
37
lib/cookie.c
37
lib/cookie.c
@ -290,6 +290,34 @@ static void strstore(char **str, const char *newstr)
|
|||||||
*str = strdup(newstr);
|
*str = strdup(newstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* remove_expired() removes expired cookies.
|
||||||
|
*/
|
||||||
|
static void remove_expired(struct CookieInfo *cookies)
|
||||||
|
{
|
||||||
|
struct Cookie *co, *nx, *pv;
|
||||||
|
curl_off_t now = (curl_off_t)time(NULL);
|
||||||
|
|
||||||
|
co = cookies->cookies;
|
||||||
|
pv = NULL;
|
||||||
|
while(co) {
|
||||||
|
nx = co->next;
|
||||||
|
if((co->expirestr || co->maxage) && co->expires < now) {
|
||||||
|
if(co == cookies->cookies) {
|
||||||
|
cookies->cookies = co->next;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pv->next = co->next;
|
||||||
|
}
|
||||||
|
cookies->numcookies--;
|
||||||
|
freecookie(co);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pv = co;
|
||||||
|
}
|
||||||
|
co = nx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
*
|
*
|
||||||
@ -700,6 +728,9 @@ Curl_cookie_add(struct SessionHandle *data,
|
|||||||
superceeds an already existing cookie, which it may if the previous have
|
superceeds an already existing cookie, which it may if the previous have
|
||||||
the same domain and path as this */
|
the same domain and path as this */
|
||||||
|
|
||||||
|
/* at first, remove expired cookies */
|
||||||
|
remove_expired(c);
|
||||||
|
|
||||||
clist = c->cookies;
|
clist = c->cookies;
|
||||||
replace_old = FALSE;
|
replace_old = FALSE;
|
||||||
while(clist) {
|
while(clist) {
|
||||||
@ -931,6 +962,9 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
|
|||||||
if(!c || !c->cookies)
|
if(!c || !c->cookies)
|
||||||
return NULL; /* no cookie struct or no cookies in the struct */
|
return NULL; /* no cookie struct or no cookies in the struct */
|
||||||
|
|
||||||
|
/* at first, remove expired cookies */
|
||||||
|
remove_expired(c);
|
||||||
|
|
||||||
co = c->cookies;
|
co = c->cookies;
|
||||||
|
|
||||||
while(co) {
|
while(co) {
|
||||||
@ -1173,6 +1207,9 @@ static int cookie_output(struct CookieInfo *c, const char *dumphere)
|
|||||||
destination file */
|
destination file */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* at first, remove expired cookies */
|
||||||
|
remove_expired(c);
|
||||||
|
|
||||||
if(strequal("-", dumphere)) {
|
if(strequal("-", dumphere)) {
|
||||||
/* use stdout */
|
/* use stdout */
|
||||||
out = stdout;
|
out = stdout;
|
||||||
|
@ -112,7 +112,7 @@ test1388 test1389 test1390 test1391 test1392 test1393 test1394 test1395 \
|
|||||||
test1396 \
|
test1396 \
|
||||||
\
|
\
|
||||||
test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \
|
test1400 test1401 test1402 test1403 test1404 test1405 test1406 test1407 \
|
||||||
test1408 test1409 test1410 test1412 test1413 test1414 \
|
test1408 test1409 test1410 test1412 test1413 test1414 test1415 \
|
||||||
\
|
\
|
||||||
test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
|
test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
|
||||||
test1508 test1509 test1510 test1511 test1512 \
|
test1508 test1509 test1510 test1511 test1512 \
|
||||||
|
72
tests/data/test1415
Normal file
72
tests/data/test1415
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
<testcase>
|
||||||
|
<info>
|
||||||
|
<keywords>
|
||||||
|
HTTP
|
||||||
|
HTTP GET
|
||||||
|
cookies
|
||||||
|
cookiejar
|
||||||
|
delete expired cookie
|
||||||
|
</keywords>
|
||||||
|
</info>
|
||||||
|
# Server-side
|
||||||
|
<reply>
|
||||||
|
<data>
|
||||||
|
HTTP/1.1 200 OK
|
||||||
|
Date: Thu, 09 Nov 2010 14:49:00 GMT
|
||||||
|
Server: test-server/fake
|
||||||
|
Content-Length: 4
|
||||||
|
Content-Type: text/html
|
||||||
|
Funny-head: yesyes
|
||||||
|
Set-Cookie: test1value=test1; domain=example.com; path=/;
|
||||||
|
Set-Cookie: test2value=test2; expires=Friday, 01-Jan-2038 00:00:00 GMT; domain=example.com; path=/;
|
||||||
|
Set-Cookie: test3value=test3; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
|
||||||
|
Set-Cookie: test4value=test4; expires=Friday, 01-Jan-2038 00:00:00 GMT; domain=example.com; path=/;
|
||||||
|
Set-Cookie: test5value=test5; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
|
||||||
|
Set-Cookie: test6value=test6; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
|
||||||
|
Set-Cookie: test7value=test7; expires=Friday, 01-Jan-2038 00:00:00 GMT; domain=example.com; path=/;
|
||||||
|
Set-Cookie: test8value=test8; expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=example.com; path=/;
|
||||||
|
|
||||||
|
boo
|
||||||
|
</data>
|
||||||
|
</reply>
|
||||||
|
|
||||||
|
# Client-side
|
||||||
|
<client>
|
||||||
|
<server>
|
||||||
|
http
|
||||||
|
</server>
|
||||||
|
<name>
|
||||||
|
Delete expired cookies
|
||||||
|
</name>
|
||||||
|
<setenv>
|
||||||
|
TZ=GMT
|
||||||
|
</setenv>
|
||||||
|
<command>
|
||||||
|
http://example.com/we/want/1415 -b none -c log/jar1415.txt -x %HOSTIP:%HTTPPORT
|
||||||
|
</command>
|
||||||
|
|
||||||
|
# Verify data after the test has been "shot"
|
||||||
|
<verify>
|
||||||
|
<strip>
|
||||||
|
^User-Agent:.*
|
||||||
|
</strip>
|
||||||
|
<protocol>
|
||||||
|
GET http://example.com/we/want/1415 HTTP/1.1
|
||||||
|
Host: example.com
|
||||||
|
Accept: */*
|
||||||
|
Proxy-Connection: Keep-Alive
|
||||||
|
|
||||||
|
</protocol>
|
||||||
|
|
||||||
|
<file name="log/jar1415.txt" mode="text">
|
||||||
|
# Netscape HTTP Cookie File
|
||||||
|
# http://curl.haxx.se/docs/http-cookies.html
|
||||||
|
# This file was generated by libcurl! Edit at your own risk.
|
||||||
|
|
||||||
|
.example.com TRUE / FALSE 0 test1value test1
|
||||||
|
.example.com TRUE / FALSE 2145916800 test2value test2
|
||||||
|
.example.com TRUE / FALSE 2145916800 test4value test4
|
||||||
|
.example.com TRUE / FALSE 2145916800 test7value test7
|
||||||
|
</file>
|
||||||
|
</verify>
|
||||||
|
</testcase>
|
Loading…
x
Reference in New Issue
Block a user