From a690a6a59c01939cf15f91f25519d53b63fd8eae Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@users.sourceforge.net>
Date: Wed, 29 Sep 2010 08:09:17 +0000
Subject: [PATCH] Sec: If conf.php file is write protected, then all first
 install process is locked.

---
 htdocs/core/class/conf.class.php |   5 +-
 htdocs/install/check.php         |   2 +-
 htdocs/install/etape0.php        |  10 +-
 htdocs/install/etape1.php        |  16 +-
 htdocs/install/etape2.php        |   7 +
 htdocs/install/etape4.php        |   8 +
 htdocs/install/etape5.php        |   8 +
 htdocs/install/fileconf.php      | 594 +++++++++++++++----------------
 htdocs/install/licence.php       |  33 +-
 htdocs/lib/functions2.lib.php    |  17 +-
 10 files changed, 371 insertions(+), 329 deletions(-)

diff --git a/htdocs/core/class/conf.class.php b/htdocs/core/class/conf.class.php
index 0aaa572ed03..344724f38f0 100644
--- a/htdocs/core/class/conf.class.php
+++ b/htdocs/core/class/conf.class.php
@@ -207,8 +207,9 @@ class Conf
 		if (! $this->global->MAIN_MENUFRONT_BARRETOP) $this->global->MAIN_MENUFRONT_BARRETOP="eldy_backoffice.php";
 		if (! $this->global->MAIN_MENU_BARRELEFT) $this->global->MAIN_MENU_BARRELEFT="eldy_backoffice.php";
 		if (! $this->global->MAIN_MENUFRONT_BARRELEFT) $this->global->MAIN_MENUFRONT_BARRELEFT="eldy_backoffice.php";
-		if (! $this->global->MAIN_MENU_SMARTPHONE) $this->global->MAIN_MENU_SMARTPHONE="iphone_backoffice.php";
-		if (! $this->global->MAIN_MENUFRONT_SMARTPHONE) $this->global->MAIN_MENUFRONT_SMARTPHONE="iphone_backoffice.php";
+
+		if (empty($this->global->MAIN_MENU_SMARTPHONE)) $this->global->MAIN_MENU_SMARTPHONE="iphone_backoffice.php";
+		if (empty($this->global->MAIN_MENUFRONT_SMARTPHONE)) $this->global->MAIN_MENUFRONT_SMARTPHONE="iphone_backoffice.php";
 
 		// Variable globales LDAP
 		if (empty($this->global->LDAP_FIELD_FULLNAME)) $this->global->LDAP_FIELD_FULLNAME='';
diff --git a/htdocs/install/check.php b/htdocs/install/check.php
index 33dbd1dac0d..fe554b0fc40 100644
--- a/htdocs/install/check.php
+++ b/htdocs/install/check.php
@@ -159,7 +159,7 @@ if (is_readable($conffile) && filesize($conffile) > 8)
 	$confexists=1;
 	include_once($conffile);
 
