Commit c6a8bb3d authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

Added some RFC2109 support

parent 0bc8d2ea
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -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;
+13 −8
Original line number Diff line number Diff line
@@ -18,6 +18,11 @@ struct Cookie {
  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 */
};