PluginProbe ʕ •ᴥ•ʔ
NinjaFirewall (WP Edition) – Advanced Security Plugin and Firewall / 4.9
NinjaFirewall (WP Edition) – Advanced Security Plugin and Firewall v4.9
4.9 4.8.8 4.8.7 4.8.6 trunk 4.5 4.5.1 4.5.10 4.5.11 4.5.2 4.5.3 4.5.4 4.5.5 4.5.6 4.5.7 4.5.8 4.5.9 4.6 4.6.1 4.7 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.8 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5
ninjafirewall / lib / settings_logs_live_log.php
ninjafirewall / lib Last commit date
share 9 years ago .htaccess 11 years ago anti_malware.php 5 years ago class-api.php 4 weeks ago class-centralised-logging.php 4 weeks ago class-coupon.php 7 months ago class-email-sodium.php 4 weeks ago class-firewall-log.php 4 weeks ago class-helpers.php 9 months ago class-import-export.php 5 months ago class-ip.php 5 months ago class-nfw-database.php 7 months ago class-plugin-upgrade.php 4 weeks ago class-security-updates.php 4 weeks ago class-session.php 4 weeks ago class_mail.php 4 weeks ago firewall.php 4 weeks ago fw_fileguard.php 5 months ago fw_livelog.php 1 year ago help.php 4 weeks ago helpers.php 4 weeks ago i18n-extra.php 4 weeks ago i18n.php 1 year ago index.html 13 years ago init_update.php 2 years ago install.php 1 year ago install_default.php 4 weeks ago loader.php 7 months ago mail_template_firewall.php 1 year ago mail_template_plugin.php 4 weeks ago scheduled_tasks.php 3 years ago settings_dashboard.php 4 weeks ago settings_dashboard_about.php 4 weeks ago settings_dashboard_statistics.php 2 months ago settings_event_notifications.php 4 weeks ago settings_events.php 2 months ago settings_firewall_options.php 2 months ago settings_firewall_policies.php 4 weeks ago settings_login_protection.php 2 months ago settings_logs.php 4 weeks ago settings_logs_firewall_log.php 4 weeks ago settings_logs_live_log.php 2 months ago settings_monitoring.php 4 weeks ago settings_monitoring_file_check.php 2 months ago settings_monitoring_file_guard.php 2 months ago settings_network.php 2 months ago settings_security_rules.php 2 months ago settings_security_rules_editor.php 4 weeks ago settings_security_rules_update.php 4 weeks ago sign.pub 7 years ago thickbox.php 4 years ago widget.php 3 years ago wpplus.php 5 months ago
settings_logs_live_log.php
302 lines
1 <?php
2 /*
3 +---------------------------------------------------------------------+
4 | NinjaFirewall (WP Edition) |
5 | |
6 | (c) NinTechNet - https://nintechnet.com/ |
7 +---------------------------------------------------------------------+
8 | This program is free software: you can redistribute it and/or |
9 | modify it under the terms of the GNU General Public License as |
10 | published by the Free Software Foundation, either version 3 of |
11 | the License, or (at your option) any later version. |
12 | |
13 | This program is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | GNU General Public License for more details. |
17 +---------------------------------------------------------------------+ 2023-05-14
18 */
19
20 if (! defined('NFW_ENGINE_VERSION') ) {
21 die('Forbidden');
22 }
23
24 // Block immediately if user is not allowed :
25 nf_not_allowed('block', __LINE__ );
26
27 if (! defined('NF_DISABLED') ) {
28 is_nfw_enabled();
29 }
30 if ( NF_DISABLED ) {
31 $err_msg = esc_html__('Error: NinjaFirewall must be enabled and working '.
32 'in order to use this feature.', 'ninjafirewall');
33 }
34 if ( empty( NinjaFirewall_session::read('nfw_goodguy') ) ) {
35 $err_msg = esc_html__('Warning: You must be whitelisted in order to use Live Log: click on '.
36 'the Firewall Policies menu and ensure that the "Add the Administrator to the whitelist" '.
37 'option is enabled.', 'ninjafirewall');
38 }
39 if (! empty( $err_msg ) ) {
40 ?>
41 <div class="wrap">
42 <h1><img style="vertical-align:top;" src="<?php
43 echo esc_url( plugins_url('/images/ninjafirewall_32.png',
44 dirname( __FILE__ ) ) )
45 ?>">&nbsp;<?php esc_html_e('Live Log', 'ninjafirewall') ?></h1>
46
47 <br />
48 <div class="error notice is-dismissible"><p><?php echo $err_msg ?></p></div>
49 </div>
50 <?php
51 return;
52 }
53
54 // Create an empty log et set the required session
55 @file_put_contents(
56 NFW_LOG_DIR .'/nfwlog/cache/livelog.php',
57 '<?php exit; ?>',
58 LOCK_EX
59 );
60
61 NinjaFirewall_session::write( ['nfw_livelog' => 1 ] );
62
63 if (! isset($_COOKIE['nfwscroll']) || ! empty($_COOKIE['nfwscroll']) ) {
64 // Default, if not set
65 $nfwscroll = 1;
66 } else {
67 $nfwscroll = 0;
68 }
69 if ( empty($_COOKIE['nfwlwrap']) ) {
70 // Default, if not set
71 $nfwlwrap = 0;
72 } else {
73 $nfwlwrap = 1;
74 }
75 if ( isset( $_COOKIE['nfwintval']) &&
76 preg_match('/^(5|10|20|45)000$/', $_COOKIE['nfwintval'] ) ) {
77
78 $nfwintval = (int) $_COOKIE['nfwintval'];
79 } else {
80 $nfwintval = 10000;
81 }
82 if ( NFW_IS_HTTPS == true ) {
83 $nfwsite = site_url('/index.php', 'https');
84 } else {
85 $nfwsite = site_url('/index.php');
86 }
87 ?>
88 <script>
89 var liveinterval = <?php echo $nfwintval ?>;
90 var scroll = <?php echo $nfwscroll ?>;
91 var lwrap = <?php echo $nfwlwrap ?>;
92 var site_url = '<?php echo esc_js( $nfwsite ) ?>';
93 </script>
94
95 <?php
96 if ( isset( $_POST['lf'] ) ) {
97 $res = nf_sub_liveloge_save();
98 if ( $res ) {
99 echo '<div class="error notice is-dismissible"><p>'. $res .'</p></div>';
100 } else {
101 echo '<div class="updated notice is-dismissible"><p>'.
102 esc_html__('Your changes have been saved.', 'ninjafirewall') .'</p></div>';
103 }
104 }
105 $nfw_options = nfw_get_option('nfw_options');
106
107 if ( defined('NFW_TEXTAREA_HEIGHT') ) {
108 $th = (int) NFW_TEXTAREA_HEIGHT;
109 } else {
110 $th = '450';
111 }
112 ?>
113 <form name="liveform">
114 <table class="form-table">
115 <tr>
116 <td style="width:100%;text-align:center;">
117 <progress id="nfw-progress" value="1" max="<?php echo ($nfwintval/1000) ?>" class="nfw-progress" style="display:none"></progress>
118 <br />
119 <textarea name="txtlog" id="idtxtlog" class="large-text code" style="height:<?php echo $th; ?>px;" wrap="off" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"><?php echo esc_textarea( __('Live Log lets you watch your blog traffic in real time. To enable it, click on the button below.', 'ninjafirewall') ) ?></textarea>
120 <br />
121 <div style="float:left;width:40%;padding-top:10px;" class="nfw-right">
122 <?php nfw_toggle_switch('danger', 'nfw_options[wf_case]', esc_attr__('Enabled', 'ninjafirewall'), esc_attr__('Disabled', 'ninjafirewall'), 'large', 0, false, 'onclick="nfwjs_livelog()"', 'livelog-switch', 'right') ?>
123 </div>
124 <div style="float:right;width:60%;text-align:left;padding-top:10px;" class="nfw-left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
125 <?php esc_html_e('Refresh rate:', 'ninjafirewall') ?>
126 <select name="liveint" id="liveint" onchange="nfwjs_change_int(this.value);">
127 <option value="5000"<?php selected( $nfwintval, 5000 ) ?>><?php esc_html_e('5 seconds', 'ninjafirewall') ?></option>
128 <option value="10000"<?php selected( $nfwintval, 10000 ) ?>><?php esc_html_e('10 seconds', 'ninjafirewall') ?></option>
129 <option value="20000"<?php selected( $nfwintval, 20000 ) ?>><?php esc_html_e('20 seconds', 'ninjafirewall') ?></option>
130 <option value="45000"<?php selected( $nfwintval, 45000 ) ?>><?php esc_html_e('45 seconds', 'ninjafirewall') ?></option>
131 </select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
132 <input type="button" class="button-secondary" name="livecls" value="<?php esc_html_e('Clear screen', 'ninjafirewall') ?>" onClick="nfwjs_cls()" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
133 <label><input type="checkbox" name="livescroll" id="livescroll" value="1" onchange="nfwjs_is_scroll()" <?php checked($nfwscroll, 1)?> /><?php esc_html_e('Autoscrolling', 'ninjafirewall') ?></label>
134 &nbsp;&nbsp;&nbsp;
135 <label><input type="checkbox" name="linewrapping" id="linewrapping" value="1" onchange="nfwjs_linewrapping()" <?php checked($nfwlwrap, 1)?> /><?php esc_html_e('Line wrapping', 'ninjafirewall') ?></label>
136 </div>
137 </td>
138 </tr>
139 </table>
140 <p class="description alignright"><?php esc_html_e('Live Log will not display whitelisted users and brute-force attacks.', 'ninjafirewall') ?></p>
141 </form>
142 <?php
143
144 if ( empty( $nfw_options['liveformat'] ) ) {
145 $lf = 0;
146 $liveformat = '';
147 } else {
148 $lf = 1;
149 $liveformat = $nfw_options['liveformat'];
150 }
151
152 if ( empty( $nfw_options['liveport'] ) ||
153 ! preg_match('/^[1-2]$/', $nfw_options['liveport'] ) ) {
154
155 $liveport = 0;
156 } else {
157 $liveport = $nfw_options['liveport'];
158 }
159 if ( empty( $nfw_options['livetz'] ) ||
160 preg_match('/[^\w\/]/', $nfw_options['livetz'] ) ) {
161
162 $livetz = 'UTC';
163 } else {
164 $livetz = $nfw_options['livetz'];
165 }
166 if ( empty( $nfw_options['liverules'] ) ||
167 ! preg_match('/^[0-2]$/', $nfw_options['liverules'] ) ) {
168
169 $liverules = 0;
170 $lr_disabled = 'disabled="disabled" ';
171 } else {
172 $liverules = $nfw_options['liverules'];
173 $lr_disabled = '';
174 }
175 if ( empty( $nfw_options['liverulespath'] ) ) {
176 $liverulespath = '';
177 } else{
178 $liverulespath = $nfw_options['liverulespath'];
179 }
180 ?>
181 <br />
182 <form method="post">
183 <h3><?php esc_html_e('Live Log Options', 'ninjafirewall') ?></h3>
184 <table class="form-table nfw-table">
185 <tr>
186 <th scope="row" class="row-med"><?php esc_html_e('Inclusion and exclusion filters (REQUEST_URI)', 'ninjafirewall') ?></th>
187 <td>
188 <select name="liverules" onchange="nfwjs_lv_select(this.value);">
189 <option value="0"<?php selected($liverules, 0) ?>><?php esc_html_e('None', 'ninjafirewall') ?></option>
190 <option value="1"<?php selected($liverules, 1) ?>><?php esc_html_e('Must include', 'ninjafirewall') ?></option>
191 <option value="2"<?php selected($liverules, 2) ?>><?php esc_html_e('Must not include', 'ninjafirewall') ?></option>
192 </select>&nbsp;
193 <input <?php echo $lr_disabled; ?>type="text" id="lr-disabled" class="regular-text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" name="liverulespath" value="<?php echo esc_attr( $liverulespath ) ?>" placeholder="<?php esc_attr_e('e.g.,', 'ninjafirewall') ?> /blog <?php esc_attr_e('or', 'ninjafirewall') ?> admin.php <?php esc_attr_e('or', 'ninjafirewall') ?> index.php,/blog" />
194 <br />
195 <p class="description"><?php esc_html_e('Full or partial case-sensitive REQUEST_URI string. Multiple values must be comma-separated.', 'ninjafirewall') ?></p>
196 </td>
197 </tr>
198 <tr>
199 <th scope="row" class="row-med"><?php esc_html_e('Format', 'ninjafirewall') ?></th>
200 <td>
201 <p><label><input type="radio" name="lf" value="0"<?php checked($lf, 0) ?> onclick="document.getElementById('liveformat').disabled=true"><code>[%time] %name %client &quot;%method %uri&quot; &quot;%referrer&quot; &quot;%ua&quot; &quot;%forward&quot; &quot;%host&quot;</code></label></p>
202 <p><label><input type="radio" name="lf" value="1"<?php checked($lf, 1) ?> onclick="document.getElementById('liveformat').disabled=false;document.getElementById('liveformat').focus()"><?php esc_html_e('Custom', 'ninjafirewall') ?> </label><input id="liveformat" type="text" class="regular-text" name="liveformat" value="<?php echo esc_attr( $liveformat ); ?>"<?php disabled($lf, 0) ?> autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" /></p>
203 <p class="description"><?php esc_html_e('See contextual help for available log format.', 'ninjafirewall') ?></p>
204 </td>
205 </tr>
206 <tr>
207 <th scope="row" class="row-med"><?php esc_html_e('Display', 'ninjafirewall') ?></th>
208 <td>
209 <select name="liveport">
210 <option value="0"<?php selected( $liveport, 0 ) ?>><?php esc_html_e('HTTP and HTTPS traffic (default)', 'ninjafirewall') ?></option>
211 <option value="1"<?php selected( $liveport, 1 ) ?>><?php esc_html_e('HTTP traffic only', 'ninjafirewall') ?></option>
212 <option value="2"<?php selected( $liveport, 2 ) ?>><?php esc_html_e('HTTPS traffic only', 'ninjafirewall') ?></option>
213 </select>
214 </td>
215 </tr>
216 <tr>
217 <th scope="row" class="row-med"><?php esc_html_e('Timezone', 'ninjafirewall') ?></th>
218 <td>
219 <select name="livetz">
220 <?php
221 $timezone_choice = nfw_timezone_choice();
222 foreach ($timezone_choice as $tz_place) {
223 echo '<option value ="' . esc_attr( $tz_place ) . '"';
224 if ($livetz == $tz_place) { echo ' selected'; }
225 echo '>'. esc_html( $tz_place ) .'</option>';
226 }
227 ?>
228 </select>
229 </td>
230 </tr>
231 </table>
232 <p><input type="submit" class="button-primary" value="<?php esc_html_e('Save Live Log Options', 'ninjafirewall') ?>" /></p>
233 <?php wp_nonce_field('livelog_save', 'nfwnonce', 0); ?>
234 <input type="hidden" name="tab" value="livelog" />
235 </form>
236 <?php
237
238 // ---------------------------------------------------------------------
239 function nf_sub_liveloge_save() {
240
241 if ( empty($_POST['nfwnonce']) ||
242 ! wp_verify_nonce($_POST['nfwnonce'], 'livelog_save') ) {
243
244 wp_nonce_ays('livelog_save');
245 }
246
247 $nfw_options = nfw_get_option('nfw_options');
248
249 if ( empty( $_POST['liverules'] ) ||
250 ! preg_match('/^[0-2]$/', $_POST['liverules']) ) {
251
252 $nfw_options['liverules'] = 0;
253 } else {
254 $nfw_options['liverules'] = $_POST['liverules'];
255 }
256
257 $nfw_options['liverulespath'] = '';
258 if (! empty( $_POST['liverulespath'] ) ) {
259 $liverulespath = trim( $_POST['liverulespath'], " \t\n\r\0\x0B,");
260 $nfw_options['liverulespath'] = preg_replace('/\s*,\s*/', ',', $liverulespath );
261 }
262 if ( empty( $nfw_options['liverulespath'] ) ) {
263 $nfw_options['liverules'] = 0;
264 }
265
266 if ( empty($_POST['lf']) ) {
267 $nfw_options['liveformat'] = '';
268 } else {
269 if (! empty($_POST['liveformat']) ) {
270 $tmp = stripslashes($_POST['liveformat']);
271 // Remove unwanted characters :
272 $nfw_options['liveformat'] = preg_replace('`[^a-z%[\]"\x20]`', '', $tmp);
273 }
274 if (empty($_POST['liveformat']) ) {
275 return esc_html__('Error: please enter the custom log format.', 'ninjafirewall');
276 }
277 }
278
279 if ( empty($_POST['liveport']) || ! preg_match('/^[1-2]$/', $_POST['liveport']) ) {
280 $nfw_options['liveport'] = 0;
281 } else {
282 $nfw_options['liveport'] = $_POST['liveport'];
283 }
284
285 if ( empty($_POST['livetz']) || preg_match('/[^\w\/]/', $_POST['livetz']) ) {
286 $nfw_options['livetz'] = 0;
287 } else {
288 $nfw_options['livetz'] = $_POST['livetz'];
289 }
290
291 $nfw_options = nfw_update_option('nfw_options', $nfw_options);
292 }
293
294 // ---------------------------------------------------------------------
295
296 function nfw_timezone_choice() {
297 return array('UTC', 'Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka', 'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane', 'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guayaquil', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo', 'America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Arctic/Longyearbyen', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', 'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/NSW', 'Australia/North', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Ponape', 'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan', 'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu', 'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap');
298 }
299
300 // ---------------------------------------------------------------------
301 // EOF
302