diff --git a/lib/SimpleSAML/Utilities.php b/lib/SimpleSAML/Utilities.php index cec167f7c5ad06638228fb2cffe8896da6e3277f..17a344591f53319541e678f61090adca6b3015bf 100644 --- a/lib/SimpleSAML/Utilities.php +++ b/lib/SimpleSAML/Utilities.php @@ -932,6 +932,48 @@ class SimpleSAML_Utilities { return $ret; } + + /** + * Resolve a (possibly) relative path from the given base path. + * + * A path which starts with a '/' is assumed to be absolute, all others are assumed to be + * relative. The default base path is the root of the simpleSAMPphp installation. + * + * @param $path The path we should resolve. + * @param $base The base path, where we should search for $path from. Default value is the root + * of the simpleSAMLphp installation. + * @return An absolute path referring to $path. + */ + public static function resolvePath($path, $base = NULL) { + if($base === NULL) { + $config = SimpleSAML_Configuration::getInstance(); + $base = $config->getBaseDir(); + } + + /* Remove trailing slashes from $base. */ + while(substr($base, -1) === '/') { + $base = substr($base, 0, -1); + } + + $ret = $base; + + $path = explode('/', $path); + foreach($path as $d) { + if($d === '.') { + continue; + } elseif($d === '..') { + $ret = dirname($ret); + } else { + if(substr($ret, -1) !== '/') { + $ret .= '/'; + } + $ret .= $d; + } + } + + return $ret; + } + } ?> \ No newline at end of file