]> git.ipfire.org Git - thirdparty/sarg.git/blob - report.c
Sarg.conf can use multiple access_log lines.
[thirdparty/sarg.git] / report.c
1 /*
2 * AUTHOR: Pedro Lineu Orso pedro.orso@gmail.com
3 * 1998, 2009
4 * SARG Squid Analysis Report Generator http://sarg.sourceforge.net
5 *
6 * SARG donations:
7 * please look at http://sarg.sourceforge.net/donations.php
8 * ---------------------------------------------------------------------
9 *
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.
14 *
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.
19 *
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.
23 *
24 */
25
26 #include "include/conf.h"
27 #include "include/defs.h"
28
29 static void maketmp(const char *user, const char *dirname, int debug, int indexonly);
30 static void maketmp_hour(const char *user, const char *dirname, int indexonly);
31 static void gravatmp_hora(const char *dirname, const char *user, const char *data, const char *hora, const char *elap, const char *accbytes, int indexonly);
32 static void gravatmpf(const char *oldaccuser, const char *dirname, const char *oldurl, long long int nacc, long long int nbytes, const char *oldmsg, long long int nelap, int indexonly, long long int incache, long long int oucache);
33 static void gravaporuser(const char *user, const char *dirname, const char *url, const char *ip, const char *data, const char *hora, const char *tam, const char *elap, int indexonly);
34 static void gravager(FILE *fp_gen, const char *user, long long int nacc, const char *url, long long int nbytes, const char *ip, const char *hora, const char *dia, long long int nelap, long long int incache, long long int oucache);
35 static void grava_SmartFilter(const char *dirname, const char *user, const char *ip, const char *data, const char *hora, const char *url, const char *smart);
36
37 void gerarel(void)
38 {
39
40 FILE *fp_in;
41 FILE *fp_gen;
42
43 char accdia[11], acchora[9], accuser[MAXLEN], accip[MAXLEN], accurl[MAXLEN], accbytes[12], accelap[10];
44 char oldaccdia[11], oldacchora[9], oldaccip[MAXLEN], wdir[MAXLEN], per1[MAXLEN];
45 char wdirname[MAXLEN], oldurl[MAXLEN], oldaccuser[MAXLEN];
46 char olduser[MAXLEN], oldmsg[50], acccode[MAXLEN/2 - 1], oldaccelap[10], oldacccode[MAXLEN/2 - 1], user[MAXLEN];
47 char ipantes[MAXLEN], nameantes[MAXLEN];
48 char accsmart[MAXLEN];
49 char crc2[MAXLEN/2 -1];
50 char dirname[MAXLEN];
51 long long int nbytes=0;
52 long long int nelap=0;
53 long long int nacc=0;
54 long long int rtotal=0;
55 long long int incache=0;
56 long long int oucache=0;
57 char *str;
58 DIR *dirp;
59 struct dirent *direntp;
60 const char logext[]=".log";
61 int dlen;
62 char siteind[MAXLEN];
63 struct getwordstruct gwarea;
64
65 ipantes[0]='\0';
66 nameantes[0]='\0';
67 smartfilter=0;
68
69 sprintf(dirname, "%s%s", outdir, period);
70 sprintf(wdir, "%s%s", outdir, period);
71 strcpy(per1,period);
72 vrfydir(wdir, per1, addr, site, us, email);
73
74 if(debugz){
75 debugaz("dirname",dirname);
76 debugaz("wdir",wdir);
77 }
78
79 gperiod(dirname,period);
80
81 if(UserAgentLog[0] != '\0' && email[0] == '\0') useragent();
82
83 sprintf(wdirname,"%s/sarg-general",dirname);
84 if((fp_gen=MY_FOPEN(wdirname,"a"))==NULL){
85 fprintf(stderr, "SARG: (report) %s: %s\n",text[45],wdirname);
86 exit(1);
87 }
88
89 olduser[0]='\0';
90 strncat(tmp,"/sarg",5);
91
92 dirp = opendir(tmp);
93 while ((direntp = readdir( dirp )) != NULL ) {
94 dlen=strlen(direntp->d_name)-(sizeof(logext)-1);
95 if (dlen<0) continue;
96 if((strcmp(direntp->d_name+dlen,logext) != 0) ||
97 (strncmp(direntp->d_name,"download.log",12) == 0) ||
98 (strncmp(direntp->d_name,"denied.log",10) == 0) ||
99 (strncmp(direntp->d_name,"authfail.log.unsort",19) == 0))
100 continue;
101 if (snprintf(tmp3,sizeof(tmp3),"%s/%s",tmp,direntp->d_name)>=sizeof(tmp3)) {
102 fprintf(stderr, "SARG: (report) directory entry too long: %s/%s\n",tmp,direntp->d_name);
103 exit(1);
104 }
105 if((fp_in=MY_FOPEN(tmp3,"r"))==NULL){
106 fprintf(stderr, "SARG: (report) %s: %s\n",text[45],tmp);
107 exit(1);
108 }
109
110 if (dlen>0) {
111 if (dlen>=sizeof(user)) continue;
112 strncpy(user,direntp->d_name,dlen);
113 user[dlen]=0;
114 } else {
115 user[0]='\0';
116 }
117
118 strcpy(wdirname,dirname);
119 maketmp(user,tmp,debug,indexonly);
120 maketmp_hour(user,tmp,indexonly);
121
122 strcpy(u2,user);
123 if(strcmp(Ip2Name,"yes") == 0)
124 ip2name(u2,sizeof(u2));
125 get_usertab_name(u2,name,sizeof(name));
126
127 if(dotinuser && strchr(name,'_')) {
128 subs(name,sizeof(name),"_",".");
129 }
130
131 ttopen=0;
132 bzero(html_old, MAXLEN);
133
134 while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
135 getword_start(&gwarea,buf);
136 if (getword(accdia,sizeof(accdia),&gwarea,'\t')<0 || getword(acchora,sizeof(acchora),&gwarea,'\t')<0 ||
137 getword(accuser,sizeof(accuser),&gwarea,'\t')<0 || getword(accip,sizeof(accip),&gwarea,'\t')<0 ||
138 getword(accurl,sizeof(accurl),&gwarea,'\t')<0 || getword(accbytes,sizeof(accbytes),&gwarea,'\t')<0 ||
139 getword(acccode,sizeof(acccode),&gwarea,'\t')<0) {
140 printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp3);
141 exit(1);
142 }
143 if(strncmp(acccode,"TCP_DENIED/407",14) == 0) continue;
144 if (getword(accelap,sizeof(accelap),&gwarea,'\t')<0 || getword_skip(20000,&gwarea,'\t')<0 ||
145 getword(accsmart,sizeof(accsmart),&gwarea,'"')<0) {
146 printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp3);
147 exit(1);
148 }
149
150 if(accsmart[0] != '\0') {
151 smartfilter++;
152 strcpy(wdirname,dirname);
153 grava_SmartFilter(wdirname,accuser,accip,accdia,acchora,accurl,accsmart);
154 }
155
156 if(strcmp(Ip2Name,"yes") == 0) {
157 if(strcmp(accip,ipantes) != 0) {
158 strcpy(ipantes,accip);
159 ip2name(accip,sizeof(accip));
160 strcpy(nameantes,accip);
161 } else strcpy(accip,nameantes);
162 }
163
164 strcpy(wdirname,dirname);
165 gravatmp_hora(wdirname,accuser,accdia,acchora,accelap,accbytes,indexonly);
166
167 if(iprel){
168 strcpy(wdirname,dirname);
169 gravaporuser(accuser,wdirname,accurl,accip,accdia,acchora,accbytes,accelap,indexonly);
170 }
171
172 if(!rtotal){
173 strcpy(oldurl,accurl);
174 strcpy(oldacccode,acccode);
175 strcpy(oldaccelap,accelap);
176 strcpy(oldaccuser,accuser);
177 strcpy(oldaccip,accip);
178 strcpy(oldaccdia,accdia);
179 strcpy(oldacchora,acchora);
180 rtotal++;
181 }
182
183 if(site[0] != '\0') {
184 if(strcmp(oldaccuser,accuser) != 0){
185 strcpy(oldmsg,"OK");
186 if(strstr(oldacccode,"DENIED") != 0)
187 sprintf(oldmsg,"%s",text[46]);
188 gravatmp(oldaccuser,oldurl,nacc,nbytes,oldmsg,nelap,indexonly,incache,oucache);
189 gravager(fp_gen,oldaccuser,nacc,oldurl,nbytes,oldaccip,oldacchora,oldaccdia,nelap,incache,oucache);
190 nacc=0;
191 nbytes=0;
192 nelap=0;
193 incache=0;
194 oucache=0;
195 }
196 } else {
197 if(strcmp(oldurl,accurl) != 0 || strcmp(oldaccuser,accuser) != 0){
198 strcpy(oldmsg,"OK");
199 if(strstr(oldacccode,"DENIED") != 0)
200 sprintf(oldmsg,"%s",text[46]);
201 gravatmp(oldaccuser,oldurl,nacc,nbytes,oldmsg,nelap,indexonly,incache,oucache);
202 gravager(fp_gen,oldaccuser,nacc,oldurl,nbytes,oldaccip,oldacchora,oldaccdia,nelap,incache,oucache);
203 nacc=0;
204 nbytes=0;
205 nelap=0;
206 incache=0;
207 oucache=0;
208 if(strcmp(oldaccuser,accuser) != 0)
209 ind2=0;
210 }
211 }
212 nacc++;
213 nbytes+=my_atoll(accbytes);
214 nelap+=my_atoll(accelap);
215
216 if(strstr(ReportType,"site_user_time_date") != 0) {
217 if(!ttopen) {
218 ind2++;
219 strcpy(siteind,accurl);
220 for(str=siteind; *str; str++) {
221 if(*str=='?' || *str=='-' || *str=='.' || *str==':' || *str=='/' || *str=='\\' || *str=='*' ||
222 *str=='\'' || *str=='\"' || *str=='$')
223 *str='_';
224 }
225 sprintf(arqtt,"%s/%s",dirname,accuser);
226 if(access(arqtt, R_OK) != 0)
227 my_mkdir(arqtt);
228 sprintf(arqtt,"%s/%s/tt%s-%s.html",dirname,accuser,accuser,siteind);
229 if(strlen(arqtt) > 255) {
230 arqtt[255]='\0';
231 }
232 if ((fp_tt = fopen(arqtt, "w")) == 0) {
233 fprintf(stderr, "SARG: (report) %s: %s\n",text[45],arqtt);
234 exit(1);
235 }
236 ttopen=1;
237
238 /*
239 if(strcmp(Privacy,"yes") == 0)
240 sprintf(httplink,"<font size=%s color=%s><href=http://%s>%s", \
241 FontSize,PrivacyStringColor,PrivacyString,PrivacyString);
242 else
243 sprintf(httplink,"<font size=%s><a href=\"http://%s\">%s</a>",FontSize,accurl,accurl);
244 */
245
246 sprintf(ltext110,"%s",text[110]);
247 for(str=ltext110; *str; ++str)
248 *str=tolower(*str);
249
250 fprintf(fp_tt, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
251 css(fp_tt);
252 fputs("</head>\n",fp_tt);
253 fprintf(fp_tt,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
254 write_logo_image(fp_tt);
255
256 if(strcmp(IndexTree,"date") == 0)
257 show_sarg(fp_tt, "../../../..");
258 else
259 show_sarg(fp_tt, "../..");
260
261 fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_tt);
262 fprintf(fp_tt,"<tr><th class=\"title\" colspan=\"2\">%s</th></tr>\n",Title);
263
264 fprintf(fp_tt,"<tr><td class=\"header\" colspan=\"2\">%s:&nbsp;%s</td></tr>\n",text[89],period);
265 fprintf(fp_tt,"<tr><td class=\"header\" colspan=\"2\">%s:&nbsp;%s</td></tr>\n",text[90],name);
266 fprintf(fp_tt,"<tr><td class=\"header\" colspan=\"2\">%s:&nbsp;%s, %s</td></tr>\n",text[104],UserSortField,UserSortOrder);
267 fprintf(fp_tt,"<tr><th class=\"header3\" colspan=\"2\">%s</th></tr>\n",text[32]);
268
269 fputs("</table></div>\n",fp_tt);
270 fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_tt);
271 fputs("<tr><td></td><td></td></tr>",fp_tt);
272 bzero(tmp4, MAXLEN);
273 strncpy(tmp4,text[110],4);
274 fprintf(fp_tt,"<tr><th class=\"header\">%s</th><th class=\"header\">%s</th><th class=\"header\">%s</th></tr>\n",text[91],tmp4,text[110]+5);
275 }
276
277 sprintf(html,"<tr><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td></tr>\n",accurl,accdia,acchora);
278
279 if(strcmp(html,html_old) != 0)
280 fputs(html,fp_tt);
281 strcpy(html_old, html);
282 } else bzero(ltext110, 50);
283
284 strcpy(crc2,acccode);
285 str=strchr(crc2,'/');
286 if (str) *str='\0';
287
288 if(strstr(crc2,"MISS") != 0)
289 oucache+=my_atoll(accbytes);
290 else incache+=my_atoll(accbytes);
291
292 strcpy(oldurl,accurl);
293
294 if(strcmp(accuser,oldaccuser) != 0) {
295 strcpy(wdirname,dirname);
296 day_totalize(tmp,oldaccuser,indexonly);
297 }
298
299 strcpy(oldaccuser,accuser);
300 strcpy(oldacccode,acccode);
301 strcpy(oldaccelap,accelap);
302 strcpy(oldaccip,accip);
303 strcpy(oldaccdia,accdia);
304 strcpy(oldacchora,acchora);
305
306 }
307 bzero(user,MAXLEN);
308 fclose(fp_in);
309 unlink(tmp3);
310 }
311 closedir(dirp);
312
313 strcpy(oldmsg,"OK");
314 if(strstr(oldacccode,"DENIED") != 0)
315 sprintf(oldmsg,"%s",text[46]);
316 strcpy(wdirname,dirname);
317 if(strlen(oldaccuser) == 0)
318 strcpy(oldaccuser,accuser);
319 gravatmpf(oldaccuser,wdirname,oldurl,nacc,nbytes,oldmsg,nelap,indexonly,incache,oucache);
320 strcpy(wdirname,dirname);
321 gravager(fp_gen,oldaccuser,nacc,oldurl,nbytes,oldaccip,oldacchora,oldaccdia,nelap,incache,oucache);
322 fclose(fp_gen);
323 day_totalize(tmp,oldaccuser,indexonly);
324
325 tmpsort();
326
327 strcpy(wdirname,dirname);
328 totalger(wdirname, debug, outdir);
329
330 if(email[0] == '\0') {
331 if(strstr(ReportType,"downloads") != 0) download_report();
332
333 if(strlen(DansGuardianConf) > 0) {
334 strcpy(wdirname,dirname);
335 dansguardian_log();
336 }
337
338 strcpy(wdirname,dirname);
339 squidguard_log();
340
341 strcpy(wdirname,dirname);
342 topuser();
343
344 if(strstr(ReportType,"topsites") != 0) topsites();
345
346 if(strstr(ReportType,"sites_users") != 0) siteuser();
347 gen_denied_report();
348
349 strcpy(wdirname,dirname);
350 authfail_report();
351
352 if(smartfilter) smartfilter_report();
353
354 if(strlen(DansGuardianConf) > 0) dansguardian_report();
355
356 squidguard_report();
357
358 if(strstr(ReportType,"users_sites") != 0) htmlrel();
359
360 make_index();
361
362 if(strncmp(SuccessfulMsg,"yes",3) == 0) fprintf(stderr, "SARG: %s %s\n",text[47],dirname);
363 } else {
364 strcpy(wdirname,dirname);
365 geramail(wdirname, debug, outdir, userip, email, TempDir);
366
367 if((strcmp(email,"stdout") != 0) && (strncmp(SuccessfulMsg,"yes",3) == 0))
368 fprintf(stderr, "SARG: %s %s\n",text[48],email);
369 }
370
371 if(indexonly) {
372 strcpy(wdirname,dirname);
373 index_only(wdirname, debug);
374 }
375
376 /*
377 2009-10-13(Frederic) This piece of code is never called so it is commented out for good.
378 if(strlen(email) < 0)
379 removetmp(dirname);
380 */
381
382 return;
383 }
384
385 static void maketmp(const char *user, const char *dirname, int debug, int indexonly)
386 {
387
388 FILE *fp_ou;
389
390 char wdirname[MAXLEN];
391
392 if(indexonly) return;
393 if(strstr(ReportType,"users_sites") == 0) return;
394
395 strcpy(wdirname,tmp);
396 strcat(wdirname,"/");
397 strcat(wdirname,user);
398
399 if(debug){
400 debuga("%s: %s",text[49],wdirname);
401 }
402
403 strcat(wdirname,".utmp");
404 if((fp_ou=fopen(wdirname,"w"))==NULL){
405 fprintf(stderr, "SARG: (report) %s: %s\n",text[45],wdirname);
406 exit(1);
407 }
408
409 fclose(fp_ou);
410 return;
411 }
412
413
414 static void maketmp_hour(const char *user, const char *dirname, int indexonly)
415 {
416
417 FILE *fp_ou;
418
419 char wdirname[MAXLEN];
420
421 if(indexonly) return;
422 if(strstr(ReportType,"users_sites") == 0) return;
423
424 strcpy(wdirname,tmp);
425 strcat(wdirname,"/");
426 strcat(wdirname,user);
427
428 strcat(wdirname,".htmp");
429 if((fp_ou=fopen(wdirname,"w"))==NULL){
430 fprintf(stderr, "SARG: (report-1) %s: %s - %s\n",text[45],wdirname,strerror(errno));
431 exit(1);
432 }
433
434 fclose(fp_ou);
435 return;
436 }
437
438
439 void gravatmp(const char *oldaccuser, const char *oldurl, long long int nacc, long long int nbytes, const char *oldmsg, long long int nelap, int indexonly, long long int incache, long long int oucache)
440 {
441
442 FILE *fp_ou;
443 char val1[16];
444 char val2[16];
445 char val3[16];
446 char val4[16];
447 char val5[16];
448 char wdirname[MAXLEN];
449
450 if(indexonly) return;
451 if(strstr(ReportType,"users_sites") == 0) return;
452
453 if (snprintf(wdirname,sizeof(wdirname),"%s/%s.utmp",tmp,oldaccuser)>=sizeof(wdirname)) {
454 fprintf(stderr,"SARG: Path too long %s/%s.utmp\n",tmp,oldaccuser);
455 exit(1);
456 }
457
458 if((fp_ou=MY_FOPEN(wdirname,"a"))==NULL){
459 fprintf(stderr, "SARG: (report) %s: %s\n",text[45],wdirname);
460 exit(1);
461 }
462
463 my_lltoa(nacc,val1,0);
464 my_lltoa(nbytes,val2,0);
465 my_lltoa(nelap,val3,0);
466 my_lltoa(incache,val4,0);
467 my_lltoa(oucache,val5,0);
468 fprintf(fp_ou,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",val1,val2,oldurl,oldmsg,val3,val4,val5);
469
470 fclose(fp_ou);
471 ttopen=0;
472
473 if(fp_tt) {
474 fputs("</table>\n",fp_tt);
475 fputs("</body>\n</html>\n",fp_tt);
476 fclose(fp_tt);
477 }
478
479 return;
480
481 }
482
483
484 static void gravatmp_hora(const char *dirname, const char *user, const char *data, const char *hora, const char *elap, const char *bytes, int indexonly)
485 {
486
487 FILE *fp_ou;
488 char wdirname[MAXLEN];
489
490 if(indexonly || (strstr(ReportType,"users_sites") == 0)) return;
491
492 if (snprintf(wdirname,sizeof(wdirname),"%s/%s.htmp",tmp,user)>=sizeof(wdirname)) {
493 fprintf(stderr,"SARG: Path too long %s/%s.htmp\n",tmp,user);
494 exit(1);
495 }
496
497 if((fp_ou=MY_FOPEN(wdirname,"a"))==NULL){
498 fprintf(stderr, "SARG: (report-2) %s: %s - %s\n",text[45],wdirname,strerror(errno));
499 exit(1);
500 }
501
502 if(strcmp(datetimeby,"bytes") == 0) fprintf(fp_ou,"%s\t%s\t%s\n",data,hora,bytes);
503 else fprintf(fp_ou,"%s\t%s\t%s\n",data,hora,elap);
504
505 fclose(fp_ou);
506
507 return;
508 }
509
510
511 static void gravaporuser(const char *user, const char *dirname, const char *url, const char *ip, const char *data, const char *hora, const char *tam, const char *elap, int indexonly)
512 {
513
514 FILE *fp_ou;
515 char wdirname[MAXLEN];
516
517 if(indexonly || (strstr(ReportType,"users_sites") == 0)) return;
518
519 if (snprintf(wdirname,sizeof(wdirname),"%s/%s.ip",tmp,user)>=sizeof(wdirname)) {
520 fprintf(stderr,"SARG: Path too long %s/%s.ip\n",tmp,user);
521 exit(1);
522 }
523
524 if((fp_ou=MY_FOPEN(wdirname,"a"))==NULL){
525 fprintf(stderr, "SARG: (report) %s: %s\n",text[45],wdirname);
526 exit(1);
527 }
528
529 fprintf(fp_ou,"%s\t%s\t%s\t%s\t%s\t%s\n",ip,url,data,hora,tam,elap);
530
531 fclose(fp_ou);
532
533 return;
534
535 }
536
537
538 static void gravatmpf(const char *oldaccuser, const char *dirname, const char *oldurl, long long int nacc, long long int nbytes, const char *oldmsg, long long int nelap, int indexonly, long long int incache, long long int oucache)
539 {
540
541 FILE *fp_ou;
542 char wdirname[MAXLEN];
543
544 if(indexonly || (strstr(ReportType,"users_sites") == 0)) return;
545
546 if (snprintf(wdirname,sizeof(wdirname),"%s/%s.utmp",tmp,oldaccuser)>=sizeof(wdirname)) {
547 fprintf(stderr,"SARG: Path too long %s/%s.utmp\n",tmp,oldaccuser);
548 exit(1);
549 }
550
551 if((fp_ou=MY_FOPEN(wdirname,"a"))==NULL){
552 fprintf(stderr, "SARG: (report) %s: %s\n",text[45],wdirname);
553 exit(1);
554 }
555
556 my_lltoa(nacc,val1,0);
557 my_lltoa(nbytes,val2,0);
558 my_lltoa(nelap,val3,0);
559 my_lltoa(incache,val4,0);
560 my_lltoa(oucache,val5,0);
561 fprintf(fp_ou,"%s\t%s\t%s\t%s\t%s\t%s\t%s\n",val1,val2,oldurl,oldmsg,val3,val4,val5);
562
563 fclose(fp_ou);
564 ttopen=0;
565 ind2=0;
566
567 if(fp_tt) {
568 fputs("</table>\n",fp_tt);
569 fputs("</body>\n</html>\n",fp_tt);
570 fclose(fp_tt);
571 }
572
573 return;
574
575 }
576
577
578 static void gravager(FILE *fp_gen, const char *user, long long int nacc, const char *url, long long int nbytes, const char *ip, const char *hora, const char *dia, long long int nelap, long long int incache, long long int oucache)
579 {
580 my_lltoa(nacc,val1,0);
581 my_lltoa(nbytes,val2,0);
582 my_lltoa(nelap,val3,0);
583 my_lltoa(incache,val4,0);
584 my_lltoa(oucache,val5,0);
585 fprintf(fp_gen,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",user,val1,val2,url,ip,hora,dia,val3,val4,val5);
586 return;
587
588 }
589
590 static void grava_SmartFilter(const char *dirname, const char *user, const char *ip, const char *data, const char *hora, const char *url, const char *smart)
591 {
592
593 FILE *fp_ou;
594 char wdirname[MAXLEN];
595
596 sprintf(wdirname,"%s/smartfilter.unsort",dirname);
597
598 if((fp_ou=MY_FOPEN(wdirname,"a"))==NULL){
599 fprintf(stderr, "SARG: (report) %s: %s\n",text[45],wdirname);
600 exit(1);
601 }
602
603 fprintf(fp_ou,"%s\t%s\t%s\t%s\t%s\t%s\n",user,data,hora,ip,url,smart);
604 fputs("</body>\n</html>\n",fp_tt);
605
606 fclose(fp_ou);
607
608 return;
609
610 }