diff --git a/lam-0.4/lib/account.inc b/lam-0.4/lib/account.inc index 0b63794a..fd049334 100644 --- a/lam-0.4/lib/account.inc +++ b/lam-0.4/lib/account.inc @@ -1388,10 +1388,9 @@ function createuser($values, $uselamdaemon=true) { $attr['sambaLMPassword'] = 'NO PASSWORD*****'; } else { - // use escapeshellarg() to make command shell-secure // Set samba-passwords with external perl-script - $attr['sambaNTPassword'] = exec(escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." nt ".escapeshellarg($values->smb_password)); - $attr['sambaLMPassword'] = exec(escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." lm ".escapeshellarg($values->smb_password)); + $attr['sambaNTPassword'] = getNTPasswordHash($values->smb_password); + $attr['sambaLMPassword'] = getLMPasswordHash($values->smb_password); } $attr['sambaPwdLastSet'] = time(); // Generate SID @@ -1425,10 +1424,9 @@ function createuser($values, $uselamdaemon=true) { $attr['lmPassword'] = 'NO PASSWORD*****'; } else { - // use escapeshellarg() to make command shell-secure // Set samba-passwords with external perl-script - $attr['ntPassword'] = exec(escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." nt ".escapeshellarg($values->smb_password)); - $attr['lmPassword'] = exec(escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." lm ".escapeshellarg($values->smb_password)); + $attr['ntPassword'] = getNTPasswordHash($values->smb_password); + $attr['lmPassword'] = getLMPasswordHash($values->smb_password); } $attr['pwdLastSet'] = time(); // Generate pseudo SID @@ -1697,10 +1695,9 @@ function modifyuser($values,$values_old,$uselamdaemon=true) { // Will modify the } else if ($values->smb_password!='') { - // use escapeshellarg() to make command shell-secure // Set samba-passwords with external perl-script - $attr['sambaNTPassword'] = exec(escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." nt ".escapeshellarg($values->smb_password)); - $attr['sambaLMPassword'] = exec(escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." lm ".escapeshellarg($values->smb_password)); + $attr['sambaNTPassword'] = getNTPasswordHash($values->smb_password); + $attr['sambaLMPassword'] = getLMPasswordHash($values->smb_password); $attr['sambaPwdLastSet'] = time(); // sambaAccount_may } // Check which Samba-Attributes have changed @@ -1793,10 +1790,9 @@ function modifyuser($values,$values_old,$uselamdaemon=true) { // Will modify the } else if ($values->smb_password!='') { - // use escapeshellarg() to make command shell-secure // Set samba-passwords with external perl-script - $attr['ntPassword'] = exec(escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." nt ".escapeshellarg($values->smb_password)); - $attr['lmPassword'] = exec(escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." lm ".escapeshellarg($values->smb_password)); + $attr['ntPassword'] = getNTPasswordHash($values->smb_password); + $attr['lmPassword'] = getLMPasswordHash($values->smb_password); $attr['pwdLastSet'] = time(); // sambaAccount_may } // Check which Samba-Attributes have changed @@ -2036,9 +2032,9 @@ function createhost($values) { if ($_SESSION['config']->is_samba3()) { // Add all attributes as samba3 objectclass $attr['objectClass'][] = 'sambaSamAccount'; - // "Standard" password for new hosts - $attr['sambaNTPassword'] = '7DC46419FE56BD28F7587D05D06791D4'; - $attr['sambaLMPassword'] = '206893E4C077CE5E27BCBF149915A329'; + // password for new hosts is hostname + $attr['sambaNTPassword'] = getNTPasswordHash(substr($values->general_username, 0, strlen($values->general_username) - 1)); + $attr['sambaLMPassword'] = getLMPasswordHash(substr($values->general_username, 0, strlen($values->general_username) - 1)); $attr['sambaPwdLastSet'] = time(); // sambaAccount_may $attr['sambaSID'] = $values->smb_domain->SID . "-" . (2 * $values->general_uidNumber + $values->smb_domain->RIDbase); // sambaAccount_may $attr['sambaPrimaryGroupSID'] = $values->smb_domain->SID . "-515"; // sambaAccount_req @@ -2050,9 +2046,9 @@ function createhost($values) { else { // Add all attributes as samba2.2 objectclass $attr['objectClass'][] = 'sambaAccount'; - // "Standard" password for new hosts - $attr['ntPassword'] = '7DC46419FE56BD28F7587D05D06791D4'; - $attr['lmPassword'] = '206893E4C077CE5E27BCBF149915A329'; + // password for new hosts is hostname + $attr['ntPassword'] = getNTPasswordHash(substr($values->general_username, 0, strlen($values->general_username) - 1)); + $attr['lmPassword'] = getLMPasswordHash(substr($values->general_username, 0, strlen($values->general_username) - 1)); $attr['pwdLastSet'] = time(); // sambaAccount_may $attr['rid'] = (2 * $values->general_uidNumber + 1000); // sambaAccount_may $attr['primaryGroupID'] = (2 * getgid($values->general_group) + 1001); // sambaAccount_req @@ -2179,9 +2175,9 @@ function modifyhost($values,$values_old) { } // Reset password if ($values->smb_flags['N']) { - // "Standard" password for new hosts - $attr['sambaNTPassword'] = '7DC46419FE56BD28F7587D05D06791D4'; - $attr['sambaLMPassword'] = '206893E4C077CE5E27BCBF149915A329'; + // password for new hosts is hostname + $attr['sambaNTPassword'] = getNTPasswordHash(substr($values->general_username, 0, strlen($values->general_username) - 1)); + $attr['sambaLMPassword'] = getLMPasswordHash(substr($values->general_username, 0, strlen($values->general_username) - 1)); $attr['sambaPwdLastSet'] = time(); // sambaAccount_may } if ($values->smb_domain->name!=$values_old->smb_domain->name) { @@ -2246,9 +2242,9 @@ function modifyhost($values,$values_old) { if (isset($attr_old['sambaSID'][0])) $attr_rem['sambaSID'] = $attr_old['sambaSID'][0]; } if ($values->smb_flags['N']) { - // "Standard" password for new hosts - $attr['ntPassword'] = '7DC46419FE56BD28F7587D05D06791D4'; - $attr['lmPassword'] = '206893E4C077CE5E27BCBF149915A329'; + // password for new hosts is hostname + $attr['ntPassword'] = getNTPasswordHash(substr($values->general_username, 0, strlen($values->general_username) - 1)); + $attr['lmPassword'] = getLMPasswordHash(substr($values->general_username, 0, strlen($values->general_username) - 1)); $attr['pwdLastSet'] = time(); // sambaAccount_may } if (isset($attr_old['sambaSID'][0])) $attr_rem['sambaSID'] = $attr_old['sambaSID'][0]; @@ -2483,5 +2479,34 @@ function modifygroup($values,$values_old, $uselamdaemon=true) { return 3; } +/** +* Returns the nt password hash of a given password. +* $password: The cleartext password +*/ +function getNTPasswordHash($password) { + // if Perl is installed in default directory use it + if (file_exists("/usr/bin/perl")) { + return exec('/usr/bin/perl ' . escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." nt ".escapeshellarg($password)); + } + // otherwise use Perl in search path + else { + return exec('perl ' . escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." nt ".escapeshellarg($password)); + } +} + +/** +* Returns the lanman password hash of a given password. +* $password: The cleartext password +*/ +function getLMPasswordHash($password) { + // if Perl is installed in default directory use it + if (file_exists("/usr/bin/perl")) { + return exec('/usr/bin/perl ' . escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." lm ".escapeshellarg($password)); + } + // otherwise use Perl in search path + else { + return exec('perl ' . escapeshellarg($_SESSION['lampath'].'lib/createntlm.pl')." lm ".escapeshellarg($password)); + } +} ?>