Diff for /libaitwww/src/aitwww.c between versions 1.1.1.1.2.1 and 1.3.4.1

version 1.1.1.1.2.1, 2012/03/09 09:38:55 version 1.3.4.1, 2012/07/31 11:56:16
Line 44  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF TH Line 44  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF TH
 SUCH DAMAGE.  SUCH DAMAGE.
 */  */
 #include "global.h"  #include "global.h"
 #include "tools.h"  
 #include "mime.h"  #include "mime.h"
   
   
Line 76  www_SetErr(int eno, char *estr, ...) Line 75  www_SetErr(int eno, char *estr, ...)
         va_list lst;          va_list lst;
   
         www_Errno = eno;          www_Errno = eno;
        memset(www_Error, 0, STRSIZ);        memset(www_Error, 0, sizeof www_Errno);
         va_start(lst, estr);          va_start(lst, estr);
        vsnprintf(www_Error, STRSIZ, estr, lst);        vsnprintf(www_Error, sizeof www_Errno, estr, lst);
         va_end(lst);          va_end(lst);
 }  }
   
Line 99  www_initCGI(void) Line 98  www_initCGI(void)
   
         str = getenv("REQUEST_METHOD");          str = getenv("REQUEST_METHOD");
         if (!str) {          if (!str) {
                www_SetErr(EBADMSG, "Request method not found");                www_SetErr(EFAULT, "Request method not found");
                 return NULL;                  return NULL;
         }          }
         if (!strcmp(str, "GET") || !strcmp(str, "HEAD")) {          if (!strcmp(str, "GET") || !strcmp(str, "HEAD")) {
                 /* GET | HEAD */                  /* GET | HEAD */
                 str = getenv("QUERY_STRING");                  str = getenv("QUERY_STRING");
                 if (!str) {                  if (!str) {
                        www_SetErr(EBADMSG, "Query string not found");                        www_SetErr(EFAULT, "Query string not found");
                         return NULL;                          return NULL;
                 }                  }
                 cgi = www_parseQuery(str);                  cgi = www_parseQuery(str);
Line 114  www_initCGI(void) Line 113  www_initCGI(void)
                 /* POST */                  /* POST */
                 str = getenv("CONTENT_LENGTH");                  str = getenv("CONTENT_LENGTH");
                 if (!str) {                  if (!str) {
                        www_SetErr(EBADMSG, "Content length not found");                        www_SetErr(EFAULT, "Content length not found");
                         return NULL;                          return NULL;
                 } else                  } else
                         ctlen = strtol(str, NULL, 0);                          ctlen = strtol(str, NULL, 0);
   
                 s = getenv("CONTENT_TYPE");                  s = getenv("CONTENT_TYPE");
                 if (!s) {                  if (!s) {
                        www_SetErr(EBADMSG, "Content type not found");                        www_SetErr(EFAULT, "Content type not found");
                         return NULL;                          return NULL;
                 }                  }
                 if (www_cmp(s, "multipart/form-data") &&                   if (www_cmp(s, "multipart/form-data") && 
                                 www_cmp(s, "application/x-www-form-urlencoded")) {                                  www_cmp(s, "application/x-www-form-urlencoded")) {
                        www_SetErr(EBADMSG, "MIME parts are broken");                        www_SetErr(EFAULT, "MIME parts are broken");
                         return NULL;                          return NULL;
                 }                  }
   
Line 135  www_initCGI(void) Line 134  www_initCGI(void)
                 if (!str) {                  if (!str) {
                         LOGERR;                          LOGERR;
                         return NULL;                          return NULL;
                }                } else
                         memset(str, 0, ctlen + 1);
                 for (i = 0; i < ctlen && (rlen =                   for (i = 0; i < ctlen && (rlen = 
                                         read(STDIN_FILENO, (void*) str + i, ctlen - i)) > 0; i += rlen);                                          read(STDIN_FILENO, (void*) str + i, ctlen - i)) > 0; i += rlen);
                 str[ctlen] = 0;                  str[ctlen] = 0;
Line 148  www_initCGI(void) Line 148  www_initCGI(void)
                 free(str);                  free(str);
         } else {          } else {
                 /* Unknown method */                  /* Unknown method */
                www_SetErr(EBADMSG, "Unknown request method");                www_SetErr(EFAULT, "Unknown request method");
                 return NULL;                  return NULL;
         }          }
   
