SARG ChangeLog
+Nov/29/2005 version 2.1
+ - index_tree tag added.
+ Look at TAG: index_tree in sarg.conf file
+ default is file - old format.
+ - realtime report added. sarg -r option
+ Look at these tags ion sarg.conf file:
+ TAG: realtime_refresh_time num sec
+ TAG: realtime_access_log_lines num
+ TAG: realtime_types: GET,PUT,CONNECT,ICP_QUERY,POST
+ TAG: realtime_unauthenticated_records: ignore|show
+ - garbage in topuser report with unitialized variable.
+ Thanks to Craig Brockmeier <craig@ppco.com>
+ - memory leaks caused by a wrong variable size
+ Fixed by Klaus Singvogel <kssingvo@suse.de>. Thanks.
+ - ignoring users with '.' in password file.
+ Thanks to Emerson Valdir Pellis <webmaster@marisol.com.br>
+ - error with "resolve_ip" with "user_authentication yes"
+ Fixed by Grigory Trenin <gtrenin@gmail.com>. Thanks.
+ - long url causing fault.
+ Thanks to Vassily Andin <vasya@avitalight.com>
+ - hanging on a log file containing space.
+ Thanks to Fabio Lo Votrico <fabio@link.it>
+ - bug fixed in squidguard report module
+ - squidguard_ignore_date on|off tag added to sarg.conf file
+ You can ignore the squidguard log record date if outisde of
+ date range in squid access.log file.
+ - alternate squidguard log added using -L option on sarg command line.
+ Thanks to Dave Karlson <dkarlson@r9esd.k12.or.us>
+ - fixed malloc withou free.
+ - datafile-url ip|name added to sarg.conf file - saves ip address or name
+ in url when using datafile tag. Thanks to Calvin Muller <calvin@siryn.co.za>
+ - wronk link point in Generated by sarg-2..
+ Thanks to Markus Hoffmann <ipcop@mh-lantech.de>
+ - Russian_UFT-8 language added by Alex Deiter <tiamat@komi.mts.ru>
+
Aug/04/2005 version 2.0.9
- dansguardian_report_limit missing in sarg.conf file.
- ntlm domain+user format added.
indexonly.c splitlog.c lastlog.c topsites.c siteuser.c css.c \
smartfilter.c denied.cauthfail.c language.c charset.c \
squidguard_log.c squidguard_report.c auth.c download.c grepday.c \
- dansguardian_log.c dansguardian_report.c
+ dansguardian_log.c dansguardian_report.c realtime.c
OBJS = util.o log.o report.o topuser.o email.o sort.o html.o \
totger.o index.o getconf.o usage.o decomp.o ip2name.o \
useragent.o exclude.o convlog.o totday.o repday.o datafile.o \
indexonly.o splitlog.o lastlog.o topsites.o siteuser.o css.o \
smartfilter.o denied.o authfail.o language.o charset.o \
squidguard_log.o squidguard_report.o auth.o download.o grepday.o \
- dansguardian_log.o dansguardian_report.o
+ dansguardian_log.o dansguardian_report.o realtime.o
DISTFILES = $(SRCS)
Dusan Woletz <Dusan.WOLETZ@orange.sk> - Slovak Language
Jose Luis Hernandez <jhdz@simbiotica.net> - Spanish language fix
Theo kastermans <t.kastermans@zandvoort.nl> - Dutch language fix
+Alex Deiter <tiamat@komi.mts.ru> - Russian UFT-8 language added
+
Translating
. Copy include/English to YourLanguage
ouser[0]='\0';
- sprintf(tmp4,"%s/authfail.log.unsort",TempDir);
+ sprintf(tmp4,"%s/sarg/authfail.log.unsort",TempDir);
if(!authfail_count) {
unlink(tmp4);
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou,"..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou, "../../..");
+ else
+ show_sarg(fp_ou,"..");
fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ou);
sprintf(url,"<tr><th class=\"title\">%s</th></tr>\n",Title);
fputs(url,fp_ou);
}
fputs("<style>\n",fp_ou);
-
sprintf(csstext,".logo {font-family:Verdana,Tahoma,Arial;font-size:11px;color:%s;}\n",LogoTextColor);
fputs(csstext,fp_ou);
- sprintf(csstext,".body {font-family:%s;color:%s;background-color:%s;}\n", \
- FontFace, TxColor, BgColor);
+ sprintf(csstext,".body {font-family:%s;color:%s;background-color:%s;}\n",FontFace,TxColor,BgColor);
fputs(csstext,fp_ou);
-
-
sprintf(csstext,".info {font-family:%s;font-size:9px;}\n", FontFace);
fputs(csstext,fp_ou);
sprintf(csstext,".info a:link,a:visited {font-family:%s;color:#0000FF;font-size:9px;text-decoration:none;}\n", FontFace);
fputs(csstext,fp_ou);
-
- sprintf(csstext,".title {font-family:%s;font-size:%s;color:%s;background-color:%s;}\n", \
- FontFace, TitleFontSize, TiColor, BgColor);
+ sprintf(csstext,".title {font-family:%s;font-size:%s;color:%s;background-color:%s;}\n",FontFace,TitleFontSize,TiColor,BgColor);
fputs(csstext,fp_ou);
-
- sprintf(csstext,".header {font-family:%s;font-size:%s;color:%s;background-color:%s; \
- text-align:left;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}\n", \
- FontFace, HeaderFontSize, HeaderColor, HeaderBgColor);
+ sprintf(csstext,".title2 {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:left;}\n",FontFace,TitleFontSize,TiColor,BgColor);
fputs(csstext,fp_ou);
-
- sprintf(csstext,".header2 {font-family:%s;font-size:%s;color:%s;background-color:%s; \
- text-align:right;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}\n", \
- FontFace, HeaderFontSize, HeaderColor, HeaderBgColor);
+ sprintf(csstext,".title3 {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:right;}\n",FontFace,TitleFontSize,TiColor,BgColor);
fputs(csstext,fp_ou);
-
- sprintf(csstext,".header3 {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:center;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}\n", \
- FontFace, HeaderFontSize, HeaderColor, HeaderBgColor);
+ sprintf(csstext,".header {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:left;border-right:1px solid #666666;border-bottom:1px solid #666666;}\n",FontFace,HeaderFontSize,HeaderColor,HeaderBgColor);
+ fputs(csstext,fp_ou);
+ sprintf(csstext,".header2 {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:right;border-right:1px solid #666666;border-bottom:1px solid #666666;}\n",FontFace,HeaderFontSize,HeaderColor,HeaderBgColor);
+ fputs(csstext,fp_ou);
+ sprintf(csstext,".header3 {font-family:%s;font-size:%s;color:%s;background-color:%s;text-align:center;border-right:1px solid #666666;border-bottom:1px solid #666666;}\n",FontFace,HeaderFontSize,HeaderColor,HeaderBgColor);
fputs(csstext,fp_ou);
-
sprintf(csstext,".text {font-family:%s;color:%s;font-size:%s;}\n", FontFace, TxColor, FontSize);
fputs(csstext,fp_ou);
-
sprintf(csstext,".data {font-family:%s;color:%s;font-size:%s;background-color:%s;text-align:right;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}\n", FontFace, TxColor, FontSize, TxBgColor);
fputs(csstext,fp_ou);
sprintf(csstext,".data a:link,a:visited {font-family:%s;color:#0000FF;font-size:%s;background-color:%s;text-align:right;text-decoration:none;}\n", FontFace, FontSize, TxBgColor);
fputs(csstext,fp_ou);
-
sprintf(csstext,".data2 {font-family:%s;color:%s;font-size:%s;background-color:%s;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}\n", FontFace, TxColor, FontSize, TxBgColor);
fputs(csstext,fp_ou);
sprintf(csstext,".data2 a:link,a:visited {font-family:%s;color:#0000FF;font-size:%s;background-color:%s;text-decoration:none;}\n", FontFace, FontSize, TxBgColor);
fputs(csstext,fp_ou);
-
+ sprintf(csstext,".data3 {font-family:%s;color:%s;font-size:%s;text-align:center;background-color:%s;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}\n", FontFace, TxColor, FontSize, TxBgColor);
+ fputs(csstext,fp_ou);
+ sprintf(csstext,".data3 a:link,a:visited {font-family:%s;color:#0000FF;font-size:%s;text-align:center;background-color:%s;text-decoration:none;}\n", FontFace, FontSize, TxBgColor);
+ fputs(csstext,fp_ou);
+ sprintf(csstext,".text {font-family:%s;color:%s;font-size:%s;text-align:right;}\n", FontFace, TxColor, FontSize, TxBgColor);
+ fputs(csstext,fp_ou);
sprintf(csstext,".link {font-family:%s;font-size:%s;color:#0000FF;}\n", FontFace, FontSize);
fputs(csstext,fp_ou);
sprintf(csstext,".link a:link,a:visited {font-family:%s;font-size:%s;color:#0000FF;text-decoration:none;}\n", FontFace, FontSize);
fputs(csstext,fp_ou);
-
fputs("</style>\n",fp_ou);
- fflush(fp_ou);
return;
;}
-.body {font-family:Verdana,Tahoma,Arial;color:#000000;background-color:#FFFFFF;}
+.body {font-family:Verdana,Tahoma,Arial;color:#000000;background-color:#ffffff;}
.info {font-family:Verdana,Tahoma,Arial;font-size:9px;}
-.info a:link,a:visited {font-family:Verdana,Tahoma,Arial;color:#0000FF;font-size:9px;text-decoration:none;}
-.title {font-family:Verdana,Tahoma,Arial;font-size:11px;color:darkblue;background-color:#FFFFFF;}
-.header {font-family:Verdana,Tahoma,Arial;font-size:9px;color:darkblue;background-color:#DDDDDD;text-align:left;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}
-.header2 {font-family:Verdana,Tahoma,Arial;font-size:9px;color:darkblue;background-color:#DDDDDD;text-align:right;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}
-.header3 {font-family:Verdana,Tahoma,Arial;font-size:9px;color:darkblue;background-color:#DDDDDD;text-align:center;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}
+.info a:link,a:visited {font-family:Verdana,Tahoma,Arial;color:#0000ff;font-size:9px;text-decoration:none;}
+.title {font-family:Verdana,Tahoma,Arial;font-size:11px;color:darkblue;background-color:#ffffff;}
+.title2 {font-family:Verdana,Tahoma,Arial;font-size:11px;color:darkblue;background-color:#ffffff;text-align:left;}
+.title3 {font-family:Verdana,Tahoma,Arial;font-size:11px;color:darkblue;background-color:#ffffff;text-align:right;}
+.header {font-family:Verdana,Tahoma,Arial;font-size:9px;color:darkblue;background-color:#dddddd;text-align:left;border-right:1px solid #666666;border-bottom:1px solid #666666;}
+.header2 {font-family:Verdana,Tahoma,Arial;font-size:9px;color:darkblue;background-color:#dddddd;text-align:right;border-right:1px solid #666666;border-bottom:1px solid #666666;}
+.header3 {font-family:Verdana,Tahoma,Arial;font-size:9px;color:darkblue;background-color:#dddddd;text-align:center;border-right:1px solid #666666;border-bottom:1px solid #666666;}
.text {font-family:Verdana,Tahoma,Arial;color:#000000;font-size:9px;}
-.data {font-family:Verdana,Tahoma,Arial;color:#000000;font-size:9px;background-color:lavender;text-align:right;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}
-.data a:link,a:visited {font-family:Verdana,Tahoma,Arial;color:#0000FF;font-size:9px;background-color:lavender;text-align:right;text-decoration:none;}
-.data2 {font-family:Verdana,Tahoma,Arial;color:#000000;font-size:9px;background-color:lavender;border-right:1px solid #6A5ACD;border-bottom:1px solid #6A5ACD;}
-.data2 a:link,a:visited {font-family:Verdana,Tahoma,Arial;color:#0000FF;font-size:9px;background-color:lavender;text-decoration:none;}
-.link {font-family:Verdana,Tahoma,Arial;font-size:9px;color:#0000FF;}
-.link a:link,a:visited {font-family:Verdana,Tahoma,Arial;font-size:9px;color:#0000FF;text-decoration:none;}
+.data {font-family:Verdana,Tahoma,Arial;color:#000000;font-size:9px;background-color:lavender;text-align:right;border-right:1px solid #6a5acd;border-bottom:1px solid #6a5acd;}
+.data a:link,a:visited {font-family:Verdana,Tahoma,Arial;color:#0000ff;font-size:9px;background-color:lavender;text-align:right;text-decoration:none;}
+.data2 {font-family:Verdana,Tahoma,Arial;color:#000000;font-size:9px;background-color:lavender;border-right:1px solid #6a5acd;border-bottom:1px solid #6a5acd;}
+.data2 a:link,a:visited {font-family:Verdana,Tahoma,Arial;color:#0000ff;font-size:9px;background-color:lavender;text-decoration:none;}
+.data3 {font-family:Verdana,Tahoma,Arial;color:#000000;font-size:9px,text-align:center;background-color:lavender;border-right:1px solid #6a5acd;border-bottom:1px solid #6a5acd;}
+.data3 a:link,a:visited {font-family:Verdana,Tahoma,Arial;color:#0000ff;font-size:9px;text-align:center;background-color:lavender;text-decoration:none;}
+.text {font-family:Verdana,Tahoma,Arial;color:#000000;font-size:9px;text-align:right;}
+.link {font-family:Verdana,Tahoma,Arial;font-size:9px;color:#0000ff;}
+.link a:link,a:visited {font-family:Verdana,Tahoma,Arial;font-size:9px;color:#0000ff;text-decoration:none;}
int idata=0;
int x, y;
- if(strlen(DansGuardianConf) < 1)
- return;
-
bzero(day, 3);
bzero(mon, 4);
bzero(year, 5);
sprintf(wdata,"%s%02d%s",year,atoi(mon),day);
idata = atoi(wdata);
- if(idata >= dfrom && idata <= duntil) {
- if(strcmp(user,"-") == 0)
- strcpy(user,ip);
- sprintf(tmp6,"%s %d %s %s %s %s %s\n",user,idata,hour,ip,url,code1,code2);
- fputs(tmp6, fp_ou);
- dansguardian_count++;
+ if(strcmp(DansguardianIgnoreDate,"on") == 0) {
+ if(idata < dfrom && idata > duntil)
+ continue;
+ }
+
+ if (strcmp(user,"-") == 0) {
+ strcpy(user,ip);
+ bzero(ip, 30);
}
+ sprintf(tmp6,"%s %d %s %s %s %s %s\n",user,idata,hour,ip,url,code1,code2);
+ fputs(tmp6, fp_ou);
+ dansguardian_count++;
}
- fclose(fp_in);
- fclose(fp_guard);
- fclose(fp_ou);
+
+ if(fp_in) fclose(fp_in);
+ if(fp_guard) fclose(fp_guard);
+ if(fp_ou) fclose(fp_ou);
+
+ if(debug) {
+ sprintf(msg,"%s: %s",text[54],guard_ou);
+ debuga(msg);
+ }
+
sprintf(tmp6,"sort -k 1,1 -k 2,2 -k 4,4 '%s' -o '%s'",guard_in, guard_ou);
system(tmp6);
unlink(guard_in);
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou,"..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou, "../../..");
+ else
+ show_sarg(fp_ou,"..");
fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ou);
sprintf(url,"<tr><th class=\"title\">%s</th></tr>\n",Title);
fputs(url,fp_ou);
continue;
}
- sprintf(html2,"<tr><td class=\"data2\">%s</td><td class=\"data2\">%s</td><td class=\"data2\">%s-%s</td><td class=\"data2\"><a href=\"http://%s\">%s</a></td><td class=\"data2\">%s</td></tr>\n",name,ip,date,hour,url,url,rule);
+ sprintf(html2,"<tr><td class=\"data2\" nospaw>%s</td><td class=\"data2\" nospaw>%s</td><td class=\"data2\" nospaw>%s-%s</td><td class=\"data2\" nospaw><a href=\"http://%s\">%s</a></td><td class=\"data2\" nospaw>%s</td></tr>\n",name,ip,date,hour,url,url,rule);
fputs(html2,fp_ou);
}
strcpy(wdirname,dirname);
gravatmp(oldaccuser,wdirname,oldurl,nacc,nbytes,oldmsg,nelap,indexonly,incache,oucache);
strcpy(wdirname,dirname);
- saverecs(wdirname,oldaccuser,nacc,oldurl,nbytes,oldaccip,oldacchora,oldaccdia,nelap,incache,oucache);
+ saverecs2(wdirname,oldaccuser,nacc,oldurl,nbytes,oldaccip,oldacchora,oldaccdia,nelap,incache,oucache);
nacc=0;
nbytes=0;
nelap=0;
return;
}
-void saverecs(char *dirname, char *user, long long int nacc, char *url, long long int nbytes, char *ip, char *hora, char *dia, long long int nelap, long long int incache, long long int oucache)
+void saverecs2(char *dirname, char *user, long long int nacc, char *url, long long int nbytes, char *ip, char *hora, char *dia, long long int nelap, long long int incache, long long int oucache)
{
FILE *fp_ou;
}
if(strstr(DataFileFields,"url") != 0) {
strcpy(name,url);
- name2ip(name);
+ if (strcmp(DataFileUrl,"ip") == 0)
+ name2ip(name);
strncat(reg,name,strlen(name));
strncat(reg,DataFileDelimiter,1);
}
ouser[0]='\0';
- sprintf(denied_in,"%s/denied.log",TempDir);
+ sprintf(denied_in,"%s/sarg/denied.log",TempDir);
if(!denied_count) {
unlink(denied_in);
return;
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou, "..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou, "../../..");
+ else
+ show_sarg(fp_ou, "..");
sprintf(url,"<tr><th class=\"title\">%s</b></th></tr>\n",Title);
fputs(url,fp_ou);
}
if(strlen(BlockIt) > 0)
- sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"../images/sarg-squidguard-block.png\" border=\"0\"></a> ",wwwDocumentRoot,BlockIt,url);
+ sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\" border=\"0\"></a> ",wwwDocumentRoot,BlockIt,url,ImageFile);
else BlockImage[0]='\0';
sprintf(html2,"<tr><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s-%s</td><td class=\"data2\">%s<a href=\"%s\">%s</a></td></th>\n",name,ip,data,hora,BlockImage,url,url);
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou, "..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou, "../../..");
+ else
+ show_sarg(fp_ou, "..");
sprintf(url,"<tr><th class=\"title\">%s</b></th></tr>\n",Title);
fputs(url,fp_ou);
}
if(strlen(BlockIt) > 0)
- sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"../images/sarg-squidguard-block.png\" border=\"0\"></a> ",wwwDocumentRoot,BlockIt,url);
+ sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\" border=\"0\"></a> ",wwwDocumentRoot,BlockIt,url,ImageFile);
else BlockImage[0]='\0';
sprintf(html2,"<tr><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s-%s</td><td class=\"data2\">%s<a href=\"%s\">%s</a></td></th>\n",name,ip,data,hora,BlockImage,url,url);
strcat(top1,"/top");
strcat(top2,"/top.tmp");
strcat(top3,"/report");
- strcat(tusr,"/usuarios");
+ strcat(tusr,"/users");
if((fp_in=fopen(wger,"r"))==NULL) {
fprintf(stderr, "SARG: (email) %s: %s\n",text[45],wger);
return;
}
+ if(strstr(buf,"index_tree") != 0) {
+ getword(wbuf,buf,' ');
+ strcpy(IndexTree,buf);
+ fixnone(IndexTree);
+ return;
+ }
+
if(strstr(buf,"index") != 0) {
if(strstr(buf,"index_sort_order") == 0) {
getword(wbuf,buf,' ');
return;
}
+ if(strstr(buf,"datafile_url") != 0) {
+ getword(wbuf,buf,' ');
+ strcpy(DataFileUrl,buf);
+ fixnone(DataFileUrl);
+ return;
+ }
+
if(strstr(buf,"parsed_output_log") != 0) {
if(strstr(buf,"parsed_output_log_compress") == 0) {
getword(wbuf,buf,' ');
return;
}
+ if(strstr(buf,"squidguard_ignore_date") != 0) {
+ getword(wbuf,buf,' ');
+ strcpy(SquidguardIgnoreDate,buf);
+ fixnone(SquidguardIgnoreDate);
+ return;
+ }
+
+ if(strstr(buf,"dansguardian_ignore_date") != 0) {
+ getword(wbuf,buf,' ');
+ strcpy(DansguardianIgnoreDate,buf);
+ fixnone(DansguardianIgnoreDate);
+ return;
+ }
+
if(strstr(buf,"ulimit") != 0) {
getword(wbuf,buf,' ');
strcpy(Ulimit,buf);
fixnone(NtlmUserFormat);
return;
}
+
+ if(strstr(buf,"realtime_types") != 0) {
+ getword(wbuf,buf,' ');
+ strcpy(RealtimeTypes,buf);
+ fixnone(RealtimeTypes);
+ return;
+ }
+
+ if(strstr(buf,"realtime_unauthenticated_records") != 0) {
+ getword(wbuf,buf,' ');
+ strcpy(RealtimeUnauthRec,buf);
+ fixnone(RealtimeUnauthRec);
+ return;
+ }
+
+ if(strstr(buf,"realtime_refresh_time") != 0) {
+ getword(wbuf,buf,' ');
+ realtime_refresh=atoi(buf);
+ return;
+ }
+
+ if(strstr(buf,"realtime_access_log_lines") != 0) {
+ getword(wbuf,buf,' ');
+ realtime_access_log_lines=atoi(buf);
+ return;
+ }
+
+ if(strstr(buf,"byte_cost") != 0) {
+ getword(wbuf,buf,' ');
+ cost=atol(buf);
+ getword(wbuf,buf,' ');
+ nocost=my_atoll(buf);
+ return;
+ }
return;
}
long long int totelap=0, totelap2=0, nnelap=0, unelap=0, tnelap=0;
long long int incache=0, oucache=0, tnincache=0, tnoucache=0, twork=0, twork2=0;
char arqin[MAXLEN], arqou[MAXLEN], arqper[MAXLEN], arqip[MAXLEN];
- char nacc[20], nbytes[20], url[1024], purl[1024], tmsg[30], tmsg2[30], nelap[20], csort[MAXLEN];
+ char nacc[20], nbytes[20], url[1024], purl[1024], tmsg[50], tmsg2[50], nelap[20], csort[MAXLEN];
char periodo[MAXLEN], usuario[MAXLEN], wusuario[MAXLEN], u2[MAXLEN], duser[MAXLEN];
char userbytes[20], userelap[20], userurl[1024], userhora[9], userdia[9];
char user_ip[MAXLEN], olduserip[MAXLEN], tmp2[MAXLEN], tmp3[MAXLEN], incac[20], oucac[20];
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou,"../..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou, "../../../..");
+ else
+ show_sarg(fp_ou, "../..");
+
fputs("<center><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
sprintf(html,"<tr><th class=\"title\" colspan=\"2\">%s</th></tr>\n",Title);
fputs(html,fp_ou);
sprintf(httplink,"<font color=%s><href=http://%s>%s", \
PrivacyStringColor,PrivacyString,PrivacyString);
else
+ strcpy(tmp6,"../../images");
+ if(strcmp(IndexTree,"date") == 0)
+ sprintf(tmp6,"../%s",ImageFile);
if(strlen(BlockIt) > 0)
- sprintf(httplink,"<a href=\"%s%s?url=%s\"><img src=\"../../images/sarg-squidguard-block.png\" border=\"0\"></a><a href=http://%s> %s</a>",wwwDocumentRoot,BlockIt,urly,urly,urly);
+ sprintf(httplink,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\" border=\"0\"></a><a href=http://%s> %s</a>",wwwDocumentRoot,BlockIt,urly,tmp6,urly,urly);
else
sprintf(httplink,"<a href=http://%s title=\"%s\">%s</a>",urly,urly,url);
if(str[z1]=='?' || str[z1]=='-' || str[z1]=='.' || str[z1]==':' || str[z1]=='/' || str[z1]=='\\')
str[z1]='_';
}
- sprintf(href2,"<a href=\"tt%s-%s.html\"><img src=\"../../images/datetime.png\" border=\"0\" title=\"%s %s\"></a>",usuario,siteind,ltext110,text[55]);
+ sprintf(href2,"<a href=\"tt%s-%s.html\"><img src=\"%s/datetime.png\" border=\"0\" title=\"%s %s\"></a>",usuario,siteind,tmp6,ltext110,text[55]);
} else {
bzero(href2, MAXLEN);
bzero(ltext110, 50);
fprintf(stderr, "SARG: (html9) %s: %s\n",text[45],PerUserLimitFile);
exit(1);
}
- while(fgets(tmp5,sizeof(tmp5),fp_usr)!=NULL) {
- if(strstr(tmp5,"\n") != 0)
- tmp5[strlen(tmp5)-1]='\0';
- if(strcmp(tmp5,u2) == 0) {
+ while(fgets(tmp6,sizeof(tmp6),fp_usr)!=NULL) {
+ if(strstr(tmp6,"\n") != 0)
+ tmp6[strlen(tmp6)-1]='\0';
+ if(strcmp(tmp6,u2) == 0) {
limit_flag=1;
break;
}
}
strcpy(arqper,dirname);
- strcat(arqper,"/usuarios");
-
+ strcat(arqper,"/users");
+
if ((fp_in = fopen(arqper, "r")) == 0){
fprintf(stderr, "SARG: (html11) %s: %s\n",text[45],arqper);
exit(1);
fclose(fp_ou);
- htaccess(name);
+ htaccess(wusuario);
}
char href2[MAXLEN];
char href3[MAXLEN];
char df[20];
-char day[3], month[3], year[5];
+char day[3], month[4], year[5];
+char nmonth[30];
+char y1[5], y2[5];
+char d1[3], d2[3];
+char m1[4], m2[4];
char ltext110[50];
char cdfrom[30];
char cduntil[30];
char LastLog[5];
char RemoveTempFiles[4];
char ReplaceIndex[256];
-char Index[5];
+char Index[20];
char OverwriteReport[4];
char RecordsWithoutUser[20];
char UseComma[4];
char MailUtility[6];
-char TopSitesNum[5];
-char TopUsersNum[5];
+char TopSitesNum[20];
+char TopUsersNum[20];
char ExcludeCodes[256];
char TopsitesSortField[15];
-char TopsitesSortType[5];
+char TopsitesSortType[20];
char ReportType[255];
char UserTabFile[255];
char warea[MAXLEN];
char name[MAXLEN];
-char LongUrl[4];
-char Ip2Name[5];
+char LongUrl[20];
+char Ip2Name[20];
char language[255];
char AccessLog[MAXLEN];
char Title[MAXLEN];
char DataFile[MAXLEN];
char DataFileDelimiter[3];
char DataFileFields[MAXLEN];
+char DataFileUrl[20];
char SiteUserTimeDateType[10];
char ShowReadStatistics[5];
char IndexSortOrder[5];
char DansGuardianConf[MAXLEN];
+char DansguardianIgnoreDate[10];
char SquidGuardConf[MAXLEN];
char SquidGuarddbHome[255];
char SquidGuardLogFormat[MAXLEN];
+char SquidGuardLogAlternate[MAXLEN];
+char SquidguardIgnoreDate[10];
char ShowSargInfo[5];
char ShowSargLogo[5];
char ParsedOutputLog[MAXLEN];
char ParsedOutputLogCompress[255];
char DisplayedValues[20];
-char HeaderFontSize[3];
-char TitleFontSize[3];
+char HeaderFontSize[4];
+char TitleFontSize[5];
char wwwDocumentRoot[MAXLEN];
char ExternalCSSFile[MAXLEN];
char BlockIt[255];
char hbc8[30];
char hbc9[30];
char hbc10[30];
+char IndexTree[10];
char UserAuthentication[10];
char AuthUserFile[255];
char AuthName[512];
char addr[MAXLEN];
char suffix[10];
char download_url[MAXLEN];
-char Ulimit[5];
+char Ulimit[6];
+char RealtimeTypes[1024];
char cmd[255];
+char ImageFile[255];
+char tbuf[128];
+char ip[25];
+char RealtimeUnauthRec[15];
+
int excode;
int idate;
int smartfilter;
int UserReportLimit;
int download_flag;
int dotinuser;
+int realtime_refresh;
+int realtime_access_log_lines;
+int realt;
+int x, y;
+int rc;
long l1, l2;
float perc;
long long int twork;
long long int twork2;
+long long int nocost;
+float cost;
typedef struct
{ int list[ 24 ];
-#define VERSION "2.0.9 May-30-2005"
+#define VERSION "2.1 Nov-29-2005"
#define PGM "sarg"
-#define URL "http://www.sarg-squid.org"
+#define URL "http://sarg.sourceforge.net"
#include "include/conf.h"
-void geraindex()
+void make_index()
{
- FILE *fp_ou, *fp_tmp, *tp_tmp2;
- DIR *dirp;
+ FILE *fp_ou, *fp_ou2, *fp_ou3, *fp_tmp, *fp_tmp2, *fp_tmp3;
+ DIR *dirp, *dirp2, *dirp3;
struct dirent *direntp;
+ struct dirent *direntp2;
+ struct dirent *direntp3;
char html[MAXLEN];
char wdir[MAXLEN];
char wdir_tmp[MAXLEN];
char wdir_tmp2[MAXLEN];
+ char wdir_tmp3[MAXLEN];
char newname[512];
char month[4];
char period[80];
if(debug)
debuga(text[53]);
- if((fp_ou=fopen(wdir,"w"))==NULL) {
- fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir);
- exit(1);
+ // Root dir
+ dirp = opendir(outdir);
+ while ((direntp = readdir( dirp )) != NULL) {
+ if(strcmp(IndexTree,"date") == 0) {
+ if(!isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1]))
+ continue;
+ if(strlen(direntp->d_name) > 4) {
+ bzero(y1,5);
+ bzero(y2,5);
+ bzero(m1,4);
+ bzero(m2,4);
+ bzero(d1,3);
+ bzero(d2,3);
+ if(strcmp(df,"u") == 0) {
+ strncpy(y1,direntp->d_name,4);
+ strncpy(m1,direntp->d_name+4,3);
+ strncpy(d1,direntp->d_name+7,2);
+ strncpy(y2,direntp->d_name+10,4);
+ strncpy(m2,direntp->d_name+14,3);
+ strncpy(d2,direntp->d_name+17,2);
+ } else if(strcmp(df,"e") == 0) {
+ strncpy(y1,direntp->d_name+5,4);
+ strncpy(m1,direntp->d_name+2,3);
+ strncpy(d1,direntp->d_name,2);
+ strncpy(y2,direntp->d_name+15,4);
+ strncpy(m2,direntp->d_name+12,3);
+ strncpy(d2,direntp->d_name+10,2);
+ }
+ conv_month(m1);
+ conv_month(m2);
+ }
+ sprintf(val1,"%s%s",outdir,y1);
+ if(access(val1, R_OK) != 0)
+ mkdir(val1,0755);
+ if(strcmp(m1,m2) != 0)
+ sprintf(val2,"%s/%s-%s",val1,m1,m2);
+ else
+ sprintf(val2,"%s/%s",val1,m1);
+ if(access(val2, R_OK) != 0)
+ mkdir(val2,0755);
+ if(strcmp(d1,d2) != 0)
+ sprintf(val3,"%s/%s-%s",val2,d1,d2);
+ else
+ sprintf(val3,"%s/%s",val2,d1);
+ sprintf(val4,"%s%s",outdir,direntp->d_name);
+ rename(val4,val3);
+ sprintf(val5,"%s/images",val2);
+ if(access(val5, R_OK) != 0) {
+ sprintf(val5,"ln -s %simages %s/images",outdir,val2);
+ system(val5);
+ }
+ } else {
+ if(!isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1]))
+ continue;
+ if(strlen(direntp->d_name) == 4) {
+ strcpy(y1,direntp->d_name);
+ sprintf(val1,"%s%s",outdir,direntp->d_name);
+ dirp2 = opendir(val1);
+ while ((direntp2 = readdir( dirp2 )) != NULL) {
+ if(!isdigit(direntp2->d_name[0]) && !isdigit(direntp2->d_name[1]))
+ continue;
+ sprintf(val2,"%s/%s",val1,direntp2->d_name);
+ dirp3 = opendir(val2);
+ while ((direntp3 = readdir( dirp3 )) != NULL) {
+ if(!isdigit(direntp3->d_name[0]) && !isdigit(direntp3->d_name[1]))
+ continue;
+ bzero(newname,512);
+ strcpy(warea,direntp2->d_name);
+ if(strstr(warea,"-") != 0) {
+ getword(m1,warea,'-');
+ strcpy(m2,warea);
+ conv_month_name(m1);
+ conv_month_name(m2);
+ } else {
+ strcpy(m1,warea);
+ conv_month_name(m1);
+ strcpy(m2,m1);
+ }
+ strcpy(warea,direntp3->d_name);
+ if(strstr(warea,"-") != 0) {
+ getword(d1,warea,'-');
+ strcpy(d2,warea);
+ } else {
+ strcpy(d1,warea);
+ strcpy(d2,warea);
+ }
+ if(strcmp(df,"u") == 0)
+ sprintf(val4,"%s%s%s%s-%s%s%s",outdir,y1,m1,d1,y1,m2,d2);
+ else if(strcmp(df,"e") == 0)
+ sprintf(val4,"%s%s%s%s-%s%s%s",outdir,d1,m1,y1,d2,m2,y1);
+ sprintf(val5,"%s%s/%s/%s",outdir,y1,direntp2->d_name,direntp3->d_name);
+ if(rename(val5,val4)) {
+ fprintf(stderr, "SARG: (index) rename error - %s\n",strerror(errno));
+ exit(1);
+ }
+ }
+ (void)rewinddir( dirp3 );
+ (void)closedir( dirp3 );
+ }
+ (void)rewinddir( dirp2 );
+ (void)closedir( dirp2 );
+ }
+// sprintf(cmd,"rm -rf %s%s\n",outdir,direntp->d_name);
+// system(cmd);
+ }
}
+ (void)rewinddir( dirp );
+ (void)closedir( dirp );
if((fp_tmp=fopen(wdir_tmp,"w"))==NULL) {
fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir_tmp);
}
dirp = opendir(outdir);
- while ( (direntp = readdir( dirp )) != NULL ){
- if(strstr(direntp->d_name,"-") == 0)
+ while ((direntp = readdir( dirp )) != NULL) {
+ if(strcmp(IndexTree,"date") == 0) {
+ if(strlen(direntp->d_name) > 4 || !isdigit(direntp->d_name[0]) && !isdigit(direntp->d_name[1]))
+ continue;
+ sprintf(warea,"%s %s\n",direntp->d_name,get_size(outdir,direntp->d_name));
+ fputs(warea, fp_tmp);
continue;
-
- bzero(newname, 512);
- strncat(newname,direntp->d_name,4);
- strncpy(month,direntp->d_name+4,3);
- month[3]='\0';
- conv_month(month);
- strcat(newname,month);
- strncat(newname,direntp->d_name+7,2);
-
- obtdate(outdir,direntp->d_name,data);
- obtuser(outdir,direntp->d_name,tuser);
- obttotal(outdir,direntp->d_name,tbytes,tuser,media);
-
- strcpy(html,data);
- getword(mon,html,' ');
- getword(mon,html,' ');
- getword(day,html,' ');
- getword(hour,html,' ');
- getword(year,html,' ');
- getword(year,html,' ');
- strcpy(html,hour);
- getword(h,html,':');
- getword(m,html,':');
- strcpy(s,html);
- buildymd(day,mon,year,ftime);
-
- sprintf(html,"%s%s%s%s;%s;%s;%s;%s;%s;%s\n",ftime, h, m, s, direntp->d_name, data, tuser, tbytes, media,
- newname);
- fputs(html, fp_tmp);
- }
-
- fclose(fp_tmp);
- (void)rewinddir( dirp );
- (void)closedir( dirp );
-
- if(strcmp(IndexSortOrder,"A") == 0)
-// sprintf(html,"sort -t';' -k 7,7 %s -o %s", wdir_tmp, wdir_tmp2);
- sprintf(html,"sort -t';' +6.5n +6.2M +6.0n '%s' -o '%s'", wdir_tmp, wdir_tmp2);
- else
-// sprintf(html,"sort -t';' -r -k 7,7 %s -o %s", wdir_tmp, wdir_tmp2);
- sprintf(html,"sort -t';' +6.5nr +6.2Mr +6.0nr '%s' -o '%s'", wdir_tmp, wdir_tmp2);
-
- system(html);
-
- unlink(wdir_tmp);
-
- fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"",fp_ou);
- fputs(" \"http://www.w3.org/TR/html4/loose.dtd\">\n",fp_ou);
- fputs("<html>\n",fp_ou);
- fputs("<head>\n",fp_ou);
- sprintf(html," <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
- fputs(html,fp_ou);
- fputs("</head>\n",fp_ou);
- css(fp_ou);
-
- sprintf(buf,"<body style=\"font-family:%s;font-size:%s;background-color:%s; \
- background-image:url(%s)\">\n",FontFace,TitleFontSize,BgColor,BgImage);
- fputs(buf,fp_ou);
-
- sprintf(buf,"<center><table cellpadding=\"0\" cellspacing=\"0\">\n");
- fputs(buf,fp_ou);
-
- if(strlen(LogoImage) > 0) {
- fputs("<center><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
- sprintf(html,"<tr><th class=\"logo\"><img src='%s' border=0 align=absmiddle width=%s height=%s> %s</th></tr>\n",LogoImage,Width,Height,LogoText);
- fputs(html,fp_ou);
- fputs("<tr><td height=\"5\"></td></tr>\n",fp_ou);
- fputs("</table>\n",fp_ou);
+ } else {
+ if(strstr(direntp->d_name,"-") == 0)
+ continue;
+ bzero(newname, 512);
+ if(strcmp(df,"u") == 0) {
+ strncat(newname,direntp->d_name,4);
+ strncpy(month,direntp->d_name+4,3);
+ } else {
+ strncat(newname,direntp->d_name+5,4);
+ strncpy(month,direntp->d_name+2,3);
+ }
+ month[3]='\0';
+ conv_month(month);
+ strcat(newname,month);
+ if(strcmp(df,"u") == 0)
+ strncat(newname,direntp->d_name+7,2);
+ else
+ strncat(newname,direntp->d_name,2);
+ obtdate(outdir,direntp->d_name,data);
+ obtuser(outdir,direntp->d_name,tuser);
+ obttotal(outdir,direntp->d_name,tbytes,tuser,media);
+ strcpy(html,data);
+ getword(mon,html,' ');
+ getword(mon,html,' ');
+ getword(day,html,' ');
+ getword(hour,html,' ');
+ getword(year,html,' ');
+ getword(year,html,' ');
+ strcpy(html,hour);
+ getword(h,html,':');
+ getword(m,html,':');
+ strcpy(s,html);
+ buildymd(day,mon,year,ftime);
+ sprintf(warea,"%s%s%s%s;%s;%s;%s;%s;%s;%s\n",ftime, h, m, s, direntp->d_name, data, tuser, tbytes, media,newname);
+ fputs(warea, fp_tmp);
+ continue;
+ }
}
- show_sarg(fp_ou, ".");
- sprintf(html,"<tr><th class=\"title\">%s</th></tr>\n",Title);
- fputs(html,fp_ou);
- fputs("</table></center>\n",fp_ou);
-
- fputs("<center><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_ou);
- fputs("<tr><td></td><td></td></tr>\n",fp_ou);
-
- sprintf(html,"<tr><th %s>%s</th><th %s>%s</th><th %s>%s \
- </th><th %s>%s</th><th %s>%s</th></tr>\n", \
- hbc1,text[101],hbc1,text[102],hbc1,text[103],hbc1,text[93],hbc1,text[96]);
- fputs(html,fp_ou);
-
- if((fp_tmp=fopen(wdir_tmp2,"r"))==NULL) {
- fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir_tmp2);
- exit(1);
+ if(fp_tmp) fclose(fp_tmp);
+ if(strcmp(IndexTree,"file") == 0) {
+ (void)rewinddir( dirp );
+ (void)closedir( dirp );
}
- while(fgets(buf,MAXLEN,fp_tmp)!=NULL) {
- getword(period,buf,';');
- getword(period,buf,';');
- getword(data,buf,';');
- getword(tuser,buf,';');
- getword(tbytes,buf,';');
- getword(media,buf,';');
-
- sprintf(html,"<tr><td class=\"data2\"><a href='%s/%s'>%s</a></td><td class=\"data2\">%s</td> \
- <td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td></tr>\n", \
- period,ReplaceIndex,period,data,tuser,tbytes,media);
+ if(strcmp(IndexTree,"date") == 0) {
+ if(strcmp(IndexSortOrder,"A") == 0)
+ sprintf(warea,"sort -k 1,1 '%s' -o '%s'", wdir_tmp, wdir_tmp2);
+ else
+ sprintf(warea,"sort -r -k 1,1 '%s' -o '%s'", wdir_tmp, wdir_tmp2);
+ system(warea);
+ unlink(wdir_tmp);
+ if((fp_tmp=fopen(wdir_tmp2,"r"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir_tmp2);
+ exit(1);
+ }
+ if((fp_ou=fopen(wdir,"w"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir);
+ exit(1);
+ }
+ write_html_header(fp_ou, ".");
+ sprintf(html,"<tr><th %s>%s</th><th %s>%s</th></tr>\n",hbc1,text[130],hbc1,text[132]);
fputs(html,fp_ou);
+ while(fgets(wwork1,MAXLEN,fp_tmp)!=NULL) {
+ getword(tmp4,wwork1,' ');
+ sprintf(html,"<tr><td class=\"data2\"><a href=\"%s\">%s</a></td><td class=\"data2\">%s</td></tr>\n",tmp4,tmp4,wwork1);
+ fputs(html,fp_ou);
+ sprintf(tmp2,"%s%s",outdir,tmp4);
+ sprintf(tmp3,"%s%s/index.unsort",outdir,tmp4);
+ // Year dir
+ if((fp_ou2=fopen(tmp3,"w"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],tmp3);
+ exit(1);
+ }
+ dirp2 = opendir(tmp2);
+ while ((direntp2 = readdir( dirp2 )) != NULL) {
+ if(!isdigit(direntp2->d_name[0]) && !isdigit(direntp2->d_name[1]))
+ continue;
+ sprintf(warea,"%s\n",direntp2->d_name);
+ fputs(warea,fp_ou2);
+ }
+ if(fp_ou2) fclose(fp_ou2);
+ (void)rewinddir(dirp2);
+ (void)closedir(dirp2);
+ sprintf(wdir_tmp3,"%s%s/index.sort",outdir,tmp4);
+ if(strcmp(IndexSortOrder,"A") == 0)
+ sprintf(csort,"sort -n '%s' -o '%s'", tmp3, wdir_tmp3);
+ else
+ sprintf(csort,"sort -n -r '%s' -o '%s'", tmp3, wdir_tmp3);
+ system(csort);
+ unlink(tmp3);
+ if((fp_tmp2=fopen(wdir_tmp3,"r"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir_tmp3);
+ exit(1);
+ }
+ sprintf(tmp3,"%s%s/index.html",outdir,tmp4);
+ if((fp_ou2=fopen(tmp3,"w"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir);
+ exit(1);
+ }
+ write_html_header(fp_ou2,"..");
+ sprintf(html,"<tr><th %s>%s/%s</th></tr>\n",hbc1,text[130],text[131]);
+ fputs(html,fp_ou2);
+ while(fgets(wwork1,MAXLEN,fp_tmp2)!=NULL) {
+ wwork1[strlen(wwork1)-1]='\0';
+ strcpy(tmp5,wwork1);
+ if(strstr(tmp5,"-") != 0) {
+ getword(warea,tmp5,'-');
+ name_month(warea);
+ sprintf(tmp6,"%s-",warea);
+ name_month(tmp5);
+ sprintf(nmonth,"%s%s",tmp6,tmp5);
+ } else {
+ strcpy(nmonth,tmp5);
+ name_month(nmonth);
+ }
+ sprintf(html,"<tr><td class=\"data2\"><a href=\"%s\">%s %s</a></td></tr>\n",wwork1,tmp4,nmonth);
+ fputs(html,fp_ou2);
+
+ sprintf(val1,"%s%s/%s",outdir,tmp4,wwork1);
+ sprintf(tmp5,"%s%s/%s/index.unsort",outdir,tmp4,wwork1);
+ if((fp_ou3=fopen(tmp5,"w"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],tmp5);
+ exit(1);
+ }
+ // month dir
+ dirp3 = opendir(val1);
+ while ((direntp3 = readdir( dirp3 )) != NULL) {
+ if(!isdigit(direntp3->d_name[0]) && !isdigit(direntp3->d_name[1]))
+ continue;
+ sprintf(warea,"%s\n",direntp3->d_name);
+ fputs(warea,fp_ou3);
+
+ }
+ if(fp_ou3) fclose(fp_ou3);
+ (void)rewinddir(dirp3);
+ (void)closedir(dirp3);
+ unlink(wdir_tmp3);
+ sprintf(tmp6,"%s%s/%s/index.sort",outdir,tmp4,wwork1);
+ if(strcmp(IndexSortOrder,"A") == 0)
+ sprintf(csort,"sort -n '%s' -o '%s'", tmp5, tmp6);
+ else
+ sprintf(csort,"sort -n -r '%s' -o '%s'", tmp5, tmp6);
+ system(csort);
+ unlink(tmp5);
+ sprintf(val2,"%s%s/%s/index.html",outdir,tmp4,wwork1);
+ sprintf(val3,"%s/%s",tmp4,wwork1);
+ unlink(val2);
+ if((fp_ou3=fopen(val2,"w"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],val2);
+ exit(1);
+ }
+ if((fp_tmp3=fopen(tmp6,"r"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],tmp6);
+ exit(1);
+ }
+ write_html_header(fp_ou3,"../..");
+ sprintf(html,"<tr><th %s>%s/%s/%s</th></tr>\n",hbc1,text[130],text[131],text[127]);
+ fputs(html,fp_ou3);
+ while(fgets(warea,MAXLEN,fp_tmp3)!=NULL) {
+ warea[strlen(warea)-1]='\0';
+ sprintf(html,"<tr><td class=\"data2\"><a href=\"%s\">%s %s %s</a></td></tr>\n",warea,tmp4,nmonth,warea);
+ fputs(html,fp_ou3);
+ }
+ if(fp_tmp3) fclose(fp_tmp3);
+ if(fp_ou3) fclose(fp_ou3);
+ write_html_trailer(fp_ou3);
+ unlink(tmp6);
+ }
+ write_html_trailer(fp_ou2);
+ if(fp_ou2) fclose(fp_ou2);
+ }
+ (void)rewinddir(dirp);
+ (void)closedir(dirp);
+ write_html_trailer(fp_ou);
+ if(fp_ou) fclose(fp_ou);
+ if(fp_tmp) fclose(fp_tmp);
+ unlink(tmp6);
+ unlink(wdir_tmp2);
+ } else {
+ if(strcmp(IndexSortOrder,"A") == 0)
+ sprintf(warea,"sort -t';' +6.5n +6.2M +6.0n '%s' -o '%s'", wdir_tmp, wdir_tmp2);
+ else
+ sprintf(warea,"sort -t';' +6.5nr +6.2Mr +6.0nr '%s' -o '%s'", wdir_tmp, wdir_tmp2);
+ system(warea);
+ unlink(wdir_tmp);
+ if((fp_ou=fopen(wdir,"w"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir);
+ exit(1);
+ }
+ write_html_header(fp_ou,".");
+ sprintf(html,"<tr><th %s>%s</th><th %s>%s</th><th %s>%s</th><th %s>%s</th><th %s>%s</th></tr>\n",hbc1,text[101],hbc1,text[102],hbc1,text[103],hbc1,text[93],hbc1,text[96]);
+ fputs(html,fp_ou);
+ if((fp_tmp2=fopen(wdir_tmp2,"r"))==NULL) {
+ fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir_tmp2);
+ exit(1);
+ }
+ while(fgets(buf,MAXLEN,fp_tmp2)!=NULL) {
+ getword(period,buf,';');
+ getword(period,buf,';');
+ getword(data,buf,';');
+ getword(tuser,buf,';');
+ getword(tbytes,buf,';');
+ getword(media,buf,';');
+ sprintf(html,"<tr><td class=\"data2\"><a href='%s/%s'>%s</a></td><td class=\"data2\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td><td class=\"data\">%s</td></tr>\n",period,ReplaceIndex,period,data,tuser,tbytes,media);
+ fputs(html,fp_ou);
+ }
+ if(fp_tmp2) fclose(fp_tmp2);
+ unlink(wdir_tmp2);
}
-
+
strcpy(html,"</table></center>");
fputs(html,fp_ou);
strcpy(html,"</body>\n</html>\n");
fputs(html,fp_ou);
- fclose(fp_ou);
- fclose(fp_tmp);
-
- unlink(wdir_tmp2);
return;
}
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"ËçöèÝíôá áñ÷åßá"\r
"Ãñáöéêü"\r
"ÇìÝñåò"\r
-"ÇìÝñåò"
\ No newline at end of file
+"ÇìÝñåò""YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DIAS"
"DansGuardian"
"CAUSA"
+"ANO"
+"MÊS"
+"TAMANHO"
+"Janeiro,Fevereiro,Marco,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro"
+"Realtime"
+"TIPO"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
--- /dev/null
+# by Alex Deiter <tiamat@komi.mts.ru>
+"Да"
+"Нет"
+"Russian"
+"Параметры"
+"требуется аргумент"
+"Инициализация"
+"Чтение файла журнала"
+"Не могу открыть файл журнала"
+"Не могу открыть временный файл"
+"Записей прочитано"
+"записано"
+"Журнал содержит записи разных форматов (squid и др.)"
+"Журнал другого формата"
+"Журнал в Squid-формате"
+"Журнал в неверном формате"
+"Записи не найдены"
+"Период"
+"используется"
+"как временный каталог"
+"Сортировка файлов"
+"Завершено"
+"Параметры"
+"Имя или IP-адрес"
+"Дата от-до"
+"Формат даты"
+"Европа"
+"Америка"
+"IP отчет"
+"Использовать Ip-адрес вместо имени пользователя"
+"Адреса"
+"Время"
+"Имя"
+"Версия Squid"
+"Временный каталог"
+"Отладочные сообщения"
+"Рабочие сообщения"
+"Входящий журнал"
+"Выходной каталог"
+"Использовано"
+"параметры"
+"E-mail адрес для посылки отчета"
+"ст.вывод на консоль"
+"Отчет по пользователям и IP-адресам"
+"отчеты"
+"Не могу открыть файл"
+"ЗАПРЕТ"
+"Отчет успешно сгенерирован в:"
+"Отчет успешно сгенерирован и отослан"
+"Создание файла"
+"Создание файла периода"
+"Файл"
+"уже существует, перенесен в"
+"Создание index.html"
+"Сортировка файлов"
+"Отчет"
+"Squid не установлен на этой машине"
+"Пожалуйста, используйте параметр -v для задания версии Squid"
+"Загрузка конфигурации из"
+"ошибка malloc"
+"Загрузка файла паролей из"
+"Создание отчета"
+"Распаковка файла журнала"
+"Сжатие файла журнала"
+"Файл не найден"
+"Определение IP-адреса"
+"Чтение журнала броузеров"
+"Загрузка исключений из"
+"исключены"
+"Файл исключений"
+"Файл конфигурации"
+"Журнал броузеров"
+"Создание отчета по броузерам"
+"версия"
+"лимит превышен"
+"Добавлено в файл"
+"Ковертируйте файл access.log, чтобы дата была понятной"
+"Разделите log файл по дате, используя параметр -d"
+"по"
+"в обратном порядке"
+"в обычном порядке"
+"Удаляю старый файл отчета"
+"Удаляю временные файлы"
+"Топ"
+"Сайты"
+"Сайты и Пользователи"
+"Загружаю таблицу пользователя"
+"Не могу загрузить. Ошибка памяти"
+"Отчет о работе пользователей через Squid"
+"Период"
+"Пользователь"
+"Адреса"
+"Подключений"
+"Байт"
+"Общее время"
+"Миллисек."
+"Средняя"
+"По убыванию (байты)"
+"Пользователь"
+"Время"
+"No"
+"Период"
+"Дата создания"
+"Пользователей"
+"Отсортировано"
+"Отчет Squid по броузерам"
+"Броузер"
+"Всего"
+"Сгенерирован"
+"на"
+"Дата/Время"
+"IP/Имя"
+"OUT"
+"IN"
+"CACHE"
+"SitesUsers"
+"SmartFilter"
+"Authentication Failures"
+"Denied"
+"Topsites"
+"SQUIDGUARD"
+"RULE"
+"squidGuard"
+"Sarg parsed log saved as"
+"Sarg log format"
+"Downloads"
+"Graphic"
+"DAYS"
+"DansGuardian"
+"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DansGuardian"
"DAYS"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DIAS"
"DansGuardian"
"CAUSA"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
"DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
"DAYS"
DansGuardian"
"CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
local = localtime(&t);
strftime(ftime, 127, "%Y%m%d%H%M%S", local);
sprintf(buf,"%s %s\n",ftime,direntp->d_name);
+printf("BUF=%s\n",buf);
fputs(buf,fp_ou);
ftot++;
}
+exit(0);
(void)rewinddir( dirp );
(void)closedir( dirp );
BlockIt[0]='\0';
ExternalCSSFile[0]='\0';
SquidGuardLogFormat[0]='\0';
+ SquidGuardLogAlternate[0]='\0';
strcpy(AccessLog,"/usr/local/squid/var/logs/access.log");
sprintf(ExcludeCodes,"%s/exclude_codes",SYSCONFDIR);
strcpy(GraphDaysBytesBarColor,"orange");
- strcpy(BgColor,"#FFFFFF");
+ strcpy(BgColor,"#ffffff");
strcpy(TxColor,"#000000");
strcpy(TxBgColor,"lavender");
strcpy(TiColor,"darkblue");
strcpy(Height,"45");
strcpy(LogoTextColor,"#000000");
strcpy(HeaderColor,"darkblue");
- strcpy(HeaderBgColor,"#DDDDDD");
+ strcpy(HeaderBgColor,"#dddddd");
strcpy(LogoTextColor,"#006699");
strcpy(FontSize,"9px");
strcpy(TempDir,"/tmp");
strcpy(Graphs,"yes");
strcpy(Ulimit,"20000");
strcpy(NtlmUserFormat,"domainname+username");
+ strcpy(IndexTree,"file");
+ strcpy(RealtimeTypes,"GET,PUT,CONNECT");
+ strcpy(RealtimeUnauthRec,"ignore");
+ strcpy(SquidguardIgnoreDate,"off");
+ strcpy(DansguardianIgnoreDate,"off");
+ strcpy(DataFileUrl,"ip");
dia[0]='\0';
mes[0]='\0';
color3=0;
sarglog=0;
isalog=0;
+ dotinuser=0;
+ realt=0;
+ realtime_refresh=3;
+ realtime_access_log_lines=1000;
+ cost=0.01;
+ nocost=50000000;
bzero(IncludeUsers, MAXLEN);
bzero(ExcludeString, MAXLEN);
language_load(language);
strcpy(Title,text[88]);
- while((ch = getopt(argc, argv, "a:b:c:d:e:f:g:u:l:o:r:s:t:w:hijmnpvxyz")) != -1){
+ while((ch = getopt(argc, argv, "a:b:c:d:e:f:g:u:l:L:o:s:t:w:hijmnprvxyz")) != -1){
switch(ch)
{
case 'a':
strcpy(warq[narq],optarg);
narq++;
break;
+ case 'L':
+ strcpy(SquidGuardLogAlternate,optarg);
+ break;
case 'm':
debugm++;
break;
case 'p':
userip++;
break;
+ case 'r':
+ realt++;
+ break;
case 's':
strcpy(site,optarg);
break;
if(access(ConfigFile, R_OK) == 0)
getconf(debugm, ConfigFile, AccessLog, debug, BgColor, TxColor, TxBgColor, TiColor, LogoImage, LogoText, LogoTextColor, Width, Height, Title, BgImage, FontFace, HeaderColor, HeaderBgColor, FontSize, PasswdFile, TempDir, OutputDir, OutputEmail, Ip2Name, TopuserSortField, UserSortField, TopuserSortOrder, UserSortOrder, UserAgentLog, ExcludeHosts, DateFormat, ExcludeUsers, PerUserLimitFile, PerUserLimit, UserIp, MaxElapsed);
+
+ if(realt) {
+ realtime();
+ exit(0);
+ }
if(debugz) {
fprintf(stderr, "SARG: ConfigFile.........= %s\n",ConfigFile);
fprintf(stderr, "SARG:\n");
}
+ if(strcmp(IndexTree,"file") == 0)
+ strcpy(ImageFile,"../images");
+ else
+ strcpy(ImageFile,"../../../images");
+
dataonly=0;
if(DataFile[0] != '\0');
dataonly++;
}
if(ReportType[0] == '\0')
- strcpy(ReportType,"topsites users_sites sites_users date_time denied auth_failures site_user_time_date");
+ strcpy(ReportType,"topusers topsites users_sites sites_users date_time denied auth_failures site_user_time_date downloads");
if(access(ExcludeUsers, R_OK) == 0) {
getuexclude(ExcludeUsers,debug);
}
strcpy(tmp2,tmp);
- strcpy(tmp4,tmp);
- strcpy(tmp5,tmp);
- strcpy(tmp6,tmp);
if(strlen(email) > 0) {
sprintf(wtemp2,"%s/sarg_tmp",tmp2);
sprintf(tmp3,"%s/sarg",tmp);
my_mkdir(tmp3);
+ strcpy(tmp4,tmp3);
+ strcpy(tmp5,tmp3);
+ strcpy(tmp6,tmp3);
strcat(tmp4,"/denied.log.unsort");
strcat(tmp5,"/denied.log");
strcat(tmp6,"/authfail.log.unsort");
if(!common) {
getword(elap,bufz,' ');
- bzero(elap, 255);
while(strcmp(elap,"") == 0 && strlen(bufz) > 0)
getword(elap,bufz,' ');
if(strlen(elap) < 1) continue;
sprintf(user,"%s.%s",w,wuser);
}
- dotinuser=0;
str=user;
for(z1=0; z1<strlen(str); z1++) {
if(isalnum(str[z1]) || ispunct(str[z1])) {
if (strchr(url,'/')) {
getword(w,url,'/');
getword(w,url,'/');
+ if (!strchr(url,'/')) {
+ totregsx++;
+ continue;
+ }
}
if(strcmp(LongUrl,"no") == 0) {
getword(w,url,'/');
strcpy(url,w);
+ if(strlen(url) > 512 && strstr(url,"%") != 0) {
+ getword(w,url,'%');
+ strcpy(url,w);
+ }
}
if(!sarglog) {
strftime(tbuf, 127, "%Y%b%d", t);
if(strncmp(df,"e",1) == 0)
strftime(tbuf, 127, "%d%b%Y", t);
- if(strncmp(df,"w",1) == 0)
+ if(strncmp(df,"w",1) == 0) {
+ strcpy(IndexTree,"file");
strftime(tbuf, 127, "%Y.%U", t);
+ }
strftime(dia, 127, "%d/%m/%Y", t);
strftime(wdata, 127, "%Y%m%d", t);
if(puser) {
sprintf(wuser,":%s:",user);
+ if(dotinuser && strstr(wuser,"_")) {
+ str2=(char *)subs(wuser,"_",".");
+ strcpy(wuser,str2);
+ }
if(strstr(userfile, wuser) == 0)
continue;
}
debuga(msg);
}
}
-
- sort_users_log(tmp, debug);
if(strstr(ReportType,"denied") != 0) {
sprintf(csort,"sort -T %s -k 3,3 -k 5,5 -o '%s' '%s'",tmp,tmp5,tmp4);
system(csort);
unlink(tmp4);
}
+
+ sort_users_log(tmp, debug);
report_gen:
if(strlen(DataFile) > 0)
sprintf(csort,"rm -rf %s",tmp);
system(csort);
+ if(excludecode)
+ free(excludecode);
+ if(userfile)
+ free(userfile);
+ if(excludefile)
+ free(excludefile);
+ if(excludeuser)
+ free(excludeuser);
+
exit(0);
}
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou,"../..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou, "../../../..");
+ else
+ show_sarg(fp_ou, "../..");
+
fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ou);
sprintf(html,"<tr><th class=\"title\" colspan=2>%s</th></tr>\n",Title);
fputs(html,fp_ou);
continue;
if(strncmp(direntp->d_name,"download.log",12) == 0)
continue;
+ if(strncmp(direntp->d_name,"denied.log",10) == 0)
+ continue;
+ if(strncmp(direntp->d_name,"authfail.log.unsort",19) == 0)
+ continue;
sprintf(tmp3,"%s/%s",tmp,direntp->d_name);
if((fp_in=fopen(tmp3,"r"))==NULL){
fprintf(stderr, "SARG: (report) %s: %s\n",text[45],tmp);
fputs("</table>\n",fp_tt);
}
- show_sarg(fp_tt, "../..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_tt, "../../../..");
+ else
+ show_sarg(fp_tt, "../..");
sprintf(html,"<tr><th class=\"title\" colspan=\"2\">%s</th></tr>\n",Title);
fputs(html,fp_tt);
totalger(wdirname, debug, outdir);
if(strlen(email) == 0) {
- download_report();
+ if(strstr(ReportType,"downloads") != 0)
+ download_report();
if(strlen(DansGuardianConf) > 0) {
strcpy(wdirname,dirname);
dansguardian_log();
}
- if(strlen(SquidGuardConf) > 0) {
- strcpy(wdirname,dirname);
- squidguard_log();
- }
+ strcpy(wdirname,dirname);
+ squidguard_log();
strcpy(wdirname,dirname);
topuser();
if(strlen(DansGuardianConf) > 0)
dansguardian_report();
- if(strlen(SquidGuardConf) > 0)
- squidguard_report();
+ squidguard_report();
if(strstr(ReportType,"users_sites") != 0)
htmlrel();
- geraindex();
+ make_index();
if(strncmp(SuccessfulMsg,"yes",3) == 0)
fprintf(stderr, "SARG: %s %s\n",text[47],dirname);
--- /dev/null
+<?php
+
+system("sarg -r");
+
+?>
# Portuguese
# Romanian
# Russian_koi8
+# Russian_UFT-8
# Russian_windows1251
# Serbian
# Slovak
#background_image none
# TAG: password
-# User password file used by authentication
-# If used here, reports will be generated only for that users.
+# User password file used by Squid authentication scheme
+# If used, generate reports just for that users.
#
#password none
#exclude_hosts none
# TAG: useragent_log file
-# Put here where is useragent.log to nable useragent report.
+# useragent.log file patch to generate useragent report.
#
#useragent_log none
#
#index yes
+# TAG: index_tree date|file
+# How to generate the index.
+#
+#index_tree file
+
# TAG: overwrite_report yes|no
# yes - if report date already exist then will be overwrited.
# no - if report date already exist then will be renamed to filename.n, filename.n+1
# TAG: report_type type
# What kind of reports to generate.
-# topsites - shows the site, connect and bytes
-# sites_users - shows which users were accessing a site
-# users_sites - shows sites accessed by the user
-# date_time - shows the amount of bytes used by day and hour
-# denied - shows all denied sites with full URL
-# auth_failures - shows autentication failures
-# site_user_time_date - shows sites, dates, times and bytes
+# topusers - users, sites, times, bytes, connects, links to accessed sites, etc
+# topsites - site, connect and bytes report
+# sites_users - users and sites report
+# users_sites - accessed sites by the user report
+# date_time - bytes used per day and hour report
+# denied - denied sites with full URL report
+# auth_failures - autentication failures report
+# site_user_time_date - sites, dates, times and bytes report
+# downloads - downloads per user report
#
# Eg.: report_type topsites denied
#
-#report_type topsites sites_users users_sites date_time denied auth_failures site_user_time_date
+#report_type topusers topsites sites_users users_sites date_time denied auth_failures site_user_time_date downloads
# TAG: usertab filename
# You can change the "userid" or the "ip address" to be a real user name on the reports.
# Save the report results in a file to populate some database
#
#datafile none
-#datafile /tmp/p8
# TAG: datafile_delimiter ";"
# ascii character to use as a field separator in datafile
#
#datafile_fields user;date;time;url;connect;bytes;in_cache;out_cache;elapsed
+# TAG: datafile_url ip|name
+# Saves the URL as ip or name in datafile
+#
+#datafile ip
+
# TAG: weekdays
# The weekdays to take account ( Sunday->0, Saturday->6 )
# Example:
#
#dansguardian_conf none
+# TAG: dansguardian_ignore_date on|off
+# Use 'on' use the record even the date range is different from the used squid access.log file.
+# Use 'off' use the record only if the date range is in the used squid access.log file.
+#
+#dansguardian_ignore_date off
+
# TAG: squidguard_conf file
# path to squidGuard.conf file
# Generate reports from SquidGuard logs.
# Use 'none' to disable.
+# You can use sarg -L filename to use an alternate squidGuard log.
# squidguard_conf /usr/local/squidGuard/squidGuard.conf
#
#squidguard_conf none
+# TAG: squidguard_ignore_date on|off
+# Use 'on' use the record even the date range is different from the used squid access.log file.
+# Use 'off' use the record only if the date range is in the used squid access.log file.
+#
+#squidguard_ignore_date off
+
# TAG: squidguard_log_format
# Format string SquidGuard logs.
# REJIK #year#-#mon#-#day# #hour# #list#:#tmp# #ip# #user# #tmp#/#tmp#/#url#/#end#
#
#parsed_output_log none
-# TAG parsed_output_log_compress /bin/gzip|/usr/bin/bzip2|nocompress
+# TAG: parsed_output_log_compress /bin/gzip|/usr/bin/bzip2|nocompress
# sarg logs compress util
#
#parsed_output_log_compress /bin/gzip
-# TAG displayed_values bytes|abbreviation
+# TAG: displayed_values bytes|abbreviation
# how the values will be displayed in reports.
# eg. bytes - 209.526
# abbreviation - 210K
#displayed_values bytes
# Report limits
-# TAG authfail_report_limit n
-# TAG denied_report_limit n
-# TAG siteusers_report_limit n
-# TAG squidguard_report_limit n
-# TAG user_report_limit n
-# TAG dansguardian_report_limit n
-# TAG download_report_limit n
+# TAG: authfail_report_limit n
+# TAG: denied_report_limit n
+# TAG: siteusers_report_limit n
+# TAG: squidguard_report_limit n
+# TAG: user_report_limit n
+# TAG: dansguardian_report_limit n
+# TAG: download_report_limit n
# report limits (lines).
# '0' no limit
#
#user_report_limit 10
#user_report_limit 50
-# TAG www_document_root dir
+# TAG: www_document_root dir
# Where is your Web DocumentRoot
# Sarg will create sarg-php directory with some PHP modules:
# - sarg-squidguard-block.php - add urls from user reports to squidGuard DB
#
#www_document_root /var/www/html
-# TAG block_it module_url
+# TAG: block_it module_url
# This tag allow you to pass urls from user reports to a cgi or php module,
# to be blocked by some Squid acl
#
#
#block_it none
-# TAG external_css_file path
+# TAG: external_css_file path
# This tag allow internal sarg css override.
# Sarg use theses style classes:
# .body body class
#
#external_css_file none
-# TAG user_authentication yes|no
+# TAG: user_authentication yes|no
# Allow user authentication in User Reports using .htaccess
# Parameters:
# AuthUserFile - where the user password file is
# AuthType Basic
# Require user admin %u
-# TAG download_suffix "suffix,suffix,...,suffix"
+# TAG: download_suffix "suffix,suffix,...,suffix"
# file suffix to be considered as "download" in Download report.
# Use 'none' to disable.
#
#download_suffix "zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,mdb,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg"
-# ulimit n
+# TAG: ulimit n
# The maximum number of open file descriptors to avoid "Too many open files" error message.
# You need to run sarg as root to use ulimit tag.
#
#ulimit 20000
-# TAG: ntlm_user_format username|domainname+username
-# NTLM users format.
+# TAG: ntlm_user_format username|domainname+username
+# NTLM users format.
#
#ntlm_user_format domainname+username
+
+# TAG: realtime_refresh_time num sec
+# How many time to auto refresh the realtime report
+# 0 = disable
+#
+# realtime_refresh_time 3
+
+# TAG: realtime_access_log_lines num
+# How many last lines to get from access.log file
+#
+# realtime_access_log_lines 1000
+
+# TAG: realtime_types: GET,PUT,CONNECT,ICP_QUERY,POST
+# Which records must be in realtime report.
+#
+# realtime_types GET,PUT,CONNECT
+
+# TAG: realtime_unauthenticated_records: ignore|show
+# What to do with unauthenticated records in realtime report.
+#
+# realtime_unauthenticated_records: ignore
+
+# TAG: byte_cost value no_cost_limit
+# Cost per byte.
+# Eg. byte_cost 0.01 100000000
+# per byte cost = 0.01
+# bytes with no cost = 100 Mb
+# 0 = disable
+#
+# byte_cost 0.01 50000000
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou, "..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou, "../../..");
+ else
+ show_sarg(fp_ou, "..");
+
fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ou);
sprintf(url,"<tr><th class=\"title\">%s</th></tr>\n",Title);
fputs(url,fp_ou);
fclose(fp_in);
fclose(fp_ou);
+ if(users)
+ free(users);
+
return;
}
while ( (direntp = readdir( dirp )) != NULL ){
if(strstr(direntp->d_name,".unsort") == 0)
continue;
+ if(strcmp(direntp->d_name,"denied.log") == 0 || strcmp(direntp->d_name,"authfail.log.unsort") == 0)
+ continue;
+
strcpy(wdname,direntp->d_name);
bzero(user, MAXLEN);
#include "include/conf.h"
+void read_log(char *wentp, FILE *fp_ou)
+{
+ FILE *fp_in = NULL;
+ char bufbsf[255];
+ char leks[5], sep[2], res[MAXLEN];
+ char mon[10], hour[15];
+ char list[MAXLEN];
+ char wdata[127];
+ int idata=0;
+
+ if(debug) {
+ strcpy(buf,text[7]);
+ getword(urly,buf,' ');
+ getword(href,buf,' ');
+ sprintf(msg,"%s squidGuard %s: %s",urly,buf,wentp);
+ debuga(msg);
+ }
+
+ if ((fp_in=fopen(wentp,"r"))==NULL) {
+ fprintf(stderr, "SARG: (squidguard) %s: %s\n",text[8],wentp);
+ exit(1);
+ }
+
+ while (fgets(buf,sizeof(buf),fp_in) != NULL) {
+ if(strlen(SquidGuardLogFormat) > 0) {
+ strcpy(bufbsf,SquidGuardLogFormat);
+ leks[0]='\0';
+ getword(leks,bufbsf,'#');
+ while(strcmp(leks,"end") != 0) {
+ getword(leks,bufbsf,'#');
+ getword(sep,bufbsf,'#');
+ if(strcmp(leks,"end") != 0) {
+ getword(res,buf,sep[0]);
+ if(strcmp(leks,"year") == 0)
+ strcpy(year,res);
+ else if(strcmp(leks,"year") == 0)
+ strcpy(year,res);
+ else if(strcmp(leks,"mon") == 0)
+ strcpy(mon,res);
+ else if(strcmp(leks,"day") == 0)
+ strcpy(day,res);
+ else if(strcmp(leks,"hour") == 0)
+ strcpy(hour,res);
+ else if(strcmp(leks,"list") == 0)
+ strcpy(list,res);
+ else if(strcmp(leks,"ip") == 0)
+ strcpy(ip,res);
+ else if(strcmp(leks,"user") == 0)
+ strcpy(user,res);
+ else if(strcmp(leks,"url") == 0)
+ strcpy(url,res);
+ }
+ }
+ } else {
+ getword(year,buf,'-');
+ getword(mon,buf,'-');
+ getword(day,buf,' ');
+ getword(hour,buf,' ');
+ getword(list,buf,'/');
+ getword(list,buf,'/');
+ getword(tmp5,buf,'/');
+ getword(tmp5,buf,'/');
+ getword(url,buf,'/');
+ getword(ip,buf,' ');
+ getword(ip,buf,'/');
+ getword(user,buf,' ');
+ getword(user,buf,' ');
+ }
+
+ sprintf(warea,"%s%s%s",year,mon,day);
+ sprintf(wdata,"%s%s%s",year,mon,day);
+ idata = atoi(wdata);
+
+ if(strcmp(SquidguardIgnoreDate,"on") == 0) {
+ if(idata < dfrom && idata > duntil)
+ continue;
+ }
+
+ if (strcmp(user,"-") == 0) {
+ strcpy(user,ip);
+ bzero(ip, 30);
+ }
+ sprintf(tmp6,"%s %s%s%s %s %s %s %s\n",user,year,mon,day,hour,ip,url,list);
+ fputs(tmp6, fp_ou);
+ squidguard_count++;
+ }
+ if (fp_in) fclose(fp_in);
+ return;
+}
+
+
int squidguard_log()
{
- FILE *fp_in = NULL, *fp_ou = NULL, *fp_guard = NULL;
+ FILE *fp_ou = NULL, *fp_guard = NULL;
char guard_in[MAXLEN];
char guard_ou[MAXLEN];
char logdir[MAXLEN];
- char year[10], mon[10], day[10], hour[15];
- char list[MAXLEN];
+ char year[10], day[10], mon[10];
char user[MAXLEN];
char ip[30];
- char wdata[127];
- char bufbsf[255];
- char leks[5], sep[2], res[MAXLEN];
- int idata=0;
int x, y;
- if(strlen(SquidGuardConf) < 1)
+ if(strlen(SquidGuardConf) < 1 && strlen(SquidGuardLogAlternate) < 1)
return;
- bzero(day, 3);
- bzero(mon, 4);
- bzero(year, 5);
-
- if(strcmp(df,"e") == 0) {
- strncpy(day,periodo,2);
- strncpy(mon,periodo+2,3);
- strncpy(year,periodo+5,4);
- conv_month(mon);
- sprintf(warea,"%s%s%s",year,mon,day);
- dfrom=atoi(warea);
- strncpy(day,periodo+10,2);
- strncpy(mon,periodo+12,3);
- strncpy(year,periodo+15,4);
- conv_month(mon);
- sprintf(warea,"%s%s%s",year,mon,day);
- duntil=atoi(warea);
- } else {
- strncpy(day,periodo+7,2);
- strncpy(mon,periodo+4,3);
- strncpy(year,periodo,4);
- conv_month(mon);
- sprintf(warea,"%s%s%s",year,mon,day);
- dfrom=atoi(warea);
- strncpy(day,periodo+17,2);
- strncpy(mon,periodo+14,3);
- strncpy(year,periodo+10,4);
- conv_month(mon);
- sprintf(warea,"%s%s%s",year,mon,day);
- duntil=atoi(warea);
- }
+ if (strlen(SquidGuardLogAlternate) > 0)
+ SquidGuardConf[0]='\0';
sprintf(guard_in,"%s/squidguard.unsort",tmp);
sprintf(guard_ou,"%s/squidguard.log",tmp);
-
- if(access(SquidGuardConf, R_OK) != 0) {
- sprintf(msg,"Cannot open squidGuard config file: %s",SquidGuardConf);
- debuga(msg);
- exit(1);
- }
-
- if((fp_guard=fopen(SquidGuardConf,"r"))==NULL) {
- fprintf(stderr, "SARG: (squidguard) %s: %s\n",text[8],SquidGuardConf);
- exit(1);
- }
-
if((fp_ou=fopen(guard_in,"a"))==NULL) {
fprintf(stderr, "SARG: (squidguard) %s: %s\n",text[8],guard_in);
exit(1);
}
- while(fgets(buf,sizeof(buf),fp_guard)!=NULL) {
- if(strstr(buf,"\n") != 0)
- buf[strlen(buf)-1]='\0';
- if(strstr(buf,"logdir ") != 0) {
- getword(logdir,buf,' ');
- getword(logdir,buf,' ');
+ bzero(day, 3);
+ bzero(mon, 4);
+ bzero(year, 5);
+
+ if(strcmp(SquidguardIgnoreDate,"on") == 0) {
+ if(strcmp(df,"e") == 0) {
+ strncpy(day,periodo,2);
+ strncpy(mon,periodo+2,3);
+ strncpy(year,periodo+5,4);
+ conv_month(mon);
+ sprintf(warea,"%s%s%s",year,mon,day);
+ dfrom=atoi(warea);
+ strncpy(day,periodo+10,2);
+ strncpy(mon,periodo+12,3);
+ strncpy(year,periodo+15,4);
+ conv_month(mon);
+ sprintf(warea,"%s%s%s",year,mon,day);
+ duntil=atoi(warea);
+ } else {
+ strncpy(day,periodo+7,2);
+ strncpy(mon,periodo+4,3);
+ strncpy(year,periodo,4);
+ conv_month(mon);
+ sprintf(warea,"%s%s%s",year,mon,day);
+ dfrom=atoi(warea);
+ strncpy(day,periodo+17,2);
+ strncpy(mon,periodo+14,3);
+ strncpy(year,periodo+10,4);
+ conv_month(mon);
+ sprintf(warea,"%s%s%s",year,mon,day);
+ duntil=atoi(warea);
}
- if((str=(char *) strstr(buf, "log")) != (char *) NULL ) {
- str=str+3;
- str2[0]='\0';
- y=0;
- for (x=0; x<=strlen(str); x++) {
- if (str[x] != ' ' && str[x] != '\t') {
- str2[y] = str[x];
- y++;
- }
- }
-
- sprintf(wentp,"%s/%s",logdir,str2);
+ }
- if(debug) {
- strcpy(buf,text[7]);
+ if(strlen(SquidGuardConf) > 0) {
+ if(access(SquidGuardConf, R_OK) != 0) {
+ sprintf(msg,"Cannot open squidGuard config file: %s",SquidGuardConf);
+ debuga(msg);
+ exit(1);
+ }
- getword(urly,buf,' ');
- getword(href,buf,' ');
- sprintf(msg,"%s squidGuard %s: %s",urly,buf,wentp);
- debuga(msg);
- }
+ if((fp_guard=fopen(SquidGuardConf,"r"))==NULL) {
+ fprintf(stderr, "SARG: (squidguard) %s: %s\n",text[8],SquidGuardConf);
+ exit(1);
+ }
- if((fp_in=fopen(wentp,"r"))==NULL) {
- fprintf(stderr, "SARG: (squidguard) %s: %s\n",text[8],wentp);
- exit(1);
+ while(fgets(buf,sizeof(buf),fp_guard)!=NULL) {
+ if(strstr(buf,"\n") != 0)
+ buf[strlen(buf)-1]='\0';
+ if(strstr(buf,"logdir ") != 0) {
+ getword(logdir,buf,' ');
+ getword(logdir,buf,' ');
}
-
- while(fgets(buf,sizeof(buf),fp_in) != NULL) {
-
- if(strlen(SquidGuardLogFormat) > 0) {
- strcpy(bufbsf,SquidGuardLogFormat);
- leks[0]='\0';
- getword(leks,bufbsf,'#');
- while(strcmp(leks,"end") != 0) {
- getword(leks,bufbsf,'#');
- getword(sep,bufbsf,'#');
- if(strcmp(leks,"end") != 0) {
- getword(res,buf,sep[0]);
- if(strcmp(leks,"year") == 0)
- strcpy(year,res);
- else if(strcmp(leks,"year") == 0)
- strcpy(year,res);
- else if(strcmp(leks,"mon") == 0)
- strcpy(mon,res);
- else if(strcmp(leks,"day") == 0)
- strcpy(day,res);
- else if(strcmp(leks,"hour") == 0)
- strcpy(hour,res);
- else if(strcmp(leks,"list") == 0)
- strcpy(list,res);
- else if(strcmp(leks,"ip") == 0)
- strcpy(ip,res);
- else if(strcmp(leks,"user") == 0)
- strcpy(user,res);
- else if(strcmp(leks,"url") == 0)
- strcpy(url,res);
- }
+ if((str=(char *) strstr(buf, "log")) != (char *) NULL ) {
+ str=str+3;
+ str2[0]='\0';
+ y=0;
+ for (x=0; x<=strlen(str); x++) {
+ if (str[x] != ' ' && str[x] != '\t') {
+ str2[y] = str[x];
+ y++;
}
}
-
- sprintf(warea,"%s%s%s",year,mon,day);
- sprintf(wdata,"%s%s%s",year,mon,day);
- idata = atoi(wdata);
-
- if(idata >= dfrom && idata <= duntil) {
- if(strcmp(user,"-") == 0) {
- strcpy(user,ip);
- bzero(ip, 30);
- }
- sprintf(tmp6,"%s %s%s%s %s %s %s %s\n",user,year,mon,day,hour,ip,url,list);
- fputs(tmp6, fp_ou);
- squidguard_count++;
- }
+ sprintf(wentp,"%s/%s",logdir,str2);
+ read_log(wentp,fp_ou);
}
- fclose(fp_in);
}
+ } else {
+ sprintf(wentp,"%s",SquidGuardLogAlternate);
+ read_log(wentp,fp_ou);
+ }
+
+ if (fp_guard) fclose(fp_guard);
+ if (fp_ou) fclose(fp_ou);
+
+ if(debug) {
+ sprintf(msg,"%s: %s",text[54],guard_ou);
+ debuga(msg);
}
- fclose(fp_guard);
- fclose(fp_ou);
sprintf(tmp6,"sort -k 1,1 -k 2,2 -k 4,4 '%s' -o '%s'",guard_in, guard_ou);
system(tmp6);
+
unlink(guard_in);
return;
}
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou,"..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou, "../../..");
+ else
+ show_sarg(fp_ou,"..");
fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ou);
sprintf(url,"<tr><th class=\"title\">%s</th></tr>\n",Title);
fputs(url,fp_ou);
sprintf(geral2,"%s/geral2",dirname);
sprintf(geral3,"%s/geral3",dirname);
sprintf(per,"%s/periodo",dirname);
- sprintf(report,"%s/topsites.html",dirname);
+
+ if (strstr(ReportType,"topusers") == 0)
+ sprintf(report,"%s/index.html",dirname);
+ else
+ sprintf(report,"%s/topsites.html",dirname);
if ((fp_in = fopen(per, "r")) == 0) {
fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],per);
fputs("</table>\n",fp_ou);
}
- show_sarg(fp_ou,"..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ou,"../../..");
+ else
+ show_sarg(fp_ou, "..");
+
fputs("<center><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
sprintf(url,"<tr><th class=\"title\">%s</th></tr>\n",Title);
fputs(url,fp_ou);
int topuser()
{
- FILE *fp_in, *fp_ou, *fp_top1, *fp_top2, *fp_top3;
+ FILE *fp_in = NULL, *fp_ou = NULL, *fp_top1 = NULL, *fp_top2 = NULL, *fp_top3 = NULL;
long long int ttnbytes=0, ttnacc=0, tnacc=0;
long long int tnbytes=0, ttnelap=0, tnelap=0;
long long int tnincache=0, tnoucache=0, ttnincache=0, ttnoucache=0;
char ipantes[MAXLEN], nameantes[MAXLEN];
char sfield[10]="2,2";
char order[255]="-r";
- char wheader[512];
+ char wheader[512]="";
char ftime[128];
int totuser=0;
int topcount=0;
strcat(wger,"/geral");
strcat(top1,"/top");
strcat(top2,"/top.tmp");
- strcat(tusr,"/usuarios");
+ strcat(tusr,"/users");
strcat(top3,"/index.html");
if((fp_in=fopen(wger,"r"))==NULL) {
my_lltoa(ttnincache,val4,15);
my_lltoa(ttnoucache,val5,15);
sprintf(preg,"TOTAL %s %s %s %s %s\n",val1,val2,val3,val4,val5);
- fclose(fp_in);
- fclose(fp_top2);
+ if (fp_in) fclose(fp_in);
+ if (fp_top2) fclose(fp_top2);
strup(TopuserSortField);
strlow(TopuserSortOrder);
fputs("</table>\n",fp_top3);
}
- show_sarg(fp_top3, "..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_top3, "../../..");
+ else
+ show_sarg(fp_top3, "..");
fputs("<center><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_top3);
sprintf(preg,"<tr><th align=\"center\" class=\"title\">%s</th></tr>\n",Title);
fputs(preg,fp_top3);
fputs(preg,fp_top3);
}
- if(download_count) {
+ if (strstr(ReportType,"downloads") != 0 && download_count) {
sprintf(preg,"<tr><td class=\"link\" colspan=11><a href=\"download.html\"><font class=\"link\">%s</font></a><font class=\"text\"> %s</font></td></tr>\n",text[125],text[55]);
fputs(preg,fp_top3);
}
- if(denied_count) {
+ if (strstr(ReportType,"denied") != 0 && denied_count) {
sprintf(preg,"<tr><td class=\"link\" colspan=11><a href=\"denied.html\"><font class=\"link\">%s</font></a><font class=\"text\"> %s</font></td></tr>\n",text[118],text[55]);
fputs(preg,fp_top3);
}
- if(authfail_count) {
+ if (strstr(ReportType,"auth_failures") != 0 && authfail_count) {
sprintf(preg,"<tr><td class=\"link\" colspan=11><a href=\"authfail.html\"><font class=\"link\">%s</font></a><font class=\"text\"> %s</font></td></tr>\n",text[117],text[55]);
fputs(preg,fp_top3);
}
strcpy(preg,"<tr><td></td></tr>\n");
fputs(preg,fp_top3);
+ if (strstr(ReportType,"topuser") == 0) {
+ fputs("</body>\n</html>\n",fp_top3);
+ if (fp_top3)
+ fclose (fp_top3);
+ return;
+ }
strcpy(val1,text[100]);
strcpy(val2,text[98]);
strcpy(val3,text[92]);
sprintf(val1,"%d",posicao);
#ifdef HAVE_GD
- sprintf(val2,"%s<img src=\"../images/graph.png\" border=\"0\" title=\"%s %s\"></a> %s<img src=\"../images/datetime.png\" border=\"0\" title=\"%s %s\">\n",href3,text[126],text[55],href2,ltext110,text[55]);
+ sprintf(val2,"%s<img src=\"%s/graph.png\" border=\"0\" title=\"%s %s\"></a> %s<img src=\"%s/datetime.png\" border=\"0\" title=\"%s %s\">\n",href3,ImageFile,text[126],text[55],href2,ImageFile,ltext110,text[55]);
#else
- sprintf(val2,"%s<img src=\"../images/datetime.png\" border=\"0\" title=\"%s %s\">\n",href2,ltext110,text[55]);
+ sprintf(val2,"%s<img src=\"%s/datetime.png\" border=\"0\" title=\"%s %s\">\n",href2,ImageFile,ltext110,text[55]);
#endif
sprintf(val3,"%3.2f%%",perc);
if(dotinuser && strstr(name,"_")) {
str2=(char *)subs(name,"_",".");
strcpy(name,str2);
+ free(str2);
}
sprintf(preg,"<tr><td %s>%s</td><td %s>%s</td><td %s>%s%s</td><td %s>%s</td><td %s>%s</td><td %s>%s</td><td %s>%s</td><td %s>%s</td><td %s>%s</td><td %s>%s<td %s>%s</td></tr>\n",hbc1,val1,hbc2,val2,hbc2,href,name,hbc3,wwork1,hbc4,wwork2,hbc5,val3,hbc6,val4,hbc7,val5,hbc8,val6,hbc9,wwork3,hbc10,val7);
while(!feof(fp_in))
{
-
tnacc+=my_atoll(nacc);
tnbytes+=my_atoll(nbytes);
telap+=my_atoll(elap);
fprintf(stderr, "%5s-convert %s\n"," ",text[76]);
fprintf(stderr, "%5s-split %s\n"," ",text[77]);
fprintf(stderr, "\n\t%s-%s %s Pedro Lineu Orso - orso@penguintech.com.br\n",PGM,VERSION,text[78]);
- fprintf(stderr, "\thttp://www.sarg-squid.org\n");
+ fprintf(stderr, "\thttp://sarg.sourceforge.net\n");
fprintf(stderr, "\n\tPease donate to the sarg project:");
fprintf(stderr, "\n\t\thttp://sarg.sourceforge.net/donations.php\n\n");
fputs("</table>\n",fp_ht);
}
- show_sarg(fp_ht,"..");
+ if(strcmp(IndexTree,"date") == 0)
+ show_sarg(fp_ht, "../../..");
+ else
+ show_sarg(fp_ht,"..");
fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ht);
sprintf(html,"<tr><th align=center colspan=2><b><font color=%s size=+1>%s</font></b></th></tr>\n",TiColor,text[105]);
fputs(html,fp_ht);
}
+void name_month(char *month)
+{
+ int x, z=atoi(month)-1;
+ char m[255];
+ char w[20];
+
+ strcpy(m,text[133]);
+
+ for(x=0; x<z; x++)
+ getword(w,m,',');
+ getword(month,m,',');
+}
+
+
void fixper(char *tbuf, char *periodo, char *duntil)
{
FILE *fp_in;
char wdir[MAXLEN];
- sprintf(wdir,"%s%s/usuarios",dirname,name);
+ sprintf(wdir,"%s%s/users",dirname,name);
if((fp_in=fopen(wdir,"r"))==NULL){
tuser[0]='\0';
return;
DIR *dirp;
struct dirent *direntp;
- sprintf(wdir,"%s",dir);
+ if(strcmp(IndexTree,"date") == 0) {
+ bzero(y1,5);
+ bzero(y2,5);
+ bzero(d1,3);
+ bzero(d2,3);
+ bzero(m1,4);
+ bzero(m2,4);
+ if(strncmp(df,"u",1) == 0) {
+ strncpy(y1,periodo,4);
+ strncpy(y2,periodo+10,4);
+ strncpy(m1,periodo+4,3);
+ strncpy(m2,periodo+14,3);
+ strncpy(d1,periodo+7,2);
+ strncpy(d2,periodo+17,2);
+ } else if(strncmp(df,"e",1) == 0) {
+ strncpy(d1,periodo+0,2);
+ strncpy(d2,periodo+10,2);
+ strncpy(m1,periodo+2,3);
+ strncpy(m2,periodo+12,3);
+ strncpy(y1,periodo+5,4);
+ strncpy(y2,periodo+15,4);
+ }
+ conv_month(m1);
+ conv_month(m2);
+
+ sprintf(wdir,"%s%s",outdir,y1);
+ if(strcmp(y1,y2) != 0) {
+ strncat(wdir,"-",1);
+ strncat(wdir,y2,strlen(y2));
+ }
+ if(access(wdir, R_OK) != 0)
+ my_mkdir(wdir);
+
+ strncat(wdir,"/",1);
+ strncat(wdir,m1,strlen(m1));
+ if(strcmp(m1,m2) != 0) {
+ strncat(wdir,"-",1);
+ strncat(wdir,m2,strlen(m2));
+ }
+ if(access(wdir, R_OK) != 0)
+ my_mkdir(wdir);
+
+ strncat(wdir,"/",1);
+ strncat(wdir,d1,strlen(d1));
+ if(strcmp(d1,d2) != 0) {
+ strncat(wdir,"-",1);
+ strncat(wdir,d2,strlen(d2));
+ }
+ } else
+ sprintf(wdir,"%s",dir);
if(strlen(us) > 0) {
strcat(wdir,"-");
if(strcmp(dirname,wdir) != 0)
strcpy(dirname,wdir);
- strcpy(dirname2,dirname);
-
- if(strcmp(OverwriteReport,"no") == 0) {
- while(num) {
- if(access(wdir,R_OK) == 0) {
- sprintf(wdir,"%s.%d",dirname,num);
- sprintf(per2,"%s.%d",per1,num);
- num++;
- count++;
- } else
- break;
- }
+ if(strcmp(IndexTree,"date") != 0) {
+ strcpy(dirname2,dirname);
+ if(strcmp(OverwriteReport,"no") == 0) {
+ while(num) {
+ if(access(wdir,R_OK) == 0) {
+ sprintf(wdir,"%s.%d",dirname,num);
+ sprintf(per2,"%s.%d",per1,num);
+ num++;
+ count++;
+ } else
+ break;
+ }
- if(count > 0) {
- if(debug)
- fprintf(stderr, "SARG: %s: %s %s %s\n",text[51],dirname2,text[52],wdir);
- rename(dirname2,wdir);
+ if(count > 0) {
+ if(debug)
+ fprintf(stderr, "SARG: %s: %s %s %s\n",text[51],dirname2,text[52],wdir);
+ rename(dirname2,wdir);
+ }
+ } else {
+ if(access(dir,R_OK) == 0) {
+ sprintf(csort,"rm -r %s",dir);
+ system(csort);
+ }
}
+ my_mkdir(dirname);
} else {
- if(access(dir,R_OK) == 0) {
- sprintf(csort,"rm -r %s",dir);
- system(csort);
+ strcpy(dirname2,wdir);
+ if(strcmp(OverwriteReport,"no") == 0) {
+ while(num) {
+ if(access(wdir,R_OK) == 0) {
+ sprintf(wdir,"%s.%d",dirname2,num);
+ sprintf(per2,"%s.%d",per1,num);
+ num++;
+ count++;
+ } else
+ break;
+ }
+
+ if(count > 0) {
+ if(debug)
+ fprintf(stderr, "SARG: %s: %s %s %s\n",text[51],dirname2,text[52],wdir);
+ rename(dirname2,wdir);
+ strcpy(dirname2,wdir);
+ }
+ } else {
+ if(access(wdir,R_OK) == 0) {
+ sprintf(csort,"rm -r %s",wdir);
+ system(csort);
+ }
}
+
+ if(access(wdir, R_OK) != 0)
+ my_mkdir(wdir);
}
- my_mkdir(dirname);
-
strcpy(dirname2,wdir);
sprintf(images,"%simages",outdir);
mkdir(images,0755);
if(strstr(str,from) == 0)
return (char *) str;
- ss = strlen(str); st = strlen(to);
+ ss = strlen(str); st = strlen(to) + 10;
ret = (char *) malloc(ss + st);
bzero(ret,ss+st);
{
if(strcmp(ShowSargLogo,"yes") == 0) {
fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ou);
- sprintf(html,"<tr><th class=\"logo\"><a href=\"http://www.sarg-squid.org\"><img src=\"%s/images/sarg.png\" border=\"0\" align=\"absmiddle\" title=\"SARG, Squid Analysis Report Generator. Logo by Osamu Matsuzaki\"></a> <font class=\"logo\">Squid Analysis Report Generator</font></th></tr>\n",ind,Title);
+ sprintf(html,"<tr><th class=\"logo\"><a href=\"http://sarg.sourceforge.net\"><img src=\"%s/images/sarg.png\" border=\"0\" align=\"absmiddle\" title=\"SARG, Squid Analysis Report Generator. Logo by Osamu Matsuzaki\"></a> <font class=\"logo\">Squid Analysis Report Generator</font></th></tr>\n",ind,Title);
fputs(html,fp_ou);
sprintf(html,"<tr><th class=\"title\"> </th></tr>\n",Title);
fputs(html,fp_ou);
}
}
+get_size(char *path, char *file)
+{
+ FILE *fp;
+ char response[255];
+
+ sprintf(cmd,"du -skh %s%s",path,file);
+ fp = popen(cmd, "r");
+ fgets(response, 255, fp);
+ getword(val5,response,'\t');
+ pclose(fp);
+
+ return (val5);
+}
+
+
+void write_html_header(FILE *fp_ou, char * ind)
+{
+ fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"",fp_ou);
+ fputs(" \"http://www.w3.org/TR/html4/loose.dtd\">\n",fp_ou);
+ fputs("<html>\n",fp_ou);
+ fputs("<head>\n",fp_ou);
+ sprintf(html," <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
+ fputs(html,fp_ou);
+ fputs("</head>\n",fp_ou);
+ css(fp_ou);
+ sprintf(buf,"<body style=\"font-family:%s;font-size:%s;background-color:%s;background-image:url(%s)\">\n",FontFace,TitleFontSize,BgColor,BgImage);
+ fputs(buf,fp_ou);
+ sprintf(buf,"<center><table cellpadding=\"0\" cellspacing=\"0\">\n");
+ fputs(buf,fp_ou);
+ if(strlen(LogoImage) > 0) {
+ fputs("<center><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
+ sprintf(html,"<tr><th class=\"logo\"><img src='%s' border=0 align=absmiddle width=%s height=%s> %s</th></tr>\n",LogoImage,Width,Height,LogoText);
+ fputs(html,fp_ou);
+ fputs("<tr><td height=\"5\"></td></tr>\n",fp_ou);
+ fputs("</table>\n",fp_ou);
+ }
+ show_sarg(fp_ou, ind);
+ sprintf(html,"<tr><th class=\"title\">%s</th></tr>\n",Title);
+ fputs(html,fp_ou);
+ fputs("</table></center>\n",fp_ou);
+ fputs("<center><table cellpadding=\"1\" cellspacing=\"2\">\n",fp_ou);
+ fputs("<tr><td></td><td></td></tr>\n",fp_ou);
+
+}
+
+
+void write_html_trailer(FILE *fp_ou)
+{
+ fputs("</table></center>\n",fp_ou);
+ zdate(ftime, DateFormat);
+ show_info(fp_ou);
+ fputs("</body>\n</html>\n",fp_ou);
+}
+
+
char url_module(char *url, char *w2)
{
int x, y;