]>
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
));
143 if ( dotinuser
&& strchr ( name
, '_' )) {
144 subs ( name
, sizeof ( name
), "_" , "." );
148 In fact, even the first call is unecessary as the resolved user variable is never used.
150 ip2name(user,sizeof(user));
154 Is this redundant ip2name a mistake or is it really necessary ? It definitely slow down sarg
155 if the first ip2name succeed because it will try to resolve a name which is not an IP but if
156 the first ip2name failed, the second attempt may find the expected address which was resolved
157 in the mean time by the DNS server.
159 ip2name(user,sizeof(user));
162 if ( getword_atoll (& nacc
,& gwarea
, ' \t ' )< 0 ){
163 printf ( "SARG: Maybe you have an invalid number of access in your %s file of the siteuser. \n " , general2
);
166 if ( nacc
> 0 ) nsitesusers
= 1 ;
167 if ( getword_atoll (& nbytes
,& gwarea
, ' \t ' )< 0 ){
168 printf ( "SARG: Maybe you have an invalid number of bytes in your %s file of the siteuser. \n " , general2
);
171 if ( getword ( url
, sizeof ( url
),& gwarea
, ' \t ' )< 0 ) {
172 printf ( "SARG: Maybe you have an invalid url in your %s file of the siteuser. \n " , general2
);
182 sprintf ( wuser
, " %s " , name
);
183 if ( strstr ( users
, wuser
) == 0 && strcmp ( url
, ourl
) == 0 ) {
188 strcat ( users
, "<br>" );
193 if ( SiteUsersReportLimit
) {
194 if ( regs
>= SiteUsersReportLimit
)
199 sprintf ( BlockImage
, "<a href= \" %s%s?url=%s \" ><img src= \" ../images/sarg-squidguard-block.png \" border= \" 0 \" ></a> " , wwwDocumentRoot
, BlockIt
, ourl
);
200 else BlockImage
[ 0 ]= '\0' ;
202 if ( strcmp ( url
, ourl
) != 0 && nsitesusers
) {
203 if ( BytesInSitesUsersReport
) {
204 sprintf ( wwork2
, "%s" , fixnum ( obytes
, 1 ));
205 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
);
207 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
);
218 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
);
223 fputs ( "</table> \n </div> \n " , fp_ou
);
227 fputs ( "</body> \n </html> \n " , fp_ou
);