63a64,88
> int
> logdata(HConnect *c, char *s, char *fn)
> {
> int n, fd;
>
> if(strlen(s) > MaxLog)
> s[MaxLog] = '\0';
> n = snprint(c->xferbuf, HBufSize, "at %ld %s\n", time(0), s);
>
> fd = openLocked(fn, OWRITE);
> if(fd < 0){
> errstr(c->xferbuf, sizeof c->xferbuf);
> if(strstr(c->xferbuf, "locked") != nil)
> hfail(c, HTempFail, c->req.uri);
> else
> hfail(c, HNotFound, c->req.uri);
> return -1;
> }
> seek(fd, 0, 2);
> write(fd, c->xferbuf, n);
> close(fd);
> return 0;
> }
>
>
70,71c95,98
< char *s, *t, *fn;
< int n, nfn, datafd, htmlfd;
---
> HFields *type[2];
> char *m, *b, *s, *fn;
> int n, nfn, nm, datafd, htmlfd;
> int file;
73a101
> anonymous(c); /* protection */
105,107d132
< t = strchr(s, '\n');
< if(t != nil)
< *t = '\0';
118,120c143,149
< if(strlen(s) > MaxLog)
< s[MaxLog] = '\0';
< n = snprint(c->xferbuf, HBufSize, "at %ld %s\n", time(0), s);
---
> if((type[0] = c->head.conttype) && (type[1] = type[0]->next){
> nm = strlen(type[0]->s)+strlen(type[1]->s)+1;
> m = halloc(c, nm);
> snprint(m, nm, "%s/%s", type[0]->s, type[1]->s);
> if(!strcmp(type[1]->params->s, "boundary))
> b = hstrdup(c, type[1]->params->t);
> }
129c158
< snprint(fn, nfn, "/usr/web/save/%s.html", c->req.uri);
---
> snprint(fn, nfn, "/%s.html", c->req.uri);
137,149c166,170
< snprint(fn, nfn, "/usr/web/save/%s.data", c->req.uri);
< datafd = openLocked(fn, OWRITE);
< if(datafd < 0){
< errstr(c->xferbuf, sizeof c->xferbuf);
< if(strstr(c->xferbuf, "locked") != nil)
< hfail(c, HTempFail, c->req.uri);
< else
< hfail(c, HNotFound, c->req.uri);
< exits("failed");
< }
< seek(datafd, 0, 2);
< write(datafd, c->xferbuf, n);
< close(datafd);
---
> if(strcmp(m, "multipart/form-data") == 0 && b){
> snprint(fn, nfn, /%s.file, c->req.uri);
>
> snprint(fn, nfn, "/%s.data", c->req.uri);
> logdata(c, s, fn);
|