From: Guido Serassio Date: Wed, 15 Feb 2006 18:01:05 +0000 (+0000) Subject: Imported Sarg 2.1.0 X-Git-Tag: v2_2_6~94 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=491b862f532989fd9bc4edf2c093200b60d57919;p=thirdparty%2Fsarg.git Imported Sarg 2.1.0 --- diff --git a/ChangeLog b/ChangeLog index 32ac15a..4107633 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,40 @@ 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 + - memory leaks caused by a wrong variable size + Fixed by Klaus Singvogel . Thanks. + - ignoring users with '.' in password file. + Thanks to Emerson Valdir Pellis + - error with "resolve_ip" with "user_authentication yes" + Fixed by Grigory Trenin . Thanks. + - long url causing fault. + Thanks to Vassily Andin + - hanging on a log file containing space. + Thanks to Fabio Lo Votrico + - 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 + - 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 + - wronk link point in Generated by sarg-2.. + Thanks to Markus Hoffmann + - Russian_UFT-8 language added by Alex Deiter + Aug/04/2005 version 2.0.9 - dansguardian_report_limit missing in sarg.conf file. - ntlm domain+user format added. diff --git a/Makefile.in b/Makefile.in index fbed350..7ddebcb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -24,14 +24,14 @@ SRCS = util.c log.c report.c topuser.c email.c sort.c html.c \ 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) diff --git a/README b/README index 6ca44b8..b1d9e0f 100644 --- a/README +++ b/README @@ -32,6 +32,8 @@ Antonis Maglaras - Greek language Dusan Woletz - Slovak Language Jose Luis Hernandez - Spanish language fix Theo kastermans - Dutch language fix +Alex Deiter - Russian UFT-8 language added + Translating . Copy include/English to YourLanguage diff --git a/authfail.c b/authfail.c index 84fc03d..d3b0c63 100644 --- a/authfail.c +++ b/authfail.c @@ -53,7 +53,7 @@ void authfail_report() ouser[0]='\0'; - sprintf(tmp4,"%s/authfail.log.unsort",TempDir); + sprintf(tmp4,"%s/sarg/authfail.log.unsort",TempDir); if(!authfail_count) { unlink(tmp4); @@ -111,7 +111,10 @@ void authfail_report() fputs("\n",fp_ou); } - show_sarg(fp_ou,".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou, "../../.."); + else + show_sarg(fp_ou,".."); fputs("
\n",fp_ou); sprintf(url,"\n",Title); fputs(url,fp_ou); diff --git a/css.c b/css.c index cfa8d76..cd7c3aa 100644 --- a/css.c +++ b/css.c @@ -44,57 +44,47 @@ int css(FILE *fp_css) } fputs("\n",fp_ou); - fflush(fp_ou); return; ;} diff --git a/css.tpl b/css.tpl index d6b6be7..2813bee 100644 --- a/css.tpl +++ b/css.tpl @@ -1,14 +1,19 @@ -.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;} diff --git a/dansguardian_log.c b/dansguardian_log.c index d999a5c..920e464 100644 --- a/dansguardian_log.c +++ b/dansguardian_log.c @@ -40,9 +40,6 @@ int dansguardian_log() int idata=0; int x, y; - if(strlen(DansGuardianConf) < 1) - return; - bzero(day, 3); bzero(mon, 4); bzero(year, 5); @@ -137,17 +134,29 @@ int dansguardian_log() 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); diff --git a/dansguardian_report.c b/dansguardian_report.c index fd6b0c9..3c1b18d 100644 --- a/dansguardian_report.c +++ b/dansguardian_report.c @@ -105,7 +105,10 @@ void dansguardian_report() fputs("
%s
\n",fp_ou); } - show_sarg(fp_ou,".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou, "../../.."); + else + show_sarg(fp_ou,".."); fputs("
\n",fp_ou); sprintf(url,"\n",Title); fputs(url,fp_ou); @@ -200,7 +203,7 @@ void dansguardian_report() continue; } - sprintf(html2,"\n",name,ip,date,hour,url,url,rule); + sprintf(html2,"\n",name,ip,date,hour,url,url,rule); fputs(html2,fp_ou); } diff --git a/datafile.c b/datafile.c index d28ef48..cf77392 100644 --- a/datafile.c +++ b/datafile.c @@ -115,7 +115,7 @@ void data_file(char *tmp) 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; @@ -156,7 +156,7 @@ void data_file(char *tmp) 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; @@ -187,7 +187,8 @@ void saverecs(char *dirname, char *user, long long int nacc, char *url, long lon } 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); } diff --git a/denied.c b/denied.c index 9de8376..b0fbafd 100644 --- a/denied.c +++ b/denied.c @@ -52,7 +52,7 @@ void gen_denied_report() 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; @@ -101,7 +101,10 @@ void gen_denied_report() fputs("
%s
%s%s%s-%s%s%s
%s%s%s-%s%s%s
\n",fp_ou); } - show_sarg(fp_ou, ".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou, "../../.."); + else + show_sarg(fp_ou, ".."); sprintf(url,"%s\n",Title); fputs(url,fp_ou); @@ -179,7 +182,7 @@ void gen_denied_report() } if(strlen(BlockIt) > 0) - sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,url); + sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,url,ImageFile); else BlockImage[0]='\0'; sprintf(html2,"%s%s%s-%s%s%s\n",name,ip,data,hora,BlockImage,url,url); diff --git a/download.c b/download.c index 47861c6..0610ccc 100644 --- a/download.c +++ b/download.c @@ -99,7 +99,10 @@ void download_report() fputs("\n",fp_ou); } - show_sarg(fp_ou, ".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou, "../../.."); + else + show_sarg(fp_ou, ".."); sprintf(url,"%s\n",Title); fputs(url,fp_ou); @@ -177,7 +180,7 @@ void download_report() } if(strlen(BlockIt) > 0) - sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,url); + sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,url,ImageFile); else BlockImage[0]='\0'; sprintf(html2,"%s%s%s-%s%s%s\n",name,ip,data,hora,BlockImage,url,url); diff --git a/email.c b/email.c index 7ec5360..98f3e85 100644 --- a/email.c +++ b/email.c @@ -52,7 +52,7 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, cha 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); diff --git a/getconf.c b/getconf.c index ac953d5..140da75 100644 --- a/getconf.c +++ b/getconf.c @@ -364,6 +364,13 @@ int parmtest(char *buf) 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,' '); @@ -586,6 +593,13 @@ int parmtest(char *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,' '); @@ -735,6 +749,20 @@ int parmtest(char *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); @@ -748,6 +776,40 @@ int parmtest(char *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; } diff --git a/html.c b/html.c index 8da970e..de74596 100644 --- a/html.c +++ b/html.c @@ -35,7 +35,7 @@ void htmlrel() 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]; @@ -195,7 +195,11 @@ void htmlrel() fputs("\n",fp_ou); } - show_sarg(fp_ou,"../.."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou, "../../../.."); + else + show_sarg(fp_ou, "../.."); + fputs("
\n",fp_ou); sprintf(html,"\n",Title); fputs(html,fp_ou); @@ -348,8 +352,11 @@ void htmlrel() sprintf(httplink,"%s", \ PrivacyStringColor,PrivacyString,PrivacyString); else + strcpy(tmp6,"../../images"); + if(strcmp(IndexTree,"date") == 0) + sprintf(tmp6,"../%s",ImageFile); if(strlen(BlockIt) > 0) - sprintf(httplink," %s",wwwDocumentRoot,BlockIt,urly,urly,urly); + sprintf(httplink," %s",wwwDocumentRoot,BlockIt,urly,tmp6,urly,urly); else sprintf(httplink,"%s",urly,urly,url); @@ -365,7 +372,7 @@ void htmlrel() if(str[z1]=='?' || str[z1]=='-' || str[z1]=='.' || str[z1]==':' || str[z1]=='/' || str[z1]=='\\') str[z1]='_'; } - sprintf(href2,"",usuario,siteind,ltext110,text[55]); + sprintf(href2,"",usuario,siteind,tmp6,ltext110,text[55]); } else { bzero(href2, MAXLEN); bzero(ltext110, 50); @@ -605,10 +612,10 @@ void htmlrel() 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; } @@ -634,8 +641,8 @@ void htmlrel() } 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); @@ -714,7 +721,7 @@ void htmlrel() fclose(fp_ou); - htaccess(name); + htaccess(wusuario); } diff --git a/images/datetime.png b/images/datetime.png index 61543da..83548c7 100644 Binary files a/images/datetime.png and b/images/datetime.png differ diff --git a/images/graph.png b/images/graph.png index 3fc5ecf..1ff4728 100644 Binary files a/images/graph.png and b/images/graph.png differ diff --git a/images/sarg-squidguard-block.png b/images/sarg-squidguard-block.png index 3163894..54416ec 100644 Binary files a/images/sarg-squidguard-block.png and b/images/sarg-squidguard-block.png differ diff --git a/images/sarg.png b/images/sarg.png index 1f04091..0110ea4 100644 Binary files a/images/sarg.png and b/images/sarg.png differ diff --git a/include/conf.h b/include/conf.h index 23413b8..dfd534a 100755 --- a/include/conf.h +++ b/include/conf.h @@ -114,29 +114,33 @@ char href[MAXLEN]; 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]; @@ -188,20 +192,24 @@ char UserReportFields[255]; 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]; @@ -217,6 +225,7 @@ char hbc7[30]; char hbc8[30]; char hbc9[30]; char hbc10[30]; +char IndexTree[10]; char UserAuthentication[10]; char AuthUserFile[255]; char AuthName[512]; @@ -257,8 +266,14 @@ char wentp[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; @@ -295,11 +310,18 @@ int SquidGuardReportLimit; 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 ]; diff --git a/include/info.h b/include/info.h index 805d307..e0b4b0a 100755 --- a/include/info.h +++ b/include/info.h @@ -1,3 +1,3 @@ -#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" diff --git a/index.c b/index.c index ff2b5a8..ff2bc73 100644 --- a/index.c +++ b/index.c @@ -25,16 +25,19 @@ #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]; @@ -63,10 +66,114 @@ void geraindex() 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); @@ -74,111 +181,224 @@ void geraindex() } 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("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - sprintf(html," \n",CharSet); - fputs(html,fp_ou); - fputs("\n",fp_ou); - css(fp_ou); - - sprintf(buf,"\n",FontFace,TitleFontSize,BgColor,BgImage); - fputs(buf,fp_ou); - - sprintf(buf,"
%s
\n"); - fputs(buf,fp_ou); - - if(strlen(LogoImage) > 0) { - fputs("
\n",fp_ou); - sprintf(html,"\n",LogoImage,Width,Height,LogoText); - fputs(html,fp_ou); - fputs("\n",fp_ou); - fputs("
 %s
\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,"%s\n",Title); - fputs(html,fp_ou); - fputs("
\n",fp_ou); - - fputs("
\n",fp_ou); - fputs("\n",fp_ou); - - sprintf(html,"\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," \ - \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,"\n",hbc1,text[130],hbc1,text[132]); fputs(html,fp_ou); + while(fgets(wwork1,MAXLEN,fp_tmp)!=NULL) { + getword(tmp4,wwork1,' '); + sprintf(html,"\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,"\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,"\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,"\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,"\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,"\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,"\n",period,ReplaceIndex,period,data,tuser,tbytes,media); + fputs(html,fp_ou); + } + if(fp_tmp2) fclose(fp_tmp2); + unlink(wdir_tmp2); } - + strcpy(html,"
%s%s%s \ - %s%s
%s%s%s%s%s
%s%s
%s%s
%s/%s
%s %s
%s/%s/%s
%s %s %s
%s%s%s%s%s
%s%s%s%s%s
"); fputs(html,fp_ou); @@ -189,9 +409,5 @@ void geraindex() strcpy(html,"\n\n"); fputs(html,fp_ou); - fclose(fp_ou); - fclose(fp_tmp); - - unlink(wdir_tmp2); return; } diff --git a/languages/Bulgarian_windows1251 b/languages/Bulgarian_windows1251 index 7fdb18a..dbd61da 100644 --- a/languages/Bulgarian_windows1251 +++ b/languages/Bulgarian_windows1251 @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Catalan b/languages/Catalan index c9ea2e8..1e32cc3 100644 --- a/languages/Catalan +++ b/languages/Catalan @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Czech b/languages/Czech index 97c025a..3f7a6c8 100644 --- a/languages/Czech +++ b/languages/Czech @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Dutch b/languages/Dutch index df3b9a8..7ac2075 100644 --- a/languages/Dutch +++ b/languages/Dutch @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/English b/languages/English index 9a9a82c..7241a66 100644 --- a/languages/English +++ b/languages/English @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/French b/languages/French index 5462c97..ffe7de3 100644 --- a/languages/French +++ b/languages/French @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/German b/languages/German index 1c29b59..c24a0e7 100644 --- a/languages/German +++ b/languages/German @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Greek b/languages/Greek index f730702..9d4e9cd 100644 --- a/languages/Greek +++ b/languages/Greek @@ -126,4 +126,10 @@ "ËçöèÝíôá áñ÷åßá" "Ãñáöéêü" "ÇìÝñåò" -"ÇìÝñåò" \ 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" diff --git a/languages/Hungarian b/languages/Hungarian index 7fb7577..3e72cc3 100644 --- a/languages/Hungarian +++ b/languages/Hungarian @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Indonesian b/languages/Indonesian index b3ccf25..3ce1cf8 100644 --- a/languages/Indonesian +++ b/languages/Indonesian @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Italian b/languages/Italian index 3fc801c..5533f3b 100644 --- a/languages/Italian +++ b/languages/Italian @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Japanese b/languages/Japanese index 01ca1dd..c64e5bf 100644 --- a/languages/Japanese +++ b/languages/Japanese @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Latvian b/languages/Latvian index e0af463..efc41dd 100644 --- a/languages/Latvian +++ b/languages/Latvian @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Polish b/languages/Polish index d097372..3dc4ff1 100644 --- a/languages/Polish +++ b/languages/Polish @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Portuguese b/languages/Portuguese index 4aa2217..a8cb008 100644 --- a/languages/Portuguese +++ b/languages/Portuguese @@ -128,3 +128,10 @@ "DIAS" "DansGuardian" "CAUSA" +"ANO" +"MÊS" +"TAMANHO" +"Janeiro,Fevereiro,Marco,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro" +"Realtime" +"TIPO" +"Auto refresh" diff --git a/languages/Romanian b/languages/Romanian index c0a5a4c..15cd411 100644 --- a/languages/Romanian +++ b/languages/Romanian @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Russian_UTF-8 b/languages/Russian_UTF-8 new file mode 100755 index 0000000..1596305 --- /dev/null +++ b/languages/Russian_UTF-8 @@ -0,0 +1,137 @@ +# by Alex Deiter +"Да" +"Нет" +"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" diff --git a/languages/Russian_koi8 b/languages/Russian_koi8 index fbac81d..e2b6493 100644 --- a/languages/Russian_koi8 +++ b/languages/Russian_koi8 @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Russian_windows1251 b/languages/Russian_windows1251 index fb6beea..ceecb74 100644 --- a/languages/Russian_windows1251 +++ b/languages/Russian_windows1251 @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Serbian b/languages/Serbian index 7016d2c..b2e2bed 100644 --- a/languages/Serbian +++ b/languages/Serbian @@ -129,3 +129,10 @@ "DansGuardian" "DAYS" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Slovak b/languages/Slovak index 4be7c2d..8e11ced 100644 --- a/languages/Slovak +++ b/languages/Slovak @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Spanish b/languages/Spanish index 76e3f0c..ba75182 100644 --- a/languages/Spanish +++ b/languages/Spanish @@ -128,3 +128,10 @@ "DIAS" "DansGuardian" "CAUSA" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Turkish b/languages/Turkish index 33ef742..e9c16c5 100644 --- a/languages/Turkish +++ b/languages/Turkish @@ -128,3 +128,10 @@ "DAYS" "DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/languages/Ukrainian_windows1251 b/languages/Ukrainian_windows1251 index fd09847..5e40284 100644 --- a/languages/Ukrainian_windows1251 +++ b/languages/Ukrainian_windows1251 @@ -128,3 +128,10 @@ "DAYS" DansGuardian" "CAUSE" +"YEAR" +"MONTH" +"SIZE" +"January,February,March,April,May,June,July,August,September,October,November,December" +"Realtime" +"TYPE" +"Auto refresh" diff --git a/lastlog.c b/lastlog.c index 56c0a1c..55d6989 100644 --- a/lastlog.c +++ b/lastlog.c @@ -59,9 +59,11 @@ void mklastlog() 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 ); diff --git a/log.c b/log.c index 4eaa1c4..f92f8f8 100644 --- a/log.c +++ b/log.c @@ -146,11 +146,12 @@ int main(argc,argv) 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"); @@ -158,7 +159,7 @@ int main(argc,argv) strcpy(Height,"45"); strcpy(LogoTextColor,"#000000"); strcpy(HeaderColor,"darkblue"); - strcpy(HeaderBgColor,"#DDDDDD"); + strcpy(HeaderBgColor,"#dddddd"); strcpy(LogoTextColor,"#006699"); strcpy(FontSize,"9px"); strcpy(TempDir,"/tmp"); @@ -211,6 +212,12 @@ int main(argc,argv) 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'; @@ -261,6 +268,12 @@ int main(argc,argv) 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); @@ -271,7 +284,7 @@ int main(argc,argv) 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': @@ -311,6 +324,9 @@ int main(argc,argv) strcpy(warq[narq],optarg); narq++; break; + case 'L': + strcpy(SquidGuardLogAlternate,optarg); + break; case 'm': debugm++; break; @@ -323,6 +339,9 @@ int main(argc,argv) case 'p': userip++; break; + case 'r': + realt++; + break; case 's': strcpy(site,optarg); break; @@ -401,6 +420,11 @@ int main(argc,argv) 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); @@ -440,6 +464,11 @@ int main(argc,argv) fprintf(stderr, "SARG:\n"); } + if(strcmp(IndexTree,"file") == 0) + strcpy(ImageFile,"../images"); + else + strcpy(ImageFile,"../../../images"); + dataonly=0; if(DataFile[0] != '\0'); dataonly++; @@ -493,7 +522,7 @@ int main(argc,argv) } 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); @@ -551,9 +580,6 @@ int main(argc,argv) } strcpy(tmp2,tmp); - strcpy(tmp4,tmp); - strcpy(tmp5,tmp); - strcpy(tmp6,tmp); if(strlen(email) > 0) { sprintf(wtemp2,"%s/sarg_tmp",tmp2); @@ -573,6 +599,9 @@ int main(argc,argv) 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"); @@ -893,7 +922,6 @@ int main(argc,argv) if(!common) { getword(elap,bufz,' '); - bzero(elap, 255); while(strcmp(elap,"") == 0 && strlen(bufz) > 0) getword(elap,bufz,' '); if(strlen(elap) < 1) continue; @@ -983,7 +1011,6 @@ int main(argc,argv) sprintf(user,"%s.%s",w,wuser); } - dotinuser=0; str=user; for(z1=0; z1 512 && strstr(url,"%") != 0) { + getword(w,url,'%'); + strcpy(url,w); + } } if(!sarglog) { @@ -1037,8 +1072,10 @@ int main(argc,argv) 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); @@ -1134,6 +1171,10 @@ int main(argc,argv) if(puser) { sprintf(wuser,":%s:",user); + if(dotinuser && strstr(wuser,"_")) { + str2=(char *)subs(wuser,"_","."); + strcpy(wuser,str2); + } if(strstr(userfile, wuser) == 0) continue; } @@ -1377,14 +1418,14 @@ int main(argc,argv) 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) @@ -1406,6 +1447,15 @@ int main(argc,argv) 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); } diff --git a/repday.c b/repday.c index 058a0a9..e9cb490 100644 --- a/repday.c +++ b/repday.c @@ -98,7 +98,11 @@ void report_day(char *user, int *iprel, int *ipuser) fputs("\n",fp_ou); } - show_sarg(fp_ou,"../.."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou, "../../../.."); + else + show_sarg(fp_ou, "../.."); + fputs("
\n",fp_ou); sprintf(html,"\n",Title); fputs(html,fp_ou); diff --git a/report.c b/report.c index 03ae6a1..5cc52ec 100644 --- a/report.c +++ b/report.c @@ -79,6 +79,10 @@ void gerarel() 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); @@ -243,7 +247,10 @@ void gerarel() fputs("
%s
\n",fp_tt); } - show_sarg(fp_tt, "../.."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_tt, "../../../.."); + else + show_sarg(fp_tt, "../.."); sprintf(html,"%s\n",Title); fputs(html,fp_tt); @@ -342,17 +349,16 @@ void gerarel() 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(); @@ -373,13 +379,12 @@ void gerarel() 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); diff --git a/sarg-php/sarg-realtime.php b/sarg-php/sarg-realtime.php new file mode 100755 index 0000000..9977b6f --- /dev/null +++ b/sarg-php/sarg-realtime.php @@ -0,0 +1,5 @@ + diff --git a/sarg.conf b/sarg.conf index e56bee7..316a4ec 100644 --- a/sarg.conf +++ b/sarg.conf @@ -19,6 +19,7 @@ # Portuguese # Romanian # Russian_koi8 +# Russian_UFT-8 # Russian_windows1251 # Serbian # Slovak @@ -123,8 +124,8 @@ #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 @@ -185,7 +186,7 @@ #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 @@ -218,6 +219,11 @@ # #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 @@ -281,17 +287,19 @@ max_elapsed 28800000 # 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. @@ -398,7 +406,6 @@ max_elapsed 28800000 # 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 @@ -411,6 +418,11 @@ max_elapsed 28800000 # #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: @@ -433,14 +445,27 @@ max_elapsed 28800000 # #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# @@ -465,12 +490,12 @@ max_elapsed 28800000 # #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 @@ -478,13 +503,13 @@ max_elapsed 28800000 #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 # @@ -496,14 +521,14 @@ max_elapsed 28800000 #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 # @@ -516,7 +541,7 @@ max_elapsed 28800000 # #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 @@ -534,7 +559,7 @@ max_elapsed 28800000 # #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 @@ -549,19 +574,49 @@ max_elapsed 28800000 # 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 diff --git a/siteuser.c b/siteuser.c index 5af74ca..7c193e8 100644 --- a/siteuser.c +++ b/siteuser.c @@ -101,7 +101,11 @@ void siteuser() fputs("\n",fp_ou); } - show_sarg(fp_ou, ".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou, "../../.."); + else + show_sarg(fp_ou, ".."); + fputs("
\n",fp_ou); sprintf(url,"\n",Title); fputs(url,fp_ou); @@ -214,6 +218,9 @@ void siteuser() fclose(fp_in); fclose(fp_ou); + if(users) + free(users); + return; } diff --git a/sort.c b/sort.c index 93adadd..48e936f 100644 --- a/sort.c +++ b/sort.c @@ -124,6 +124,9 @@ void sort_users_log(char *tmp, int debug) 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); diff --git a/squidguard_log.c b/squidguard_log.c index 440dce7..54808b1 100644 --- a/squidguard_log.c +++ b/squidguard_log.c @@ -25,166 +25,205 @@ #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; } diff --git a/squidguard_report.c b/squidguard_report.c index 5817904..ca6c4e6 100644 --- a/squidguard_report.c +++ b/squidguard_report.c @@ -105,7 +105,10 @@ void squidguard_report() fputs("
%s
\n",fp_ou); } - show_sarg(fp_ou,".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou, "../../.."); + else + show_sarg(fp_ou,".."); fputs("
\n",fp_ou); sprintf(url,"\n",Title); fputs(url,fp_ou); diff --git a/topsites.c b/topsites.c index d6043f1..11c6e8c 100644 --- a/topsites.c +++ b/topsites.c @@ -62,7 +62,11 @@ void topsites() 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); @@ -183,7 +187,11 @@ void topsites() fputs("
%s
\n",fp_ou); } - show_sarg(fp_ou,".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ou,"../../.."); + else + show_sarg(fp_ou, ".."); + fputs("
\n",fp_ou); sprintf(url,"\n",Title); fputs(url,fp_ou); diff --git a/topuser.c b/topuser.c index 6b79d78..36b1c07 100644 --- a/topuser.c +++ b/topuser.c @@ -28,7 +28,7 @@ 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; @@ -43,7 +43,7 @@ int topuser() 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; @@ -60,7 +60,7 @@ int topuser() 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) { @@ -154,8 +154,8 @@ int topuser() 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); @@ -230,7 +230,10 @@ int topuser() fputs("
%s
\n",fp_top3); } - show_sarg(fp_top3, ".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_top3, "../../.."); + else + show_sarg(fp_top3, ".."); fputs("
\n",fp_top3); sprintf(preg,"\n",Title); fputs(preg,fp_top3); @@ -271,17 +274,17 @@ int topuser() fputs(preg,fp_top3); } - if(download_count) { + if (strstr(ReportType,"downloads") != 0 && download_count) { sprintf(preg,"\n",text[125],text[55]); fputs(preg,fp_top3); } - if(denied_count) { + if (strstr(ReportType,"denied") != 0 && denied_count) { sprintf(preg,"\n",text[118],text[55]); fputs(preg,fp_top3); } - if(authfail_count) { + if (strstr(ReportType,"auth_failures") != 0 && authfail_count) { sprintf(preg,"\n",text[117],text[55]); fputs(preg,fp_top3); } @@ -293,6 +296,12 @@ int topuser() strcpy(preg,"\n"); fputs(preg,fp_top3); + if (strstr(ReportType,"topuser") == 0) { + fputs("\n\n",fp_top3); + if (fp_top3) + fclose (fp_top3); + return; + } strcpy(val1,text[100]); strcpy(val2,text[98]); strcpy(val3,text[92]); @@ -465,9 +474,9 @@ int topuser() sprintf(val1,"%d",posicao); #ifdef HAVE_GD - sprintf(val2,"%s %s\n",href3,text[126],text[55],href2,ltext110,text[55]); + sprintf(val2,"%s %s\n",href3,ImageFile,text[126],text[55],href2,ImageFile,ltext110,text[55]); #else - sprintf(val2,"%s\n",href2,ltext110,text[55]); + sprintf(val2,"%s\n",href2,ImageFile,ltext110,text[55]); #endif sprintf(val3,"%3.2f%%",perc); @@ -534,6 +543,7 @@ int topuser() if(dotinuser && strstr(name,"_")) { str2=(char *)subs(name,"_","."); strcpy(name,str2); + free(str2); } sprintf(preg,"\n",hbc1,val1,hbc2,val2,hbc2,href,name,hbc3,wwork1,hbc4,wwork2,hbc5,val3,hbc6,val4,hbc7,val5,hbc8,val6,hbc9,wwork3,hbc10,val7); diff --git a/totger.c b/totger.c index 6c22e9e..6c4130f 100644 --- a/totger.c +++ b/totger.c @@ -60,7 +60,6 @@ int totalger(const char *dirname, int debug, const char *outdir) while(!feof(fp_in)) { - tnacc+=my_atoll(nacc); tnbytes+=my_atoll(nbytes); telap+=my_atoll(elap); diff --git a/usage.c b/usage.c index 7477083..2b19c1d 100644 --- a/usage.c +++ b/usage.c @@ -50,7 +50,7 @@ void usage(char *prog) 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"); diff --git a/useragent.c b/useragent.c index 67ccf8a..1457521 100644 --- a/useragent.c +++ b/useragent.c @@ -160,7 +160,10 @@ void useragent() fputs("
%s
%s %s
%s %s
%s %s
%s%s%s%s%s%s%s%s%s%s%s%s
\n",fp_ht); } - show_sarg(fp_ht,".."); + if(strcmp(IndexTree,"date") == 0) + show_sarg(fp_ht, "../../.."); + else + show_sarg(fp_ht,".."); fputs("
\n",fp_ht); sprintf(html,"\n",TiColor,text[105]); fputs(html,fp_ht); diff --git a/util.c b/util.c index f663639..77067bf 100644 --- a/util.c +++ b/util.c @@ -308,6 +308,20 @@ void conv_month_name(char *month) } +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 0) { strcat(wdir,"-"); @@ -659,33 +722,61 @@ void vrfydir(char *dir, char *per1, char *addr, char *site, char *us, char *form 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); @@ -874,7 +965,7 @@ char *subs(char *str, char *from, char *to) 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); @@ -1076,7 +1167,7 @@ void show_sarg(FILE *fp_ou, char *ind) { if(strcmp(ShowSargLogo,"yes") == 0) { fputs("
%s
\n",fp_ou); - sprintf(html,"\n",ind,Title); + sprintf(html,"\n",ind,Title); fputs(html,fp_ou); sprintf(html,"\n",Title); fputs(html,fp_ou); @@ -1084,6 +1175,61 @@ void show_sarg(FILE *fp_ou, char *ind) } } +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("\n",fp_ou); + fputs("\n",fp_ou); + fputs("\n",fp_ou); + sprintf(html," \n",CharSet); + fputs(html,fp_ou); + fputs("\n",fp_ou); + css(fp_ou); + sprintf(buf,"\n",FontFace,TitleFontSize,BgColor,BgImage); + fputs(buf,fp_ou); + sprintf(buf,"
 Squid Analysis Report Generator
 Squid Analysis Report Generator
 
\n"); + fputs(buf,fp_ou); + if(strlen(LogoImage) > 0) { + fputs("
\n",fp_ou); + sprintf(html,"\n",LogoImage,Width,Height,LogoText); + fputs(html,fp_ou); + fputs("\n",fp_ou); + fputs("
 %s
\n",fp_ou); + } + show_sarg(fp_ou, ind); + sprintf(html,"%s\n",Title); + fputs(html,fp_ou); + fputs("
\n",fp_ou); + fputs("
\n",fp_ou); + fputs("\n",fp_ou); + +} + + +void write_html_trailer(FILE *fp_ou) +{ + fputs("
\n",fp_ou); + zdate(ftime, DateFormat); + show_info(fp_ou); + fputs("\n\n",fp_ou); +} + + char url_module(char *url, char *w2) { int x, y;