]> git.ipfire.org Git - thirdparty/sarg.git/commitdiff
Fixed the same bug as patch #1733337 but in a cleaner way.
authorFrédéric Marchal <fmarchal@users.sourceforge.net>
Tue, 7 Jul 2009 08:45:05 +0000 (08:45 +0000)
committerFrédéric Marchal <fmarchal@users.sourceforge.net>
Tue, 7 Jul 2009 08:45:05 +0000 (08:45 +0000)
report.c

index 58a6a949a9d706a94842b105f7afc774f699d69d..57e10425492a16151afeca7794e06ac9497d7170 100644 (file)
--- a/report.c
+++ b/report.c
@@ -35,7 +35,7 @@ void gerarel(void)
    char oldaccdia[11], oldacchora[9], oldaccip[MAXLEN], wdir[MAXLEN], per1[MAXLEN];
    char wdirname[MAXLEN], oldurl[MAXLEN], oldaccuser[MAXLEN];
    char olduser[MAXLEN], oldmsg[50], acccode[50], oldaccelap[10], oldacccode[50], user[MAXLEN];
-   char ipantes[MAXLEN], nameantes[MAXLEN], wdname[MAXLEN], wname2[MAXLEN]
+   char ipantes[MAXLEN], nameantes[MAXLEN]; 
    char accsmart[MAXLEN];
    char wcrc[50];
    char crc2[50];
@@ -48,6 +48,8 @@ void gerarel(void)
    char *s;
    DIR *dirp;
    struct dirent *direntp;
+   const char logext[]=".log";
+   int dlen;
 
    ipantes[0]='\0';
    nameantes[0]='\0';
@@ -73,28 +75,28 @@ void gerarel(void)
 
    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) ||
          (strncmp(direntp->d_name,"download.log",12) == 0) ||
          (strncmp(direntp->d_name,"denied.log",10) == 0) ||
-        (strncmp(direntp->d_name,"authfail.log.unsort",19) == 0))
+            (strncmp(direntp->d_name,"authfail.log.unsort",19) == 0))
          continue;
-         sprintf(tmp3,"%s/%s",tmp,direntp->d_name);
-         if((fp_in=fopen(tmp3,"r"))==NULL){
-            fprintf(stderr, "SARG: (report) %s: %s\n",text[45],tmp);
+      if (snprintf(tmp3,sizeof(tmp3),"%s/%s",tmp,direntp->d_name)>=sizeof(tmp3)) {
+         fprintf(stderr, "SARG: (report) directory entry too long: %s/%s\n",tmp,direntp->d_name);
          exit(1);
       }
-    
-      strcpy(wdname,direntp->d_name);
-      strip_prefix:
-      if (getword(wname2,sizeof(wname2),wdname,'.')<0) {
-         printf("SARG: Maybe you have a broken record or garbage in your %s directory.\n",tmp);
+      if((fp_in=fopen(tmp3,"r"))==NULL){
+         fprintf(stderr, "SARG: (report) %s: %s\n",text[45],tmp);
          exit(1);
       }
-      strcat(user,wname2);
-   
-      if(strcmp(wdname,"log") !=0) {
-         strcat(user,".");
-         goto strip_prefix;
+    
+      if (dlen>0) {
+         if (dlen>=sizeof(user)) continue;
+         strncpy(user,direntp->d_name,dlen);
+         user[dlen]=0;
+      } else {
+         user[0]='\0';
       }
  
       strcpy(wdirname,dirname);