From: Frédéric Marchal Date: Thu, 10 Dec 2009 08:46:31 +0000 (+0000) Subject: Ported r144 from branches/v2_2_6_1 (useragent sort separator) X-Git-Tag: v2_2_7~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=78015ea0b8e0d8441df164ac9bd19302128688f7;p=thirdparty%2Fsarg.git Ported r144 from branches/v2_2_6_1 (useragent sort separator) --- diff --git a/CMakeLists.txt b/CMakeLists.txt index f7d6320..9dd4a0f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ PROJECT(sarg C) SET(sarg_VERSION 2) SET(sarg_REVISION 2) SET(sarg_BUILD "7rc1") -SET(sarg_BUILDDATE "Dec-09-2009") +SET(sarg_BUILDDATE "Dec-10-2009") INCLUDE(AddFileDependencies) INCLUDE(CheckIncludeFile) diff --git a/ChangeLog b/ChangeLog index 6ed3df6..e3417d6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,8 +2,6 @@ SARG ChangeLog Dec-03-2009 Version 2.2.7 - Extra compile and run time protection (FORTIFY_SOURCE) fixed in configure. - - Invalid sort field separator in useragent.c - Thanks to Maxim Britov - Use tabulations as columns separator in intermediary files to avoid problems when a field of the log contains a space. - Input log file type detection partly rewritten to clearly distinguish which type is processed where. - Read the input log file from standard input if log file name is -. @@ -12,6 +10,7 @@ Dec-09-2009 Version 2.2.6.1 - Remove unecessary dependency on off_t. - Configuration doesn't fail if rlim_t is not available. - Test for the availability of -Werror=xxx flags in gcc. + - Fix sort delimiter when reading useragent log (thanks to Maxim Britov). Oct-14-2009 Version 2.2.6 - Protection against buffer overflows in getword and friends and report the origin of the error instead of always blaming access.log. diff --git a/getconf.c b/getconf.c index 93312d6..c4d6142 100644 --- a/getconf.c +++ b/getconf.c @@ -294,7 +294,7 @@ static void parmtest(char *buf) if (getparam_string("privacy",buf,Privacy,sizeof(Privacy))>0) return; - if (getparam_quoted("privacy_string",buf,ExcludeString,sizeof(ExcludeString))>0) return; + if (getparam_quoted("privacy_string",buf,PrivacyString,sizeof(PrivacyString))>0) return; if (getparam_string("privacy_string_color",buf,PrivacyStringColor,sizeof(PrivacyStringColor))>0) return; diff --git a/include/info.h b/include/info.h index fc91f62..1667894 100755 --- a/include/info.h +++ b/include/info.h @@ -1,3 +1,3 @@ -#define VERSION PACKAGE_VERSION" Dec-09-2009" +#define VERSION PACKAGE_VERSION" Dec-10-2009" #define PGM PACKAGE_NAME #define URL "http://sarg.sourceforge.net" diff --git a/useragent.c b/useragent.c index faff6d9..ff0789a 100644 --- a/useragent.c +++ b/useragent.c @@ -51,8 +51,6 @@ void useragent(void) ipbefore[0]='\0'; namebefore[0]='\0'; - sprintf(hfile,"%s/%s/useragent.html", outdir,period); - sprintf(tmp3,"%s/squagent.unsort",TempDir); sprintf(tmp2,"%s/squagent.log",TempDir); @@ -100,7 +98,7 @@ void useragent(void) if(strlen(user) == 0) strcpy(user,ip); - fprintf(fp_ou,"%s\\%s\\%s\\%s\\\n",ip,data,agent,user); + fprintf(fp_ou,"%s\t%s\t%s\t%s\n",ip,data,agent,user); user[0]='\0'; } @@ -121,7 +119,7 @@ void useragent(void) debuga("%s: %s",text[54],tmp2); } - sprintf(csort,"sort -n -t \"\\\" -k 4,4 -k 3,3 -k 2,2 -k 1,1 -o \"%s\" \"%s\"",tmp2,tmp3); + sprintf(csort,"sort -n -t \"\t\" -k 4,4 -k 3,3 -k 2,2 -k 1,1 -o \"%s\" \"%s\"",tmp2,tmp3); cstatus=system(csort); if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) { fprintf(stderr, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus)); @@ -136,6 +134,7 @@ void useragent(void) unlink(tmp3); + sprintf(hfile,"%s/%s/useragent.html", outdir,period); if((fp_ht=fopen(hfile,"w"))==NULL) { fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],hfile); exit(1); @@ -146,8 +145,8 @@ void useragent(void) fprintf(fp_ht, "\n\n\n \n",CharSet); fputs("\n",fp_ht); - if(strlen(FontFace) > 0) fprintf(fp_ht,"\n",FontFace); - fprintf(fp_ht,"\n",BgColor,TxColor,BgImage); + if(FontFace[0] != '\0') fprintf(fp_ht,"\n",FontFace); + fprintf(fp_ht,"\n",BgColor,TxColor,BgImage); write_logo_image(fp_ht); if(strcmp(IndexTree,"date") == 0) @@ -168,10 +167,10 @@ void useragent(void) fputs("
\n",fp_ht); fputs("",fp_ht); - fprintf(fp_ou,"\n",HeaderBgColor,FontSize,HeaderColor,text[98],HeaderBgColor,FontSize,HeaderColor,text[106]); + fprintf(fp_ou,"\n",HeaderBgColor,FontSize,HeaderColor,text[98],HeaderBgColor,FontSize,HeaderColor,text[106]); while(fgets(buf,sizeof(buf),fp_in)!=NULL) { - if (getword(ip,sizeof(ip),buf,'\\')<0) { + if (getword(ip,sizeof(ip),buf,'\t')<0) { printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp2); exit(1); } @@ -184,19 +183,19 @@ void useragent(void) } else strcpy(ip,namebefore); } - if (getword(data,sizeof(data),buf,'\\')<0 || getword(agent,sizeof(agent),buf,'\\')<0 || - getword(user,sizeof(user),buf,'\\')<0) { + if (getword(data,sizeof(data),buf,'\t')<0 || getword(agent,sizeof(agent),buf,'\t')<0 || + getword(user,sizeof(user),buf,'\t')<0) { printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp2); exit(1); } if(strcmp(user,user_old) != 0) { - fprintf(fp_ht,"\n",TxBgColor,FontSize,user,TxBgColor,FontSize,agent); + fprintf(fp_ht,"\n",TxBgColor,FontSize,user,TxBgColor,FontSize,agent); strcpy(user_old,user); strcpy(agent_old,agent); } else { if(strcmp(agent,agent_old) != 0) { - fprintf(fp_ht,"\n",TxBgColor,FontSize,agent); + fprintf(fp_ht,"\n",TxBgColor,FontSize,agent); strcpy(agent_old,agent); } } @@ -206,7 +205,7 @@ void useragent(void) fclose(fp_in); fclose(fp_ou); - sprintf(csort,"sort -n -t \"\\\" -k 3,3 -o \"%s\" \"%s\"",tmp3,tmp2); + sprintf(csort,"sort -n -t \"\t\" -k 3,3 -o \"%s\" \"%s\"",tmp3,tmp2); cstatus=system(csort); if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) { fprintf(stderr, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus)); @@ -229,8 +228,8 @@ void useragent(void) agent_old[0]='\0'; while(fgets(buf,sizeof(buf),fp_in)!=NULL) { - if (getword(ip,sizeof(ip),buf,'\\')<0 || getword(data,sizeof(data),buf,'\\')<0 || - getword(agent,sizeof(agent),buf,'\\')<0) { + if (getword(ip,sizeof(ip),buf,'\t')<0 || getword(data,sizeof(data),buf,'\t')<0 || + getword(agent,sizeof(agent),buf,'\t')<0) { printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp); exit(1); } @@ -293,7 +292,7 @@ void useragent(void) perc=atoi(tagent) * 100; perc=perc / agentot2; - fprintf(fp_ht,"\n",TxBgColor,FontSize,buf,TxBgColor,FontSize,atoi(tagent),TxBgColor,FontSize,perc); + fprintf(fp_ht,"\n",TxBgColor,FontSize,buf,TxBgColor,FontSize,atoi(tagent),TxBgColor,FontSize,perc); } fputs("
%s%s
%s%s
%s%s
%s%s
%s
%s
%s%d%3.2f
%s%d%3.2f
\n",fp_ht);