Ariadne-CMS /
ariadne
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | #!/usr/bin/env php |
||
| 2 | <?php |
||
| 3 | if ($argc > 1) { |
||
| 4 | $configfile=$argv[1]; |
||
| 5 | } else { |
||
| 6 | $configfile="default.phtml"; |
||
| 7 | } |
||
| 8 | |||
| 9 | $ARLoader = 'ftp'; |
||
| 10 | $currentDir = getcwd(); |
||
| 11 | $ariadne = dirname($currentDir).'/lib/'; |
||
| 12 | |||
| 13 | if (!@include_once($ariadne."/bootstrap.php")) { |
||
| 14 | chdir(substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))); |
||
| 15 | $ariadne = dirname(getcwd()).'/lib/'; |
||
| 16 | |||
| 17 | if(!include_once($ariadne."/bootstrap.php")){ |
||
| 18 | echo "could not find Ariadne"; |
||
| 19 | exit(1); |
||
| 20 | } |
||
| 21 | |||
| 22 | chdir($currentDir); |
||
| 23 | } |
||
| 24 | |||
| 25 | require_once($ariadne."/configs/ftp/$configfile"); |
||
| 26 | require_once($ariadne."/modules/mod_mimemagic.php"); |
||
| 27 | |||
| 28 | /* this function has been taken from the php manual */ |
||
| 29 | |||
| 30 | function ftp_ErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) { |
||
| 31 | if ($errno!= 2 && $errno!=8 ) { |
||
| 32 | // timestamp for the error entry |
||
| 33 | $dt = date("Y-m-d H:i:s (T)"); |
||
| 34 | |||
| 35 | // define an assoc array of error string |
||
| 36 | // in reality the only entries we should |
||
| 37 | // consider are 2,8,256,512 and 1024 |
||
| 38 | $errortype = array ( |
||
| 39 | 1 => "Error", |
||
| 40 | 2 => "Warning", |
||
| 41 | 4 => "Parsing Error", |
||
| 42 | 8 => "Notice", |
||
| 43 | 16 => "Core Error", |
||
| 44 | 32 => "Core Warning", |
||
| 45 | 64 => "Compile Error", |
||
| 46 | 128 => "Compile Warning", |
||
| 47 | 256 => "User Error", |
||
| 48 | 512 => "User Warning", |
||
| 49 | 1024=> "User Notice" |
||
| 50 | ); |
||
| 51 | // set of errors for which a var trace will be saved |
||
| 52 | $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); |
||
| 53 | |||
| 54 | $err = "<errorentry>\n"; |
||
| 55 | $err .= "\t<datetime>".$dt."</datetime>\n"; |
||
| 56 | $err .= "\t<errornum>".$errno."</errnumber>\n"; |
||
| 57 | $err .= "\t<errortype>".$errortype[$errno]."</errortype>\n"; |
||
| 58 | $err .= "\t<errormsg>".$errmsg."</errormsg>\n"; |
||
| 59 | $err .= "\t<scriptname>".$filename."</scriptname>\n"; |
||
| 60 | $err .= "\t<scriptlinenum>".$linenum."</scriptlinenum>\n"; |
||
| 61 | |||
| 62 | if (in_array($errno, $user_errors)) { |
||
| 63 | $err .= "\t<vartrace>".wddx_serialize_value($vars,"Variables")."</vartrace>\n"; |
||
| 64 | } |
||
| 65 | $err .= "</errorentry>\n\n"; |
||
| 66 | |||
| 67 | debug($err); |
||
| 68 | } |
||
| 69 | } |
||
| 70 | |||
| 71 | |||
| 72 | function ftp_OpenDC() { |
||
| 73 | global $FTP, $ftp_config; |
||
| 74 | |||
| 75 | $FTP->DC["transfered"]=0; |
||
| 76 | if ($FTP->DC["mode"]==="active") { |
||
| 77 | $socket=socket_create(AF_INET, SOCK_STREAM, 0); |
||
| 78 | if ($socket>=0) { |
||
| 79 | debug("ftp: opened socket"); |
||
| 80 | @socket_bind($socket, $ftp_config['server_ip']); |
||
| 81 | $result=socket_connect($socket, $FTP->DC["address"], $FTP->DC["port"]); |
||
| 82 | if ($result < 0) { |
||
| 83 | ftp_Tell(425, "Couldn't build data connection (rm: connection error: ".strerror($result).")"); |
||
| 84 | $result=false; |
||
| 85 | } else { |
||
| 86 | debug("ftp: connected"); |
||
| 87 | $FTP->DC["msgsocket"]=$socket; |
||
| 88 | $result=true; |
||
| 89 | } |
||
| 90 | } else { |
||
| 91 | ftp_Tell(425, "Couldn't build data connection (rm: socket error: ".strerror($socket).")"); |
||
| 92 | $result=false; |
||
| 93 | } |
||
| 94 | } else { |
||
| 95 | // do passive mode |
||
| 96 | debug("ftp::OpenDC waiting on socket accept"); |
||
| 97 | $counter = 0; |
||
| 98 | $msgsocket = false; |
||
| 99 | while ( $counter < 300 && !is_resource($msgsocket) ) { |
||
| 100 | $counter++; |
||
| 101 | // wait for 0.1 secondes |
||
| 102 | usleep(100000); |
||
| 103 | $msgsocket=socket_accept($FTP->DC["socket"]); |
||
| 104 | } |
||
| 105 | debug("ftp::OpenDC socket accepted? (".$msgsocket.")"); |
||
| 106 | if (!is_resource($msgsocket) ) { |
||
| 107 | ftp_Tell(425, "Couldn't build data connection"); |
||
| 108 | $result=false; |
||
| 109 | } else { |
||
| 110 | debug("ftp: accept_connect returned $msgsocket"); |
||
| 111 | socket_set_blocking($msgsocket, true); |
||
| 112 | debug("ftp: connected ($msgsocket)"); |
||
| 113 | $FTP->DC["msgsocket"]=$msgsocket; |
||
| 114 | $result=true; |
||
| 115 | } |
||
| 116 | socket_close($FTP->DC["socket"]); |
||
| 117 | } |
||
| 118 | |||
| 119 | if ($result) { |
||
| 120 | if ($FTP->DC["ob_active"]) { |
||
| 121 | debug("error: OOPS, dc ob not closed!!"); |
||
| 122 | } else { |
||
| 123 | $FTP->DC["ob_active"]=true; |
||
| 124 | if (ob_start("ftp_WriteDC")) { |
||
| 125 | debug("ftp_OpenDC:: opening ob"); |
||
| 126 | } else { |
||
| 127 | debug("ftp_OpendDC:: could not open ob"); |
||
| 128 | } |
||
| 129 | } |
||
| 130 | } |
||
| 131 | return $result; |
||
| 132 | } |
||
| 133 | |||
| 134 | function ftp_GetPasv() { |
||
| 135 | global $FTP; |
||
| 136 | // client issued 'pasv' command |
||
| 137 | // so lets try to bind a socket to a port |
||
| 138 | $result=false; |
||
| 139 | if ($FTP->DC["socket_desc"]) { |
||
| 140 | // we alread got a socket open.. let's use it |
||
| 141 | $result = $FTP->DC["socket_desc"]; |
||
| 142 | } else { |
||
| 143 | $socket=socket_create(AF_INET, SOCK_STREAM, 0); |
||
| 144 | if ($socket>=0) { |
||
| 145 | debug("ftp: open socket ($socket) (pasv mode)"); |
||
| 146 | |||
| 147 | // FIXME: make this configurable! |
||
| 148 | $bound=0; |
||
| 149 | $port=12000; |
||
| 150 | while (!$bound && $port<=12100) { |
||
| 151 | $bound=socket_bind($socket, $FTP->server_ip, $port); |
||
| 152 | debug("ftp::pasv socket_bind port $port ($bound)"); |
||
| 153 | if (!$bound) { |
||
| 154 | $port++; |
||
| 155 | } |
||
| 156 | } |
||
| 157 | |||
| 158 | if ($bound) { |
||
| 159 | $ret=socket_listen($socket, 1); |
||
| 160 | socket_set_nonblock($socket); |
||
| 161 | if ($ret < 0) { |
||
| 162 | ftp_Tell(425, "Couldn't build data connection (rm: socket error:".strerror($socket).")"); |
||
| 163 | } else { |
||
| 164 | $FTP->DC["mode"]="passive"; |
||
| 165 | $FTP->DC["socket"]=$socket; |
||
| 166 | debug("ftp: listening on port $port"); |
||
| 167 | $result=str_replace(".", ",", $FTP->server_ip); |
||
| 168 | $result.=",".(((int)$port) >> 8); |
||
| 169 | $result.=",".($port & 0x00FF); |
||
| 170 | //$FTP->DC["socket_desc"]=$result; |
||
| 171 | } |
||
| 172 | } else { |
||
| 173 | ftp_Tell(425, "Couldn't build data connection: couldn't bind to a socket"); |
||
| 174 | } |
||
| 175 | |||
| 176 | } else { |
||
| 177 | ftp_Tell(425, "Couldn't build data connection (rm: socket error:".strerror($socket).")"); |
||
| 178 | } |
||
| 179 | } |
||
| 180 | |||
| 181 | return $result; |
||
| 182 | } |
||
| 183 | |||
| 184 | |||
| 185 | function ftp_WriteDC($bdata) { |
||
| 186 | global $FTP; |
||
| 187 | /* |
||
| 188 | make a copy of $data otherwise we will crash php |
||
| 189 | (you can't write to data from an output buffer) |
||
| 190 | */ |
||
| 191 | if ($FTP->resume) { |
||
| 192 | debug("ftp::WriteDC() truncating data"); |
||
| 193 | $data = substr($bdata, $FTP->resume); |
||
| 194 | } else { |
||
| 195 | $data = $bdata; |
||
| 196 | } |
||
| 197 | |||
| 198 | /* free unused data */ |
||
| 199 | unset($bdata); |
||
| 200 | |||
| 201 | if (strlen($data)) { |
||
| 202 | debug("ftp::WriteDC([data]) (".strlen($data).")"); |
||
| 203 | if ($FTP->DC["type"]==="A") { |
||
| 204 | $offset = 0; |
||
| 205 | $chunk = substr($data, $offset, 4096); |
||
| 206 | while ($chunk!==false) { |
||
| 207 | $chunk=str_replace("\n", "\r\n", $chunk); |
||
| 208 | $len = strlen($chunk); |
||
| 209 | debug("ftp_WriteDC:: writing chunk([chunk], $offset, 4096) (".$len.")"); |
||
| 210 | if (!socket_write($FTP->DC["msgsocket"], $chunk, $len)) { |
||
| 211 | debug("ftp_WriteDC:: chunk ERROR write $len bytes!"); |
||
| 212 | $chunk = false; |
||
| 213 | } else { |
||
| 214 | debug("ftp_WriteDC:: chunk success"); |
||
| 215 | //$offset+=strlen($chunk); |
||
| 216 | $offset += 4096; |
||
| 217 | $FTP->DC["transfered"]+=strlen($data); |
||
| 218 | $chunk = substr($data, $offset, 4096); |
||
| 219 | } |
||
| 220 | } |
||
| 221 | |||
| 222 | } else { |
||
| 223 | $len=strlen($data); |
||
| 224 | debug("ftp_WriteDC:: writing len (".$len.")"); |
||
| 225 | if (!socket_write($FTP->DC["msgsocket"], $data, $len)) { |
||
| 226 | debug("ftp_WriteDC:: ERROR writing $len bytes!"); |
||
| 227 | } else { |
||
| 228 | debug("ftp_WriteDC:: success"); |
||
| 229 | } |
||
| 230 | $FTP->DC["transfered"]+=strlen($data); |
||
| 231 | } |
||
| 232 | } |
||
| 233 | |||
| 234 | return ""; // empty string |
||
| 235 | } |
||
| 236 | |||
| 237 | function ftp_ReadDC() { |
||
| 238 | global $FTP; |
||
| 239 | $data = socket_read($FTP->DC["msgsocket"], 3000, PHP_BINARY_READ); |
||
| 240 | if (strlen($data) && ($FTP->DC["type"]==="A")) { |
||
| 241 | if ($data[strlen($data)-1]==="\r") { |
||
| 242 | $postdata = socket_read($FTP->DC["msgsocket"], 1, PHP_BINARY_READ); |
||
| 243 | $data.=$postdata; |
||
| 244 | } |
||
| 245 | $data=str_replace("\r\n", "\n", $data); |
||
| 246 | } |
||
| 247 | debug("ftp::ReadDC() (".strlen($data).")"); |
||
| 248 | $FTP->DC["transfered"]+=strlen($data); |
||
| 249 | return $data; |
||
| 250 | } |
||
| 251 | |||
| 252 | function ftp_CloseDC() { |
||
| 253 | global $FTP; |
||
| 254 | if ($FTP->DC["ob_active"]) { |
||
| 255 | debug("ftp::CloseDC:: closing output buffer"); |
||
| 256 | ob_end_flush(); |
||
| 257 | debug("ftp::CLoseDC:: ok, ob closed"); |
||
| 258 | $FTP->DC["ob_active"]=false; |
||
| 259 | } |
||
| 260 | |||
| 261 | debug("ftp: closing connection"); |
||
| 262 | $con=$FTP->DC["msgsocket"]; |
||
| 263 | if ($con) { |
||
| 264 | debug("ftp::CloseDC:: closing connection"); |
||
| 265 | socket_close($con); |
||
| 266 | debug("ftp::CloseDC:: connection closed"); |
||
| 267 | } |
||
| 268 | } |
||
| 269 | |||
| 270 | function ftp_TranslatePath(&$path, &$listMode) { |
||
| 271 | global $FTP; |
||
| 272 | $listMode=""; |
||
| 273 | $absolute = ($path[0] === '/') ? true : false; |
||
| 274 | $path=$FTP->site.$FTP->store->make_path($FTP->cwd, $path); |
||
| 275 | View Code Duplication | while (preg_match('|/'.ESPCHL.'([^/]*)'.ESPCHR.'/|', $path, $regs) && $regs[1]) { |
|
| 276 | $listMode=$regs[1]; |
||
| 277 | $path=str_replace("/".SPCHL.$listMode.SPCHR."/", "/", $path); |
||
| 278 | } |
||
| 279 | if (!$listMode) { |
||
| 280 | if (!$absolute && $FTP->listMode) { |
||
| 281 | $listMode=$FTP->listMode; |
||
| 282 | } else { |
||
| 283 | $listMode=$FTP->defaultListMode; |
||
| 284 | } |
||
| 285 | } |
||
| 286 | debug("ftp: Translate:: (FTP->listMode = '$FTP->listMode', listMode = '$listMode', path = '$path')"); |
||
| 287 | } |
||
| 288 | |||
| 289 | function ftp_TranslateTemplate(&$path, &$template) { |
||
| 290 | global $FTP; |
||
| 291 | $parent = $FTP->store->make_path($path, ".."); |
||
| 292 | $template = substr($path, strlen($parent), -1); |
||
| 293 | $path = $parent; |
||
| 294 | } |
||
| 295 | |||
| 296 | function ftp_Run() { |
||
| 297 | global $FTP, $ARCurrent, $ARBeenHere; |
||
| 298 | |||
| 299 | while (ftp_FetchCMD($cmd, $args)) { |
||
| 300 | $ARBeenHere=array(); |
||
| 301 | $ARCurrent->arLoginSilent = 0; |
||
| 302 | $ARCurrent->ftp_error = ""; |
||
| 303 | |||
| 304 | if ($last_cmd != 'REST') { |
||
|
0 ignored issues
–
show
|
|||
| 305 | $FTP->resume = 0; |
||
| 306 | } |
||
| 307 | switch ($cmd) { |
||
| 308 | case 'MDTM': |
||
| 309 | $path = $args; |
||
| 310 | ftp_TranslatePath($path, $listMode); |
||
| 311 | switch ($listMode) { |
||
| 312 | View Code Duplication | case 'templates': |
|
| 313 | ftp_TranslateTemplate($path, $template); |
||
| 314 | |||
| 315 | $result = current( |
||
| 316 | $FTP->store->call("ftp.template.exists.phtml", |
||
| 317 | array("arRequestedTemplate" => $template), |
||
| 318 | $FTP->store->get($path))); |
||
| 319 | $file_date = $result["date"]; |
||
| 320 | |||
| 321 | if ($file_date) { |
||
| 322 | ftp_Tell(213, date("YmdHis", $file_date)); |
||
| 323 | } else { |
||
| 324 | ftp_Tell(550, "No such file or directory"); |
||
| 325 | } |
||
| 326 | break; |
||
| 327 | default: |
||
| 328 | if ($FTP->store->exists($path)) { |
||
| 329 | $file_date = time(); // TODO fix |
||
| 330 | ftp_Tell(213, date("YmdHis", $file_date)); |
||
| 331 | } else { |
||
| 332 | ftp_Tell(550, "No such file or directory"); |
||
| 333 | } |
||
| 334 | break; |
||
| 335 | } |
||
| 336 | break; |
||
| 337 | |||
| 338 | case 'REST': |
||
| 339 | $FTP->resume = (int)$args; |
||
| 340 | ftp_Tell(350, 'Restarting at '.$FTP->resume.'.'); |
||
| 341 | break; |
||
| 342 | case 'QUIT': |
||
| 343 | ftp_Tell(221, "Goodbye."); |
||
| 344 | /* check if we have to close a 'passive' socket */ |
||
| 345 | if ($FTP->DC["socket_desc"]) { |
||
| 346 | socket_close($FTP->DC["socket"]); |
||
| 347 | } |
||
| 348 | return 0; |
||
| 349 | break; |
||
| 350 | case 'PWD': |
||
| 351 | $dir=$FTP->cwd; |
||
| 352 | if ($FTP->listMode) { |
||
| 353 | $dir="/".SPCHL.$FTP->listMode.SPCHR.$dir; |
||
| 354 | } |
||
| 355 | if (strlen($dir)>1) { |
||
| 356 | $dir=substr($dir,0,-1); |
||
| 357 | } |
||
| 358 | ftp_Tell(257, "\"$dir\" is current directory."); |
||
| 359 | break; |
||
| 360 | case 'HELP': |
||
| 361 | ftp_Tell(214, "not implemented" ); |
||
| 362 | break; |
||
| 363 | case 'PORT': |
||
| 364 | $FTP->DC["mode"]="active"; |
||
| 365 | $host=explode(",",$args); |
||
| 366 | $address=$host[0].".".$host[1].".".$host[2].".".$host[3]; |
||
| 367 | $FTP->DC["address"]=$address; |
||
| 368 | $port=((int)$host[4]) << 8; |
||
| 369 | $port+=(int)$host[5]; |
||
| 370 | $FTP->DC["port"]=$port; |
||
| 371 | ftp_Tell(200, "ok, connecting to $address $port"); |
||
| 372 | break; |
||
| 373 | case 'PASV': |
||
| 374 | $port=ftp_GetPasv(); |
||
| 375 | if ($port) { |
||
| 376 | ftp_Tell(227, "Entering Passive Mode ($port)"); |
||
| 377 | } |
||
| 378 | break; |
||
| 379 | View Code Duplication | case 'CDUP': |
|
| 380 | $cwd=$FTP->store->make_path($FTP->cwd, ".."); |
||
| 381 | if ($FTP->store->exists($FTP->site.$cwd)) { |
||
| 382 | $FTP->cwd=$cwd; |
||
| 383 | ftp_Tell(250, "CDUP succesfull"); |
||
| 384 | } else { |
||
| 385 | ftp_Tell(550, "CDUP not succesfull"); |
||
| 386 | } |
||
| 387 | break; |
||
| 388 | case 'CWD': |
||
| 389 | /* if CWD path is absolute then listmode is set to |
||
| 390 | the default value */ |
||
| 391 | |||
| 392 | $absolute = ($args[0]=="/") ? true : false; |
||
| 393 | if ($absolute) { |
||
| 394 | $FTP->listMode=$FTP->defaultListMode; |
||
| 395 | } |
||
| 396 | |||
| 397 | $path=$FTP->store->make_path($FTP->cwd, $args); |
||
| 398 | debug("ftp: cwd absolute path is ($path)"); |
||
| 399 | View Code Duplication | while (preg_match('|/'.ESPCHL.'([^/]*)'.ESPCHR.'/|', $path, $regs) && $regs[1]) { |
|
| 400 | $FTP->listMode=$regs[1]; |
||
| 401 | $path=str_replace("/".SPCHL.$FTP->listMode.SPCHR."/", "/", $path); |
||
| 402 | } |
||
| 403 | $cwd=$FTP->store->make_path($FTP->cwd, $path); |
||
| 404 | if ($FTP->store->exists($FTP->site.$cwd)) { |
||
| 405 | $result=current($FTP->store->call("system.get.phtml", "", |
||
| 406 | $FTP->store->get($FTP->site.$cwd))); |
||
| 407 | if ($result->type==="pshortcut") { |
||
| 408 | debug("ftp: shortcut: ".$result->data->path); |
||
| 409 | $cwd=$FTP->store->make_path($cwd, $result->data->path); |
||
| 410 | } |
||
| 411 | |||
| 412 | $FTP->cwd=$cwd; |
||
| 413 | debug("ftp: cwd ($cwd) listmode(".$FTP->listMode.")"); |
||
| 414 | ftp_Tell(250, "CWD succesfull (listmode = ".$FTP->listMode.")"); |
||
| 415 | } else { |
||
| 416 | ftp_Tell(550, "'$cwd' no such file or directory"); |
||
| 417 | } |
||
| 418 | break; |
||
| 419 | |||
| 420 | case 'TYPE': |
||
| 421 | if (preg_match('/a|i/i', $args)) { |
||
| 422 | $FTP->DC["type"]=strtoupper($args); |
||
| 423 | ftp_Tell(200, "Type set to ".$args); |
||
| 424 | } else { |
||
| 425 | ftp_Tell(500, "Type $args not valid"); |
||
| 426 | } |
||
| 427 | break; |
||
| 428 | |||
| 429 | case 'SIZE': |
||
| 430 | $path = $args; |
||
| 431 | ftp_TranslatePath($path, $listMode); |
||
| 432 | switch ($listMode) { |
||
| 433 | View Code Duplication | case 'templates': |
|
| 434 | ftp_TranslateTemplate($path, $template); |
||
| 435 | |||
| 436 | $result = current( |
||
| 437 | $FTP->store->call("ftp.template.exists.phtml", |
||
| 438 | array("arRequestedTemplate" => $template), |
||
| 439 | $FTP->store->get($path))); |
||
| 440 | if (is_array($result)) { |
||
| 441 | $file_size = $result["size"]; |
||
| 442 | ftp_Tell(213, (int)$file_size); |
||
| 443 | } else { |
||
| 444 | ftp_Tell(550, "No such file or directory"); |
||
| 445 | } |
||
| 446 | |||
| 447 | break; |
||
| 448 | View Code Duplication | default: |
|
| 449 | if ($FTP->store->exists($path)) { |
||
| 450 | $size = $FTP->store->call( |
||
| 451 | "ftp.$listMode.size.phtml", |
||
| 452 | "", |
||
| 453 | $FTP->store->get($path)); |
||
| 454 | ftp_Tell(213, (int)$size[0]); |
||
| 455 | } else { |
||
| 456 | ftp_Tell(550, "No such file or directory"); |
||
| 457 | } |
||
| 458 | break; |
||
| 459 | } |
||
| 460 | break; |
||
| 461 | |||
| 462 | case 'RNFR': |
||
| 463 | $rename_src_path = $args; |
||
| 464 | ftp_TranslatePath($rename_src_path, $rename_src_listMode); |
||
| 465 | if ($listMode === "templates") { |
||
|
0 ignored issues
–
show
The variable
$listMode does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 466 | ftp_TranslateTemplate($rename_src_path, $rename_src_template); |
||
| 467 | $result = $FTP->store->call( |
||
| 468 | "ftp.template.exists.phtml", |
||
| 469 | array( |
||
| 470 | "arRequestedTemplate" => $rename_src_template |
||
| 471 | ), |
||
| 472 | $FTP->store->get($path)); |
||
|
0 ignored issues
–
show
The variable
$path does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 473 | |||
| 474 | if (is_array($result) && current($result)) { |
||
| 475 | ftp_Tell(350, "template exists, supply destination name."); |
||
| 476 | } else { |
||
| 477 | ftp_Tell(550, "template [".$rename_src_template."] does not exists."); |
||
| 478 | $rename_src_path = ""; |
||
| 479 | } |
||
| 480 | |||
| 481 | } else if ($FTP->store->exists($rename_src_path)) { |
||
| 482 | ftp_Tell(350, "Object exists, supply destination name."); |
||
| 483 | } else { |
||
| 484 | ftp_Tell(550, "Object [".$rename_src_path."] does not exists."); |
||
| 485 | $rename_src_path = ""; |
||
| 486 | } |
||
| 487 | break; |
||
| 488 | |||
| 489 | case 'RNTO': |
||
| 490 | if ($rename_src_path) { |
||
| 491 | $rename_dest_path = $args; |
||
| 492 | ftp_TranslatePath($rename_dest_path, $rename_dest_listMode); |
||
| 493 | if ($rename_dest_listMode === $rename_src_listMode) { |
||
| 494 | if ($rename_dest_listMode === "templates") { |
||
| 495 | $temp = $args; |
||
| 496 | if ($temp[strlen($temp)-1] === "/") { |
||
| 497 | $rename_dest_template = $rename_src_template; |
||
|
0 ignored issues
–
show
The variable
$rename_src_template does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 498 | } else { |
||
| 499 | ftp_TranslateTemplate($rename_dest_path, $rename_dest_template); |
||
| 500 | } |
||
| 501 | $do_move = $FTP->store->exists($rename_dest_path); |
||
| 502 | } else { |
||
| 503 | if ($FTP->store->exists($rename_dest_path)) { |
||
| 504 | $parent = $FTP->store->make_path($rename_src_path, ".."); |
||
|
0 ignored issues
–
show
The variable
$rename_src_path does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 505 | $file = substr($rename_src_path, strlen($parent)); |
||
| 506 | $rename_dest_path.=$file; |
||
| 507 | } |
||
| 508 | $do_move = !$FTP->store->exists($rename_dest_path); |
||
| 509 | } |
||
| 510 | |||
| 511 | if ($do_move) { |
||
| 512 | debug("ftp::RENAME ($rename_src_path, $rename_dest_path, ".$rename_src_listMode.", $rename_src_template, $rename_dest_template)"); |
||
|
0 ignored issues
–
show
The variable
$rename_src_listMode does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
The variable
$rename_dest_template does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 513 | $FTP->store->call("ftp.".$rename_src_listMode.".rename.phtml", |
||
| 514 | array( |
||
| 515 | "source" => $rename_src_path, |
||
| 516 | "target" => $rename_dest_path, |
||
| 517 | "source_template" => $rename_src_template, |
||
| 518 | "target_template" => $rename_dest_template |
||
| 519 | ), |
||
| 520 | $FTP->store->get($rename_src_path)); |
||
| 521 | |||
| 522 | View Code Duplication | if ($ARCurrent->ftp_error) { |
|
| 523 | ftp_Tell(550, $ARCurrent->ftp_error); |
||
| 524 | unset($ARCurrent->ftp_error); |
||
| 525 | } else { |
||
| 526 | ftp_Tell(250, "Rename successfull."); |
||
| 527 | } |
||
| 528 | $rename_src_path = ""; |
||
| 529 | } else { |
||
| 530 | ftp_Tell(550, "Object [".$args."] does already exist."); |
||
| 531 | } |
||
| 532 | } else { |
||
| 533 | ftp_Tell(550, "Moving objects between different modeses is not supported (yet)."); |
||
| 534 | } |
||
| 535 | } else { |
||
| 536 | ftp_Tell(550, "Expected RNFR"); |
||
| 537 | } |
||
| 538 | break; |
||
| 539 | |||
| 540 | case 'RETR': |
||
| 541 | $path=$args; |
||
| 542 | ftp_TranslatePath($path, $listMode); |
||
| 543 | switch ($listMode) { |
||
| 544 | case "templates": |
||
| 545 | ftp_TranslateTemplate($path, $template); |
||
| 546 | $getmode = "templates"; |
||
| 547 | |||
| 548 | $result = current( |
||
| 549 | $FTP->store->call("ftp.template.exists.phtml", |
||
| 550 | array("arRequestedTemplate" => $template), |
||
| 551 | $FTP->store->get($path))); |
||
| 552 | $file_size = $result["size"]; |
||
| 553 | break; |
||
| 554 | default: |
||
| 555 | $file_size = current( |
||
| 556 | $FTP->store->call("ftp.files.size.phtml", "", |
||
| 557 | $FTP->store->get($path))); |
||
| 558 | $getmode = "files"; |
||
| 559 | break; |
||
| 560 | } |
||
| 561 | |||
| 562 | debug("ftp: opening $path / template $template"); |
||
|
0 ignored issues
–
show
The variable
$template does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 563 | |||
| 564 | if (ftp_OpenDC()!==false) { |
||
| 565 | if ($FTP->store->exists($path)) { |
||
| 566 | |||
| 567 | $file_size -= $FTP->resume; |
||
| 568 | ftp_Tell(150, "Opening ".(($FTP->DC["type"]==="A") ? 'ASCII' : 'BINARY')." mode data connection for $args ($file_size bytes)"); |
||
| 569 | $FTP->store->call("ftp.$getmode.get.phtml", array("arRequestedTemplate" => $template), |
||
| 570 | $FTP->store->get($path)); |
||
| 571 | debug("ftp::get::going to close dc"); |
||
| 572 | ftp_CloseDC(); |
||
| 573 | debug("ftp::get::dc closed"); |
||
| 574 | ftp_Tell(226, "Transfer complete"); |
||
| 575 | } else { |
||
| 576 | ftp_CloseDC(); |
||
| 577 | ftp_Tell(550, "$file does not exist"); |
||
|
0 ignored issues
–
show
The variable
$file does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 578 | } |
||
| 579 | } |
||
| 580 | break; |
||
| 581 | |||
| 582 | case 'NLST': |
||
| 583 | case 'LIST': |
||
| 584 | $args = chop($args); |
||
| 585 | // only use the last word (some clients issue LIST -l [filename]) |
||
| 586 | $args=preg_replace('/(-[^[:space:]]+)?[[:space:]]*([^[:space:]]*)$/', '\2', $args); |
||
| 587 | debug("LIST ARGS($args)"); |
||
| 588 | $path = $args; |
||
| 589 | ftp_TranslatePath($path, $listMode); |
||
| 590 | debug("ftp: LIST path=$path, mode=$listMode"); |
||
| 591 | if ($FTP->store->exists($path)) { |
||
| 592 | |||
| 593 | ftp_Tell(150, "Opening ".(($FTP->DC["type"]==="A") ? 'ASCII' : 'BINARY')." mode data connection"); |
||
| 594 | if (ftp_OpenDC()!==false) { |
||
| 595 | $mode = array(); |
||
| 596 | debug("ftp: listing ($path) ($listMode)"); |
||
| 597 | |||
| 598 | if ($FTP->symlinkListModes) { |
||
| 599 | View Code Duplication | if ($listMode!=="files") { |
|
| 600 | $mode["filename"]=SPCHL."files".SPCHR; |
||
| 601 | $mode["date"]=time(); |
||
| 602 | if ($FTP->cwd!=="/") { |
||
| 603 | $mode["type"]="shortcut"; |
||
| 604 | $mode["target"]=$FTP->cwd; |
||
| 605 | if ($FTP->defaultListMode!="files") { |
||
| 606 | $mode["target"]="/".SPCHL."files".SPCHR.$mode["target"]; |
||
| 607 | } |
||
| 608 | } else { |
||
| 609 | $mode["type"]="dir"; |
||
| 610 | } |
||
| 611 | $mode["size"]=0; |
||
| 612 | $mode["grants"]["read"]=true; |
||
| 613 | |||
| 614 | if ($cmd!=="NLST") { |
||
| 615 | $data=ftp_GenListEntry($mode); |
||
| 616 | echo "$data"; |
||
| 617 | } else { |
||
| 618 | echo $mode["filename"]."\n"; |
||
| 619 | } |
||
| 620 | } |
||
| 621 | |||
| 622 | View Code Duplication | if ($listMode!=="templates") { |
|
| 623 | $mode["filename"]=SPCHL."templates".SPCHR; |
||
| 624 | $mode["date"]=time(); |
||
| 625 | if ($FTP->cwd!=="/") { |
||
| 626 | $mode["type"]="shortcut"; |
||
| 627 | $mode["target"]=$FTP->cwd; |
||
| 628 | if ($FTP->defaultListMode!="templates") { |
||
| 629 | $mode["target"]="/".SPCHL."templates".SPCHR.$mode["target"]; |
||
| 630 | } |
||
| 631 | } else { |
||
| 632 | $mode["type"]="dir"; |
||
| 633 | } |
||
| 634 | $mode["size"]=0; |
||
| 635 | $mode["grants"]["read"]=true; |
||
| 636 | if ($cmd!=="NLST") { |
||
| 637 | $data=ftp_GenListEntry($mode); |
||
| 638 | echo "$data"; |
||
| 639 | } else { |
||
| 640 | echo $mode["filename"]."\n"; |
||
| 641 | } |
||
| 642 | } |
||
| 643 | |||
| 644 | View Code Duplication | if ($listMode!=="objects") { |
|
| 645 | $mode["filename"]=SPCHL."objects".SPCHR; |
||
| 646 | $mode["date"]=time(); |
||
| 647 | $mode["size"]=0; |
||
| 648 | $mode["grants"]["read"]=true; |
||
| 649 | if ($FTP->cwd!=="/") { |
||
| 650 | $mode["type"]="shortcut"; |
||
| 651 | $mode["target"]=$FTP->cwd; |
||
| 652 | if ($FTP->defaultListMode!="objects") { |
||
| 653 | $mode["target"]="/".SPCHL."objects".SPCHR.$mode["target"]; |
||
| 654 | } |
||
| 655 | } else { |
||
| 656 | $mode["type"]="dir"; |
||
| 657 | } |
||
| 658 | if ($cmd!=="NLST") { |
||
| 659 | $data=ftp_GenListEntry($mode); |
||
| 660 | echo "$data"; |
||
| 661 | } else { |
||
| 662 | echo $mode["filename"]."\n"; |
||
| 663 | } |
||
| 664 | } |
||
| 665 | } |
||
| 666 | $template="ftp.".$listMode.".list.phtml"; |
||
| 667 | $result=current($FTP->store->call($template, "", |
||
| 668 | $FTP->store->get($path))); |
||
| 669 | |||
| 670 | debug("ftp: results(".sizeof($result).")"); |
||
| 671 | @reset($result); |
||
| 672 | foreach ( $result as $entry ) { |
||
| 673 | debug("ftp: file path = (".$entry["path"].")"); |
||
| 674 | View Code Duplication | if ($cmd!=="NLST") { |
|
| 675 | $data=ftp_GenListEntry($entry); |
||
| 676 | echo "$data"; |
||
| 677 | } else { |
||
| 678 | $parent = $FTP->store->make_path($entry["path"], ".."); |
||
| 679 | $filename = $entry["path"] ? substr($entry["path"], strlen($parent), -1) : $entry["filename"]; |
||
| 680 | debug("ftp::nlst ".$filename); |
||
| 681 | echo $filename."\n"; |
||
| 682 | } |
||
| 683 | } |
||
| 684 | |||
| 685 | ftp_CloseDC(); |
||
| 686 | ftp_Tell(226, "Transfer complete"); |
||
| 687 | } else { |
||
| 688 | ftp_Tell(550, "Could not connect to client"); |
||
| 689 | debug("ftp: could not connect"); |
||
| 690 | } |
||
| 691 | } else { |
||
| 692 | ftp_TranslateTemplate($path, $template); |
||
| 693 | debug("ftp::list maybe it's a template? ($path, $template)"); |
||
| 694 | $result = current($FTP->store->call("ftp.template.exists.phtml", |
||
| 695 | array("arRequestedTemplate" => $template), |
||
| 696 | $FTP->store->get($path))); |
||
| 697 | |||
| 698 | if (is_array($result)) { |
||
| 699 | ftp_Tell(150, "Opening ".(($FTP->DC["type"]==="A") ? 'ASCII' : 'BINARY')." mode data connection"); |
||
| 700 | if (ftp_OpenDC()!==false) { |
||
| 701 | View Code Duplication | if ($cmd!=="NLST") { |
|
| 702 | echo ftp_GenListEntry($result); |
||
| 703 | } else { |
||
| 704 | $parent = $FTP->store->make_path($result["path"], ".."); |
||
| 705 | $filename = $result["path"] ? substr($result["path"], strlen($parent), -1) : $result["filename"]; |
||
| 706 | debug("ftp::nlst ".$filename); |
||
| 707 | echo $filename."\n"; |
||
| 708 | } |
||
| 709 | ftp_CloseDC(); |
||
| 710 | ftp_Tell(226, "Transfer complete"); |
||
| 711 | } else { |
||
| 712 | ftp_Tell(550, "Could not connect to client"); |
||
| 713 | debug("ftp: could not connect"); |
||
| 714 | } |
||
| 715 | } else { |
||
| 716 | ftp_Tell(550, "Directory not found"); |
||
| 717 | } |
||
| 718 | } |
||
| 719 | break; |
||
| 720 | |||
| 721 | case 'RMD': |
||
| 722 | case 'RMDIR': |
||
| 723 | case 'DELE': |
||
| 724 | $target = $args; |
||
| 725 | ftp_TranslatePath($target, $listMode); |
||
| 726 | |||
| 727 | debug("ftp: removing $target"); |
||
| 728 | if ($listMode==="templates") { |
||
| 729 | $path = $FTP->store->make_path($target, ".."); |
||
| 730 | $template = substr($target, strlen($path), -1); |
||
| 731 | debug("ftp: removing template ($path) ($template)"); |
||
| 732 | $FTP->store->call("ftp.templates.delete.phtml", array("template" => $template), |
||
| 733 | $FTP->store->get($path)); |
||
| 734 | |||
| 735 | ftp_Tell(250, "$template removed"); |
||
| 736 | } else if ($FTP->store->exists($target)) { |
||
| 737 | debug("ftp::delete ($target) ftp.$listMode.delete.phtml"); |
||
| 738 | $FTP->store->call("ftp.$listMode.delete.phtml", "", |
||
| 739 | $FTP->store->get($target)); |
||
| 740 | |||
| 741 | View Code Duplication | if ($ARCurrent->ftp_error) { |
|
| 742 | ftp_Tell(550, $ARCurrent->ftp_error); |
||
| 743 | unset($ARCurrent->ftp_error); |
||
| 744 | } else { |
||
| 745 | ftp_Tell(250, "$target removed"); |
||
| 746 | } |
||
| 747 | } else { |
||
| 748 | ftp_Tell(550, "$target does not exist"); |
||
| 749 | } |
||
| 750 | break; |
||
| 751 | |||
| 752 | case 'STOR': |
||
| 753 | $target = $args; |
||
| 754 | ftp_TranslatePath($target, $listMode); |
||
| 755 | $path = $FTP->store->make_path($target, ".."); |
||
| 756 | |||
| 757 | ftp_Tell(150, "Opening ".(($FTP->DC["type"]==="A") ? 'ASCII' : 'BINARY')." mode data connection"); |
||
| 758 | debug("ftp: client wants to store file ($target)"); |
||
| 759 | preg_match('|^/(.*/)?[^./]*[.]([^./]+)/$|i', $target, $regs); |
||
| 760 | $ext = $regs[2]; |
||
| 761 | if (ftp_OpenDC()) { |
||
| 762 | $tempfile=tempnam($FTP->store->get_config('files')."temp/", "upload"); |
||
| 763 | debug("tempfile: '$tempfile' ext: '$ext'"); |
||
| 764 | $tempfile.=$ext; |
||
| 765 | $fp=fopen($tempfile, "wb"); |
||
| 766 | $fileinfo = array(); |
||
| 767 | if ($fp) { |
||
| 768 | $fileinfo["tmp_name"]=$tempfile; |
||
| 769 | if ($listMode === "templates") { |
||
| 770 | ftp_TranslateTemplate($target, $template); |
||
| 771 | $fileinfo["name"]=preg_replace('/[^.a-z0-9_-]/i', '_', $template); |
||
| 772 | |||
| 773 | debug("ftp: writing to $tempfile\n"); |
||
| 774 | if ($FTP->resume) { |
||
| 775 | debug("ftp::store resuming file at $FTP->resume"); |
||
| 776 | ob_start(); |
||
| 777 | $FTP->store->call("ftp.$listMode.get.phtml", array("arRequestedTemplate" => $template), |
||
| 778 | $FTP->store->get($target)); |
||
| 779 | $data=ob_get_contents(); |
||
| 780 | fwrite($fp, substr($data, 0, $FTP->resume)); |
||
| 781 | ob_end_clean(); |
||
| 782 | } |
||
| 783 | while (($data=ftp_ReadDC())) { |
||
| 784 | fwrite($fp, $data); |
||
| 785 | } |
||
| 786 | fclose($fp); |
||
| 787 | ftp_CloseDC(); |
||
| 788 | $fileinfo["type"]=get_mime_type($tempfile); |
||
| 789 | View Code Duplication | if (!$fileinfo["type"]) { |
|
| 790 | $fileinfo["type"]=get_mime_type($fileinfo["name"], MIME_EXT); |
||
| 791 | } |
||
| 792 | $fileinfo["size"]=filesize($tempfile); |
||
| 793 | |||
| 794 | debug("ftp: writing template to ($target$template)"); |
||
| 795 | $FTP->store->call("ftp.templates.save.phtml", array("file" => $fileinfo), |
||
| 796 | $FTP->store->get($target)); |
||
| 797 | } else { |
||
| 798 | $file=substr($target, strlen($path), -1); |
||
| 799 | $fileinfo["name"]=preg_replace('/[^.a-z0-9_-]/i', '_', $file); |
||
| 800 | if ($FTP->store->exists($target)) { |
||
| 801 | debug("ftp::store updating $target"); |
||
| 802 | debug("ftp: writing to $tempfile\n"); |
||
| 803 | if ($FTP->resume) { |
||
| 804 | debug("ftp::store resuming file at $FTP->resume"); |
||
| 805 | ob_start(); |
||
| 806 | $FTP->store->call("ftp.$listMode.get.phtml", "", |
||
| 807 | $FTP->store->get($target)); |
||
| 808 | $data=ob_get_contents(); |
||
| 809 | debug("ftp::store resume pre-read ".strlen($data)); |
||
| 810 | fwrite($fp, substr($data, 0, $FTP->resume)); |
||
| 811 | ob_end_clean(); |
||
| 812 | } |
||
| 813 | while (($data=ftp_ReadDC())) { |
||
| 814 | fwrite($fp, $data); |
||
| 815 | } |
||
| 816 | fclose($fp); |
||
| 817 | ftp_CloseDC(); |
||
| 818 | |||
| 819 | $fileinfo["type"]=get_mime_type($tempfile); |
||
| 820 | View Code Duplication | if (!$fileinfo["type"]) { |
|
| 821 | $fileinfo["type"]=get_mime_type($fileinfo["name"], MIME_EXT); |
||
| 822 | } |
||
| 823 | $fileinfo["size"]=filesize($tempfile); |
||
| 824 | debug("ftp::store total size of fileupload is: ".$fileinfo["size"]); |
||
| 825 | // if $target already exists |
||
| 826 | $FTP->store->call("ftp.$listMode.save.phtml", array("file" => $fileinfo), |
||
| 827 | $FTP->store->get($target)); |
||
| 828 | } else { |
||
| 829 | debug("ftp::store storing $target"); |
||
| 830 | debug("ftp: writing to $tempfile\n"); |
||
| 831 | while (($data=ftp_ReadDC())) { |
||
| 832 | fwrite($fp, $data); |
||
| 833 | } |
||
| 834 | fclose($fp); |
||
| 835 | ftp_CloseDC(); |
||
| 836 | |||
| 837 | $fileinfo["type"]=get_mime_type($tempfile); |
||
| 838 | View Code Duplication | if (!$fileinfo["type"]) { |
|
| 839 | $fileinfo["type"]=get_mime_type($fileinfo["name"], MIME_EXT); |
||
| 840 | } |
||
| 841 | $fileinfo["size"]=filesize($tempfile); |
||
| 842 | |||
| 843 | $FTP->store->call("ftp.$listMode.save.new.phtml", array("file" => $fileinfo), |
||
| 844 | $FTP->store->get($path)); |
||
| 845 | } |
||
| 846 | } |
||
| 847 | if (file_exists($tempfile)) { |
||
| 848 | @unlink($tempfile); |
||
| 849 | } |
||
| 850 | |||
| 851 | } else { |
||
| 852 | debug("ftp: could not write to $filename\n"); |
||
|
0 ignored issues
–
show
The variable
$filename does not seem to be defined for all execution paths leading up to this point.
If you define a variable conditionally, it can happen that it is not defined for all execution paths. Let’s take a look at an example: function myFunction($a) {
switch ($a) {
case 'foo':
$x = 1;
break;
case 'bar':
$x = 2;
break;
}
// $x is potentially undefined here.
echo $x;
}
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined. Available Fixes
Loading history...
|
|||
| 853 | } |
||
| 854 | |||
| 855 | if ($ARCurrent->ftp_error) { |
||
| 856 | ftp_Tell(550, $ARCurrent->ftp_error); |
||
| 857 | unset($ARCurrent->ftp_error); |
||
| 858 | } else { |
||
| 859 | ftp_Tell(226, "Transfer complete (".$fileinfo["name"].")"); |
||
| 860 | } |
||
| 861 | } else { |
||
| 862 | debug("ftp: error connecting to client"); |
||
| 863 | ftp_Tell(550, "Could not establish a connection"); |
||
| 864 | } |
||
| 865 | break; |
||
| 866 | |||
| 867 | case 'MKD': |
||
| 868 | $path_requested = $args; |
||
| 869 | $path=preg_replace("|/".ESPCHL.'[^/]*'.ESPCHR."/|", "/", $args); |
||
| 870 | preg_match('|^(.*[/])?(.*)$|i', $path, $regs); |
||
| 871 | $arNewFilename=preg_replace('/[^.a-z0-9_-]/i', '_', $regs[2]); |
||
| 872 | |||
| 873 | $path=$FTP->site.$FTP->store->make_path($FTP->cwd, $path); |
||
| 874 | $parent=$FTP->store->make_path($path, ".."); |
||
| 875 | |||
| 876 | debug("ftp: mkdir: name = '$arNewFilename' path = '$path' parent = '$parent'"); |
||
| 877 | |||
| 878 | if ($FTP->store->exists($parent)) { |
||
| 879 | if (!$FTP->store->exists($path)) { |
||
| 880 | $FTP->store->call("ftp.mkdir.phtml", array("arNewFilename" => $arNewFilename), |
||
| 881 | $FTP->store->get($parent)); |
||
| 882 | } else { |
||
| 883 | $ARCurrent->ftp_error="Directory already exists"; |
||
| 884 | } |
||
| 885 | } else { |
||
| 886 | $ARCurrent->ftp_error="Could not find path $parent"; |
||
| 887 | } |
||
| 888 | |||
| 889 | View Code Duplication | if ($ARCurrent->ftp_error) { |
|
| 890 | ftp_Tell(550, $ARCurrent->ftp_error); |
||
| 891 | unset($ARCurrent->ftp_error); |
||
| 892 | } else { |
||
| 893 | ftp_Tell(257, "\"$path_requested\" - Directory successfully created."); |
||
| 894 | } |
||
| 895 | break; |
||
| 896 | |||
| 897 | case 'SYST': |
||
| 898 | ftp_Tell(215, "UNIX Type: L8"); |
||
| 899 | break; |
||
| 900 | |||
| 901 | case 'NOOP': |
||
| 902 | ftp_Tell(200, "NOOP command successful"); |
||
| 903 | break; |
||
| 904 | |||
| 905 | case 'USER': |
||
| 906 | case 'PASS': |
||
| 907 | ftp_Tell(530, "User '$FTP->user' already logged in"); |
||
| 908 | break; |
||
| 909 | |||
| 910 | default: |
||
| 911 | ftp_Tell(500, "Function $cmd not implemented (yet)."); |
||
| 912 | break; |
||
| 913 | } |
||
| 914 | $last_cmd = $cmd; |
||
| 915 | } |
||
| 916 | } |
||
| 917 | |||
| 918 | function ftp_CheckLogin() { |
||
| 919 | global $FTP, $AR, $ARLogin, $ARPassword; |
||
| 920 | |||
| 921 | while (!$AR->user) { |
||
| 922 | ftp_FetchCMD($cmd, $args); |
||
| 923 | if ($cmd==="USER") { |
||
| 924 | $login=$args; |
||
| 925 | ftp_Tell(331, "Password required for '$login'"); |
||
| 926 | ftp_FetchCMD($cmd, $args); |
||
| 927 | if ($cmd=="PASS") { |
||
| 928 | $password=$args; |
||
| 929 | debug("ftp: auth ($login, $password)"); |
||
| 930 | |||
| 931 | $criteria="object.implements = 'puser'"; |
||
| 932 | $criteria.=" and login.value = '".AddSlashes($login)."'"; |
||
| 933 | $user=$FTP->store->call("system.get.phtml", "", |
||
| 934 | $FTP->store->find("/system/users/", |
||
| 935 | $criteria)); |
||
| 936 | $user=$user[0]; |
||
| 937 | |||
| 938 | if ($user) { |
||
| 939 | debug("ftp: found user"); |
||
| 940 | $ARLogin=$login; |
||
| 941 | $ARPassword=$password; |
||
| 942 | |||
| 943 | if ($user->CheckPassword($password)) { |
||
| 944 | $AR->user=$user; |
||
| 945 | if ($user->data->login!="admin") { |
||
| 946 | $AR->user->grants[$AR->user->path]=$AR->user->GetValidGrants(); |
||
| 947 | } |
||
| 948 | |||
| 949 | $siteroot = current($FTP->store->call("system.get.phtml", "", $FTP->store->get($FTP->site."/"))); |
||
| 950 | |||
| 951 | if ($AR->user->data->login==="admin" || $siteroot->CheckLogin("ftp")) { |
||
| 952 | $FTP->cwd="/"; |
||
| 953 | $FTP->user=$login; |
||
| 954 | } else { |
||
| 955 | ftp_Tell(530, "Login incorrect: (site) permission denied"); |
||
| 956 | unset($user); |
||
| 957 | unset($AR->user); |
||
| 958 | } |
||
| 959 | |||
| 960 | } else { |
||
| 961 | ftp_Tell(530, "Login incorrect: password incorrect"); |
||
| 962 | } |
||
| 963 | } else { |
||
| 964 | ftp_Tell(530, "Login incorrect: user '$login' not found "); |
||
| 965 | } |
||
| 966 | } else { |
||
| 967 | ftp_Tell(530, "Please login with USER and PASS."); |
||
| 968 | } |
||
| 969 | } else { |
||
| 970 | ftp_Tell(530, "Please login with USER and PASS."); |
||
| 971 | } |
||
| 972 | } |
||
| 973 | ftp_Tell(230, "User '".$FTP->user."' logged in at $FTP->cwd "); |
||
| 974 | } |
||
| 975 | |||
| 976 | function ftp_FetchCMD(&$cmd, &$args) { |
||
| 977 | global $FTP; |
||
| 978 | $cmd = ""; |
||
| 979 | do { |
||
| 980 | $data=fgets($FTP->stdin, 2000); |
||
| 981 | debug("ftp: client:: '$data'"); |
||
| 982 | if (preg_match('/^([a-z]+)([[:space:]]+(.*))?/i', $data, $regs)) { |
||
| 983 | $cmd=strtoupper($regs[1]); |
||
| 984 | $args=chop($regs[3]); |
||
| 985 | debug("ftp: cmd ($cmd) arg ($args)"); |
||
| 986 | } |
||
| 987 | } while (!$cmd); |
||
| 988 | return $cmd; |
||
| 989 | } |
||
| 990 | |||
| 991 | function ftp_Tell($code, $msg) { |
||
| 992 | global $FTP; |
||
| 993 | if (is_array($msg)) { |
||
| 994 | fputs($FTP->stdout, "$code-".$msg[0]."\n"); |
||
| 995 | next($msg); |
||
| 996 | while (list(,$line)=each($msg)) { |
||
| 997 | fputs($FTP->stdout, $line."\r\n"); |
||
| 998 | debug($line); |
||
| 999 | } |
||
| 1000 | } else { |
||
| 1001 | fputs($FTP->stdout, "$code $msg\n"); |
||
| 1002 | debug("$code $msg\n"); |
||
| 1003 | } |
||
| 1004 | fflush($FTP->stdout); |
||
| 1005 | } |
||
| 1006 | |||
| 1007 | function ftp_GenListEntry($entry) { |
||
| 1008 | global $AR; |
||
| 1009 | |||
| 1010 | $user=$AR->user->data->login; |
||
| 1011 | $grants=$entry["grants"]; |
||
| 1012 | |||
| 1013 | if ($entry["filename"]) { |
||
| 1014 | $file=$entry["filename"]; |
||
| 1015 | } else { |
||
| 1016 | $file=substr($entry["path"], strrpos(substr($entry["path"], 0, -1), "/")+1); |
||
| 1017 | } |
||
| 1018 | |||
| 1019 | if ($entry["type"]==="dir") { |
||
| 1020 | $data.="d"; |
||
|
0 ignored issues
–
show
|
|||
| 1021 | View Code Duplication | if ($file[strlen($file)-1]==='/') { |
|
| 1022 | $file=substr($file, 0, -1); |
||
| 1023 | } |
||
| 1024 | } else if ($entry["type"]==="shortcut") { |
||
| 1025 | $data.="l"; |
||
| 1026 | View Code Duplication | if ($file[strlen($file)-1]==='/') { |
|
| 1027 | $file=substr($file, 0, -1); |
||
| 1028 | } |
||
| 1029 | $file=$file." -> "; |
||
| 1030 | $file.=$entry["target"]; |
||
| 1031 | } else if ($entry["type"]==="template") { |
||
| 1032 | $data.="-"; |
||
| 1033 | } else { |
||
| 1034 | $data.="-"; |
||
| 1035 | $file=substr($file, 0, -1); |
||
| 1036 | } |
||
| 1037 | |||
| 1038 | if ($grants["read"]) { |
||
| 1039 | $data.="r"; |
||
| 1040 | } else { |
||
| 1041 | $data.="-"; |
||
| 1042 | } |
||
| 1043 | if ($grants["write"]) { |
||
| 1044 | |||
| 1045 | $data.="w"; |
||
| 1046 | } else { |
||
| 1047 | $data.="-"; |
||
| 1048 | } |
||
| 1049 | if (($entry["type"]==="dir" || $entry["type"]==="shortcut") && $grants["read"]) { |
||
| 1050 | $data.="x"; |
||
| 1051 | } else { |
||
| 1052 | $data.="-"; |
||
| 1053 | } |
||
| 1054 | |||
| 1055 | // 'group' grants are identical to user grants |
||
| 1056 | // and we don't give public any grants |
||
| 1057 | $data.=substr($data, 1); |
||
| 1058 | $data.="---"; |
||
| 1059 | |||
| 1060 | $data.=" 1 "; // we just say this directory contains 1 child |
||
| 1061 | |||
| 1062 | $user = substr($user, 0, 9); |
||
| 1063 | $userentry = $user.substr(" ", strlen($user)); |
||
| 1064 | $data.=$userentry.$userentry; |
||
| 1065 | |||
| 1066 | $size = substr($entry["size"], 0, 8); |
||
| 1067 | $sizeentry = substr(" ", strlen($size)).$size; |
||
| 1068 | $data.=$sizeentry; |
||
| 1069 | |||
| 1070 | $date=substr(date("M d h:i", $entry["date"]), 0, 12); |
||
| 1071 | $dateentry = substr(" ", strlen($date)).$date; |
||
| 1072 | $data.=" ".$dateentry; |
||
| 1073 | |||
| 1074 | $data.=" ".$file; |
||
| 1075 | |||
| 1076 | $data.="\n"; |
||
| 1077 | debug($data); |
||
| 1078 | return $data; |
||
| 1079 | } |
||
| 1080 | |||
| 1081 | |||
| 1082 | // debugon("pinp"); |
||
| 1083 | |||
| 1084 | // set PHP error handling |
||
| 1085 | error_reporting(1); |
||
| 1086 | set_error_handler("ftp_ErrorHandler"); |
||
| 1087 | error_reporting(1); |
||
| 1088 | set_time_limit(0); |
||
| 1089 | |||
| 1090 | $FTP = new stdClass; |
||
| 1091 | $inst_store = $store_config["dbms"]."store"; |
||
| 1092 | $store=new $inst_store("", $store_config); |
||
| 1093 | |||
| 1094 | // fill in your own server ip number: |
||
| 1095 | $FTP->server_ip = $ftp_config["server_ip"]; |
||
| 1096 | $FTP->host = $ftp_config["site"]; |
||
| 1097 | $FTP->store = &$store; |
||
| 1098 | // default listMode ( files, objects or templates ) |
||
| 1099 | $listMode = $ftp_config["defaultListMode"]; |
||
| 1100 | if (!$listMode) { |
||
| 1101 | $listMode = "files"; |
||
| 1102 | } |
||
| 1103 | $FTP->defaultListMode = $listMode; |
||
| 1104 | $FTP->symlinkListModes = $ftp_config["symlinkListModes"]; |
||
| 1105 | |||
| 1106 | // default type is ASCII |
||
| 1107 | $FTP->DC["type"] = "A"; |
||
| 1108 | |||
| 1109 | ob_start("debug"); |
||
| 1110 | $FTP->stdin=fopen("php://stdin", "r"); |
||
| 1111 | if ($FTP->stdin) { |
||
| 1112 | $FTP->stdout=fopen("php://stdout", "w"); |
||
| 1113 | if ($FTP->stdout) { |
||
| 1114 | |||
| 1115 | $FTP->site=substr($ftp_config["root"],0, -1); |
||
| 1116 | $FTP->cwd="/"; |
||
| 1117 | ftp_Tell(220, $ftp_config["greeting"]); |
||
| 1118 | |||
| 1119 | ftp_CheckLogin(); |
||
| 1120 | ftp_Run(); |
||
| 1121 | |||
| 1122 | } else { |
||
| 1123 | fclose($FTP->stdin); |
||
| 1124 | $FTP->error="Could not open stdout"; |
||
| 1125 | } |
||
| 1126 | } else { |
||
| 1127 | $FTP->error="Could not open stdin"; |
||
| 1128 | } |
||
| 1129 |
If you define a variable conditionally, it can happen that it is not defined for all execution paths.
Let’s take a look at an example:
In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.
Available Fixes
Check for existence of the variable explicitly:
Define a default value for the variable:
Add a value for the missing path: