From 3f1a6467975c2be518d232bdb486b29d9aab7b44 Mon Sep 17 00:00:00 2001 From: katagia Date: Tue, 21 Oct 2003 13:40:13 +0000 Subject: [PATCH] checked account.inc, hostedit.php and groupedit.php for bugs and added comments to make the code more understandable --- lam/lib/account.inc | 25 +- lam/templates/account/groupedit.php | 427 +++++++++++++------------ lam/templates/account/hostedit.php | 474 ++++++++++++---------------- lam/templates/account/useredit.php | 11 +- lam/templates/delete.php | 1 + lam/templates/masscreate.php | 10 +- 6 files changed, 455 insertions(+), 493 deletions(-) diff --git a/lam/lib/account.inc b/lam/lib/account.inc index 2f787206..182a5ee2 100644 --- a/lam/lib/account.inc +++ b/lam/lib/account.inc @@ -624,37 +624,37 @@ function checkid($values, $values_old=false) { // Store highest id-number $id = $uids[count($uids)-1]; // Return minimum allowed id-number if all found id-numbers are too low - if ($id < $minID) return intval($minID); + if ($id < $minID) return implode(':', array($minID, '')); // Return higesht used id-number + 1 if it's still in valid range - if ($id < $maxID) return intval($id)+1; + if ($id < $maxID) return implode(':', array( $id+1, '')); /* If this function is still running we have to fid a free id-number between * the used id-numbers */ $i = intval($minID); while (in_array($i, $uids)) $i++; - if ($i>$maxID) return _('No free ID-Number!'); - else return $i; + if ($i>$maxID) return implode(':', array($values->general_uidNumber , implode(';', array('ERROR', _('ID-Number'), _('No free ID-Number!'))))); + else return implode(':', array($i, implode(';', array('WARN', _('ID-Number'), _('It\'s possible id-number is reused.'))))); } - else return intval($minID); + else return implode(':', array($minID, '')); // return minimum allowed id-number if no id-numbers are found } - else return intval($values_old->general_uidNumber); + else return implode(':', array($values_old->general_uidNumber, '')); // old account -> return id-number which has been used } else { // Check manual ID // id-number is out of valid range - if ( $values->general_uidNumber < $minID || $values->general_uidNumber > $maxID) return sprintf(_('Please enter a value between %s and %s!'), $minID, $maxID); + if ( $values->general_uidNumber < $minID || $values->general_uidNumber > $maxID) return implode(':', array($values->general_uidNumber, implode(';', array('ERROR', _('ID-Number'), sprintf(_('Please enter a value between %s and %s!'), $minID, $maxID))))); // $uids is allways an array but not if no entries were found if (is_array($uids)) { // id-number is in use and account is a new account - if ((in_array($values->general_uidNumber, $uids)) && !$values_old) return _('ID is already in use'); + if ((in_array($values->general_uidNumber, $uids)) && !$values_old) return implode(':', array($values->general_uidNumber, implode(';', array('ERROR', _('ID-Number'), _('ID is already in use'))))); // id-number is in use, account is existing account and id-number is not used by itself if ((in_array($values->general_uidNumber, $uids)) && $values_old && ($values_old->general_uidNumber != $values->general_uidNumber) ) - return _('ID is already in use'); + return implode(':', array($values_old->general_uidNumber, implode(';', array('ERROR', _('ID-Number'), _('ID is already in use'))))); } // return id-number if everything is OK - return intval($values->general_uidNumber); + return implode(':', array($values->general_uidNumber, '')); } } @@ -874,6 +874,9 @@ function loadhost($dn) { $return->general_dn = (ldap_get_dn($_SESSION['ldap']->server(), $entry)); $attr = ldap_get_attributes($_SESSION['ldap']->server(), $entry); + // Set host samba flags + $return->smb_flagsW = 1; + $return->smb_flagsX = 1; // load objectclasses $i=0; while (isset($attr['objectClass'][$i])) { @@ -2088,4 +2091,4 @@ function modifygroup($values,$values_old) { } -?> \ No newline at end of file +?> diff --git a/lam/templates/account/groupedit.php b/lam/templates/account/groupedit.php index b70ae97b..b5bb220b 100644 --- a/lam/templates/account/groupedit.php +++ b/lam/templates/account/groupedit.php @@ -23,6 +23,7 @@ $Id$ LDAP Account Manager displays table for creating or modifying accounts in LDAP */ +// include all needed files include_once('../../lib/account.inc'); // File with all account-funtions include_once('../../lib/config.inc'); // File with configure-functions include_once('../../lib/profiles.inc'); // functions to load and save profiles @@ -30,10 +31,17 @@ include_once('../../lib/status.inc'); // Return error-message include_once('../../lib/pdf.inc'); // Return a pdf-file include_once('../../lib/ldap.inc'); // LDAP-functions +// Start session session_save_path('../../sess'); @session_start(); +// Set correct language, codepages, .... setlanguage(); +/* hostaccount.php is using dynamic session varialenames so +* we can run several copies of hostaccount.php at the same +* time +* $varkey is the dynamic part of the variable name +*/ if (!isset($_POST['varkey'])) $varkey = session_id().time(); else $varkey = $_POST['varkey']; @@ -44,44 +52,55 @@ if (!isset($_SESSION['account_'.$varkey.'_final_changegids'])) $_SESSION['accoun $account_new =& $_SESSION['account_'.$varkey.'_account_new']; $final_changegids =& $_SESSION['account_'.$varkey.'_final_changegids']; if (is_object($_SESSION['account_'.$varkey.'_account_old'])) $account_old =& $_SESSION['account_'.$varkey.'_account_old']; - $ldap_intern =& $_SESSION['ldap']; $config_intern =& $_SESSION['config']; $header_intern =& $_SESSION['header']; $userDN_intern =& $_SESSION['userDN']; +// Register Post-Variables as reference -if (isset($_POST['select'])) $select =& $_POST['select']; -if (isset($_POST['load'])) $load =& $_POST['load']; - +// $_GET is only valid if groupedit.php was called from grouplist.php if (isset($_GET['DN']) && $_GET['DN']!='') { + // groupedit.php should edit an existing account + // reset variables if (isset($_SESSION['account_'.$varkey.'_account_old'])) { unset($account_old); unset($_SESSION['account_'.$varkey.'_account_old']); } $_SESSION['account_'.$varkey.'_account_old'] = new account(); $account_old =& $_SESSION['account_'.$varkey.'_account_old']; + // get "real" DN from variable $DN = str_replace("\'", '',$_GET['DN']); + // Load existing group $account_new = loadgroup($DN); + // Get a copy of original host $account_old = $account_new; + // Store only DN without cn=$name $account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1); $final_changegids = ''; + // Display general-page + $select_local = 'general'; } - -else if (count($_POST)==0) { // Startcondition. groupedit.php was called from outside +// Startcondition. groupedit.php was called from outside to create a new group +else if (count($_POST)==0) { + // Create new account object with settings from default profile $account_new = loadGroupProfile('default'); $account_new ->type = 'group'; if ($config_intern->scriptServer) { - // load quotas from profile and check if they are valid + // load quotas and check if quotas from profile are valid $values = getquotas('group'); - if (isset($account_new->quota[0])) { // check quotas from profile + if (isset($account_new->quota[0])) { + // check quotas from profile $i=0; - // check quota settings + // check quota settings, loop for every partition with quotas while (isset($account_new->quota[$i])) { + // search if quotas from profile fit to a real quota $found = (-1); for ($j=0; $jquota); $j++) if ($values->quota[$j][0]==$account_new->quota[$i][0]) $found = $j; + // unset quota from profile if quotas (mointpoint) doesn't exists anymore if ($found==-1) unset($account_new->quota[$i]); else { + // Set missing part in quota-array $account_new->quota[$i][1] = $values->quota[$found][1]; $account_new->quota[$i][5] = $values->quota[$found][5]; $account_new->quota[$i][4] = $values->quota[$found][4]; @@ -89,27 +108,31 @@ else if (count($_POST)==0) { // Startcondition. groupedit.php was called from ou $i++; } } + // Beautify array, repair index $account_new->quota = array_values($account_new->quota); } else { // No quotas saved in profile + // Display quotas for new users (Quota set to 0) if (is_object($values)) { while (list($key, $val) = each($values)) // Set only defined values if (isset($val)) $account_new->$key = $val; } } } - unset($account_old); - unset($_SESSION['account_'.$varkey.'_account_old']); + // Display general-page + $select_local = 'general'; } -switch ($select) { // Select which part of page should be loaded and check values - // general = startpage, general account paramters - // samba = page with all samba-related parameters e.g. smbpassword - // quota = page with all quota-related parameters e.g. hard file quota - // personal = page with all personal-related parametergs, e.g. phone number - // final = last page shown before account is created/modified - // if account is modified commands might be ran are shown - // finish = page shown after account has been created/modified +switch ($_POST['select']) { + /* Select which part of page should be loaded and check values + * groupmembers = page with all users which are additional members of group + * general = startpage, general account paramters + * samba = page with all samba-related parameters e.g. smbpassword + * quota = page with all quota-related parameters e.g. hard file quota + * personal = page with all personal-related parametergs, e.g. phone number + * final = last page shown before account is created/modified + * finish = page shown after account has been created/modified + */ case 'groupmembers': do { // X-Or, only one if() can be true if (isset($_POST['users']) && isset($_POST['add'])) { // Add users to list @@ -121,7 +144,6 @@ switch ($select) { // Select which part of page should be loaded and check value $account_new->unix_memberUid = array_flip($account_new->unix_memberUid); // sort user sort($account_new->unix_memberUid); - // display groupmembers page break; } if (isset($_POST['members']) && isset($_POST['remove'])) { // remove users fromlist @@ -129,12 +151,12 @@ switch ($select) { // Select which part of page should be loaded and check value break; } } while(0); + // display groupmembers page $select_local = 'groupmembers'; break; - case 'general': - // Write all general values into $account_new if no profile should be loaded - if (!$load) { + // Write all general attributes into $account_new if no profile should be loaded + if (!$_POST['load']) { $account_new->general_dn = $_POST['f_general_suffix']; $account_new->general_username = $_POST['f_general_username']; $account_new->general_uidNumber = $_POST['f_general_uidNumber']; @@ -158,10 +180,20 @@ switch ($select) { // Select which part of page should be loaded and check value $lastchar = substr($account_new->general_username, strlen($account_new->general_username)-1, 1); // Last character is no number if ( !ereg('^([0-9])+$', $lastchar)) + /* Last character is no number. Therefore we only have to + * add "2" to it. + */ $account_new->general_username = $account_new->general_username . '2'; else { + /* Last character is a number -> we have to increase the number until we've + * found a groupname with trailing number which is not in use. + * + * $i will show us were we have to split groupname so we get a part + * with the groupname and a part with the trailing number + */ $i=strlen($account_new->general_username)-1; $mark = false; + // Set $i to the last character which is a number in $account_new->general_username while (!$mark) { if (ereg('^([0-9])+$',substr($account_new->general_username, $i, strlen($account_new->general_username)-$i))) $i--; else $mark=true; @@ -169,66 +201,57 @@ switch ($select) { // Select which part of page should be loaded and check value // increase last number with one $firstchars = substr($account_new->general_username, 0, $i+1); $lastchars = substr($account_new->general_username, $i+1, strlen($account_new->general_username)-$i); + // Put groupname together $account_new->general_username = $firstchars . (intval($lastchars)+1); } } + // Show warning if lam has changed groupname if ($account_new->general_username != $_POST['f_general_username']) $errors[] = array('WARN', _('Groupname'), _('Groupname already in use. Selected next free groupname.')); - // Check if UID is valid. If none value was entered, the next useable value will be inserted - $account_new->general_uidNumber = checkid($account_new, $account_old); - if (is_string($account_new->general_uidNumber)) { // true if checkid has returned an error - $errors[] = array('ERROR', _('ID-Number'), $account_new->general_uidNumber); - if (isset($account_old)) $account_new->general_uidNumber = $account_old->general_uidNumber; - else unset($account_new->general_uidNumber); - } - + $temp = explode(':', checkid($account_new, $account_old)); + $account_new->general_uidNumber = $temp[0]; + // true if checkid has returned an error + if ($temp[1]!='') $errors[] = explode(';',$temp[1]); // Check if Name-length is OK. minLength=3, maxLength=20 if ( !ereg('.{3,20}', $account_new->general_username)) $errors[] = array('ERROR', _('Name'), _('Name must contain between 3 and 20 characters.')); // Check if Name starts with letter if ( !ereg('^([a-z]|[A-Z]).*$', $account_new->general_username)) $errors[] = array('ERROR', _('Name'), _('Name contains invalid characters. First character must be a letter')); - } break; - case 'samba': + // Write all samba attributes into $account_new + // Get all domains $samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix()); - foreach ($samba3domains as $domain) - if ($_POST['f_smb_domain'] == $domain->name) - $account_new->smb_domain = $domain; + // Search the corrct domain in array + unset($account_new->smb_domain); + $i = 0; + while (!is_object($account_new->smb_domain) && isset($samba3domains[$i])) { + if ($_POST['f_smb_domain'] == $samba3domains[$i]->name) + $account_new->smb_domain = $samba3domains[$i]; + else $i++; + } $account_new->smb_displayName = $_POST['f_smb_displayName']; - - if ($config_intern->is_samba3()) - switch ($_POST['f_smb_mapgroup']) { - case '*'._('Domain Guests'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '514'; break; - case '*'._('Domain Users'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '513'; break; - case '*'._('Domain Admins'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '512'; break; - case $account_new->general_username: - $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-". - (2 * getgid($account_new->general_username) + $account_new->smb_domain->RIDbase +1); - break; - } - else - switch ($_POST['f_smb_mapgroup']) { - case '*'._('Domain Guests'): $account_new->smb_mapgroup = '514'; break; - case '*'._('Domain Users'): $account_new->smb_mapgroup = '513'; break; - case '*'._('Domain Admins'): $account_new->smb_mapgroup = '512'; break; - case $account_new->general_username: - $account_new->smb_mapgroup = (2 * getgid($account_new->general_username) + 1001); - break; - } - - // Check if value is set + // Check if group SID should be mapped to a well known SID + switch ($_POST['f_smb_mapgroup']) { + case '*'._('Domain Guests'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '514'; break; + case '*'._('Domain Users'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '513'; break; + case '*'._('Domain Admins'): $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-" . '512'; break; + case $account_new->general_username: + $account_new->smb_mapgroup = $account_new->smb_domain->SID . "-". + (2 * getgid($account_new->general_username) + $account_new->smb_domain->RIDbase +1); + break; + } + // Check if values are OK and set automatic values. if not error-variable will be set if (($account_new->smb_displayName=='') && isset($account_new->general_gecos)) { $account_new->smb_displayName = $account_new->general_gecos; $errors[] = array('INFO', _('Display name'), _('Inserted gecos-field as display name.')); } - break; - case 'quota': // Write all general values into $account_new $i=0; + // loop for every mointpoint with quotas while ($account_new->quota[$i][0]) { $account_new->quota[$i][2] = $_POST['f_quota_'.$i.'_2']; $account_new->quota[$i][3] = $_POST['f_quota_'.$i.'_3']; @@ -246,16 +269,14 @@ switch ($select) { // Select which part of page should be loaded and check value $i++; } break; - case 'final': - // Write all general values into $account_new + // Ask if we should change gidNumber of every user which is member of the group if ($_POST['f_final_changegids']) $final_changegids = $_POST['f_final_changegids'] ; break; - case 'finish': // Check if pdf-file should be created if ($_POST['outputpdf']) { - // Quota Settings + // Load quotas if not yet done because they are needed for the pdf-file if ($config_intern->scriptServer && !isset($account_new->quota[0])) { // load quotas $values = getquotas('group', $account_old->general_username); if (is_object($values)) { @@ -267,7 +288,9 @@ switch ($select) { // Select which part of page should be loaded and check value if (isset($val)) $account_old->$key = $val; } } + // Create / display PDf-file createGroupPDF(array($account_new)); + // Stop script die; } break; @@ -276,54 +299,75 @@ switch ($select) { // Select which part of page should be loaded and check value do { // X-Or, only one if() can be true if ($_POST['next_members']) { + // Go from groupmembers to next page if no error did ocour if (!is_array($errors)) $select_local='groupmembers'; - else $select_local=$select; + else $select_local=$_POST['select']; break; } if ($_POST['next_general']) { + // Go from general to next page if no error did ocour if (!is_array($errors)) $select_local='general'; - else $select_local=$select; + else $select_local=$_POST['select']; break; } if ($_POST['next_samba']) { + // Go from samba to next page if no error did ocour if (!is_array($errors)) $select_local='samba'; - else $select_local=$select; + else $select_local=$_POST['select']; break; } if ($_POST['next_quota']) { + // Go from quota to next page if no error did ocour if (!is_array($errors)) $select_local='quota'; - else $select_local=$select; + else $select_local=$_POST['select']; break; } if ($_POST['next_final']) { + // Check if objectclasses are OK + if ($config_intern->is_samba3() && !isset($account_new->smb_domain)) // Samba page not viewed; can not create group because if missing options + $errors[] = array("ERROR", _("Samba Options not set!"), _("Please check settings on samba page.")); + if (isset($account_old->general_objectClass)) { + if (($config_intern->is_samba3()) && (!in_array('sambaGroupMapping', $account_old->general_objectClass))) + $errors[] = array('WARN', _('ObjectClass sambaGroupMapping not found.'), _('Have to add objectClass sambaGroupMapping.')); + if (!in_array('posixGroup', $account_old->general_objectClass)) + $errors[] = array('WARN', _('ObjectClass posixGroup not found.'), _('Have to add objectClass posixGroup.')); + } + // Show info if gidNumber has changed + if (($account_old) && ($account_new->general_uidNumber != $account_old->general_uidNumber)) + $errors[] = array('INFO', _('GID-number has changed. You have to run the following command as root in order to change existing file-permissions:'), + 'find / -gid ' . $account_old->general_uidNumber . ' -exec chgrp ' . $account_new->general_uidNumber . ' {} \;'); + // Go from final to next page if no error did ocour if (!isset($errors)) $select_local='final'; - else $select_local=$select; + else $select_local=$_POST['select']; break; } + // Reset account to original settings if undo-button was pressed if ($_POST['next_reset']) { $account_new = $account_old; - $account_new->unix_password=''; - $account_new->smb_password=''; - $account_new->smb_flagsW = 0; $account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1); - $select_local = $select; + $select_local = $_POST['select']; break; } - if ( $_POST['create'] ) { // Create-Button was pressed + // Create-Button was pressed + if ( $_POST['create'] ) { + // Create or modify an account if ($account_old) $result = modifygroup($account_new,$account_old); else $result = creategroup($account_new); // account.inc - if ( $result==1 || $result==3 ) $select_local = 'finish'; - else $select_local = 'final'; + if ( $result==4 || $result==5 ) $select_local = 'final'; + else $select_local = 'finish'; break; } - // Reset variables if recreate-button was pressed + // Load Profile and reset all attributes to settings in profile if ($_POST['createagain']) { $select_local='general'; + unset ($_SESSION['account_'.$varkey.'_account_new']); unset($account_new); - $account_new = loadGroupProfile('default'); + $_SESSION['account_'.$varkey.'_account_new'] = loadGroupProfile('default'); + $account_new =& $_SESSION['account_'.$varkey.'_account_new']; $account_new ->type = 'group'; break; } + // Go back to listgroups.php if ($_POST['backmain']) { metaRefresh("../lists/listgroups.php"); if (isset($_SESSION['account_'.$varkey.'_account_new'])) unset($_SESSION['account_'.$varkey.'_account_new']); @@ -332,7 +376,8 @@ do { // X-Or, only one if() can be true die; break; } - if ($load) { + // Load Profile and reset all attributes to settings in profile + if ($_POST['load']) { $account_new->general_dn = $_POST['f_general_suffix']; $account_new->general_username = $_POST['f_general_username']; $account_new->general_uidNumber = $_POST['f_general_uidNumber']; @@ -343,19 +388,22 @@ do { // X-Or, only one if() can be true while (list($key, $val) = each($values)) // Set only defined values if (isset($val)) $account_new->$key = $val; } - if ($config_intern->scriptServer) { - // load quotas from profile and check if they are valid - $values = getquotas('group', $account_old->general_username); - if (isset($account_new->quota[0])) { // check quotas from profile + // load quotas and check if quotas from profile are valid + $values = getquotas('group'); + if (isset($account_new->quota[0])) { + // check quotas from profile $i=0; - // check quota settings + // check quota settings, loop for every partition with quotas while (isset($account_new->quota[$i])) { + // search if quotas from profile fit to a real quota $found = (-1); for ($j=0; $jquota); $j++) if ($values->quota[$j][0]==$account_new->quota[$i][0]) $found = $j; + // unset quota from profile if quotas (mointpoint) doesn't exists anymore if ($found==-1) unset($account_new->quota[$i]); - else { + else { + // Set missing part in quota-array $account_new->quota[$i][1] = $values->quota[$found][1]; $account_new->quota[$i][5] = $values->quota[$found][5]; $account_new->quota[$i][4] = $values->quota[$found][4]; @@ -363,9 +411,11 @@ do { // X-Or, only one if() can be true $i++; } } + // Beautify array, repair index $account_new->quota = array_values($account_new->quota); } else { // No quotas saved in profile + // Display quotas for new users (Quota set to 0) if (is_object($values)) { while (list($key, $val) = each($values)) // Set only defined values if (isset($val)) $account_new->$key = $val; @@ -376,9 +426,15 @@ do { // X-Or, only one if() can be true $select_local='general'; break; } + // Save Profile if ($_POST['save']) { // save profile - saveGroupProfile($account_new, $_POST['f_finish_safeProfile']); + if ($_POST['f_finish_safeProfile']=='') + $errors[] = array('ERROR', _('Save profile'), _('No profilename given.')); + else { + saveGroupProfile($account_new, $_POST['f_finish_safeProfile']); + $errors[] = array('INFO', _('Save profile'), _('New profile created.')); + } // select last page displayed before user is created $select_local='final'; break; @@ -387,8 +443,6 @@ do { // X-Or, only one if() can be true $select_local='groupmembers'; break; } - // Set selected page to general if no page was defined. should only true if groupedit.php wasn't called by itself - if (!$select_local) $select_local='general'; } while(0); // Write HTML-Header @@ -403,39 +457,58 @@ echo "\n". "
\n". "\n"; +// Display errir-messages if (is_array($errors)) for ($i=0; $iunix_memberUid, $users); + /* Now we have to remove all users from list who are primary member of group + * At the moment lam is doing an extra ldap-search. In future this should be done + * via cache-array **** fixme + */ + // Do a ldap-search if (isset($account_old->general_uidNumber)) $result = ldap_search($_SESSION['ldap']->server(), $_SESSION['config']->get_UserSuffix(), "(&(objectClass=PosixAccount)(gidNumber=$account_old->general_uidNumber))", array('cn')); else $result = ldap_search($_SESSION['ldap']->server(), $_SESSION['config']->get_UserSuffix(), "(&(objectClass=PosixAccount)(gidNumber=$account_new->general_uidNumber))", array('cn')); $entry = ldap_first_entry($_SESSION['ldap']->server(), $result); + // loop for every user which is primary member of group while ($entry) { $attr = ldap_get_attributes($_SESSION['ldap']->server(), $entry); if (isset($attr['cn'][0])) { + // Remove user from user list $users = @array_flip($users); unset ($users[$attr['cn'][0]]); $users = @array_flip($users); } + // Go to next entry $entry = ldap_next_entry($_SESSION['ldap']->server(), $entry); } + echo "\n"; echo "\n
"; echo "\n\n
"; @@ -443,6 +516,7 @@ switch ($select_local) { // Select which part of page will be loaded echo "\n"; echo "\n
"; echo "\n
"; + // samba 2.2 doesn't have any settings for groups if ($config_intern->is_samba3()) { echo "\n
"; } @@ -463,6 +537,7 @@ switch ($select_local) { // Select which part of page will be loaded echo "
"; echo _('Group members'); echo ""; + // display all users which are additional members of group if (count($account_new->unix_memberUid)!=0) { echo "
"; echo _('Available users'); echo "\n"; + // Display all users which are not member of group in any way if ((count($users)!=0) && is_array($users)) { echo "
\n
\n\n\n"; break; - case 'general': // General Account Settings // load list of profiles @@ -498,6 +573,7 @@ switch ($select_local) { // Select which part of page will be loaded echo "\n"; echo "\n
"; echo "\n
"; + // samba 2.2 doesn't have any settings for groups if ($config_intern->is_samba3()) { echo "\n
"; } @@ -529,7 +605,7 @@ switch ($select_local) { // Select which part of page will be loaded echo "\ngeneral_gecos."\">\n". ""._('Help')."\n\n\n"; echo _('Suffix'); echo "\n\n"; echo "\n\n\n\n\n\n\n'."\n".'\n"; echo "
"; @@ -587,88 +664,50 @@ switch ($select_local) { // Select which part of page will be loaded ""._('Help')."
"; echo _('Windows groupname'); echo "". ''._('Help').''. '
'; echo _('Domain'); echo ''; + // select which domain name should be displayed if (count($samba3domains)!=0) { echo '"._('Help')."
\n\n\n\n"; break; - case 'quota': // Quota Settings + // Load quotas if not yet done if ($config_intern->scriptServer && !isset($account_new->quota[0]) ) { // load quotas $values = getquotas('group', $account_new->general_username); if (is_object($values)) { @@ -698,7 +737,6 @@ switch ($select_local) { // Select which part of page will be loaded if (isset($val)) $account_old->$key = $val; } } - echo "\n"; echo "\n
"; echo "'."\n".''."\n".''."\n"; $i=0; + // loop for every mointpoint with enabled quotas while ($account_new->quota[$i][0]) { echo ''; // used blocks echo ''; // blocks soft limit @@ -746,15 +786,12 @@ switch ($select_local) { // Select which part of page will be loaded } echo "
"; @@ -706,6 +744,7 @@ switch ($select_local) { // Select which part of page will be loaded echo "\n"; echo "\n
"; echo "\n
"; + // samba 2.2 doesn't have any settings for groups if ($config_intern->is_samba3()) { echo "\n
"; } @@ -733,6 +772,7 @@ switch ($select_local) { // Select which part of page will be loaded ''._('Help').'
'._('Help').''. ''._('Help').'
'.$account_new->quota[$i][0].''.$account_new->quota[$i][1].'
\n\n
\n\n"; break; - case 'final': // Final Settings $disabled = ""; - if ($config_intern->is_samba3()) { - if (!isset($account_new->smb_domain)) { // Samba page nit viewd; can not create group because if missing options - $disabled = "disabled"; - } - } + if ($config_intern->is_samba3() && !isset($account_new->smb_domain)) + // Samba page not viewed; can not create group because if missing options + $disabled = "disabled"; echo ''; echo "\n"; @@ -793,11 +830,8 @@ switch ($select_local) { // Select which part of page will be loaded else echo _('Create'); echo "\n"; echo ""; + // Ask if gidNumbers of primary group members should be changed if (($account_old) && ($account_new->general_uidNumber != $account_old->general_uidNumber)) { - echo ''; - StatusMessage ('INFO', _('GID-number has changed. You have to run the following command as root in order to change existing file-permissions:'), - 'find / -gid ' . $account_old->general_uidNumber . ' -exec chgrp ' . $account_new->general_uidNumber . ' {} \;'); - echo ''."\n"; echo ''."\n"; } - if ($disabled == "disabled") { // Samba page nit viewd; can not create group because if missing options - echo ""; - StatusMessage("ERROR", _("Samba Options not set!"), _("Please check settings on samba page.")); - echo ""; - } - if (isset($account_old->general_objectClass)) { - if (($config_intern->is_samba3()) && (!in_array('sambaGroupMapping', $account_old->general_objectClass))) { - echo ''; - StatusMessage('WARN', _('ObjectClass sambaGroupMapping not found.'), _('Have to add objectClass sambaGroupMapping.')); - echo "\n"; - } - if (!in_array('posixGroup', $account_old->general_objectClass)) { - echo ''; - StatusMessage('WARN', _('ObjectClass posixGroup not found.'), _('Have to add objectClass posixGroup.')); - echo "\n"; - } - } echo "
'; echo '
samba3 =='yes') && !isset($account_new->smb_mapgroup)) $disabled = 'disabled'; - else $disabled = ''; echo ''; echo "
"._('Success')."\n"; echo ""; diff --git a/lam/templates/account/hostedit.php b/lam/templates/account/hostedit.php index c42fd60c..a804ab59 100644 --- a/lam/templates/account/hostedit.php +++ b/lam/templates/account/hostedit.php @@ -23,6 +23,7 @@ $Id$ LDAP Account Manager displays table for creating or modifying accounts in LDAP */ +// include all needed files include_once('../../lib/account.inc'); // File with all account-funtions include_once('../../lib/config.inc'); // File with configure-functions include_once('../../lib/profiles.inc'); // functions to load and save profiles @@ -30,10 +31,17 @@ include_once('../../lib/status.inc'); // Return error-message include_once('../../lib/pdf.inc'); // Return a pdf-file include_once('../../lib/ldap.inc'); // LDAP-functions +// Start session session_save_path('../../sess'); @session_start(); +// Set correct language, codepages, .... setlanguage(); +/* hostedit.php is using dynamic session varialenames so +* we can run several copies of hostedit.php at the same +* time +* $varkey is the dynamic part of the variable name +*/ if (!isset($_POST['varkey'])) $varkey = session_id().time(); else $varkey = $_POST['varkey']; if (!isset($_SESSION['account_'.$varkey.'_account_new'])) $_SESSION['account_'.$varkey.'_account_new'] = new account(); @@ -41,51 +49,46 @@ if (!isset($_SESSION['account_'.$varkey.'_account_new'])) $_SESSION['account_'.$ // Register Session-Variables with references so we don't net to change to complete code if names changes $account_new =& $_SESSION['account_'.$varkey.'_account_new']; if (is_object($_SESSION['account_'.$varkey.'_account_old'])) $account_old =& $_SESSION['account_'.$varkey.'_account_old']; - $ldap_intern =& $_SESSION['ldap']; $config_intern =& $_SESSION['config']; $header_intern =& $_SESSION['header']; - - +// $_GET is only valid if hostedit.php was called from hostlist.php if (isset($_GET['DN']) && $_GET['DN']!='') { + // hostedit.php should edit an existing account + // reset variables if (isset($_SESSION['account_'.$varkey.'_account_old'])) { unset($account_old); unset($_SESSION['account_'.$varkey.'_account_old']); } $_SESSION['account_'.$varkey.'_account_old'] = new account(); $account_old =& $_SESSION['account_'.$varkey.'_account_old']; + // get "real" DN from variable $DN = str_replace("\'", '',$_GET['DN']); + // Load existing host $account_new = loadhost($DN); - $account_new->smb_flagsW = 1; - $account_new->smb_flagsX = 1; + // Get a copy of original host $account_old = $account_new; // Store only DN without uid=$name $account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1); - $_SESSION['final_changegids'] = ''; } -else if (count($_POST)==0) { // Startcondition. hostedit.php was called from outside +// Startcondition. hostedit.php was called from outside to create a new host +else if (count($_POST)==0) { + // Create new account object with settings from default profile $account_new = loadHostProfile('default'); $account_new ->type = 'host'; $account_new->smb_flagsW = 1; $account_new->smb_flagsX = 1; $account_new->general_homedir = '/dev/null'; $account_new->general_shell = '/bin/false'; - if (isset($_SESSION['account_'.$varkey.'_account_old'])) { - unset($account_old); - unset($_SESSION['account_'.$varkey.'_account_old']); - } } -switch ($_POST['select']) { // Select which part of page should be loaded and check values - // general = startpage, general account paramters - // unix = page with all shadow-options and password - // samba = page with all samba-related parameters e.g. smbpassword - // quota = page with all quota-related parameters e.g. hard file quota - // personal = page with all personal-related parametergs, e.g. phone number - // final = last page shown before account is created/modified - // if account is modified commands might be ran are shown - // finish = page shown after account has been created/modified +switch ($_POST['select']) { + /* Select which page should be displayed. For hosts we have + * only have general and finish + * general = page with all settings for hosts + * final = page which will be displayed if changes were made + */ case 'general': // Write all general values into $account_new if no profile should be loaded if (!$_POST['load']) { @@ -94,102 +97,117 @@ switch ($_POST['select']) { // Select which part of page should be loaded and ch $account_new->general_uidNumber = $_POST['f_general_uidNumber']; $account_new->general_group = $_POST['f_general_group']; $account_new->general_gecos = $_POST['f_general_gecos']; + $account_new->smb_displayName = $_POST['f_smb_displayName']; // Check if values are OK and set automatic values. if not error-variable will be set + // Add $ to end of hostname if hostname doesn't end with "$" if ( substr($account_new->general_username, strlen($account_new->general_username)-1, strlen($account_new->general_username)) != '$' ) { $account_new->general_username = $account_new->general_username . '$'; $errors[] = array('WARN', _('Host name'), _('Added $ to hostname.')); } + // Get copy of hostname so we can check if changes were made $tempname = $account_new->general_username; // Check if Hostname contains only valid characters if ( !ereg('^([a-z]|[A-Z]|[0-9]|[.]|[-]|[$])*$', $account_new->general_username)) - $errors[] = array('ERROR', _('Host name'), _('Hostname contains invalid characters. Valid characters are: a-z, 0-9 and .-_ !')); + $errors[] = array('ERROR', _('Host name'), _('Hostname contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !')); - if ($account_new->general_gecos=='') { - $account_new->general_gecos = $account_new->general_username; - $errors[] = array('INFO', _('Gecos'), _('Inserted hostname in gecos-field.')); - } - // Create automatic Hostname with number if original user already exists + // Create automatic Hostname with number if original host already exists // Reset name to original name if new name is in use if (ldapexists($account_new, $account_old) && is_object($account_old)) $account_new->general_username = $account_old->general_username; while ($temp = ldapexists($account_new, $account_old)) { - // get last character of username + // Remove "$" at end of hostname $account_new->general_username = substr($account_new->general_username, 0, $account_new->general_username-1); - $lastchar = substr($account_new->general_username, strlen($account_new->general_username)-2, 1); - // Last character is no number - if ( !ereg('^([0-9])+$', $lastchar)) - $account_new->general_username = $account_new->general_username . '2'; - else { - $i=strlen($account_new->general_username)-3; + // get last character of username + $lastchar = substr($account_new->general_username, strlen($account_new->general_username)-1, 1); + if ( !ereg('^([0-9])+$', $lastchar)) { + /* Last character is no number. Therefore we only have to + * add "2" to it. + */ + $account_new->general_username = $account_new->general_username . '2$'; + } + else { + /* Last character is a number -> we have to increase the number until we've + * found a hostname with trailing number which is not in use. + * + * $i will show us were we have to split hostname so we get a part + * with the hostname and a part with the trailing number + */ + $i=strlen($account_new->general_username)-3; $mark = false; - while (!$mark) { + // Set $i to the last character which is a number in $account_new->general_username + while (!$mark) { if (ereg('^([0-9])+$',substr($account_new->general_username, $i, strlen($account_new->general_username)-1))) $i--; else $mark=true; } // increase last number with one - $firstchars = substr($account_new->general_username, 0, $i+1); - $lastchars = substr($account_new->general_username, $i+1, strlen($account_new->general_username)-$i); + $firstchars = substr($account_new->general_username, 0, $i+2); + $lastchars = substr($account_new->general_username, $i+2, strlen($account_new->general_username)-$i); + // Put hostname together $account_new->general_username = $firstchars . (intval($lastchars)+1). '$'; } - $account_new->general_username = $account_new->general_username . "$"; } + // Show warning if lam has changed hostname if ($account_new->general_username != $tempname) $errors[] = array('WARN', _('Host name'), _('Hostname already in use. Selected next free hostname.')); - - // Check if UID is valid. If none value was entered, the next useable value will be inserted - $account_new->general_uidNumber = checkid($account_new, $account_old); - if (is_string($account_new->general_uidNumber)) { // true if checkid has returned an error - $errors[] = array('ERROR', _('ID-Number'), $account_new->general_uidNumber); - if (isset($account_old)) $account_new->general_uidNumber = $account_old->general_uidNumber; - else unset($account_new->general_uidNumber); - } // Check if Name-length is OK. minLength=3, maxLength=20 if ( !ereg('.{3,20}', $account_new->general_username)) $errors[] = array('ERROR', _('Name'), _('Name must contain between 3 and 20 characters.')); // Check if Name starts with letter if ( !ereg('^([a-z]|[A-Z]).*$', $account_new->general_username)) - $errors[] = array('ERROR', _('Name'), _('Name contains invalid characters. First character must be a letter')); - - } - break; - - case 'samba': - // Write all general values into $account_new - $account_new->smb_displayName = $_POST['f_smb_displayName']; - - if (isset($_POST['f_smb_flagsD'])) $account_new->smb_flagsD = true; - else $account_new->smb_flagsD = false; - - if ($config_intern->is_samba3()) { - $samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix()); - for ($i=0; $iname) { - $account_new->smb_domain = $samba3domains[$i]; + $errors[] = array('ERROR', _('Name'), _('Name contains invalid characters. First character must be a letter.')); + // Set gecos-field to hostname if it's empty + if ($account_new->general_gecos=='') { + $account_new->general_gecos = $account_new->general_username; + $errors[] = array('INFO', _('Gecos'), _('Inserted hostname in gecos-field.')); + } + // Check if values are OK and set automatic values. if not error-variable will be set + if (($account_new->smb_displayName=='') && isset($account_new->general_gecos)) { + $account_new->smb_displayName = $account_new->general_gecos; + $errors[] = array('INFO', _('Display name'), _('Inserted gecos-field as display name.')); + } + // Check if UID is valid. If none value was entered, the next useable value will be inserted + $temp = explode(':', checkid($account_new, $account_old)); + $account_new->general_uidNumber = $temp[0]; + // true if checkid has returned an error + if ($temp[1]!='') $errors[] = explode(';',$temp[1]); + // Set Samba-Domain + if ($config_intern->is_samba3()) { + // Samba 3 used a samba3domain object + // Get all domains + $samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix()); + // Search the corrct domain in array + unset($account_new->smb_domain); + $i = 0; + while (!is_object($account_new->smb_domain) && isset($samba3domains[$i])) { + if ($_POST['f_smb_domain'] == $samba3domains[$i]->name) + $account_new->smb_domain = $samba3domains[$i]; + else $i++; } + } + // Samba 2.2 uses only a string as domainname + else { + $account_new->smb_domain = $_POST['f_smb_domain']; + // Check if Domain-name is OK + if ((!$account_new->smb_domain=='') && !ereg('^([a-z]|[A-Z]|[0-9]|[-])+$', $account_new->smb_domain)) + $errors[] = array('ERROR', _('Domain name'), _('Domain name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and -.')); + } + // Reset password if reset button was pressed. Button only vissible if account should be modified + if ($_POST['respass']) { + $account_new->unix_password_no=true; + $account_new->smb_password_no=true; + } } - else { - $account_new->smb_domain = $_POST['f_smb_domain']; - } - // Check if values are OK and set automatic values. if not error-variable will be set - if (($account_new->smb_displayName=='') && isset($account_new->general_gecos)) { - $account_new->smb_displayName = $account_new->general_gecos; - $errors[] = array('INFO', _('Display name'), _('Inserted gecos-field as display name.')); + // Check Objectclasses. Display Warning if objectclasses don'T fot + if (isset($account_old->general_objectClass)) { + if (!in_array('posixAccount', $account_old->general_objectClass)) $errors[] = array('WARN', _('ObjectClass posixAccount not found.'), _('Have to add objectClass posixAccount.')); + if (!in_array('shadowAccount', $account_old->general_objectClass)) $errors[] = array('WARN', _('ObjectClass shadowAccount not found.'), _('Have to add objectClass shadowAccount.')); + if ($config_intern->is_samba3()) { + if (!in_array('sambaSamAccount', $account_old->general_objectClass)) $errors[] = array('WARN', _('ObjectClass sambaSamAccount not found.'), _('Have to add objectClass sambaSamAccount. Host with sambaAccount will be updated.')); + } + else if (!in_array('sambaAccount', $account_old->general_objectClass)) $errors[] = array('WARN', _('ObjectClass sambaAccount not found.'), _('Have to add objectClass sambaSamAccount. Host with sambaSamAccount will be set back to sambaAccount.')); } - if ((!$account_new->smb_domain=='') && !ereg('^([a-z]|[A-Z]|[0-9]|[-])+$', $account_new->smb_domain)) - $errors[] = array('ERROR', _('Domain name'), _('Domain name contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and -.')); - - // Reset password if reset button was pressed. Button only vissible if account should be modified - if ($_POST['respass']) { - $account_new->unix_password_no=true; - $account_new->smb_password_no=true; - $select_local = 'samba'; - } break; - case 'final': - $select_local = 'final'; - break; - case 'finish': // Check if pdf-file should be created if ($_POST['outputpdf']) { @@ -197,49 +215,35 @@ switch ($_POST['select']) { // Select which part of page should be loaded and ch die; } break; - } do { // X-Or, only one if() can be true - if ($_POST['next_general']) { - if (!is_array($errors)) $select_local='general'; - else $select_local=$_POST['select']; - break; - } - if ($_POST['next_samba']) { - if (!is_array($errors)) $select_local='samba'; - else $select_local=$_POST['select']; - break; - } - if ($_POST['next_final']) { - if (!is_array($errors)) $select_local='final'; - else $select_local=$_POST['select']; - break; - } + // Reset account to original settings if undo-button was pressed if ($_POST['next_reset']) { $account_new = $account_old; - $account_new->unix_password=''; - $account_new->smb_password=''; - $account_new->smb_flagsW = 0; $account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1); - $select_local = $_POST['select']; break; } - if ( $_POST['create'] ) { // Create-Button was pressed + // Create-Button was pressed + if ( $_POST['create'] && !isset($errors)) { // Create or modify an account if ($account_old) $result = modifyhost($account_new,$account_old); else $result = createhost($account_new); // account.inc - if ( $result==1 || $result==3 ) $select_local = 'finish'; - else $select_local = 'final'; + if ($result==5 || $result==4) $select_local = 'general'; + else $select_local = 'finish'; } + // Back to main-page if ($_POST['createagain']) { $select_local='general'; + unset ($_SESSION['account_'.$varkey.'_account_new']); unset($account_new); - $account_new = loadHostProfile('default'); + $_SESSION['account_'.$varkey.'_account_new'] = loadHostProfile('default'); + $account_new =& $_SESSION['account_'.$varkey.'_account_new']; $account_new ->type = 'host'; break; } + // Load Profile and reset all attributes to settings in profile if ($_POST['load']) { $account_new->general_dn = $_POST['f_general_suffix']; $account_new->general_username = $_POST['f_general_username']; @@ -252,17 +256,21 @@ do { // X-Or, only one if() can be true while (list($key, $val) = each($values)) // Set only defined values if (isset($val)) $account_new->$key = $val; } - // select general page after group has been loaded - $select_local='general'; + $errors[] = array('INFO', _('Load profile'), _('Profile loaded.')); break; } + // Save Profile if ($_POST['save']) { // save profile - saveHostProfile($account_new, $_POST['f_finish_safeProfile']); - // select last page displayed before user is created - $select_local='final'; + if ($_POST['f_finish_safeProfile']=='') + $errors[] = array('ERROR', _('Save profile'), _('No profilename given.')); + else { + saveHostProfile($account_new, $_POST['f_finish_safeProfile']); + $errors[] = array('INFO', _('Save profile'), _('New profile created.')); + } break; } + // Go back to listhosts.php if ($_POST['backmain']) { metaRefresh("../lists/listhosts.php"); if (isset($_SESSION['account_'.$varkey.'_account_new'])) unset($_SESSION['account_'.$varkey.'_account_new']); @@ -270,8 +278,11 @@ do { // X-Or, only one if() can be true die; break; } - if (!$select_local) $select_local='general'; } while(0); +// Display main page if nothing else was selected +if (!isset($select_local)) $select_local = 'general'; + + // Write HTML-Header echo $header_intern; @@ -285,21 +296,19 @@ echo "\n". "\n". "\n"; +// Display errir-messages if (is_array($errors)) for ($i=0; $iis_samba3()) $samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix()); + + // Why this ?? fixme + if ($account_new->smb_password_no) echo ''; + + // Show page info echo ''; - echo "
\n\n
"; - echo "
"; - echo _('Please select page:'); - echo "\n"; - echo "\n
"; - echo "\n
"; - echo ""; - if (isset($account_old)) { - echo "

