]> git.ipfire.org Git - thirdparty/sarg.git/blame - include/conf.h
Create a user agent report if the input log provides the information
[thirdparty/sarg.git] / include / conf.h
CommitLineData
b3695c67 1#include "config.h"
25697a35 2#include "info.h"
e3af0ae9 3#include "btree_cache.h"
25697a35 4
5a37b651
FM
5#ifdef HAVE_WINSOCK2_H
6#include <winsock2.h>
7#endif
b3695c67
FM
8#ifdef HAVE_WINDOWS_H
9#include <windows.h>
10#endif
11#ifdef HAVE_STDIO_H
25697a35
GS
12#include <stdio.h>
13#endif
b3695c67 14#ifdef HAVE_STDLIB_H
25697a35
GS
15#include <stdlib.h>
16#endif
b3695c67 17#ifdef HAVE_STRING_H
25697a35
GS
18#include <string.h>
19#endif
b3695c67 20#ifdef HAVE_STRINGS_H
25697a35
GS
21#include <strings.h>
22#endif
b3695c67 23#ifdef HAVE_SYS_TIME_H
25697a35
GS
24#include <sys/time.h>
25#endif
b3695c67 26#ifdef HAVE_TIME_H
25697a35
GS
27#include <time.h>
28#endif
b3695c67 29#ifdef HAVE_SYS_RESOURCE_H
25697a35
GS
30#include <sys/resource.h>
31#endif
b3695c67 32#ifdef HAVE_UNISTD_H
25697a35
GS
33#include <unistd.h>
34#endif
b3695c67 35#if defined(HAVE_SYS_DIRENT_H) && !defined(HAVE_DIRENT_H)
25697a35
GS
36#include <sys/dirent.h>
37#endif
b3695c67 38#ifdef HAVE_DIRENT_H
25697a35
GS
39#include <dirent.h>
40#endif
b3695c67 41#ifdef HAVE_SYS_SOCKET_H
25697a35
GS
42#include <sys/socket.h>
43#endif
b3695c67 44#ifdef HAVE_NETDB_H
25697a35
GS
45#include <netdb.h>
46#endif
b3695c67 47#ifdef HAVE_TYPES_H
25697a35
GS
48#include <types.h>
49#endif
b3695c67 50#ifdef HAVE_NETINET_IN_H
25697a35
GS
51#include <netinet/in.h>
52#endif
b3695c67 53#ifdef HAVE_ARPA_INET_H
25697a35
GS
54#include <arpa/inet.h>
55#endif
b3695c67 56#ifdef HAVE_SYS_STAT_H
25697a35
GS
57#include <sys/stat.h>
58#endif
b3695c67 59#ifdef HAVE_CTYPE_H
25697a35
GS
60#include <ctype.h>
61#endif
b3695c67 62#ifdef HAVE_ERRNO_H
25697a35
GS
63#include <errno.h>
64#endif
b3695c67 65#ifdef HAVE_SYS_WAIT_H
d96e3ba6
FM
66#include <sys/wait.h>
67#endif
b3695c67 68#ifdef HAVE_GD_H
2824ec9b 69#define HAVE_GD 1
25697a35 70#include <gd.h>
25697a35 71#endif
b3695c67 72#ifdef HAVE_GDFONTL_H
25697a35
GS
73#include <gdfontl.h>
74#endif
b3695c67 75#ifdef HAVE_GDFONTT_H
25697a35
GS
76#include <gdfontt.h>
77#endif
b3695c67 78#ifdef HAVE_GDFONTS_H
25697a35
GS
79#include <gdfonts.h>
80#endif
b3695c67 81#ifdef HAVE_GDFONTMB_H
25697a35
GS
82#include <gdfontmb.h>
83#endif
b3695c67 84#ifdef HAVE_GDFONTG_H
25697a35
GS
85#include <gdfontg.h>
86#endif
b3695c67 87#ifdef HAVE_STDARG_H
d2fe0c32
FM
88#include <stdarg.h>
89#endif
b3695c67 90#ifdef HAVE_INTTYPES_H
2357ef77
FM
91#include <inttypes.h>
92#endif
b3695c67 93#ifdef HAVE_LIMITS_H
4af2f8ff
FM
94#include <limits.h>
95#endif
b3695c67
FM
96#ifdef HAVE_WINSOCK_H
97#include <winsock.h>
98#endif
e3af0ae9
PO
99#ifdef HAVE_MATH_H
100#include <math.h>
101#endif
a1de61fe
FM
102#ifdef HAVE_LOCALE_H
103#include <locale.h>
104#endif
e6414a9d
FM
105#ifdef HAVE_EXECINFO_H
106#include <execinfo.h>
107#endif
d5d021c5
FM
108#ifdef HAVE_LIBGEN_H
109#include <libgen.h>
110#endif
06b39c87
FM
111#ifdef HAVE_STDBOOL_H
112#include <stdbool.h>
113#else
114typedef int bool;
115#define true 1
116#define false 0
117#endif
72a23a7a
FM
118#ifdef HAVE_FCNTL_H
119#include <fcntl.h>
120#endif
6068ae56
FM
121#ifdef HAVE_FNMATCH_H
122#include <fnmatch.h>
123#endif
25697a35 124
b3695c67 125#if defined(HAVE_FOPEN64)
25697a35 126#define _FILE_OFFSET_BITS 64
936c9905 127#define MY_FOPEN fopen64
25697a35
GS
128#else
129#define MY_FOPEN fopen
130#endif
131
b3695c67
FM
132#if !defined(HAVE_BZERO)
133#define bzero(mem,size) memset(mem,0,size)
134#endif
135
136#if defined(IBERTY_LIB) && !defined(HAVE_MKSTEMP)
137int mkstemps(char *template, int suffixlen);
138#define mkstemp(template) mkstemps(template,0)
139#endif
140
961f5a3d
FM
141#ifdef __MINGW32__
142#define pgettext(msgctxt,msgid) (msgid)
143#define ngettext(singular,plural,number) (plural)
144#else
eb7ab620 145#include "gettext.h"
961f5a3d 146#endif
eca2cec9 147#if defined(ENABLE_NLS) && defined(HAVE_LIBINTL_H)
c0ec9cc7
FM
148#define _(String) gettext(String)
149#ifdef gettext_noop
150#define N_(String) gettext_noop(String)
151#else
152#define N_(String) (String)
153#endif
154#else /* No NLS */
155#define _(String) (String)
156#define N_(String) (String)
eca2cec9 157#endif //NLS
c0ec9cc7 158
b3695c67
FM
159#if defined(__MINGW32__)
160#define mkdir(p,m) _mkdir(p)
161
162#ifndef WIFEXITED
163 #define WIFEXITED(S) 1
164#endif
165
166#ifndef WEXITSTATUS
167 #define WEXITSTATUS(S) (S)
168#endif
169
170#endif /*__MINGW32__*/
25697a35 171
f0126186
FM
172#ifndef __GNUC__
173# define __attribute__(x)
174#endif
175
25697a35 176#define MAXLEN 20000
ac422f9b 177#define MAX_URL_LEN 40000
f72b484a 178#define MAX_TRUNCATED_URL 250
f2ec8c75
FM
179#define MAX_USER_LEN 256
180#define MAX_USER_FNAME_LEN 128
2240dcea
FM
181#define MAX_IP_LEN 64
182#define MAX_DATETIME_LEN 32
1f482a8d
FM
183#define MAX_REDIRECTOR_LOGS 64
184#define MAX_REDIRECTOR_FILELEN 1024
21fd55af
FM
185/*!
186Arbitrary limit on the number of days that are accepted in the selected range of the log file.
187Sarg will complain that there are too many days in the files if this limit is overrun.
188*/
189#define MAX_DATETIME_DAYS 1000
25697a35 190
085c1e1f
FM
191#define REPORT_TYPE_USERS_SITES 0x0001UL
192#define REPORT_TYPE_SITE_USER_TIME_DATE 0x0002UL
193#define REPORT_TYPE_TOPUSERS 0x0004UL
194#define REPORT_TYPE_TOPSITES 0x0008UL
195#define REPORT_TYPE_SITES_USERS 0x0010UL
196#define REPORT_TYPE_DATE_TIME 0x0020UL
197#define REPORT_TYPE_DENIED 0x0040UL
198#define REPORT_TYPE_AUTH_FAILURES 0x0080UL
199#define REPORT_TYPE_DOWNLOADS 0x0100UL
34ad8e64 200#define REPORT_TYPE_USERAGENT 0x0200UL
085c1e1f
FM
201
202#define DATA_FIELD_USER 0x0001UL
203#define DATA_FIELD_DATE 0x0002UL
204#define DATA_FIELD_TIME 0x0004UL
205#define DATA_FIELD_URL 0x0008UL
206#define DATA_FIELD_CONNECT 0x0010UL
207#define DATA_FIELD_BYTES 0x0020UL
208#define DATA_FIELD_IN_CACHE 0x0040UL
209#define DATA_FIELD_OUT_CACHE 0x0080UL
210#define DATA_FIELD_ELAPSED 0x0100UL
211
212#define TOPUSERFIELDS_NUM 0x0001UL
213#define TOPUSERFIELDS_DATE_TIME 0x0002UL
214#define TOPUSERFIELDS_USERID 0x0004UL
215#define TOPUSERFIELDS_CONNECT 0x0008UL
216#define TOPUSERFIELDS_BYTES 0x0010UL
217#define TOPUSERFIELDS_SETYB 0x0020UL
218#define TOPUSERFIELDS_IN_CACHE_OUT 0x0040UL
219#define TOPUSERFIELDS_USED_TIME 0x0080UL
220#define TOPUSERFIELDS_MILISEC 0x0100UL
221#define TOPUSERFIELDS_PTIME 0x0200UL
222#define TOPUSERFIELDS_TOTAL 0x0400UL
223#define TOPUSERFIELDS_AVERAGE 0x0800UL
8e134f1a 224#define TOPUSERFIELDS_USERIP 0x1000UL
085c1e1f
FM
225
226#define USERREPORTFIELDS_CONNECT 0x0001UL
227#define USERREPORTFIELDS_BYTES 0x0002UL
228#define USERREPORTFIELDS_SETYB 0x0004UL
229#define USERREPORTFIELDS_IN_CACHE_OUT 0x0008UL
230#define USERREPORTFIELDS_USED_TIME 0x0010UL
231#define USERREPORTFIELDS_MILISEC 0x0020UL
232#define USERREPORTFIELDS_PTIME 0x0040UL
233#define USERREPORTFIELDS_TOTAL 0x0080UL
234#define USERREPORTFIELDS_AVERAGE 0x0100UL
235
0349fa24
FM
236#define INDEX_YES 0x0001UL
237#define INDEX_NO 0x0002UL
238#define INDEX_ONLY 0x0004UL
239
240#define INDEX_TREE_DATE 0x0001UL
241#define INDEX_TREE_FILE 0x0002UL
242
9aaa3361
FM
243#define INDEXFIELDS_DIRSIZE 0x0001UL
244
f2ec8c75
FM
245#define NTLMUSERFORMAT_USER 0x0001UL
246#define NTLMUSERFORMAT_DOMAINUSER 0x0002UL
247
248#define RECORDWITHOUTUSER_IP 0x0001UL
249#define RECORDWITHOUTUSER_IGNORE 0x0002UL
250#define RECORDWITHOUTUSER_EVERYBODY 0x0004UL
251
f84a35a3
FM
252#define DATAFILEURL_IP 0x0001UL
253#define DATAFILEURL_NAME 0x0002UL
254
e43854ef
FM
255#define DISPLAY_BYTES 0x0001UL
256#define DISPLAY_ABBREV 0x0002UL
257
43cc1649
FM
258#define DATETIME_ELAP 0x0001UL
259#define DATETIME_BYTE 0x0002UL
260
c02d38bb
FM
261#define REALTIME_UNAUTH_REC_SHOW 0x0001UL
262#define REALTIME_UNAUTH_REC_IGNORE 0x0002UL
71d78774 263
15d5372b
FM
264#define SORT_REVERSE 0x0001
265
266#define TOPUSER_SORT_REVERSE SORT_REVERSE
267#define TOPUSER_SORT_BYTES 0x0002UL
268#define TOPUSER_SORT_USER 0x0004UL
269#define TOPUSER_SORT_CONNECT 0x0008UL
270#define TOPUSER_SORT_TIME 0x0010UL
271
272#define TOPSITE_SORT_REVERSE SORT_REVERSE
273#define TOPSITE_SORT_BYTES 0x0002UL
274#define TOPSITE_SORT_CONNECT 0x0004UL
70cab1a4 275#define TOPSITE_SORT_TIME 0x0008UL
7d82ea1a 276#define TOPSITE_SORT_USER 0x0010UL
15d5372b
FM
277
278#define USER_SORT_REVERSE SORT_REVERSE
279#define USER_SORT_BYTES 0x0002UL
280#define USER_SORT_SITE 0x0004UL
281#define USER_SORT_CONNECT 0x0008UL
282#define USER_SORT_TIME 0x0010UL
283
2e96438d
FM
284//! Value to exclude all the javascripts from the html page.
285#define HTML_JS_NONE 0x0000
286//! Bit to include sorttable.js in the html plage.
287#define HTML_JS_SORTTABLE 0x0001
288
67a93701
FM
289//! The character prefixed in front of the host names that are aliased.
290#define ALIAS_PREFIX '*'
291
2e29ae23
FM
292//! Maximum number of limit files that can be stored.
293#define MAX_USER_LIMITS 16
294
56b97279
FM
295//! Name of the html file containing the index of a report file.
296#define INDEX_HTML_FILE "index.html"
297
fa6552b0
FM
298struct periodstruct
299{
fd46f082 300 //! The first date of the period.
fa6552b0 301 struct tm start;
fd46f082 302 //! The last date of the period.
fa6552b0 303 struct tm end;
fd46f082 304 //! The textual representation of the date.
fa6552b0 305 char text[40];
fd46f082
FM
306 //! The HTML representation of the date.
307 char html[40];
fa6552b0
FM
308};
309
25697a35 310char outdir[MAXLEN];
d5d021c5 311char outdirname[MAXLEN];
fa6552b0 312struct periodstruct period;
d6e703cc
FM
313char code[MAXLEN];
314char code2[MAXLEN];
25697a35 315char tmp[MAXLEN];
25697a35 316char parse_out[MAXLEN];
25697a35 317char html[MAXLEN];
25697a35 318char ConfigFile[MAXLEN];
81a022d8 319char df;
0511cf2d 320int LastLog;
06b39c87 321bool RemoveTempFiles;
25697a35 322char ReplaceIndex[256];
0349fa24 323unsigned long int Index;
06b39c87 324bool OverwriteReport;
f2ec8c75 325unsigned long int RecordsWithoutUser;
06b39c87 326bool UseComma;
4af2f8ff 327char MailUtility[PATH_MAX];
c0ec9cc7 328int TopSitesNum;
fb7c5f27 329int TopUsersNum;
25697a35 330char ExcludeCodes[256];
15d5372b 331unsigned long int TopsitesSort;
085c1e1f 332unsigned long int ReportType;
25697a35
GS
333char UserTabFile[255];
334char warea[MAXLEN];
335char name[MAXLEN];
06b39c87
FM
336bool LongUrl;
337bool Ip2Name;
0a4e18e1 338int AccessLogFromCmdLine;
25697a35
GS
339char Title[MAXLEN];
340char BgColor[MAXLEN];
341char BgImage[MAXLEN];
342char TxColor[MAXLEN];
343char TxBgColor[MAXLEN];
344char TiColor[MAXLEN];
345char LogoImage[MAXLEN];
346char LogoText[MAXLEN];
347char LogoTextColor[MAXLEN];
348char Width[MAXLEN];
349char Height[MAXLEN];
350char FontFace[MAXLEN];
351char HeaderColor[MAXLEN];
352char HeaderBgColor[MAXLEN];
353char FontSize[MAXLEN];
354char PasswdFile[MAXLEN];
355char TempDir[MAXLEN];
356char OutputDir[MAXLEN];
357char OutputEmail[MAXLEN];
15d5372b
FM
358unsigned long int TopuserSort;
359unsigned long int UserSort;
25697a35
GS
360char module[255];
361char ExcludeHosts[255];
362char ExcludeUsers[255];
81a022d8 363char DateFormat;
06b39c87 364bool UserIp;
25697a35 365char MaxElapsed[255];
43cc1649 366unsigned long int datetimeby;
25697a35
GS
367char CharSet[255];
368char UserInvalidChar[255];
06b39c87 369bool Graphs;
25697a35 370char GraphDaysBytesBarColor[255];
06b39c87 371bool Privacy;
25697a35
GS
372char PrivacyString[255];
373char PrivacyStringColor[30];
374char IncludeUsers[MAXLEN];
375char ExcludeString[MAXLEN];
06b39c87 376bool SuccessfulMsg;
085c1e1f
FM
377unsigned long int TopUserFields;
378unsigned long int UserReportFields;
25697a35
GS
379char DataFile[MAXLEN];
380char DataFileDelimiter[3];
085c1e1f 381unsigned long int DataFileFields;
f84a35a3 382unsigned long int DataFileUrl;
2f4787e6 383//! if \c true, show the number of lines read from the input log file during the reading of the file.
06b39c87 384bool ShowReadStatistics;
2f4787e6
FM
385/*!
386If \c true, the read statistics also includes the percent of the number of lines read.
387
388Beware that it requires two readings of the input log file. It is not possible if the
389input log file is stdin or a pipe.
390*/
391bool ShowReadPercent;
25697a35
GS
392char IndexSortOrder[5];
393char DansGuardianConf[MAXLEN];
64dfb824 394bool DansguardianFilterOutDate;
25697a35
GS
395char SquidGuardConf[MAXLEN];
396char SquidGuarddbHome[255];
1f482a8d
FM
397char RedirectorLogFormat[4096];
398int NRedirectorLogs;
399char RedirectorLogs[MAX_REDIRECTOR_LOGS][MAX_REDIRECTOR_FILELEN];
400int RedirectorLogFromCmdLine;
64dfb824 401bool RedirectorFilterOutDate;
06b39c87
FM
402bool ShowSargInfo;
403bool BytesInSitesUsersReport;
404bool ShowSargLogo;
25697a35 405char ParsedOutputLog[MAXLEN];
ff8d5836 406char ParsedOutputLogCompress[512];
e43854ef 407unsigned long int DisplayedValues;
933aca19 408char HeaderFontSize[5];
491b862f 409char TitleFontSize[5];
25697a35
GS
410char wwwDocumentRoot[MAXLEN];
411char ExternalCSSFile[MAXLEN];
412char BlockIt[255];
f2ec8c75 413unsigned long int NtlmUserFormat;
9aaa3361 414//! How to display the index of the reports.
0349fa24 415unsigned long int IndexTree;
9aaa3361
FM
416//! The columns to show in the index of the reports.
417unsigned long int IndexFields;
06b39c87 418bool UserAuthentication;
d5d021c5 419char AuthUserTemplateFile[1024];
829a53c2
FM
420//! \c True to use anonymous file and directory names in the report.
421bool AnonymousOutputFiles;
25697a35 422char val1[MAXLEN];
25697a35 423char val3[MAXLEN];
25697a35
GS
424char val5[MAXLEN];
425char val6[MAXLEN];
426char val7[MAXLEN];
427char val8[MAXLEN];
428char val9[MAXLEN];
429char val10[MAXLEN];
430char val11[MAXLEN];
25697a35 431char mask[MAXLEN];
25697a35
GS
432char site[MAXLEN];
433char us[50];
434char email[MAXLEN];
435char test[1];
25697a35
GS
436char user2[MAXLEN];
437char wentp[512];
438char addr[MAXLEN];
491b862f
GS
439char Ulimit[6];
440char RealtimeTypes[1024];
25697a35 441char cmd[255];
491b862f 442char ImageFile[255];
71d78774 443unsigned long int RealtimeUnauthRec;
e3af0ae9
PO
444char LDAPHost[255];
445char LDAPBindDN[512];
446char LDAPBindPW[255];
965c4a6f
FM
447int LDAPPort;
448int LDAPProtocolVersion;
e3af0ae9
PO
449char LDAPBaseSearch[255];
450char LDAPFilterSearch[512];
451char LDAPTargetAttr[64];
fd75cd90
FM
452//! Character set to convert the LDAP returned string to.
453char LDAPNativeCharset[20];
3becf85c 454char GraphFont[MAXLEN];
ea275279
FM
455//! The full path to sorttable.js if the table in the reports must be dynamicaly sorted.
456char SortTableJs[256];
22715352
FM
457//! The name of the file containing the host names to replace by an alias in the report.
458char HostAliasFile[512];
c4f0ea8f
FM
459//! The name of the file containing the user names to replace by an alias in the report.
460char UserAliasFile[512];
4d62cb0a
FM
461//! The number of consecutive errors allowed in an input log file before the process is interrupted.
462int NumLogSuccessiveErrors;
463/*!
464The total number of errors allowed in an input log file before the process is interrupted. A negative
465value means the process should never fails irrespective of the number of errors found in the input
466log files.
467*/
468int NumLogTotalErrors;
0459449f
FM
469//! Count the number of lines read from the input log files.
470unsigned long int lines_read;
471//! Count the number of records kept for the processing.
472unsigned long int records_kept;
473//! Count the number of users.
474unsigned long int nusers;
491b862f 475
25697a35 476int idate;
25697a35 477int dansguardian_count;
330b1c52 478int redirector_count;
c0ec9cc7 479int useragent_count;
25697a35
GS
480int z1, z2, z3;
481int ttopen;
25697a35
GS
482int sarglog;
483int isalog;
2357ef77 484int dfrom;
25697a35 485int duntil;
11284535
FM
486bool dataonly;
487bool indexonly;
488bool iprel;
25697a35
GS
489int langcode;
490int debug;
491int debugz;
25697a35
GS
492int AuthfailReportLimit;
493int DeniedReportLimit;
94ff9470 494int DownloadReportLimit;
25697a35
GS
495int SiteUsersReportLimit;
496int DansGuardianReportLimit;
497int SquidGuardReportLimit;
498int UserReportLimit;
491b862f
GS
499int realtime_refresh;
500int realtime_access_log_lines;
491b862f 501int rc;
d6e703cc 502int ntopsites;
d6e703cc 503int nrepday;
2824ec9b 504bool squid24;
11767c6a
FM
505//! \c True to keep the temporary files for inspection.
506bool KeepTempLog;
25697a35 507
491b862f
GS
508long long int nocost;
509float cost;
25697a35
GS
510
511typedef struct
512{ int list[ 24 ];
513 int len;
514} numlist;