38 if ($mode ==
'user') {
39 $t = getenv(
'APACHE_RUN_USER');
41 if ($mode ==
'group') {
42 $t = getenv(
'APACHE_RUN_GROUP');
63 if ($entitytotest ==
'') {
67 dol_syslog(
"checkLoginPassEntity usertotest=".$usertotest.
" entitytotest=".$entitytotest.
" authmode=".join(
',', $authmode));
73 foreach ($authmode as $mode) {
74 if ($test && $mode && !$login) {
77 $authfile =
'functions_'.$mode.
'.php';
80 $dirlogin = array_merge(array(
"/core/login"), (array) $conf->modules_parts[
'login']);
81 foreach ($dirlogin as $reldir) {
86 $tmpnewauthfile = $newdir.(preg_match(
'/\/$/', $newdir) ?
'' :
'/').$authfile;
87 if (is_file($tmpnewauthfile)) {
88 $fullauthfile = $tmpnewauthfile;
94 $result = include_once $fullauthfile;
96 if ($fullauthfile && $result) {
98 $function =
'check_user_password_'.$mode;
99 $login = call_user_func($function, $usertotest, $passwordtotest, $entitytotest, $context);
100 if ($login && $login !=
'--bad-login-validity--') {
102 $conf->authmode = $mode;
105 $dol_screenwidth =
GETPOST(
'screenwidth');
106 $dol_screenheight =
GETPOST(
'screenheight');
109 dol_syslog(
"Authentication KO - failed to load file '".$authfile.
"'", LOG_ERR);
112 $langs->loadLangs(array(
'other',
'main',
'errors'));
114 $_SESSION[
"dol_loginmesg"] = (empty($_SESSION[
"dol_loginmesg"]) ?
'' : $_SESSION[
"dol_loginmesg"].
', ').$langs->transnoentitiesnoconv(
"ErrorFailedToLoadLoginFileForMode", $mode);
124 if (!function_exists(
'dol_loginfunction')) {
134 function dol_loginfunction($langs, $conf, $mysoc)
136 global $dolibarr_main_demo, $dolibarr_main_force_https;
137 global $db, $hookmanager;
139 $langs->loadLangs(array(
"main",
"other",
"help",
"admin"));
142 $hookmanager->initHooks(array(
'mainloginpage'));
144 $main_authentication = $conf->file->main_authentication;
146 $session_name = session_name();
151 $appli = constant(
'DOL_APPLICATION_TITLE');
152 $title = $appli.
' '.constant(
'DOL_VERSION');
153 if (!empty($conf->global->MAIN_APPLICATION_TITLE)) {
154 $title = $conf->global->MAIN_APPLICATION_TITLE;
156 $titletruedolibarrversion = constant(
'DOL_VERSION');
177 if (!empty($conf->modules_parts[
'tpl'])) {
178 $dirtpls = array_merge($conf->modules_parts[
'tpl'], array(
'/core/tpl/'));
179 foreach ($dirtpls as $reldir) {
181 if (file_exists($tmp)) {
182 $template_dir = preg_replace(
'/login\.tpl\.php$/',
'', $tmp);
187 $template_dir = DOL_DOCUMENT_ROOT.
"/core/tpl/";
192 $prefix = dol_getprefix(
'');
193 $sessiontimeout =
'DOLSESSTIMEOUT_'.$prefix;
194 if (!empty($conf->global->MAIN_SESSION_TIMEOUT)) {
195 setcookie($sessiontimeout, $conf->global->MAIN_SESSION_TIMEOUT, 0,
"/",
null, (empty($dolibarr_main_force_https) ?
false :
true),
true);
198 if (
GETPOST(
'urlfrom',
'alpha')) {
199 $_SESSION[
"urlfrom"] =
GETPOST(
'urlfrom',
'alpha');
201 unset($_SESSION[
"urlfrom"]);
204 if (!
GETPOST(
"username",
'alpha')) {
205 $focus_element =
'username';
207 $focus_element =
'password';
212 if (!empty($dolibarr_main_demo)) {
213 $tab = explode(
',', $dolibarr_main_demo);
214 $demologin = $tab[0];
215 $demopassword = $tab[1];
219 $parameters = array(
'entity' =>
GETPOST(
'entity',
'int'),
'switchentity' =>
GETPOST(
'switchentity',
'int'));
220 $reshook = $hookmanager->executeHooks(
'getLoginPageOptions', $parameters);
221 $morelogincontent = $hookmanager->resPrint;
224 $parameters = array(
'entity' =>
GETPOST(
'entity',
'int'),
'switchentity' =>
GETPOST(
'switchentity',
'int'));
225 $reshook = $hookmanager->executeHooks(
'getLoginPageExtraOptions', $parameters);
226 $moreloginextracontent = $hookmanager->resPrint;
229 $parameters = array(
'entity' =>
GETPOST(
'entity',
'int'),
'switchentity' =>
GETPOST(
'switchentity',
'int'));
230 $reshook = $hookmanager->executeHooks(
'redirectAfterConnection', $parameters);
231 $php_self = $hookmanager->resPrint;
234 $login = (!empty($hookmanager->resArray[
'username']) ? $hookmanager->resArray[
'username'] : (
GETPOST(
"username",
"alpha") ?
GETPOST(
"username",
"alpha") : $demologin));
235 $password = $demopassword;
239 $urllogo = DOL_URL_ROOT.
'/theme/common/login_logo.png';
241 if (!empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$mysoc->logo_small)) {
242 $urllogo = DOL_URL_ROOT.
'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode(
'logos/thumbs/'.$mysoc->logo_small);
243 } elseif (!empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$mysoc->logo)) {
244 $urllogo = DOL_URL_ROOT.
'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode(
'logos/'.$mysoc->logo);
246 } elseif (!empty($mysoc->logo_squarred_small) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$mysoc->logo_squarred_small)) {
247 $urllogo = DOL_URL_ROOT.
'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode(
'logos/thumbs/'.$mysoc->logo_squarred_small);
248 } elseif (is_readable(DOL_DOCUMENT_ROOT.
'/theme/dolibarr_logo.svg')) {
249 $urllogo = DOL_URL_ROOT.
'/theme/dolibarr_logo.svg';
254 $captcha_refresh =
'';
255 if (function_exists(
"imagecreatefrompng") && !empty($conf->global->MAIN_SECURITY_ENABLECAPTCHA)) {
257 $captcha_refresh =
img_picto($langs->trans(
"Refresh"),
'refresh',
'id="captcha_refresh_img"');
263 if (empty($conf->global->MAIN_SECURITY_DISABLEFORGETPASSLINK) || empty($conf->global->MAIN_HELPCENTER_DISABLELINK)) {
264 if (empty($conf->global->MAIN_SECURITY_DISABLEFORGETPASSLINK)) {
268 if (empty($conf->global->MAIN_HELPCENTER_DISABLELINK)) {
275 if (!empty($conf->global->MAIN_HOME)) {
278 $texttoshow =
make_substitutions($conf->global->MAIN_HOME, $substitutionarray, $langs);
284 $main_google_ad_client = ((!empty($conf->global->MAIN_GOOGLE_AD_CLIENT) && !empty($conf->global->MAIN_GOOGLE_AD_SLOT)) ? 1 : 0);
287 $dol_loginmesg = (!empty($_SESSION[
"dol_loginmesg"]) ? $_SESSION[
"dol_loginmesg"] :
'');
289 $favicon = DOL_URL_ROOT.
'/theme/dolibarr_256x256_color.png';
290 if (!empty($mysoc->logo_squarred_mini)) {
291 $favicon = DOL_URL_ROOT.
'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode(
'logos/thumbs/'.$mysoc->logo_squarred_mini);
293 if (!empty($conf->global->MAIN_FAVICON_URL)) {
294 $favicon = $conf->global->MAIN_FAVICON_URL;
297 $jquerytheme =
'base';
298 if (!empty($conf->global->MAIN_USE_JQUERY_THEME)) {
299 $jquerytheme = $conf->global->MAIN_USE_JQUERY_THEME;
303 $dol_hide_topmenu =
GETPOST(
'dol_hide_topmenu',
'int');
304 $dol_hide_leftmenu =
GETPOST(
'dol_hide_leftmenu',
'int');
305 $dol_optimize_smallscreen =
GETPOST(
'dol_optimize_smallscreen',
'int');
306 $dol_no_mouse_hover =
GETPOST(
'dol_no_mouse_hover',
'int');
307 $dol_use_jmobile =
GETPOST(
'dol_use_jmobile',
'int');
310 include $template_dir.
'login.tpl.php';
315 $_SESSION[
"dol_loginmesg"] =
'';
350 $salt .= chr(mt_rand(64, 126));
353 $result = $saltprefix.$salt.$saltsuffix;
366 dol_syslog(
"encodedecode_dbpassconf level=".$level, LOG_DEBUG);
369 $passwd_crypted =
'';
371 if ($fp = fopen(DOL_DOCUMENT_ROOT.
'/conf/conf.php',
'r')) {
373 $buffer = fgets($fp, 4096);
377 if (preg_match(
'/^[^#]*dolibarr_main_db_encrypted_pass[\s]*=[\s]*(.*)/i', $buffer, $reg)) {
378 $val = trim($reg[1]);
379 $val = preg_replace(
'/^["\']/',
'', $val);
380 $val = preg_replace(
'/["\'][\s;]*$/',
'', $val);
382 $passwd_crypted = $val;
387 } elseif (preg_match(
'/^[^#]*dolibarr_main_db_pass[\s]*=[\s]*(.*)/i', $buffer, $reg)) {
388 $val = trim($reg[1]);
389 $val = preg_replace(
'/^["\']/',
'', $val);
390 $val = preg_replace(
'/["\'][\s;]*$/',
'', $val);
391 if (preg_match(
'/crypted:/i', $buffer)) {
392 $val = preg_replace(
'/crypted:/i',
'', $val);
393 $passwd_crypted = $val;
399 $passwd_crypted = $val;
408 $config .=
'$dolibarr_main_db_pass=\''.$passwd.
'\';
'."\n";
411 $config .= '$dolibarr_main_db_pass=\
'crypted:'.$passwd_crypted.
'\';
'."\n";
414 //print 'passwd =
'.$passwd.' - passwd_crypted =
'.$passwd_crypted;
422 // Write new conf file
423 $file = DOL_DOCUMENT_ROOT.'/
conf/
conf.php
';
424 if ($fp = @fopen($file, 'w
')) {
430 // It's config file, so we
set read permission
for creator only.
436 dol_syslog(
"encodedecode_dbpassconf Failed to open conf.php file for writing", LOG_WARNING);
440 dol_syslog(
"encodedecode_dbpassconf Failed to read conf.php", LOG_ERR);
456 global $db, $conf, $langs, $user;
458 $generated_password =
'';
460 $lowercase =
"qwertyuiopasdfghjklzxcvbnm";
461 $uppercase =
"ASDFGHJKLZXCVBNMQWERTYUIOP";
462 $numbers =
"1234567890";
464 $nbofchar = round($length / 3);
465 $nbofcharlast = ($length - 2 * $nbofchar);
467 if (function_exists(
'random_int')) {
468 $max = strlen($lowercase) - 1;
469 for ($x = 0; $x < $nbofchar; $x++) {
470 $tmp = random_int(0, $max);
471 $randomCode .= $lowercase[$tmp];
473 $max = strlen($uppercase) - 1;
474 for ($x = 0; $x < $nbofchar; $x++) {
475 $tmp = random_int(0, $max);
476 $randomCode .= $uppercase[$tmp];
478 $max = strlen($numbers) - 1;
479 for ($x = 0; $x < $nbofcharlast; $x++) {
480 $tmp = random_int(0, $max);
481 $randomCode .= $numbers[$tmp];
484 $generated_password = str_shuffle($randomCode);
487 $max = strlen($lowercase) - 1;
488 for ($x = 0; $x < $nbofchar; $x++) {
489 $tmp = mt_rand(0, $max);
490 $randomCode .= $lowercase[$tmp];
492 $max = strlen($uppercase) - 1;
493 for ($x = 0; $x < $nbofchar; $x++) {
494 $tmp = mt_rand(0, $max);
495 $randomCode .= $uppercase[$tmp];
497 $max = strlen($numbers) - 1;
498 for ($x = 0; $x < $nbofcharlast; $x++) {
499 $tmp = mt_rand(0, $max);
500 $randomCode .= $numbers[$tmp];
503 $generated_password = str_shuffle($randomCode);
505 } elseif (!empty($conf->global->USER_PASSWORD_GENERATED)) {
506 $nomclass =
"modGeneratePass".ucfirst($conf->global->USER_PASSWORD_GENERATED);
507 $nomfichier = $nomclass.
".class.php";
509 require_once DOL_DOCUMENT_ROOT.
"/core/modules/security/generate/".$nomfichier;
510 $genhandler =
new $nomclass($db, $conf, $langs, $user);
511 $generated_password = $genhandler->getNewGeneratedPassword();
516 if (is_array($replaceambiguouschars) && count($replaceambiguouschars) > 0) {
518 $max = strlen($numbers) - 1;
519 if (function_exists(
'random_int')) {
520 $tmp = random_int(0, $max);
521 $generated_password = str_replace($replaceambiguouschars, $numbers[$tmp], $generated_password);
523 $tmp = mt_rand(0, $max);
524 $generated_password = str_replace($replaceambiguouschars, $numbers[$tmp], $generated_password);
528 return $generated_password;