Fixed bug #10454: t3lib_div::makeInstanceClassName() allows to bypass checks for...
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_svbase.php
index 2d79dbf..b6c29af 100755 (executable)
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the Typo3 project. The Typo3 project is
  * $Id$
  * TODO: temp files are not removed
  *
- * @author     René Fritz <r.fritz@colorcube.de>
+ * @author     Rene Fritz <r.fritz@colorcube.de>
  */
 /**
  * [CLASS/FUNCTION INDEX of SCRIPT]
  *
  *
  *
- *  127: class t3lib_svbase
+ *  125: class t3lib_svbase
  *
  *              SECTION: Get service meta information
  *  191:     function getServiceInfo()
- *  199:     function getServiceKey()
- *  207:     function getServiceTitle()
- *  220:     function getServiceOption($optionName, $defaultValue='', $includeDefaultConfig=TRUE)
+ *  201:     function getServiceKey()
+ *  211:     function getServiceTitle()
+ *  224:     function getServiceOption($optionName, $defaultValue='', $includeDefaultConfig=TRUE)
  *
  *              SECTION: Error handling
- *  255:     function devLog($msg, $severity=0, $dataVar=FALSE)
- *  269:     function errorPush($errNum=T3_ERR_SV_GENERAL, $errMsg='Unspecified error occured')
- *  284:     function errorPull()
- *  296:     function getLastError()
- *  311:     function getLastErrorMsg()
- *  326:     function getErrorMsgArray()
- *  344:     function getLastErrorArray()
- *  353:     function resetErrors()
+ *  259:     function devLog($msg, $severity=0, $dataVar=FALSE)
+ *  273:     function errorPush($errNum=T3_ERR_SV_GENERAL, $errMsg='Unspecified error occured')
+ *  288:     function errorPull()
+ *  300:     function getLastError()
+ *  315:     function getLastErrorMsg()
+ *  330:     function getErrorMsgArray()
+ *  348:     function getLastErrorArray()
+ *  357:     function resetErrors()
  *
  *              SECTION: General service functions
- *  373:     function checkExec($progList)
- *  395:     function deactivateService()
- *  401:     function available()
+ *  377:     function checkExec($progList)
+ *  401:     function deactivateService()
  *
  *              SECTION: IO tools
- *  439:     function checkInputFile ($absFile)
- *  460:     function readFile ($absFile, $length=0)
- *  485:     function writeFile ($content, $absFile='')
- *  511:     function tempFile ($filePrefix)
- *  529:     function registerTempFile ($absFile)
- *  539:     function unlinkTempFiles ()
+ *  427:     function checkInputFile ($absFile)
+ *  448:     function readFile ($absFile, $length=0)
+ *  473:     function writeFile ($content, $absFile='')
+ *  499:     function tempFile ($filePrefix)
+ *  517:     function registerTempFile ($absFile)
+ *  527:     function unlinkTempFiles ()
  *
  *              SECTION: IO input
- *  561:     function setInput ($content, $type='')
- *  575:     function setInputFile ($absFile, $type='')
- *  588:     function getInput ()
- *  603:     function getInputFile ($createFile='')
+ *  549:     function setInput ($content, $type='')
+ *  563:     function setInputFile ($absFile, $type='')
+ *  576:     function getInput ()
+ *  591:     function getInputFile ($createFile='')
  *
  *              SECTION: IO output
- *  628:     function setOutputFile ($absFile)
- *  638:     function getOutput ()
- *  652:     function getOutputFile ($absFile='')
+ *  616:     function setOutputFile ($absFile)
+ *  626:     function getOutput ()
+ *  640:     function getOutputFile ($absFile='')
  *
  *              SECTION: Service implementation
- *  676:     function init()
- *  700:     function reset()
- *  715:     function __destruct()
- *  721:     function process($content='', $type='', $conf=array())
+ *  664:     function init()
+ *  688:     function reset()
+ *  703:     function __destruct()
  *
- * TOTAL FUNCTIONS: 32
+ * TOTAL FUNCTIONS: 30
  * (This index is automatically created/updated by the extension "extdeveval")
  *
  */
@@ -120,11 +118,11 @@ require_once(PATH_t3lib.'class.t3lib_exec.php');
 /**
  * Parent class for "Services" classes
  *
- * @author     René Fritz <r.fritz@colorcube.de>
+ * @author     Rene Fritz <r.fritz@colorcube.de>
  * @package TYPO3
  * @subpackage t3lib
  */
