]> git.ipfire.org Git - thirdparty/sarg.git/commitdiff
Imported Sarg 2.1.0
authorGuido Serassio <serassio@users.sourceforge.net>
Wed, 15 Feb 2006 18:01:05 +0000 (18:01 +0000)
committerGuido Serassio <serassio@users.sourceforge.net>
Wed, 15 Feb 2006 18:01:05 +0000 (18:01 +0000)
61 files changed:
ChangeLog
Makefile.in
README
authfail.c
css.c
css.tpl
dansguardian_log.c
dansguardian_report.c
datafile.c
denied.c
download.c
email.c
getconf.c
html.c
images/datetime.png
images/graph.png
images/sarg-squidguard-block.png
images/sarg.png
include/conf.h
include/info.h
index.c
languages/Bulgarian_windows1251
languages/Catalan
languages/Czech
languages/Dutch
languages/English
languages/French
languages/German
languages/Greek
languages/Hungarian
languages/Indonesian
languages/Italian
languages/Japanese
languages/Latvian
languages/Polish
languages/Portuguese
languages/Romanian
languages/Russian_UTF-8 [new file with mode: 0755]
languages/Russian_koi8
languages/Russian_windows1251
languages/Serbian
languages/Slovak
languages/Spanish
languages/Turkish
languages/Ukrainian_windows1251
lastlog.c
log.c
repday.c
report.c
sarg-php/sarg-realtime.php [new file with mode: 0755]
sarg.conf
siteuser.c
sort.c
squidguard_log.c
squidguard_report.c
topsites.c
topuser.c
totger.c
usage.c
useragent.c
util.c

index 32ac15af299298c7e3975955c573e40c3ea641db..4107633ad88b3cbc03003b5872d0a5afb0f32dc4 100644 (file)
--- 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 <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.
index fbed350cca13c18fc13c6d4909f851248d1ac0f1..7ddebcba84275f2fc7d830e59f5049219f80e873 100644 (file)
@@ -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 6ca44b85d99efeb6cd491211826692764d24ba53..b1d9e0f17d22cf5af26afa907d8b92b698e21ace 100644 (file)
--- a/README
+++ b/README
@@ -32,6 +32,8 @@ Antonis Maglaras <vegos@magla.gr>                     - Greek language
 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
index 84fc03d074ad18cabb733e0af8742e537b850f52..d3b0c63e1e39c26c79966047dbd868646241ae16 100644 (file)
@@ -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("</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);
diff --git a/css.c b/css.c
index cfa8d76d9636e31eda2b6239a8eafa514b06070e..cd7c3aaff37bc9170f07f756b4f7cff937f0624f 100644 (file)
--- a/css.c
+++ b/css.c
@@ -44,57 +44,47 @@ int css(FILE *fp_css)
    }
 
    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;
 ;}
diff --git a/css.tpl b/css.tpl
index d6b6be7607bd8df3fdbe92ca56133a541ed33aec..2813bee4f3964e1685e7f6b7bcba7d80e9886291 100644 (file)
--- 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;}
index d999a5c4da8a9977d269f9a00c861549a442d0aa..920e464f98743c3fd5cf4c2c3b6b5f5ae5ef3038 100644 (file)
@@ -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);
index fd6b0c927d40ccfe1f5a293bdde04a5256fed3b0..3c1b18d78949be802ea9557e1357b5dcede670ff 100644 (file)
@@ -105,7 +105,10 @@ void dansguardian_report()
       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);
@@ -200,7 +203,7 @@ void dansguardian_report()
             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);
    }
 
index d28ef485ff830d4943e067df4c85bf95744e2aff..cf773926ba5992b7c5f330152f5fe24eb1032f8a 100644 (file)
@@ -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);
    }
index 9de837608cdb4a0cf8efa42da8c91df0b227d438..b0fbafd0fac594b985cf0f50811ea9ecb08cc59e 100644 (file)
--- 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("</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);
 
@@ -179,7 +182,7 @@ void gen_denied_report()
       }
 
       if(strlen(BlockIt) > 0)