-	$databaseok=1;	// TODO Check if database is ok
+	$databaseok=1;
 	if ($databaseok)
 	{
 		// Already installed for all parts (config and database). We can propose upgrade.
diff --git a/htdocs/install/etape0.php b/htdocs/install/etape0.php
index 32de4e1a7d3..a0e4cad248a 100644
--- a/htdocs/install/etape0.php
+++ b/htdocs/install/etape0.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2007      Cyrille de Lambert   <cyrille.delambert@auguria.net>
- * Copyright (C) 2007-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2007-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -59,6 +59,14 @@ dolibarr_install_syslog("etape0: Entering etape0.php page");
 
 pHeader($langs->trans("ConfigurationFile"),"etape1");
 
+// Test if we can run a first install process
+if (is_writable($conffile))
+{
+    print $langs->trans("ConfFileIsNotWritable",'htdocs/conf/conf.php');
+    pFooter(1,$setuplang,'jscheckparam');
+    exit;
+}
+
 // On reporte champ formulaire precedent pour propagation
 if ($_POST["action"] == "set")
 {
diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php
index 19653023e2e..66e2db58b1f 100644
--- a/htdocs/install/etape1.php
+++ b/htdocs/install/etape1.php
@@ -48,6 +48,14 @@ dolibarr_install_syslog("etape1: Entering etape1.php page");
 
 pHeader($langs->trans("ConfigurationFile"),"etape2");
 
+// Test if we can run a first install process
+if (! is_writable($conffile))
+{
+    print $langs->trans("ConfFileIsNotWritable",'htdocs/conf/conf.php');
+    pFooter(1,$setuplang,'jscheckparam');
+    exit;
+}
+
 $error = 0;
 
 // Repertoire des pages dolibarr
@@ -70,11 +78,6 @@ $main_data_dir=isset($_POST["main_data_dir"])?$_POST["main_data_dir"]:'';
 if (! $main_data_dir) { $main_data_dir="$main_dir/documents"; }
 
 
-/*
- * Actions
- */
-
-
 if ($_POST["action"] == "set")
 {
 	umask(0);
@@ -499,7 +502,8 @@ pFooter($error,$setuplang,'jsinfo');
 
 
 /**
- * Save configuration file
+ *  Save configuration file. No particular permissions are set by installer.
+ *  @param      conffile        Path to conf file
  */
 function write_conf_file($conffile)
 {
diff --git a/htdocs/install/etape2.php b/htdocs/install/etape2.php
index 69f79f1fb16..025649af16d 100644
--- a/htdocs/install/etape2.php
+++ b/htdocs/install/etape2.php
@@ -64,6 +64,13 @@ dolibarr_install_syslog("etape2: Entering etape2.php page");
 
 pHeader($langs->trans("CreateDatabaseObjects"),"etape4");
 
+// Test if we can run a first install process
+if (! is_writable($conffile))
+{
+    print $langs->trans("ConfFileIsNotWritable",'htdocs/conf/conf.php');
+    pFooter(1,$setuplang,'jscheckparam');
+    exit;
+}
 
 if ($_POST["action"] == "set")
 {
diff --git a/htdocs/install/etape4.php b/htdocs/install/etape4.php
index 3ea3f9bd33a..9ecafdbc147 100644
--- a/htdocs/install/etape4.php
+++ b/htdocs/install/etape4.php
@@ -56,6 +56,14 @@ $ok = 0;
 
 pHeader($langs->trans("AdminAccountCreation"),"etape5");
 
+// Test if we can run a first install process
+if (! is_writable($conffile))
+{
+    print $langs->trans("ConfFileIsNotWritable",'htdocs/conf/conf.php');
+    pFooter(1,$setuplang,'jscheckparam');
+    exit;
+}
+
 print '<table cellspacing="0" cellpadding="2" width="100%">';
 
 $db = new DoliDb($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port);
diff --git a/htdocs/install/etape5.php b/htdocs/install/etape5.php
index 1e01b6b62d9..c71434170d3 100644
--- a/htdocs/install/etape5.php
+++ b/htdocs/install/etape5.php
@@ -102,6 +102,14 @@ if ($_POST["action"] == "set")
 
 pHeader($langs->trans("SetupEnd"),"etape5");
 
+// Test if we can run a first install process
+if (! is_writable($conffile))
+{
+    print $langs->trans("ConfFileIsNotWritable",'htdocs/conf/conf.php');
+    pFooter(1,$setuplang,'jscheckparam');
+    exit;
+}
+
 if ($_POST["action"] == "set" || preg_match('/upgrade/i',$_POST["action"]))
 {
 	print '<table cellspacing="0" cellpadding="2" width="100%">';
diff --git a/htdocs/install/fileconf.php b/htdocs/install/fileconf.php
index b44c732a7b3..58ea405085e 100644
--- a/htdocs/install/fileconf.php
+++ b/htdocs/install/fileconf.php
@@ -56,109 +56,123 @@ if (file_exists("./install.forced.php")) include_once("./install.forced.php");
 dolibarr_install_syslog("Fileconf: Entering fileconf.php page");
 
 
+
+
 /*
-*	View
-*/
+ *	View
+ */
 
 pHeader($langs->trans("ConfigurationFile"),"etape0");
 
+// Test if we can run a first install process
+if (! is_writable($conffile))
+{
+    print $langs->trans("ConfFileIsNotWritable",'htdocs/conf/conf.php');
+    pFooter(1,$setuplang,'jscheckparam');
+    exit;
+}
+
 if (! empty($force_install_message))
 {
-	print '<b>'.$langs->trans($force_install_message).'</b><br>';
+    print '<b>'.$langs->trans($force_install_message).'</b><br>';
 }
 
 ?>
 <table border="0" cellpadding="1" cellspacing="0">
 
-<tr>
-<td colspan="3" class="label" align="center"><h3>
-<?php echo $langs->trans("WebServer"); ?>
-</h3></td></tr>
+	<tr>
+		<td colspan="3" class="label" align="center">
+		<h3><?php echo $langs->trans("WebServer"); ?></h3>
+		</td>
+	</tr>
 
-<tr>
-<?php
-print '<td valign="top" class="label"><b>';
-print $langs->trans("WebPagesDirectory");
-print "</b></td>";
+	<tr>
+	<?php
+	print '<td valign="top" class="label"><b>';
+	print $langs->trans("WebPagesDirectory");
+	print "</b></td>";
 
-if(! isset($dolibarr_main_url_root) || dol_strlen($dolibarr_main_url_root) == 0)
-{
-    //print "x".$_SERVER["SCRIPT_FILENAME"]." y".$_SERVER["DOCUMENT_ROOT"];
-
-    // Si le php fonctionne en CGI, alors SCRIPT_FILENAME vaut le path du php et
-    // ce n'est pas ce qu'on veut. Dans ce cas, on propose $_SERVER["DOCUMENT_ROOT"]
-    if (preg_match('/^php$/i',$_SERVER["SCRIPT_FILENAME"]) || preg_match('/[\\/]php$/i',$_SERVER["SCRIPT_FILENAME"]) || preg_match('/php\.exe$/i',$_SERVER["SCRIPT_FILENAME"]))
-    {
-        $dolibarr_main_document_root=$_SERVER["DOCUMENT_ROOT"];
-
-        if (! preg_match('/[\\/]dolibarr[\\/]htdocs$/i',$dolibarr_main_document_root))
-        {
-            $dolibarr_main_document_root.="/dolibarr/htdocs";
-        }
-    }
-    else
-    {
-        $dolibarr_main_document_root = substr($_SERVER["SCRIPT_FILENAME"],0,dol_strlen($_SERVER["SCRIPT_FILENAME"]) - 21);
-        // Nettoyage du path propose
-        // Gere les chemins windows avec double "\"
-        $dolibarr_main_document_root = str_replace('\\\\','/',$dolibarr_main_document_root);
-
-        // Supprime les slash ou antislash de fins
-        $dolibarr_main_document_root = preg_replace('/[\\/]+$/','',$dolibarr_main_document_root);
-    }
-}
-//echo $PMA_MYSQL_INT_VERSION;
-?>
-<td  class="label" valign="top"><input type="text" size="60" value="<?php print $dolibarr_main_document_root; ?>" name="main_dir">
-</td><td class="comment">
-<?php
-print $langs->trans("WithNoSlashAtTheEnd")."<br>";
-print $langs->trans("Examples").":<br>";
-?>
-<ul>
-<li>/var/www/dolibarr/htdocs</li>
-<li>C:/wwwroot/dolibarr/htdocs</li>
-</ul>
-</td>
-</tr>
-
-<tr>
-<td valign="top" class="label"><b>
-<?php print $langs->trans("DocumentsDirectory"); ?>
-</b></td>
-<?php
-if (empty($dolibarr_main_data_root))
-{
-    // Si le repertoire documents non defini, on en propose un par defaut
-    if (empty($force_install_main_data_root))
+	if(! isset($dolibarr_main_url_root) || dol_strlen($dolibarr_main_url_root) == 0)
 	{
-		$dolibarr_main_data_root=preg_replace("/\/htdocs$/","",$dolibarr_main_document_root);
-		$dolibarr_main_data_root.="/documents";
+	    //print "x".$_SERVER["SCRIPT_FILENAME"]." y".$_SERVER["DOCUMENT_ROOT"];
+
+	    // Si le php fonctionne en CGI, alors SCRIPT_FILENAME vaut le path du php et
+	    // ce n'est pas ce qu'on veut. Dans ce cas, on propose $_SERVER["DOCUMENT_ROOT"]
+	    if (preg_match('/^php$/i',$_SERVER["SCRIPT_FILENAME"]) || preg_match('/[\\/]php$/i',$_SERVER["SCRIPT_FILENAME"]) || preg_match('/php\.exe$/i',$_SERVER["SCRIPT_FILENAME"]))
+	    {
+	        $dolibarr_main_document_root=$_SERVER["DOCUMENT_ROOT"];
+
+	        if (! preg_match('/[\\/]dolibarr[\\/]htdocs$/i',$dolibarr_main_document_root))
+	        {
+	            $dolibarr_main_document_root.="/dolibarr/htdocs";
+	        }
+	    }
+	    else
+	    {
+	        $dolibarr_main_document_root = substr($_SERVER["SCRIPT_FILENAME"],0,dol_strlen($_SERVER["SCRIPT_FILENAME"]) - 21);
+	        // Nettoyage du path propose
+	        // Gere les chemins windows avec double "\"
+	        $dolibarr_main_document_root = str_replace('\\\\','/',$dolibarr_main_document_root);
+
+	        // Supprime les slash ou antislash de fins
+	        $dolibarr_main_document_root = preg_replace('/[\\/]+$/','',$dolibarr_main_document_root);
+	    }
 	}
-	else
-	{
-		$dolibarr_main_data_root=$force_install_main_data_root;
-	}
-}
-?>
-<td class="label" valign="top"><input type="text" size="60" value="<?php print $dolibarr_main_data_root; ?>" name="main_data_dir">
-</td><td class="comment">
-<?php
-print $langs->trans("WithNoSlashAtTheEnd")."<br>";
-print $langs->trans("DirectoryRecommendation")."<br>";
-print $langs->trans("Examples").":<br>";
-?>
-<ul>
-<li>/var/dolibarr_documents</li>
-<li>C:/My Documents/dolibarr/</li>
-</ul>
-</td>
-</tr>
-
-<tr>
-<td valign="top" class="label"><b>
-<?php echo $langs->trans("URLRoot"); ?>
-</b></td><td valign="top" class="label"><input type="text" size="60" name="main_url" value="
+	//echo $PMA_MYSQL_INT_VERSION;
+	?>
+		<td class="label" valign="top"><input type="text" size="60"
+			value="<?php print $dolibarr_main_document_root; ?>" name="main_dir">
+		</td>
+		<td class="comment"><?php
+		print $langs->trans("WithNoSlashAtTheEnd")."<br>";
+		print $langs->trans("Examples").":<br>";
+		?>
+		<ul>
+			<li>/var/www/dolibarr/htdocs</li>
+			<li>C:/wwwroot/dolibarr/htdocs</li>
+		</ul>
+		</td>
+	</tr>
+
+	<tr>
+		<td valign="top" class="label"><b> <?php print $langs->trans("DocumentsDirectory"); ?>
+		</b></td>
+		<?php
+		if (empty($dolibarr_main_data_root))
+		{
+		    // Si le repertoire documents non defini, on en propose un par defaut
+		    if (empty($force_install_main_data_root))
+		    {
+		        $dolibarr_main_data_root=preg_replace("/\/htdocs$/","",$dolibarr_main_document_root);
+		        $dolibarr_main_data_root.="/documents";
+		    }
+		    else
+		    {
+		        $dolibarr_main_data_root=$force_install_main_data_root;
+		    }
+		}
+		?>
+		<td class="label" valign="top"><input type="text" size="60"
+			value="<?php print $dolibarr_main_data_root; ?>" name="main_data_dir">
+		</td>
+		<td class="comment"><?php
+		print $langs->trans("WithNoSlashAtTheEnd")."<br>";
+		print $langs->trans("DirectoryRecommendation")."<br>";
+		print $langs->trans("Examples").":<br>";
+		?>
+		<ul>
+			<li>/var/dolibarr_documents</li>
+			<li>C:/My Documents/dolibarr/</li>
+		</ul>
+		</td>
+	</tr>
+
+	<tr>
+		<td valign="top" class="label"><b> <?php echo $langs->trans("URLRoot"); ?>
+		</b></td>
+		<td valign="top" class="label"><input type="text" size="60"
+			name="main_url"
+			value="
 <?php
 if (! empty($main_url)) $dolibarr_main_url_root=$main_url;
 if (empty($dolibarr_main_url_root))
@@ -187,216 +201,200 @@ if (empty($dolibarr_main_url_root))
 }
 
 print $dolibarr_main_url_root;
-?>">
-</td><td class="comment">
-<?php
-print $langs->trans("Examples").":<br>";
-?>
-<ul>
-<li>http://localhost/</li>
-<li>http://www.myserver.com:8180/dolibarr</li>
-</ul>
-</tr>
-
-<tr>
-<td valign="top" class="label">
-<?php echo $langs->trans("ForceHttps"); ?>
-<td class="label" valign="top"><input type="checkbox" name="main_force_https"<?php if (! empty($force_install_mainforcehttps)) print ' checked="on"'; ?>></td>
-<td class="comment">
-<?php echo $langs->trans("CheckToForceHttps"); ?>
-</td>
-</tr>
-
-<!-- Dolibarr database -->
-
-<tr>
-<td colspan="3" class="label" align="center"><br><h3>
-<?php echo $langs->trans("DolibarrDatabase"); ?>
-</h3></td>
-</tr>
-<?php
-if (!isset($dolibarr_main_db_host))
-{
-$dolibarr_main_db_host = "localhost";
-}
-?>
-<tr>
-<!-- moi-->
-<td valign="top" class="label"><b>
-<?php echo $langs->trans("DriverType"); ?>
-</b></td>
-
-<td class="label">
-<?php
-
-$defaultype=! empty($dolibarr_main_db_type)?$dolibarr_main_db_type:($force_install_type?$force_install_type:'mysqli');
-
-// Scan les drivers
-$dir=DOL_DOCUMENT_ROOT.'/lib/databases';
-$handle=opendir($dir);
-$modules = array();
-$nbok = $nbko = 0;
-$option='';
-
-while (($file = readdir($handle))!==false)
-{
-    if (is_readable($dir."/".$file) && preg_match('/^(.*)\.lib\.php/i',$file,$reg))
-    {
-        $type=$reg[1];
-
-		// Version min de la base
-		$versionbasemin=array();
-		if ($type=='mysql')  { $versionbasemin=array(3,1,0); $testfunction='mysql_connect'; }
-		if ($type=='mysqli') { $versionbasemin=array(4,1,0); $testfunction='mysqli_connect'; }
-		if ($type=='pgsql')  { $versionbasemin=array(8,1,0); $testfunction='pg_connect'; }
-		if ($type=='mssql')  { $versionbasemin=array(2000);  $testfunction='mssql_connect'; }
-
-		// Remarques
-		$note='';
-		if ($type=='mysql') 	$note='(Mysql >= '.versiontostring($versionbasemin).')';
-		if ($type=='mysqli') 	$note='(Mysql >= '.versiontostring($versionbasemin).')';
-		if ($type=='pgsql') 	$note='(Postgresql >= '.versiontostring($versionbasemin).')';
-		if ($type=='mssql') 	$note='(SQL Server >= '.versiontostring($versionbasemin).')';
-
-		// Switch to mysql if mysqli is not present
-		if ($defaultype=='mysqli' && !function_exists('mysqli_connect')) $defaultype = 'mysql';
-
-		// Affiche ligne dans liste
-		$option.='<option value="'.$type.'"'.($defaultype == $type?' selected':'');
-		if (! function_exists($testfunction)) $option.=' disabled="disabled"';
-		$option.='>';
-		$option.=$type.'&nbsp; &nbsp;';
-		if ($note) $option.=' '.$note;
-		// Experimental
-		if ($type=='pgsql')     $option.=' '.$langs->trans("Experimental");
-		elseif ($type=='mssql') $option.=' '.$langs->trans("Experimental");
-		// No available
-		elseif (! function_exists($testfunction)) $option.=' - '.$langs->trans("FunctionNotAvailableInThisPHP");
-		$option.='</option>';
-    }
-}
-
-?>
-<select name='db_type'>
-<?php echo $option ?>
-</select>
-&nbsp;
-</td>
-
-<td class="comment">
-<?php echo $langs->trans("DatabaseType"); ?>
-</td>
-
-</tr>
-
-<tr>
-<td valign="top" class="label"><b>
-<?php echo $langs->trans("Server"); ?>
-</b></td>
-<td valign="top" class="label"><input type="text" name="db_host" value="<?php print (! empty($dolibarr_main_db_host))?$dolibarr_main_db_host:'localhost'; ?>">
-<input type="hidden" name="base" value="">
-</td>
-<td class="comment">
-<?php echo $langs->trans("ServerAddressDescription"); ?>
-</td>
-
-</tr>
-
-<tr>
-<td valign="top" class="label">
-<?php echo $langs->trans("Port"); ?>
-</td>
-<td valign="top" class="label"><input type="text" name="db_port" value="<?php print (! empty($dolibarr_main_db_port))?$dolibarr_main_db_port:$force_install_port; ?>">
-<input type="hidden" name="base" value="">
-</td>
-<td class="comment">
-<?php echo $langs->trans("ServerPortDescription"); ?>
-</td>
-
-</tr>
-
-<tr>
-<td class="label" valign="top"><b>
-<?php echo $langs->trans("DatabaseName"); ?>
-</b></td>
-
-<td class="label" valign="top"><input type="text" name="db_name" value="<?php echo (! empty($dolibarr_main_db_name))?$dolibarr_main_db_name:$force_install_database; ?>"></td>
-<td class="comment">
-<?php echo $langs->trans("DatabaseName"); ?>
-</td>
-</tr>
-
-<tr>
-<td class="label" valign="top">
-<?php echo $langs->trans("CreateDatabase"); ?>
-</td>
-
-<td class="label" valign="top"><input type="checkbox" name="db_create_database"<?php if ($force_install_createdatabase) print ' checked="on"'; ?>></td>
-<td class="comment">
-<?php echo $langs->trans("CheckToCreateDatabase"); ?>
-</td>
-</tr>
-
-<tr>
-<td class="label" valign="top">
-<b><?php echo $langs->trans("Login"); ?></b>
-</td>
-<td class="label" valign="top"><input type="text" name="db_user" value="<?php print (! empty($dolibarr_main_db_user))?$dolibarr_main_db_user:$force_install_databaselogin; ?>"></td>
-<td class="comment">
-<?php echo $langs->trans("AdminLogin"); ?>
-</td>
-</tr>
-
-<tr>
-<td class="label" valign="top">
-<b><?php echo $langs->trans("Password"); ?></b>
-</td>
-<td class="label" valign="top"><input type="password" name="db_pass" value="<?php print (! empty($dolibarr_main_db_pass))?$dolibarr_main_db_pass:$force_install_databasepass; ?>"></td>
-<td class="comment">
-<?php echo $langs->trans("AdminPassword"); ?>
-</td>
-</tr>
-
-<tr>
-<td class="label" valign="top">
-<?php echo $langs->trans("CreateUser"); ?>
-</td>
-
-<td class="label" valign="top"><input type="checkbox" name="db_create_user"<?php if (! empty($force_install_createuser)) print ' checked="on"'; ?>></td>
-<td class="comment">
-<?php echo $langs->trans("CheckToCreateUser"); ?>
-</td>
-</tr>
-
-
-<!-- Super access -->
-
-<tr>
-<td colspan="3" class="label" align="center"><br><h3>
-<?php echo $langs->trans("DatabaseSuperUserAccess"); ?>
-</h3></td></tr>
-
-<tr>
-<td class="label" valign="top">
-<?php echo $langs->trans("Login"); ?>
-</td>
-<td class="label" valign="top"><input type="text" name="db_user_root" value="<?php print (! empty($db_user_root))?$db_user_root:$force_install_databaserootlogin; ?>"></td>
-<td class="label"><div class="comment">
-<?php echo $langs->trans("DatabaseRootLoginDescription"); ?>
-</div>
-</td>
-</tr>
-
-<tr>
-<td class="label" valign="top">
-<?php echo $langs->trans("Password"); ?>
-</td>
-<td class="label" valign="top"><input type="password" name="db_pass_root" value="<?php print (! empty($db_pass_root))?$db_pass_root:$force_install_databaserootpass; ?>"></td>
-<td class="label"><div class="comment">
-<?php echo $langs->trans("KeepEmptyIfNoPassword"); ?>
-</div>
-</td>
-</tr>
+?>"></td>
+		<td class="comment"><?php
+		print $langs->trans("Examples").":<br>";
+		?>
+		<ul>
+			<li>http://localhost/</li>
+			<li>http://www.myserver.com:8180/dolibarr</li>
+		</ul>
+
+	</tr>
+
+	<tr>
+		<td valign="top" class="label"><?php echo $langs->trans("ForceHttps"); ?>
+		<td class="label" valign="top"><input type="checkbox"
+			name="main_force_https"
+			<?php if (! empty($force_install_mainforcehttps)) print ' checked="on"'; ?>></td>
+		<td class="comment"><?php echo $langs->trans("CheckToForceHttps"); ?>
+		</td>
+
+	</tr>
+
+	<!-- Dolibarr database -->
+
+	<tr>
+		<td colspan="3" class="label" align="center"><br>
+		<h3><?php echo $langs->trans("DolibarrDatabase"); ?></h3>
+		</td>
+	</tr>
+	<?php
+	if (!isset($dolibarr_main_db_host))
+	{
+	    $dolibarr_main_db_host = "localhost";
+	}
+	?>
+	<tr>
+		<!-- moi-->
+		<td valign="top" class="label"><b> <?php echo $langs->trans("DriverType"); ?>
+		</b></td>
+
+		<td class="label"><?php
+
+		$defaultype=! empty($dolibarr_main_db_type)?$dolibarr_main_db_type:($force_install_type?$force_install_type:'mysqli');
+
+		// Scan les drivers
+		$dir=DOL_DOCUMENT_ROOT.'/lib/databases';
+		$handle=opendir($dir);
+		$modules = array();
+		$nbok = $nbko = 0;
+		$option='';
+
+		while (($file = readdir($handle))!==false)
+		{
+		    if (is_readable($dir."/".$file) && preg_match('/^(.*)\.lib\.php/i',$file,$reg))
+		    {
+		        $type=$reg[1];
+
+		        // Version min de la base
+		        $versionbasemin=array();
+		        if ($type=='mysql')  { $versionbasemin=array(3,1,0); $testfunction='mysql_connect'; }
+		        if ($type=='mysqli') { $versionbasemin=array(4,1,0); $testfunction='mysqli_connect'; }
+		        if ($type=='pgsql')  { $versionbasemin=array(8,1,0); $testfunction='pg_connect'; }
+		        if ($type=='mssql')  { $versionbasemin=array(2000);  $testfunction='mssql_connect'; }
+
+		        // Remarques
+		        $note='';
+		        if ($type=='mysql') 	$note='(Mysql >= '.versiontostring($versionbasemin).')';
+		        if ($type=='mysqli') 	$note='(Mysql >= '.versiontostring($versionbasemin).')';
+		        if ($type=='pgsql') 	$note='(Postgresql >= '.versiontostring($versionbasemin).')';
+		        if ($type=='mssql') 	$note='(SQL Server >= '.versiontostring($versionbasemin).')';
+
+		        // Switch to mysql if mysqli is not present
+		        if ($defaultype=='mysqli' && !function_exists('mysqli_connect')) $defaultype = 'mysql';
+
+		        // Affiche ligne dans liste
+		        $option.='<option value="'.$type.'"'.($defaultype == $type?' selected':'');
+		        if (! function_exists($testfunction)) $option.=' disabled="disabled"';
+		        $option.='>';
+		        $option.=$type.'&nbsp; &nbsp;';
+		        if ($note) $option.=' '.$note;
+		        // Experimental
+		        if ($type=='pgsql')     $option.=' '.$langs->trans("Experimental");
+		        elseif ($type=='mssql') $option.=' '.$langs->trans("Experimental");
+		        // No available
+		        elseif (! function_exists($testfunction)) $option.=' - '.$langs->trans("FunctionNotAvailableInThisPHP");
+		        $option.='</option>';
+		    }
+		}
+
+		?> <select name='db_type'>
+		<?php echo $option ?>
+		</select> &nbsp;</td>
+
+		<td class="comment"><?php echo $langs->trans("DatabaseType"); ?></td>
+
+	</tr>
+
+	<tr>
+		<td valign="top" class="label"><b> <?php echo $langs->trans("Server"); ?>
+		</b></td>
+		<td valign="top" class="label"><input type="text" name="db_host"
+			value="<?php print (! empty($dolibarr_main_db_host))?$dolibarr_main_db_host:'localhost'; ?>">
+		<input type="hidden" name="base" value=""></td>
+		<td class="comment"><?php echo $langs->trans("ServerAddressDescription"); ?>
+		</td>
+
+	</tr>
+
+	<tr>
+		<td valign="top" class="label"><?php echo $langs->trans("Port"); ?></td>
+		<td valign="top" class="label"><input type="text" name="db_port"
+			value="<?php print (! empty($dolibarr_main_db_port))?$dolibarr_main_db_port:$force_install_port; ?>">
+		<input type="hidden" name="base" value=""></td>
+		<td class="comment"><?php echo $langs->trans("ServerPortDescription"); ?>
+		</td>
+
+	</tr>
+
+	<tr>
+		<td class="label" valign="top"><b> <?php echo $langs->trans("DatabaseName"); ?>
+		</b></td>
+
+		<td class="label" valign="top"><input type="text" name="db_name"
+			value="<?php echo (! empty($dolibarr_main_db_name))?$dolibarr_main_db_name:$force_install_database; ?>"></td>
+		<td class="comment"><?php echo $langs->trans("DatabaseName"); ?></td>
+	</tr>
+
+	<tr>
+		<td class="label" valign="top"><?php echo $langs->trans("CreateDatabase"); ?>
+		</td>
+
+		<td class="label" valign="top"><input type="checkbox"
+			name="db_create_database"
+			<?php if ($force_install_createdatabase) print ' checked="on"'; ?>></td>
+		<td class="comment"><?php echo $langs->trans("CheckToCreateDatabase"); ?>
+		</td>
+	</tr>
+
+	<tr>
+		<td class="label" valign="top"><b><?php echo $langs->trans("Login"); ?></b>
+		</td>
+		<td class="label" valign="top"><input type="text" name="db_user"
+			value="<?php print (! empty($dolibarr_main_db_user))?$dolibarr_main_db_user:$force_install_databaselogin; ?>"></td>
+		<td class="comment"><?php echo $langs->trans("AdminLogin"); ?></td>
+	</tr>
+
+	<tr>
+		<td class="label" valign="top"><b><?php echo $langs->trans("Password"); ?></b>
+		</td>
+		<td class="label" valign="top"><input type="password" name="db_pass"
+			value="<?php print (! empty($dolibarr_main_db_pass))?$dolibarr_main_db_pass:$force_install_databasepass; ?>"></td>
+		<td class="comment"><?php echo $langs->trans("AdminPassword"); ?></td>
+	</tr>
+
+	<tr>
+		<td class="label" valign="top"><?php echo $langs->trans("CreateUser"); ?>
+		</td>
+
+		<td class="label" valign="top"><input type="checkbox"
+			name="db_create_user"
+			<?php if (! empty($force_install_createuser)) print ' checked="on"'; ?>></td>
+		<td class="comment"><?php echo $langs->trans("CheckToCreateUser"); ?>
+		</td>
+	</tr>
+
+
+	<!-- Super access -->
+
+	<tr>
+		<td colspan="3" class="label" align="center"><br>
+		<h3><?php echo $langs->trans("DatabaseSuperUserAccess"); ?></h3>
+		</td>
+	</tr>
+
+	<tr>
+		<td class="label" valign="top"><?php echo $langs->trans("Login"); ?></td>
+		<td class="label" valign="top"><input type="text" name="db_user_root"
+			value="<?php print (! empty($db_user_root))?$db_user_root:$force_install_databaserootlogin; ?>"></td>
+		<td class="label">
+		<div class="comment"><?php echo $langs->trans("DatabaseRootLoginDescription"); ?>
+		</div>
+		</td>
+	</tr>
+
+	<tr>
+		<td class="label" valign="top"><?php echo $langs->trans("Password"); ?>
+		</td>
+		<td class="label" valign="top"><input type="password"
+			name="db_pass_root"
+			value="<?php print (! empty($db_pass_root))?$db_pass_root:$force_install_databaserootpass; ?>"></td>
+		<td class="label">
+		<div class="comment"><?php echo $langs->trans("KeepEmptyIfNoPassword"); ?>
+		</div>
+		</td>
+	</tr>
 
 </table>
 
diff --git a/htdocs/install/licence.php b/htdocs/install/licence.php
index 4bdf971bedb..407e08da415 100644
--- a/htdocs/install/licence.php
+++ b/htdocs/install/licence.php
@@ -1,6 +1,6 @@
 <?php
 /* Copyright (C) 2004      Rodolphe Quiedeville <rodolphe@quiedeville.org>
- * Copyright (C) 2005-2009 Laurent Destailleur  <eldy@users.sourceforge.net>
+ * Copyright (C) 2005-2010 Laurent Destailleur  <eldy@users.sourceforge.net>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,11 +18,11 @@
  */
 
 /**
-	    \file       htdocs/install/licence.php
-        \ingroup    install
-		\brief      Page affichage license
-		\version    $Id$
-*/
+ *	 \file       htdocs/install/licence.php
+ *   \ingroup    install
+ *	 \brief      Page affichage license
+ *	 \version    $Id$
+ */
 
 include_once("./inc.php");
 require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php");
@@ -39,21 +39,28 @@ dolibarr_install_syslog("Licence: Entering licence.php page");
 
 
 /*
-*	View
-*/
+ *	View
+ */
 
 pHeader($langs->trans("License"),"fileconf");
 
+// Test if we can run a first install process
+if (! is_writable($conffile))
+{
+    print $langs->trans("ConfFileIsNotWritable",'htdocs/conf/conf.php');
+    pFooter(1,$setuplang,'jscheckparam');
+    exit;
+}
 
 //print '<pre style="align: center; font-size: 12px">';
 $result=dol_print_file($langs,"html/gpl.html",1);
 if (! $result)
 {
-	print '<center>'."\n";
-	print '<textarea readonly="1" rows="26" cols="80">';
-	dol_print_file($langs,"html/gpl.txt",1);
-	print '</textarea>';
-	print '</center>'."\n";
+    print '<center>'."\n";
+    print '<textarea readonly="1" rows="26" cols="80">';
+    dol_print_file($langs,"html/gpl.txt",1);
+    print '</textarea>';
+    print '</center>'."\n";
 }
 //print '</pre>';
 
diff --git a/htdocs/lib/functions2.lib.php b/htdocs/lib/functions2.lib.php
index 72c80b38309..c7b3fe14838 100644
--- a/htdocs/lib/functions2.lib.php
+++ b/htdocs/lib/functions2.lib.php
@@ -27,10 +27,11 @@
 
 
 /**
- *  \brief      Renvoi le fichier $filename dans la version de la langue courante, sinon alternative
- *  \param      filename        nom du fichier a rechercher
- *  \param      searchalt       cherche aussi dans langue alternative
- *	\return		boolean
+ *  Output content of a file $filename in version of current language (otherwise may use an alternate language)
+ *  @param      langs           Object language to use for output
+ *  @param      filename        Relative filename to output
+ *  @param      searchalt       1=Search also in alternative languages
+ *	@return		boolean
  */
 function dol_print_file($langs,$filename,$searchalt=0)
 {
@@ -40,7 +41,7 @@ function dol_print_file($langs,$filename,$searchalt=0)
 	foreach($langs->dir as $searchdir)
 	{
 		$htmlfile=($searchdir."/langs/".$langs->defaultlang."/".$filename);
-		dol_syslog('Translate::print_file search file '.$htmlfile, LOG_DEBUG);
+		dol_syslog('functions2::dol_print_file search file '.$htmlfile, LOG_DEBUG);
 		if (is_readable($htmlfile))
 		{
 			$content=file_get_contents($htmlfile);
@@ -50,13 +51,13 @@ function dol_print_file($langs,$filename,$searchalt=0)
 			else print $content;
 			return true;
 		}
-		else dol_syslog('Translate::print_file not found', LOG_DEBUG);
+		else dol_syslog('functions2::dol_print_file not found', LOG_DEBUG);
 
 		if ($searchalt) {
 			// Test si fichier dans repertoire de la langue alternative
 			if ($langs->defaultlang != "en_US") $htmlfilealt = $searchdir."/langs/en_US/".$filename;
 			else $htmlfilealt = $searchdir."/langs/fr_FR/".$filename;
-			dol_syslog('Translate::print_file search alt file '.$htmlfilealt, LOG_DEBUG);
+			dol_syslog('functions2::dol_print_file search alt file '.$htmlfilealt, LOG_DEBUG);
 			//print 'getcwd='.getcwd().' htmlfilealt='.$htmlfilealt.' X '.file_exists(getcwd().'/'.$htmlfilealt);
 			if (is_readable($htmlfilealt))
 			{
@@ -67,7 +68,7 @@ function dol_print_file($langs,$filename,$searchalt=0)
 				else print $content;
 				return true;
 			}
-			else dol_syslog('Translate::print_file not found', LOG_DEBUG);
+			else dol_syslog('functions2::dol_print_file not found', LOG_DEBUG);
 		}
 	}
 
-- 
GitLab