~ubuntu-branches/ubuntu/natty/sarg/natty

« back to all changes in this revision

Viewing changes to useragent.c

  • Committer: Bazaar Package Importer
  • Author(s): Luigi Gangitano
  • Date: 2010-01-11 15:07:10 UTC
  • mfrom: (1.1.8 upstream) (3.1.4 sid)
  • Revision ID: james.westby@ubuntu.com-20100111150710-mgvjhyjs13mrg0tb
Tags: 2.2.6-1
* New upstream release
  - Fixes issues in getword loop detection (Closes: #522284)
  - Removed patches integrated upstream
  - Fixes usertab parsing for IPv6 address (Closes: #504749)
  - Fixes typo in dansguardian_log.c (Closes: #540438)
  - Fixes error parsing squidGuard logs (Closes: #486895)

* debian/sarg-reports.conf
  - Fixed typo (Closes: #517356)

* debian/control
  - Added Build-Dep options on libgd2-xpm-dev (Closes: #540121)
  - Added Dependency on ${misc:Depends}
  - Added dependency on dpatch
  - Bumped Standard-Version to 3.8.3

* debian/compat
  - Upgraded debhelper compatibility to level 6

* debian/rules
  - Removed unnecessary upgrade of autoconf files
  - Added dpatch rules
  - Fixed configuration options and paths

* debian/patches/01_makefile-install-path
  - Fixed build-time installation paths

* debian/patches/02_config-file-references
  - Fixed references to configuration files

* debian/squid.conf
  - Sinced with upstream changes

* debian/{postrm,preinst,sarg.conf,sarg-reports,rules,dirs,sarg-reports.conf}
  - Moved configuration files to /etc/sarg and data directory to /var/lib/sarg
    (Closes: #553554, #502273)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*
2
2
 * AUTHOR: Pedro Lineu Orso                         pedro.orso@gmail.com
3
 
 *                                                            1998, 2008
 
3
 *                                                            1998, 2009
4
4
 * SARG Squid Analysis Report Generator      http://sarg.sourceforge.net
5
5
 *
6
6
 * SARG donations:
24
24
 */
25
25
 
26
26
#include "include/conf.h"
 
27
#include "include/defs.h"
27
28
 
28
 
void useragent()
 
29
void useragent(void)
29
30
{
30
31
 
31
32
   FILE *fp_in = NULL, *fp_ou = NULL, *fp_ht = NULL;
38
39
   char idate[MAXLEN], fdate[MAXLEN];
39
40
   int  agentot=0, agentot2=0, agentdif=0, cont=0;
40
41
   unsigned long totregsl=0;
 
42
   int cstatus;
41
43
 
42
44
   ip[0]='\0';
43
45
   data[0]='\0';
64
66
   }
65
67
 
66
68
   if(debug) {
67
 
      sprintf(msg,"%s: %s",text[66],UserAgentLog);
68
 
      debuga(msg);
 
69
      debuga("%s: %s",text[66],UserAgentLog);
69
70
   }
70
71
 
71
72
   while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
72
73
      totregsl++;
73
 
      getword(ip,sizeof(ip),buf,' ');
74
 
      getword(data,sizeof(data),buf,'[');
75
 
      getword(data,sizeof(data),buf,' ');
 
74
      if (getword(ip,sizeof(ip),buf,' ')<0 || getword(data,sizeof(data),buf,'[')<0 ||
 
75
          getword(data,sizeof(data),buf,' ')<0) {
 
76
         printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",UserAgentLog);
 
77
         exit(1);
 
78
      }
76
79
      if(totregsl == 1)
77
80
         strcpy(idate,data);
78
 
      getword(agent,sizeof(agent),buf,'"');
79
 
      getword(agent,sizeof(agent),buf,'"');
80
 
 
 
81
      if (getword(agent,sizeof(agent),buf,'"')<0 || getword(agent,sizeof(agent),buf,'"')<0) {
 
82
         printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",UserAgentLog);
 
83
         exit(1);
 
84
      }
81
85
      strcpy(warea,agent);
82
86
      strup(warea);
83
87
      if(strstr(warea,"SCRIPT") != 0 || strstr(warea,"ONLOAD") != 0)
84
88
         baddata();
85
89
 
86
90
      if(strlen(buf)) {
87
 
         getword(user,sizeof(user),buf,' ');
88
 
         getword(user,sizeof(user),buf,'\n');
 
91
         if (getword(user,sizeof(user),buf,' ')<0 || getword(user,sizeof(user),buf,'\n')<0) {
 
92
            printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",UserAgentLog);
 
93
            exit(1);
 
94
         }
89
95
      }
90
96
 
91
97
      if(user[0] == '-')
93
99
      if(strlen(user) == 0)
94
100
         strcpy(user,ip);
95
101
 
96
 
      sprintf(buf,"%s\\%s\\%s\\%s\\\n",ip,data,agent,user);
97
 
      fputs(buf,fp_ou);
 
102
      fprintf(fp_ou,"%s\\%s\\%s\\%s\\\n",ip,data,agent,user);
98
103
      user[0]='\0';
99
104
   }
100
105
 
101
106
   strcpy(fdate,data);
102
107
 
103
108
   if(debug) {
104
 
      snprintf(msg, sizeof(buf), "   %s: %ld",text[10],totregsl);
105
 
      debuga(msg);
 
109
      debuga("   %s: %ld",text[10],totregsl);
106
110
   }
107
111
 
108
112
   fclose(fp_in);
113
117
   }
114
118
 
115
119
   if(debug) {
116
 
      sprintf(msg,"%s: %s",text[54],tmp2);
117
 
      debuga(msg);
118
 
   }
119
 
 
120
 
   sprintf(csort,"sort -n -t '\\' -k 4,4 -k 3,3 -k 2,2 -k 1,1 -o '%s' '%s'",tmp2,tmp3);
121
 
   system(csort);
122
 
 
123
 
   unlink(tmp3);
124
 
 
 
120
      debuga("%s: %s",text[54],tmp2);
 
121
   }
 
122
 
 
123
   sprintf(csort,"sort -n -t \"\\\" -k 4,4 -k 3,3 -k 2,2 -k 1,1 -o \"%s\" \"%s\"",tmp2,tmp3);
 
124
   cstatus=system(csort);
 
125
   if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
 
126
      fprintf(stderr, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus));
 
127
      fprintf(stderr, "SARG: sort command: %s\n",csort);
 
128
      exit(1);
 
129
   }
125
130
   if((fp_in=fopen(tmp2,"r"))==NULL) {
126
131
      fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp2);
 
132
      fprintf(stderr, "SARG: sort command: %s\n",csort);
127
133
      exit(1);
128
134
   }
129
135
 
 
136
   unlink(tmp3);
 
137
 
130
138
   if((fp_ht=fopen(hfile,"w"))==NULL) {
131
139
      fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],hfile);
