home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / sarg1221.zip / html.c < prev    next >
C/C++ Source or Header  |  2002-10-14  |  21KB  |  538 lines

  1. /*
  2.  * sarg - Squid user management log
  3.  * Mar/98 - Pedro L Orso - orso@onda.com.br
  4.  */
  5.  
  6. #include "include/conf.h"
  7.  
  8. void htmlrel(const char *dirname, int debug, int iprel, int ipuser, char *BgColor, char *TxColor, char *TxBgColor, char *TiColor, char *LogoImage, char *LogoText, char *LogoTextColor, char *Width, char *Height, char *Title, char *BgImage, char *FontFace, char *HeaderColor, char *HeaderBgColor, char *FontSize, char *TempDir, char *UserSortField, char *UserSortOrder, char *DateFormat, int indexonly, char *PerUserLimitFile, char *PerUserLimit, char *Ip2Name)
  9.  
  10. {
  11.    DIR *dirp;
  12.    FILE *fp_in, *fp_ou, *fp_ip, *fp_ip2, *fp_usr, *fp_tt;
  13.  
  14.    struct dirent *direntp;
  15.    long long int nnbytes=0, unbytes=0, tnbytes=0, totbytes=0, totbytes2=0;
  16.    long long int totelap=0, totelap2=0, nnelap=0, unelap=0, tnelap=0;
  17.    long long int incache=0, oucache=0, tnincache=0, tnoucache=0, twork=0, twork2=0;
  18.    char arqin[MAXLEN], arqou[MAXLEN], arqper[MAXLEN], arqip[MAXLEN];
  19.    char nacc[20], nbytes[20], url[1024], purl[1024], tmsg[31], tmsg2[30], nelap[20], csort[MAXLEN];
  20.    char periodo[MAXLEN], usuario[MAXLEN], wusuario[MAXLEN], u2[MAXLEN], duser[MAXLEN];
  21.    char userbytes[20], userelap[20], userurl[1024], userip[MAXLEN], userhora[9], userdia[9];
  22.    char olduserip[MAXLEN], tmp2[MAXLEN], tmp3[MAXLEN], incac[20], oucac[20];
  23.    char denied_report[255];
  24.    char ttd1[3], ttd2[3], ttd3[5], ttt1[3], ttt2[3], ttt3[3];
  25.    char *str;
  26.    char ftime[128], warea[MAXLEN];
  27.    char wtemp[MAXLEN], totuser[8];
  28.    long long int tnacc=0, ttnacc=0, unacc=0;
  29.    float perc=0, perc2=0, ouperc=0, inperc=0;
  30.    char *s;
  31.    int  x;
  32.  
  33.    if(indexonly) return;
  34.    if(strstr(ReportType,"users_sites") == 0) return;
  35.  
  36.    strcpy(tmp2,TempDir);
  37.    strcat(tmp2,"/sargtmp.unsort");
  38.  
  39.    strcpy(tmp3,TempDir);
  40.    strcat(tmp3,"/sargtmp.log");
  41.  
  42. /*
  43.  * Obtem o periodo
  44.  */
  45.  
  46.    strcpy(arqper,dirname);
  47.    strcat(arqper,"/periodo");
  48.  
  49.    if ((fp_in = fopen(arqper, "r")) == 0){
  50.       fprintf(stderr, "SARG: (html1) %s: %s\n",text[45],arqper);
  51.       exit(1);
  52.    }
  53.  
  54.    fgets(periodo,sizeof(periodo),fp_in);
  55.    fclose(fp_in);
  56.  
  57. /*
  58.  * Obtem total geral de bytes trafegados
  59.  */
  60.    strcpy(arqper,dirname);
  61.    strcat(arqper,"/geral");
  62.  
  63.    if ((fp_in = fopen(arqper, "r")) == 0){
  64.       fprintf(stderr, "SARG: (html2) %s: %s\n",text[45],arqper);
  65.       exit(1);
  66.    }
  67.  
  68.    while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
  69.       if(strstr(buf,"TOTAL") == 0) {
  70.          getword(wtemp,buf,' ');
  71.          ttnacc+=my_atoll(buf);
  72.          getword(wtemp,buf,' ');
  73.          getword(wtemp,buf,' ');
  74.          totbytes+=my_atoll(wtemp);
  75.          getword(wtemp,buf,' ');
  76.          getword(wtemp,buf,' ');
  77.          getword(wtemp,buf,' ');
  78.          getword(wtemp,buf,' ');
  79.          getword(wtemp,buf,' ');
  80.          totelap+=my_atoll(wtemp);
  81.       }
  82.    }
  83.  
  84.    fclose(fp_in);
  85.  
  86.    dirp = opendir(dirname);
  87.    while ( (direntp = readdir( dirp )) != NULL ) {
  88.       if(strstr(direntp->d_name,".txt") ==0)
  89.          continue;
  90.  
  91.       strcpy(usuario,direntp->d_name);
  92.       wusuario[0]='\0';
  93.  
  94.       striptxt:
  95.       getword(warea,usuario,'.');
  96.       strcpy(denied_report,warea);
  97.       strcat(wusuario,warea);
  98.  
  99.       if(strcmp(usuario,"txt") !=0) {
  100.          strcat(wusuario,".");
  101.          goto striptxt;
  102.       }
  103.  
  104.       report_day(dirname, wusuario, iprel, userip, BgColor, TxColor, TxBgColor, TiColor, LogoImage, LogoText, LogoTextColor, Width, Height, Title, BgImage, FontFace, HeaderColor, HeaderBgColor, FontSize, TempDir, UserSortField, UserSortOrder, DateFormat, periodo);
  105.  
  106.       strcpy(usuario,wusuario);
  107.       strcpy(arqin,dirname);
  108.       strcat(arqin,"/");
  109.       strcpy(arqou,arqin);
  110.       strcat(arqou,usuario);
  111.       strcat(arqou,".html");
  112.       strcpy(duser,arqin);
  113.       strcat(duser,"denied_");
  114.       strcat(arqin,direntp->d_name);
  115.  
  116.       if((str=(char *) strstr(denied_report, "_")) != (char *) NULL ) {
  117.          if((str=(char *) strstr(str+1, "_")) != (char *) NULL )
  118.             fixip(denied_report);
  119.       }
  120.       strcat(duser,denied_report);
  121.       strcat(duser,".html");
  122.       if(access(duser, R_OK) != 0)
  123.          denied_report[0]='\0';
  124.  
  125.       if ((fp_in = fopen(arqin, "r")) == 0){
  126.          fprintf(stderr, "SARG: (html3) %s: %s\n",text[45],arqin);
  127.          exit(1);
  128.       }
  129.  
  130.       while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
  131.          getword(wtemp,buf,' ');
  132.          tnacc+=my_atoll(wtemp);
  133.          getword(wtemp,buf,' ');
  134.          tnbytes+=my_atoll(wtemp);
  135.          getword(wtemp,buf,' ');
  136.          getword(wtemp,buf,' ');
  137.          getword(wtemp,buf,' ');
  138.          tnelap+=my_atoll(wtemp);
  139.          getword(wtemp,buf,' ');
  140.          tnincache+=my_atoll(wtemp);
  141.          getword(wtemp,buf,' ');
  142.          tnoucache+=my_atoll(wtemp);
  143.       }
  144.  
  145.       fclose(fp_in);
  146.  
  147.       if ((fp_in = fopen(arqin, "r")) == 0){
  148.          fprintf(stderr, "SARG: (html4) %s: %s\n",text[45],arqin);
  149.          exit(1);
  150.       }
  151.  
  152.       if ((fp_ou = fopen(arqou, "w")) == 0){
  153.          fprintf(stderr, "SARG: (html5) %s: %s\n",text[45],arqou);
  154.          exit(1);
  155.       }
  156.  
  157. /*
  158.  * Grava HEADER para usuario
  159.  */
  160.  
  161.       fputs("<html>\n",fp_ou);
  162.       fputs("<head>\n",fp_ou);
  163.       sprintf(html,"  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
  164.       fputs(html,fp_ou);
  165.       fputs("</head>\n",fp_ou);
  166.  
  167.       // DAS: Using style=font-family more corresponds to standards. 
  168.       sprintf(html,"<body bgcolor=%s text=%s background='%s' style='font-family:%s;'>\n",BgColor,TxColor,BgImage,FontFace);
  169.       fputs(html,fp_ou);
  170.       fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ou);
  171.  
  172.       if(strlen(LogoImage) > 0) {
  173.          sprintf(html,"<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);
  174.          fputs(html,fp_ou);
  175.       }
  176.  
  177.       sprintf(html,"<tr><th align=center colspan=2><b><font color=%s size=+1>%s</font></b></th></tr>\n",TiColor,Title);
  178.       fputs(html,fp_ou);
  179.       fputs("<tr><td></td></tr><tr><td></td></tr>",fp_ou);
  180.  
  181.       strcpy(u2,usuario);
  182.       if(ipuser){
  183.          strcpy(u2,usuario);
  184.          fixip(u2);
  185.       }
  186.       if(strcmp(Ip2Name,"yes") == 0)
  187.          ip2name(u2);
  188.  
  189.       if(UserTabFile[0] != '\0') {
  190.          sprintf(warea,":%s:",u2);
  191.          if((str=(char *) strstr(userfile,warea)) != (char *) NULL ) {
  192.             z1=0;
  193.             str2=(char *) strstr(str+1,":");
  194.             str2++;
  195.             bzero(name, MAXLEN);
  196.             while(str2[z1] != ':') {
  197.                name[z1]=str2[z1];
  198.                z1++;
  199.             }
  200.          } else strcpy(name,u2);
  201.       } else strcpy(name,u2);
  202.  
  203.       fputs("</table></center>\n",fp_ou);
  204.       fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ou);
  205.  
  206.       sprintf(html,"<tr><td align=right bgcolor=%s><font size=%s>%s:</font></td><td align=left bgcolor=%s><font size=%s> %s</font></td></td></tr>\n",HeaderBgColor,FontSize,text[89],TxBgColor,FontSize,periodo);
  207.       fputs(html,fp_ou);
  208.       sprintf(html,"<tr><td align=right bgcolor=%s><font size=%s>%s:</font></td><td align=left bgcolor=%s><font size=%s> %s</font></td></td></tr>\n",HeaderBgColor,FontSize,text[90],TxBgColor,FontSize,name);
  209.       fputs(html,fp_ou);
  210.       sprintf(html,"<tr><td align=right bgcolor=%s><font size=%s>%s:</font></td><td align=left bgcolor=%s><font size=%s> %s, %s</font></td></td></tr>\n",HeaderBgColor,FontSize,text[104],TxBgColor,FontSize,UserSortField,UserSortOrder);
  211.       fputs(html,fp_ou);
  212.       sprintf(html,"<tr><td align=center bgcolor=%s colspan=2><font size=%s>%s %s</font></td></tr>\n",HeaderBgColor,FontSize,text[32],text[55]);
  213.       fputs(html,fp_ou);
  214.  
  215.       fputs("</table></center>\n",fp_ou);
  216.       fputs("<center><table cellpadding=1 cellspacing=1>\n",fp_ou);
  217.       fputs("<tr><td></td><td></td></tr>",fp_ou);
  218.  
  219.       if(strlen(denied_report) > 0) {
  220.          sprintf(html,"<tr><td colspan=11><font size=-1><a href=\"denied_%s.html\">%s</a> %s</font></td></tr>\n",denied_report,text[116],text[55]);
  221.          fputs(html,fp_ou);
  222.       }
  223.  
  224.       sprintf(html,"<tr><th></th><th align=left bgcolor=%s><font size=%s color=%s>%s</font></th><th bgcolor=%s><font size=%s color=%s>%s</font></th><th bgcolor=%s><font size=%s color=%s>%s</font></th><th bgcolor=%s><font size=%s color=%s>%%%s</font></th><th bgcolor=%s colspan=2><font size=%s color=%s>%s-%s-%s</font></th><th align=center bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%s</font></th><th bgcolor=%s><font size=%s color=%s>%%%s</font></th></tr>\n",HeaderBgColor,FontSize,HeaderColor,text[91],HeaderBgColor,FontSize,HeaderColor,text[92],HeaderBgColor,FontSize,HeaderColor,text[93],HeaderBgColor,FontSize,HeaderColor,text[93],HeaderBgColor,FontSize,HeaderColor,text[113],text[114],text[112],HeaderBgColor,FontSize,HeaderColor,text[94],HeaderBgColor,FontSize,HeaderColor,text[95],HeaderBgColor,FontSize,HeaderColor,text[99]);
  225.       fputs(html,fp_ou);
  226.  
  227.       if(debug){
  228.          if(ipuser){
  229.             strcpy(u2,usuario);
  230.             fixip(u2);
  231.             sprintf(msg, "%s: %s",text[61],u2);
  232.          } else
  233.             sprintf(msg, "%s: %s",text[61],usuario);
  234.          debuga(msg);
  235.       }
  236.  
  237.       fscanf(fp_in,"%s",nacc);
  238.       fscanf(fp_in,"%s",nbytes);
  239.       fscanf(fp_in,"%s",url);
  240.       fscanf(fp_in,"%s",tmsg);
  241.       fscanf(fp_in,"%s",nelap);
  242.       fscanf(fp_in,"%s",incac);
  243.       fscanf(fp_in,"%s",oucac);
  244.  
  245.       while(!feof(fp_in)) {
  246.          strcpy(purl,url);
  247.          sprintf(tmsg2,"%s",text[46]);
  248.          if(strcmp(tmsg,tmsg2) == 0) {
  249.             strcpy(purl,"<font COLOR=red>");
  250.             strcat(purl,url);
  251.         strcat(purl,"</font>");
  252.          }else {
  253.             strcpy(purl,url);
  254.             strncpy(tmsg,"                              ",30);
  255.             tmsg[30]='\0'; // DAS: strncpy don't add '\0'
  256.          }
  257.  
  258.          nnbytes=my_atoll(nbytes);
  259.          nnelap=my_atoll(nelap);
  260.          incache=my_atoll(incac);
  261.          oucache=my_atoll(oucac);
  262.  
  263.          if(nnbytes) {
  264.             perc=nnbytes * 100;
  265.             perc=perc / tnbytes;
  266.      } else {
  267.             perc=0;
  268.             ouperc=0;
  269.          }
  270.  
  271.          if(nnelap) {
  272.             perc2=nnelap * 100;
  273.             perc2=perc2 / tnelap;
  274.          } else perc2=0;
  275.  
  276.          if(incache) {
  277.             inperc=incache * 100;
  278.             inperc=inperc / nnbytes;
  279.          } else inperc=0;
  280.  
  281.          if(oucache) {
  282.             ouperc=oucache * 100;
  283.             ouperc=ouperc / nnbytes;
  284.          } else ouperc=0;
  285.  
  286.          twork=my_atoll(nacc);
  287.      sprintf(wwork1,"%s",fixnum(twork));
  288.      sprintf(wwork2,"%s",fixnum(nnbytes));
  289.      sprintf(wwork3,"%s",fixnum(nnelap));
  290.  
  291.      if(strcmp(Privacy,"yes") == 0)
  292.             sprintf(httplink,"<font size=%s color=%s><href=http://%s>%s",    \
  293.                 FontSize,PrivacyStringColor,PrivacyString,PrivacyString);
  294.      else
  295.             sprintf(httplink,"<font size=%s><a href=http://%s>%s</a>",FontSize,url,purl);
  296.  
  297.          if(strstr(ReportType,"site_user_time_date") != 0) {
  298.             sprintf(ltext110,"%s",text[110]);
  299.             if(*ltext110){
  300.                for(s=ltext110; *s; ++s)
  301.                   *s=tolower(*s);
  302.             }
  303.             encode_filename( siteind, url );
  304.         sprintf(href2,"<a href='tt%s-%s.html' style='color:FF3333;'>",usuario,siteind);
  305.          } else {
  306.             bzero(href2, MAXLEN);
  307.             bzero(ltext110, 50);
  308.          } 
  309.  
  310.          sprintf(html,"<tr><td align=left bgcolor=%s><font size=%s>%s%s</font></td><td align=left bgcolor=%s><font size=%s>%s</font></td><td align=right bgcolor=%s><font size=%s>%s</font></td><td align=right bgcolor=%s><font size=%s>%s</font></td><td align=right bgcolor=%s><font size=%s>%3.2f%%</font></td><td align=right bgcolor=%s><font size=%s>%3.2f%%</td><td align=right bgcolor=%s><font size=%s>%3.2f%%</td><td align=center bgcolor=%s><font size=%s>%s</font></td><td align=right bgcolor=%s><font size=%s>%s</font></td><td align=right bgcolor=%s><font size=%s>%3.2f%%</font></td><td bgcolor=%s><font size=%s>%s</font></td></tr>\n",TxBgColor,FontSize,href2,ltext110,TxBgColor,FontSize,httplink,TxBgColor,FontSize,wwork1,TxBgColor,FontSize,wwork2,TxBgColor,FontSize,perc,TxBgColor,FontSize,inperc,TxBgColor,FontSize,ouperc,TxBgColor,FontSize,buildtime(nnelap),TxBgColor,FontSize,wwork3,TxBgColor,FontSize,perc2,TxBgColor,FontSize,tmsg);
  311.          fputs(html,fp_ou);
  312.  
  313.           if(iprel) {
  314.              strcpy(arqip,dirname);
  315.              strcat(arqip,"/");
  316.              strcat(arqip,usuario);
  317.              strcat(arqip,".ip");
  318.  
  319.              if ((fp_ip = fopen(arqip, "r")) == 0){
  320.                 fprintf(stderr, "SARG: (html6) %s: %s\n",text[45],arqip);
  321.                 exit(1);
  322.          }
  323.  
  324.              if ((fp_ip2 = fopen(tmp2, "a")) == 0){
  325.                 fprintf(stderr, "SARG: (html7) %s: %s\n",text[45],tmp2);
  326.                 exit(1);
  327.          }
  328.  
  329.              while(fgets(buf,sizeof(buf),fp_ip)!=NULL)
  330.              {
  331.                 if(strstr(buf,url) != 0)
  332.                    fputs(buf,fp_ip2);
  333.              }
  334.  
  335.              fclose(fp_ip);
  336.              fclose(fp_ip2);
  337.  
  338.              sprintf(csort, SORT" -n -T %s -k 1,1 -k 5,5 -o %s %s",TempDir,tmp3,tmp2);
  339.  
  340.              system(csort);
  341.  
  342.              if ((fp_ip = fopen(tmp3, "r")) == 0){
  343.                 fprintf(stderr, "SARG: (html8) %s: %s\n",text[45],tmp3);
  344.                 exit(1);
  345.          }
  346.  
  347.              fscanf(fp_ip,"%s",userip);
  348.              fscanf(fp_ip,"%s",userurl);
  349.              fscanf(fp_ip,"%s",userdia);
  350.              fscanf(fp_ip,"%s",userhora);
  351.              fscanf(fp_ip,"%s",userbytes);
  352.              fscanf(fp_ip,"%s",userelap);
  353.  
  354.              strcpy(olduserip,userip);
  355.  
  356.              while(!feof(fp_ip))
  357.              {
  358.  
  359.             if(strcmp(userip,olduserip) != 0) {
  360.                    my_lltoa(unelap,val2,0);
  361.            sprintf(wwork1,"%s",fixnum(unbytes));
  362.                    sprintf(html,"<tr><td align=right><font size=-2>%s</font></td><td></td><td align=right><font size=-2>%s</font></td><td></td><td></td><td align=center><font size=-2>%s</font></td><td align=right><font size=-2>%s</font></td></tr>\n",olduserip,wwork1,buildtime(unelap),val2);
  363.                    fputs(html,fp_ou);
  364.  
  365.                    strcpy(olduserip,userip);
  366.                    unacc=0;
  367.                    unbytes=0;
  368.                    unelap=0;
  369.                 }
  370.  
  371.                 unbytes=unbytes+my_atoll(userbytes);
  372.                 unelap=unelap+my_atoll(userelap);
  373.  
  374.                 fscanf(fp_ip,"%s",userip);
  375.                 fscanf(fp_ip,"%s",userurl);
  376.                 fscanf(fp_ip,"%s",userdia);
  377.                 fscanf(fp_ip,"%s",userhora);
  378.                 fscanf(fp_ip,"%s",userbytes);
  379.                 fscanf(fp_ip,"%s",userelap);
  380.  
  381.              }
  382.  
  383.          fclose(fp_ip);
  384.  
  385.              unlink(tmp2);
  386.              unlink(tmp3);
  387.  
  388.              my_lltoa(unelap,val3,0);
  389.          sprintf(wwork1,"%s",fixnum(unbytes));
  390.              sprintf(html,"<tr><td align=right><font size=-2>%s</font></td><td></td><td align=right><font size=-2>%s</font></td><td></td><td></td><td align=center><font size=-2>%s</font></td><td align=right><font size=-2>%s</font></td></tr>\n",olduserip,wwork1,buildtime(unelap),val3);
  391.              fputs(html,fp_ou);
  392.       }
  393.  
  394.           unacc=0;
  395.           unbytes=0;
  396.           unelap=0;
  397.  
  398.           fscanf(fp_in,"%s",nacc);
  399.           fscanf(fp_in,"%s",nbytes);
  400.           fscanf(fp_in,"%s",url);
  401.           fscanf(fp_in,"%s",tmsg);
  402.           fscanf(fp_in,"%s",nelap);
  403.           fscanf(fp_in,"%s",incac);
  404.           fscanf(fp_in,"%s",oucac);
  405. //          fscanf(fp_in,"%s",datestimes);
  406.  
  407.        }
  408.  
  409.        if(iprel)
  410.           unlink(arqip);
  411.        unlink(arqin);
  412.  
  413.        strcpy(html,"<tr><td> </td></tr>");
  414.        fputs(html,fp_ou);
  415.        fputs(html,fp_ou);
  416.  
  417.        if(tnbytes) {
  418.           perc=totbytes / 100;
  419.           perc=tnbytes / perc;
  420.        } else perc=0;
  421.  
  422.        if(tnelap) {
  423.           perc2=totelap / 100;
  424.           perc2=tnelap / perc2;
  425.        } else perc2=0;
  426.  
  427.        if(tnoucache) {
  428.           ouperc=tnoucache * 100;
  429.           ouperc=ouperc / tnbytes;
  430.        } else ouperc=0;
  431.  
  432.        if(tnincache) {
  433.           inperc=tnincache * 100;
  434.           inperc=inperc / tnbytes;
  435.        } else inperc=0;
  436.  
  437.        sprintf(wwork1,"%s",fixnum(tnacc));
  438.        sprintf(wwork2,"%s",fixnum(tnbytes));
  439.        sprintf(wwork3,"%s",fixnum(tnelap));
  440.  
  441.        sprintf(html,"<tr><th></th><th align=left bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%3.2f%%</font></th><th align=right bgcolor=%s><font size=%s color=%s>%3.2f%%</font></th><th align=right bgcolor=%s><font size=%s color=%s>%3.2f%%</font></th><th align=center bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%3.2f%%</font></th></tr>\n",HeaderBgColor,FontSize,HeaderColor,text[107],HeaderBgColor,FontSize,HeaderColor,wwork1,HeaderBgColor,FontSize,HeaderColor,wwork2,HeaderBgColor,FontSize,HeaderColor,perc,HeaderBgColor,FontSize,HeaderColor,inperc,HeaderBgColor,FontSize,HeaderColor,ouperc,HeaderBgColor,FontSize,HeaderColor,buildtime(tnelap),HeaderBgColor,FontSize,HeaderColor,wwork3,HeaderBgColor,FontSize,HeaderColor,perc2);
  442.  
  443.        fputs(html,fp_ou);
  444.        fclose(fp_in);
  445.  
  446.        if(atoi(PerUserLimit) > 0) {
  447.           if(tnbytes > (atoi(PerUserLimit)*1000000)) {
  448.              limit_flag=0;
  449.              if(access(PerUserLimitFile, R_OK) == 0) {
  450.                 if((fp_usr = fopen(PerUserLimitFile, "r")) == 0) {
  451.                    fprintf(stderr, "SARG: (html9) %s: %s\n",text[45],PerUserLimitFile);
  452.                    exit(1);
  453.                 }
  454.                 while(fgets(tmp5,sizeof(tmp5),fp_usr)!=NULL) {
  455.                    if(strstr(tmp5,"\n") != 0)
  456.                       tmp5[strlen(tmp5)-1]='\0';
  457.                    if(strcmp(tmp5,u2) == 0) {
  458.                       limit_flag=1;
  459.                       break;
  460.                    }
  461.                 }
  462.                 fclose(fp_usr);
  463.              }
  464.  
  465.              if(!limit_flag) {
  466.                 if((fp_usr = fopen(PerUserLimitFile, "a")) == 0) {
  467.                    fprintf(stderr, "SARG: (html10) %s: %s\n",text[45],PerUserLimitFile);
  468.                    exit(1);
  469.                 }
  470.                 sprintf(html,"%s\n",u2);
  471.                 fputs(html,fp_usr);
  472.                 fclose(fp_usr);
  473.  
  474.                 if(debug){
  475.                    sprintf(msg, "%s %s %s (%s MB). %s %s",text[32],u2,text[74],PerUserLimit,text[75],PerUserLimitFile);
  476.                    debuga(msg);
  477.                 }
  478.              }
  479.           }
  480.        }
  481.  
  482.       strcpy(arqper,dirname);
  483.       strcat(arqper,"/usuarios");
  484.  
  485.       if ((fp_in = fopen(arqper, "r")) == 0){
  486.          fprintf(stderr, "SARG: (html11) %s: %s\n",text[45],arqper);
  487.          exit(1);
  488.       }
  489.  
  490.       fgets(totuser,8,fp_in);
  491.       fclose(fp_in);
  492.  
  493.       totbytes2=totbytes/my_atoll(totuser);
  494.       totelap2=totelap/my_atoll(totuser);
  495.  
  496.       if(totbytes2) {
  497.          perc = totbytes / 100;
  498.          perc = totbytes2 / perc;
  499.       } else perc=0;
  500.  
  501.       if(totelap2) {
  502.          perc2 = totelap / 100;
  503.          perc2 = totelap2 / perc2;
  504.       } else perc2=0;
  505.  
  506.       twork2=my_atoll(totuser);
  507.       twork=tnacc/twork2;
  508.  
  509.       sprintf(wwork1,"%s",fixnum(twork));
  510.       sprintf(wwork2,"%s",fixnum(totbytes2));
  511.       sprintf(wwork3,"%s",fixnum(totelap2));
  512.  
  513.       sprintf(html,"<tr><th></th><th align=left bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s></font></th><th></th><th></th><th align=center bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%s</font></th><th align=right bgcolor=%s><font size=%s color=%s>%3.2f%%</font></th></tr>\n",HeaderBgColor,FontSize,HeaderColor,text[96],HeaderBgColor,FontSize,HeaderColor,wwork1,HeaderBgColor,FontSize,HeaderColor,wwork2,HeaderBgColor,FontSize,HeaderColor,HeaderBgColor,FontSize,HeaderColor,buildtime(totelap2),HeaderBgColor,FontSize,HeaderColor,wwork3,HeaderBgColor,FontSize,HeaderColor,perc2);
  514.       fputs(html,fp_ou);
  515.  
  516.       tnacc=0;
  517.       tnbytes=0;
  518.       tnelap=0;
  519.       tnincache=0;
  520.       tnoucache=0;
  521.  
  522.       fputs("</center></table>\n",fp_ou);
  523.  
  524.       zdate(ftime, DateFormat);
  525.       sprintf(html,"<br><br><center><font size=-2>%s <a href='%s'>%s-%s</a> %s %s</font></center>\n",text[108],URL,PGM,VERSION,text[109],ftime);
  526.       fputs(html,fp_ou);
  527.  
  528.       fputs("</html>\n",fp_ou);
  529.  
  530.       fclose(fp_ou);
  531.  
  532.    }
  533.  
  534.    (void)closedir( dirp );
  535.  
  536.    return;
  537. }
  538.