<?php // $Header: /cvsroot/phpldapadmin/phpldapadmin/index.php,v 1.39 2005/09/25 16:11:44 wurley Exp $ /** * @package phpLDAPadmin * @todo: Move config.php syntax error processing to earlier. */ /******************************************* <pre> If you are seeing this in your browser, PHP is not installed on your web server!!! </pre> *******************************************/ /** * We will perform some sanity checking here, since this file is normally loaded first when users * first setup PLA. */ @DEFINE(LIBDIR,'./'); ini_set('display_errors',1); error_reporting(E_ALL); # General functions needed to proceed (pla_ldap_search(), pla_error(), get_object_attrs(), etc.) ob_start(); if (! file_exists(LIBDIR.'functions.php')) { ob_end_clean(); die("Fatal error: Required file 'functions.php' does not exist."); } if (! is_readable(LIBDIR.'functions.php')) { ob_end_clean(); die("Cannot read the file 'functions.php' its permissions are too strict."); } require LIBDIR.'functions.php'; $config_file = CONFDIR.'config.php'; ob_end_clean(); /* Helper functions. * Our required helper functions are defined in functions.php */ foreach ($pla_function_files as $file_name ) { if (! file_exists($file_name)) pla_error("Fatal error: Required file '$file_name' does not exist."); if (! is_readable($file_name)) pla_error( "Fatal error: Cannot read the file '$file_name', its permissions are too strict." ); ob_start(); require $file_name; ob_end_clean(); } # Configuration File check if (! file_exists($config_file)) { ?> <html> <head> <title>phpLDAPadmin - <?php echo pla_version(); ?></title> <link rel="stylesheet" href="style.css" /> </head> <body> <h3 class="title">Configure phpLDAPadmin</h1> <br /> <br /> <center><?php echo $lang['need_to_configure']; ?></center> </body> </html> <?php die(); } elseif (! is_readable($config_file)) { pla_error(sprintf('Fatal error: Cannot read your configuration file "%s", its permissions are too strict.',$config_file)); } # Now read in config_default.php, which also reads in config.php require LIBDIR.'config_default.php'; if (check_config()) { print '<?xml version="1.0" encoding="utf-8"?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="no-NO"> <?php if ($pagetitle = $config->GetValue('appearance','page_title')) { ?> <head><title>phpLDAPadmin (<?php echo pla_version(); ?>) - <?php echo $pagetitle; ?></title></head> <?php } else { ?> <head><title>phpLDAPadmin - <?php echo pla_version(); ?></title></head> <?php } ?> <frameset cols="<?php echo $config->GetValue('appearance','tree_width'); ?>,*"> <frame src="tree.php" name="left_frame" id="left_frame" /> <frame src="welcome.php" name="right_frame" id="right_frame" /> </frameset> </html> <?php } /* * Makes sure that the config file is properly setup and * that your install of PHP can handle LDAP stuff. */ function check_config() { global $lang, $config_file; # Make sure their PHP version is current enough if (strcmp(phpversion(),REQUIRED_PHP_VERSION) < 0) { pla_error(sprintf('phpLDAPadmin requires PHP version %s or greater. You are using %s', REQUIRED_PHP_VERSION,phpversion())); } # Make sure this PHP install has all our required extensions if (! extension_loaded('ldap')) { pla_error( "Your install of PHP appears to be missing LDAP support. Please install " . "LDAP support before using phpLDAPadmin. (Don't forget to restart your web server afterwards)"); return false; } # Make sure that we have php-xml loaded. if (! function_exists('xml_parser_create')) { pla_error( "Your install of PHP appears to be missing XML support. Please install " . "XML support before using phpLDAPadmin. (Don't forget to restart your web server afterwards)"); return false; } # Make sure their session save path is writable, if they are using a file system session module, that is. if ( ! strcasecmp("Files",session_module_name() && ! is_writable(realpath(session_save_path())))) { pla_error( "Your PHP session configuration is incorrect. Please check the value of session.save_path in your php.ini to ensure that the directory specified there exists and is writable. The current setting of \"". session_save_path() . "\" is un-writable by the web server."); return false; } /* check for syntax errors in config.php */ # capture the result of including the file with output buffering ob_start(); include $config_file; $str = ob_get_contents(); ob_end_clean(); if( $str && false !== strpos( $str, 'error' ) ) { $str = strip_tags( $str ); $matches = array(); preg_match( "/on line (\d+)/", $str, $matches ); $line_num = $matches[1]; $file = file($config_file); ?> <html> <head> <title>phpLDAPadmin Config File Error</title> <link rel="stylesheet" href="style.css" /> </head> <body> <h3 class="title">Config file error</h3> <h3 class="subtitle">Syntax error on line <?php echo $line_num; ?></h3> <center> Looks like your config file has a syntax error on line <?php echo $line_num; ?>. Here is a snippet around that line <br /> <br /> <div style="text-align: left; margin-left: 80px; margin-right: 80px; border: 1px solid black; padding: 10px;"> <tt> <?php for( $i=$line_num-9; $i<$line_num+5; $i++ ) { if( $i+1 == $line_num ) echo "<div style=\"color:red;background:#fdd\">"; if( $i < 0 ) continue; echo "<b>" . ($i+1) . "</b>: " . htmlspecialchars($file[ $i ]) . "<br />"; if( $i+1 == $line_num ) echo "</div>"; } ?> </tt> </div> <br /> Hint: Sometimes these errors are caused by lines <b>preceding</b> the line reported. </body> </html> <?php return false; } /* check the existence of the servers array */ require $config_file; if( ! isset($ldapservers) || count($ldapservers->GetServerList()) == 0) { pla_error( "Your config.php is missing Server Definitions Please see the sample file config.php.example ", false ); return false; } # @todo: Implement this and fix all the tests. /* if ( ! count($ldapservers->GetServerList())) { pla_error( "None of the " . count($servers) . " servers in your \$servers configuration is active in config.php. At least one of your servers must set the 'host' directive. Example: <br><pre>\$servers['host'] = \"ldap.example.com\";<br></pre> phpLDAPadmin cannot proceed util you correct this.", false ); return false; } // Check that 'base' is present on all serve entries foreach( $servers as $id => $server ) { if( isset( $server['host'] ) && isset( $server['name'] ) ) isset( $server['base'] ) or pla_error ( "Your configuration has an error. You omitted the 'base' directive on server number $id. Your server entry must have a 'base' directive even if it's empty ('')." ); } // Check each of the servers in the servers array foreach( $servers as $id => $server ) { if( isset( $server['host'] ) ) { // Make sure they specified an auth_type if( ! isset( $server['auth_type'] ) ) { pla_error( "Your configuration has an error. You omitted the 'auth_type' directive on server number $id 'auth_type' must be set, and it must be one of 'config', 'cookie', or 'session'.", false ); return false; } // Make sure they specified a correct auth_type if( ! in_array( $server['auth_type'], array( 'config', 'cookie', 'session' ) ) ) { global $lang; pla_error( sprintf( $lang['error_auth_type_config'], htmlspecialchars( $server['auth_type'] ) ) ); return false; } } } */ return true; } ?>