132
140
      exit(1);
133
141
   }
134
142
 
135
143
   if(debug)
136
 
      debuga(text[72]);
 
144
      debuga("%s",text[72]);
137
145
 
138
146
   fprintf(fp_ht, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=%s\">\n",CharSet);
139
147
   fputs("</head>\n",fp_ht);
140
148
   if(strlen(FontFace) > 0) fprintf(fp_ht,"<font face=%s>\n",FontFace);
141
149
   fprintf(fp_ht,"<body bgcolor=%s text=%s background='%s'>\n",BgColor,TxColor,BgImage);
142
 
   if(strlen(LogoImage) > 0) fprintf(fp_ht, "<center><table cellpadding=\"0\" cellspacing=\"0\">\n<tr><th class=\"logo\"><img src='%s' border=0 align=absmiddle width=%s height=%s>&nbsp;%s</th></tr>\n<tr><td height=\"5\"></td></tr>\n</table>\n",LogoImage,Width,Height,LogoText);
 
150
   write_logo_image(fp_ht);
143
151
 
144
152
   if(strcmp(IndexTree,"date") == 0)
145
153
      show_sarg(fp_ht, "../../..");
146
154
   else
147
155
      show_sarg(fp_ht,"..");
148
 
   fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ht);
149
 
   snprintf(html,sizeof(html),"<tr><th align=center colspan=2><b><font color=%s size=+1>%s</font></b></th></tr>\n",TiColor,text[105]);
