<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- template designed by Marco Von Ballmoos -->
<title>File Source for phpagi-fastagi.php</title>
<link rel="stylesheet" href="../media/stylesheet.css" />
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
</head>
<body>
<h1>Source for file phpagi-fastagi.php</h1>
<p>Documentation is available at <a href="../phpAGI/_phpagi-fastagi.php.html">phpagi-fastagi.php</a></p>
<div class="src-code">
<div class="src-code"><ol><li><div class="src-line"><a name="a1"></a>#!/usr/local/bin/php -q</div></li>
<li><div class="src-line"><a name="a2"></a><span class="src-php"><?php</span></div></li>
<li><div class="src-line"><a name="a3"></a> <span class="src-doc">/**</span></div></li>
<li><div class="src-line"><a name="a4"></a><span class="src-doc"> * phpagi-fastagi.php : PHP FastAGI bootstrap</span></div></li>
<li><div class="src-line"><a name="a5"></a><span class="src-doc"> * Website: http://phpagi.sourceforge.net</span></div></li>
<li><div class="src-line"><a name="a6"></a><span class="src-doc"> *</span></div></li>
<li><div class="src-line"><a name="a7"></a><span class="src-doc"> * $Id: phpagi-fastagi.php,v 1.2 2005/05/25 18:43:48 pinhole Exp $</span></div></li>
<li><div class="src-line"><a name="a8"></a><span class="src-doc"> *</span></div></li>
<li><div class="src-line"><a name="a9"></a><span class="src-doc"> * Copyright (c) 2004, 2005 Matthew Asham <hide@address.com>, David Eder <hide@address.com></span></div></li>
<li><div class="src-line"><a name="a10"></a><span class="src-doc"> * All Rights Reserved.</span></div></li>
<li><div class="src-line"><a name="a11"></a><span class="src-doc"> *</span></div></li>
<li><div class="src-line"><a name="a12"></a><span class="src-doc"> * This software is released under the terms of the GNU Lesser General Public License v2.1</span></div></li>
<li><div class="src-line"><a name="a13"></a><span class="src-doc"> * A copy of which is available from http://www.gnu.org/copyleft/lesser.html</span></div></li>
<li><div class="src-line"><a name="a14"></a><span class="src-doc"> *</span></div></li>
<li><div class="src-line"><a name="a15"></a><span class="src-doc"> * We would be happy to list your phpagi based application on the phpagi</span></div></li>
<li><div class="src-line"><a name="a16"></a><span class="src-doc"> * website. Drop me an Email if you'd like us to list your program.</span></div></li>
<li><div class="src-line"><a name="a17"></a><span class="src-doc"> *</span></div></li>
<li><div class="src-line"><a name="a18"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@package</span><span class="src-doc"> phpAGI</span></div></li>
<li><div class="src-line"><a name="a19"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@version</span><span class="src-doc"> 2.0</span></div></li>
<li><div class="src-line"><a name="a20"></a><span class="src-doc"> * </span><span class="src-doc-coretag">@example</span><span class="src-doc"> docs/fastagi.xinetd Example xinetd config file</span></div></li>
<li><div class="src-line"><a name="a21"></a><span class="src-doc"> */</span></div></li>
<li><div class="src-line"><a name="a22"></a> </div></li>
<li><div class="src-line"><a name="a23"></a> <span class="src-doc">/**</span></div></li>
<li><div class="src-line"><a name="a24"></a><span class="src-doc"> * Written for PHP 4.3.4, should work with older PHP 4.x versions.</span></div></li>
<li><div class="src-line"><a name="a25"></a><span class="src-doc"> * Please submit bug reports, patches, etc to http://sourceforge.net/projects/phpagi/</span></div></li>
<li><div class="src-line"><a name="a26"></a><span class="src-doc"> * Gracias. :)</span></div></li>
<li><div class="src-line"><a name="a27"></a><span class="src-doc"> *</span></div></li>
<li><div class="src-line"><a name="a28"></a><span class="src-doc"> */</span></div></li>
<li><div class="src-line"><a name="a29"></a> </div></li>
<li><div class="src-line"><a name="a30"></a> <span class="src-inc">require_once</span><span class="src-sym">(</span><span class="src-id">dirname</span><span class="src-sym">(</span>__FILE__<span class="src-sym">) </span>. <span class="src-id">DIRECTORY_SEPARATOR </span>. <span class="src-str">'phpagi.php'</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a31"></a> </div></li>
<li><div class="src-line"><a name="a32"></a> <span class="src-var">$fastagi </span>= <span class="src-key">new </span><span class="src-id"><a href="../phpAGI/AGI.html">AGI</a></span><span class="src-sym">(</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a33"></a> </div></li>
<li><div class="src-line"><a name="a34"></a> <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">verbose</span><span class="src-sym">(</span><a href="http://www.php.net/print_r">print_r</a><span class="src-sym">(</span><span class="src-var">$fastagi</span><span class="src-sym">, </span><span class="src-id">true</span><span class="src-sym">))</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a35"></a> </div></li>
<li><div class="src-line"><a name="a36"></a> <span class="src-key">if</span><span class="src-sym">(</span><span class="src-sym">!</span>isset<span class="src-sym">(</span><span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">config</span><span class="src-sym">[</span><span class="src-str">'fastagi'</span><span class="src-sym">]</span><span class="src-sym">[</span><span class="src-str">'basedir'</span><span class="src-sym">]</span><span class="src-sym">))</span></div></li>
<li><div class="src-line"><a name="a37"></a> <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">config</span><span class="src-sym">[</span><span class="src-str">'fastagi'</span><span class="src-sym">]</span><span class="src-sym">[</span><span class="src-str">'basedir'</span><span class="src-sym">] </span>= <a href="http://www.php.net/dirname">dirname</a><span class="src-sym">(</span>__FILE__<span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a38"></a> </div></li>
<li><div class="src-line"><a name="a39"></a> <span class="src-comm">// perform some security checks</span></div></li>
<li><div class="src-line"><a name="a40"></a> </div></li>
<li><div class="src-line"><a name="a41"></a> <span class="src-var">$script </span>= <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">config</span><span class="src-sym">[</span><span class="src-str">'fastagi'</span><span class="src-sym">]</span><span class="src-sym">[</span><span class="src-str">'basedir'</span><span class="src-sym">] </span>. <span class="src-id">DIRECTORY_SEPARATOR </span>. <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">request</span><span class="src-sym">[</span><span class="src-str">'agi_network_script'</span><span class="src-sym">]</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a42"></a> </div></li>
<li><div class="src-line"><a name="a43"></a> <span class="src-comm">// in the same directory (or subdirectory)</span></div></li>
<li><div class="src-line"><a name="a44"></a> <span class="src-var">$mydir </span>= <a href="http://www.php.net/dirname">dirname</a><span class="src-sym">(</span><span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">config</span><span class="src-sym">[</span><span class="src-str">'fastagi'</span><span class="src-sym">]</span><span class="src-sym">[</span><span class="src-str">'basedir'</span><span class="src-sym">]</span><span class="src-sym">) </span>. <span class="src-id">DIRECTORY_SEPARATOR</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a45"></a> <span class="src-var">$dir </span>= <a href="http://www.php.net/dirname">dirname</a><span class="src-sym">(</span><span class="src-var">$script</span><span class="src-sym">) </span>. <span class="src-id">DIRECTORY_SEPARATOR</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a46"></a> <span class="src-key">if</span><span class="src-sym">(</span><a href="http://www.php.net/substr">substr</a><span class="src-sym">(</span><span class="src-var">$dir</span><span class="src-sym">, </span><span class="src-num">0</span><span class="src-sym">, </span><a href="http://www.php.net/strlen">strlen</a><span class="src-sym">(</span><span class="src-var">$mydir</span><span class="src-sym">)) </span>!= <span class="src-var">$mydir</span><span class="src-sym">)</span></div></li>
<li><div class="src-line"><a name="a47"></a> <span class="src-sym">{</span></div></li>
<li><div class="src-line"><a name="a48"></a> <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">conlog</span><span class="src-sym">(</span><span class="src-str">"</span><span class="src-str"><span class="src-var">$script</span> is not allowed to execute.</span><span class="src-str">"</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a49"></a> <span class="src-key">exit</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a50"></a> <span class="src-sym">}</span></div></li>
<li><div class="src-line"><a name="a51"></a> </div></li>
<li><div class="src-line"><a name="a52"></a> <span class="src-comm">// make sure it exists</span></div></li>
<li><div class="src-line"><a name="a53"></a> <span class="src-key">if</span><span class="src-sym">(</span><span class="src-sym">!</span><a href="http://www.php.net/file_exists">file_exists</a><span class="src-sym">(</span><span class="src-var">$script</span><span class="src-sym">))</span></div></li>
<li><div class="src-line"><a name="a54"></a> <span class="src-sym">{</span></div></li>
<li><div class="src-line"><a name="a55"></a> <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">conlog</span><span class="src-sym">(</span><span class="src-str">"</span><span class="src-str"><span class="src-var">$script</span> does not exist.</span><span class="src-str">"</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a56"></a> <span class="src-key">exit</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a57"></a> <span class="src-sym">}</span></div></li>
<li><div class="src-line"><a name="a58"></a> </div></li>
<li><div class="src-line"><a name="a59"></a> <span class="src-comm">// drop privileges</span></div></li>
<li><div class="src-line"><a name="a60"></a> <span class="src-key">if</span><span class="src-sym">(</span>isset<span class="src-sym">(</span><span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">config</span><span class="src-sym">[</span><span class="src-str">'fastagi'</span><span class="src-sym">]</span><span class="src-sym">[</span><span class="src-str">'setuid'</span><span class="src-sym">]</span><span class="src-sym">) </span>&& <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">config</span><span class="src-sym">[</span><span class="src-str">'fastagi'</span><span class="src-sym">]</span><span class="src-sym">[</span><span class="src-str">'setuid'</span><span class="src-sym">]</span><span class="src-sym">)</span></div></li>
<li><div class="src-line"><a name="a61"></a> <span class="src-sym">{</span></div></li>
<li><div class="src-line"><a name="a62"></a> <span class="src-var">$owner </span>= <a href="http://www.php.net/fileowner">fileowner</a><span class="src-sym">(</span><span class="src-var">$script</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a63"></a> <span class="src-var">$group </span>= <a href="http://www.php.net/filegroup">filegroup</a><span class="src-sym">(</span><span class="src-var">$script</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a64"></a> <span class="src-key">if</span><span class="src-sym">(</span><span class="src-sym">!</span><a href="http://www.php.net/posix_setgid">posix_setgid</a><span class="src-sym">(</span><span class="src-var">$group</span><span class="src-sym">) </span>|| <span class="src-sym">!</span><a href="http://www.php.net/posix_setegid">posix_setegid</a><span class="src-sym">(</span><span class="src-var">$group</span><span class="src-sym">) </span>|| <span class="src-sym">!</span><a href="http://www.php.net/posix_setuid">posix_setuid</a><span class="src-sym">(</span><span class="src-var">$owner</span><span class="src-sym">) </span>|| <span class="src-sym">!</span><a href="http://www.php.net/posix_seteuid">posix_seteuid</a><span class="src-sym">(</span><span class="src-var">$owner</span><span class="src-sym">))</span></div></li>
<li><div class="src-line"><a name="a65"></a> <span class="src-sym">{</span></div></li>
<li><div class="src-line"><a name="a66"></a> <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">conlog</span><span class="src-sym">(</span><span class="src-str">"failed to lower privileges."</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a67"></a> <span class="src-key">exit</span><span class="src-sym">; </span></div></li>
<li><div class="src-line"><a name="a68"></a> <span class="src-sym">}</span></div></li>
<li><div class="src-line"><a name="a69"></a> <span class="src-sym">}</span></div></li>
<li><div class="src-line"><a name="a70"></a> </div></li>
<li><div class="src-line"><a name="a71"></a> <span class="src-comm">// make sure script is still readable</span></div></li>
<li><div class="src-line"><a name="a72"></a> <span class="src-key">if</span><span class="src-sym">(</span><span class="src-sym">!</span><a href="http://www.php.net/is_readable">is_readable</a><span class="src-sym">(</span><span class="src-var">$script</span><span class="src-sym">))</span></div></li>
<li><div class="src-line"><a name="a73"></a> <span class="src-sym">{</span></div></li>
<li><div class="src-line"><a name="a74"></a> <span class="src-var">$fastagi</span><span class="src-sym">-></span><span class="src-id">conlog</span><span class="src-sym">(</span><span class="src-str">"</span><span class="src-str"><span class="src-var">$script</span> is not readable.</span><span class="src-str">"</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a75"></a> <span class="src-key">exit</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a76"></a> <span class="src-sym">}</span></div></li>
<li><div class="src-line"><a name="a77"></a> </div></li>
<li><div class="src-line"><a name="a78"></a> <span class="src-inc">require_once</span><span class="src-sym">(</span><span class="src-var">$script</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
<li><div class="src-line"><a name="a79"></a><span class="src-php">?></span></div></li>
</ol></div>
</div>
<p class="notes" id="credit">
Documentation generated on Thu, 30 Sep 2010 02:21:49 -0700 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.2</a>
</p>
</body>
</html>