-         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"../images/sarg-squidguard-block.png\" border=\"0\"></a>&nbsp;",wwwDocumentRoot,BlockIt,url);
+         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\" border=\"0\"></a>&nbsp;",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);
index 47861c670b52c4917f2edb6b9fc23301bcf9cfc5..0610ccc84198dbe98d60c687d795c9702022267d 100644 (file)
@@ -99,7 +99,10 @@ void download_report()
       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);
 
@@ -177,7 +180,7 @@ void download_report()
       }
 
       if(strlen(BlockIt) > 0)
-         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"../images/sarg-squidguard-block.png\" border=\"0\"></a>&nbsp;",wwwDocumentRoot,BlockIt,url);
+         sprintf(BlockImage,"<a href=\"%s%s?url=%s\"><img src=\"%s/sarg-squidguard-block.png\" border=\"0\"></a>&nbsp;",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);
diff --git a/email.c b/email.c
index 7ec536011fc87f2ae811e6faba27fbeae25b0025..98f3e85a73115fdfe1b0a7aae5f6a930a5d30f69 100644 (file)
--- 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);
index ac953d52efad052a7e2f86948fa46f81f95f7194..140da7523013eda6c07a5ddadfcebb0af1448e75 100644 (file)
--- 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 8da970e925b83b654f75a8041c88e7f836b5e6d9..de745962944e7f36277041b371e2f16756a287c7 100644 (file)
--- 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("</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);
@@ -348,8 +352,11 @@ void htmlrel()
             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>&nbsp;%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>&nbsp;%s</a>",wwwDocumentRoot,BlockIt,urly,tmp6,urly,urly);
              else
                 sprintf(httplink,"<a href=http://%s title=\"%s\">%s</a>",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,"<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);
@@ -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);
 
    }
 
index 61543da044611cf5d7c79faeba77c7c37c57c83c..83548c7fd0fb2bfcf289dedc32051c6e520a3a41 100644 (file)
Binary files a/images/datetime.png and b/images/datetime.png differ
index 3fc5ecf424a2ca9091230396fb460b556053c10e..1ff4728ae9fa4c732c7aa8f2827c732156b552e5 100644 (file)
Binary files a/images/graph.png and b/images/graph.png differ
index 3163894372c70a8d8fd16ed78c5ac0c75a0c6e21..54416ec1ad47bf683396bbcca7b5d53639dd202b 100644 (file)
Binary files a/images/sarg-squidguard-block.png and b/images/sarg-squidguard-block.png differ
index 1f04091e718ab3051f826e1ea6299b675bc867bd..0110ea4bfc35e0b8a8e9de8008f01bafd566ab58 100644 (file)
Binary files a/images/sarg.png and b/images/sarg.png differ
index 23413b80f3f28cca109e7b5e07d2df66f1353b15..dfd534accf0136f1c2d5aaabecb63a240a553809 100755 (executable)
@@ -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 ];
index 805d30746c7dc036d02fb3d3f53879b17f4c6483..e0b4b0a4e4ef78598ac14c8bbe083dcb650df621 100755 (executable)
@@ -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 ff2b5a8938d26aed4d98dcbeddd866320eec9c58..ff2bc7392a1c7c1825e27d03fcf807943b1c2a68 100644 (file)
--- a/index.c
+++ b/index.c
 
 #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("<!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>&nbsp;%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);
 
@@ -189,9 +409,5 @@ void geraindex()
    strcpy(html,"</body>\n</html>\n");
    fputs(html,fp_ou);
 
-   fclose(fp_ou);
-   fclose(fp_tmp);
-
-   unlink(wdir_tmp2);
    return;
 }
