"Fossies" - the Fresh Open Source Software Archive

Member "sarg-2.4.0/smartfilter.c" (24 Dec 2019, 11173 Bytes) of package /linux/privat/sarg-2.4.0.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "smartfilter.c" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 2.3.11_vs_2.4.0.

    1 /*
    2  * SARG Squid Analysis Report Generator      http://sarg.sourceforge.net
    3  *                                                            1998, 2015
    4  *
    5  * SARG donations:
    6  *      please look at http://sarg.sourceforge.net/donations.php
    7  * Support:
    8  *     http://sourceforge.net/projects/sarg/forums/forum/363374
    9  * ---------------------------------------------------------------------
   10  *
   11  *  This program is free software; you can redistribute it and/or modify
   12  *  it under the terms of the GNU General Public License as published by
   13  *  the Free Software Foundation; either version 2 of the License, or
   14  *  (at your option) any later version.
   15  *
   16  *  This program is distributed in the hope that it will be useful,
   17  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   18  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   19  *  GNU General Public License for more details.
   20  *
   21  *  You should have received a copy of the GNU General Public License
   22  *  along with this program; if not, write to the Free Software
   23  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
   24  *
   25  */
   26 
   27 #include "include/conf.h"
   28 #include "include/defs.h"
   29 
   30 void smartfilter_report(void)
   31 {
   32     FILE *fp_in = NULL, *fp_ou = NULL, *fp_user = NULL;
   33 
   34     char buf[MAXLEN];
   35     char url[MAXLEN];
   36     char csort[255];
   37     char smart_in[MAXLEN];
   38     char smart_ou[MAXLEN];
   39     char sites[MAXLEN];
   40     char report[MAXLEN];
   41     char ip[MAXLEN];
   42     char user[MAXLEN];
   43     char ouser[MAXLEN];
   44     char data[15];
   45     char hora[15];
   46     char smartcat[256];
   47     char ftime[128];
   48     char smartuser[MAXLEN];
   49     int cstatus;
   50     struct getwordstruct gwarea;
   51     const struct userinfostruct *uinfo;
   52 
   53     ouser[0]='\0';
   54 
   55     if (snprintf(smart_in,sizeof(smart_in),"%s/smartfilter.int_unsort",tmp)>=sizeof(smart_in)) {
   56         debuga(__FILE__,__LINE__,_("Path too long: "));
   57         debuga_more("%s/smartfilter.int_unsort\n",tmp);
   58         exit(EXIT_FAILURE);
   59     }
   60     if (snprintf(sites,sizeof(sites),"%s/sarg-sites",outdirname)>=sizeof(sites)) {
   61         debuga(__FILE__,__LINE__,_("Path too long: "));
   62         debuga_more("%s/sarg-sites\n",outdirname);
   63         exit(EXIT_FAILURE);
   64     }
   65     if (snprintf(smart_ou,sizeof(smart_ou),"%s/smartfilter.int_log",tmp)>=sizeof(smart_ou)) {
   66         debuga(__FILE__,__LINE__,_("Path too long: "));
   67         debuga_more("%s/smartfilter.int_log\n",tmp);
   68         exit(EXIT_FAILURE);
   69     }
   70     if (snprintf(report,sizeof(report),"%s/smartfilter.html",outdirname)>=sizeof(report)) {
   71         debuga(__FILE__,__LINE__,_("Path too long: "));
   72         debuga_more("%s/smartfilter.html\n",outdirname);
   73         exit(EXIT_FAILURE);
   74     }
   75 
   76     if (snprintf(csort,sizeof(csort),"sort -n -t \"\t\" -k 1,1 -k 2,2 -k 3,3 -o \"%s\" \"%s\"",smart_ou,smart_in)>=sizeof(csort)) {
   77         debuga(__FILE__,__LINE__,_("Cannot build the sort command to sort file \"%s\"\n"),smart_in);
   78         exit(EXIT_FAILURE);
   79     }
   80     cstatus=system(csort);
   81     if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
   82         debuga(__FILE__,__LINE__,_("sort command return status %d\n"),WEXITSTATUS(cstatus));
   83         debuga(__FILE__,__LINE__,_("sort command: %s\n"),csort);
   84         exit(EXIT_FAILURE);
   85     }
   86     if ((fp_in=fopen(smart_ou,"r"))==NULL) {
   87         debuga(__FILE__,__LINE__,_("Cannot open file \"%s\": %s\n"),smart_ou,strerror(errno));
   88         debuga(__FILE__,__LINE__,_("sort command: %s\n"),csort);
   89         exit(EXIT_FAILURE);
   90     }
   91     if (!KeepTempLog && unlink(smart_in)) {
   92         debuga(__FILE__,__LINE__,_("Cannot delete \"%s\": %s\n"),smart_in,strerror(errno));
   93         exit(EXIT_FAILURE);
   94     }
   95 
   96     if ((fp_ou=fopen(report,"w"))==NULL) {
   97         debuga(__FILE__,__LINE__,_("Cannot open file \"%s\": %s\n"),report,strerror(errno));
   98         exit(EXIT_FAILURE);
   99     }
  100 
  101     fprintf(fp_ou, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
  102     fputs("</head>\n",fp_ou);
  103     if (strlen(FontFace) > 0) fprintf(fp_ou,"<font face=%s>\n",FontFace);
  104     fprintf(fp_ou,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
  105     fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ou);
  106     write_logo_image(fp_ou);
  107 
  108     fprintf(fp_ou,"<tr><th align=\"center\"><b><font color=\"%s\" size=\"+1\">%s</font></b></th></tr>\n",TiColor,Title);
  109     fprintf(fp_ou,"<tr><td align=\"center\" bgcolor=\"%s\"><font size=\"%s\">",HeaderBgColor,FontSize);
  110     fprintf(fp_ou,_("Period: %s"),period.html);
  111     fputs("</font></td></tr>\n",fp_ou);
  112     fprintf(fp_ou,"<tr><th bgcolor=\"%s\" align=\"center\"><font size=\"%s\">%s</font></th></tr>\n",HeaderBgColor,FontSize,_("SmartFilter"));
  113     fputs("</table></div>\n",fp_ou);
  114 
  115     fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"2\">\n",fp_ou);
  116     fputs("<tr><td></td></tr>\n",fp_ou);
  117     fputs("<tr><td></td></tr>\n",fp_ou);
  118     fputs("<tr><td></td></tr>\n",fp_ou);
  119     fprintf(fp_ou,"<tr><th bgcolor=%s><font size=\"%s\">%s</font></th><th bgcolor=\"%s\"><font size=\"%s\">%s</font></th><th bgcolor=\"%s\"><font size=\"%s\">%s</font></th><th bgcolor=\"%s\"><font size=\"%s\">%s</font></th><th bgcolor=\"%s\"><font size=\"%s\">%s</font></th></tr>\n",HeaderBgColor,FontSize,_("USERID"),HeaderBgColor,FontSize,_("IP/NAME"),HeaderBgColor,FontSize,_("DATE/TIME"),HeaderBgColor,FontSize,_("ACCESSED SITE"),HeaderBgColor,FontSize,_("SMARTFILTER"));
  120 
  121     while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
  122         getword_start(&gwarea,buf);
  123         if (getword(user,sizeof(user),&gwarea,'\t')<0 || getword(data,sizeof(data),&gwarea,'\t')<0 ||
  124             getword(hora,sizeof(hora),&gwarea,'\t')<0 || getword(ip,sizeof(ip),&gwarea,'\t')<0 ||
  125             getword(url,sizeof(url),&gwarea,'\t')<0 || getword(smartcat,sizeof(smartcat),&gwarea,'\n')<0) {
  126             debuga(__FILE__,__LINE__,_("Invalid record in file \"%s\"\n"),smart_ou);
  127             exit(EXIT_FAILURE);
  128         }
  129 
  130         uinfo=userinfo_find_from_id(user);
  131         if (!uinfo) {
  132             debuga(__FILE__,__LINE__,_("Unknown user ID %s in file \"%s\"\n"),user,smart_ou);
  133             exit(EXIT_FAILURE);
  134         }
  135         if (strcmp(ouser,user) != 0) {
  136             strcpy(ouser,user);
  137             format_path(__FILE__, __LINE__, smartuser, sizeof(smartuser), "%s/denied_%s.html", outdirname, uinfo->filename);
  138             if (fp_user) {
  139                 fputs("</table>\n",fp_user);
  140                 if (ShowSargInfo) {
  141                     zdate(ftime, sizeof(ftime), df);
  142                     fputs("<br><br><div align=\"center\"><font size=\"-2\">",fp_user);
  143                     fprintf(fp_user,_("Generated by <a href=\"%s\">%s-%s</a> on %s"),URL,PGM,VERSION,ftime);
  144                     fputs("</font></div>\n",fp_user);
  145                 }
  146                 fputs("</body>\n</html>\n",fp_user);
  147                 if (fclose(fp_user)==EOF) {
  148                     debuga(__FILE__,__LINE__,_("Write error in \"%s\": %s\n"),smartuser,strerror(errno));
  149                     exit(EXIT_FAILURE);
  150                 }
  151                 fp_user=NULL;
  152             }
  153             if ((fp_user = fopen(smartuser, "a")) == 0) {
  154                 debuga(__FILE__,__LINE__,_("Cannot open file \"%s\": %s\n"),smartuser,strerror(errno));
  155                 exit(EXIT_FAILURE);
  156             }
  157 
  158             fputs("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"",fp_ou);
  159             fputs(" \"http://www.w3.org/TR/html4/loose.dtd\">\n",fp_ou);
  160             fputs("<html>\n",fp_user);
  161             fputs("<head>\n",fp_user);
  162             fprintf(fp_user,"  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
  163             fputs("</head>\n",fp_user);
  164 
  165             if (FontFace[0] != 0) {
  166                 /*
  167                 Before merging the sprintf and the fputs, the code looked like this:
  168                 sprintf(html2,"<font face=%s>\n",FontFace);
  169                 fputs(url,fp_user);
  170                 The two lines don't use the same buffer so the string formated by sprintf is not the string
  171                 written to fp_user. I (fmarchal) assumed it was a typo and replaced it by a fprintf but
  172                 that font tag is not valid outside of the body. So, the generated html was likely
  173                 containing garbage not rendered by the browser.
  174                 */
  175                 fprintf(fp_user,"<font face=%s>\n",FontFace);
  176             }
  177             fprintf(fp_user,"<body bgcolor=\"%s\" text=\"%s\" background=\"%s\">\n",BgColor,TxColor,BgImage);
  178             fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_user);
  179             if (LogoImage[0]!='\0') fprintf(fp_user,"<tr><th align=left><img src=\"%s\" border=\"0\" align=\"absmiddle\" width=\"%s\" height=\"%s\"><font color=\"%s\">%s</font>\n",LogoImage,Width,Height,LogoTextColor,LogoText);
  180             fprintf(fp_user,"<tr><th align=\"center\"><b><font color=\"%s\" size=\"+1\">%s</font></b></th></tr>\n",TiColor,Title);
  181             fputs("<tr><td align=center bgcolor=\"%s\"><font size=\"%s\">",fp_user);
  182             fprintf(fp_user,_("Period: %s"),period.html);
  183             fputs("</font></td></tr>\n",fp_user);
  184             fprintf(fp_user,"<tr><td align=\"center\" bgcolor=\"%s\"><font size=\"%s\">%s:</font><font size=\"%s\"> %s</font></td></tr>\n",HeaderBgColor,FontSize,_("User"),FontSize,uinfo->label);
  185             fputs("</table></div>\n",fp_user);
  186             fputs("<div align=\"center\"><table cellpadding=0 cellspacing=2>\n",fp_user);
  187             fputs("<tr><td></td></tr>\n",fp_user);
  188             fputs("<tr><td></td></tr>\n",fp_user);
  189             fputs("<tr><td></td></tr>\n",fp_user);
  190             fprintf(fp_user,"<tr><th bgcolor=%s><font size=%s>%s</font></th><th bgcolor=%s><font size=%s>%s</font></th><th bgcolor=%s><font size=%s>%s</font></th><th bgcolor=%s><font size=%s>%s</font></th><th bgcolor=%s><font size=%s>%s</font></th></tr>\n",HeaderBgColor,FontSize,_("USERID"),HeaderBgColor,FontSize,_("IP/NAME"),HeaderBgColor,FontSize,_("DATE/TIME"),HeaderBgColor,FontSize,_("ACCESSED SITE"),HeaderBgColor,FontSize,_("SMARTFILTER"));
  191         }
  192         fprintf(fp_user,"<tr><td bgcolor=%s align=center><font size=%s>%s</font></td><td bgcolor=%s align=center><font size=%s>%s</font></td><td bgcolor=%s align=center><font size=%s>%s-%s</font></td><td bgcolor=%s><font size=%s>%s</font></td><td bgcolor=%s><font size=%s>%s</font></td></th>\n",TxBgColor,FontSize,uinfo->label,TxBgColor,FontSize,ip,TxBgColor,FontSize,data,hora,TxBgColor,FontSize,url,TxBgColor,FontSize,smartcat);
  193 
  194         fprintf(fp_ou,"<tr><td bgcolor=%s align=center><font size=%s>%s</font></td><td bgcolor=%s align=center><font size=%s>%s</font></td><td bgcolor=%s align=center><font size=%s>%s-%s</font></td><td bgcolor=%s><font size=%s>%s</font></td><td bgcolor=%s><font size=%s>%s</font></td></th>\n",TxBgColor,FontSize,uinfo->label,TxBgColor,FontSize,ip,TxBgColor,FontSize,data,hora,TxBgColor,FontSize,url,TxBgColor,FontSize,smartcat);
  195     }
  196 
  197     fputs("</table>\n",fp_ou);
  198 
  199     if (ShowSargInfo) {
  200         zdate(ftime, sizeof(ftime), df);
  201         fputs("<br><br><div align=\"center\"><font size=\"-2\">",fp_ou);
  202         fprintf(fp_ou,_("Generated by <a href=\"%s\">%s-%s</a> on %s"),URL,PGM,VERSION,ftime);
  203         fputs("</font></div>\n",fp_ou);
  204     }
  205 
  206     fputs("</body>\n</html>\n",fp_user);
  207 
  208     if (fclose(fp_ou)==EOF) {
  209         debuga(__FILE__,__LINE__,_("Write error in \"%s\": %s\n"),report,strerror(errno));
  210         exit(EXIT_FAILURE);
  211     }
  212     if (fp_user) {
  213         fputs("</table>\n",fp_user);
  214         if (ShowSargInfo) {
  215             zdate(ftime, sizeof(ftime), df);
  216             fputs("<br><br><div align=\"center\"><font size=\"-2\">",fp_user);
  217             fprintf(fp_user,_("Generated by <a href=\"%s\">%s-%s</a> on %s"),URL,PGM,VERSION,ftime);
  218             fputs("</font></div>\n",fp_user);
  219         }
  220         fputs("</body>\n</html>\n",fp_user);
  221         if (fclose(fp_user)==EOF) {
  222             debuga(__FILE__,__LINE__,_("Write error in \"%s\": %s\n"),smartuser,strerror(errno));
  223             exit(EXIT_FAILURE);
  224         }
  225     }
  226 
  227     if (!KeepTempLog && unlink(smart_ou)) {
  228         debuga(__FILE__,__LINE__,_("Cannot delete \"%s\": %s\n"),smart_ou,strerror(errno));
  229         exit(EXIT_FAILURE);
  230     }
  231 
  232     return;
  233 }