#include "include/defs.h"
#define REPORT_EVERY_X_LINES 5000
+#define MAX_OPEN_USER_FILES 10
+
+struct userfilestruct
+{
+ struct userfilestruct *next;
+ struct userinfostruct *user;
+ FILE *file;
+};
static char *userfile=NULL;
char sz_Download_Unsort[ 20000 ] ;
FILE * fp_Download_Unsort = NULL ;
- FILE * fp_Write_User = NULL ;
extern int optind;
extern int optopt;
char zip[20];
char *str;
char tmp2[MAXLEN];
+ char tmp3[MAXLEN];
+ char denied_unsort[MAXLEN];
+ char denied_sort[MAXLEN];
+ char authfail_unsort[MAXLEN];
char start_hour[128];
char end_hour[128];
char *linebuf;
char hostname[512];
char *url;
char *urly;
+ char user[MAX_USER_LEN];
enum InputLogFormat ilf;
int ilf_count[ILF_Last];
int ch;
- int x, l;
+ int x;
int errflg=0;
int puser=0;
int fhost=0;
int isa_ncols=0,isa_cols[ISACOL_Last];
int from_stdin;
int blen;
+ int maxopenfiles;
+ int nopen;
+ int id_is_ip;
long totregsl=0;
long totregsg=0;
long totregsx=0;
unsigned long recs2=0UL;
int OutputNonZero = REPORT_EVERY_X_LINES ;
int download_flag=0;
- char *download_url;
- char sz_Last_User[MAXLEN]="";
+ char *download_url=NULL;
struct getwordstruct gwarea;
struct longlinestruct line;
+ struct userinfostruct *uinfo;
+ struct userfilestruct *first_user_file, *ufile, *ufile1, *prev_ufile;
+
+#ifdef HAVE_LOCALE_H
+ setlocale(LC_TIME,"");
+#endif
+
+#if defined(ENABLE_NLS) && defined(HAVE_LOCALE_H)
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE_NAME, LOCALEDIR);
+ textdomain (PACKAGE_NAME);
+#endif //ENABLE_NLS
BgImage[0]='\0';
LogoImage[0]='\0';
RemoveTempFiles=1;
strcpy(ReplaceIndex,"index.html");
Index=INDEX_YES;
- strcpy(RecordsWithoutUser,"ip");
+ RecordsWithoutUser=RECORDWITHOUTUSER_IP;
UseComma=0;
strcpy(MailUtility,"mailx");
TopSitesNum=100;
strcpy(TopsitesSortField,"CONNECT");
strcpy(TopsitesSortType,"D");
LongUrl=0;
- strcpy(language,"English");
strcpy(FontFace,"Verdana,Tahoma,Arial");
strcpy(datetimeby,"elap");
strcpy(CharSet,"ISO-8859-1");
strcpy(DisplayedValues,"abbreviation");
strcpy(HeaderFontSize,"9px");
strcpy(TitleFontSize,"11px");
- strcpy(AuthUserFile,"/usr/local/sarg/passwd");
- strcpy(AuthName,"SARG, Restricted Access");
- strcpy(AuthType,"basic");
- strcpy(Require,"require user admin %u");
+ strcpy(AuthUserTemplateFile,"sarg_htaccess");
set_download_suffix("7z,ace,arj,avi,bat,bin,bz2,bzip,cab,com,cpio,dll,doc,dot,exe,gz,iso,lha,lzh,mdb,mov,mp3,mpeg,mpg,mso,nrg,ogg,ppt,rar,rtf,shs,src,sys,tar,tgz,vcd,vob,wma,wmv,zip");
Graphs=1;
#if defined(FONTDIR)
GraphFont[0]='\0';
#endif
strcpy(Ulimit,"20000");
- strcpy(NtlmUserFormat,"domainname+username");
+ NtlmUserFormat=NTLMUSERFORMAT_DOMAINUSER;
IndexTree=INDEX_TREE_FILE;
strcpy(RealtimeTypes,"GET,PUT,CONNECT");
strcpy(RealtimeUnauthRec,"show");
SquidguardIgnoreDate=0;
DansguardianIgnoreDate=0;
- strcpy(DataFileUrl,"ip");
+ DataFileUrl=DATAFILEURL_IP;
strcpy(MaxElapsed,"28800000");
BytesInSitesUsersReport=0;
UserAuthentication=0;
color1=0;
color2=0;
color3=0;
- dotinuser=0;
realt=0;
realtime_refresh=3;
realtime_access_log_lines=1000;
ndownload=0;
squid24=0;
- bzero(IncludeUsers, MAXLEN);
- bzero(ExcludeString, MAXLEN);
-
-#ifdef HAVE_LOCALE_H
- setlocale(LC_TIME,"");
- setlocale (LC_MESSAGES, "");
-#endif
- bindtextdomain (PACKAGE_NAME, LOCALEDIR);
- textdomain (PACKAGE_NAME);
+ bzero(IncludeUsers, sizeof(IncludeUsers));
+ bzero(ExcludeString, sizeof(ExcludeString));
+ first_user_file=NULL;
NAccessLog=0;
for(x=0; x<MAXLOGS; x++)
AccessLog[x][0]='\0';
AccessLogFromCmdLine=0;
- language_load(language);
- strcpy(Title,text[88]);
+ strcpy(Title,_("Squid User Access Report"));
while((ch = getopt(argc, argv, "a:b:c:d:e:f:g:u:l:L:o:s:t:w:hijmnprvxyz")) != -1){
switch(ch)
date[sizeof(date)-1]='\0';
getword_start(&gwarea,optarg);
if (getword(cdfrom,sizeof(cdfrom),&gwarea,'-')<0 || getword(cduntil,sizeof(cduntil),&gwarea,0)<0) {
- printf("SARG: Maybe you have a broken record or garbage in your date range.\n");
+ printf(_("SARG: The date range requested on the command line by option -d is invalid.\n"));
exit(1);
}
date_from(date, cdfrom, cduntil);
break;
case 'l':
if (NAccessLog>=MAXLOGS) {
- printf("SARG: Too many log files.\n");
+ printf(_("SARG: Too many log files passed on command line with option -l.\n"));
exit(1);
}
strcpy(AccessLog[NAccessLog],optarg);
} else {
getword_start(&gwarea,optarg);
if (getword(hm,sizeof(hm),&gwarea,'-')<0 || getword(hmf,sizeof(hmf),&gwarea,0)<0) {
- fprintf(stderr,"SARG: Maybe you have a broken record or garbage in your time range.\n");
+ debuga(_("The time range passed on the command line with option -t is invalid\n"));
exit(1);
}
}
if(sscanf(hm,"%d:%d",&h,&m)!=2) {
- fprintf(stderr,"SARG: time period must be MM or MM:SS. Exit.\n");
+ debuga(_("Time period must be MM or MM:SS. Exit\n"));
exit(1);
}
sprintf(hm,"%02d%02d",h,m);
if(sscanf(hmf,"%d:%d",&h,&m)!=2) {
- fprintf(stderr,"SARG: time period must be MM or MM:SS. Exit.\n");
+ debuga(_("Time period must be MM or MM:SS. Exit\n"));
exit(1);
}
sprintf(hmf,"%02d%02d",h,m);
debugz++;
break;
case ':':
- fprintf(stderr, "Option -%c require an argument\n",optopt);
+ debuga(_("Option -%c require an argument\n"),optopt);
errflg++;
break;
case '?':
exit(2);
}
- if(debug) debuga("Init");
+ if(debug) debuga(_("Init\n"));
if(ConfigFile[0] == '\0') sprintf(ConfigFile,"%s/sarg.conf",SYSCONFDIR);
if(access(ConfigFile, R_OK) != 0) {
- debuga("Cannot open config file: %s - %s",ConfigFile,strerror(errno));
+ debuga(_("Cannot open config file: %s - %s\n"),ConfigFile,strerror(errno));
exit(1);
}
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: %s:\nSARG:\n",text[22]);
- fprintf(stderr, "SARG: %35s (-a) = %s\n",text[23],addr);
- fprintf(stderr, "SARG: %35s (-b) = %s\n",text[71],uagent);
- fprintf(stderr, "SARG: %35s (-c) = %s\n",text[69],hexclude);
- fprintf(stderr, "SARG: %35s (-d) = %s\n",text[24],date);
- fprintf(stderr, "SARG: %35s (-e) = %s\n",text[41],email);
- fprintf(stderr, "SARG: %35s (-f) = %s\n",text[70],ConfigFile);
+ debuga(_("Parameters:\n"));
+ debuga(_(" Hostname or IP address (-a) = %s\n"),addr);
+ debuga(_(" Useragent log (-b) = %s\n"),uagent);
+ debuga(_(" Exclude file (-c) = %s\n"),hexclude);
+ debuga(_(" Date from-until (-d) = %s\n"),date);
+ debuga(_(" Email address to send reports (-e) = %s\n"),email);
+ debuga(_(" Config file (-f) = %s\n"),ConfigFile);
if(strcmp(df,"e") == 0)
- fprintf(stderr, "SARG: %35s (-g) = %s (dd/mm/yyyy)\n",text[25],text[26]);
+ debuga(_(" Date format (-g) = Europe (dd/mm/yyyy)\n"));
if(strcmp(df,"u") == 0)
- fprintf(stderr, "SARG: %35s (-g) = %s (mm/dd/yyyy)\n",text[25],text[27]);
+ debuga(_(" Date format (-g) = USA (mm/dd/yyyy)\n"));
if(strcmp(df,"w") == 0)
- fprintf(stderr, "SARG: %35s (-g) = %s (yyyy/ww)\n",text[25],text[85]);
- if(iprel)
- fprintf(stderr, "SARG: %35s (-i) = %s\n",text[28],text[1]);
- else
- fprintf(stderr, "SARG: %35s (-i) = %s\n",text[28],text[2]);
+ debuga(_(" Date format (-g) = Sites & Users (yyyy/ww)\n"));
+ debuga(_(" IP report (-i) = %s\n"),(iprel) ? _("Yes") : _("No"));
for (iarq=0 ; iarq<NAccessLog ; iarq++)
- fprintf(stderr, "SARG: %35s (-l) = %s\n",text[37],AccessLog[iarq]);
- if(Ip2Name)
- fprintf(stderr, "SARG: %35s (-n) = %s\n",text[65],text[1]);
- else
- fprintf(stderr, "SARG: %35s (-n) = %s\n",text[65],text[2]);
- fprintf(stderr, "SARG: %35s (-o) = %s\n",text[38],outdir);
- if(UserIp)
- fprintf(stderr, "SARG: %35s (-p) = %s\n",text[29],text[1]);
- else
- fprintf(stderr, "SARG: %35s (-p) = %s\n",text[29],text[2]);
- fprintf(stderr, "SARG: %35s (-s) = %s\n",text[30],site);
- fprintf(stderr, "SARG: %35s (-t) = %s\n",text[31],hm);
- fprintf(stderr, "SARG: %35s (-u) = %s\n",text[32],us);
- fprintf(stderr, "SARG: %35s (-w) = %s\n",text[34],tmp);
- if(debug)
- fprintf(stderr, "SARG: %35s (-x) = %s\n",text[35],text[1]);
- else
- fprintf(stderr, "SARG: %35s (-x) = %s\n",text[35],text[2]);
- if(debugz)
- fprintf(stderr, "SARG: %35s (-z) = %s\n",text[36],text[1]);
- else
- fprintf(stderr, "SARG: %35s (-z) = %s\n",text[36],text[2]);
- fprintf(stderr, "SARG:\n");
+ debuga(_(" Input log (-l) = %s\n"),AccessLog[iarq]);
+ debuga(_(" Resolve IP Address (-n) = %s\n"),(Ip2Name) ? _("Yes") : _("No"));
+ debuga(_(" Output dir (-o) = %s\n"),outdir);
+ debuga(_("Use Ip Address instead of userid (-p) = %s\n"),(UserIp) ? _("Yes") : _("No"));
+ debuga(_(" Accessed site (-s) = %s\n"),site);
+ debuga(_(" Time (-t) = %s\n"),hm);
+ debuga(_(" User (-u) = %s\n"),us);
+ debuga(_(" Temporary dir (-w) = %s\n"),tmp);
+ debuga(_(" Debug messages (-x) = %s\n"),(debug) ? _("Yes") : _("No"));
+ debuga(_(" Process messages (-z) = %s\n"),(debugz) ? _("Yes") : _("No"));
+ debuga("\n");
}
if(debugm) {
- printf("%s:\nSARG:\n",text[22]);
- printf("%35s (-a) = %s\n",text[23],addr);
- printf("%35s (-b) = %s\n",text[71],uagent);
- printf("%35s (-c) = %s\n",text[69],hexclude);
- printf("%35s (-d) = %s\n",text[24],date);
- printf("%35s (-e) = %s\n",text[41],email);
- printf("%35s (-f) = %s\n",text[70],ConfigFile);
+ printf(_("Parameters:\n"));
+ printf(_(" Hostname or IP address (-a) = %s\n"),addr);
+ printf(_(" Useragent log (-b) = %s\n"),uagent);
+ printf(_(" Exclude file (-c) = %s\n"),hexclude);
+ printf(_(" Date from-until (-d) = %s\n"),date);
+ printf(_(" Email address to send reports (-e) = %s\n"),email);
+ printf(_(" Config file (-f) = %s\n"),ConfigFile);
if(strcmp(df,"e") == 0)
- printf("%35s (-g) = %s (dd/mm/yyyy)\n",text[25],text[26]);
+ printf(_(" Date format (-g) = Europe (dd/mm/yyyy)\n"));
if(strcmp(df,"u") == 0)
- printf("%35s (-g) = %s (mm/dd/yyyy)\n",text[25],text[27]);
+ printf(_(" Date format (-g) = USA (mm/dd/yyyy)\n"));
if(strcmp(df,"w") == 0)
- printf("%35s (-g) = %s (yyyy/ww)\n",text[25],text[85]);
- if(iprel)
- printf("%35s (-i) = %s\n",text[28],text[1]);
- else
- printf("%35s (-i) = %s\n",text[28],text[2]);
+ printf(_(" Date format (-g) = Sites & Users (yyyy/ww)\n"));
+ printf(_(" IP report (-i) = %s\n"),(iprel) ? _("Yes") : _("No"));
for (iarq=0 ; iarq<NAccessLog ; iarq++)
- printf("%35s (-l) = %s\n",text[37],AccessLog[iarq]);
- if(Ip2Name)
- printf("%35s (-n) = %s\n",text[65],text[1]);
- else
- printf("%35s (-n) = %s\n",text[65],text[2]);
- printf("%35s (-o) = %s\n",text[38],outdir);
- if(UserIp)
- printf("%35s (-p) = %s\n",text[29],text[1]);
- else
- printf("%35s (-p) = %s\n",text[29],text[2]);
- printf("%35s (-s) = %s\n",text[30],site);
- printf("%35s (-t) = %s\n",text[31],hm);
- printf("%35s (-u) = %s\n",text[32],us);
- printf("%35s (-w) = %s\n",text[34],tmp);
- if(debug)
- printf("%35s (-x) = %s\n",text[35],text[1]);
- else
- printf("%35s (-x) = %s\n",text[35],text[2]);
- if(debugz)
- printf("%35s (-z) = %s\n",text[36],text[1]);
- else
- printf("%35s (-z) = %s\n",text[36],text[2]);
- printf("sarg %s: %s\n",text[73],VERSION);
- printf("Language=%s\n\n",text[3]);
+ printf(_(" Input log (-l) = %s\n"),AccessLog[iarq]);
+ printf(_(" Resolve IP Address (-n) = %s\n"),(Ip2Name) ? _("Yes") : _("No"));
+ printf(_(" Output dir (-o) = %s\n"),outdir);
+ printf(_("Use Ip Address instead of userid (-p) = %s\n"),(UserIp) ? _("Yes") : _("No"));
+ printf(_(" Accessed site (-s) = %s\n"),site);
+ printf(_(" Time (-t) = %s\n"),hm);
+ printf(_(" User (-u) = %s\n"),us);
+ printf(_(" Temporary dir (-w) = %s\n"),tmp);
+ printf(_(" Debug messages (-x) = %s\n"),(debug) ? _("Yes") : _("No"));
+ printf(_(" Process messages (-z) = %s\n"),(debugz) ? _("Yes") : _("No"));
+ printf(_("sarg version: %s\n"),VERSION);
}
if(debug)
- debuga("sarg %s: %s",text[73],VERSION);
+ debuga(_("sarg version: %s\n"),VERSION);
+ maxopenfiles=MAX_OPEN_USER_FILES;
#ifdef HAVE_RLIM_T
if (Ulimit[0] != '\0') {
struct rlimit rl;
#warning "No rlimit resource for the number of open files"
#endif
if(rc == -1) {
- debuga("setrlimit error - %s\n",strerror(errno));
+ debuga(_("setrlimit error - %s\n"),strerror(errno));
}
if(debug)
init_usertab(UserTabFile);
if (longline_prepare(&line)<0) {
- debuga(_("Not enough memory to read a log file"));
+ debuga(_("Not enough memory to read a log file\n"));
exit(1);
}
sprintf ( sz_Download_Unsort , "%s/sarg/download.unsort", tmp);
- if((ReportType & REPORT_TYPE_DENIED) != 0) {
- if((fp_denied=MY_FOPEN(tmp4,"w"))==NULL) {
- fprintf(stderr, "%s: (log) %s: %s - %s\n",argv[0],text[45],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\n"),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) {
- fprintf(stderr, "%s: (log) %s: %s - %s\n",argv[0],text[45],tmp6,strerror(errno));
+ if((fp_authfail=MY_FOPEN(authfail_unsort,"w"))==NULL) {
+ debuga(_("SARG: (log) Cannot open file: %s - %s\n"),authfail_unsort,strerror(errno));
exit(1);
}
}
if(strcmp(arq,"-")==0) {
if(debug)
- debuga("%s: %s",text[7],"stdin");
+ debuga(_("Reading access log file: from stdin\n"));
fp_in=stdin;
from_stdin=1;
} else {
decomp(arq,zip,tmp);
if(debug)
- debuga("%s: %s",text[7],arq);
+ debuga(_("Reading access log file: %s\n"),arq);
if((fp_in=MY_FOPEN(arq,"r"))==NULL) {
- fprintf(stderr, "%s: (log) %s: %s - %s\n",argv[0],text[8],arq,strerror(errno));
+ debuga(_("SARG: (log) Cannot open log file: %s - %s\n"),arq,strerror(errno));
exit(1);
}
from_stdin=0;
}
}
rewind(fp_in);
- printf("SARG: Records in file: %lu, reading: %3.2f%%\r",recs1,(float) 0);
+ printf(_("SARG: Records in file: %lu, reading: %3.2f%%\r"),recs1,(float) 0);
fflush( stdout ) ;
}
if(strncmp(linebuf,"#Software: Mic",14) == 0) {
fixendofline(linebuf);
if (debug)
- debuga("%s: %s",text[143],linebuf);
+ debuga(_("Log is from Microsoft ISA: %s\n"),linebuf);
ilf=ILF_Isa;
ilf_count[ilf]++;
continue;
getword_start(&gwarea,arqtt);
if (getword_skip(2000,&gwarea,'-')<0 || getword(val2,sizeof(val2),&gwarea,'_')<0 ||
getword_skip(10,&gwarea,'-')<0 || getword(val3,sizeof(val3),&gwarea,'_')<0) {
- printf("SARG: The name of the file is invalid: %s\n",arq);
+ debuga(_("The name of the file is invalid: %s\n"),arq);
exit(1);
}
sprintf(period,"%s-%s",val2,val3);
}
sprintf(arq_log,"%s/sarg_temp.log",ParsedOutputLog);
if((fp_log=MY_FOPEN(arq_log,"w"))==NULL) {
- fprintf(stderr, "%s: (log) %s: %s - %s\n",argv[0],text[8],arq_log,strerror(errno));
+ debuga(_("SARG: (log) Cannot open log file: %s - %s\n"),arq_log,strerror(errno));
exit(1);
}
fputs("*** SARG Log ***\n",fp_log);
if(strstr(linebuf,"logfile turned over") != 0) continue;
if(linebuf[0] == ' ') continue;
- // Record only hours usage which is required
- tt = (time_t) strtoul( linebuf, NULL, 10 );
- t = localtime( &tt );
-
- if( bsearch( &( t -> tm_wday ), weekdays.list, weekdays.len,
- sizeof( int ), compar ) == NULL )
- continue;
-
- if( bsearch( &( t -> tm_hour ), hours.list, hours.len,
- sizeof( int ), compar ) == NULL )
- continue;
-
// exclude_string
- exstring=0;
if(ExcludeString[0] != '\0') {
+ exstring=0;
getword_start(&gwarea,ExcludeString);
while(strchr(gwarea.current,':') != 0) {
if (getword_multisep(val1,sizeof(val1),&gwarea,':')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your exclusion string.\n");
+ debuga(_("Maybe you have a broken record or garbage in your exclusion string\n"));
exit(1);
}
if((str=(char *) strstr(linebuf,val1)) != (char *) NULL )
}
if((str=(char *) strstr(linebuf,gwarea.current)) != (char *) NULL )
exstring++;
+ if(exstring) continue;
}
- if(exstring) continue;
-
- if ((str = strchr(linebuf, '\n')) != NULL)
- *str = '\0'; /* strip \n */
totregsl++;
if(debugm)
if (ilf==ILF_Squid || ilf==ILF_Common || ilf==ILF_Unknown) {
getword_start(&gwarea,linebuf);
if (getword(data,sizeof(data),&gwarea,' ')<0) {
- printf("SARG: Maybe you have a broken time in your access.log file.\n");
+ debuga(_("Maybe you have a broken time in your access.log file.\n"));
exit(1);
}
if((str=(char *) strchr(data, '.')) != (char *) NULL ) {
strcpy(elap,"0");
if(squid24) {
if (getword(user,sizeof(user),&gwarea,' ')<0 || getword_skip(255,&gwarea,' ')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
} else {
if (getword_skip(255,&gwarea,' ')<0 || getword(user,sizeof(user),&gwarea,' ')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
}
if (getword(data,sizeof(data),&gwarea,']')<0 || getword_skip(MAXLEN,&gwarea,'"')<0 ||
getword(fun,sizeof(fun),&gwarea,' ')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword_ptr(linebuf,&url,&gwarea,' ')<0) {
- debuga(_("Maybe you have a broken url in your %s file"),arq);
+ debuga(_("Maybe you have a broken url in your %s file\n"),arq);
exit(1);
}
if (getword_skip(MAXLEN,&gwarea,' ')<0 || getword(code2,sizeof(code2),&gwarea,' ')<0 ||
getword(tam,sizeof(tam),&gwarea,' ')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if((str=(char *) strchr(gwarea.current, ' ')) != (char *) NULL ) {
if (getword(code,sizeof(code),&gwarea,' ')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
} else {
if (getword(code,sizeof(code),&gwarea,'\0')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
}
if(ilf==ILF_Unknown || ilf==ILF_Squid) {
if (getword(elap,sizeof(elap),&gwarea,' ')<0) {
- printf("SARG: Maybe you have a broken elapsed time in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken elapsed time in your %s file.\n"),arq);
exit(1);
}
while(strcmp(elap,"") == 0 && gwarea.current[0] != '\0')
if (getword(elap,sizeof(elap),&gwarea,' ')<0) {
- printf("SARG: Maybe you have a broken elapsed time in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken elapsed time in your %s file.\n"),arq);
exit(1);
}
if(strlen(elap) < 1) continue;
if (getword(ip,sizeof(ip),&gwarea,' ')<0){
- printf("SARG: Maybe you have a broken client IP address in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken client IP address in your %s file.\n"),arq);
exit(1);
}
if (getword(code,sizeof(code),&gwarea,' ')<0){
- printf("SARG: Maybe you have a broken result code in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken result code in your %s file.\n"),arq);
exit(1);
}
if (getword(tam,sizeof(tam),&gwarea,' ')<0){
- printf("SARG: Maybe you have a broken amount of data in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken amount of data in your %s file.\n"),arq);
exit(1);
}
if (getword(fun,sizeof(fun),&gwarea,' ')<0){
- printf("SARG: Maybe you have a broken request method in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken request method in your %s file.\n"),arq);
exit(1);
}
if (getword_ptr(linebuf,&url,&gwarea,' ')<0){
- debuga(_("Maybe you have a broken url in your %s file"),arq);
+ debuga(_("Maybe you have a broken url in your %s file\n"),arq);
exit(1);
}
if (getword(user,sizeof(user),&gwarea,' ')<0){
- printf("SARG: Maybe you have a broken user ID in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken user ID in your %s file.\n"),arq);
exit(1);
}
ilf=ILF_Squid;
if (ilf==ILF_Sarg) {
getword_start(&gwarea,linebuf);
if (getword(data,sizeof(data),&gwarea,'\t')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(hora,sizeof(hora),&gwarea,'\t')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(user,sizeof(user),&gwarea,'\t')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(ip,sizeof(ip),&gwarea,'\t')<0) {
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword_ptr(linebuf,&url,&gwarea,'\t')<0){
- debuga(_("Maybe you have a broken record or garbage in your %s file"),arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(tam,sizeof(tam),&gwarea,'\t')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(code,sizeof(code),&gwarea,'\t')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(elap,sizeof(elap),&gwarea,'\t')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(smartfilter,sizeof(smartfilter),&gwarea,'\0')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
}
getword_start(&gwarea,linebuf);
// remove the #Fields: column at the beginning of the line
if (getword_skip(1000,&gwarea,' ')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
for (ncols=0 ; ncols<ISACOL_Last ; ncols++) cols[ncols]=-1;
ncols=0;
while(gwarea.current[0] != '\0') {
if (getword(val1,sizeof(val1),&gwarea,'\t')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if(strcmp(val1,"c-ip") == 0) cols[ISACOL_Ip]=ncols;
}
if (cols[ISACOL_Ip]>=0) {
isa_ncols=ncols;
- for (isa_ncols=0 ; isa_ncols<ncols ; isa_ncols++)
- isa_cols[isa_ncols]=cols[isa_ncols];
+ for (ncols=0 ; ncols<ISACOL_Last ; ncols++)
+ isa_cols[ncols]=cols[ncols];
}
continue;
}
getword_start(&gwarea,linebuf);
for (x=0 ; x<isa_ncols ; x++) {
if (getword_ptr(linebuf,&str,&gwarea,'\t')<0) {
- debuga(_("Maybe you have a broken record or garbage in your %s file"),arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (x==isa_cols[ISACOL_Ip]) {
if (strlen(str)>=sizeof(ip)) {
- printf("SARG: Maybe you have a broken IP in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken IP in your %s file\n"),arq);
exit(1);
}
strcpy(ip,str);
} else if (x==isa_cols[ISACOL_UserName]) {
if (strlen(str)>=sizeof(user)) {
- printf("SARG: Maybe you have a broken user in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken user in your %s file\n"),arq);
exit(1);
}
strcpy(user,str);
} else if (x==isa_cols[ISACOL_Date]) {
if (strlen(str)>=sizeof(data)) {
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
strcpy(data,str);
} else if (x==isa_cols[ISACOL_Time]) {
if (strlen(str)>=sizeof(hora)) {
- printf("SARG: Maybe you have a broken time in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken time in your %s file\n"),arq);
exit(1);
}
strcpy(hora,str);
} else if (x==isa_cols[ISACOL_TimeTaken]) {
if (strlen(str)>=sizeof(elap)) {
- printf("SARG: Maybe you have a broken download duration in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken download duration in your %s file\n"),arq);
exit(1);
}
strcpy(elap,str);
} else if (x==isa_cols[ISACOL_Bytes]) {
if (strlen(str)>=sizeof(tam)) {
- printf("SARG: Maybe you have a broken download size in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken download size in your %s file\n"),arq);
exit(1);
}
strcpy(tam,str);
url=str;
} else if (x==isa_cols[ISACOL_Status]) {
if (strlen(str)>=sizeof(code)) {
- printf("SARG: Maybe you have a broken access code in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken access code in your %s file\n"),arq);
exit(1);
}
strcpy(code,str);
}
getword_start(&gwarea,data);
if (getword(ano,sizeof(ano),&gwarea,'-')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(mes,sizeof(mes),&gwarea,'-')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
if (getword(dia,sizeof(dia),&gwarea,'\0')<0){
- printf("SARG: Maybe you have a broken record or garbage in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken record or garbage in your %s file\n"),arq);
exit(1);
}
conv_month_name(mes);
sprintf(data," %s/%s/%s:%s",dia,mes,ano,hora);
}
- if(strlen(user) > 150) {
- if (debugm) printf("User too long: %s\n",user);
- totregsx++;
- continue;
- }
-
- // include_users
- if(IncludeUsers[0] != '\0') {
- sprintf(val1,":%s:",user);
- if((str=(char *) strstr(IncludeUsers,val1)) == (char *) NULL )
- continue;
- }
-
- if(vercode(code)) {
- if (debugm) printf("Excluded code: %s\n",code);
- totregsx++;
- continue;
- }
-
- if(testvaliduserchar(user))
- continue;
-
-#if 0
- if((str = strstr(user,"%20")) != NULL) {
- /*
- This is a patch introduced to solve bug #1624251 reported at sourceforge but
- the side effect is to truncate the name at the first space and merge the reports
- of people whose name is identical up to the first space.
-
- The old code used to truncate the user name at the first % if a %20 was
- found anywhere in the string. That means the string could be truncated
- at the wrong place if another % occured before the %20. This new code should
- avoid that problem and only truncate at the space. There is no bug
- report indicating that anybody noticed this.
- */
- *str='\0';
- }
-
- /*
- Code prior to 2.2.7 used to replace any %xx by a dot as long as a %5c was
- found in the user name.
- */
- while((str = strstr(user,"%5c")) != NULL) {
- *str='.';
- for (x=3 ; str[x] ; x++) str[x-2]=str[x];
- }
-#endif
-
- for(str=user; *str; str++) {
- if(*str=='.') dotinuser++;
- if(*str=='?' || *str=='.' || *str==':' || *str=='/' || *str=='\\' || *str=='\'' || *str=='$' || *str=='@' ||
- *str=='\"' || *str=='*')
- *str='_';
- }
-
- strlow(user);
- if(strncmp(NtlmUserFormat,"user",4) == 0) {
- if((str = strchr(user,'_')) != 0) {
- strcpy(warea,str+1);
- strcpy(user,warea);
- }
- if((str = strchr(user,'+')) != 0) {
- strcpy(warea,str+1);
- strcpy(user,warea);
- }
- }
-
- urly=url;
-
- if(ilf!=ILF_Sarg) {
- /*
- The full URL is not saved in sarg log. There is no point in testing the URL to detect
- a downloaded file.
- */
- download_flag=is_download_suffix(url);
- if (download_flag) {
- download_url=url;
- download_count++;
- }
- }
-
- // remove any protocol:// at the beginning of the URL
- if ((str = strchr(url,'/')) != NULL && str[1] == '/') {
- int i;
-
- str+=2;
- for (i=0 ; str[i] ; i++)
- url[i]=str[i];
- url[i]='\0';
- }
-
- 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;
- }
-
if(ilf==ILF_Squid) {
tt=atoi(data);
t=localtime(&tt);
} else if(ilf==ILF_Common || ilf==ILF_Isa) {
getword_start(&gwarea,data+1);
if (getword_multisep(data,sizeof(data),&gwarea,':')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
if (getword_multisep(hora,sizeof(hora),&gwarea,' ')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
getword_start(&gwarea,data);
if (getword(dia,sizeof(dia),&gwarea,'/')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
if (getword(mes,sizeof(mes),&gwarea,'/')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
if (getword(ano,sizeof(ano),&gwarea,'/')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
snprintf(tbuf,sizeof(tbuf),"%s%s%s",dia,mes,ano);
builddia(dia,mes,ano,df,wdata);
idata=atoi(wdata);
+ tt=computedate(ano,mes,dia);
+ t=localtime(&tt);
} else if (ilf==ILF_Sarg) {
getword_start(&gwarea,data);
if(strcmp(df,"u") == 0) {
if (getword(mes,sizeof(mes),&gwarea,'/')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
if (getword(dia,sizeof(dia),&gwarea,'/')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
} else {
if (getword(dia,sizeof(dia),&gwarea,'/')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
if (getword(mes,sizeof(mes),&gwarea,'/')<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
}
if (getword(ano,sizeof(ano),&gwarea,0)<0){
- printf("SARG: Maybe you have a broken date in your %s file.\n",arq);
+ debuga(_("Maybe you have a broken date in your %s file\n"),arq);
exit(1);
}
snprintf(wdata,9,"%s%s%s",ano,mes,dia);
idata=atoi(wdata);
+ tt=computedate(ano,mes,dia);
+ t=localtime(&tt);
+ } else {
+ t=NULL;
}
if(debugm)
printf("DATE=%s IDATA=%d DFROM=%d DUNTIL=%d\n",date,idata,dfrom,duntil);
- l=1;
- if(l){
- if(addr[0] != '\0'){
- if(strcmp(addr,ip)==0)
- l=1;else l=0;
- }
- if(fhost) {
-// l=vhexclude(ip);
- l=vhexclude(url);
- if(!l) {
- if (debugm) printf("Excluded site: %s\n",url);
- totregsx++;
- }
- }
+ if(date[0] != '\0'){
+ if(idata < dfrom || idata > duntil) continue;
}
- if(l){
- if(date[0] != '\0'){
- if(idata >= dfrom && idata <= duntil)
- l=1;else l=0;
- }
+ // Record only hours usage which is required
+ if (t) {
+ if( bsearch( &( t -> tm_wday ), weekdays.list, weekdays.len,
+ sizeof( int ), compar ) == NULL )
+ continue;
+
+ if( bsearch( &( t -> tm_hour ), hours.list, hours.len,
+ sizeof( int ), compar ) == NULL )
+ continue;
}
- if(l){
- if(hm[0] != '\0') {
- bzero(hmr,sizeof(hmr));
- chm++;
- getword_start(&gwarea,hora);
- while(chm) {
- if (getword_multisep(warea,sizeof(warea),&gwarea,':')<0){
- printf("SARG: Maybe you have a broken time in your %s file.\n",arq);
- exit(1);
- }
- strncat(hmr,warea,2);
- chm--;
- }
- strncat(hmr,gwarea.current,2);
- if(atoi(hmr) >= atoi(hm) && atoi(hmr) <= atoi(hmf))
- l=1;else l=0;
- }
+
+ if(strlen(user) > MAX_USER_LEN) {
+ if (debugm) printf(_("User ID too long: %s\n"),user);
+ totregsx++;
+ continue;
+ }
+
+ // include_users
+ if(IncludeUsers[0] != '\0') {
+ sprintf(val1,":%s:",user);
+ if((str=(char *) strstr(IncludeUsers,val1)) == (char *) NULL )
+ continue;
+ }
+
+ if(vercode(code)) {
+ if (debugm) printf(_("Excluded code: %s\n"),code);
+ totregsx++;
+ continue;
+ }
+
+ if(testvaliduserchar(user))
+ continue;
+
+#if 0
+ if((str = strstr(user,"%20")) != NULL) {
+ /*
+ This is a patch introduced to solve bug #1624251 reported at sourceforge but
+ the side effect is to truncate the name at the first space and merge the reports
+ of people whose name is identical up to the first space.
+
+ The old code used to truncate the user name at the first % if a %20 was
+ found anywhere in the string. That means the string could be truncated
+ at the wrong place if another % occured before the %20. This new code should
+ avoid that problem and only truncate at the space. There is no bug
+ report indicating that anybody noticed this.
+ */
+ *str='\0';
+ }
+
+ /*
+ Code prior to 2.2.7 used to replace any %xx by a dot as long as a %5c was
+ found in the user name.
+ */
+ while((str = strstr(user,"%5c")) != NULL) {
+ *str='.';
+ for (x=3 ; str[x] ; x++) str[x-2]=str[x];
}
- if(l){
- if(site[0] != '\0'){
- if(strstr(url,site)!=0)
- l=1;else l=0;
+#endif
+
+ urly=url;
+
+ if(ilf!=ILF_Sarg) {
+ /*
+ The full URL is not saved in sarg log. There is no point in testing the URL to detect
+ a downloaded file.
+ */
+ download_flag=is_download_suffix(url);
+ if (download_flag) {
+ download_url=url;
+ download_count++;
}
+ } else
+ download_flag=0;
+
+ // remove any protocol:// at the beginning of the URL
+ if ((str = strchr(url,'/')) != NULL && str[1] == '/') {
+ int i;
+
+ str+=2;
+ for (i=0 ; str[i] ; i++)
+ url[i]=str[i];
+ url[i]='\0';
}
- if(userip)
- strcpy(user,ip);
+ if(!LongUrl) {
+ url_hostname(url,hostname,sizeof(hostname));
+ url=hostname;
+ }
+
+ if(url[0] == '\0') continue;
- if(strcmp(user,"-") == 0 || strcmp(user," ") == 0 || strcmp(user,"") == 0) {
- if(strcmp(RecordsWithoutUser,"ip") == 0)
- strcpy(user,ip);
- if(strcmp(RecordsWithoutUser,"ignore") == 0)
+ if(addr[0] != '\0'){
+ if(strcmp(addr,ip)!=0) continue;
+ }
+ if(fhost) {
+ if(!vhexclude(url)) {
+ if (debugm) printf(_("Excluded site: %s\n"),url);
+ totregsx++;
continue;
- if(strcmp(RecordsWithoutUser,"everybody") == 0)
- strcpy(user,"everybody");
+ }
}
- if(us[0] != '\0'){
- if(strcmp(user,us)==0)
- l=1;
- else
- l=0;
+
+ if(hm[0] != '\0') {
+ hmr[0]='\0';
+ chm++;
+ getword_start(&gwarea,hora);
+ while(chm) {
+ if (getword_multisep(warea,sizeof(warea),&gwarea,':')<0){
+ debuga(_("Maybe you have a broken time in your %s file\n"),arq);
+ exit(1);
+ }
+ strncat(hmr,warea,2);
+ chm--;
+ }
+ strncat(hmr,gwarea.current,2);
+
+ if(atoi(hmr) < atoi(hm) || atoi(hmr) > atoi(hmf)) continue;
}
- if(dotinuser) {
- subs(user,sizeof(user),"_",".");
- dotinuser=0;
+ if(site[0] != '\0'){
+ if(strstr(url,site)==0) continue;
+ }
+
+ if(userip) {
+ strcpy(user,ip);
+ id_is_ip=1;
+ } else {
+ id_is_ip=0;
+ if(strcmp(user,"-") == 0 || strcmp(user," ") == 0 || strcmp(user,"") == 0) {
+ if(RecordsWithoutUser == RECORDWITHOUTUSER_IP) {
+ strcpy(user,ip);
+ id_is_ip=1;
+ }
+ if(RecordsWithoutUser == RECORDWITHOUTUSER_IGNORE)
+ continue;
+ if(RecordsWithoutUser == RECORDWITHOUTUSER_EVERYBODY)
+ strcpy(user,"everybody");
+ } else {
+ strlow(user);
+ if(NtlmUserFormat == NTLMUSERFORMAT_USER) {
+ if((str = strchr(user,'_')) != 0) {
+ strcpy(warea,str+1);
+ strcpy(user,warea);
+ }
+ if((str = strchr(user,'+')) != 0) {
+ strcpy(warea,str+1);
+ strcpy(user,warea);
+ }
+ }
+ }
+ }
+
+ if(us[0] != '\0'){
+ if(strcmp(user,us)!=0) continue;
}
if(puser) {
continue;
}
- if(l) {
- if(fuser) {
- l=vuexclude(user);
- if(!l) {
- if (debugm) printf("Excluded user: %s\n",user);
- totregsx++;
- }
+ if(fuser) {
+ if(!vuexclude(user)) {
+ if (debugm) printf(_("Excluded user: %s\n"),user);
+ totregsx++;
+ continue;
}
}
- if(l) {
- if(userip)
- fixip(user);
- }
+ if(strcmp(user,"-") ==0 || strcmp(user," ") ==0 || strcmp(user,"") ==0 || strcmp(user,":") ==0)
+ continue;
- if(l && max_elapsed) {
+ if(max_elapsed) {
if(atol(elap)>max_elapsed) {
elap[0]='0';
elap[1]='\0';
}
}
- if(l) {
- if(strcmp(user,"-") !=0 && url[0] != '\0' && strcmp(user," ") !=0 && strcmp(user,"") !=0 && strcmp(user,":") !=0){
- if((str=(char *) strstr(linebuf, "[SmartFilter:")) != (char *) NULL ) {
- fixendofline(str);
- sprintf(smartfilter,"\"%s\"",str+1);
- } else sprintf(smartfilter,"\"\"");
-
- if ( strcmp ( user , sz_Last_User ) != 0 ) {
- if ( fp_Write_User )
- fclose( fp_Write_User ) ;
- sprintf (tmp3, "%s/sarg/%s.unsort", tmp, user);
-
- if ((fp_Write_User = MY_FOPEN (tmp3, "a")) == NULL) {
- fprintf (stderr, "%s: (log) %s: %s - %s\n", argv[0], text[9], tmp3, strerror(errno));
- exit (1);
+ if((str=(char *) strstr(linebuf, "[SmartFilter:")) != (char *) NULL ) {
+ fixendofline(str);
+ sprintf(smartfilter,"\"%s\"",str+1);
+ } else sprintf(smartfilter,"\"\"");
+
+ nopen=0;
+ prev_ufile=NULL;
+ for (ufile=first_user_file ; ufile && strcmp(user,ufile->user->id)!=0 ; ufile=ufile->next) {
+ prev_ufile=ufile;
+ if (ufile->file) nopen++;
+ }
+ if (!ufile) {
+ ufile=malloc(sizeof(*ufile));
+ if (!ufile) {
+ debuga(_("Not enough memory to store the user %s\n"),user);
+ exit(1);
+ }
+ memset(ufile,0,sizeof(*ufile));
+ ufile->next=first_user_file;
+ first_user_file=ufile;
+ uinfo=userinfo_create(user);
+ ufile->user=uinfo;
+ uinfo->id_is_ip=id_is_ip;
+ } else {
+ if (prev_ufile) {
+ prev_ufile->next=ufile->next;
+ ufile->next=first_user_file;
+ first_user_file=ufile;
+ }
+ }
+
+ if (ufile->file==NULL) {
+ if (nopen>=maxopenfiles) {
+ x=0;
+ for (ufile1=first_user_file ; ufile1 ; ufile1=ufile1->next) {
+ if (ufile1->file!=NULL) {
+ if (x>=maxopenfiles) {
+ fclose(ufile1->file);
+ ufile1->file=NULL;
+ }
+ x++;
}
- strcpy( sz_Last_User , user ) ;
}
- fprintf(fp_Write_User, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",dia,hora,user,ip,url,tam,code,elap,smartfilter);
+ }
+ if (snprintf (tmp3, sizeof(tmp3), "%s/sarg/%s.unsort", tmp, ufile->user->filename)>=sizeof(tmp3)) {
+ debuga(_("Temporary user file name too long: %s/sarg/%s.unsort\n"), tmp, ufile->user->filename);
+ exit(1);
+ }
+ if ((ufile->file = MY_FOPEN (tmp3, "a")) == NULL) {
+ debuga(_("(log) Cannot open temporary file: %s - %s\n"), tmp3, strerror(errno));
+ exit (1);
+ }
+ }
- if(fp_log && ilf!=ILF_Sarg)
- fprintf(fp_log, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",dia,hora,user,ip,url,tam,code,elap,smartfilter);
+ /*if ( strcmp ( user , sz_Last_User ) != 0 ) {
+ if ( fp_Write_User )
+ fclose( fp_Write_User ) ;
+ sprintf (tmp3, "%s/sarg/%s.unsort", tmp, user);
- totregsg++;
+ if ((fp_Write_User = MY_FOPEN (tmp3, "a")) == NULL) {
+ fprintf (stderr, "%s: (log) %s: %s - %s\n", argv[0], _("Cannot open temporary file"), tmp3, strerror(errno));
+ exit (1);
+ }
+ strcpy( sz_Last_User , user ) ;
+ }*/
+ fprintf(ufile->file, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",dia,hora,ip,url,tam,code,elap,smartfilter);
- if(download_flag && strstr(code,"DENIED") == 0) {
- ndownload = 1;
+ if(fp_log && ilf!=ILF_Sarg)
+ fprintf(fp_log, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",dia,hora,user,ip,url,tam,code,elap,smartfilter);
- if ( ! fp_Download_Unsort ) {
- if ((fp_Download_Unsort = MY_FOPEN ( sz_Download_Unsort, "a")) == NULL) {
- fprintf (stderr, "%s: (log) %s: %s - %s\n", argv[0], text[9], tmp3, strerror(errno));
- exit (1);
- }
- }
- fprintf(fp_Download_Unsort,"%s\t%s\t%s\t%s\t%s\n",dia,hora,user,ip,download_url);
- }
+ totregsg++;
- if((ReportType & REPORT_TYPE_DENIED) != 0 || (ReportType & REPORT_TYPE_AUTH_FAILURES) != 0) {
- if(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);
- authfail_count++;
- }
- }
+ if(!dataonly && download_flag && download_url && strstr(code,"DENIED") == 0) {
+ ndownload = 1;
- if((!totper || idata<mindate) && ilf!=ILF_Sarg){
- totper++;
- mindate=idata;
- sprintf(period,"%s-",tbuf);
- strcpy(start_hour,tbuf2);
- if(date[0] != '\0')
- fixper(tbuf, period, cduntil);
- if(debugz){
- debugaz("tbuf",tbuf);
- debugaz("period",period);
- }
+ if ( ! fp_Download_Unsort ) {
+ if ((fp_Download_Unsort = MY_FOPEN ( sz_Download_Unsort, "a")) == NULL) {
+ debuga(_("(log) Cannot open temporary file: %s - %s\n"),tmp3, strerror(errno));
+ exit (1);
}
}
+ fprintf(fp_Download_Unsort,"%s\t%s\t%s\t%s\t%s\n",dia,hora,user,ip,download_url);
+ }
- if(debugm){
- printf("IP=\t%s\n",ip);
- printf("USER=\t%s\n",user);
- printf("ELAP=\t%s\n",elap);
- printf("DATE=\t%s\n",dia);
- printf("TIME=\t%s\n",hora);
- printf("FUNC=\t%s\n",fun);
- printf("URL=\t%s\n",url);
- printf("CODE=\t%s\n",code);
- printf("LEN=\t%s\n",tam);
+ if((ReportType & REPORT_TYPE_DENIED) != 0 || (ReportType & REPORT_TYPE_AUTH_FAILURES) != 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(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((!totper || idata<mindate) && ilf!=ILF_Sarg){
+ totper++;
+ mindate=idata;
+ sprintf(period,"%s-",tbuf);
+ strcpy(start_hour,tbuf2);
+ if(date[0] != '\0')
+ fixper(tbuf, period, cduntil);
+ if(debugz){
+ debugaz("tbuf",tbuf);
+ debugaz("period",period);
}
}
+
+ if(debugm){
+ printf("IP=\t%s\n",ip);
+ printf("USER=\t%s\n",user);
+ printf("ELAP=\t%s\n",elap);
+ printf("DATE=\t%s\n",dia);
+ printf("TIME=\t%s\n",hora);
+ printf("FUNC=\t%s\n",fun);
+ printf("URL=\t%s\n",url);
+ printf("CODE=\t%s\n",code);
+ printf("LEN=\t%s\n",tam);
+ }
}
if (!from_stdin) {
fclose(fp_in);
if( ShowReadStatistics )
- printf("SARG: Records in file: %lu, reading: %3.2f%%\n",recs1, (float) 100 );
+ printf(_("SARG: Records in file: %lu, reading: %3.2f%%\n"),recs1, (float) 100 );
}
}
if ( fp_Download_Unsort )
fclose (fp_Download_Unsort);
- if (fp_Write_User)
- fclose (fp_Write_User);
+ for (ufile=first_user_file ; ufile ; ufile=ufile1) {
+ ufile1=ufile->next;
+ if (ufile->file!=NULL) fclose(ufile->file);
+ free(ufile);
+ }
free_download();
free_excludecodes();
for (ilf=0 ; ilf<ILF_Last ; ilf++) totalcount+=ilf_count[ilf];
- debuga(" %s: %ld, %s: %ld, %s: %ld",text[10],totregsl,text[11],totregsg,text[68],totregsx);
+ debuga(_(" Records read: %ld, written: %ld, excluded: %ld\n"),totregsl,totregsg,totregsx);
if(ilf_count[ILF_Common]>0 && ilf_count[ILF_Squid]>0)
- debuga("%s",text[12]);
+ debuga(_("Log with mixed records format (squid and common log)\n"));
if(ilf_count[ILF_Common]>0 && ilf_count[ILF_Squid]==0)
- debuga("%s",text[13]);
+ debuga(_("Common log format\n"));
if(ilf_count[ILF_Common]==0 && ilf_count[ILF_Squid]>0)
- debuga("%s",text[14]);
+ debuga(_("Squid log format\n"));
if(ilf_count[ILF_Sarg]>0)
- debuga("%s",text[124]);
+ debuga(_("Sarg log format\n"));
if(totalcount==0) {
if(!totregsg) {
- fprintf(stderr, "SARG: %s\n",text[16]);
- fprintf(stderr, "SARG: %s\n",text[21]);
- } else fprintf(stderr, "SARG: %s\n",text[15]);
+ debuga(_("No records found\n"));
+ debuga(_("End\n"));
+ } else debuga(_("Log with invalid format\n"));
if(fp_denied)
fclose(fp_denied);
if(fp_authfail)
fclose(fp_authfail);
+ userinfo_free();
if(userfile)
free(userfile);
close_usertab();
- unlink(tmp4);
- unlink(tmp6);
+ unlink(denied_unsort);
+ unlink(authfail_unsort);
unlink(tmp3);
exit(0);
}
}
if(!totregsg){
- fprintf(stderr, "SARG: %s\n",text[16]);
- fprintf(stderr, "SARG: %s\n",text[21]);
+ debuga(_("No records found\n"));
+ debuga(_("End\n"));
// fclose(fp_ou);
if(fp_denied)
fclose(fp_denied);
if(fp_authfail)
fclose(fp_authfail);
+ userinfo_free();
if(userfile)
free(userfile);
close_usertab();
}
if(debug)
- debuga("%s: %s",text[17],period);
+ debuga(_("Period: %s\n"),period);
// fclose(fp_ou);
if(fp_denied)
strcpy(end_hour,tbuf2);
getword_start(&gwarea,period);
if (getword(val2,sizeof(val2),&gwarea,'-')<0){
- printf("SARG: Maybe you have a broken date range definition.\n");
+ debuga(_("Maybe you have a broken date range definition.\n"));
exit(1);
}
if (getword(val1,sizeof(val1),&gwarea,'\0')<0){
- printf("SARG: Maybe you have a broken date range definition.\n");
+ debuga(_("Maybe you have a broken date range definition.\n"));
exit(1);
}
sprintf(val4,"%s/sarg-%s_%s-%s_%s.log",ParsedOutputLog,val2,start_hour,val1,end_hour);
if (rename(arq_log,val4)) {
- fprintf(stderr,"SARG: failed to rename %s to %s - %s\n",arq_log,val4,strerror(errno));
+ debuga(_("failed to rename %s to %s - %s\n"),arq_log,val4,strerror(errno));
} else {
strcpy(arq_log,val4);
sprintf(val1,"%s \"%s\"",ParsedOutputLogCompress,arq_log);
cstatus=system(val1);
if (!WIFEXITED(cstatus) || WEXITSTATUS(cstatus)) {
- fprintf(stderr, "SARG: command return status %d\n",WEXITSTATUS(cstatus));
- fprintf(stderr, "SARG: command: %s\n",val1);
+ debuga(_("command return status %d\n"),WEXITSTATUS(cstatus));
+ debuga(_("command: %s\n"),val1);
exit(1);
}
}
}
if(debug)
- debuga("%s %s",text[123],arq_log);
+ debuga(_("Sarg parsed log saved as %s\n"),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);
+ debuga(_("sort command return status %d\n"),WEXITSTATUS(cstatus));
+ debuga(_("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);
unlinkdir(tmp,0);
}
+ userinfo_free();
if(userfile)
free(userfile);
close_usertab();
if(debug)
- debuga("%s",text[21]);
+ debuga(_("End\n"));
exit(0);
long int nreg=0;
if(debug)
- debuga("%s: %s",text[60],pwdfile);
+ debuga(_("Loading password file from: %s\n"),pwdfile);
if ((fp_usr = fopen(pwdfile, "r")) == NULL) {
- fprintf(stderr, "SARG: (getusers) %s: %s - %s\n",text[45],pwdfile,strerror(errno));
+ debuga(_("(getusers) Cannot open file: %s - %s\n"),pwdfile,strerror(errno));
exit(1);
}
fseek(fp_usr, 0, SEEK_END);
nreg = ftell(fp_usr);
if (nreg<0) {
- printf("SARG: Cannot get the size of file %s",pwdfile);
+ debuga(_("Cannot get the size of file %s\n"),pwdfile);
exit(1);
}
nreg = nreg+5000;
fseek(fp_usr, 0, SEEK_SET);
if((userfile=(char *) malloc(nreg))==NULL){
- fprintf(stderr, "SARG: %s (%ld):\n",text[59],nreg);
+ debuga(_("malloc error (%ld):\n"),nreg);
exit(1);
}
while(fgets(buf,sizeof(buf),fp_usr)!=NULL) {
str=strchr(buf,':');
if (!str) {
- printf("SARG: You have an invalid user in your %s file.\n",pwdfile);
+ debuga(_("You have an invalid user in your %s file.\n"),pwdfile);
exit(1);
}
str[1]=0;