]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
Added some RFC2109 support
authorDaniel Stenberg <daniel@haxx.se>
Tue, 1 Feb 2000 23:54:51 +0000 (23:54 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 1 Feb 2000 23:54:51 +0000 (23:54 +0000)
lib/cookie.c
lib/cookie.h

index dde3350421563949ccda4568012fa8581a26cdd1..613c52e7f5e54ebf0e039022514a8336370b9daa 100644 (file)
@@ -101,6 +101,7 @@ struct Cookie *cookie_add(struct CookieInfo *c,
       *semiptr='\0'; /* zero terminate for a while */
       /* we have a <what>=<this> pair or a 'secure' word here */
       if(strchr(ptr, '=')) {
+        name[0]=what[0]=0; /* init the buffers */
         if(2 == sscanf(ptr, "%" MAX_NAME_TXT "[^=]=%"
                        MAX_COOKIE_LINE_TXT "[^\r\n]",
                        name, what)) {
@@ -111,6 +112,23 @@ struct Cookie *cookie_add(struct CookieInfo *c,
           else if(strequal("domain", name)) {
             co->domain=strdup(what);
           }
+          else if(strequal("version", name)) {
+            co->version=strdup(what);
+          }
+          else if(strequal("max-age", name)) {
+            /* Defined in RFC2109:
+
+               Optional.  The Max-Age attribute defines the lifetime of the
+               cookie, in seconds.  The delta-seconds value is a decimal non-
+               negative integer.  After delta-seconds seconds elapse, the
+               client should discard the cookie.  A value of zero means the
+               cookie should be discarded immediately.
+
+             */
+            co->maxage = strdup(what);
+            co->expires =
+              atoi((*co->maxage=='\"')?&co->maxage[1]:&co->maxage[0]);
+          }
           else if(strequal("expires", name)) {
             co->expirestr=strdup(what);
             co->expires = get_date(what, &now);
@@ -264,6 +282,11 @@ struct Cookie *cookie_add(struct CookieInfo *c,
         if(clist->expirestr)
           free(clist->expirestr);
 
+        if(clist->version)
+          free(clist->version);
+        if(clist->maxage)
+          free(clist->maxage);
+
         *clist = *co;  /* then store all the new data */
       }
 
@@ -448,6 +471,11 @@ void cookie_cleanup(struct CookieInfo *c)
         if(co->expirestr)
            free(co->expirestr);
 
+        if(co->version)
+           free(co->version);
+        if(co->maxage)
+           free(co->maxage);
+
         next = co->next;
         free(co);
         co = next;
index 466844a5d3b13b04335f34ed2ed75f2381086ad6..b0142cc8c7342b9ddfd8fa0814ec818dbbe1b72f 100644 (file)
 #include <curl/curl.h>
 
 struct Cookie {
-   struct Cookie *next; /* next in the chain */
-   char *name;        /* <this> = value */
-   char *value;       /* name = <this> */
-   char *path;       /* path = <this> */
-   char *domain;      /* domain = <this> */
-   time_t expires;    /* expires = <this> */
-   char *expirestr;  /* the plain text version */
-   bool secure;       /* whether the 'secure' keyword was used */
+  struct Cookie *next; /* next in the chain */
+  char *name;        /* <this> = value */
+  char *value;       /* name = <this> */
+  char *path;        /* path = <this> */
+  char *domain;      /* domain = <this> */
+  time_t expires;    /* expires = <this> */
+  char *expirestr;   /* the plain text version */
+  
+  /* RFC 2109 keywords. Version=1 means 2109-compliant cookie sending */
+  char *version;     /* Version = <value> */
+  char *maxage;      /* Max-Age = <value> */
+  
+  bool secure;       /* whether the 'secure' keyword was used */
 };
 
 struct CookieInfo {