~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to www/php/phpBB3/download/file.php

  • Committer: William Grant
  • Date: 2009-02-23 23:47:02 UTC
  • mfrom: (1099.1.211 new-dispatch)
  • Revision ID: grantw@unimelb.edu.au-20090223234702-db4b1llly46ignwo
Merge from lp:~ivle-dev/ivle/new-dispatch.

Pretty much everything changes. Reread the setup docs. Backup your databases.
Every file is now in a different installed location, the configuration system
is rewritten, the dispatch system is rewritten, URLs are different, the
database is different, worksheets and exercises are no longer on the
filesystem, we use a templating engine, jail service protocols are rewritten,
we don't repeat ourselves, we have authorization rewritten, phpBB is gone,
and probably lots of other things that I cannot remember.

This is certainly the biggest commit I have ever made, and hopefully
the largest I ever will.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<?php
2
 
/**
3
 
*
4
 
* @package phpBB3
5
 
* @version $Id: file.php,v 1.5 2007/11/17 22:35:33 kellanved Exp $
6
 
* @copyright (c) 2005 phpBB Group
7
 
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8
 
*
9
 
*/
10
 
 
11
 
/**
12
 
* @ignore
13
 
*/
14
 
define('IN_PHPBB', true);
15
 
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../';
16
 
$phpEx = substr(strrchr(__FILE__, '.'), 1);
17
 
 
18
 
if (isset($_GET['avatar']))
19
 
{
20
 
        require($phpbb_root_path . 'config.' . $phpEx);
21
 
        require($phpbb_root_path . 'includes/acm/acm_' . $acm_type . '.' . $phpEx);
22
 
        require($phpbb_root_path . 'includes/cache.' . $phpEx);
23
 
        require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
24
 
        require($phpbb_root_path . 'includes/constants.' . $phpEx);
25
 
 
26
 
        $db = new $sql_db();
27
 
        $cache = new cache();
28
 
 
29
 
        // Connect to DB
30
 
        if (!@$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, false))
31
 
        {
32
 
                exit;
33
 
        }
34
 
        unset($dbpasswd);
35
 
        
36
 
        // worst-case default
37
 
        $browser = (!empty($_SERVER['HTTP_USER_AGENT'])) ? htmlspecialchars((string) $_SERVER['HTTP_USER_AGENT']) : 'msie 6.0';
38
 
 
39
 
        $config = $cache->obtain_config();
40
 
        $filename = $_GET['avatar'];
41
 
        $avatar_group = false;
42
 
        if ($filename[0] === 'g')
43
 
        {
44
 
                $avatar_group = true;
45
 
                $filename = substr($filename, 1);
46
 
        }
47
 
        
48
 
        // '==' is not a bug - . as the first char is as bad as no dot at all
49
 
        if (strpos($filename, '.') == false)
50
 
        {
51
 
                header('HTTP/1.0 403 forbidden');
52
 
                if (!empty($cache))
53
 
                {
54
 
                        $cache->unload();
55
 
                }
56
 
                $db->sql_close();
57
 
                exit;
58
 
        }
59
 
        
60
 
        $ext            = substr(strrchr($filename, '.'), 1);
61
 
        $stamp          = (int) substr(stristr($filename, '_'), 1);
62
 
        $filename       = (int) $filename;
63
 
        
64
 
        // let's see if we have to send the file at all
65
 
        $last_load      =  isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(trim($_SERVER['HTTP_IF_MODIFIED_SINCE'])) : false;
66
 
        if (strpos(strtolower($browser), 'msie 6.0') === false)
67
 
        {
68
 
                if ($last_load !== false && $last_load <= $stamp)
69
 
                {
70
 
                        header('Not Modified', true, 304);
71
 
                        // seems that we need those too ... browsers
72
 
                        header('Pragma: public');
73
 
                        header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 31536000));
74
 
                        exit();
75
 
                } 
76
 
                else
77
 
                {
78
 
                        header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $stamp) . ' GMT');
79
 
                }
80
 
        }
81
 
        
82
 
        if (!in_array($ext, array('png', 'gif', 'jpg', 'jpeg')))
83
 
        {
84
 
                // no way such an avatar could exist. They are not following the rules, stop the show.
85
 
                header("HTTP/1.0 403 forbidden");
86
 
                if (!empty($cache))
87
 
                {
88
 
                        $cache->unload();
89
 
                }
90
 
                $db->sql_close();
91
 
                exit;
92
 
        }