index 7fdb18a502efbd42b6dce087ca2c17c7a2297120..dbd61daa91da59bca2780fb836e210c784eea9f1 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index c9ea2e8da91160b983ac71b16ce66dd0a52295f6..1e32cc38e6c9e9376d3ae08adb315dccef367e5b 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 97c025a1919d70540c5df80b149778bf5ea34b89..3f7a6c8d694e1dcec0185a19a1897285e4015e4f 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index df3b9a88359fd61ee372d51ef01c1b42baa0294c..7ac2075d49610a4a1cab4b1a3f8a8c22385b9922 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 9a9a82cb85d57e987e48a8e1796b3171e8bd893b..7241a668d516e65b62c82065681fbe1f7d5f74b8 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 5462c9797411ff3a06968ce0a117b0ec055a5b14..ffe7de34031855dc8528700988e6e7d426a74d56 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 1c29b5990207d5f39d36193d453bec2e1e717317..c24a0e788ea6c93957f05d4de50012f3a1dfc535 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index f7307023352d05856c11709610335530170c82cb..9d4e9cd4dd9515d819f4b3241e5b005a4382f11e 100644 (file)
 "ËçöèÝíôá áñ÷åßá"\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"
index 7fb757762d921ec9a02c2be3e00ce526c1ad76bc..3e72cc3535fb37419281a16d987043199bb878b9 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index b3ccf25327015dcc567f52339e082686f9e3d884..3ce1cf8950232f5dd20013a6301c32397bc6797c 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 3fc801c4dc796f7c1dcb804f56ddb382a093fbbb..5533f3bf411a181c2fd73b82106610645d1bbadb 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 01ca1dd27ae9f1dd7ce7750515bf725448c30059..c64e5bff5b3fccd4aa861f089be9e5653a9a5ce1 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index e0af4633a252c71592d1233b93fde6f233d5df59..efc41ddc819e3cbe5b72a9a872b8ef30b83be2f1 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index d097372a7b2f8e3d68dbe8ea9446aead3bebdffc..3dc4ff158db42ab73a5968625d048a95ec922b06 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 4aa22173b9e92bb63947401463c3ce00931c3278..a8cb008d919f787af65d50425ec35f8e4977d565 100644 (file)
 "DIAS"
 "DansGuardian"
 "CAUSA"
+"ANO"
+"M&Ecirc;S"
+"TAMANHO"
+"Janeiro,Fevereiro,Marco,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro"
+"Realtime"
+"TIPO"
+"Auto refresh"
index c0a5a4c211dbab0e9fcae8c3e713faf4143c78b8..15cd4116a9b6b07bced79c3c75a31e8a5447e08e 100644 (file)
 "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 (executable)
index 0000000..1596305
--- /dev/null
@@ -0,0 +1,137 @@
+# 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"
index fbac81dca1cb38542405d91c69a53ef12b69b223..e2b6493f97bf1596f6261d45cb21c5bd7a508eb3 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index fb6beeaed83eb905a4ae063f7be22c37a6334b0d..ceecb744d6aea6fd62c9aaf10d5367616cd65c10 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 7016d2c22e8c7b6826d453209201d636ca02de64..b2e2bede18e51f157b7bbcd92b0dafb846e89afb 100644 (file)
 "DansGuardian"
 "DAYS"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 4be7c2d2c6edf37c6d801128c4cb4e3613748f47..8e11cede3d485e68365cb20d97d957ab4327393d 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 76e3f0c7121365335e99d51cb75830888b999f20..ba75182097442b3e97a50c57737838392f645a56 100644 (file)
 "DIAS"
 "DansGuardian"
 "CAUSA"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 33ef742a28b46b15cf97ef3507e4baf2cc700d3b..e9c16c50b02fd00b2607b241d4036a34635d47d2 100644 (file)
 "DAYS"
 "DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index fd0984703d2811a04504d047b6550caca9899ab6..5e402842a471853a338a29b31a4e14a7cac745f8 100644 (file)
 "DAYS"
 DansGuardian"
 "CAUSE"
+"YEAR"
+"MONTH"
+"SIZE"
+"January,February,March,April,May,June,July,August,September,October,November,December"
+"Realtime"
+"TYPE"
+"Auto refresh"
index 56c0a1cc7b87eb34d22b9affc6a5c34f44f91524..55d69899a31f510ed6c5d1d67aafe3fa4098edfe 100644 (file)
--- 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 4eaa1c4ea16d25a6aa274799579de1dcee22974a..f92f8f87a509d2a865f3b43c2f1ae73028d4d23d 100644 (file)
--- 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<strlen(str); z1++) {
           if(isalnum(str[z1]) || ispunct(str[z1])) {
@@ -1020,11 +1047,19 @@ int main(argc,argv)
         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) {
@@ -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);
 
 }
