+++ /dev/null
-/*! \file sort.c
-\brief Sort the temporary log files.
-*/
-
-
-
-
-/*! \fn void tmpsort(void)
-Sort all the \c utmp files form the temporary directory. The sort can be made according to the
-number of connections, the accessed sites or the time of the access depending on the value of
-::UserSortField. The sorting is either made in increasing or decreasing order as specified by
-the value of ::UserSortOrder.
-*/
-
-
-
-
-
-/*! \fn void sort_users_log(const char *tmp, int debug)
-The function sorts all the \c unsort files in the temporary directory. These files correspond
-to the format described in \ref UserUnsortLog.
-
-\param tmp The temorary directory of the sarg files.
-\param debug \c True to output debug information.
-
-The user's files are sorted by columns 5, 1 and 2 that are the columns of the number of bytes transfered,
-the date of the access and the time of the access.
-
-The file with the downloads is sorted by columns 3, 1, 2 and 5 that are the columns of the user's ID, the
-date, the time and the URL.
-
-In both cases, the sorted files are written in files with the extension \c log and the name of the unsorted
-file without the \c unsort extension. The unsorted file is deleted just after the sorting.
-*/
-
-
-
-
-
-/*! \fn void sort_labels(const char **label,const char **order)
-Get the internationalized text to display when reporting the sort criterion and order
-of a user list.
-
-\param label A pointer to set to the string of the sort criterion name.
-\param order A pointer to set to the string of the sort order name
-*/
#include "include/conf.h"
#include "include/defs.h"
+/*!
+Sort all the \c utmp files form the temporary directory. The sort can be made according to the
+number of connections, the accessed sites or the time of the access depending on the value of
+::UserSortField. The sorting is either made in increasing or decreasing order as specified by
+the value of ::UserSortOrder.
+*/
void tmpsort(const struct userinfostruct *uinfo)
{
int cstatus;
return;
}
-void sort_users_log(const char *tmp, int debug)
+/*!
+The function sorts the \c unsort file in the temporary directory. These files correspond
+to the format described in \ref UserUnsortLog.
+
+\param tmp The temorary directory of the sarg files.
+\param debug \c True to output debug information.
+\param uinfo The user whose log must be sorted.
+
+The user's files are sorted by columns 5, 1 and 2 that are the columns of the number of bytes transfered,
+the date of the access and the time of the access.
+
+The sorted files are written in files with the extension \c log and the name of the unsorted
+file without the \c unsort extension. The unsorted file is deleted just after the sorting.
+*/
+void sort_users_log(const char *tmp, int debug,struct userinfostruct *uinfo)
{
- DIR *dirp;
- struct dirent *direntp;
char csort[MAXLEN];
- char user[MAXLEN];
- char wdname[MAXLEN];
+ const char *user;
int cstatus;
- int dlen;
int clen;
- const char unsortext[]=".unsort";
if(debug) {
- debuga(_("pre-sorting files\n"));
+ debuga(_("Sorting log %s/%s.unsort\n"),tmp,uinfo->filename);
}
- if ((dirp = opendir(tmp)) == NULL) {
- debuga(_("Failed to open directory %s - %s\n"),tmp,strerror(errno));
+ user=uinfo->filename;
+ clen=snprintf(csort,sizeof(csort),"sort -T \"%s\" -t \"\t\" -k 4,4 -k 1,1 -k 2,2 -o \"%s/%s.log\" \"%s/%s.unsort\"",
+ tmp, tmp, user, tmp, user);
+ if (clen>=sizeof(csort)) {
+ debuga(_("user name too long to sort %s\n"),csort);
exit(EXIT_FAILURE);
}
- while ( (direntp = readdir( dirp )) != NULL ){
- dlen=strlen(direntp->d_name)-(sizeof(unsortext)-1);
- if (dlen<0) continue;
- if(strcmp(direntp->d_name+dlen,unsortext) != 0)
- continue;
- if(strcmp(direntp->d_name,"authfail.log.unsort") == 0)
- continue;
- if(strcmp(direntp->d_name,"download.unsort") == 0)
- continue;
-
- if (dlen>0) {
- if (dlen>=sizeof(user)) continue;
- safe_strcpy(user,direntp->d_name,dlen+1);
- } else {
- user[0]='\0';
- }
-
- clen=snprintf(csort,sizeof(csort),"sort -T \"%s\" -t \"\t\" -k 4,4 -k 1,1 -k 2,2 -o \"%s/%s.log\" \"%s/%s.unsort\"",
- tmp, tmp, user, tmp, user);
- if (clen>=sizeof(csort)) {
- debuga(_("user name too long to sort %s\n"),csort);
- exit(EXIT_FAILURE);
- }
- cstatus=system(csort);
- if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
- debuga(_("sort command return status %d\n"),WEXITSTATUS(cstatus));
- debuga(_("sort command: %s\n"),csort);
- exit(EXIT_FAILURE);
- }
- if (snprintf(wdname,sizeof(wdname),"%s/%s.unsort",tmp,user)>=sizeof(wdname)) {
- debuga(_("user name too long for %s/%s.unsort\n"),tmp,user);
- exit(EXIT_FAILURE);
- }
- if (unlink(wdname)) {
- debuga(_("Cannot delete %s - %s\n"),wdname,strerror(errno));
- exit(EXIT_FAILURE);
- }
+ cstatus=system(csort);
+ if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
+ debuga(_("sort command return status %d\n"),WEXITSTATUS(cstatus));
+ debuga(_("sort command: %s\n"),csort);
+ exit(EXIT_FAILURE);
+ }
+ if (snprintf(csort,sizeof(csort),"%s/%s.unsort",tmp,user)>=sizeof(csort)) {
+ debuga(_("user name too long for %s/%s.unsort\n"),tmp,user);
+ exit(EXIT_FAILURE);
+ }
+ if (unlink(csort)) {
+ debuga(_("Cannot delete %s - %s\n"),csort,strerror(errno));
+ exit(EXIT_FAILURE);
}
- (void)closedir( dirp );
return;
}
+/*!
+Get the internationalized text to display when reporting the sort criterion and order
+of a user list.
+
+\param label A pointer to set to the string of the sort criterion name.
+\param order A pointer to set to the string of the sort order name
+*/
void sort_labels(const char **label,const char **order)
{
if((UserSort & USER_SORT_CONNECT) != 0) {