X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Faccesslog.c;h=af433738a3bf7038bb617af0b8f65978868ee2ff;hb=4350acb522111f385f74dd9c7f8b3e47443ff225;hp=7328c4d89478cfe693fcaba6e395bb3caa02b139;hpb=b97cd36bf60b82b008aadd8cddb8e8ce8fe3602a;p=ashd.git diff --git a/src/accesslog.c b/src/accesslog.c index 7328c4d..af43373 100644 --- a/src/accesslog.c +++ b/src/accesslog.c @@ -223,9 +223,12 @@ static int passdata(struct bufio *in, struct bufio *out, off_t *passed) total = 0; while(!bioeof(in)) { - if((read = biocopysome(out, in)) < 0) - return(-1); - total += read; + if((read = biordata(in)) > 0) { + if((read = biowritesome(out, in->rbuf.b + in->rh, read)) < 0) + return(-1); + in->rh += read; + total += read; + } if(biorspace(in) && (biofillsome(in) < 0)) return(-1); } @@ -241,6 +244,7 @@ static void filterreq(struct muth *mt, va_list args) int pfds[2]; struct hthead *resp; struct bufio *cl, *hd; + struct stdiofd *cli, *hdi; struct logdata data; hd = NULL; @@ -248,10 +252,10 @@ static void filterreq(struct muth *mt, va_list args) data = defdata; data.req = req; gettimeofday(&data.start, NULL); - cl = mtbioopen(fd, 1, 600, "r+", NULL); + cl = mtbioopen(fd, 1, 600, "r+", &cli); if(socketpair(PF_UNIX, SOCK_STREAM, 0, pfds)) goto out; - hd = mtbioopen(pfds[1], 1, 600, "r+", NULL); + hd = mtbioopen(pfds[1], 1, 600, "r+", &hdi); if(sendreq(ch, req, pfds[0])) { close(pfds[0]); goto out; @@ -265,6 +269,8 @@ static void filterreq(struct muth *mt, va_list args) shutdown(pfds[1], SHUT_WR); if((resp = parseresponseb(hd)) == NULL) goto out; + cli->sendrights = hdi->rights; + hdi->rights = -1; data.resp = resp; writerespb(cl, resp); bioprintf(cl, "\r\n");