aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2001-09-26 07:08:29 +0000
committerDaniel Stenberg <daniel@haxx.se>2001-09-26 07:08:29 +0000
commit598e8dfbfbf3ed8db75cfd574b05904ecb486c34 (patch)
tree8bad809c26fb848613988dd10191bc9626546428 /lib
parent9efdb68035b84dda158ca786d78c56a11d46c9fa (diff)
Now we're setting a default domain for received cookies so that we can
properly match those cookies in subsequent requests
Diffstat (limited to 'lib')
-rw-r--r--lib/cookie.c15
-rw-r--r--lib/cookie.h8
-rw-r--r--lib/transfer.c2
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:")) &&