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

« back to all changes in this revision

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

  • Committer: mattgiuca
  • Date: 2008-01-12 15:35:53 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:201
Added "test" directory.
Added make_date_test.py, a short script I wrote to test the date format
algorithm committed in the previous revision.

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'