]>
git.ipfire.org Git - thirdparty/sarg.git/blob - siteuser.c
2 * AUTHOR: Pedro Lineu Orso pedro.orso@gmail.com
4 * SARG Squid Analysis Report Generator http://sarg.sourceforge.net
7 * please look at http://sarg.sourceforge.net/donations.php
8 * ---------------------------------------------------------------------
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
26 #include "include/conf.h"
27 #include "include/defs.h"
40 char general2
[ MAXLEN
];
52 struct getwordstruct gwarea
;
58 sprintf ( general
, "%s/sarg-general" , dirname
);
59 sprintf ( sites
, "%s/sarg-sites" , dirname
);
60 sprintf ( general2
, "%s/sarg-general2" , dirname
);
61 sprintf ( per
, "%s/sarg-period" , dirname
);
62 sprintf ( report
, "%s/siteuser.html" , dirname
);
64 if (( fp_in
= fopen ( per
, "r" )) == 0 ) {
65 fprintf ( stderr
, "SARG: (siteuser) %s: %s \n " , text
[ 45 ], per
);
69 if (! fgets ( period
, sizeof ( period
), fp_in
)) {
70 fprintf ( stderr
, "SARG: (siteuser) read error in %s \n " , per
);
75 sprintf ( csort
, "sort -k 4,4 -k 1,1 -o \" %s \" \" %s \" " , general2
, general
);
76 cstatus
= system ( csort
);
77 if (! WIFEXITED ( cstatus
) || WEXITSTATUS ( cstatus
)) {
78 fprintf ( stderr
, "SARG: sort command return status %d \n " , WEXITSTATUS ( cstatus
));
79 fprintf ( stderr
, "SARG: sort command: %s \n " , csort
);
83 if (( fp_in
= fopen ( general2
, "r" ))== NULL
) {
84 fprintf ( stderr
, "SARG: (topsite) %s: %s \n " , text
[ 8 ], general2
);
85 fprintf ( stderr
, "SARG: sort command: %s \n " , csort
);
89 if (( fp_ou
= fopen ( report
, "w" ))== NULL
) {
90 fprintf ( stderr
, "SARG: (topsite) %s: %s \n " , text
[ 8 ], report
);
94 fprintf ( fp_ou
, "<!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
);
96 fputs ( "</head> \n " , fp_ou
);
97 //if(strlen(FontFace) > 0) fprintf(fp_ou,"<font face=\"%s\">\n",FontFace);
98 fprintf ( fp_ou
, "<body bgcolor= \" %s \" text= \" %s \" background= \" %s \" > \n " , BgColor
, TxColor
, BgImage
);
99 write_logo_image ( fp_ou
);
101 if ( strcmp ( IndexTree
, "date" ) == 0 )
102 show_sarg ( fp_ou
, "../../.." );
104 show_sarg ( fp_ou
, ".." );
106 fputs ( "<div align= \" center \" ><table cellpadding= \" 0 \" cellspacing= \" 0 \" > \n " , fp_ou
);
107 fprintf ( fp_ou
, "<tr><th class= \" title \" >%s</th></tr> \n " , Title
);
109 fprintf ( fp_ou
, "<tr><td class= \" header3 \" >%s: %s</td></tr> \n " , text
[ 89 ], period
);
110 fprintf ( fp_ou
, "<tr><th class= \" header3 \" >%s</th></tr> \n " , text
[ 85 ]);
111 fputs ( "</table></div> \n " , fp_ou
);
113 fputs ( "<div align= \" center \" ><table cellpadding= \" 0 \" cellspacing= \" 2 \" > \n " , fp_ou
);
114 fputs ( "<tr><td></td></tr> \n " , fp_ou
);
115 if ( BytesInSitesUsersReport
)
116 fprintf ( fp_ou
, "<tr><th class= \" header \" >%s</th><th class= \" header \" >%s</th><th class= \" header \" >%s</th><th class= \" header \" >%s</th></tr> \n " , text
[ 100 ], text
[ 91 ], text
[ 93 ], text
[ 103 ]);
118 fprintf ( fp_ou
, "<tr><th class= \" header \" >%s</th><th class= \" header \" >%s</th><th class= \" header \" >%s</th></tr> \n " , text
[ 100 ], text
[ 91 ], text
[ 103 ]);
124 if (( users
=( char *) malloc ( 204800 ))== NULL
){
125 fprintf ( stderr
, "SARG: ERROR: %s" , text
[ 87 ]);
130 while ( fgets ( buf
, sizeof ( buf
), fp_in
)!= NULL
) {
131 getword_start (& gwarea
, buf
);
132 if ( getword ( user
, sizeof ( user
),& gwarea
, ' \t ' )< 0 ) {
133 printf ( "SARG: Maybe you have an invalid user in the %s file of the siteuser. \n " , general2
);
136 if ( strcmp ( user
, "TOTAL" ) == 0 )
141 // get_usertab_name(user,name,sizeof(name));
142 user_find ( name
, user
);
144 if ( dotinuser
&& strchr ( name
, '_' )) {
145 subs ( name
, sizeof ( name
), "_" , "." );
149 In fact, even the first call is unecessary as the resolved user variable is never used.
151 ip2name(user,sizeof(user));
155 Is this redundant ip2name a mistake or is it really necessary ? It definitely slow down sarg
156 if the first ip2name succeed because it will try to resolve a name which is not an IP but if
157 the first ip2name failed, the second attempt may find the expected address which was resolved
158 in the mean time by the DNS server.
160 ip2name(user,sizeof(user));
163 if ( getword_atoll (& nacc
,& gwarea
, ' \t ' )< 0 ){
164 printf ( "SARG: Maybe you have an invalid number of access in your %s file of the siteuser. \n " , general2
);
167 if ( nacc
> 0 ) nsitesusers
= 1 ;
168 if ( getword_atoll (& nbytes
,& gwarea
, ' \t ' )< 0 ){
169 printf ( "SARG: Maybe you have an invalid number of bytes in your %s file of the siteuser. \n " , general2
);
172 if ( getword ( url
, sizeof ( url
),& gwarea
, ' \t ' )< 0 ) {
173 printf ( "SARG: Maybe you have an invalid url in your %s file of the siteuser. \n " , general2
);
183 sprintf ( wuser
, " %s " , name
);
184 if ( strstr ( users
, wuser
) == 0 && strcmp ( url
, ourl
) == 0 ) {
189 strcat ( users
, "<br>" );
194 if ( SiteUsersReportLimit
) {
195 if ( regs
>= SiteUsersReportLimit
)
200 sprintf ( BlockImage
, "<a href= \" %s%s?url=%s \" ><img src= \" ../images/sarg-squidguard-block.png \" border= \" 0 \" ></a> " , wwwDocumentRoot
, BlockIt
, ourl
);
201 else BlockImage
[ 0 ]= '\0' ;
203 if ( strcmp ( url
, ourl
) != 0 && nsitesusers
) {
204 if ( BytesInSitesUsersReport
) {
205 sprintf ( wwork2
, "%s" , fixnum ( obytes
, 1 ));
206 fprintf ( fp_ou
, "<tr><td class= \" data \" >%d</td><td class= \" data2 \" >%s<a href= \" http://%s \" >%s</a></td><td class= \" data \" >%s</td><td class= \" data2 \" >%s</td></tr> \n " , regs
, BlockImage
, ourl
, ourl
, wwork2
, users
);
208 fprintf ( fp_ou
, "<tr><td class= \" data \" >%d</td><td class= \" data2 \" >%s<a href= \" http://%s \" >%s</a></td><td class= \" data2 \" >%s</td></tr> \n " , regs
, BlockImage
, ourl
, ourl
, users
);
219 fprintf ( fp_ou
, "<tr><td class= \" data \" >%d</td><td class= \" data2 \" ><a href= \" http://%s \" >%s</a></td><td class= \" data2 \" >%s</td></tr> \n " , regs
, ourl
, ourl
, users
);
224 fputs ( "</table> \n </div> \n " , fp_ou
);
228 fputs ( "</body> \n </html> \n " , fp_ou
);