150
 
   fputs(html,fp_ht);
 
156
   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
 
157
   fprintf(fp_ht,"<tr><th align=\"center\" colspan=\"2\"><b><font color=\"%s\" size=\"+1\">%s</font></b></th></tr>\n",TiColor,text[105]);
151
158
 
152
159
   fputs("<tr><td></td></tr><tr><td></td></tr>",fp_ht);
153
 
   fputs("</table></center>\n",fp_ht);
154
 
 
155
 
   fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ht);
156
 
 
157
 
   snprintf(html,sizeof(html),"<tr><td align=right bgcolor=%s><font size=%s>%s:</font><td align=left bgcolor=%s><font size=%s>%s - %s</font></td></td></tr>\n",HeaderBgColor,FontSize,text[89],TxBgColor,FontSize,idate,fdate);
158
 
   fputs(html,fp_ht);
159
 
 
160
 
   fputs("</table></center>\n",fp_ht);
161
 
   fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ht);
 
160
   fputs("</table></div>\n",fp_ht);
 
161
 
 
162
   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
 
163
 
 
164
   fprintf(fp_ht,"<tr><td align=\"right\" bgcolor=\"%s\"><font size=\"%s\">%s:</font><td align=\"left\" bgcolor=\"%s\"><font size=\"%s\">%s - %s</font></td></td></tr>\n",HeaderBgColor,FontSize,text[89],TxBgColor,FontSize,idate,fdate);
 
165
 
 
166
   fputs("</table></div>\n",fp_ht);
 
167
   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
162
168
   fputs("<tr><td></td><td></td></tr>",fp_ht);
163
169
 
164
 
   snprintf(html,sizeof(html),"<tr><th align=left bgcolor=%s><font size=%s color=%s>%s</font></th><th bgcolor=%s align=left><font size=%s color=%s>%s</font></th></tr>\n",HeaderBgColor,FontSize,HeaderColor,text[98],HeaderBgColor,FontSize,HeaderColor,text[106]);
165
 
   fputs(html,fp_ou);
 
170
   fprintf(fp_ou,"<tr><th align=left bgcolor=%s><font size=%s color=%s>%s</font></th><th bgcolor=%s align=left><font size=%s color=%s>%s</font></th></tr>\n",HeaderBgColor,FontSize,HeaderColor,text[98],HeaderBgColor,FontSize,HeaderColor,text[106]);
166
171
 
167
172
   while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
168
 
      getword(ip,sizeof(ip),buf,'\\');
 
173
      if (getword(ip,sizeof(ip),buf,'\\')<0) {
 
174
         printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp2);
 
175
         exit(1);
 
176
      }
169
177
 
170
178
      if(strcmp(Ip2Name,"yes") == 0) {
171
179
         if(strcmp(ip,ipbefore) != 0) {
172
180
            strcpy(ipbefore,ip);
173
 
            ip2name(ip);
 
181
            ip2name(ip,sizeof(ip));
174
182
            strcpy(namebefore,ip);
175
183
         } else strcpy(ip,namebefore);
176
184
      }
177
185
 
178
 
      getword(data,sizeof(data),buf,'\\');
179
 
      getword(agent,sizeof(agent),buf,'\\');
180
 
      getword(user,sizeof(user),buf,'\\');
 
186
      if (getword(data,sizeof(data),buf,'\\')<0 || getword(agent,sizeof(agent),buf,'\\')<0 ||
 
187
          getword(user,sizeof(user),buf,'\\')<0) {
 
188
         printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp2);
 
189
         exit(1);
 
190
      }
181
191
 