-class t3lib_svbase {
+abstract class t3lib_svbase {
 
        /**
         * service description array
@@ -186,6 +184,8 @@ class t3lib_svbase {
 
 
        /**
+        * Returns internal information array for service
+        *
         * @return      array           service description array
         */
        function getServiceInfo() {
@@ -194,6 +194,8 @@ class t3lib_svbase {
 
 
        /**
+        * Returns the service key of the service
+        *
         * @return      string          service key
         */
        function getServiceKey() {
@@ -202,6 +204,8 @@ class t3lib_svbase {
 
 
        /**
+        * Returns the title of the service
+        *
         * @return      string          service title
         */
        function getServiceTitle() {
@@ -218,14 +222,12 @@ class t3lib_svbase {
         * @return      mixed           configuration value for the service
         */
        function getServiceOption($optionName, $defaultValue='', $includeDefaultConfig=TRUE) {
-               global $TYPO3_CONF_VARS;
-
                $config = NULL;
 
-               $svOptions = $TYPO3_CONF_VARS['SVCONF'][$this->info['serviceType']];
+               $svOptions = $GLOBALS['TYPO3_CONF_VARS']['SVCONF'][$this->info['serviceType']];
 
                if(isset($svOptions[$this->info['serviceKey']][$optionName])) {
-                       $config = $svOptions['default'][$optionName];
+                       $config = $svOptions[$this->info['serviceKey']][$optionName];
                } elseif($includeDefaultConfig AND isset($svOptions['default'][$optionName])) {
                        $config = $svOptions['default'][$optionName];
                }
@@ -269,7 +271,7 @@ class t3lib_svbase {
        function errorPush($errNum=T3_ERR_SV_GENERAL, $errMsg='Unspecified error occured') {
                array_push($this->error, array('nr'=>$errNum, 'msg'=>$errMsg));
 
-               if (is_object($GLOBALS["TT"])) {
+               if (is_object($GLOBALS['TT'])) {
                        $GLOBALS['TT']->setTSlogMessage($errMsg,2);
                }
 
@@ -397,29 +399,11 @@ class t3lib_svbase {
        }
 
 
-/**
-function available()   {
-       global $AB,$BE_USER,$LANG,$BACK_PATH,$TCA_DESCR,$TCA,$CLIENT,$TYPO3_CONF_VARS;
 
-       // check if the service is available at runtime
-       // the sense of this method is that the service might need some more information to check the availablity
 
-       / *
 
-       $excludeServiceKeys='';
-       while (is_object($serviceObj = t3lib_div::makeInstanceService('anyService','', $excludeServiceKeys))) {
-               if ($serviceObj->available('some special parm to check availablity')) {
-                       break;
-               }
-               $excludeServiceKeys .= ','.$serviceObj->getServiceKey;
-               unset($serviceObj);
-       }
 
-       * /
 
-       return TRUE;
-}
-*/
 
 
        /***************************************
@@ -437,7 +421,7 @@ function available()        {
         * @return      string          File name or FALSE.
         */
        function checkInputFile ($absFile)      {
-               if(@is_file($absFile)) {
+               if(t3lib_div::isAllowedAbsPath($absFile) && @is_file($absFile)) {
                        if(@is_readable($absFile)) {
                                return $absFile;
                        } else {
@@ -460,14 +444,9 @@ function available()       {
        function readFile ($absFile, $length=0) {
                $out = FALSE;
 
-               if ($this->checkInputFile ($absFile)) {
-                       if ($fd = fopen ($absFile, 'rb')) {
-                               $length = intval($length) ? intval($length) : filesize ($absFile);
-                               if ($length > 0) {
-                                       $out = fread ($fd, $length);
-                               }
-                               fclose ($fd);
-                       } else {
+               if ($this->checkInputFile($absFile)) {
+                       $out = file_get_contents($absFile);
+                       if ($out===FALSE)       {
                                $this->errorPush(T3_ERR_SV_FILE_READ, 'Can not read from file: '.$absFile);
                        }
                }
@@ -489,7 +468,7 @@ function available()        {
                        $absFile = $this->tempFile($this->prefixId);
                }
 
-               if($absFile) {
+               if($absFile && t3lib_div::isAllowedAbsPath($absFile)) {
                        if ($fd = @fopen($absFile,'wb')) {
                                @fwrite($fd, $content);
                                @fclose($fd);
@@ -554,9 +533,9 @@ function available()        {
        /**
         * Set the input content for service processing.
         *
-        * @param       mixed
-        * @param       [type]          $type: ...
-        * @return      [type]          ...
+        * @param       mixed           Input content (going into ->inputContent)
+        * @param       string          The type of the input content (or file). Might be the same as the service subtypes.
+        * @return      void
         */
        function setInput ($content, $type='') {
                $this->inputContent = $content;
@@ -569,8 +548,8 @@ function available()        {
         * Set the input file name for service processing.
         *
         * @param       string          file name
-        * @param       [type]          $type: ...
-        * @return      [type]          ...
+        * @param       string          The type of the input content (or file). Might be the same as the service subtypes.
+        * @return      void
         */
        function setInputFile ($absFile, $type='') {
                $this->inputContent = '';
@@ -581,7 +560,7 @@ function available()        {
 
        /**
         * Get the input content.
-        * Will be read from input file if needed.
+        * Will be read from input file if needed. (That is if ->inputContent is empty and ->inputFile is not)
         *
         * @return      mixed
         */
@@ -623,7 +602,7 @@ function available()        {
         * Set the output file name.
         *
         * @param       string          file name
-        * @return      [type]          ...
+        * @return      void
         */
        function setOutputFile ($absFile) {
                $this->outputFile = $absFile;
@@ -644,9 +623,9 @@ function available()        {
 
 
        /**
-        * Get the output file name.
+        * Get the output file name. If no output file is set, the ->out buffer is written to the file given by input parameter filename
         *
-        * @param       [type]          $absFile: ...
+        * @param       string          Absolute filename to write to
         * @return      mixed
         */
        function getOutputFile ($absFile='') {
@@ -687,7 +666,7 @@ function available()        {
                        }
                }
 
-               return $this->getLastError();
+               return ($this->getLastError() === true);
        }
 
 
@@ -718,7 +697,7 @@ function available()        {
 
 
        /* every service type has it's own API
-       function process($content='', $type='', $conf=array())  {
+       function process($content='', $type='', $conf=array())  {       //
        }
        */