index 058a0a91046b20e08f35a1a4f91fbf056eee438a..e9cb490c66137214b64afff2efb5b1efcdca16fa 100644 (file)
--- a/repday.c
+++ b/repday.c
@@ -98,7 +98,11 @@ void report_day(char *user, int *iprel, int *ipuser)
       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);
index 03ae6a1355d8c95b92e21150ebfd35dcf8263126..5cc52ec6ddd0df5544e021e1a51f3e88e167a670 100644 (file)
--- 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("</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);
@@ -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 (executable)
index 0000000..9977b6f
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+
+system("sarg -r");
+
+?>
index e56bee7d8608e9348efad4c95df600061281de8d..316a4ecdea3c090e0d047e13ca8d64c13bdd89b4 100644 (file)
--- a/sarg.conf
+++ b/sarg.conf
@@ -19,6 +19,7 @@
 #              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
@@ -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
index 5af74ca794c80d1ecd48f0887d4e4d3faa775ce4..7c193e839384a3c83aa402451602eb08387572db 100644 (file)
@@ -101,7 +101,11 @@ void siteuser()
       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);
@@ -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 93adadd76880a9f22955accac97ed432f70dde99..48e936f2ab4dd77cf6b57422a3725a0163eb6b8b 100644 (file)
--- 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);
index 440dce7ddaa97774ae65c77c689965f915cb285d..54808b1bea32ba8869212aeadc85a22ba76d8630 100644 (file)
 
 #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;
 }
index 58179046d28a10ac98be4478ace137cb4ad9dc4c..ca6c4e6fd82e8f35a905f41069fe750342d6f2f5 100644 (file)
@@ -105,7 +105,10 @@ void squidguard_report()
       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);
index d6043f188ec121d316c7f568bde7eab3562a36df..11c6e8c01ebb0bfc14adddf08305baf5993959c6 100644 (file)
@@ -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("</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);
index 6b79d78104b595f34bc3087552cc3821991ccd2d..36b1c07b23d34617cc70d4add8b1e15a9b07f8ab 100644 (file)
--- 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("</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);
@@ -271,17 +274,17 @@ int topuser()
      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);
    }
@@ -293,6 +296,12 @@ int topuser()
    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]);
@@ -465,9 +474,9 @@ int topuser()
 
       sprintf(val1,"%d",posicao);
 #ifdef HAVE_GD
-      sprintf(val2,"%s<img src=\"../images/graph.png\" border=\"0\" title=\"%s %s\"></a>&nbsp;%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>&nbsp;%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);
@@ -534,6 +543,7 @@ int topuser()
       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);
index 6c22e9ee95244295915067c55c66c9a5dc341e62..6c4130f3871cc7e8862f3a8e2558f7f12489b828 100644 (file)
--- 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 747708392ea3d606eaad3b1feaf6dac97bdde323..2b19c1dfe74b53acc299147f9c8e223c057a5686 100644 (file)
--- 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");
 
index 67ccf8a047e2beee7804c9796f6f73faa24c8bd3..1457521ab5d829a2ba070f07d44456b3da692564 100644 (file)
@@ -160,7 +160,10 @@ void useragent()
       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);
diff --git a/util.c b/util.c
index f663639357651f1396199e71db7968cfb2c10401..77067bfe2295091f37651a684839eae7e7b6d74e 100644 (file)
--- 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<z; x++)
+      getword(w,m,',');
+   getword(month,m,',');
+}
+
+
 void fixper(char *tbuf, char *periodo, char *duntil)
 {
 
@@ -545,7 +559,7 @@ void obtuser(char *dirname, char *name, char *tuser)
    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;
@@ -641,7 +655,56 @@ void vrfydir(char *dir, char *per1, char *addr, char *site, char *us, char *form
    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,"-");
@@ -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("<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>&nbsp;<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>&nbsp;<font class=\"logo\">Squid Analysis Report Generator</font></th></tr>\n",ind,Title);
       fputs(html,fp_ou);
       sprintf(html,"<tr><th class=\"title\">&nbsp</th></tr>\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("<!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>&nbsp;%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;