182
192
      if(strcmp(user,user_old) != 0) {
183
 
         snprintf(html,sizeof(html),"<tr><td align=left bgcolor=%s><font size=%s>%s</td><td align=left bgcolor=%s><font size=%s>%s</td></tr>\n",TxBgColor,FontSize,user,TxBgColor,FontSize,agent);
184
 
         fputs(html,fp_ht);
 
193
         fprintf(fp_ht,"<tr><td align=left bgcolor=%s><font size=%s>%s</td><td align=left bgcolor=%s><font size=%s>%s</td></tr>\n",TxBgColor,FontSize,user,TxBgColor,FontSize,agent);
185
194
         strcpy(user_old,user);
186
195
         strcpy(agent_old,agent);
187
196
      } else {
188
197
         if(strcmp(agent,agent_old) != 0) {
189
 
            snprintf(html,sizeof(html),"<tr><td></td><td align=left bgcolor=%s><font size=%s>%s</td></tr>\n",TxBgColor,FontSize,agent);
190
 
            fputs(html,fp_ht);
 
198
            fprintf(fp_ht,"<tr><td></td><td align=left bgcolor=%s><font size=%s>%s</td></tr>\n",TxBgColor,FontSize,agent);
191
199
            strcpy(agent_old,agent);
192
200
         }
193
201
      }
197
205
   fclose(fp_in);
198
206
   fclose(fp_ou);
199
207
 
200
 
   sprintf(csort,"sort -n -t '\\' -k 3,3 -o '%s' '%s'",tmp3,tmp2);
201
 
   system(csort);
202
 
 
203
 
   unlink(tmp2);
204
 
 
 
208
   sprintf(csort,"sort -n -t \"\\\" -k 3,3 -o \"%s\" \"%s\"",tmp3,tmp2);
 
209
   cstatus=system(csort);
 
210
   if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
 
211
      fprintf(stderr, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus));
 
212
      fprintf(stderr, "SARG: sort command: %s\n",csort);
 
213
      exit(1);
 
214
   }
205
215
   if((fp_in=fopen(tmp3,"r"))==NULL) {
206
216
      fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp3);
 
217
      fprintf(stderr, "SARG: sort command: %s\n",csort);
207
218
      exit(1);
208
219
   }
209
220
 
 
221
   unlink(tmp2);
 
222
 
210
223
   if((fp_ou=fopen(tmp2,"w"))==NULL) {
211
224
      fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp2);
212
225
      exit(1);
215
228
   agent_old[0]='\0';
216
229
 
217
230
   while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
218
 
      getword(ip,sizeof(ip),buf,'\\');
219
 
      getword(data,sizeof(data),buf,'\\');
220
 
      getword(agent,sizeof(agent),buf,'\\');
 
231
      if (getword(ip,sizeof(ip),buf,'\\')<0 || getword(data,sizeof(data),buf,'\\')<0 ||
 
232
          getword(agent,sizeof(agent),buf,'\\')<0) {
 
233
         printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp);
 
234
         exit(1);
 
235
      }
221
236
 
222
237
      if(!cont) {
223
238
         cont++;
228
243
 
229
244
      if(strcmp(agent,agent_old) != 0) {
230
245
         agentdif++;
231
 
         snprintf(html,sizeof(html),"%06d %s\n",agentot,agent_old);
232
 
         fputs(html,fp_ou);
 
246
         fprintf(fp_ou,"%06d %s\n",agentot,agent_old);
233
247
         strcpy(agent_old,agent);
234
248
         agentot2+=agentot;
235
249
         agentot=1;
236
250
      }
237
251
   }
238
252
   agentdif++;
239
 
   snprintf(html,sizeof(html),"%06d %s\n",agentot,agent);
240
 
   fputs(html,fp_ou);
 
253
   fprintf(fp_ou,"%06d %s\n",agentot,agent);
241
254
   agentot2+=agentot;
242
255
 
243
256
   fclose(fp_in);
245
258
 
246
259
   unlink(tmp3);
247
260
 
248
 
   sprintf(csort,"sort -n -r -k 1,1 -o '%s' '%s'",tmp3,tmp2);
249
 
   system(csort);
250
 
 
251
 
   unlink(tmp2);
252
 
 
 
261
   sprintf(csort,"sort -n -r -k 1,1 -o \"%s\" \"%s\"",tmp3,tmp2);
 
262
   cstatus=system(csort);
 
263
   if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
 
264
      fprintf(stderr, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus));
 
