]>
git.ipfire.org Git - thirdparty/sarg.git/blob - dansguardian_log.c
2 * AUTHOR: Pedro Lineu Orso pedro.orso@gmail.com
4 * SARG Squid Analysis Report Generator http://sarg.sourceforge.net
7 * please look at http://sarg.sourceforge.net/donations.php
8 * ---------------------------------------------------------------------
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
26 #include "include/conf.h"
27 #include "include/defs.h"
29 void dansguardian_log(void)
32 FILE *fp_in
= NULL
, *fp_ou
= NULL
, *fp_guard
= NULL
;
33 char guard_in
[MAXLEN
];
34 char guard_ou
[MAXLEN
];
35 char loglocation
[MAXLEN
] = "/var/log/dansguardian/access.log";
36 char year
[10], mon
[10], day
[10];
38 char user
[MAXLEN
], code1
[255], code2
[255];
48 if(strcmp(df
,"e") == 0) {
49 strncpy(day
,period
,2);
50 strncpy(mon
,period
+2,3);
51 strncpy(year
,period
+5,4);
53 sprintf(warea
,"%s%s%s",year
,mon
,day
);
55 strncpy(day
,period
+10,2);
56 strncpy(mon
,period
+12,3);
57 strncpy(year
,period
+15,4);
59 sprintf(warea
,"%s%s%s",year
,mon
,day
);
62 strncpy(day
,period
+7,2);
63 strncpy(mon
,period
+4,3);
64 strncpy(year
,period
,4);
66 sprintf(warea
,"%s%s%s",year
,mon
,day
);
68 strncpy(day
,period
+17,2);
69 strncpy(mon
,period
+14,3);
70 strncpy(year
,period
+10,4);
72 sprintf(warea
,"%s%s%s",year
,mon
,day
);
76 sprintf(guard_in
,"%s/dansguardian.unsort",tmp
);
77 sprintf(guard_ou
,"%s/dansguardian.log",tmp
);
79 if(access(DansGuardianConf
, R_OK
) != 0) {
80 sprintf(msg
,"Cannot open DansGuardian config file: %s",DansGuardianConf
);
85 if((fp_guard
=fopen(DansGuardianConf
,"r"))==NULL
) {
86 fprintf(stderr
, "SARG: (dansguardian) %s: %s\n",text
[8],DansGuardianConf
);
90 if((fp_ou
=MY_FOPEN(guard_in
,"a"))==NULL
) {
91 fprintf(stderr
, "SARG: (dansguardian) %s: %s\n",text
[8],guard_in
);
95 while(fgets(buf
,sizeof(buf
),fp_guard
)!=NULL
) {
96 if(strstr(buf
,"\n") != 0)
97 buf
[strlen(buf
)-1]='\0';
98 if(strncmp(buf
,"#",1) == 0)
100 if(strstr(buf
,"loglocation ") != 0) {
101 if (getword(loglocation
,sizeof(loglocation
),buf
,'\'')<0 || getword(loglocation
,sizeof(loglocation
),buf
,'\'')<0) {
102 printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",DansGuardianConf
);
111 if (getword(urly
,sizeof(urly
),buf
,' ')<0 || getword(href
,sizeof(href
),buf
,' ')<0) {
112 printf("SARG: Maybe you have a broken record or garbage in your %s entry.\n",text
[7]);
115 sprintf(msg
,"%s DansGuardian %s: %s",urly
,buf
,loglocation
);
119 if((fp_in
=MY_FOPEN(loglocation
,"r"))==NULL
) {
120 fprintf(stderr
, "SARG: (dansguardian) %s: %s\n",text
[8],loglocation
);
124 while(fgets(buf
,sizeof(buf
),fp_in
) != NULL
) {
125 if(strstr(buf
," *DENIED* ") == 0)
127 if (getword(year
,sizeof(year
),buf
,'.')<0 || getword(mon
,sizeof(mon
),buf
,'.')<0 ||
128 getword(day
,sizeof(day
),buf
,' ')<0 || getword(hour
,sizeof(hour
),buf
,' ')<0 ||
129 getword(user
,sizeof(user
),buf
,' ')<0 || getword(ip
,sizeof(ip
),buf
,' ')<0 ||
130 getword(url
,sizeof(url
),buf
,'/')<0 || getword(url
,sizeof(url
),buf
,'/')<0 ||
131 getword(url
,sizeof(url
),buf
,' ')<0 || getword(code1
,sizeof(code1
),buf
,' ')<0 ||
132 getword(code1
,sizeof(code1
),buf
,' ')<0 || getword(code2
,sizeof(code2
),buf
,' ')<0) {
133 printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",loglocation
);
136 sprintf(wdata
,"%s%02d%s",year
,atoi(mon
),day
);
139 if(strcmp(DansguardianIgnoreDate
,"on") == 0) {
140 if(idata
< dfrom
&& idata
> duntil
)
144 if (strcmp(user
,"-") == 0) {
148 fprintf(fp_ou
,"%s %d %s %s %s %s %s\n",user
,idata
,hour
,ip
,url
,code1
,code2
);
149 dansguardian_count
++;
152 if(fp_in
) fclose(fp_in
);
153 if(fp_guard
) fclose(fp_guard
);
154 if(fp_ou
) fclose(fp_ou
);
157 sprintf(msg
,"%s: %s",text
[54],guard_ou
);
161 sprintf(tmp6
,"sort -k 1,1 -k 2,2 -k 4,4 '%s' -o '%s'",guard_in
, guard_ou
);
162 cstatus
=system(tmp6
);
163 if (!WIFEXITED(cstatus
) || WEXITSTATUS(cstatus
)) {
164 fprintf(stderr
, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus
));
165 fprintf(stderr
, "SARG: sort command: %s\n",tmp6
);