"; - echo _("Reset all changes."); - echo "
"; - echo "\n"; + // Show fieldset with list of all host profiles + if (count($profilelist)!=0) { + echo "
"; + echo _("Load profile"); + echo "\n\n\n\n\n
"; + echo "\n". + ""; + echo _('Help')."
\n
\n"; } - echo "
"; - echo "\n\n\n
"; + // Show Fieldset with all host settings echo "
"; echo _("General properties"); - echo "\n\n\n
"; + echo "\n\n\n'."\n".'\n'."\n".'\n'."\n".'\n'."\n".'\n'."\n".'\n'."\n".'\n'."\n".'\n'."\n".'\n\n\n\n\n\n\n'."\n".''."\n".''."\n\n\n
"; echo _('Host name').'*'; - echo ''. + echo "". ''. - ''. + "". ''._('Help').''. - '
'; + "
"; echo _('UID number'); - echo ''. + echo "". ''. - ''. + "". ''._('Help').''. - '
'; + "
"; echo _('Primary group').'*'; - echo ''. ''._('Help').''. - '
'; + "
"; echo _('Gecos'); echo ''. - ''. + "". ''._('Help').''. '
'; + echo _("Display name"); + echo "". + "smb_displayName."\">". + ""._('Help')."
"; + echo _('Password'); + echo ''; + if (isset($account_old)) { + echo ''; + } + echo "
"; + echo _('Domain'); + if ($config_intern->is_samba3()) { + // Get Domain-name from domainlist when using samba 3 + echo ''; + } + else { + // Display a textfield for samba 2.2 + echo ''; + } + echo ''._('Help').'
"; + // Display all allowed host suffixes echo _('Suffix'); echo ''._('Help').''. "
"; echo _('Values with * are required'); - echo "\n
"; - if (count($profilelist)!=0) { - echo "
"; - echo _("Load profile"); - echo "\n\n\n\n\n
"; - echo "\n". - ""; - echo _('Help')."
\n
\n"; - } - echo "
\n
\n"; - break; - - case 'samba': - // Samba Settings - if ($config_intern->is_samba3()) $samba3domains = $ldap_intern->search_domains($config_intern->get_domainSuffix()); - if ($account_new->smb_password_no) echo ''; - echo ''; - echo "\n\n\n
"; - echo "
"; - echo _('Please select page:'); - echo "\n"; - echo "\n
"; - echo "\n
"; - echo ""; - if (isset($account_old)) { - echo "