93
 
        
94
 
        if (!$filename)
95
 
        {
96
 
                // no way such an avatar could exist. They are not following the rules, stop the show.
97
 
                header("HTTP/1.0 403 forbidden");
98
 
                if (!empty($cache))
99
 
                {
100
 
                        $cache->unload();
101
 
                }
102
 
                $db->sql_close();
103
 
                exit;
104
 
        }
105
 
 
106
 
        send_avatar_to_browser(($avatar_group ? 'g' : '') . $filename . '.' . $ext, $browser);
107
 
 
108
 
        if (!empty($cache))
109
 
        {
110
 
                $cache->unload();
111
 
        }
112
 
        $db->sql_close();
113
 
        exit;
114
 
}
115
 
 
116
 
// implicit else: we are not in avatar mode
117
 
include($phpbb_root_path . 'common.' . $phpEx);
118
 
 
119
 
$download_id = request_var('id', 0);
120
 
$mode = request_var('mode', '');
121
 
$thumbnail = request_var('t', false);
122
 
 
123
 
// Start session management, do not update session page.
124
 
$user->session_begin(false);
125
 
$auth->acl($user->data);
126
 
$user->setup('viewtopic');
127
 
 
128
 
if (!$download_id)
129
 
{
130
 
        trigger_error('NO_ATTACHMENT_SELECTED');
131
 
}
132
 
 
133
 
if (!$config['allow_attachments'] && !$config['allow_pm_attach'])
134
 
{
135
 
        trigger_error('ATTACHMENT_FUNCTIONALITY_DISABLED');
136
 
}
137
 
 
138
 
$sql = 'SELECT attach_id, in_message, post_msg_id, extension, is_orphan, poster_id
139
 
        FROM ' . ATTACHMENTS_TABLE . "
140
 
        WHERE attach_id = $download_id";
141
 
$result = $db->sql_query_limit($sql, 1);
142
 
$attachment = $db->sql_fetchrow($result);
143
 
$db->sql_freeresult($result);
144
 
 
145
 
if (!$attachment)
146
 
{
147
 
        trigger_error('ERROR_NO_ATTACHMENT');
148
 
}
149
 
 
150
 
if ((!$attachment['in_message'] && !$config['allow_attachments']) || ($attachment['in_message'] && !$config['allow_pm_attach']))
151
 
{
152
 
        trigger_error('ATTACHMENT_FUNCTIONALITY_DISABLED');
153
 
}
154
 
 
155
 
$row = array();
156
 
 
157
 
if ($attachment['is_orphan'])
158
 
{
159
 
        // We allow admins having attachment permissions to see orphan attachments...
160
 
        $own_attachment = ($auth->acl_get('a_attach') || $attachment['poster_id'] == $user->data['user_id']) ? true : false;
161
 
 
162
 
        if (!$own_attachment || ($attachment['in_message'] && !$auth->acl_get('u_pm_download')) || (!$attachment['in_message'] && !$auth->acl_get('u_download')))
163
 
        {
164
 
                trigger_error('ERROR_NO_ATTACHMENT');
165
 
        }
166
 
 
167
 
        // Obtain all extensions...
168
 
        $extensions = $cache->obtain_attach_extensions(true);
169
 
}
170
 
else
171
 
{
172
 
        if (!$attachment['in_message'])
173
 
        {
174
 
                //
175
 
                $sql = 'SELECT p.forum_id, f.forum_password, f.parent_id
176
 
                        FROM ' . POSTS_TABLE . ' p, ' . FORUMS_TABLE . ' f
177
 
                        WHERE p.post_id = ' . $attachment['post_msg_id'] . '
178
 
                                AND p.forum_id = f.forum_id';
179
 
                $result = $db->sql_query_limit($sql, 1);
180
 
                $row = $db->sql_fetchrow($result);
181
 
                $db->sql_freeresult($result);
182
 
 
183
 
                // Global announcement?
184
 
                $f_download = (!$row) ? $auth->acl_getf_global('f_download') : $auth->acl_get('f_download', $row['forum_id']);
185
 
 
186
 
                if ($auth->acl_get('u_download') && $f_download)
187
 
                {
188
 
                        if ($row && $row['forum_password'])
189
 
                        {
190
 
                                // Do something else ... ?
191
 
                                login_forum_box($row);
192
 
                        }
193
 
                }
194
 
                else
195
 
                {
196
 
                        trigger_error('SORRY_AUTH_VIEW_ATTACH');
197
 
                }
198
 
        }
199
 
        else
200
 
        {
201
 
                $row['forum_id'] = false;
202
 
                if (!$auth->acl_get('u_pm_download'))
203
 
                {
204
 
                        trigger_error('SORRY_AUTH_VIEW_ATTACH');
205
 
                }
206
 
        }
207
 
 
208
 
        // disallowed?
209
 
        $extensions = array();
210
 
        if (!extension_allowed($row['forum_id'], $attachment['extension'], $extensions))
211
 
        {
212
 
                trigger_error(sprintf($user->lang['EXTENSION_DISABLED_AFTER_POSTING'], $attachment['extension']));
213
 
        }
214
 
}
215
 
 
216
 
