src/server/safs/addlog.c

changeset 45
a24aa388f02f
child 77
f1cff81e425a
equal deleted inserted replaced
44:3da1f7b6847f 45:a24aa388f02f
1 /*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 *
4 * Copyright 2013 Olaf Wintermann. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #include <stdio.h>
30 #include <stdlib.h>
31
32 #include "addlog.h"
33
34 #include "../daemon/request.h"
35 #include "../daemon/vserver.h"
36 #include "../daemon/log.h"
37
38 int common_log(pblock *pb, Session *sn, Request *rq) {
39 NSAPIRequest *request = (NSAPIRequest*)rq;
40 VirtualServer *vs = request->vs;
41 AccessLog *log = vs->log;
42
43 if(log == NULL) {
44 return REQ_NOACTION;
45 }
46
47 char *ip = pblock_findval("ip", sn->client);
48 char *user = pblock_findval("auth-user", rq->vars);
49 time_t t = time(NULL);
50 char *time = ctime(&t);
51 char *req = pblock_findval("clf-request", rq->reqpb);
52
53 // hack to get the content length
54 // http_start_response should not modify the header names
55 char *len = pblock_findval("Content-length", rq->srvhdrs);
56
57 if(!ip) {
58 ip = "-";
59 }
60 if(!user) {
61 user = "-";
62 }
63 if(!len) {
64 len = "0";
65 }
66
67 // remove trailing line feed
68 sstr_t tmstr = sstr(time);
69 if(tmstr.ptr[tmstr.length-1] == '\n') {
70 tmstr.length--;
71 }
72 tmstr = sstrdup_pool(sn->pool, tmstr);
73
74 fprintf(
75 log->log,
76 "%s - %s [%s] \"%s\" %d %s\n",
77 ip,
78 user,
79 tmstr.ptr,
80 req,
81 rq->status_num,
82 len);
83 fflush(log->log);
84
85
86 return REQ_PROCEED;
87 }
88

mercurial