dav.php (3287B)
1 <?php 2 3 /** 4 * WebDAV für OpenRat Content Management System<br> 5 * 6 * Das virtuelle Ordnersystem dieses CMS kann ueber das WebDAV-Protokoll 7 * dargestellt werden. 8 * 9 * Diese Klasse nimmt die Anfragen von WebDAV-Clients entgegen, zerlegt die 10 * Anfrage und erzeugt eine Antwort, die im HTTP-Body zurueck uebertragen 11 * wird. 12 * <br> 13 * WebDAV ist spezifiziert in der RFC 2518.<br> 14 * Siehe <code>http://www.ietf.org/rfc/rfc2518.txt</code><br> 15 * 16 * Implementiert wird DAV-Level 1 (d.h. ohne LOCK). 17 * 18 * Der Zugang über WebDAV beinhaltet einige Nachteile: 19 * - Login ist nur mit Name/Kennwort möglich (kein OpenId) 20 * - Nur die Standard-Datenbank kann verwendet werden 21 * - Der Client muss Cookies unterstützen 22 * 23 * @author Jan Dankert 24 * @package openrat.actions 25 */ 26 27 28 29 if (!defined('E_STRICT')) 30 define('E_STRICT', 2048); 31 32 define('TIME_20000101',946681200); 33 34 35 $config = array('dav.enable' => false, 36 'dav.create' => true, 37 'dav.readonly' => false, 38 'dav.expose_openrat' => true, 39 'dav.compliant_to_redmond' => true, 40 'dav.realm' =>'OpenRat CMS WebDAV Login', 41 'dav.anonymous' => false, 42 'cms.host' => 'localhost', 43 'cms.port' => 80, 44 'cms.username' => null, 45 'cms.password' => null, 46 'cms.database' => 'db1', 47 'cms.path' => '/', 48 'cms.max_file_size' => 1000, 49 'log.level' => 'info', 50 'log.file' => null 51 ); 52 53 foreach( array( 'dav-'.$_SERVER['HTTP_HOST'].'.ini', 54 'dav-custom.ini', 55 'dav.ini') as $iniFile ) 56 if ( is_file($iniFile)) 57 $config = array_merge($config,parse_ini_file( $iniFile) ); 58 59 60 require('Logger.class.php'); 61 require('Client.class.php'); 62 require('CMS.class.php'); 63 require('WebDAV.class.php'); 64 65 //Logger::info( print_r($config,true)); 66 67 68 69 // PHP-Fehler ins Log schreiben, damit die Ausgabe nicht zerstoert wird. 70 if (version_compare(PHP_VERSION, '5.0.0', '>')) 71 set_error_handler('webdavErrorHandler',E_ERROR | E_WARNING); 72 else 73 set_error_handler('webdavErrorHandler'); 74 75 76 $dav = new WebDAV(); 77 78 $httpMethod = strtoupper($_SERVER['REQUEST_METHOD']); 79 $davMethodName = 'dav'.$httpMethod; 80 81 $dav->$davMethodName(); 82 83 84 /** 85 * Fehler-Handler fuer WEBDAV.<br> 86 * Bei einem Laufzeitfehler ist eine Ausgabe des Fehlers auf der Standardausgabe sinnlos, 87 * da der WebDAV-Client dies nicht lesen oder erkennen kann. 88 * Daher wird der Fehler-Handler umgebogen, so dass nur ein Logeintrag sowie ein 89 * Server-Fehler erzeugt wird. 90 */ 91 function webdavErrorHandler($errno, $errstr, $errfile, $errline) 92 { 93 error_log('WEBDAV ERROR: '.$errno.'/'.$errstr.'/file:'.$errfile.'/line:'.$errline); 94 95 96 header('HTTP/1.1 503 Internal WebDAV Server Error'); 97 98 // Wir teilen dem Client mit, dass auf dem Server was schief gelaufen ist. 99 echo 'WebDAV-Request failed with "'.$errstr.'"'; 100 exit; 101 } 102 103 104 105 ?>