if (!download_allowed())
217
 
{
218
 
        trigger_error($user->lang['LINKAGE_FORBIDDEN']);
219
 
}
220
 
 
221
 
$download_mode = (int) $extensions[$attachment['extension']]['download_mode'];
222
 
 
223
 
// Fetching filename here to prevent sniffing of filename
224
 
$sql = 'SELECT attach_id, is_orphan, in_message, post_msg_id, extension, physical_filename, real_filename, mimetype
225
 
        FROM ' . ATTACHMENTS_TABLE . "
226
 
        WHERE attach_id = $download_id";
227
 
$result = $db->sql_query_limit($sql, 1);
228
 
$attachment = $db->sql_fetchrow($result);
229
 
$db->sql_freeresult($result);
230
 
 
231
 
if (!$attachment)
232
 
{
233
 
        trigger_error('ERROR_NO_ATTACHMENT');
234
 
}
235
 
 
236
 
$attachment['physical_filename'] = basename($attachment['physical_filename']);
237
 
$display_cat = $extensions[$attachment['extension']]['display_cat'];
238
 
 
239
 
if (($display_cat == ATTACHMENT_CATEGORY_IMAGE || $display_cat == ATTACHMENT_CATEGORY_THUMB) && !$user->optionget('viewimg'))
240
 
{
241
 
        $display_cat = ATTACHMENT_CATEGORY_NONE;
242
 
}
243
 
 
244
 
if ($display_cat == ATTACHMENT_CATEGORY_FLASH && !$user->optionget('viewflash'))
245
 
{
246
 
        $display_cat = ATTACHMENT_CATEGORY_NONE;
247
 
}
248
 
 
249
 
if ($thumbnail)
250
 
{
251
 
        $attachment['physical_filename'] = 'thumb_' . $attachment['physical_filename'];
252
 
}
253
 
else if (($display_cat == ATTACHMENT_CATEGORY_NONE || $display_cat == ATTACHMENT_CATEGORY_IMAGE) && !$attachment['is_orphan'])
254
 
{
255
 
        // Update download count
256
 
        $sql = 'UPDATE ' . ATTACHMENTS_TABLE . '
257
 
                SET download_count = download_count + 1
258
 
                WHERE attach_id = ' . $attachment['attach_id'];
259
 
        $db->sql_query($sql);
260
 
}
261
 
 
262
 
if ($display_cat == ATTACHMENT_CATEGORY_IMAGE && $mode === 'view' && (strpos($attachment['mimetype'], 'image') === 0) && strpos(strtolower($user->browser), 'msie') !== false)
263
 
{
264
 
        wrap_img_in_html(append_sid($phpbb_root_path . 'download/file.' . $phpEx, 'id=' . $attachment['attach_id']), $attachment['real_filename']);
265
 
}
266
 
else
267
 
{
268
 
        // Determine the 'presenting'-method
269
 
        if ($download_mode == PHYSICAL_LINK)
270
 
        {
271
 
                // This presenting method should no longer be used
272
 
                if (!@is_dir($phpbb_root_path . $config['upload_path']))
273
 
                {
274
 
                        trigger_error($user->lang['PHYSICAL_DOWNLOAD_NOT_POSSIBLE']);
275
 
                }
276
 
                
277
 
                redirect($phpbb_root_path . $config['upload_path'] . '/' . $attachment['physical_filename']);
278
 
                exit;
279
 
        }
280
 
        else
281
 
        {
282
 
                send_file_to_browser($attachment, $config['upload_path'], $display_cat);
283
 
                exit;
284
 
        }
285
 
}
286
 
 
287
 
 
288
 
