X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Faccesslog.c;h=af433738a3bf7038bb617af0b8f65978868ee2ff;hb=HEAD;hp=d77a467d50e0abfa80d3c4ca9d853f519159d327;hpb=417b376e232e4276bb0dad7577625864517471fd;p=ashd.git diff --git a/src/accesslog.c b/src/accesslog.c index d77a467..0c7ef8d 100644 --- a/src/accesslog.c +++ b/src/accesslog.c @@ -96,6 +96,16 @@ static void logitem(struct logdata *data, char o, char *d) qputs(h, out); } break; + case 'p': + if(!data->resp || ((h = getheader(data->resp, d)) == NULL)) { + putc('-', out); + } else { + qputs(h, out); + } + break; + case 'P': + logitem(data, 'p', sprintf3("X-Ash-%s", d)); + break; case 'u': qputs(data->req->url, out); break; @@ -244,6 +254,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; @@ -251,10 +262,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; @@ -268,6 +279,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"); @@ -505,7 +518,7 @@ int main(int argc, char **argv) pidfile = optarg; break; case 'a': - format = "%A - - [%{%d/%b/%Y:%H:%M:%S %z}t] \"%m %u %v\" %c %o \"%R\" \"%G\""; + format = "%A - %{log-user}P [%{%d/%b/%Y:%H:%M:%S %z}t] \"%m %u %v\" %c %o \"%R\" \"%G\""; break; default: usage(stderr);