Lookups: lazy-load modules
[exim.git] / src / exim_monitor / em_globals.c
1 /*************************************************
2 *                Exim Monitor                    *
3 *************************************************/
4
5 /* Copyright (c) The Exim Maintainers 2021 - 2024 */
6 /* Copyright (c) University of Cambridge 1995 - 2018 */
7 /* See the file NOTICE for conditions of use and distribution. */
8 /* SPDX-License-Identifier: GPL-2.0-or-later */
9
10
11 #include "em_hdr.h"
12
13 /* This source module contains all the global variables used in
14 the exim monitor, including those that are used by the standard
15 Exim modules that are included in Eximon. For comments on their
16 usage, see em_hdr.h and globals.h. */
17
18
19 /* The first set are unique to Eximon */
20
21 Display *X_display;
22 XtAppContext X_appcon;
23
24 XtActionsRec actionTable[] = {
25   { "dialogAction",  (XtActionProc)dialogAction}};
26
27 int actionTableSize = sizeof(actionTable)/sizeof(XtActionsRec);
28
29 XtTranslations queue_trans;
30 XtTranslations text_trans;
31
32 Widget  dialog_ref_widget;
33 Widget  toplevel_widget;
34 Widget  log_widget = NULL;
35 Widget  queue_widget;
36 Widget  unhide_widget = NULL;
37
38
39 FILE   *LOG;
40
41 int     action_output = FALSE;
42 int     action_queue_update = TRUE;
43 uschar  actioned_message[24];
44 uschar *action_required;
45 uschar *alternate_config = NULL;
46
47 #ifdef EXPERIMENTAL_BRIGHTMAIL
48 int     bmi_run                = 0;
49 uschar *bmi_verdicts           = NULL;
50 #endif
51
52 int     body_max = 20000;
53
54 uschar *exim_path              = US BIN_DIRECTORY "/exim"
55                         "\0<---------------Space to patch exim_path->";
56
57 int     eximon_initialized = FALSE;
58
59 int     log_buffer_size = 10240;
60 BOOL    log_datestamping = FALSE;
61 int     log_depth = 150;
62 uschar *log_display_buffer;
63 uschar *log_file = NULL;
64 uschar  log_file_open[256];
65 uschar *log_font = NULL;
66 ino_t   log_inode;
67 long int log_position;
68 int     log_width = 600;
69
70 uschar *menu_event = US"Shift<Btn1Down>";
71 int     menu_is_up = FALSE;
72 int     min_height = 162;
73 int     min_width  = 103;
74
75 pipe_item *pipe_chain = NULL;
76
77 uschar *qualify_domain = NULL;
78 int     queue_depth = 200;
79 uschar *queue_font = NULL;
80 int     queue_max_addresses = 10;
81 skip_item *queue_skip = NULL;
82 uschar *queue_stripchart_name = NULL;
83 int     queue_update = 60;
84 int     queue_width = 600;
85
86 pcre2_code   *yyyymmdd_regex;
87
88 uschar *size_stripchart = NULL;
89 uschar *size_stripchart_name = NULL;
90 int     spool_is_split = FALSE;
91 int     start_small = FALSE;
92 int     stripchart_height = 90;
93 int     stripchart_number = 1;
94 pcre2_code  **stripchart_regex;
95 uschar **stripchart_title;
96 int    *stripchart_total;
97 int     stripchart_update = 60;
98 int     stripchart_width = 80;
99 int     stripchart_varstart = 1;
100
101 int     text_depth = 200;
102 int     tick_queue_accumulator = 999999;
103
104 uschar *window_title = US"exim monitor";
105
106
107 /***********************************************************/
108 /***********************************************************/
109
110
111 /* These ones are used by Exim modules included in Eximon. Not all are
112 actually relevant to the operation of Eximon. If SPOOL_DIRECTORY is not
113 defined (Exim was compiled with it unset), just define it empty. The script
114 that fires up the monitor fishes the value out by using -bP anyway. */
115
116 #ifndef SPOOL_DIRECTORY
117 #define SPOOL_DIRECTORY ""
118 #endif
119
120 tree_node *acl_var_c           = NULL;
121 tree_node *acl_var_m           = NULL;
122 uschar *active_hostname        = NULL;
123 BOOL    allow_unqualified_recipient = FALSE;
124 BOOL    allow_unqualified_sender = FALSE;
125 uschar *authenticated_id       = NULL;
126 uschar *authenticated_sender   = NULL;
127
128 uschar *big_buffer             = NULL;
129 int     big_buffer_size        = BIG_BUFFER_SIZE;
130 int     body_linecount         = 0;
131 int     body_zerocount         = 0;
132
133 BOOL    deliver_firsttime      = FALSE;
134 BOOL    deliver_freeze         = FALSE;
135 time_t  deliver_frozen_at      = 0;
136 BOOL    deliver_manual_thaw    = FALSE;
137
138 #ifndef DISABLE_DKIM
139 uschar *dkim_cur_signer          = NULL;
140 uschar *dkim_signers             = NULL;
141 uschar *dkim_signing_domain      = NULL;
142 uschar *dkim_signing_selector    = NULL;
143 uschar *dkim_verify_signers      = US"$dkim_signers";
144 unsigned dkim_collect_input      = 0;
145 BOOL    dkim_disable_verify      = FALSE;
146 #endif
147
148 BOOL    dont_deliver           = FALSE;
149
150 int     dsn_ret                = 0;
151 uschar *dsn_envid              = NULL;
152
153 struct global_flags f = {
154  .sender_local          = FALSE,
155 };
156
157 #ifdef WITH_CONTENT_SCAN
158 int     fake_response          = OK;
159 #endif
160
161 header_line *header_last       = NULL;
162 header_line *header_list       = NULL;
163
164 BOOL    host_lookup_deferred   = FALSE;
165 BOOL    host_lookup_failed     = FALSE;
166 uschar *interface_address      = NULL;
167 int     interface_port         = 0;
168
169 BOOL    local_error_message    = FALSE;
170 uschar *local_scan_data        = NULL;
171 BOOL    log_timezone           = FALSE;
172
173 #ifdef WITH_CONTENT_SCAN
174 uschar *spam_bar               = NULL;
175 uschar *spam_report            = NULL;
176 uschar *spam_score             = NULL;
177 uschar *spam_score_int         = NULL;
178 #endif
179
180 int     max_received_linelength= 0;
181 int     message_age            = 0;
182 uschar *message_id;
183 uschar *message_id_external;
184 uschar  message_id_option[MESSAGE_ID_LENGTH + 3];
185
186 int     message_linecount      = 0;
187 int     message_size           = 0;
188 uschar  message_subdir[2]      = { 0, 0 };
189
190 gid_t   originator_gid;
191 uschar *originator_login;
192 uid_t   originator_uid;
193
194 uschar *primary_hostname       = NULL;
195
196 uschar *queue_name             = US"";
197
198 int     received_count         = 0;
199 uschar *received_protocol      = NULL;
200 struct timeval received_time   = { 0, 0 };
201 struct timeval received_time_complete = { 0, 0 };
202 int     recipients_count       = 0;
203 recipient_item *recipients_list = NULL;
204 int     recipients_list_max    = 0;
205 BOOL    running_in_test_harness=FALSE;
206
207 const uschar *sender_address    = NULL;
208 uschar *sender_fullhost        = NULL;
209 uschar *sender_helo_name       = NULL;
210 uschar *sender_host_address    = NULL;
211 uschar *sender_host_auth_pubname = NULL;
212 uschar *sender_host_authenticated = NULL;
213 uschar *sender_host_name       = NULL;
214 int     sender_host_port       = 0;
215 uschar *sender_ident           = NULL;
216 BOOL    sender_set_untrusted   = FALSE;
217 uschar *smtp_active_hostname   = NULL;
218
219 BOOL    split_spool_directory  = FALSE;
220 uschar *spool_directory        = US SPOOL_DIRECTORY;
221 int     string_datestamp_offset=-1;
222 int     string_datestamp_length= 0;
223 int     string_datestamp_type  = -1;
224
225 BOOL    timestamps_utc         = FALSE;
226 tls_support tls_in = {
227  .active = { .sock = -1 }
228  /* remainder zero/null/false */
229 };
230
231 tree_node *tree_duplicates     = NULL;
232 tree_node *tree_nonrecipients  = NULL;
233 tree_node *tree_unusable       = NULL;
234
235 uschar *version_date           = US"?";
236 uschar *version_string         = US"?";
237
238 int     warning_count          = 0;
239
240 /* End of em_globals.c */