From 12bc8b6fa2d4d85f08168acb2dcedcc186654489 Mon Sep 17 00:00:00 2001 From: till <till@php.net> Date: Fri, 16 Jan 2009 22:28:54 -0500 Subject: [PATCH] * minor fixes: simplied code, http status, cs --- bin/modcss.php | 94 ++++++++++++++++++++++++++++------------------- 1 files changed, 56 insertions(+), 38 deletions(-) diff --git a/bin/modcss.php b/bin/modcss.php index 9931539..3ee1e23 100644 --- a/bin/modcss.php +++ b/bin/modcss.php @@ -24,46 +24,64 @@ $RCMAIL = rcmail::get_instance(); -$source = ""; -if (!empty($RCMAIL->user->ID) && ($url = preg_replace('/[^a-z0-9.-_\?\$&=%]/i', '', $_GET['u']))) -{ - $a_uri = parse_url($url); - $port = $a_uri['port'] ? $a_uri['port'] : 80; - $host = $a_uri['host']; - $path = $a_uri['path'] . ($a_uri['query'] ? '?'.$a_uri['query'] : ''); +$source = ''; +$error = 'Requires a valid user session and source url'; - - if ($fp = fsockopen($host, $port, $errno, $errstr, 30)) - { - $out = "GET $path HTTP/1.0\r\n"; - $out .= "Host: $host\r\n"; - $out .= "Connection: Close\r\n\r\n"; - fwrite($fp, $out); - - $header = true; - while (!feof($fp)) - { - $line = trim(fgets($fp, 4048)); - - if ($header && preg_match('/^HTTP\/1\..\s+(\d+)/', $line, $regs) && intval($regs[1]) != 200) - break; - else if (empty($line) && $header) - $header = false; - else if (!$header) - $source .= "$line\n"; - } - fclose($fp); - } +if (empty($RCMAIL->user->ID)) { + header('HTTP/1.1 403 Forbidden'); + echo $error; + exit; } -if (!empty($source)) -{ - header("Content-Type: text/css"); - echo rcmail_mod_css_styles($source, preg_replace('/[^a-z0-9]/i', '', $_GET['c']), $url); -} -else { - header("HTTP/1.0 404 Not Found"); - echo "Requires a valid user session and source url"; +$url = preg_replace('/[^a-z0-9.-_\?\$&=%]/i', '', $_GET['u']); +if ($url === null) { + header('HTTP/1.1 403 Forbidden'); + echo $error; + exit; } -?> +$a_uri = parse_url($url); +$port = $a_uri['port'] ? $a_uri['port'] : 80; +$host = $a_uri['host']; +$path = $a_uri['path'] . ($a_uri['query'] ? '?'.$a_uri['query'] : ''); + +if (!($fp = fsockopen($host, $port, $errno, $errstr, 30))) { + header('HTTP/1.1 500 Internal Server Error'); + echo $error; + exit; +} + +$out = "GET $path HTTP/1.0\r\n"; +$out .= "Host: $host\r\n"; +$out .= "Connection: Close\r\n\r\n"; +fwrite($fp, $out); + +$header = true; +while (!feof($fp)) { + $line = trim(fgets($fp, 4048)); + + if ($header + && preg_match('/^HTTP\/1\..\s+(\d+)/', $line, $regs) + && intval($regs[1]) != 200) { + break; + } else if (empty($line) && $header) { + $header = false; + } else if (!$header) { + $source .= "$line\n"; + } + fclose($fp); +} + +if (!empty($source)) { + header('Content-Type: text/css'); + echo rcmail_mod_css_styles( + $source, + preg_replace('/[^a-z0-9]/i', '', $_GET['c']), + $url + ); + exit; +} + +header('HTTP/1.0 404 Not Found'); +echo $error; +exit; -- Gitblit v1.9.1