265
      fprintf(stderr, "SARG: sort command: %s\n",csort);
 
266
      exit(1);
 
267
   }
253
268
   if((fp_in=fopen(tmp3,"r"))==NULL) {
254
269
      fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],tmp3);
 
270
      fprintf(stderr, "SARG: sort command: %s\n",csort);
255
271
      exit(1);
256
272
   }
257
273
 
 
274
   unlink(tmp2);
 
275
 
258
276
   if((fp_ht=fopen(hfile,"a"))==NULL) {
259
277
      fprintf(stderr, "SARG: (useragent) %s: %s\n",text[45],hfile);
260
278
      exit(1);
262
280
 
263
281
   fputs("<br><br>\n",fp_ht);
264
282
 
265
 
   fputs("<center><table cellpadding=0 cellspacing=0>\n",fp_ht);
266
 
   snprintf(html,sizeof(html),"<tr><th align=left bgcolor=%s><font size=%s color=%s>%s</font></th><th bgcolor=%s align=left><font size=%s color=%s>%s</font></th><th align=center bgcolor=%s><font size=%s color=%s>%%</font></th></tr>\n",HeaderBgColor,FontSize,HeaderColor,text[106],HeaderBgColor,FontSize,HeaderColor,text[107],HeaderBgColor,FontSize,HeaderColor);
267
 
   fputs(html,fp_ht);
 
283
   fputs("<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\">\n",fp_ht);
 
284
   fprintf(fp_ht,"<tr><th align=\"left\" bgcolor=\"%s\"><font size=\"%s\" color=\"%s\">%s</font></th><th bgcolor=\"%s\" align=\"left\"><font size=\"%s\" color=\"%s\">%s</font></th><th align=\"center\" bgcolor=\"%s\"><font size=\"%s\" color=\"%s\">%%</font></th></tr>\n",HeaderBgColor,FontSize,HeaderColor,text[106],HeaderBgColor,FontSize,HeaderColor,text[107],HeaderBgColor,FontSize,HeaderColor);
268
285
 
269
286
   while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
270
287
      buf[strlen(buf)-1]='\0';
271
 
      getword(tagent,sizeof(tagent),buf,' ');
 
288
      if (getword(tagent,sizeof(tagent),buf,' ')<0) {
 
289
         printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",tmp);
 
290
         exit(1);
 
291
      }
272
292
      perc=atoi(tagent) * 100;
273
293
      perc=perc / agentot2;
274
294
 
275
 
      snprintf(html,sizeof(html),"<tr><td align=left bgcolor=%s><font size=%s>%s</td><td align=right bgcolor=%s><font size=%s>%d</td><td align=right bgcolor=%s><font size=%s>%3.2f</td></tr>\n",TxBgColor,FontSize,buf,TxBgColor,FontSize,atoi(tagent),TxBgColor,FontSize,perc);
276
 
      fputs(html,fp_ht);
 
295
      fprintf(fp_ht,"<tr><td align=left bgcolor=%s><font size=%s>%s</td><td align=right bgcolor=%s><font size=%s>%d</td><td align=right bgcolor=%s><font size=%s>%3.2f</td></tr>\n",TxBgColor,FontSize,buf,TxBgColor,FontSize,atoi(tagent),TxBgColor,FontSize,perc);
277
296
   }
278
297
 
279
298
   fputs("</table></html>\n",fp_ht);
280
299
   if(strcmp(ShowSargInfo,"yes") == 0) {
281
300
      zdate(ftime, DateFormat);
282
 
      snprintf(html,sizeof(html),"<br><br><center><font size=-2>%s <a href='%s'>%s-%s</a> %s %s</font></center>\n",text[108],URL,PGM,VERSION,text[109],ftime);
283
 
      fputs(html,fp_ht);
 
301
      fprintf(fp_ht,"<br><br><div align=\"center\"><font size=\"-2\">%s <a href=\"%s\">%s-%s</a> %s %s</font></div>\n",text[108],URL,PGM,VERSION,text[109],ftime);
284
302
   }
285
303
 
286
304
   fputs("</table>\n</body>\n</html>\n",fp_ht);