From e8f9e08f063d3507d643ed47520eeb31585cbe93 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sat, 22 Jan 2005 10:50:10 +0000 Subject: [PATCH] implemented profile loading --- lam/lib/modules/quota.inc | 46 ++++++++++---- lam/lib/modules/sambaAccount.inc | 106 ++++++++++++++++++++++++++----- 2 files changed, 124 insertions(+), 28 deletions(-) diff --git a/lam/lib/modules/quota.inc b/lam/lib/modules/quota.inc index 05182616..a560a699 100644 --- a/lam/lib/modules/quota.inc +++ b/lam/lib/modules/quota.inc @@ -362,10 +362,10 @@ class quota extends baseModule { for ($i = 0; $i < sizeof($dirs); $i++) { $return[] = array( 0 => array('kind' => 'text', 'text' => $dirs[$i], 'align' => 'left'), - 1 => array('kind' => 'input', 'type' => 'text', 'text' => "", 'align' => 'center', 'size' => '12', 'name' => "quota_softblock_$i"), - 2 => array('kind' => 'input', 'type' => 'text', 'text' => "", 'align' => 'center', 'size' => '12', 'name' => "quota_hardblock_$i"), - 3 => array('kind' => 'input', 'type' => 'text', 'text' => "", 'align' => 'center', 'size' => '12', 'name' => "quota_softinode_$i"), - 4 => array('kind' => 'input', 'type' => 'text', 'text' => "", 'align' => 'center', 'size' => '12', 'name' => "quota_hardinode_$i"), + 1 => array('kind' => 'input', 'type' => 'text', 'align' => 'center', 'size' => '12', 'name' => "quota_softblock_" . $dirs[$i]), + 2 => array('kind' => 'input', 'type' => 'text', 'align' => 'center', 'size' => '12', 'name' => "quota_hardblock_" . $dirs[$i]), + 3 => array('kind' => 'input', 'type' => 'text', 'align' => 'center', 'size' => '12', 'name' => "quota_softinode_" . $dirs[$i]), + 4 => array('kind' => 'input', 'type' => 'text', 'align' => 'center', 'size' => '12', 'name' => "quota_hardinode_" . $dirs[$i]), ); } return $return; @@ -379,19 +379,41 @@ class quota extends baseModule { */ function check_profileOptions($options) { $return = array(); - $i = 0; - while (isset($options["quota_softblock_$i"])) { - if (!get_preg($options["quota_softblock_$i"][0], 'digit')) $return[] = $this->messages['softblock'][0]; - if (!get_preg($options["quota_hardblock_$i"][0], 'digit')) $return[] = $this->messages['hardblock'][0]; - if (!get_preg($options["quota_softinode_$i"][0], 'digit')) $return[] = $this->messages['softinode'][0]; - if (!get_preg($options["quota_hardinode_$i"][0], 'digit')) $return[] = $this->messages['hardinode'][0]; - if (intval($options["quota_softblock_$i"][0]) > $options["quota_hardblock_$i"][0]) $return[] = $this->messages['block_cmp'][0]; - if (intval($options["quota_softinode_$i"][0]) > $options["quota_hardinode_$i"][0]) $return[] = $this->messages['inode_cmp'][0]; + // Get quotas + $quotas = lamdaemon(array("+ quota get " . $this->get_scope())); + $dirs = split(":", $quotas[0]); + array_pop($dirs); // remove empty element at the end + for ($i = 0; $i < sizeof($dirs); $i++) { + $dirs[$i] = split(",", $dirs[$i]); + $dirs[$i] = $dirs[$i][0]; + } + for ($i = 0; $i < sizeof($dirs); $i++) { + if (!get_preg($options["quota_softblock_" . $dirs[$i]][0], 'digit')) $return[] = $this->messages['softblock'][0]; + if (!get_preg($options["quota_hardblock_" . $dirs[$i]][0], 'digit')) $return[] = $this->messages['hardblock'][0]; + if (!get_preg($options["quota_softinode_" . $dirs[$i]][0], 'digit')) $return[] = $this->messages['softinode'][0]; + if (!get_preg($options["quota_hardinode_" . $dirs[$i]][0], 'digit')) $return[] = $this->messages['hardinode'][0]; + if (intval($options["quota_softblock_" . $dirs[$i]][0]) >= $options["quota_hardblock_$i"][0]) $return[] = $this->messages['block_cmp'][0]; + if (intval($options["quota_softinode_" . $dirs[$i]][0]) >= $options["quota_hardinode_$i"][0]) $return[] = $this->messages['inode_cmp'][0]; $i++; } return $return; } + /** + * Loads the values of an account profile into internal variables. + * + * @param array $profile hash array with profile values (identifier => value) + */ + function load_profile($profile) { + for ($i = 0; $i < sizeof($this->quota); $i++) { + $dir = $this->quota[$i][0]; + if (isset($profile["quota_softblock_" . $dir])) $this->quota[$i][2] = $profile["quota_softblock_" . $dir][0]; + if (isset($profile["quota_hardblock_" . $dir])) $this->quota[$i][3] = $profile["quota_hardblock_" . $dir][0]; + if (isset($profile["quota_softinode_" . $dir])) $this->quota[$i][6] = $profile["quota_softinode_" . $dir][0]; + if (isset($profile["quota_hardinode_" . $dir])) $this->quota[$i][7] = $profile["quota_hardinode_" . $dir][0]; + } + } + /* * (non-PHPDoc) * @see baseModule#get_pdfEntries diff --git a/lam/lib/modules/sambaAccount.inc b/lam/lib/modules/sambaAccount.inc index 4563e438..48886f12 100644 --- a/lam/lib/modules/sambaAccount.inc +++ b/lam/lib/modules/sambaAccount.inc @@ -161,12 +161,21 @@ class sambaAccount extends baseModule { 'error_message' => $this->messages['homePath'][0]); $return['profile_checks']['sambaAccount_profilePath'] = array('type' => 'ext_preg', 'regex' => 'UNC', 'error_message' => $this->messages['profilePath'][0]); - $return['profile_checks']['sambaAccount_scriptPath'] = array('type' => 'ext_preg', 'regex' => 'logonScript', + $return['profile_checks']['sambaAccount_scriptPath'] = array('type' => 'ext_preg', 'regex' => 'logonscript', 'error_message' => $this->messages['logonScript'][0]); $return['profile_checks']['sambaAccount_userWorkstations'] = array('type' => 'ext_preg', 'regex' => 'unixhost', 'error_message' => $this->messages['workstations'][0]); $return['profile_checks']['sambaAccount_domain'] = array('type' => 'ext_preg', 'regex' => 'domainname', 'error_message' => $this->messages['domain'][0]); + // profile mappings + $return['profile_mappings'] = array( + 'sambaAccount_homeDrive' => 'homeDrive', + 'sambaAccount_smbhome' => 'smbHome', + 'sambaAccount_profilePath' => 'profilePath', + 'sambaAccount_scriptPath' => 'scriptPath', + 'sambaAccount_userWorkstations' => 'userWorkstations', + 'sambaAccount_domain' => 'domain' + ); // available PDF fields $return['PDF_fields'] = array( 'displayName', @@ -376,13 +385,23 @@ class sambaAccount extends baseModule { function init($base) { // call parent init parent::init($base); - $this->useunixpwd=false; + $this->useunixpwd = false; + $this->noexpire = true; + $this->nopwd = false; + $this->deactivated = false; } // Variables - // use unix password as samba password? + /** use unix password as samba password? */ var $useunixpwd; - // Array of well known rids + /** use no password? */ + var $nopwd; + /** password does not expire? */ + var $noexpire; + /** account deactivated? */ + var $deactivated; + + /** Array of well known rids */ var $rids; /* $attribute['lmPassword'] and $attribute['ntPassword'] can't accessed directly because it's enrcypted @@ -449,6 +468,9 @@ class sambaAccount extends baseModule { */ function load_attributes($attr) { $this->load_ldap_attributes($attr); + if (strpos($this->attributes['acctFlags'][0], "D")) $this->deactivated = true; + if (strpos($this->attributes['acctFlags'][0], "N")) $this->nopwd = true; + if (strpos($this->attributes['acctFlags'][0], "X")) $this->noexpire = true; return 0; } @@ -507,9 +529,27 @@ class sambaAccount extends baseModule { $this->attributes['domain'][0] = $post['domain']; // Start character $flag = "["; - if ($post['acctFlagsD']) $flag .= "D"; - if ($post['acctFlagsX']) $flag .= "X"; - if ($post['acctFlagsN']) $flag .= "N"; + if ($post['acctFlagsD']) { + $flag .= "D"; + $this->deactivated = true; + } + else { + $this->deactivated = false; + } + if ($post['acctFlagsX']) { + $flag .= "X"; + $this->noexpire = true; + } + else { + $this->noexpire = false; + } + if ($post['acctFlagsN']) { + $flag .= "N"; + $this->nopwd = true; + } + else { + $this->nopwd = false; + } if ($post['acctFlagsS']) $flag .= "S"; if ($post['acctFlagsH']) $flag .= "H"; if ($post['acctFlagsW']) $flag .= "W"; @@ -693,20 +733,14 @@ class sambaAccount extends baseModule { 1 => array ( 'kind' => 'input', 'name' => 'useunixpwd', 'type' => 'checkbox', 'checked' => $this->useunixpwd, 'value' => true), 2 => array ('kind' => 'help', 'value' => 'useunixpwd')); } - $checked = false; - if (strpos($this->attributes['acctFlags'][0], "N")) $checked = true; $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Use no password') ), - 1 => array ( 'kind' => 'input', 'name' => 'acctFlagsN', 'type' => 'checkbox', 'checked' => $checked), + 1 => array ( 'kind' => 'input', 'name' => 'acctFlagsN', 'type' => 'checkbox', 'checked' => $this->nopwd), 2 => array ('kind' => 'help', 'value' => 'acctFlagsN')); - $checked = false; - if (strpos($this->attributes['acctFlags'][0], "X")) $checked = true; $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Password does not expire') ), - 1 => array ( 'kind' => 'input', 'name' => 'acctFlagsX', 'type' => 'checkbox', 'checked' => $checked), + 1 => array ( 'kind' => 'input', 'name' => 'acctFlagsX', 'type' => 'checkbox', 'checked' => $this->noexpire), 2 => array ('kind' => 'help', 'value' => 'acctFlagsX')); - $checked = false; - if (strpos($this->attributes['acctFlags'][0], "D")) $checked = true; $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Account is deactivated') ), - 1 => array ( 'kind' => 'input', 'name' => 'acctFlagsD', 'type' => 'checkbox', 'checked' => $checked), + 1 => array ( 'kind' => 'input', 'name' => 'acctFlagsD', 'type' => 'checkbox', 'checked' => $this->deactivated), 2 => array ('kind' => 'help', 'value' => 'acctFlagsD')); for ( $i=1; $i<=31; $i++ ) $mday[] = $i; for ( $i=1; $i<=12; $i++ ) $mon[] = $i; @@ -1098,6 +1132,46 @@ class sambaAccount extends baseModule { return $triggered_messages; } + /** + * Loads the values of an account profile into internal variables. + * + * @param array $profile hash array with profile values (identifier => value) + */ + function load_profile($profile) { + // profile mappings in meta data + parent::load_profile($profile); + // special profile options + // use Unix password + if ($profile['sambaAccount_useunixpwd'][0] == "true") { + $this->useunixpwd = true; + } + elseif ($profile['sambaAccount_useunixpwd'][0] == "false") { + $this->useunixpwd = false; + } + // use no password + if ($profile['sambaAccount_acctFlagsN'][0] == "true") { + $this->nopwd = true; + } + elseif ($profile['sambaAccount_acctFlagsN'][0] == "false") { + $this->nopwd = false; + } + // password expiration + if ($profile['sambaAccount_acctFlagsX'][0] == "true") { + $this->noexpire = true; + } + elseif ($profile['sambaAccount_acctFlagsX'][0] == "false") { + $this->noexpire = false; + } + // use no password + if ($profile['sambaAccount_acctFlagsD'][0] == "true") { + $this->deactivated = true; + } + elseif ($profile['sambaAccount_acctFlagsD'][0] == "false") { + $this->deactivated = false; + } + } + + } ?>