]> git.ipfire.org Git - thirdparty/sarg.git/commitdiff
Fixed e-mail report (may also fix bug #2153024).
authorFrédéric Marchal <fmarchal@users.sourceforge.net>
Fri, 14 Aug 2009 17:58:09 +0000 (17:58 +0000)
committerFrédéric Marchal <fmarchal@users.sourceforge.net>
Fri, 14 Aug 2009 17:58:09 +0000 (17:58 +0000)
Fixed total and percentages of topuser page.

email.c
getconf.c
include/conf.h
topuser.c

diff --git a/email.c b/email.c
index ec0af2c0dfb5ac57853aed5983e4a80bb220f094..b52fa586e1928dd2cb2085c0222542083c8a0b01 100644 (file)
--- a/email.c
+++ b/email.c
@@ -36,14 +36,15 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
    float perc2=0.00;
    int posicao=0;
    char olduser[MAXLEN], csort[MAXLEN], period[MAXLEN], arqper[MAXLEN];
-   char wger[MAXLEN], top1[MAXLEN], top2[MAXLEN], top3[MAXLEN], user[MAXLEN], nacc[20], nbytes[20], url[1024], tusr[MAXLEN];
-   char ip[MAXLEN], hora[9], data[11], elap[15], user2[MAXLEN], wperc[8], wperc2[8];
+   char wger[MAXLEN], top1[MAXLEN], top2[MAXLEN], top3[MAXLEN], user[MAXLEN], nacc[20], nbytes[20], url[MAXLEN], tusr[MAXLEN];
+   char ip[MAXLEN], hora[9], data[15], elap[16], user2[MAXLEN], wperc[8], wperc2[8];
    char strip1[MAXLEN], strip2[MAXLEN], strip3[MAXLEN], strip4[MAXLEN], strip5[MAXLEN], strip6[MAXLEN], strip7[MAXLEN];
-   char incac[16], oucac[16];
+   char incac[30], oucac[30];
    int totuser=0;
    time_t t;
    struct tm *local;
    int cstatus;
+   char warea[MAXLEN];
 
    strcpy(wger,dirname);
    strcpy(top1,dirname);
@@ -71,39 +72,72 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
       exit(1);
    }
 