/**
289
 
* A simplified function to deliver avatars
290
 
* The argument needs to be checked before calling this function.
291
 
*/
292
 
function send_avatar_to_browser($file, $browser)
293
 
{
294
 
        global $config, $phpbb_root_path;
295
 
 
296
 
        $prefix = $config['avatar_salt'] . '_';
297
 
        $image_dir = $config['avatar_path'];
298
 
 
299
 
        // Adjust image_dir path (no trailing slash)
300
 
        if (substr($image_dir, -1, 1) == '/' || substr($image_dir, -1, 1) == '\\')
301
 
        {
302
 
                $image_dir = substr($image_dir, 0, -1) . '/';
303
 
        }
304
 
        $image_dir = str_replace(array('../', '..\\', './', '.\\'), '', $image_dir);
305
 
 
306
 
        if ($image_dir && ($image_dir[0] == '/' || $image_dir[0] == '\\'))
307
 
        {
308
 
                $image_dir = '';
309
 
        }
310
 
        $file_path = $phpbb_root_path . $image_dir . '/' . $prefix . $file;
311
 
 
312
 
        if ((@file_exists($file_path) && @is_readable($file_path)) && !headers_sent())
313
 
        {
314
 
                header('Pragma: public');
315
 
 
316
 
                $image_data = @getimagesize($file_path);
317
 
                header('Content-Type: ' . image_type_to_mime_type($image_data[2]));
318
 
 
319
 
                if (strpos(strtolower($browser), 'msie') !== false)
320
 
                {
321
 
                        header('Content-Disposition: attachment; ' . header_filename($file));
322
 
 
323
 
                        if (strpos(strtolower($browser), 'msie 6.0') !== false)
324
 
                        {
325
 
                                header('Expires: -1');
326
 
                        }
327
 
                        else
328
 
                        {
329
 
                                header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 31536000));
330
 
                        }
331
 
                }
332
 
                else
333
 
                {
334
 
                        header('Content-Disposition: inline; ' . header_filename($file));
335
 
                        header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 31536000));
336
 
                }
337
 
 
338
 
                $size = @filesize($file_path);
339
 
                if ($size)
340
 
                {
341
 
                        header("Content-Length: $size");
342
 
                }
343
 
 
344
 
                if (@readfile($file_path) === false)
345
 
                {
346
 
                        $fp = @fopen($file_path, 'rb');
347
 
 
348
 
                        if ($fp !== false)
349
 
                        {
350
 
                                while (!feof($fp))
351
 
                                {
352
 
                                        echo fread($fp, 8192);
353
 
                                }
354
 
                                fclose($fp);
355
 
                        }
356
 
                }
357
 
 
358
 
                flush();
359
 
        }
360
 
        else
361
 
        {
362
 
                header('HTTP/1.0 404 not found');
363
 
        }
364
 
}
365
 
 
366
 
/**
367
 
* Wraps an url into a simple html page. Used to display attachments in IE.
368
 
* this is a workaround for now; might be moved to template system later
369
 
* direct any complaints to 1 Microsoft Way, Redmond
370
 
*/
371
 
function wrap_img_in_html($src, $title)
372
 
{
373
 
        echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-Strict.dtd">';
374
 
        echo '<html>';
375
 
        echo '<head>';
376
 
        echo '<meta http-equiv="content-type" content="text/html; charset=UTF-8" />';
377
 
        echo '<title>' . $title . '</title>';
378
 
        echo '</head>';
379
 
        echo '<body>';
380
 
        echo '<div>';
381
 
        echo '<img src="' . $src . '" alt="' . $title . '" />';
382
 
        echo '</div>';
383
 
        echo '</body>';
384
 
        echo '</html>';
385
 
}
386
 
 
387
 
/**
388
 
* Send file to browser
389
 
*/
390
 
function send_file_to_browser($attachment, $upload_dir, $category)
391
 