"; - echo _("Reset all changes."); - echo "
"; - echo "\n"; - } - echo "
"; - echo "
"._('Samba properties')."\n"; - echo "\n\n\n\n\n'."\n".''."\n".''."\n".''."\n"; - echo "
"; - echo _("Display name"); - echo "". - "smb_displayName."\">". - ""._('Help')."
"; - echo _('Password'); - echo ''; - if (isset($account_old)) { - echo ''; - } - echo '
'; - echo _('Domain'); - if ($config_intern->is_samba3()) { - echo ''; - } - else { - echo ''; - } - echo ''._('Help').'
\n
\n
\n"; - break; - - case 'final': - // Final Settings - echo ''; - echo "\n\n
"; - echo "
"; - echo _('Please select page:'); - echo "\n"; - echo "\n
"; - echo "\n
"; - echo ""; - if (isset($account_old)) { - echo "

"; - echo _("Reset all changes."); - echo "
"; - echo "\n"; - } - echo "
"; - echo "\n\n
"; - echo "
"; + echo "
\n"; + // Show fieldset where to save a new profile + echo "
"; echo _("Save profile"); - echo "\n\n\n\n\n\n
"; + echo "\n\n\n\n\n
"; echo ''; - echo ''._('Help'); - echo "
\n\n
\n"; + echo '">'._('Help'); + echo "
\n
"; + // Show fieldset with modify, undo and back-button echo "
"; if ($account_old) echo _('Modify'); else echo _('Create'); echo "\n"; - echo "'; - StatusMessage('WARN', _('ObjectClass posixAccount not found.'), _('Have to add objectClass posixAccount.')); - echo "\n"; - } - if (!in_array('shadowAccount', $account_old->general_objectClass)) { - echo ''; - StatusMessage('WARN', _('ObjectClass shadowAccount not found.'), _('Have to add objectClass shadowAccount.')); - echo "\n"; - } - if ($config_intern->is_samba3()) { - if (!in_array('sambaSamAccount', $account_old->general_objectClass)) { - echo ''; - StatusMessage('WARN', _('ObjectClass sambaSamAccount not found.'), _('Have to add objectClass sambaSamAccount. Host with sambaAccount will be updated.')); - echo "\n"; - }} - else - if (!in_array('sambaAccount', $account_old->general_objectClass)) { - echo ''; - StatusMessage('WARN', _('ObjectClass sambaAccount not found.'), _('Have to add objectClass sambaSamAccount. Host with sambaSamAccount will be set back to sambaAccount.')); - echo "\n"; - } + echo "
"; - if (isset($account_old->general_objectClass)) { - if (!in_array('posixAccount', $account_old->general_objectClass)) { - echo '
\n
"; + // display undo-button when editiing a host + if (isset($account_old)) { + echo "\n"; } + echo ""; echo ''."\n"; - echo "
\n
\n
"; + echo "
\n"; break; + case 'finish': // Final Settings echo ''; diff --git a/lam/templates/account/useredit.php b/lam/templates/account/useredit.php index 1aea7edb..f714591d 100644 --- a/lam/templates/account/useredit.php +++ b/lam/templates/account/useredit.php @@ -251,12 +251,11 @@ switch ($_POST['select']) { // Select which part of page should be loaded and ch if ($account_new->general_username != $_POST['f_general_username']) $errors[] = array('WARN', _('Username'), _('Username in use. Selected next free username.')); // Check if UID is valid. If none value was entered, the next useable value will be inserted - $account_new->general_uidNumber = checkid($account_new, $account_old); - if (is_string($account_new->general_uidNumber)) { // true if checkid has returned an error - $errors[] = array('ERROR', _('ID-Number'), $account_new->general_uidNumber); - if (isset($account_old)) $account_new->general_uidNumber = $account_old->general_uidNumber; - else unset($account_new->general_uidNumber); - } + $temp = explode(':', checkid($account_new, $account_old)); + $account_new->general_uidNumber = $temp[0]; + // true if checkid has returned an error + if ($temp[1]!='') $errors[] = explode(';',$temp[1]); + // Check if Name-length is OK. minLength=3, maxLength=20 if ( !ereg('.{3,20}', $account_new->general_username)) $errors[] = array('ERROR', _('Name'), _('Name must contain between 3 and 20 characters.')); // Check if Name starts with letter diff --git a/lam/templates/delete.php b/lam/templates/delete.php index 101fae64..88d3b855 100644 --- a/lam/templates/delete.php +++ b/lam/templates/delete.php @@ -215,6 +215,7 @@ if ($_POST['delete_yes']) { if ($_POST['delete_no']) { // Delete no accounts + echo ''; switch ($_POST['type']) { // Select which page should be displayd if back-button will be pressed case 'user': diff --git a/lam/templates/masscreate.php b/lam/templates/masscreate.php index f47ec7aa..7b0d0ed0 100644 --- a/lam/templates/masscreate.php +++ b/lam/templates/masscreate.php @@ -119,7 +119,8 @@ if ($select!='pdf') { $_SESSION['accounts'][$_SESSION['pointer']]->general_homedir = str_replace('$user', $_SESSION['accounts'][$_SESSION['pointer']]->general_username, $_SESSION['accounts'][$_SESSION['pointer']]->general_homedir); // Set uid number - $_SESSION['accounts'][$_SESSION['pointer']]->general_uidNumber = checkid($_SESSION['accounts'][$_SESSION['pointer']]); + $temp = explode(':', checkid($_SESSION['accounts'][$_SESSION['pointer']])); + $_SESSION['accounts'][$_SESSION['pointer']]->general_uidNumber = $temp[0]; $_SESSION['accounts'][$_SESSION['pointer']]->smb_scriptPath = str_replace('$user', $_SESSION['accounts'][$_SESSION['pointer']]->general_username, $_SESSION['accounts'][$_SESSION['pointer']]->smb_scriptPath); $_SESSION['accounts'][$_SESSION['pointer']]->smb_scriptPath = str_replace('$group', $_SESSION['accounts'][$_SESSION['pointer']]->general_group, $_SESSION['accounts'][$_SESSION['pointer']]->smb_scriptPath); @@ -163,7 +164,9 @@ if ($select!='pdf') { } $group->general_username=$_SESSION['accounts'][$_SESSION['pointer']]->general_group; - $group->general_uidNumber=checkid($_SESSION['accounts'][$_SESSION['pointer']]); + $temp = explode(':', checkid($_SESSION['accounts'][$_SESSION['pointer']])); + $_SESSION['accounts'][$_SESSION['pointer']]->general_uidNumber = $temp[0]; + $group->general_gecos=$_SESSION['accounts'][$_SESSION['pointer']]->general_group; $group->general_dn=$_SESSION['group_suffix']; $error = creategroup($group); @@ -179,7 +182,8 @@ if ($select!='pdf') { } } - $_SESSION['accounts'][$_SESSION['pointer']]->general_uidNumber = checkid($_SESSION['accounts'][$_SESSION['pointer']]); + $temp = explode(':', checkid($_SESSION['accounts'][$_SESSION['pointer']])); + $_SESSION['accounts'][$_SESSION['pointer']]->general_uidNumber = $temp[0]; $iv = base64_decode($_COOKIE["IV"]); $key = base64_decode($_COOKIE["Key"]); $_SESSION['accounts'][$_SESSION['pointer']]->unix_password = base64_encode(mcrypt_encrypt(