Line 324  www_addValue(cgi_t * __restrict cgi, const char *name, Line 324  www_addValue(cgi_t * __restrict cgi, const char *name,
 int  int
 www_delPair(cgi_t * __restrict cgi, const char *name)  www_delPair(cgi_t * __restrict cgi, const char *name)
 {  {
        struct tagCGI *t;        struct tagCGI *t, *tmp;
   
         if (!cgi || !name) {          if (!cgi || !name) {
                 www_SetErr(EINVAL, "Invalid argument(s)");                  www_SetErr(EINVAL, "Invalid argument(s)");
Line 332  www_delPair(cgi_t * __restrict cgi, const char *name) Line 332  www_delPair(cgi_t * __restrict cgi, const char *name)
         }          }
   
         /* search for delete */          /* search for delete */
        SLIST_FOREACH(t, cgi, cgi_node)        SLIST_FOREACH_SAFE(t, cgi, cgi_node, tmp)
                 if (t->cgi_name && !strcmp(name, t->cgi_name)) {                  if (t->cgi_name && !strcmp(name, t->cgi_name)) {
                         SLIST_REMOVE(cgi, t, tagCGI, cgi_node);                          SLIST_REMOVE(cgi, t, tagCGI, cgi_node);
   
                           if (t->cgi_name)
                                   free(t->cgi_name);
                           if (t->cgi_value)
                                   free(t->cgi_value);
                           free(t);
                         return 1;                          return 1;
                 }                  }
   
Line 342  www_delPair(cgi_t * __restrict cgi, const char *name) Line 348  www_delPair(cgi_t * __restrict cgi, const char *name)
 }  }
   
 /*  /*
    * www_listPairs() - Walk over CGI session variables
    *
    * @cgi = Cgi session
    * @func = If !=NULL call function for each element
    * @arg = Optional argument pass through callback
    * return: -1 error or >-1 number of elements
    */
   inline int
   www_listPairs(cgi_t * __restrict cgi, list_cb_t func, void *arg)
   {
           register int ret = 0;
           struct tagCGI *t;
   
           if (!cgi) {
                   www_SetErr(EINVAL, "Invalid CGI session argument");
                   return -1;
           }
   
           SLIST_FOREACH(t, cgi, cgi_node) {
                   ret++;
   
                   if (func)
                           func(t, arg);
           }
   
           return ret;
   }
   
   /*
  * www_header() - Output initial html header   * www_header() - Output initial html header
  *   *
  * @output = file handle   * @output = file handle
Line 489  www_parseMultiPart(const char *str, int ctlen, const c Line 524  www_parseMultiPart(const char *str, int ctlen, const c
         }          }
         mime = mime_parseMultiPart(str, ctlen, www_getAttribute(attr, "boundary"), NULL);          mime = mime_parseMultiPart(str, ctlen, www_getAttribute(attr, "boundary"), NULL);
         www_freeAttributes(&attr);          www_freeAttributes(&attr);
           if (!mime) {
                   www_closeCGI(&cgi);
                   return NULL;
           }
   
         SLIST_FOREACH(m, mime, mime_node) {          SLIST_FOREACH(m, mime, mime_node) {
                 s = mime_getValue(m, "content-disposition");                  s = mime_getValue(m, "content-disposition");
                 attr = www_parseAttributes(&s);                  attr = www_parseAttributes(&s);
                   if (!www_getAttribute(attr, "name")) {
                           www_freeAttributes(&attr);
                           continue;
                   }
   
                 t = malloc(sizeof(struct tagCGI));                  t = malloc(sizeof(struct tagCGI));
                 if (!t) {                  if (!t) {

Removed from v.1.1.1.1.2.1  
changed lines
  Added in v.1.3.4.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>