"Fossies" - the Fresh Open Source Software Archive 
Member "sarg-2.4.0/siteuser.c" (24 Dec 2019, 6888 Bytes) of package /linux/privat/sarg-2.4.0.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "siteuser.c" see the
Fossies "Dox" file reference documentation and the latest
Fossies "Diffs" side-by-side code changes report:
2.3.11_vs_2.4.0.
1 /*
2 * SARG Squid Analysis Report Generator http://sarg.sourceforge.net
3 * 1998, 2015
4 *
5 * SARG donations:
6 * please look at http://sarg.sourceforge.net/donations.php
7 * Support:
8 * http://sourceforge.net/projects/sarg/forums/forum/363374
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"
28 #include "include/defs.h"
29
30 void siteuser(void)
31 {
32 FileObject *fp_in;
33 FILE *fp_ou;
34
35 char *buf;
36 char *ourl;
37 char csort[4096];
38 char general[MAXLEN];
39 char general2[MAXLEN];
40 char sites[MAXLEN];
41 char report[MAXLEN];
42 int regs=0;
43 int ourl_size;
44 int url_len;
45 int topuser_link;
46 int nsitesusers;
47 int cstatus;
48 longline line;
49 struct generalitemstruct item;
50 struct userinfostruct *uinfo;
51
52 if (Privacy) {
53 if (debugz>=LogLevel_Process) debugaz(__FILE__,__LINE__,_("Sites & users report not generated because privacy option is on\n"));
54 return;
55 }
56
57 if (debugz>=LogLevel_Process)
58 debuga(__FILE__,__LINE__,_("Creating report to list who visisted what site...\n"));
59 nsitesusers = 0;
60 format_path(__FILE__, __LINE__, general, sizeof(general), "%s/sarg-general", outdirname);
61 format_path(__FILE__, __LINE__, sites, sizeof(sites), "%s/sarg-sites", outdirname);
62 format_path(__FILE__, __LINE__, general2, sizeof(general2), "%s/sarg-general2", outdirname);
63 format_path(__FILE__, __LINE__, report, sizeof(report), "%s/siteuser.html", outdirname);
64
65 if (snprintf(csort,sizeof(csort),"sort -t \"\t\" -k 4,4 -k 1,1 -o \"%s\" \"%s\"",general2,general)>=sizeof(csort)) {
66 debuga(__FILE__,__LINE__,_("Sort command too long when sorting file \"%s\" to \"%s\"\n"),general,general2);
67 exit(EXIT_FAILURE);
68 }
69 cstatus=system(csort);
70 if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
71 debuga(__FILE__,__LINE__,_("sort command return status %d\n"),WEXITSTATUS(cstatus));
72 debuga(__FILE__,__LINE__,_("sort command: %s\n"),csort);
73 exit(EXIT_FAILURE);
74 }
75
76 if ((fp_in=FileObject_Open(general2))==NULL) {
77 debuga(__FILE__,__LINE__,_("Cannot open file \"%s\": %s\n"),general2,FileObject_GetLastOpenError());
78 debuga(__FILE__,__LINE__,_("sort command: %s\n"),csort);
79 exit(EXIT_FAILURE);
80 }
81
82 if ((fp_ou=fopen(report,"w"))==NULL) {
83 debuga(__FILE__,__LINE__,_("Cannot open file \"%s\": %s\n"),report,strerror(errno));
84 exit(EXIT_FAILURE);
85 }
86
87 write_html_header(fp_ou,(IndexTree == INDEX_TREE_DATE) ? 3 : 1,_("Sites & Users"),HTML_JS_SORTTABLE);
88 fputs("<tr><td class=\"header_c\">",fp_ou);
89 fprintf(fp_ou,_("Period: %s"),period.html);
90 fputs("</td></tr>\n",fp_ou);
91 fprintf(fp_ou,"<tr><th class=\"header_c\">%s</th></tr>\n",_("Sites & Users"));
92 close_html_header(fp_ou);
93
94 fputs("<div class=\"report\"><table cellpadding=\"0\" cellspacing=\"2\"",fp_ou);
95 if (SortTableJs[0]) fputs(" class=\"sortable\"",fp_ou);
96 fprintf(fp_ou,">\n<thead><tr><th class=\"header_l\">%s</th><th class=\"header_l",_("NUM"));
97 if (SortTableJs[0]) fputs(" sorttable_alpha",fp_ou);
98 fprintf(fp_ou,"\">%s</th>",_("ACCESSED SITE"));
99 if (BytesInSitesUsersReport)
100 fprintf(fp_ou,"<th class=\"header_l\">%s</th>",_("BYTES"));
101 fputs("<th class=\"header_l",fp_ou);
102 if (SortTableJs[0]) fputs(" sorttable_alpha",fp_ou);
103 /* TRANSLATORS: This is a column header showing the users who visited each site. */
104 fprintf(fp_ou,"\">%s</th></tr></thead>\n",_("USERS"));
105
106 ourl=NULL;
107 ourl_size=0;
108
109 userinfo_clearflag();
110 topuser_link=((ReportType & REPORT_TYPE_USERS_SITES) != 0 && !indexonly);
111
112 if ((line=longline_create())==NULL) {
113 debuga(__FILE__,__LINE__,_("Not enough memory to read file \"%s\"\n"),general2);
114 exit(EXIT_FAILURE);
115 }
116
117 while((buf=longline_read(fp_in,line))!=NULL) {
118 ger_read(buf,&item,general2);
119 if (item.total) continue;
120 uinfo=userinfo_find_from_id(item.user);
121 if (!uinfo) {
122 debuga(__FILE__,__LINE__,_("Unknown user ID %s in file \"%s\"\n"),item.user,general2);
123 exit(EXIT_FAILURE);
124 }
125
126 if (item.nacc > 0) nsitesusers = 1;
127 if (!nsitesusers) continue;
128
129 if (ourl==NULL || strcmp(item.url,ourl) != 0) {
130 if (regs>0) fputs("</td></tr>\n",fp_ou);
131
132 regs++;
133 if (SiteUsersReportLimit && regs >= SiteUsersReportLimit)
134 break;
135 fprintf(fp_ou,"<tr><td class=\"data\">%d</td><td class=\"data2\">",regs);
136
137 url_len=strlen(item.url);
138 if (url_len>=ourl_size) {
139 ourl_size=url_len+1;
140 ourl=realloc(ourl,ourl_size);
141 if (!ourl) {
142 debuga(__FILE__,__LINE__,_("Not enough memory to store the url\n"));
143 exit(EXIT_FAILURE);
144 }
145 }
146 strcpy(ourl,item.url);
147
148 if (BlockIt[0]!='\0' && ourl[0]!=ALIAS_PREFIX) {
149 fprintf(fp_ou,"<a href=\"%s%s?url=",wwwDocumentRoot,BlockIt);
150 output_html_url(fp_ou,ourl);
151 fputs("\"><img src=\"../images/sarg-squidguard-block.png\"></a> ",fp_ou);
152 }
153 output_html_link(fp_ou,ourl,100);
154 fputs("</td>",fp_ou);
155
156 if (BytesInSitesUsersReport) {
157 fputs("<td class=\"data\"",fp_ou);
158 if (SortTableJs[0]) fprintf(fp_ou," sorttable_customkey=\"%"PRId64"\"",(int64_t)item.nbytes);
159 fprintf(fp_ou,">%s</td>",fixnum(item.nbytes,1));
160 }
161 fputs("<td class=\"data2\">",fp_ou);
162
163 userinfo_clearflag();
164 if (topuser_link && uinfo->topuser)
165 fprintf(fp_ou,"<a href=\"%s/%s.html\">%s</a>",uinfo->filename,uinfo->filename,uinfo->label);
166 else
167 fprintf(fp_ou,"%s",uinfo->label);
168 uinfo->flag=1;
169 }
170 else if (uinfo->flag==0) {
171 if (topuser_link && uinfo->topuser)
172 fprintf(fp_ou," <a href=\"%s/%s.html\">%s</a>",uinfo->filename,uinfo->filename,uinfo->label);
173 else
174 fprintf(fp_ou," %s",uinfo->label);
175 uinfo->flag=1;
176 }
177
178 }
179 if (FileObject_Close(fp_in)) {
180 debuga(__FILE__,__LINE__,_("Read error in \"%s\": %s\n"),general2,FileObject_GetLastCloseError());
181 exit(EXIT_FAILURE);
182 }
183 longline_destroy(&line);
184
185 if (regs>0) {
186 fputs("</td></tr>\n",fp_ou);
187 }
188 if (ourl) free(ourl);
189
190 if (!KeepTempLog && unlink(general2)) {
191 debuga(__FILE__,__LINE__,_("Cannot delete \"%s\": %s\n"),general2,strerror(errno));
192 exit(EXIT_FAILURE);
193 }
194
195 fputs("</table></div>\n",fp_ou);
196 write_html_trailer(fp_ou);
197 if (fclose(fp_ou)==EOF) {
198 debuga(__FILE__,__LINE__,_("Write error in \"%s\": %s\n"),report,strerror(errno));
199 exit(EXIT_FAILURE);
200 }
201
202 return;
203 }