diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index f57a113d44f..985fe4d7379 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -81,6 +81,12 @@ require_once("master.inc.php"); $bc[0]="class=\"impair\""; $bc[1]="class=\"pair\""; +// Init session +$sessionname="DOLSESSID_".$dolibarr_main_db_name; +session_name($sessionname); +session_start(); +dolibarr_syslog("Session name=".$sessionname." Session id()=".session_id().", _SESSION['dol_login']=".$_SESSION["dol_login"]); + /* * Phase identification */ @@ -88,19 +94,46 @@ $bc[1]="class=\"pair\""; // $authmode contient la liste des différents modes d'identification à tester // par ordre de préférence. Attention, rares sont les combinaisons possibles si // plusieurs modes sont indiqués. -// Exemple: array('http','dolibarr'); -// Exemple: array('ldap'); +// Example: array('http','dolibarr'); +// Example: array('http','dolibarr_mdb2'); +// Example: array('ldap'); +// Example: array('forceuser'); +$authmode=array(); -//$authmode=array('ldap'); -//$authmode=array('http','dolibarr_mdb2'); -$authmode=array('http','dolibarr'); - -if (isset($dolibarr_auto_user)) $authmode=array('auto'); - -$sessionname="DOLSESSID_".$dolibarr_main_db_name; -session_name($sessionname); -session_start(); -dolibarr_syslog("Session name=".$sessionname." Session id()=".session_id().", _SESSION['dol_login']=".$_SESSION["dol_login"]); +// Authentication mode: http +if (! $dolibarr_main_authentication || $dolibarr_main_authentication == 'http') +{ + // Mode par defaut, on test http + dolibarr + $authmode=array('http','dolibarr'); +} +// Authentication mode: dolibarr +if ($dolibarr_main_authentication == 'dolibarr') +{ + $authmode=array('dolibarr'); +} +// Authentication mode: dolibarr_mdb2 +if ($dolibarr_main_authentication == 'dolibarr_mdb2') +{ + $authmode=array('dolibarr_mdb2'); +} +// Authentication mode: ldap +if ($dolibarr_main_authentication == 'ldap') +{ + $authmode=array('ldap'); +} +// Authentication mode: forceuser +if ($dolibarr_main_authentication == 'forceuser' || isset($dolibarr_auto_user)) +{ + $authmode=array('forceuser'); + if (! isset($dolibarr_auto_user)) $dolibarr_auto_user='auto'; +} +// No authentication mode +if (! sizeof($authmode)) +{ + $langs->load('main'); + dolibarr_print_error('',$langs->trans("ErrorConfigParameterNotDefined",'dolibarr_main_authentication')); + exit; +} // Si la demande du login a déjà eu lieu, on le récupère depuis la session // sinon appel du module qui réalise sa demande. @@ -113,10 +146,10 @@ if (! session_id() || ! isset($_SESSION["dol_login"])) // en session dans dol_login et la page rappelée. // MODE AUTO - if (in_array('auto',$authmode) && ! $login) + if (in_array('forceuser',$authmode) && ! $login) { $login=$dolibarr_auto_user; - dolibarr_syslog ("Authentification ok (en mode force)"); + dolibarr_syslog ("Authentification ok (en mode force, login=".$login.")"); } // MODE HTTP (Basic) @@ -178,8 +211,8 @@ if (! session_id() || ! isset($_SESSION["dol_login"])) } } - // MODE DOLIBARR MDB2 - // Ajout du mode MDB2 pour test uniquement + // MODE DOLIBARR MDB2 + // Ajout du mode MDB2 pour test uniquement if (in_array('dolibarr_mdb2',$authmode) && ! $login) { require_once(PEAR_PATH."/Auth/Auth.php"); @@ -232,38 +265,55 @@ if (! session_id() || ! isset($_SESSION["dol_login"])) } // MODE LDAP - if ($conf->ldap->enabled && in_array('ldap',$authmode) && ! $login) + if (in_array('ldap',$authmode) && ! $login) { - // Authentification Apache KO ou non active, pas de mode force on demande le login + // Authentification Apache KO ou non active, pas de mode force on demande le login require_once(PEAR_PATH."/Auth/Auth.php"); - $ldapdebug=false; - if ($ldapdebug) print "DEBUG: Traces connexions LDAP
\n"; - - if ($conf->global->LDAP_SERVER_TYPE == "activedirectory") - { - $userattr = $conf->global->LDAP_FIELD_LOGIN_SAMBA; - } - else - { - $userattr = $conf->global->LDAP_FIELD_LOGIN; - } - + $ldapuserattr=$dolibarr_main_auth_ldap_login_attribute; + $ldaphost=$dolibarr_main_auth_ldap_host; + $ldapport=$dolibarr_main_auth_ldap_port; + $ldapversion=(int) $dolibarr_main_auth_ldap_version; // Si pas de int, PEAR LDAP plante. + $ldapdn=$dolibarr_main_auth_ldap_dn; + $ldaplogin=$dolibarr_main_auth_ldap_admin_login; + $ldappass=$dolibarr_main_auth_ldap_admin_pass; + $ldapdebug=((! $dolibarr_main_auth_ldap_debug || $dolibarr_main_auth_ldap_debug=="false")?false:true); + + if ($ldapdebug) print "DEBUG: Logging LDAP steps
\n"; + + // Debut code pour compatibilite (prend info depuis config en base) + if (! $ldapuserattr && $conf->ldap->enabled) + { + if ($conf->global->LDAP_SERVER_TYPE == "activedirectory") + { + $ldapuserattr = $conf->global->LDAP_FIELD_LOGIN_SAMBA; + } + else + { + $ldapuserattr = $conf->global->LDAP_FIELD_LOGIN; + } + } + if (! $ldaphost) $ldaphost=$conf->global->LDAP_SERVER_HOST; + if (! $ldapport) $ldapport=$conf->global->LDAP_SERVER_PORT; + if (! $ldapversion) $ldapport=(int) $conf->global->LDAP_SERVER_PROTOCOLVERSION; + if (! $ldapdn) $ldapdn=$conf->global->LDAP_SERVER_DN; + if (! $ldapadminlogin) $ldapadminlogin=$conf->global->LDAP_ADMIN_DN; + if (! $ldapadminpass) $ldapadminpass=$conf->global->LDAP_ADMIN_PASS; + // Fin code pour compatiblité + $params = array( - 'host' => $conf->global->LDAP_SERVER_HOST, - 'port' => $conf->global->LDAP_SERVER_PORT, - 'version' => 3, - 'basedn' => $conf->global->LDAP_SERVER_DN, - 'binddn' => $conf->global->LDAP_ADMIN_DN, - 'bindpw' => $conf->global->LDAP_ADMIN_PASS, + 'userattr' => $ldapuserattr, + 'host' => $ldaphost, + 'port' => $ldapport, + 'version' => $ldapversion, + 'basedn' => $ldapdn, + 'binddn' => $ldapadminlogin, + 'bindpw' => $ldapadminpass, 'debug' => $ldapdebug, - - 'userattr' => $userattr, - -// 'userfilter' => $conf->global->LDAP_FILTER_CONNECTION 'userfilter' => '' ); + if ($ldapdebug) print "DEBUG: params=".join(',',$params)."
\n"; $aDol = new DOLIAuth("LDAP", $params, "dol_loginfunction"); $aDol->setSessionName($sessionname); @@ -274,7 +324,7 @@ if (! session_id() || ! isset($_SESSION["dol_login"])) // Authentification Auth OK, on va chercher le login $login=$aDol->getUsername(); dolibarr_syslog ("Authentification ok (en mode Pear Base LDAP)"); - } + } else { if (isset($_POST["loginfunction"])) @@ -295,7 +345,17 @@ if (! session_id() || ! isset($_SESSION["dol_login"])) $result=$user->fetch($login); if ($result <= 0) { - dolibarr_print_error($db,$langs->trans("ErrorCantLoadUserFromDolibarrDatabase")); + //$langs->load('main'); + //dolibarr_print_error($db,$langs->trans("ErrorCantLoadUserFromDolibarrDatabase",$login)); + dolibarr_syslog('ErrorCantLoadUserFromDolibarrDatabase'); + session_destroy(); + + // On repart sur page accueil + session_name($sessionname); + session_start(); + $langs->load('main'); + $_SESSION["loginmesg"]=$langs->trans("ErrorCantLoadUserFromDolibarrDatabase",$login); + header('Location: '.DOL_URL_ROOT.'/index.php'); exit; } }