mirror of
https://github.com/moparisthebest/curl
synced 2024-08-13 17:03:50 -04:00
Michael Wallner provided a patch that allows "SESS" to be set with
CURLOPT_COOKIELIST, which then makes all session cookies get cleared. (slightly edited by me, and the re-indent in cookie.c was also done by me)
This commit is contained in:
parent
f689d06ca9
commit
606562aa7e
4
CHANGES
4
CHANGES
@ -6,6 +6,10 @@
|
|||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
Daniel (25 May 2006)
|
||||||
|
- Michael Wallner provided a patch that allows "SESS" to be set with
|
||||||
|
CURLOPT_COOKIELIST, which then makes all session cookies get cleared.
|
||||||
|
|
||||||
Daniel (11 May 2006)
|
Daniel (11 May 2006)
|
||||||
- David McCreedy provided a fix for CURLINFO_LASTSOCKET that does extended
|
- David McCreedy provided a fix for CURLINFO_LASTSOCKET that does extended
|
||||||
checks on the to-be-returned socket to make sure it truly seems to be alive
|
checks on the to-be-returned socket to make sure it truly seems to be alive
|
||||||
|
@ -11,6 +11,7 @@ Curl and libcurl 7.15.4
|
|||||||
|
|
||||||
This release includes the following changes:
|
This release includes the following changes:
|
||||||
|
|
||||||
|
o CURLOPT_COOKIELIST set to "SESS" clears all session cookies
|
||||||
o CURLINFO_LASTSOCKET returned sockets are now checked more before returned
|
o CURLINFO_LASTSOCKET returned sockets are now checked more before returned
|
||||||
o curl-config got a --checkfor option to compare version numbers
|
o curl-config got a --checkfor option to compare version numbers
|
||||||
o line end conversions for FTP ASCII transfers
|
o line end conversions for FTP ASCII transfers
|
||||||
@ -56,6 +57,6 @@ advice from friends like these:
|
|||||||
Dan Fandrich, Ilja van Sprundel, David McCreedy, Tor Arntsen, Xavier Bouchoux,
|
Dan Fandrich, Ilja van Sprundel, David McCreedy, Tor Arntsen, Xavier Bouchoux,
|
||||||
David Byron, Michele Bini, Ates Goral, Katie Wang, Robson Braga Araujo,
|
David Byron, Michele Bini, Ates Goral, Katie Wang, Robson Braga Araujo,
|
||||||
Ale Vesely, Paul Querna, Gisle Vanem, Mark Eichin, Roland Blom, Andreas
|
Ale Vesely, Paul Querna, Gisle Vanem, Mark Eichin, Roland Blom, Andreas
|
||||||
Ntaflos, David Shaw
|
Ntaflos, David Shaw, Michael Wallner
|
||||||
|
|
||||||
Thanks! (and sorry if I forgot to mention someone)
|
Thanks! (and sorry if I forgot to mention someone)
|
||||||
|
@ -762,6 +762,8 @@ Pass a char * to a cookie string. Cookie can be either in Netscape / Mozilla
|
|||||||
format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL
|
format or just regular HTTP-style header (Set-Cookie: ...) format. If cURL
|
||||||
cookie engine was not enabled it will enable its cookie engine. Passing a
|
cookie engine was not enabled it will enable its cookie engine. Passing a
|
||||||
magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1)
|
magic string \&"ALL" will erase all cookies known by cURL. (Added in 7.14.1)
|
||||||
|
Passing the special string \&"SESS" will only erase all session cookies known
|
||||||
|
by cURL. (Added in 7.15.4)
|
||||||
.IP CURLOPT_HTTPGET
|
.IP CURLOPT_HTTPGET
|
||||||
Pass a long. If the long is non-zero, this forces the HTTP request to get back
|
Pass a long. If the long is non-zero, this forces the HTTP request to get back
|
||||||
to GET. usable if a POST, HEAD, PUT or a custom request have been used
|
to GET. usable if a POST, HEAD, PUT or a custom request have been used
|
||||||
|
54
lib/cookie.c
54
lib/cookie.c
@ -5,7 +5,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -795,6 +795,19 @@ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
|
|||||||
return mainco; /* return the new list */
|
return mainco; /* return the new list */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Curl_cookie_clearall()
|
||||||
|
*
|
||||||
|
* Clear all existing cookies and reset the counter.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
void Curl_cookie_clearall(struct CookieInfo *cookies)
|
||||||
|
{
|
||||||
|
Curl_cookie_freelist(cookies->cookies);
|
||||||
|
cookies->cookies = NULL;
|
||||||
|
cookies->numcookies = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
@ -817,6 +830,45 @@ void Curl_cookie_freelist(struct Cookie *co)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* Curl_cookie_clearsess()
|
||||||
|
*
|
||||||
|
* Free all session cookies in the cookies list.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
void Curl_cookie_clearsess(struct CookieInfo *cookies)
|
||||||
|
{
|
||||||
|
struct Cookie *first, *curr, *next, *prev = NULL;
|
||||||
|
|
||||||
|
if(!cookies->cookies)
|
||||||
|
return;
|
||||||
|
|
||||||
|
first = curr = prev = cookies->cookies;
|
||||||
|
|
||||||
|
for(; curr; curr = next) {
|
||||||
|
next = curr->next;
|
||||||
|
if(!curr->expires) {
|
||||||
|
if(first == curr)
|
||||||
|
first = next;
|
||||||
|
|
||||||
|
if(prev == curr)
|
||||||
|
prev = next;
|
||||||
|
else
|
||||||
|
prev->next = next;
|
||||||
|
|
||||||
|
free(curr);
|
||||||
|
cookies->numcookies--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
prev = curr;
|
||||||
|
}
|
||||||
|
|
||||||
|
cookies->cookies = first;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* Curl_cookie_cleanup()
|
* Curl_cookie_cleanup()
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2006, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -89,6 +89,8 @@ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data,
|
|||||||
char *, struct CookieInfo *, bool);
|
char *, struct CookieInfo *, bool);
|
||||||
struct Cookie *Curl_cookie_getlist(struct CookieInfo *, char *, char *, bool);
|
struct Cookie *Curl_cookie_getlist(struct CookieInfo *, char *, char *, bool);
|
||||||
void Curl_cookie_freelist(struct Cookie *);
|
void Curl_cookie_freelist(struct Cookie *);
|
||||||
|
void Curl_cookie_clearall(struct CookieInfo *cookies);
|
||||||
|
void Curl_cookie_clearsess(struct CookieInfo *cookies);
|
||||||
void Curl_cookie_cleanup(struct CookieInfo *);
|
void Curl_cookie_cleanup(struct CookieInfo *);
|
||||||
int Curl_cookie_output(struct CookieInfo *, char *);
|
int Curl_cookie_output(struct CookieInfo *, char *);
|
||||||
|
|
||||||
|
@ -829,12 +829,13 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
if(strequal(argptr, "ALL")) {
|
if(strequal(argptr, "ALL")) {
|
||||||
if(data->cookies) {
|
|
||||||
/* clear all cookies */
|
/* clear all cookies */
|
||||||
Curl_cookie_freelist(data->cookies->cookies);
|
Curl_cookie_clearall(data->cookies);
|
||||||
data->cookies->cookies = NULL;
|
break;
|
||||||
data->cookies->numcookies = 0;
|
|
||||||
}
|
}
|
||||||
|
else if(strequal(argptr, "SESS")) {
|
||||||
|
/* clear session cookies */
|
||||||
|
Curl_cookie_clearsess(data->cookies);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user