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