From: Frédéric Marchal Date: Thu, 4 Feb 2010 06:07:30 +0000 (+0000) Subject: Output w3c compliant strict html (almost every output). X-Git-Tag: v2.3-pre2~101 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0ec9cc76990208089e9950673d0dab747d87917;p=thirdparty%2Fsarg.git Output w3c compliant strict html (almost every output). Prepare the transition to gettext. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 81d5466..2b7c8fd 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ PROJECT(sarg C) SET(sarg_VERSION 2) SET(sarg_REVISION "3rc1") SET(sarg_BUILD "") -SET(sarg_BUILDDATE "Feb-02-2010") +SET(sarg_BUILDDATE "Feb-04-2010") INCLUDE(AddFileDependencies) INCLUDE(CheckIncludeFile) diff --git a/Makefile.in b/Makefile.in index c75eca6..f13c1ea 100644 --- a/Makefile.in +++ b/Makefile.in @@ -5,29 +5,31 @@ datarootdir=@datarootdir@ datadir=@datadir@ exec_prefix=@exec_prefix@ PACKAGE_TARNAME=@PACKAGE_TARNAME@ -docdir=@docdir@ -CC = @CC@ -BINDIR = @bindir@ -IBINDIR = -DBINDIR=\"@bindir@\" -MANDIR = @mandir@ -SYSCONFDIR = @sysconfdir@ -SARGPHPDIR = @SARGPHPDIR@ -LANGDIR = @LANGDIR@ -FONTDIR = @FONTDIR@ -IMAGEDIR = @IMAGEDIR@ -ISYSCONFDIR = -DSYSCONFDIR=\"@sysconfdir@\" -ISARGPHPDIR = -DSARGPHPDIR=\"@SARGPHPDIR@\" -ILANGDIR = -DLANGDIR=\"@LANGDIR@\" -IFONTDIR = -DFONTDIR=\"@FONTDIR@\" -IIMAGEDIR = -DIMAGEDIR=\"@IMAGEDIR@\" -CFLAGS = @CFLAGS@ -CPPFLAGS = @CPPFLAGS@ -LDFLAGS = @LDFLAGS@ -DEFS = @DEFS@ -LIBS = @LIBS@ -SRCDIR = . -VPATH = . -INSTALL = cp +docdir = @docdir@ +CC = @CC@ +BINDIR = @bindir@ +MANDIR = @mandir@ +SYSCONFDIR = @sysconfdir@ +SARGPHPDIR = @SARGPHPDIR@ +LANGDIR = @LANGDIR@ +FONTDIR = @FONTDIR@ +IMAGEDIR = @IMAGEDIR@ +LOCALEDIR = $(datadir)/locale +IBINDIR = -DBINDIR=\"@bindir@\" +ISYSCONFDIR = -DSYSCONFDIR=\"@sysconfdir@\" +ISARGPHPDIR = -DSARGPHPDIR=\"@SARGPHPDIR@\" +ILANGDIR = -DLANGDIR=\"@LANGDIR@\" +IFONTDIR = -DFONTDIR=\"@FONTDIR@\" +IIMAGEDIR = -DIMAGEDIR=\"@IMAGEDIR@\" +ILOCALEDIR = -DLOCALEDIR=\"$(localedir)\" +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +DEFS = $(IBINDIR) $(ISYSCONFDIR) $(ILANGDIR) $(IFONTDIR) $(IIMAGEDIR) $(ISARGPHPDIR) $(ILOCALEDIR) @DEFS@ +LIBS = @LIBS@ +SRCDIR = . +VPATH = . +INSTALL = cp INSTALL_PROGRAM = $(INSTALL) @@ -51,7 +53,7 @@ DISTFILES = $(SRCS) all: sarg .c.o: - $(CC) -c -I. $(CPPFLAGS) $(DEFS) $(CFLAGS) $(IBINDIR) $(ISYSCONFDIR) $(ILANGDIR) $(IFONTDIR) $(IIMAGEDIR) $(ISARGPHPDIR) $< + $(CC) -c -I. $(CPPFLAGS) $(DEFS) $(CFLAGS) $< sarg: $(OBJS) $(CC) $(LDFLAGS) $(OBJS) -o $@ $(LIBS) $(LIBCRYPT) diff --git a/authfail.c b/authfail.c index 601ab8e..3f3543f 100644 --- a/authfail.c +++ b/authfail.c @@ -94,25 +94,12 @@ void authfail_report(void) exit(1); } - fprintf(fp_ou, "\n\n\n \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); - if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); - fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou, "../../.."); - else - show_sarg(fp_ou,".."); - fputs("
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Authentication Failures")); fprintf(fp_ou,"\n",text[89],period); fprintf(fp_ou,"\n",text[117]); - fputs("
%s
%s: %s
%s
\n",fp_ou); + close_html_header(fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); fputs("\n",fp_ou); fputs("\n",fp_ou); fputs("\n",fp_ou); @@ -169,14 +156,10 @@ void authfail_report(void) fprintf(fp_ou,"\n",name,ip,data,hora,BlockImage,url,url); } - - fputs("
%s%s%s-%s%s%s
\n",fp_ou); - - show_info(fp_ou); - - fputs("\n\n",fp_ou); - fclose(fp_in); + + fputs("
\n",fp_ou); + write_html_trailer(fp_ou); fclose(fp_ou); unlink(authfail_in); diff --git a/css.c b/css.c index 702eda9..de5c6fa 100644 --- a/css.c +++ b/css.c @@ -47,16 +47,24 @@ void css(FILE *fp_css) } fprintf(fp_css,"\n", FontFace, FontSize); + fprintf(fp_css,".link a:link,a:visited {font-family:%s;font-size:%s;color:#0000FF;text-decoration:none;}\n", FontFace, FontSize); + + fprintf(fp_css,"a > img {border:none;}\n"); + + fputs("\n",fp_css); } diff --git a/dansguardian_report.c b/dansguardian_report.c index 226b0c8..bf0ff88 100644 --- a/dansguardian_report.c +++ b/dansguardian_report.c @@ -82,25 +82,12 @@ void dansguardian_report(void) exit(1); } - fprintf(fp_ou, "\n\n\n \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); - if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); - fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou, "../../.."); - else - show_sarg(fp_ou,".."); - fputs("
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("DansGuardian")); fprintf(fp_ou,"\n",text[89],period); fprintf(fp_ou,"\n",text[128]); - fputs("
%s
%s: %s
%s
\n",fp_ou); + close_html_header(fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); fputs("\n",fp_ou); fprintf(fp_ou,"\n",text[98],text[111],text[110],text[91],text[129]); @@ -173,14 +160,10 @@ void dansguardian_report(void) fprintf(fp_ou,"\n",name,ip,date,hour,url,url,rule); } - - fputs("
%s%s%s%s%s
%s%s%s-%s%s%s
\n",fp_ou); - - show_info(fp_ou); - - fputs("\n\n",fp_ou); - fclose(fp_in); + + fputs("
\n",fp_ou); + write_html_trailer(fp_ou); fclose(fp_ou); unlink(dansguardian_in); diff --git a/datafile.c b/datafile.c index 7a1b5e8..15b7e98 100644 --- a/datafile.c +++ b/datafile.c @@ -41,7 +41,6 @@ void data_file(char *tmp) char ipantes[MAXLEN], nameantes[MAXLEN]; char accsmart[MAXLEN]; char crc2[50]; - char wdname[MAXLEN]; char *str; DIR *dirp; struct dirent *direntp; @@ -53,7 +52,9 @@ void data_file(char *tmp) long long int oucache=0; long long int accbytes; long long int accelap; + int dlen; struct getwordstruct gwarea; + const char logext[]=".log"; ipantes[0]='\0'; nameantes[0]='\0'; @@ -63,8 +64,11 @@ void data_file(char *tmp) dirp = opendir(tmp); while ( (direntp = readdir( dirp )) != NULL ) { - if(strstr(direntp->d_name,".log") == 0) + dlen=strlen(direntp->d_name)-(sizeof(logext)-1); + if (dlen<=0) continue; + if(strcmp(direntp->d_name+dlen,logext) != 0) continue; + if (snprintf(tmp3,sizeof(tmp3),"%s/%s",tmp,direntp->d_name)>=sizeof(tmp3)) { fprintf(stderr,"SARG: (datafile) directory path too long: %s/%s\n",tmp,direntp->d_name); exit(1); @@ -74,10 +78,6 @@ void data_file(char *tmp) fprintf(stderr, "SARG: (datafile) %s: %s\n",text[45],tmp); exit(1); } - strcpy(wdname,direntp->d_name); - str=strchr(wdname,'.'); - if (str) *str='\0'; - strcat(user,wdname); ttopen=0; while(fgets(buf,sizeof(buf),fp_in)!=NULL) { @@ -144,7 +144,7 @@ void data_file(char *tmp) } fclose(fp_in); -} + } (void)closedir( dirp ); if(debug) diff --git a/denied.c b/denied.c index 710a146..4918acb 100644 --- a/denied.c +++ b/denied.c @@ -82,25 +82,12 @@ void gen_denied_report(void) exit(1); } - fprintf(fp_ou, "\n\n\n \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); - fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou, "../../.."); - else - show_sarg(fp_ou, ".."); - - fputs("
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("DENIED")); fprintf(fp_ou,"\n",text[89],period); fprintf(fp_ou,"\n",text[46]); - fputs("
%s
%s: %s
%s
\n",fp_ou); + close_html_header(fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); fputs("\n",fp_ou); fprintf(fp_ou,"\n",text[98],text[111],text[110],text[91]); @@ -154,18 +141,15 @@ void gen_denied_report(void) } if(BlockIt[0] != '\0') - sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,url,ImageFile); + sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,url,ImageFile); else BlockImage[0]='\0'; - fprintf(fp_ou,"\n",name,ip,data,hora,BlockImage,url,url); + fprintf(fp_ou,"\n",name,ip,data,hora,BlockImage,url,url); } - - fputs("
%s%s%s%s
%s%s%s-%s%s%s
%s%s%s-%s%s%s
\n",fp_ou); - - show_info(fp_ou); - fputs("\n",fp_ou); - fclose(fp_in); + + fputs("
\n",fp_ou); + write_html_trailer(fp_ou); fclose(fp_ou); unlink(denied_in); diff --git a/documentation/util.txt b/documentation/util.txt index ce89c0a..36e8d26 100644 --- a/documentation/util.txt +++ b/documentation/util.txt @@ -670,12 +670,12 @@ the report and when the report was generated. -/*! \fn void show_sarg(FILE *fp_ou, const char *ind) +/*! \fn void show_sarg(FILE *fp_ou, int depth) Write the header of the report to tell that it was generated by sarg. \param fp_ou The handle of the HTML file. -\param ind The path to use to have access to the images directory with the sarg logo. It is a succession of .. -to move up until the root of the reports with the images directory. +\param depth How deep is the page in the directory tree. It is used to prepend the images directory name +with as many .. as necessary. If the page is at the same level as the image directory, the depth is zero. */ @@ -695,14 +695,24 @@ Get the size, in human readable form and kibibytes, of the content of a director -/*! \fn void write_html_header(FILE *fp_ou, const char * ind) +/*! \fn void write_html_header(FILE *fp_ou, int depth, const char *title) Write the HTML header of a HTML report file. The DTD correspond to a transitional HTML version 4.01. The title of the document is taken from the global variable ::Title. \param fp_ou The file to which the HTML header is written. -\param ind The path to pass to show_arg() to find the root directory where the -images directory is. +\param depth How deep is the page in the directory tree. The depth is passed to show_sarg(). +\param title The title of the page. +*/ + + + + + +/*! \fn void close_html_header(FILE *fp_ou) +Close the header opened by write_html_header(). + +\param fp_ou The file to which the HTML header is written. */ diff --git a/download.c b/download.c index 0630780..5711f3f 100644 --- a/download.c +++ b/download.c @@ -87,27 +87,12 @@ void download_report(void) exit(1); } - fprintf(fp_ou, "\n\n\n \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); - - fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); - - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou, "../../.."); - else - show_sarg(fp_ou, ".."); - - fputs("
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Downloads")); fprintf(fp_ou,"\n",text[89],period); fprintf(fp_ou,"\n",text[125]); - fputs("
%s
%s: %s
%s
\n",fp_ou); + close_html_header(fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); fputs("\n",fp_ou); fprintf(fp_ou,"\n",text[98],text[111],text[110],text[91]); @@ -164,18 +149,15 @@ void download_report(void) fprintf(fp_ou,"\n",fp_ou); } - - fputs("
%s%s%s%s
%s%s%s-%s",name,ip,data,hora); if(BlockIt[0]!='\0') - fprintf(fp_ou," ",wwwDocumentRoot,BlockIt,url,ImageFile); + fprintf(fp_ou," ",wwwDocumentRoot,BlockIt,url,ImageFile); fprintf(fp_ou,"",url); output_html_string(fp_ou,url); fputs("
\n",fp_ou); - - show_info(fp_ou); - fputs("\n\n",fp_ou); - fclose(fp_in); + + fputs("
\n",fp_ou); + write_html_trailer(fp_ou); fclose(fp_ou); unlink(report_in); diff --git a/getconf.c b/getconf.c index ebe17be..63875a6 100644 --- a/getconf.c +++ b/getconf.c @@ -425,7 +425,7 @@ static void parmtest(char *buf) if (getparam_string("mail_utility",buf,MailUtility,sizeof(MailUtility))>0) return; - if (getparam_string("topsites_num",buf,TopSitesNum,sizeof(TopSitesNum))>0) return; + if (getparam_int("topsites_num",buf,&TopSitesNum)>0) return; if (getparam_int("topuser_num",buf,&TopUsersNum)>0) return; diff --git a/html.c b/html.c index 108bca7..a7c61cc 100644 --- a/html.c +++ b/html.c @@ -235,34 +235,15 @@ void htmlrel(void) exit(1); } - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fputs("\n",fp_ou); - fprintf(fp_ou," \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 4 : 2,_("User report")); + fprintf(fp_ou,"%s: %s\n",text[89],period); + fprintf(fp_ou,"%s: %s\n",text[90],name2); + fprintf(fp_ou,"%s: %s, %s\n",text[104],UserSortField,UserSortOrder); + fprintf(fp_ou,"%s %s\n",text[32],text[55]); + //fputs("\n",fp_ou); + close_html_header(fp_ou); - fprintf(fp_ou,"\n",FontFace,TitleFontSize,BgColor,BgImage); - - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou, "../../../.."); - else - show_sarg(fp_ou, "../.."); - - fputs("
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - - fprintf(fp_ou,"\n",text[89],period); - fprintf(fp_ou,"\n",text[90],name2); - fprintf(fp_ou,"\n",text[104],UserSortField,UserSortOrder); - fprintf(fp_ou,"\n",text[32],text[55]); - fputs("\n",fp_ou); - - fputs("
%s
%s: %s
%s: %s
%s: %s, %s
%s %s
\n",fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); if(denied_report[0]!='\0') { fprintf(fp_ou,"\n",denied_report,text[116],text[55]); @@ -335,22 +316,6 @@ void htmlrel(void) else strcpy(tmp6,"../../images"); - if((ReportType & REPORT_TYPE_SITE_USER_TIME_DATE) != 0) { - strcpy(ltext110,text[110]); - for(s=ltext110; *s; ++s) - *s=tolower(*s); - strcpy(siteind,urly); - str=siteind; - for(z1=0; str[z1]; z1++) { - if(str[z1]=='?' || str[z1]=='-' || str[z1]=='.' || str[z1]==':' || str[z1]=='/' || str[z1]=='\\' || str[z1]=='*' || - str[z1]=='\'' || str[z1]=='\"' || str[z1]=='$') - str[z1]='_'; - } - fprintf(fp_ou,"",usuario,siteind,tmp6,ltext110,text[55]); - } else { - fprintf(fp_ou,""); - } - if(!LongUrl) { char *endofhost=strchr(url,'/'); if (endofhost) *endofhost='\0'; @@ -366,11 +331,28 @@ void htmlrel(void) } } + if((ReportType & REPORT_TYPE_SITE_USER_TIME_DATE) != 0) { + strcpy(ltext110,text[110]); + for(s=ltext110; *s; ++s) + *s=tolower(*s); + for(z1=0; urly[z1]; z1++) { + if(urly[z1]=='?' || urly[z1]=='-' || urly[z1]=='.' || urly[z1]==':' || urly[z1]=='/' || urly[z1]=='\\' || + urly[z1]=='*' || urly[z1]=='\'' || urly[z1]=='\"' || urly[z1]=='$') + siteind[z1]='_'; + else + siteind[z1]=urly[z1]; + } + siteind[z1]='\0'; + fprintf(fp_ou,"",usuario,siteind,tmp6,ltext110,text[55]); + } else { + fprintf(fp_ou,""); + } + if(Privacy) fprintf(fp_ou,"",PrivacyStringColor,PrivacyString); else { if(BlockIt[0]!='\0') { - fprintf(fp_ou,"",wwwDocumentRoot,BlockIt,urly,tmp6,urly,urly); + fprintf(fp_ou,"",wwwDocumentRoot,BlockIt,urly,tmp6,urly,urly); } else fprintf(fp_ou,"",urly,urly,url); } @@ -590,11 +572,7 @@ void htmlrel(void) } fputs("
%s %s
\"T\"\"T\"%s %s %s%s
\n",fp_ou); - - show_info(fp_ou); - - fputs("\n\n",fp_ou); - + write_html_trailer(fp_ou); fclose(fp_ou); htaccess(wusuario); diff --git a/include/conf.h b/include/conf.h index 55729a0..76f3ae4 100755 --- a/include/conf.h +++ b/include/conf.h @@ -121,6 +121,21 @@ int mkstemps(char *template, int suffixlen); #define mkstemp(template) mkstemps(template,0) #endif +#ifdef ENABLE_NLS +#include +#define _(String) gettext(String) +#ifdef gettext_noop +#define N_(String) gettext_noop(String) +#else +#define N_(String) (String) +#endif +#else /* No NLS */ +#define _(String) (String) +#define N_(String) (String) +#define textdomain(String) +#define bindtextdomain(Domain,Directory) +#endif + #if defined(__MINGW32__) #define mkdir(p,m) _mkdir(p) @@ -226,7 +241,7 @@ char u2[255]; char RecordsWithoutUser[20]; int UseComma; char MailUtility[PATH_MAX]; -char TopSitesNum[20]; +int TopSitesNum; int TopUsersNum; char ExcludeCodes[256]; char TopsitesSortField[15]; @@ -371,6 +386,7 @@ int download_count; int authfail_count; int dansguardian_count; int squidguard_count; +int useragent_count; int limit_flag; int color1; int color2; diff --git a/include/defs.h b/include/defs.h index 1df5f5e..954a4d5 100755 --- a/include/defs.h +++ b/include/defs.h @@ -153,9 +153,10 @@ void fixper(char *tbuf, char *period, const char *duntil); char *fixtime(long int elap); void fixendofline(char *str); void show_info(FILE *fp_ou); -void show_sarg(FILE *fp_ou, const char *ind); +void show_sarg(FILE *fp_ou, int depth); void write_logo_image(FILE *fp_ou); -void write_html_header(FILE *fp_ou, const char * ind); +void write_html_header(FILE *fp_ou, int depth, const char *title); +void close_html_header(FILE *fp_ou); void write_html_trailer(FILE *fp_ou); void output_html_string(FILE *fp_ou,const char *str); void subs(char *str, int size, char *from, char *to); diff --git a/include/info.h b/include/info.h index 728f0f0..e0693c9 100755 --- a/include/info.h +++ b/include/info.h @@ -1,3 +1,3 @@ -#define VERSION PACKAGE_VERSION" Feb-02-2010" +#define VERSION PACKAGE_VERSION" Feb-04-2010" #define PGM PACKAGE_NAME #define URL "http://sarg.sourceforge.net" diff --git a/index.c b/index.c index 5a50d68..c9a1c44 100644 --- a/index.c +++ b/index.c @@ -84,6 +84,7 @@ static void make_date_index(void) char monthnum[10]; char dayindex[MAXLEN]; char daynum[10]; + char title[80]; int yearsort[150]; int nyears; int year; @@ -131,7 +132,9 @@ static void make_date_index(void) fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],yearindex,strerror(errno)); exit(1); } - write_html_header(fp_ou, "."); + write_html_header(fp_ou,0,"SARG reports"); + close_html_header(fp_ou); + fputs("
\n\n",fp_ou); fprintf(fp_ou,"\n",text[130],text[132]); for (y=0 ; y0) @@ -172,7 +175,10 @@ static void make_date_index(void) fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],monthindex,strerror(errno)); exit(1); } - write_html_header(fp_ou2,".."); + snprintf(title,sizeof(title),"SARG: report for %04d",year); + write_html_header(fp_ou2,1,title); + close_html_header(fp_ou2); + fputs("
%s%s
\n\n",fp_ou2); fprintf(fp_ou2,"\n",text[130],text[131]); for (m=0 ; m0) @@ -227,7 +233,10 @@ static void make_date_index(void) fprintf(stderr, "SARG: (index) %s: %s - %s\n",text[45],dayindex,strerror(errno)); exit(1); } - write_html_header(fp_ou3,"../.."); + snprintf(title,sizeof(title),"SARG: report for %04d/%02d",year,month); + write_html_header(fp_ou3,2,title); + close_html_header(fp_ou3); + fputs("
%s/%s
\n\n",fp_ou3); fprintf(fp_ou3,"\n",text[130],text[131],text[127]); for (d=0 ; d0) @@ -243,13 +252,16 @@ static void make_date_index(void) } fprintf(fp_ou3,"\n",daynum,yearnum,nmonth,daynum); } + fputs("
%s/%s/%s
%s %s %s
\n",fp_ou3); write_html_trailer(fp_ou3); fclose(fp_ou3); } + fputs("\n",fp_ou2); write_html_trailer(fp_ou2); fclose(fp_ou2); } + fputs("\n",fp_ou); write_html_trailer(fp_ou); fclose(fp_ou); } @@ -381,7 +393,9 @@ static void make_file_index(void) fprintf(stderr, "SARG: (index) %s: %s\n",text[45],wdir); exit(1); } - write_html_header(fp_ou,"."); + write_html_header(fp_ou,0,"SARG reports"); + close_html_header(fp_ou); + fputs("
\n\n",fp_ou); fprintf(fp_ou,"\n",text[101],text[102],text[103],text[93],text[96]); for (i=0 ; i0) @@ -392,6 +406,7 @@ static void make_file_index(void) obttotal(outdir,item->dirname,tbytes,tuser,media); fprintf(fp_ou,"\n",item->dirname,ReplaceIndex,item->dirname,item->date,tuser,tbytes,media); } + fputs("
%s%s%s%s%s
%s%s%s%s%s
\n",fp_ou); write_html_trailer(fp_ou); fclose(fp_ou); diff --git a/log.c b/log.c index 553db94..89b7e42 100644 --- a/log.c +++ b/log.c @@ -175,7 +175,7 @@ int main(int argc,char *argv[]) strcpy(RecordsWithoutUser,"ip"); UseComma=0; strcpy(MailUtility,"mailx"); - strcpy(TopSitesNum,"100"); + TopSitesNum=100; UserIp=0; strcpy(TopuserSortField,"BYTES"); strcpy(UserSortField,"BYTES"); @@ -272,6 +272,7 @@ int main(int argc,char *argv[]) authfail_count=0; dansguardian_count=0; squidguard_count=0; + useragent_count=0; DeniedReportLimit=10; AuthfailReportLimit=10; DansGuardianReportLimit=10; @@ -300,7 +301,10 @@ int main(int argc,char *argv[]) #ifdef HAVE_LOCALE_H setlocale(LC_TIME,""); + setlocale (LC_MESSAGES, ""); #endif + bindtextdomain (PACKAGE_NAME, LOCALEDIR); + textdomain (PACKAGE_NAME); NAccessLog=0; for(x=0; x<=MAXLOGS; x++) diff --git a/realtime.c b/realtime.c index 7668dc9..0167712 100755 --- a/realtime.c +++ b/realtime.c @@ -251,7 +251,7 @@ static void header(void) puts("\n"); printf(buf,"\n",FontFace,TitleFontSize,BgColor,BgImage); puts("
\n"); - printf("\n",text[134]); + printf("\n",text[134]); printf("\n",text[136],realtime_refresh); printf("\n",text[110],text[111],text[98],text[135],text[91]); } diff --git a/repday.c b/repday.c index d865e86..218ad01 100644 --- a/repday.c +++ b/repday.c @@ -69,23 +69,9 @@ void report_day(const char *user) exit(1); } - fprintf(fp_ou, "\n\n\n \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); - //if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); - fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou, "../../../.."); - else - show_sarg(fp_ou, "../.."); - - fputs("
SARG %s
SARG %s
%s: %d s
%s%s%s%s%s
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - - fputs("
%s
\n",fp_ou); - fputs("
\n",fp_ou); + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 4 : 2,_("Day report")); + close_html_header(fp_ou); + fputs("
\n",fp_ou); fprintf(fp_ou,"\n",text[89],period); @@ -110,7 +96,7 @@ void report_day(const char *user) fputs("\n",fp_ou); fputs("
%s: %s
\n",fp_ou); - fputs("\n", fp_ou); + fputs("
\n", fp_ou); fputs( "\n", fp_ou ); @@ -167,6 +153,7 @@ void report_day(const char *user) ttt+=elap; } + fclose(fp_in); for( i = 0; i < hours.len; i++ ) sprintf(c[ hours.list[ i ] ],"%s",fixtime(v[ hours.list[ i ] ])); @@ -187,12 +174,8 @@ void report_day(const char *user) fprintf(fp_ou, "\n", c[ hours.list[ i ] ] ); fprintf(fp_ou, "\n", fixtime(ttt) ); - fputs("
%s%s
\n",fp_ou); - - show_info(fp_ou); - - fputs("\n\n",fp_ou); - fclose(fp_in); + fputs("\n",fp_ou); + write_html_trailer(fp_ou); fclose(fp_ou); return; } diff --git a/report.c b/report.c index 9766540..fb48259 100644 --- a/report.c +++ b/report.c @@ -247,27 +247,14 @@ void gerarel(void) for(str=ltext110; *str; ++str) *str=tolower(*str); - fprintf(fp_tt, "\n\n\n \n",CharSet); - css(fp_tt); - fputs("\n",fp_tt); - fprintf(fp_tt,"\n",BgColor,TxColor,BgImage); - write_logo_image(fp_tt); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_tt, "../../../.."); - else - show_sarg(fp_tt, "../.."); - - fputs("
\n",fp_tt); - fprintf(fp_tt,"\n",Title); - - fprintf(fp_tt,"\n",text[89],period); - fprintf(fp_tt,"\n",text[90],name); - fprintf(fp_tt,"\n",text[104],UserSortField,UserSortOrder); - fprintf(fp_tt,"\n",text[32]); - - fputs("
%s
%s: %s
%s: %s
%s: %s, %s
%s
\n",fp_tt); - fputs("
\n",fp_tt); + write_html_header(fp_tt,(IndexTree == INDEX_TREE_DATE) ? 4 : 2,_("Site access report")); + fprintf(fp_tt,"\n",text[89],period); + fprintf(fp_tt,"\n",text[90],name); + fprintf(fp_tt,"\n",text[104],UserSortField,UserSortOrder); + fprintf(fp_tt,"\n",text[32]); + close_html_header(fp_tt); + + fputs("
%s: %s
%s: %s
%s: %s, %s
%s
\n",fp_tt); fputs("",fp_tt); bzero(tmp4, MAXLEN); strncpy(tmp4,text[110],4); @@ -470,7 +457,7 @@ void gravatmp(const char *oldaccuser, const char *oldurl, long long int nacc, lo ttopen=0; if(fp_tt) { - fputs("
\n",fp_tt); + fputs("\n
\n",fp_tt); fputs("\n\n",fp_tt); fclose(fp_tt); } diff --git a/siteuser.c b/siteuser.c index ca4b8e4..4f29e77 100644 --- a/siteuser.c +++ b/siteuser.c @@ -92,26 +92,12 @@ void siteuser(void) exit(1); } - fprintf(fp_ou, "\n\n\n \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); - //if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); - fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou, "../../.."); - else - show_sarg(fp_ou, ".."); - - fputs("
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Sites & Users")); fprintf(fp_ou,"\n",text[89],period); fprintf(fp_ou,"\n",text[85]); - fputs("
%s
%s: %s
%s
\n",fp_ou); + close_html_header(fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); fputs("\n",fp_ou); if(BytesInSitesUsersReport) fprintf(fp_ou,"\n",text[100],text[91],text[93],text[103]); @@ -197,7 +183,7 @@ void siteuser(void) } if(BlockIt[0]!='\0') - sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,ourl); + sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,ourl); else BlockImage[0]='\0'; if(strcmp(url,ourl) != 0 && nsitesusers) { @@ -214,6 +200,7 @@ void siteuser(void) obytes=nbytes; } } + fclose(fp_in); if(nsitesusers) { fprintf(fp_ou,"\n",regs,ourl,ourl,users); @@ -221,13 +208,8 @@ void siteuser(void) unlink(general2); - fputs("
%s%s%s%s
%d%s%s
\n
\n",fp_ou); - - show_info(fp_ou); - - fputs("\n\n",fp_ou); - - fclose(fp_in); + fputs("\n",fp_ou); + write_html_trailer(fp_ou); fclose(fp_ou); if(users) diff --git a/squidguard_report.c b/squidguard_report.c index 4bd9cf2..6f60820 100644 --- a/squidguard_report.c +++ b/squidguard_report.c @@ -82,25 +82,12 @@ void squidguard_report(void) exit(1); } - fprintf(fp_ou, "\n\n\n \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); - if(strlen(FontFace) > 0) fprintf(fp_ou,"\n",FontFace); - fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou, "../../.."); - else - show_sarg(fp_ou,".."); - fputs("
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("SQUIDGUARD")); fprintf(fp_ou,"\n",text[89],period); fprintf(fp_ou,"\n",text[120]); - fputs("
%s
%s: %s
%s
\n",fp_ou); + close_html_header(fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); fputs("\n",fp_ou); fprintf(fp_ou,"\n",text[98],text[111],text[110],text[91],text[121]); @@ -173,14 +160,10 @@ void squidguard_report(void) fprintf(fp_ou,"\n",name,ip,data,hora,url,url,rule); } - - fputs("
%s%s%s%s%s
%s%s%s-%s%s%s
\n",fp_ou); - - show_info(fp_ou); - - fputs("\n\n",fp_ou); - fclose(fp_in); + + fputs("
\n",fp_ou); + write_html_trailer(fp_ou); fclose(fp_ou); unlink(squidguard_in); diff --git a/topsites.c b/topsites.c index 906e028..e4d4d81 100644 --- a/topsites.c +++ b/topsites.c @@ -216,39 +216,22 @@ void topsites(void) exit(1); } - regs=0; - - fprintf(fp_ou, "\n\n\n \n",CharSet); - css(fp_ou); - fputs("\n",fp_ou); - fprintf(fp_ou,"\n",BgColor,TxColor,BgImage); - write_logo_image(fp_ou); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ou,"../../.."); - else - show_sarg(fp_ou, ".."); - - fputs("
\n",fp_ou); - fprintf(fp_ou,"\n",Title); - + write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Top sites")); fprintf(fp_ou,"\n",text[89],period); - fprintf(fp_ou,"\n",text[83],TopSitesNum,text[84]); - fputs("
%s
%s: %s
%s %s %s
\n",fp_ou); + fprintf(fp_ou,"%s %d %s\n",text[83],TopSitesNum,text[84]); + close_html_header(fp_ou); - fputs("
\n",fp_ou); + fputs("
\n",fp_ou); fputs("\n",fp_ou); fprintf(fp_ou," \ \ \n", \ text[100],text[91],text[92],text[93],text[99]); - regs=1; + regs=0; ntopsites = 0; - while(fgets(buf,sizeof(buf),fp_in)!=NULL) { - if(regs>atoi(TopSitesNum)) - break; + while(regs ",wwwDocumentRoot,BlockIt,url); + sprintf(BlockImage," ",wwwDocumentRoot,BlockIt,url); else BlockImage[0]='\0'; - fprintf(fp_ou,"\n",regs,BlockImage,url,url,wwork1,wwork2,wwork3); + fprintf(fp_ou,"\n",regs,BlockImage,url,url,wwork1,wwork2,wwork3); regs++; } - - - fputs("
%s%s%s%s%s
%d%s%s%s%s%s
%d%s%s%s%s%s
\n
\n",fp_ou); - - show_info(fp_ou); - - fputs("\n\n",fp_ou); - fclose(fp_in); + + fputs("\n",fp_ou); + write_html_trailer(fp_ou); fclose(fp_ou); return; diff --git a/topuser.c b/topuser.c index a5572d4..55058eb 100644 --- a/topuser.c +++ b/topuser.c @@ -48,6 +48,7 @@ void topuser(void) char ipantes[MAXLEN], nameantes[MAXLEN]; char sfield[10]="2,2"; char order[255]="-r"; + char title[80]; int totuser=0; int topcount=0; char *s; @@ -229,33 +230,25 @@ void topuser(void) exit(1); } - fprintf(fp_top3, "\n\n\n \n",CharSet); - css(fp_top3); - fputs("\n",fp_top3); - write_logo_image(fp_top3); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_top3, "../../.."); - else - show_sarg(fp_top3, ".."); - fputs("
\n",fp_top3); - fprintf(fp_top3,"\n",Title); + snprintf(title,sizeof(title),_("SARG report for %s"),period); + write_html_header(fp_top3,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,title); fprintf(fp_top3,"\n",text[89],period); fprintf(fp_top3,"\n",text[104],TopuserSortField,TopuserSortOrder); fprintf(fp_top3,"\n",text[137]); - fputs("
%s
%s: %s
%s: %s, %s
%s
\n",fp_top3); + close_html_header(fp_top3); - fputs("
\n",fp_top3); + fputs("
\n",fp_top3); fputs("\n",fp_top3); - if((ReportType & REPORT_TYPE_TOPSITES) != 0 && !Privacy) fprintf(fp_top3,"\n",text[119]); - if((ReportType & REPORT_TYPE_SITES_USERS) != 0 && !Privacy) fprintf(fp_top3,"\n",text[85]); - if(dansguardian_count) fprintf(fp_top3,"\n",text[128]); - if(squidguard_count) fprintf(fp_top3,"\n",text[122]); - if ((ReportType & REPORT_TYPE_DOWNLOADS) != 0 && download_count && !Privacy && ndownload) fprintf(fp_top3,"\n",text[125]); - if ((ReportType & REPORT_TYPE_DENIED) != 0 && denied_count && !Privacy) fprintf(fp_top3,"\n",text[118]); - if ((ReportType & REPORT_TYPE_AUTH_FAILURES) != 0 && authfail_count && !Privacy) fprintf(fp_top3,"\n",text[117]); - if(smartfilter) fprintf(fp_top3,"\n",text[116]); + if((ReportType & REPORT_TYPE_TOPSITES) != 0 && !Privacy) fprintf(fp_top3,"\n",text[119]); + if((ReportType & REPORT_TYPE_SITES_USERS) != 0 && !Privacy) fprintf(fp_top3,"\n",text[85]); + if(dansguardian_count) fprintf(fp_top3,"\n",text[128]); + if(squidguard_count) fprintf(fp_top3,"\n",text[122]); + if ((ReportType & REPORT_TYPE_DOWNLOADS) != 0 && download_count && !Privacy && ndownload) fprintf(fp_top3,"\n",text[125]); + if ((ReportType & REPORT_TYPE_DENIED) != 0 && denied_count && !Privacy) fprintf(fp_top3,"\n",text[118]); + if ((ReportType & REPORT_TYPE_AUTH_FAILURES) != 0 && authfail_count && !Privacy) fprintf(fp_top3,"\n",text[117]); + if(smartfilter) fprintf(fp_top3,"\n",text[116]); + if(UserAgentLog[0] != '\0' && useragent_count) fprintf(fp_top3,"\n",_("Useragent")); fputs("\n",fp_top3); if ((ReportType & REPORT_TYPE_TOPUSERS) == 0) { @@ -320,7 +313,7 @@ void topuser(void) if(nacc < 1) continue; ntopuser = 1; - if(TopUsersNum > 0 && topcount >= TopUsersNum) goto final; + if(TopUsersNum > 0 && topcount >= TopUsersNum) break; tnbytes=nbytes; tnelap=elap; @@ -358,10 +351,10 @@ void topuser(void) fputs("",fp_top3); @@ -457,29 +451,15 @@ void topuser(void) fputs("\n",fp_top3); } - if(UserAgentLog[0] != '\0') { - fputs("\n",fp_top3); - fputs("\n",fp_top3); - fputs("\n",fp_top3); - } - - fputs("
  
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
%s
",fp_top3); #ifdef HAVE_GD if(Graphs) { - fprintf(fp_top3,"\"G\" ",user,ImageFile,text[126]); + fprintf(fp_top3,"\"G\" ",user,ImageFile,text[126]); } #endif - fprintf(fp_top3,"",fp_top3); if((TopUserFields & TOPUSERFIELDS_NUM) != 0) fputs("
Useragent Report
",fp_top3); - - show_info(fp_top3); - -final: - fclose(fp_top1); - unlink(top1); + fputs("\n",fp_top3); + write_html_trailer(fp_top3); + fclose(fp_top3); if((fp_ou=fopen(tusr,"w"))==NULL) { fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],tusr); exit(1); } - fprintf(fp_ou,"%d\n",totuser); - - fputs("\n\n",fp_top3); - fclose(fp_top3); fclose(fp_ou); return; diff --git a/useragent.c b/useragent.c index 54d1a79..461d23f 100644 --- a/useragent.c +++ b/useragent.c @@ -89,7 +89,8 @@ void useragent(void) } buildymd(day,month,year,wdate); ndate=atoi(wdate); - if (ndateduntil) continue; + if (ndateduntil) break; if(totregsl == 1) strcpy(idate,data); strcpy(fdate,data); @@ -116,6 +117,7 @@ void useragent(void) fprintf(fp_ou,"%s\t%s\t%s\n",ip,agent,user); user[0]='\0'; + useragent_count++; } if(debug) { @@ -153,28 +155,17 @@ void useragent(void) if(debug) debuga("%s",text[72]); - fprintf(fp_ht, "\n\n\n \n",CharSet); - css(fp_ht); - fputs("\n",fp_ht); - fputs("\n",fp_ht); - write_logo_image(fp_ht); - - if(IndexTree == INDEX_TREE_DATE) - show_sarg(fp_ht, "../../.."); - else - show_sarg(fp_ht,".."); - fputs("
\n",fp_ht); - fprintf(fp_ht,"\n",text[105]); + write_html_header(fp_ht,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Squid Useragent's Report")); + fprintf(fp_ht,"\n",text[105]); fprintf(fp_ht,"\n",text[89],idate,fdate); - fputs("
%s
%s
%s: %s - %s
\n",fp_ht); + close_html_header(fp_ht); - fputs("
\n",fp_ht); + fputs("

\n",fp_ht); - fputs("
\n",fp_ht); - fputs("
\n",fp_ht); + fputs("
\n",fp_ht); fputs("",fp_ht); - fprintf(fp_ou,"\n",text[98],text[106]); + fprintf(fp_ht,"\n",text[98],text[106]); while(fgets(buf,sizeof(buf),fp_in)!=NULL) { getword_start(&gwarea,buf); @@ -211,7 +202,6 @@ void useragent(void) fputs("
  
%s%s
%s%s
\n",fp_ht); fclose(fp_in); - fclose(fp_ou); sprintf(csort,"sort -t \"\t\" -k 2,2 -o \"%s\" \"%s\"",tmp3,tmp2); cstatus=system(csort); @@ -282,14 +272,9 @@ void useragent(void) unlink(tmp2); - if((fp_ht=fopen(hfile,"a"))==NULL) { - fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],hfile); - exit(1); - } + fputs("

\n",fp_ht); - fputs("

\n",fp_ht); - - fputs("
\n",fp_ht); + fputs("
\n",fp_ht); fprintf(fp_ht,"\n",text[106],text[107]); perc=0.; @@ -305,12 +290,10 @@ void useragent(void) fprintf(fp_ht,"\n",gwarea.current,nagent,perc); } - - fputs("
%s%s%%
%s%d%3.2lf
\n",fp_ht); - show_info(fp_ht); - - fputs("\n\n\n",fp_ht); fclose(fp_in); + + fputs("
\n",fp_ht); + write_html_trailer(fp_ht); fclose(fp_ht); unlink(tmp3); diff --git a/util.c b/util.c index 998e8df..109271c 100644 --- a/util.c +++ b/util.c @@ -1422,28 +1422,48 @@ void show_info(FILE *fp_ou) if(!ShowSargInfo) return; zdate(ftime, sizeof(ftime), DateFormat); - fprintf(fp_ou,"


%s %s-%s %s %s
\n",text[108],URL,PGM,VERSION,text[109],ftime); + fprintf(fp_ou,"
%s %s-%s %s %s
\n",text[108],URL,PGM,VERSION,text[109],ftime); } -void show_sarg(FILE *fp_ou, const char *ind) +void show_sarg(FILE *fp_ou, int depth) { - if(ShowSargLogo) fprintf(fp_ou,"
\n\n\n
\"Sarg\" Squid Analysis Report Generator
 
\n",ind); + int i; + + if(!ShowSargLogo) return; + fputs("
\"Sarg\" Squid Analysis Report Generator
\n",fp_ou); } void write_logo_image(FILE *fp_ou) { if(LogoImage[0]!='\0') - fprintf(fp_ou, "
\n\n\n
\"Logo\" %s
\n
\n",LogoImage,Width,Height,LogoText); + fprintf(fp_ou, "
\"Logo\" %s
\n",LogoImage,Width,Height,LogoText); } -void write_html_header(FILE *fp_ou, const char * ind) +void write_html_header(FILE *fp_ou, int depth, const char *page_title) { - fprintf(fp_ou, "\n\n\n \n",CharSet); + //fputs("\n\n",fp_ou); + fputs("\n\n",fp_ou); + fprintf(fp_ou, "\n \n",CharSet); + if (page_title) fprintf(fp_ou,"%s\n",page_title); css(fp_ou); fprintf(fp_ou,"\n\n",FontFace,TitleFontSize,BgColor,BgImage); write_logo_image(fp_ou); - show_sarg(fp_ou, ind); - fprintf(fp_ou,"
\n\n
%s
\n
\n\n",Title); + show_sarg(fp_ou, depth); + fprintf(fp_ou,"
\n\n",Title); +} + +void close_html_header(FILE *fp_ou) +{ + fputs("
%s
\n",fp_ou); +} + +void write_html_trailer(FILE *fp_ou) +{ + show_info(fp_ou); + fputs("\n\n",fp_ou); } void output_html_string(FILE *fp_ou,const char *str) @@ -1518,16 +1538,6 @@ void url_module(const char *url, char *w2) } -void write_html_trailer(FILE *fp_ou) -{ - char ftime[128]; - - fputs("
\n",fp_ou); - zdate(ftime, sizeof(ftime), DateFormat); - show_info(fp_ou); - fputs("\n\n",fp_ou); -} - void version(void) { printf("SARG Version: %s\n",VERSION);