Commit b10a838a authored by Yousuke Kimoto's avatar Yousuke Kimoto Committed by Daniel Stenberg
Browse files

CURLOPT_COOKIELIST: Added "RELOAD" command

parent 9ee8efc6
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -46,6 +46,10 @@ erases all session cookies held in memory

.IP FLUSH
writes all known cookies to the file specified by \fICURLOPT_COOKIEJAR(3)\fP

.IP RELOAD
loads all cookies from the files specified by \fICURLOPT_COOKIEFILE(3)\fP

.SH DEFAULT
NULL
.SH PROTOCOLS
@@ -58,6 +62,8 @@ ALL was added in 7.14.1
SESS was added in 7.15.4

FLUSH was added in 7.17.1

RELOAD was added in 7.39.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
CURLE_OUT_OF_MEMORY if there was insufficient heap space.
+5 −0
Original line number Diff line number Diff line
@@ -1191,6 +1191,11 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
      /* flush cookies to file, takes care of the locking */
      Curl_flush_cookies(data, 0);
    }
    else if(Curl_raw_equal(argptr, "RELOAD")) {
      /* reload cookies from file */
      Curl_cookie_loadfiles(data);
      break;
    }
    else {
      if(!data->cookies)
        /* if cookie engine was not running, activate it */
+32 −8
Original line number Diff line number Diff line
@@ -169,18 +169,42 @@ unlock: cookie [Pigs in space]: 63
run 3: overwrite cookie 1 and 4
lock:   dns    [Pigs in space]: 64
unlock: dns    [Pigs in space]: 65
try SHARE_CLEANUP...
lock:   share  [Pigs in space]: 66
unlock: share  [Pigs in space]: 67
SHARE_CLEANUP failed, correct
CLEANUP
lock:   cookie [Pigs in space]: 68
unlock: cookie [Pigs in space]: 69
lock:   cookie [Pigs in space]: 66
unlock: cookie [Pigs in space]: 67
lock:   share  [Pigs in space]: 68
unlock: share  [Pigs in space]: 69
CURLOPT_SHARE
lock:   share  [Pigs in space]: 70
unlock: share  [Pigs in space]: 71
CURLOPT_COOKIELIST ALL
lock:   cookie [Pigs in space]: 72
unlock: cookie [Pigs in space]: 73
CURLOPT_COOKIEJAR
CURLOPT_COOKIELIST RELOAD
lock:   cookie [Pigs in space]: 74
unlock: cookie [Pigs in space]: 75
loaded cookies:
-----------------
  .host.foo.com	TRUE	/	FALSE	1896263787	injected	yes
  .foo.com	TRUE	/	FALSE	1993463787	test1	overwritten1
  .host.foo.com	TRUE	/	FALSE	1896263787	test2	two
  .foo.com	TRUE	/	FALSE	1896263787	test3	three
  .host.foo.com	TRUE	/	FALSE	2061978987	test4	overwritten4
  .host.foo.com	TRUE	/	FALSE	1896263787	test5	five
-----------------
try SHARE_CLEANUP...
lock:   share  [Pigs in space]: 76
unlock: share  [Pigs in space]: 77
SHARE_CLEANUP failed, correct
CLEANUP
lock:   cookie [Pigs in space]: 78
unlock: cookie [Pigs in space]: 79
lock:   share  [Pigs in space]: 80
unlock: share  [Pigs in space]: 81
SHARE_CLEANUP
lock:   share  [Pigs in space]: 72
unlock: share  [Pigs in space]: 73
lock:   share  [Pigs in space]: 82
unlock: share  [Pigs in space]: 83
GLOBAL_CLEANUP
</stdout>
<stderr>
+50 −0
Original line number Diff line number Diff line
@@ -175,11 +175,13 @@ int test(char *URL)
{
  int res;
  CURLSHcode scode = CURLSHE_OK;
  CURLcode code = CURLE_OK;
  char *url = NULL;
  struct Tdata tdata;
  CURL *curl;
  CURLSH *share;
  struct curl_slist *headers = NULL;
  struct curl_slist *cookies = NULL;
  int i;
  struct userdata user;

@@ -296,6 +298,54 @@ int test(char *URL)
  printf( "PERFORM\n" );
  curl_easy_perform( curl );

  printf( "CLEANUP\n" );
  curl_easy_cleanup( curl );

  /* load cookies */
  if ((curl = curl_easy_init()) == NULL) {
    fprintf(stderr, "curl_easy_init() failed\n");
    curl_share_cleanup(share);
    curl_global_cleanup();
    return TEST_ERR_MAJOR_BAD;
  }
  url = suburl( URL, i );
  headers = sethost( NULL );
  test_setopt( curl, CURLOPT_HTTPHEADER, headers );
  test_setopt( curl, CURLOPT_URL,        url );
  printf( "CURLOPT_SHARE\n" );
  test_setopt( curl, CURLOPT_SHARE,      share );
  printf( "CURLOPT_COOKIELIST ALL\n" );
  test_setopt( curl, CURLOPT_COOKIELIST, "ALL" );
  printf( "CURLOPT_COOKIEJAR\n" );
  test_setopt( curl, CURLOPT_COOKIEFILE, JAR );
  printf( "CURLOPT_COOKIELIST RELOAD\n" );
  test_setopt( curl, CURLOPT_COOKIELIST, "RELOAD" );

  code = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
  if ( code != CURLE_OK )
  {
    fprintf(stderr, "curl_easy_getinfo() failed\n");
    curl_share_cleanup(share);
    curl_global_cleanup();
    return TEST_ERR_MAJOR_BAD;
  }
  printf("loaded cookies:\n");
  if ( !cookies )
  {
    fprintf(stderr, "  reloading cookies from '%s' failed\n", JAR);
    curl_share_cleanup(share);
    curl_global_cleanup();
    return TEST_ERR_MAJOR_BAD;
  }
  printf("-----------------\n");
  while ( cookies )
  {
    printf( "  %s\n", cookies->data );
    cookies = cookies->next;
  }
  printf("-----------------\n");
  curl_slist_free_all( cookies );

  /* try to free share, expect to fail because share is in use*/
  printf( "try SHARE_CLEANUP...\n" );
  scode = curl_share_cleanup( share );