{
392
 
        global $user, $db, $config, $phpbb_root_path;
393
 
 
394
 
        $filename = $phpbb_root_path . $upload_dir . '/' . $attachment['physical_filename'];
395
 
 
396
 
        if (!@file_exists($filename))
397
 
        {
398
 
                trigger_error($user->lang['ERROR_NO_ATTACHMENT'] . '<br /><br />' . sprintf($user->lang['FILE_NOT_FOUND_404'], $filename));
399
 
        }
400
 
 
401
 
        // Correct the mime type - we force application/octetstream for all files, except images
402
 
        // Please do not change this, it is a security precaution
403
 
        if ($category != ATTACHMENT_CATEGORY_IMAGE || strpos($attachment['mimetype'], 'image') !== 0)
404
 
        {
405
 
                $attachment['mimetype'] = (strpos(strtolower($user->browser), 'msie') !== false || strpos(strtolower($user->browser), 'opera') !== false) ? 'application/octetstream' : 'application/octet-stream';
406
 
        }
407
 
 
408
 
        if (@ob_get_length())
409
 
        {
410
 
                @ob_end_clean();
411
 
        }
412
 
 
413
 
        // Now send the File Contents to the Browser
414
 
        $size = @filesize($filename);
415
 
 
416
 
        // To correctly display further errors we need to make sure we are using the correct headers for both (unsetting content-length may not work)
417
 
 
418
 
        // Check if headers already sent or not able to get the file contents.
419
 
        if (headers_sent() || !@file_exists($filename) || !@is_readable($filename))
420
 
        {
421
 
                // PHP track_errors setting On?
422
 
                if (!empty($php_errormsg))
423
 
                {
424
 
                        trigger_error($user->lang['UNABLE_TO_DELIVER_FILE'] . '<br />' . sprintf($user->lang['TRACKED_PHP_ERROR'], $php_errormsg));
425
 
                }
426
 
 
427
 
                trigger_error('UNABLE_TO_DELIVER_FILE');
428
 
        }
429
 
 
430
 
        // Now the tricky part... let's dance
431
 
        header('Pragma: public');
432
 
 
433
 
        /**
434
 
        * Commented out X-Sendfile support. To not expose the physical filename within the header if xsendfile is absent we need to look into methods of checking it's status.
435
 
        *
436
 
        * Try X-Sendfile since it is much more server friendly - only works if the path is *not* outside of the root path...
437
 
        * lighttpd has core support for it. An apache2 module is available at http://celebnamer.celebworld.ws/stuff/mod_xsendfile/
438
 
        *
439
 
        * Not really ideal, but should work fine...
440
 
        * <code>
441
 
        *       if (strpos($upload_dir, '/') !== 0 && strpos($upload_dir, '../') === false)
442
 
        *       {
443
 
        *               header('X-Sendfile: ' . $filename);
444
 
        *       }
445
 
        * </code>
446
 
        */
447
 
 
448
 
        // Send out the Headers. Do not set Content-Disposition to inline please, it is a security measure for users using the Internet Explorer.
449
 
        header('Content-Type: ' . $attachment['mimetype']);
450
 
 
451
 
        if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie') !== false))
452
 
        {
453
 
                header('Content-Disposition: attachment; ' . header_filename(htmlspecialchars_decode($attachment['real_filename'])));
454
 
                if (empty($user->browser) || (strpos(strtolower($user->browser), 'msie 6.0') !== false))
455
 
                {
456
 
                        header('expires: -1');
457
 
                }
458
 
        }
459
 
        else
460
 
        {
461
 
                header('Content-Disposition: ' . ((strpos($attachment['mimetype'], 'image') === 0) ? 'inline' : 'attachment') . '; ' . header_filename(htmlspecialchars_decode($attachment['real_filename'])));
462
 
        }
463
 
        
464
 
        if ($size)
465
 
        {
466
 
                header("Content-Length: $size");
467
 
        }
468
 
 
469
 
        // Try to deliver in chunks
470
 
        @set_time_limit(0);
471
 
 
472
 
        $fp = @fopen($filename, 'rb');
473
 
 
474
 
        if ($fp !== false)
475
 
        {
476
 
                while (!feof($fp))
477
 
                {
478
 
                        echo fread($fp, 8192);
479
 
                }
480
 
                fclose($fp);
481
 
        }
482
 
        else
483
 
        {
484
 
                @readfile($filename);
485
 
        }
486
 
 
487
 
        flush();
488
 
        exit;
489
 
}
490
 
 
491
 
/**
492
 
* Get a browser friendly UTF-8 encoded filename
493
 
*/
494
 
function header_filename($file)
495
 
{
496
 
        $user_agent = (!empty($_SERVER['HTTP_USER_AGENT'])) ? htmlspecialchars((string) $_SERVER['HTTP_USER_AGENT']) : '';
497
 
 
498
 
        // There be dragons here.
499
 
        // Not many follows the RFC...
500
 
        if (strpos($user_agent, 'MSIE') !== false || strpos($user_agent, 'Safari') !== false || strpos($user_agent, 'Konqueror') !== false)
501
 
        {
502
 
                return "filename=" . rawurlencode($file);
503
 
        }
504
 
 
505
 
        // follow the RFC for extended filename for the rest
506
 
        return "filename*=UTF-8''" . rawurlencode($file);
507
 
}
508
 
 
509
 
