diff options
-rw-r--r-- | lib/cookie.c | 15 | ||||
-rw-r--r-- | lib/cookie.h | 8 | ||||
-rw-r--r-- | lib/transfer.c | 2 |
3 files changed, 18 insertions, 7 deletions
diff --git a/lib/cookie.c b/lib/cookie.c index f859b0bee..2ae3b1624 100644 --- a/lib/cookie.c +++ b/lib/cookie.c @@ -104,7 +104,8 @@ Example set of cookies: struct Cookie * Curl_cookie_add(struct CookieInfo *c, bool httpheader, /* TRUE if HTTP header-style line */ - char *lineptr) /* first non-space of the line */ + char *lineptr, /* first non-space of the line */ + char *domain) /* default domain */ { struct Cookie *clist; char what[MAX_COOKIE_LINE]; @@ -194,6 +195,10 @@ Curl_cookie_add(struct CookieInfo *c, ptr++; semiptr=strchr(ptr, ';'); /* now, find the next semicolon */ } while(semiptr); + + if(NULL == co->domain) + /* no domain given in the header line, set the default now */ + co->domain=strdup(domain); } else { /* This line is NOT a HTTP header style line, we do offer support for @@ -441,7 +446,7 @@ struct CookieInfo *Curl_cookie_init(char *file, struct CookieInfo *inc) while(*lineptr && isspace((int)*lineptr)) lineptr++; - Curl_cookie_add(c, headerline, lineptr); + Curl_cookie_add(c, headerline, lineptr, NULL); } if(fromfile) fclose(fp); @@ -632,13 +637,13 @@ int Curl_cookie_output(struct CookieInfo *c, char *dumphere) "%u\t" /* expires */ "%s\t" /* name */ "%s\n", /* value */ - co->domain, + co->domain?co->domain:"unknown", co->field1==2?"TRUE":"FALSE", - co->path, + co->path?co->path:"/", co->secure?"TRUE":"FALSE", (unsigned int)co->expires, co->name, - co->value); + co->value?co->value:""); co=co->next; } diff --git a/lib/cookie.h b/lib/cookie.h index 34b6fd56a..a00530bda 100644 --- a/lib/cookie.h +++ b/lib/cookie.h @@ -68,7 +68,13 @@ struct CookieInfo { #define MAX_NAME 256 #define MAX_NAME_TXT "255" -struct Cookie *Curl_cookie_add(struct CookieInfo *, bool, char *); +/* + * Add a cookie to the internal list of cookies. The domain argument is only + * used if the header boolean is TRUE. + */ +struct Cookie *Curl_cookie_add(struct CookieInfo *, bool header, char *line, + char *domain); + struct CookieInfo *Curl_cookie_init(char *, struct CookieInfo *); struct Cookie *Curl_cookie_getlist(struct CookieInfo *, char *, char *, bool); void Curl_cookie_freelist(struct Cookie *); diff --git a/lib/transfer.c b/lib/transfer.c index 499454681..c42970c58 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -620,7 +620,7 @@ Transfer(struct connectdata *c_conn) } else if(data->cookies && strnequal("Set-Cookie:", p, 11)) { - Curl_cookie_add(data->cookies, TRUE, &p[12]); + Curl_cookie_add(data->cookies, TRUE, &p[12], conn->name); } else if(strnequal("Last-Modified:", p, strlen("Last-Modified:")) && |