From: Frédéric Marchal Date: Tue, 7 Jul 2009 08:45:05 +0000 (+0000) Subject: Fixed the same bug as patch #1733337 but in a cleaner way. X-Git-Tag: v2_2_6~70 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8db846b0a8ea966291773dd5c11a00da57967613;p=thirdparty%2Fsarg.git Fixed the same bug as patch #1733337 but in a cleaner way. --- diff --git a/report.c b/report.c index 58a6a94..57e1042 100644 --- 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);