/**
510
 
* Check if downloading item is allowed
511
 
*/
512
 
function download_allowed()
513
 
{
514
 
        global $config, $user, $db;
515
 
 
516
 
        if (!$config['secure_downloads'])
517
 
        {
518
 
                return true;
519
 
        }
520
 
 
521
 
        $url = (!empty($_SERVER['HTTP_REFERER'])) ? trim($_SERVER['HTTP_REFERER']) : trim(getenv('HTTP_REFERER'));
522
 
 
523
 
        if (!$url)
524
 
        {
525
 
                return ($config['secure_allow_empty_referer']) ? true : false;
526
 
        }
527
 
 
528
 
        // Split URL into domain and script part
529
 
        $url = @parse_url($url);
530
 
 
531
 
        if ($url === false)
532
 
        {
533
 
                return ($config['secure_allow_empty_referer']) ? true : false;
534
 
        }
535
 
 
536
 
        $hostname = $url['host'];
537
 
        unset($url);
538
 
 
539
 
        $allowed = ($config['secure_allow_deny']) ? false : true;
540
 
        $iplist = array();
541
 
 
542
 
        if (($ip_ary = @gethostbynamel($hostname)) !== false)
543
 
        {
544
 
                foreach ($ip_ary as $ip)
545
 
                {
546
 
                        if ($ip)
547
 
                        {
548
 
                                $iplist[] = $ip;
549
 
                        }
550
 
                }
551
 
        }
552
 
        
553
 
        // Check for own server...
554
 
        $server_name = (!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME');
555
 
 
556
 
        // Forcing server vars is the only way to specify/override the protocol
557
 
        if ($config['force_server_vars'] || !$server_name)
558
 
        {
559
 
                $server_name = $config['server_name'];
560
 
        }
561
 
 
562
 
        if (preg_match('#^.*?' . preg_quote($server_name, '#') . '.*?$#i', $hostname))
563
 
        {
564
 
                $allowed = true;
565
 
        }
566
 
        
567
 
        // Get IP's and Hostnames
568
 
        if (!$allowed)
569
 
        {
570
 
                $sql = 'SELECT site_ip, site_hostname, ip_exclude
571
 
                        FROM ' . SITELIST_TABLE;
572
 
                $result = $db->sql_query($sql);
573
 
 
574
 
                while ($row = $db->sql_fetchrow($result))
575
 
                {
576
 
                        $site_ip = trim($row['site_ip']);
577
 
                        $site_hostname = trim($row['site_hostname']);
578
 
 
579
 
                        if ($site_ip)
580
 
                        {
581
 
                                foreach ($iplist as $ip)
582
 
                                {
583
 
                                        if (preg_match('#^' . str_replace('\*', '.*?', preg_quote($site_ip, '#')) . '$#i', $ip))
584
 
                                        {
585
 
                                                if ($row['ip_exclude'])
586
 
                                                {
587
 
                                                        $allowed = ($config['secure_allow_deny']) ? false : true;
588
 
                                                        break 2;
589
 
                                                }
590
 
                                                else
591
 
                                                {
592
 
                                                        $allowed = ($config['secure_allow_deny']) ? true : false;
593
 
                                                }
594
 
                                        }
595
 
                                }
596
 
                        }
597
 
 
598
 
                        if ($site_hostname)
599
 
                        {
600
 
                                if (preg_match('#^' . str_replace('\*', '.*?', preg_quote($site_hostname, '#')) . '$#i', $hostname))
601
 
                                {
602
 
                                        if ($row['ip_exclude'])
603
 
                                        {
604
 
                                                $allowed = ($config['secure_allow_deny']) ? false : true;
605
 
                                                break;
606
 
                                        }
607
 
                                        else
608
 
                                        {
609
 
                                                $allowed = ($config['secure_allow_deny']) ? true : false;
610
 
                                        }
611
 
                                }
612
 
                        }
613
 
                }
614
 
                $db->sql_freeresult($result);
615
 
        }
616
 
        
617
 
        return $allowed;
618
 
}
619
 
 
620
 
?>
 
 
b'\\ No newline at end of file'