char csort[MAXLEN];
char arqou[MAXLEN], arqin[MAXLEN], wnome[MAXLEN];
- char field1[10]="2,2";
- char field2[10]="1,1";
- char field3[10]="3,3";
- char order[4]="-r";
+ const char *field1="2,2";
+ const char *field2="1,1";
+ const char *field3="3,3";
+ const char *order="-r";
if(indexonly) return;
if((ReportType & REPORT_TYPE_USERS_SITES) == 0) return;
strup(UserSortField);
if(strcmp(UserSortField,"CONNECT") == 0) {
- strcpy(field1,"1,1");
- strcpy(field2,"2,2");
- strcpy(field3,"3,3");
+ field1="1,1";
+ field2="2,2";
+ field3="3,3";
} else if(strcmp(UserSortField,"SITE") == 0) {
- strcpy(field1,"3,3");
- strcpy(field2,"2,2");
- strcpy(field3,"1,1");
+ field1="3,3";
+ field2="2,2";
+ field3="1,1";
} else if(strcmp(UserSortField,"TIME") == 0) {
- strcpy(field1,"5,5");
- strcpy(field2,"2,2");
- strcpy(field3,"1,1");
+ field1="5,5";
+ field2="2,2";
+ field3="1,1";
}
strlow(UserSortOrder);
if(strcmp(UserSortOrder,"normal") == 0)
- order[0]='\0';
+ order="";
dirp = opendir(tmp);
while ((direntp = readdir( dirp )) != NULL ){
char user[MAXLEN];
char wdname[MAXLEN];
int cstatus;
- const char unsortext[]=".unsort";
int dlen;
+ int clen;
+ const char unsortext[]=".unsort";
if(debug) {
debuga("%s",text[138]);
strncpy(user,direntp->d_name,dlen);
user[dlen]=0;
} else {
- bzero(user, MAXLEN);
+ user[0]='\0';
}
if(strcmp(direntp->d_name,"download.unsort") == 0)
- sprintf(csort,"sort -T \"%s\" -k 3,3 -k 1,1 -k 2,2 -k 5,5 -o \"%s/%s.log\" \"%s/%s.unsort\"",
+ clen=snprintf(csort,sizeof(csort),"sort -T \"%s\" -k 3,3 -k 1,1 -k 2,2 -k 5,5 -o \"%s/%s.log\" \"%s/%s.unsort\"",
tmp, wtmp, user, wtmp, user);
else
- sprintf(csort,"sort -T \"%s\" -k 5,5 -k 1,1 -k 2,2 -o \"%s/%s.log\" \"%s/%s.unsort\"",
+ clen=snprintf(csort,sizeof(csort),"sort -T \"%s\" -k 5,5 -k 1,1 -k 2,2 -o \"%s/%s.log\" \"%s/%s.unsort\"",
tmp, wtmp, user, wtmp, user);
+ if (clen>=sizeof(csort)) {
+ fprintf(stderr, "SARG: user name too long to sort %s\n",csort);
+ exit(1);
+ }
cstatus=system(csort);
if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
fprintf(stderr, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus));
exit(1);
}
unlink(wdname);
- bzero(user, MAXLEN);
-
}
(void)closedir( dirp );