-   fscanf(fp_in,"%s",user);
-   fscanf(fp_in,"%s",nacc);
-   fscanf(fp_in,"%s",nbytes);
-   fscanf(fp_in,"%s",url);
-   fscanf(fp_in,"%s",ip);
-   fscanf(fp_in,"%s",hora);
-   fscanf(fp_in,"%s",data);
-   fscanf(fp_in,"%s",elap);
-   fscanf(fp_in,"%s",incac);
-   fscanf(fp_in,"%s",oucac);
-
-   strcpy(olduser,user);
-   totuser=1;
-
-   while(!feof(fp_in))
+   olduser[0]='\0';
+   totuser=0;
+
+   while(fgets(warea,sizeof(warea),fp_in))
    {
+      if (getword(user,sizeof(user),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken user in your %s file.\n",wger);
+         exit(1);
+      }
+      if(strcmp(user,"TOTAL") == 0) {
+         continue;
+      }
+      if (getword(nacc,sizeof(nacc),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken number of access in your %s file.\n",wger);
+         exit(1);
+      }
+      if (getword(nbytes,sizeof(nbytes),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken number of bytes in your %s file.\n",wger);
+         exit(1);
+      }
+      if (getword(url,sizeof(url),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken url in your %s file.\n",wger);
+         exit(1);
+      }
+      if (getword(ip,sizeof(ip),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken source IP address in your %s file.\n",wger);
+         exit(1);
+      }
+      if (getword(hora,sizeof(hora),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken time in your %s file.\n",wger);
+         exit(1);
+      }
+      if (getword(data,sizeof(data),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken date in your %s file.\n",wger);
+         exit(1);
+      }
+      if (getword(elap,sizeof(elap),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken elapsed time in your %s file.\n",wger);
+         exit(1);
+      }
+      if (getword(incac,sizeof(incac),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken in cache column in your %s file.\n",wger);
+         exit(1);
+      }
+      if (getword(oucac,sizeof(oucac),warea,0)<0) {
+         printf("SARG: Maybe you have a broken not in cache column in your %s file.\n",wger);
+         exit(1);
+      }
 
       if(strcmp(olduser,user) != 0)
       {
-         if(strcmp(user,"TOTAL") != 0)
-            totuser++;
+         totuser++;
 
+         if (olduser[0] != '\0') {
 #if defined(__FreeBSD__)
-         fprintf(fp_top2,"%s %15qu %15qu %15qu\n",olduser,tnbytes,tnacc,tnelap);
+            fprintf(fp_top2,"%s %qu %qu %qu\n",olduser,tnbytes,tnacc,tnelap);
 #elif defined(__alpha) || __ALPHA
-         fprintf(fp_top2,"%s %15ld %15ld %15ld\n",olduser,tnbytes,tnacc,tnelap);
+            fprintf(fp_top2,"%s %ld %ld %ld\n",olduser,tnbytes,tnacc,tnelap);
 #else
-         fprintf(fp_top2,"%s %15lld %15lld %15lld\n",olduser,tnbytes,tnacc,tnelap);
+            fprintf(fp_top2,"%s %lld %lld %lld\n",olduser,tnbytes,tnacc,tnelap);
 #endif
-            strcpy(olduser,user);
-         ttnbytes=ttnbytes+tnbytes;
-            ttnacc=ttnacc+tnacc;
-            ttnelap=ttnelap+tnelap;
+            ttnbytes=ttnbytes+tnbytes;
+            ttnacc=ttnacc+tnacc;
+            ttnelap=ttnelap+tnelap;
+         }
+         strcpy(olduser,user);
          tnbytes=0;
          tnacc=0;
          tnelap=0;
@@ -112,31 +146,20 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
       tnbytes=tnbytes+atol(nbytes);
       tnacc=tnacc+atol(nacc);
       tnelap=tnelap+atol(elap);
-
-      fscanf(fp_in,"%s",user);
-      fscanf(fp_in,"%s",nacc);
-      fscanf(fp_in,"%s",nbytes);
-      fscanf(fp_in,"%s",url);
-      fscanf(fp_in,"%s",ip);
-      fscanf(fp_in,"%s",hora);
-      fscanf(fp_in,"%s",data);
-      fscanf(fp_in,"%s",elap);
-      fscanf(fp_in,"%s",incac);
-      fscanf(fp_in,"%s",oucac);
-
-      if(strcmp(user,"TOTAL") == 0)
-         continue;
    }
+
+   if (olduser[0] != '\0') {
 #if defined(__FreeBSD__)
-   fprintf(fp_top2,"%s %15qu %15qu %15qu\n",olduser,tnbytes,tnacc,tnelap);
+      fprintf(fp_top2,"%s %qu %qu %qu\n",olduser,tnbytes,tnacc,tnelap);
 #elif defined(__alpha) || __ALPHA
-   fprintf(fp_top2,"%s %15ld %15ld %15ld\n",olduser,tnbytes,tnacc,tnelap);
+      fprintf(fp_top2,"%s %ld %ld %ld\n",olduser,tnbytes,tnacc,tnelap);
 #else
-   fprintf(fp_top2,"%s %15lld %15lld %15lld\n",olduser,tnbytes,tnacc,tnelap);
+      fprintf(fp_top2,"%s %lld %lld %lld\n",olduser,tnbytes,tnacc,tnelap);
 #endif
-   ttnbytes=ttnbytes+tnbytes;
-   ttnacc=ttnacc+tnacc;
-   ttnelap=ttnelap+tnelap;
+      ttnbytes=ttnbytes+tnbytes;
+      ttnacc=ttnacc+tnacc;
+      ttnelap=ttnelap+tnelap;
+   }
 
    fclose(fp_in);
    fclose(fp_top2);
@@ -156,27 +179,17 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
       exit(1);
    }
 #if defined(__FreeBSD__)
-   fprintf(fp_top1,"TOTAL %15qu %15qu %15qu\n",ttnbytes,ttnacc,ttnelap);
+   fprintf(fp_top1,"TOTAL %qu %qu %qu\n",ttnbytes,ttnacc,ttnelap);
 #elif defined(__alpha) || __ALPHA
-   fprintf(fp_top1,"TOTAL %15ld %15ld %15ld\n",ttnbytes,ttnacc,ttnelap);
+   fprintf(fp_top1,"TOTAL %ld %ld %ld\n",ttnbytes,ttnacc,ttnelap);
 #else
-   fprintf(fp_top1,"TOTAL %15lld %15lld %15lld\n",ttnbytes,ttnacc,ttnelap);
+   fprintf(fp_top1,"TOTAL %lld %lld %lld\n",ttnbytes,ttnacc,ttnelap);
 #endif
    fclose(fp_top1);
 
-   if((fp_top1=fopen(top1,"r"))==NULL) {
-      fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top1);
-      exit(1);
-   }
-
-   if((fp_top3=fopen(top3,"w"))==NULL) {
-      fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top3);
-      exit(1);
-   }
-
- /*
- * Obtem o period
- */
+   /*
+   * Obtem o period
+   */
 
    strcpy(arqper,dirname);
    strcat(arqper,"/sarg-period");
@@ -189,6 +202,16 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
    fgets(period,sizeof(period),fp_in);
    fclose(fp_in);
 
+   if((fp_top1=fopen(top1,"r"))==NULL) {
+      fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top1);
+      exit(1);
+   }
+
+   if((fp_top3=fopen(top3,"w"))==NULL) {
+      fprintf(stderr, "SARG: (email) %s: %s\n",text[45],top3);
+      exit(1);
+   }
+
    sprintf(strip1,"%s",text[88]);
    strip_latin(strip1);
    fprintf(fp_top3,"%s\n",strip1);
@@ -218,15 +241,26 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
 
    fprintf(fp_top3,"%-7s %-20s %-8s %-15s %%%-6s %-10s %-10s %%%-7s\n------- -------------------- -------- --------------- ------- ---------- ---------- -------\n",strip1,strip2,strip3,strip4,strip4,strip5,strip6,strip7);
 
-   fscanf(fp_top1,"%s",user);
-   fscanf(fp_top1,"%s",nbytes);
-   fscanf(fp_top1,"%s",nacc);
-   fscanf(fp_top1,"%s",elap);
-
-   while(!feof(fp_top1))
+   while(fgets(warea,sizeof(warea),fp_top1))
    {
+      if (getword(user,sizeof(user),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken user in your %s file.\n",top1);
+         exit(1);
+      }
+      if (getword(nbytes,sizeof(nbytes),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken number of bytes in your %s file.\n",top1);
+         exit(1);
+      }
+      if (getword(nacc,sizeof(nacc),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken number of access in your %s file.\n",top1);
+         exit(1);
+      }
+      if (getword(elap,sizeof(elap),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken elapsed time in your %s file.\n",top1);
+         exit(1);
+      }
 
-      if(strstr(user,"_") != 0)
+      if(strchr(user,'_') != NULL)
          fixip(user);
 
       strcpy(user2,user);
@@ -249,7 +283,7 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
       sprintf(wperc,"%3.2f%%",perc);
       sprintf(wperc2,"%3.2f%%",perc2);
 
-      if(strstr(user,"TOTAL") != 0){
+      if(strcmp(user,"TOTAL") == 0){
          fputs("------- -------------------- -------- --------------- ------- ---------- ---------- -------\n",fp_top3);
 #if defined(__FreeBSD__)
          fprintf(fp_top3,"%-7s %20s %8qu %15s %8s %9s %10qu\n",text[107]," ",ttnacc,fixnum(ttnbytes,1)," ",buildtime(ttnelap),ttnelap);
@@ -267,11 +301,6 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
          fprintf(fp_top3,"%7d %20s %8s %15s %7s %10s %10lld %7s\n",posicao,user2,nacc,fixnum(tnbytes,1),wperc,buildtime(tnelap),tnelap,wperc2);
 #endif
       }
-
-      fscanf(fp_top1,"%s",user);
-      fscanf(fp_top1,"%s",nbytes);
-      fscanf(fp_top1,"%s",nacc);
-      fscanf(fp_top1,"%s",elap);
    }
 
    if(ttnbytes) {
@@ -314,7 +343,7 @@ int geramail(const char *dirname, int debug, const char *outdir, int userip, con
          exit(1);
       }
     }
+
    sprintf(csort,"rm -rf %s/sarg",TempDir);
    system(csort);
 
index 23a5bbaeb22c769b23f1e4d10817aee7863023c6..ebf85c2ac2a233128a7eea2b8b63af1f2d3b5f0b 100644 (file)
--- a/getconf.c
+++ b/getconf.c
@@ -259,7 +259,7 @@ static void parmtest(char *buf)
 
    if (getparam_string("topsites_num",buf,TopSitesNum,sizeof(TopSitesNum))>0) return;
 
-   if (getparam_string("topuser_num",buf,TopUsersNum,sizeof(TopUsersNum))>0) return;
+   if (getparam_int("topuser_num",buf,&TopUsersNum)>0) return;
 
    if (getparam_string("usertab",buf,UserTabFile,sizeof(UserTabFile))>0) return;
 
index 9798e5463c57a88b38ea502cccdf9bc87a584600..c207254034ed7e424965e6daca9b0bd9cb229e79 100755 (executable)
@@ -144,7 +144,7 @@ char RecordsWithoutUser[20];
 char UseComma[4];
 char MailUtility[PATH_MAX];
 char TopSitesNum[20];
-char TopUsersNum[20];
+int TopUsersNum;
 char ExcludeCodes[256];
 char TopsitesSortField[15];
 char TopsitesSortType[20];
index c41bf4b31bc7008a4a4f06b7f1d4ced0edd5ced7..37ae57f16407c6b7f90ddd0422fc7b1a3860d551 100644 (file)
--- a/topuser.c
+++ b/topuser.c
@@ -86,17 +86,17 @@ void topuser(void)
       exit(1);
    }
 
-   //fscanf(fp_in,"%s%s%s%s%s%s%s%s%s%s",user,nacc,nbytes,url,ip,time,date,elap,incac,oucac);
-   fgets(warea,sizeof(warea),fp_in);
-   if (getword(user,sizeof(user),warea,' ')<0) {
-      printf("SARG: Maybe you have a broken user in your %s file.\n",wger);
-      exit(1);
-   }
-
-   strcpy(olduser,user);
-   totuser=1;
+   olduser[0]='\0';
+   totuser=0;
 
-   while(!feof(fp_in)) {
+   while(fgets(warea,sizeof(warea),fp_in)) {
+      if (getword(user,sizeof(user),warea,' ')<0) {
+         printf("SARG: Maybe you have a broken user in your %s file.\n",wger);
+         exit(1);
+      }
+      if(strcmp(user,"TOTAL") == 0) {
+         continue;
+      }
       if (getword(nacc,sizeof(nacc),warea,' ')<0) {
          printf("SARG: Maybe you have a broken number of access in your %s file.\n",wger);
          exit(1);
@@ -134,22 +134,23 @@ void topuser(void)
          exit(1);
       }
       if(strcmp(olduser,user) != 0) {
-         if(strcmp(user,"TOTAL") != 0)
-            totuser++;
-
-         my_lltoa(tnbytes,val1,15);
-         my_lltoa(tnacc,val2,15);
-         my_lltoa(tnelap,val3,15);
-         my_lltoa(tnincache,val4,15);
-         my_lltoa(tnoucache,val5,15);
-         fprintf(fp_top2,"%s %s %s %s %s %s\n",olduser,val1,val2,val3,val4,val5);
-
+         totuser++;
+
+         if (olduser[0] != '\0') {
+            my_lltoa(tnbytes,val1,15);
+            my_lltoa(tnacc,val2,15);
+            my_lltoa(tnelap,val3,15);
+            my_lltoa(tnincache,val4,15);
+            my_lltoa(tnoucache,val5,15);
+            fprintf(fp_top2,"%s %s %s %s %s %s\n",olduser,val1,val2,val3,val4,val5);
+
+            ttnbytes+=tnbytes;
+            ttnacc+=tnacc;
+            ttnelap+=tnelap;
+            ttnincache+=tnincache;
+            ttnoucache+=tnoucache;
+         }
          strcpy(olduser,user);
-         ttnbytes+=tnbytes;
-         ttnacc+=tnacc;
-         ttnelap+=tnelap;
-         ttnincache+=tnincache;
-         ttnoucache+=tnoucache;
          tnbytes=0;
          tnacc=0;
          tnelap=0;
@@ -162,30 +163,23 @@ void topuser(void)
       tnelap+=my_atoll(elap);
       tnincache+=my_atoll(incac);
       tnoucache+=my_atoll(oucac);
-
-      //fscanf(fp_in,"%s%s%s%s%s%s%s%s%s%s",user,nacc,nbytes,url,ip,time,date,elap,incac,oucac);
-      fgets(warea,sizeof(warea),fp_in);
-      if (getword(user,sizeof(user),warea,' ')<0) {
-         printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",wger);
-         exit(1);
-      }
-
-      if(strcmp(user,"TOTAL") == 0)
-         continue;
    }
 
-   my_lltoa(tnbytes,val1,15);
-   my_lltoa(tnacc,val2,15);
-   my_lltoa(tnelap,val3,15);
-   my_lltoa(tnincache,val4,15);
-   my_lltoa(tnoucache,val5,15);
-   fprintf(fp_top2,"%s %s %s %s %s %s\n",olduser,val1,val2,val3,val4,val5);
+   if (olduser[0] != '\0') {
+      my_lltoa(tnbytes,val1,15);
+      my_lltoa(tnacc,val2,15);
+      my_lltoa(tnelap,val3,15);
+      my_lltoa(tnincache,val4,15);
+      my_lltoa(tnoucache,val5,15);
+      fprintf(fp_top2,"%s %s %s %s %s %s\n",olduser,val1,val2,val3,val4,val5);
+
+      ttnbytes+=tnbytes;
+      ttnacc+=tnacc;
+      ttnelap+=tnelap;
+      ttnincache+=tnincache;
+      ttnoucache+=tnoucache;
 
-   ttnbytes+=tnbytes;
-   ttnacc+=tnacc;
-   ttnelap+=tnelap;
-   ttnincache+=tnincache;
-   ttnoucache+=tnoucache;
+   }
 
    my_lltoa(ttnbytes,val1,15);
    my_lltoa(ttnacc,val2,15);
@@ -228,19 +222,9 @@ void topuser(void)
    fprintf(fp_top1,"TOTAL %s %s %s %s %s\n",val1,val2,val3,val4,val5);
    fclose(fp_top1);
 
-   if((fp_top1=fopen(top1,"r"))==NULL) {
-      fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],top1);
-      exit(1);
-   }
-
-   if((fp_top3=fopen(top3,"w"))==NULL) {
-      fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],top3);
-      exit(1);
-   }
-
- /*
- * get period
- */
+   /*
+   * get period
+   */
 
    strcpy(arqper,dirname);
    strcat(arqper,"/sarg-period");
@@ -253,6 +237,16 @@ void topuser(void)
    fgets(period,sizeof(period),fp_in);
    fclose(fp_in);
 
+   if((fp_top1=fopen(top1,"r"))==NULL) {
+      fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],top1);
+      exit(1);
+   }
+
+   if((fp_top3=fopen(top3,"w"))==NULL) {
+      fprintf(stderr, "SARG: (topuser) %s: %s\n",text[45],top3);
+      exit(1);
+   }
+
    fprintf(fp_top3, "<!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);
    css(fp_top3);
    fprintf(fp_top3,"</head>\n<body class=\"body\">");
@@ -293,66 +287,75 @@ void topuser(void)
       if (fp_top3) fclose (fp_top3);
       return;
    }
-   strcpy(val1,text[100]);
-   strcpy(val2,text[98]);
-   strcpy(val3,text[92]);
-   strcpy(val4,text[93]);
-   sprintf(val11,"%%%s",text[93]);
-   sprintf(val5,"%s-%s-%s",text[113],text[114],text[112]);
-   strcpy(val6,text[94]);
-   strcpy(val7,text[95]);
-   sprintf(val8,"%%%s",text[99]);
-   strcpy(val9,"colspan=2");
-   bzero(val10, 255);
-
-   strcpy(hbc1,"class=\"header\"");
-   strcpy(hbc2,"class=\"header\"");
-   strcpy(hbc3,"class=\"header\"");
-   strcpy(hbc4,"class=\"header\"");
-   strcpy(hbc5,"class=\"header3\"");
-   strcpy(hbc6,"class=\"header\"");
-   strcpy(hbc7,"class=\"header\"");
-   strcpy(hbc8,"class=\"header\"");
-   strcpy(hbc9,"class=\"header\"");
+
    strcpy(hbc10,"class=\"header\"");
 
    if(strstr(TopUserFields,"NUM") == 0) {
       bzero(val1, 255);
       bzero(hbc1, 30);
+   } else {
+      strcpy(val1,text[100]);
+      strcpy(hbc1,"class=\"header\"");
    }
    if(strstr(TopUserFields,"USERID") == 0) {
       bzero(val2, 255);
       bzero(hbc2, 30);
+   } else {
+      strcpy(val2,text[98]);
+      strcpy(hbc2,"class=\"header\"");
    }
    if(strstr(TopUserFields,"CONNECT") == 0) {
       bzero(val3, 255);
       bzero(hbc3, 30);
+   } else {
+      strcpy(val3,text[92]);
+      strcpy(hbc3,"class=\"header\"");
    }
    if(strstr(TopUserFields,"BYTES") == 0) {
       bzero(val4, 255);
       bzero(hbc4, 30);
+   } else {
+      strcpy(val4,text[93]);
+      strcpy(hbc4,"class=\"header\"");
    }
    if(strstr(TopUserFields,"SETYB") == 0) {
       bzero(val11, 255);
       bzero(hbc9, 30);
+   } else {
+      sprintf(val11,"%%%s",text[93]);
+      strcpy(hbc9,"class=\"header\"");
    }
    if(strstr(TopUserFields,"IN-CACHE-OUT") == 0) {
       bzero(val5, 255);
       bzero(hbc5, 30);
       bzero(val9, 255);
       strcpy(val10,"<td></td>");
+   } else {
+      sprintf(val5,"%s-%s-%s",text[113],text[114],text[112]);
+      strcpy(hbc5,"class=\"header3\"");
+      strcpy(val9,"colspan=\"2\"");
+      bzero(val10, 255);
    }
    if(strstr(TopUserFields,"USED_TIME") == 0) {
       bzero(val6, 255);
       bzero(hbc6, 30);
+   } else {
+      strcpy(val6,text[94]);
+      strcpy(hbc6,"class=\"header\"");
    }
    if(strstr(TopUserFields,"MILISEC") == 0) {
       bzero(val7, 255);
       bzero(hbc7, 30);
+   } else {
+      strcpy(val7,text[95]);
+      strcpy(hbc7,"class=\"header\"");
    }
    if(strstr(TopUserFields,"%TIME") == 0) {
       bzero(val8, 255);
       bzero(hbc8, 30);
+   } else {
+      sprintf(val8,"%%%s",text[99]);
+      strcpy(hbc8,"class=\"header\"");
    }
 
    fprintf(fp_top3,"<tr><th %s>%s</th><th %s></th><th %s>%s</th><th %s>%s</th><th %s>%s</th><th %s>%s</th><th %s %s>%s%s</th><th %s>%s</th><th %s>%s</th><th %s>%s</th></tr>\n",hbc1,val1,hbc1,hbc2,val2,hbc3,val3,hbc4,val4,hbc9,val11,hbc5,val9,val5,val10,hbc6,val6,hbc7,val7,hbc8,val8);
@@ -365,7 +368,7 @@ void topuser(void)
          fscanf(fp_top1,"%s%s%s%s%s%s",user,nbytes,nacc,elap,incac,oucac);
          continue;
       } else ntopuser = 1;
-      if(atoi(TopUsersNum) > 0 && topcount >= atoi(TopUsersNum)) goto final;
+      if(TopUsersNum > 0 && topcount >= TopUsersNum) goto final;
       strcpy(user2,user);
       tnbytes=my_atoll(nbytes);
 
@@ -390,16 +393,13 @@ void topuser(void)
       } else ouperc = 0;
 
       if(strcmp(user,"TOTAL") != 0){
-         sprintf(href1,"<a href=\"%s/",user);
+         sprintf(href1,"<a href=\"%s/%s.html\">",user,user);
          strcpy(href1end,"</a>");
-         sprintf(href2,"<a href=\"%s/d",user);
+         sprintf(href2,"<a href=\"%s/d%s.html\">",user,user);
          strcpy(href2end,"</a>");
          sprintf(href3,"<a href=\"%s/graph_day.png\">",user);
          strcpy(href3end,"</a>");
-         strcat(href1,user);
-         strcat(href2,user);
-         strcat(href1,".html\">");
-         strcat(href2,".html\">");
+         posicao++;
       } else {
          strcpy(href1," ");
          strcpy(href1end,"");
@@ -414,8 +414,6 @@ void topuser(void)
          strcpy(href3end,"");
       }
 
-      posicao++;
-
       tnelap=my_atoll(elap);
 
       if(userip) {
@@ -646,7 +644,7 @@ void topuser(void)
    if(UserAgentLog[0] != '\0') {
       fputs("<tr><td></td></tr>\n",fp_top3);
       fputs("<tr><td></td></tr>\n",fp_top3);
-      fputs("<td align=\"left\" colspan=\"8\"><font size=-1><a href='useragent.html'>Useragent</a> Report</td>\n",fp_top3);
+      fputs("<td align=\"left\" colspan=\"8\"><font size=-1><a href=\"useragent.html\">Useragent</a> Report</td>\n",fp_top3);
    }
 
    fputs("</table></div>",fp_top3);