From 8db846b0a8ea966291773dd5c11a00da57967613 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fr=C3=A9d=C3=A9ric=20Marchal?= Date: Tue, 7 Jul 2009 08:45:05 +0000 Subject: [PATCH] Fixed the same bug as patch #1733337 but in a cleaner way. --- report.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) 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); -- 2.47.2