#include "include/conf.h"
#include "include/defs.h"
-void saverecs(char *dirname, const struct userinfostruct *uinfo, long long int nacc, char *url, long long int nbytes, char *ip, char *hora, char *dia, long long int nelap, long long int incache, long long int oucache);
+void saverecs(FILE *fp_ou, const struct userinfostruct *uinfo, long long int nacc, char *url, long long int nbytes, char *ip, char *hora, char *dia, long long int nelap, long long int incache, long long int oucache);
void data_file(char *tmp)
{
- FILE *fp_in;
+ FILE *fp_in, *fp_ou=NULL;
- char accdia[11], acchora[9], accip[MAXLEN], accurl[MAXLEN];
+ char *buf;
+ char accdia[11], acchora[9], accip[MAXLEN], *accurl;
char oldaccdia[11], oldacchora[9], oldaccip[MAXLEN];
- char dirname[MAXLEN], wdirname[MAXLEN], oldurl[MAXLEN];
+ char *oldurl;
char olduser[MAXLEN], oldmsg[50], acccode[50], oldacccode[50];
char ipantes[MAXLEN], nameantes[MAXLEN];
char accsmart[MAXLEN];
long long int nbytes=0;
long long int nelap=0;
long long int nacc=0;
- long long int rtotal=0;
+ int rtotal=0;
long long int incache=0;
long long int oucache=0;
long long int accbytes;
long long int accelap;
int dlen;
int new_user;
+ int same_url;
+ int url_len;
+ int ourl_size;
struct getwordstruct gwarea;
struct userinfostruct *uinfo;
+ struct longlinestruct line;
const char logext[]=".log";
ipantes[0]='\0';
olduser[0]='\0';
strcat(tmp,"/sarg");
+ oldurl=NULL;
+ ourl_size=0;
dirp = opendir(tmp);
while ( (direntp = readdir( dirp )) != NULL ) {
uinfo=userinfo_find_from_file(user);
if (!uinfo) {
- debuga(_("Ignoring unknown user file %s"),user);
+ debuga(_("Ignoring unknown user file %s\n"),user);
continue;
}
strcpy(u2,uinfo->id);
- if(Ip2Name && uinfo->id_is_ip) ip2name(u2,sizeof(u2));
+ if(Ip2Name && uinfo->id_is_ip) {
+ strcpy(ipantes,u2);
+ ip2name(u2,sizeof(u2));
+ strcpy(nameantes,u2);
+ }
user_find(uinfo->label,MAX_USER_LEN, u2);
if (snprintf(tmp3,sizeof(tmp3),"%s/%s",tmp,direntp->d_name)>=sizeof(tmp3)) {
- debuga(_("(datafile) directory path too long: %s/%s"),tmp,direntp->d_name);
+ debuga(_("(datafile) directory path too long: %s/%s\n"),tmp,direntp->d_name);
exit(1);
}
if((fp_in=MY_FOPEN(tmp3,"r"))==NULL){
- fprintf(stderr, "SARG: (datafile) %s: %s\n",_("Cannot open file"),tmp);
+ debuga(_("(datafile) Cannot open file: %s\n"),tmp3);
+ exit(1);
+ }
+
+ if (longline_prepare(&line)<0) {
+ debuga(_("Not enough memory to read the downloaded files."));
exit(1);
}
ttopen=0;
new_user=1;
- while(fgets(buf,sizeof(buf),fp_in)!=NULL) {
+ while((buf=longline_read(fp_in,&line))!=NULL) {
getword_start(&gwarea,buf);
- if (getword(accdia,sizeof(accdia),&gwarea,' ')<0 || getword(acchora,sizeof(acchora),&gwarea,' ')<0 ||
- getword(accip,sizeof(accip),&gwarea,' ')<0 ||
- getword(accurl,sizeof(accurl),&gwarea,' ')<0 || getword_atoll(&accbytes,&gwarea,' ')<0 ||
- getword(acccode,sizeof(acccode),&gwarea,' ')<0 || getword_atoll(&accelap,&gwarea,' ')<0 ||
- getword_skip(20000,&gwarea,' ')<0 || getword(accsmart,sizeof(accsmart),&gwarea,'"')<0) {
- debuga(_("There is a broken record or garbage in file %s"),tmp3);
+ if (getword(accdia,sizeof(accdia),&gwarea,'\t')<0 || getword(acchora,sizeof(acchora),&gwarea,'\t')<0 ||
+ getword(accip,sizeof(accip),&gwarea,'\t')<0 ||
+ getword_ptr(buf,&accurl,&gwarea,'\t')<0 || getword_atoll(&accbytes,&gwarea,'\t')<0 ||
+ getword(acccode,sizeof(acccode),&gwarea,'\t')<0 || getword_atoll(&accelap,&gwarea,'\t')<0) {
+ debuga(_("There is a broken record or garbage in file %s\n"),tmp3);
+ exit(1);
+ }
+ if (getword_skip(20000,&gwarea,'"')<0 || getword(accsmart,sizeof(accsmart),&gwarea,'"')<0) {
+ debuga(_("There is an invalid smart info in file %s\n"),tmp3);
exit(1);
}
}
if(!rtotal){
+ url_len=strlen(accurl);
+ if (!oldurl || url_len>=ourl_size) {
+ ourl_size=url_len+1;
+ oldurl=realloc(oldurl,ourl_size);
+ if (!oldurl) {
+ debuga(_("Not enough memory to store the url\n"));
+ exit(1);
+ }
+ }
strcpy(oldurl,accurl);
strcpy(oldacccode,acccode);
strcpy(oldaccip,accip);
strcpy(oldaccdia,accdia);
strcpy(oldacchora,acchora);
+ new_user=0;
rtotal++;
}
+ same_url=(strcmp(oldurl,accurl) == 0);
- if(strcmp(oldurl,accurl) != 0 || new_user){
- strcpy(oldmsg,"OK");
- if(strstr(oldacccode,"DENIED") != 0) strcpy(oldmsg,_("DENIED"));
- gravatmp(uinfo,oldurl,nacc,nbytes,oldmsg,nelap,indexonly,incache,oucache);
- strcpy(wdirname,dirname);
- saverecs(wdirname,uinfo,nacc,oldurl,nbytes,oldaccip,oldacchora,oldaccdia,nelap,incache,oucache);
+ if(!same_url || new_user){
+ if(strstr(oldacccode,"DENIED") != 0)
+ strcpy(oldmsg,_("DENIED"));
+ else
+ strcpy(oldmsg,"OK");
+ if(!fp_ou && (fp_ou=MY_FOPEN(DataFile,"w"))==NULL){
+ debuga(_("(datafile) Cannot open file: %s\n"),DataFile);
+ exit(1);
+ }
+ saverecs(fp_ou,uinfo,nacc,oldurl,nbytes,oldaccip,oldacchora,oldaccdia,nelap,incache,oucache);
nacc=0;
nbytes=0;
nelap=0;
incache=0;
oucache=0;
+ new_user=0;
}
nacc++;
if(strstr(crc2,"MISS") != 0) oucache+=accbytes;
else incache+=accbytes;
- strcpy(oldurl,accurl);
+ if (!same_url) {
+ url_len=strlen(accurl);
+ if (url_len>=ourl_size) {
+ ourl_size=url_len+1;
+ oldurl=realloc(oldurl,ourl_size);
+ if (!oldurl) {
+ debuga(_("Not enough memory to store the url\n"));
+ exit(1);
+ }
+ }
+ strcpy(oldurl,accurl);
+ }
new_user=0;
strcpy(oldacccode,acccode);
strcpy(oldaccip,accip);
}
fclose(fp_in);
+ longline_free(&line);
}
-
(void)closedir( dirp );
+ if (oldurl) free(oldurl);
+ if (fp_ou) fclose(fp_ou);
+
if(debug)
- debuga("Datafile %s successfully",DataFile);
+ debuga("Datafile %s written successfully\n",DataFile);
}
-void saverecs(char *dirname, const struct userinfostruct *uinfo, long long int nacc, char *url, long long int nbytes, char *ip, char *hora, char *dia, long long int nelap, long long int incache, long long int oucache)
+void saverecs(FILE *fp_ou, const struct userinfostruct *uinfo, long long int nacc, char *url, long long int nbytes, char *ip, char *hora, char *dia, long long int nelap, long long int incache, long long int oucache)
{
- FILE *fp_ou;
char val[20];
-
- if((fp_ou=MY_FOPEN(DataFile,"a"))==NULL){
- fprintf(stderr, "SARG: (datafile) %s: %s\n",_("Cannot open file"),DataFile);
- exit(1);
- }
+ char name[512];
if((DataFileFields & DATA_FIELD_USER) != 0) {
fputs(uinfo->label,fp_ou);
fputc(DataFileDelimiter[0],fp_ou);
}
if((DataFileFields & DATA_FIELD_URL) != 0) {
- strcpy(name,url);
- if (strcmp(DataFileUrl,"ip") == 0) name2ip(name);
+ url_hostname(url,name,sizeof(name));
+ if (DataFileUrl == DATAFILEURL_IP) name2ip(name);
fputs(name,fp_ou);
fputc(DataFileDelimiter[0],fp_ou);
}
}
fputc('\n',fp_ou);
-
- fclose(fp_ou);
}
char *str;
char tmp2[MAXLEN];
char tmp3[MAXLEN];
- char tmp4[MAXLEN];
- char tmp5[MAXLEN];
- char tmp6[MAXLEN];
+ char denied_unsort[MAXLEN];
+ char denied_sort[MAXLEN];
+ char authfail_unsort[MAXLEN];
char start_hour[128];
char end_hour[128];
char *linebuf;
strcpy(RealtimeUnauthRec,"show");
SquidguardIgnoreDate=0;
DansguardianIgnoreDate=0;
- strcpy(DataFileUrl,"ip");
+ DataFileUrl=DATAFILEURL_IP;
strcpy(MaxElapsed,"28800000");
BytesInSitesUsersReport=0;
UserAuthentication=0;
unlinkdir(tmp3,1);
}
my_mkdir(tmp3);
- strcpy(tmp4,tmp3);
- strcpy(tmp5,tmp3);
- strcpy(tmp6,tmp3);
- strcat(tmp4,"/denied.log.unsort");
- strcat(tmp5,"/denied.log");
- strcat(tmp6,"/authfail.log.unsort");
+ strcpy(denied_unsort,tmp3);
+ strcpy(denied_sort,tmp3);
+ strcpy(authfail_unsort,tmp3);
+ strcat(denied_unsort,"/denied.log.unsort");
+ strcat(denied_sort,"/denied.log");
+ strcat(authfail_unsort,"/authfail.log.unsort");
if(debug) {
fprintf(stderr, _("SARG: Parameters:\nSARG:\n"));
sprintf ( sz_Download_Unsort , "%s/sarg/download.unsort", tmp);
- if((ReportType & REPORT_TYPE_DENIED) != 0) {
- if((fp_denied=MY_FOPEN(tmp4,"w"))==NULL) {
- debuga(_("SARG: (log) Cannot open file: %s - %s"),tmp4,strerror(errno));
- exit(1);
+ if(DataFile[0]=='\0') {
+ if((ReportType & REPORT_TYPE_DENIED) != 0) {
+ if((fp_denied=MY_FOPEN(denied_unsort,"w"))==NULL) {
+ debuga(_("SARG: (log) Cannot open file: %s - %s"),denied_unsort,strerror(errno));
+ exit(1);
+ }
}
- }
- if(DataFile[0]=='\0') {
if((ReportType & REPORT_TYPE_DENIED) != 0 || (ReportType & REPORT_TYPE_AUTH_FAILURES) != 0) {
- if((fp_authfail=MY_FOPEN(tmp6,"w"))==NULL) {
- debuga(_("SARG: (log) Cannot open file: %s - %s"),tmp6,strerror(errno));
+ if((fp_authfail=MY_FOPEN(authfail_unsort,"w"))==NULL) {
+ debuga(_("SARG: (log) Cannot open file: %s - %s"),authfail_unsort,strerror(errno));
exit(1);
}
}
download_count++;
}
} else
- download_flag=0;
+ download_flag=0;
// remove any protocol:// at the beginning of the URL
if ((str = strchr(url,'/')) != NULL && str[1] == '/') {
}
if(!LongUrl) {
- int i;
-
- for (i=0 ; i<sizeof(hostname)-1 && url[i] && url[i]!='/' ; i++)
- hostname[i]=url[i];
- hostname[i]='\0';
+ url_hostname(url,hostname,sizeof(hostname));
url=hostname;
}
totregsg++;
- if(download_flag && download_url && strstr(code,"DENIED") == 0) {
+ if(!dataonly && download_flag && download_url && strstr(code,"DENIED") == 0) {
ndownload = 1;
if ( ! fp_Download_Unsort ) {
}
if((ReportType & REPORT_TYPE_DENIED) != 0 || (ReportType & REPORT_TYPE_AUTH_FAILURES) != 0) {
- if(strstr(code,"DENIED/403") != 0) {
+ if(fp_denied && strstr(code,"DENIED/403") != 0) {
fprintf(fp_denied, "%s\t%s\t%s\t%s\t%s\n",dia,hora,user,ip,urly);
denied_count++;
}
- if(strstr(code,"DENIED/401") != 0 || strstr(code,"DENIED/407") != 0) {
- if(fp_authfail)
- fprintf(fp_authfail, "%s\t%s\t%s\t%s\t%s\n",dia,hora,user,ip,urly);
+ if(fp_authfail && (strstr(code,"DENIED/401") != 0 || strstr(code,"DENIED/407") != 0)) {
+ fprintf(fp_authfail, "%s\t%s\t%s\t%s\t%s\n",dia,hora,user,ip,urly);
authfail_count++;
}
}
if(userfile)
free(userfile);
close_usertab();
- unlink(tmp4);
- unlink(tmp6);
+ unlink(denied_unsort);
+ unlink(authfail_unsort);
unlink(tmp3);
exit(0);
}
debuga("%s %s",_("Sarg parsed log saved as"),arq_log);
}
- if((ReportType & REPORT_TYPE_DENIED) != 0) {
- sprintf(csort,"sort -T \"%s\" -k 3,3 -k 5,5 -o \"%s\" \"%s\"",tmp,tmp5,tmp4);
+ if(DataFile[0] == '\0' && (ReportType & REPORT_TYPE_DENIED) != 0) {
+ sprintf(csort,"sort -T \"%s\" -k 3,3 -k 5,5 -o \"%s\" \"%s\"",tmp,denied_sort,denied_unsort);
cstatus=system(csort);
if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
fprintf(stderr, "SARG: sort command return status %d\n",WEXITSTATUS(cstatus));
fprintf(stderr, "SARG: sort command: %s\n",csort);
exit(1);
}
- unlink(tmp4);
+ unlink(denied_unsort);
}
sort_users_log(tmp, debug);
unlink(tmp2);
if((ReportType & REPORT_TYPE_DENIED) != 0)
- unlink(tmp5);
+ unlink(denied_sort);
if(zip[0] != '\0' && strcmp(zip,"zcat") !=0) {
recomp(arq, zip);