]>
Commit | Line | Data |
---|---|---|
25697a35 | 1 | /* |
94ff9470 | 2 | * SARG Squid Analysis Report Generator http://sarg.sourceforge.net |
1164c474 | 3 | * 1998, 2010 |
25697a35 GS |
4 | * |
5 | * SARG donations: | |
6 | * please look at http://sarg.sourceforge.net/donations.php | |
1164c474 FM |
7 | * Support: |
8 | * http://sourceforge.net/projects/sarg/forums/forum/363374 | |
25697a35 GS |
9 | * --------------------------------------------------------------------- |
10 | * | |
11 | * This program is free software; you can redistribute it and/or modify | |
12 | * it under the terms of the GNU General Public License as published by | |
13 | * the Free Software Foundation; either version 2 of the License, or | |
14 | * (at your option) any later version. | |
15 | * | |
16 | * This program is distributed in the hope that it will be useful, | |
17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | * GNU General Public License for more details. | |
20 | * | |
21 | * You should have received a copy of the GNU General Public License | |
22 | * along with this program; if not, write to the Free Software | |
23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. | |
24 | * | |
25 | */ | |
26 | ||
27 | #include "include/conf.h" | |
5f3cfd1d | 28 | #include "include/defs.h" |
25697a35 | 29 | |
32e71fa4 | 30 | void tmpsort(void) |
25697a35 GS |
31 | { |
32 | ||
33 | DIR *dirp; | |
34 | struct dirent *direntp; | |
456d78a5 | 35 | int cstatus; |
32e71fa4 FM |
36 | const char tmpext[]=".utmp"; |
37 | int dlen; | |
25697a35 | 38 | char csort[MAXLEN]; |
32e71fa4 | 39 | char arqou[MAXLEN], arqin[MAXLEN], wnome[MAXLEN]; |
8ef7a8b8 FM |
40 | const char *field1="2,2"; |
41 | const char *field2="1,1"; | |
42 | const char *field3="3,3"; | |
43 | const char *order="-r"; | |
25697a35 GS |
44 | |
45 | if(indexonly) return; | |
085c1e1f | 46 | if((ReportType & REPORT_TYPE_USERS_SITES) == 0) return; |
25697a35 | 47 | |
32e71fa4 FM |
48 | strup(UserSortField); |
49 | if(strcmp(UserSortField,"CONNECT") == 0) { | |
8ef7a8b8 FM |
50 | field1="1,1"; |
51 | field2="2,2"; | |
52 | field3="3,3"; | |
32e71fa4 | 53 | } else if(strcmp(UserSortField,"SITE") == 0) { |
8ef7a8b8 FM |
54 | field1="3,3"; |
55 | field2="2,2"; | |
56 | field3="1,1"; | |
32e71fa4 | 57 | } else if(strcmp(UserSortField,"TIME") == 0) { |
8ef7a8b8 FM |
58 | field1="5,5"; |
59 | field2="2,2"; | |
60 | field3="1,1"; | |
32e71fa4 FM |
61 | } |
62 | ||
63 | strlow(UserSortOrder); | |
64 | if(strcmp(UserSortOrder,"normal") == 0) | |
8ef7a8b8 | 65 | order=""; |
25697a35 GS |
66 | |
67 | dirp = opendir(tmp); | |
68 | while ((direntp = readdir( dirp )) != NULL ){ | |
32e71fa4 FM |
69 | dlen=strlen(direntp->d_name)-(sizeof(tmpext)-1); |
70 | if (dlen<0) continue; | |
71 | if(strcmp(direntp->d_name+dlen,tmpext) != 0) | |
25697a35 GS |
72 | continue; |
73 | ||
32e71fa4 FM |
74 | if (dlen>0) { |
75 | if (dlen>=sizeof(wnome)) continue; | |
76 | strncpy(wnome,direntp->d_name,dlen); | |
0a4e18e1 | 77 | wnome[dlen]='\0'; |
32e71fa4 FM |
78 | } else { |
79 | wnome[0]='\0'; | |
25697a35 | 80 | } |
5542cb59 | 81 | |
25697a35 GS |
82 | strcpy(arqou,tmp); |
83 | strcat(arqou,"/"); | |
84 | strcpy(arqin,arqou); | |
85 | strcat(arqou,wnome); | |
86 | strcat(arqin,direntp->d_name); | |
87 | ||
88 | if(debug) { | |
10210234 | 89 | debuga(_("Sorting file: %s\n"),arqou); |
25697a35 GS |
90 | } |
91 | ||
25697a35 | 92 | strcat(arqou,".txt"); |
9a2efbd0 | 93 | sprintf(csort,"sort -n -T \"%s\" %s -k %s -k %s -k %s -o \"%s\" \"%s\"",TempDir,order,field1,field2,field3,arqou,arqin); |
456d78a5 FM |
94 | cstatus=system(csort); |
95 | if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) { | |
10210234 FM |
96 | debuga(_("sort command return status %d\n"),WEXITSTATUS(cstatus)); |
97 | debuga(_("sort command: %s\n"),csort); | |
06b39c87 | 98 | exit(EXIT_FAILURE); |
456d78a5 | 99 | } |
25697a35 GS |
100 | unlink(arqin); |
101 | ||
102 | } | |
103 | ||
25697a35 GS |
104 | (void)closedir( dirp ); |
105 | return; | |
106 | } | |
107 | ||
32e71fa4 | 108 | void sort_users_log(const char *tmp, int debug) |
25697a35 | 109 | { |
25697a35 GS |
110 | DIR *dirp; |
111 | struct dirent *direntp; | |
112 | char csort[MAXLEN]; | |
113 | char wtmp[MAXLEN]; | |
32e71fa4 | 114 | char user[MAXLEN]; |
25697a35 | 115 | char wdname[MAXLEN]; |
456d78a5 | 116 | int cstatus; |
32e71fa4 | 117 | int dlen; |
8ef7a8b8 FM |
118 | int clen; |
119 | const char unsortext[]=".unsort"; | |
25697a35 | 120 | |
d6e703cc | 121 | if(debug) { |
10210234 | 122 | debuga(_("pre-sorting files\n")); |
d6e703cc FM |
123 | } |
124 | ||
25697a35 GS |
125 | sprintf(wtmp,"%s/sarg",tmp); |
126 | ||
127 | dirp = opendir(wtmp); | |
128 | while ( (direntp = readdir( dirp )) != NULL ){ | |
32e71fa4 FM |
129 | dlen=strlen(direntp->d_name)-(sizeof(unsortext)-1); |
130 | if (dlen<0) continue; | |
131 | if(strcmp(direntp->d_name+dlen,unsortext) != 0) | |
25697a35 | 132 | continue; |
32e71fa4 | 133 | if(strcmp(direntp->d_name,"authfail.log.unsort") == 0) |
491b862f GS |
134 | continue; |
135 | ||
32e71fa4 FM |
136 | if (dlen>0) { |
137 | if (dlen>=sizeof(user)) continue; | |
138 | strncpy(user,direntp->d_name,dlen); | |
139 | user[dlen]=0; | |
140 | } else { | |
8ef7a8b8 | 141 | user[0]='\0'; |
25697a35 GS |
142 | } |
143 | ||
144 | if(strcmp(direntp->d_name,"download.unsort") == 0) | |
8ef7a8b8 | 145 | 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\"", |
5542cb59 | 146 | tmp, wtmp, user, wtmp, user); |
25697a35 | 147 | else |
f2ec8c75 | 148 | clen=snprintf(csort,sizeof(csort),"sort -T \"%s\" -k 4,4 -k 1,1 -k 2,2 -o \"%s/%s.log\" \"%s/%s.unsort\"", |
5542cb59 | 149 | tmp, wtmp, user, wtmp, user); |
8ef7a8b8 | 150 | if (clen>=sizeof(csort)) { |
fcdc0918 | 151 | debuga(_("user name too long to sort %s\n"),csort); |
06b39c87 | 152 | exit(EXIT_FAILURE); |
8ef7a8b8 | 153 | } |
456d78a5 FM |
154 | cstatus=system(csort); |
155 | if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) { | |
fcdc0918 FM |
156 | debuga(_("sort command return status %d\n"),WEXITSTATUS(cstatus)); |
157 | debuga(_("sort command: %s\n"),csort); | |
06b39c87 | 158 | exit(EXIT_FAILURE); |
456d78a5 | 159 | } |
32e71fa4 | 160 | if (snprintf(wdname,sizeof(wdname),"%s/%s.unsort",wtmp,user)>=sizeof(wdname)) { |
fcdc0918 | 161 | debuga(_("user name too long for %s/%s.unsort\n"),wtmp,user); |
06b39c87 | 162 | exit(EXIT_FAILURE); |
32e71fa4 | 163 | } |
25697a35 | 164 | unlink(wdname); |
25697a35 | 165 | } |
25697a35 GS |
166 | (void)closedir( dirp ); |
167 | ||
168 | return; | |
169 | } |