general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1); } // 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 // Check if there are valid groups. Can not create user with no primary group $groups = findgroups(); if (count($groups)==0) { // Write HTML-Header echo $header_intern; echo ""; echo _("Create new Account"); echo "\n". "\n". "\n". "\n". "\n"; // Display errir-messages StatusMessage("ERROR", _("Can not create any hosts."),_("Please create a group first.")); echo ""._("Back to hostlist")."\n"; echo ""; die; } $account_new = loadHostProfile('default'); $account_new ->type = 'host'; $account_new->smb_flags['W'] = 1; $account_new->general_homedir = '/dev/null'; $account_new->general_shell = '/bin/false'; } 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': if (!$_POST['load']) { if (($account_new->general_username != $_POST['f_general_username']) && ereg('[A-Z]$', $_POST['f_general_username'])) $errors[] = array('WARN', _('Hostname'), _('You are using a capital letters. This can cause problems because not all programs are case-sensitive.')); // Write all general values into $account_new if no profile should be loaded $account_new->general_dn = $_POST['f_general_suffix']; $account_new->general_username = $_POST['f_general_username']; $account_new->general_uidNumber = $_POST['f_general_uidNumber']; $account_new->general_group = $_POST['f_general_group']; $account_new->general_gecos = $_POST['f_general_gecos']; // 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 ( !eregi('^([a-z0-9_]|[.]|[-]|[$])*$', $account_new->general_username)) $errors[] = array('ERROR', _('Host name'), _('Hostname contains invalid characters. Valid characters are: a-z, A-Z, 0-9 and .-_ !')); // 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)) { // Remove "$" at end of hostname $account_new->general_username = substr($account_new->general_username, 0, $account_new->general_username-1); // 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; // 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+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). '$'; } } // 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 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 ( !eregi('^([a-z]).*$', $account_new->general_username)) $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 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_flags['N']=true; } } // Check object classes. Display warning if object classes were not found 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 ($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 sambaAccount. Host with sambaSamAccount will be set back to sambaAccount.')); } break; case 'finish': // Check if pdf-file should be created if ($_POST['outputpdf']) { createHostPDF(array($account_new)); die; } break; } do { // X-Or, only one if() can be true // Reset account to original settings if undo-button was pressed if ($_POST['next_reset']) { $account_new = $account_old; $account_new->general_dn = substr($account_new->general_dn, strpos($account_new->general_dn, ',')+1); break; } // 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==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); $_SESSION['account_'.$varkey.'_account_new'] = loadHostProfile('default'); $account_new =& $_SESSION['account_'.$varkey.'_account_new']; $account_new ->type = 'host'; $account_new->smb_flags['W'] = 1; $account_new->general_homedir = '/dev/null'; $account_new->general_shell = '/bin/false'; 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']; $account_new->general_uidNumber = $_POST['f_general_uidNumber']; $account_new->general_group = $_POST['f_general_group']; $account_new->general_gecos = $_POST['f_general_gecos']; // load profile if ($_POST['f_general_selectprofile']!='') $values = loadHostProfile($_POST['f_general_selectprofile']); if (is_object($values)) { while (list($key, $val) = each($values)) // Set only defined values if (isset($val)) $account_new->$key = $val; } $errors[] = array('INFO', _('Load profile'), _('Profile loaded.')); break; } // Save Profile if ($_POST['save']) { // save profile if ($_POST['f_finish_safeProfile']=='') $errors[] = array('ERROR', _('Save profile'), _('No profilename given.')); else { if (saveHostProfile($account_new, $_POST['f_finish_safeProfile'])) $errors[] = array('INFO', _('Save profile'), _('New profile created.')); else $errors[] = array('ERROR', _('Save profile'), _('Wrong profilename given.')); } break; } // Go back to listhosts.php if ($_POST['backmain']) { if (isset($_SESSION['account_'.$varkey.'_account_new'])) unset($_SESSION['account_'.$varkey.'_account_new']); if (isset($_SESSION['account_'.$varkey.'_account_old'])) unset($_SESSION['account_'.$varkey.'_account_old']); metaRefresh("../lists/listhosts.php"); die; break; } } while(0); // Display main page if nothing else was selected if (!isset($select_local)) $select_local = 'general'; // Write HTML-Header echo $header_intern; echo ""; echo _("Create new Account"); echo "\n". "\n". "\n". "\n". "\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_flags['N']) echo ''; // Show page info echo ''; // 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"; } // Show Fieldset with all host settings echo "
"; echo _("General properties"); echo "\n\n\n\n\n\n\n\n\n\n\n\n'."\n".''."\n".''."\n\n\n
"; echo _('Host name').'*'; echo "". ''. "". ''._('Help').''. "
"; echo _('UID number'); echo "". ''. "". ''._('Help').''. "
"; echo _('Primary group').'*'; echo "'. ''._('Help').''. "
"; echo _('Gecos'); echo ''. "". ''._('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"; // Show fieldset with modify, undo and back-button echo "
"; if ($account_old) echo _('Modify'); else echo _('Create'); echo "\n"; // display undo-button when editing a host if (isset($account_old)) { echo "\n"; } echo ' "; echo "
\n"; // Show fieldset where to save a new profile echo "
"; echo _("Save profile"); echo "\n\n\n\n\n
"; echo ''; echo ' '._('Help'); echo "
\n
"; break; case 'finish': // Final Settings echo ''; echo "
"._('Note')."\n"; if ($account_old) { printf(_("Host %s has been modified."), $account_new->general_username); } else { printf(_("Host %s has been created."), $account_new->general_username); } echo '

'; if (!$account_old) { echo ''; } echo ''. ' '. ''; ?>