new attribute loading mechanism

This commit is contained in:
Roland Gruber 2006-05-13 08:55:31 +00:00
parent 6f9bdca2ee
commit 52e2ef7c5a
16 changed files with 171 additions and 512 deletions

View File

@ -88,40 +88,39 @@ class baseModule {
*/ */
function init($base) { function init($base) {
$this->base = $base; $this->base = $base;
// Create Arrays with ldap attributes
$this->attributes = $_SESSION[$this->base]->get_module_attributes(get_class($this));
$this->orig = $_SESSION[$this->base]->get_module_attributes(get_class($this), true);
$line=-1;
for ($i=0; $i<count($_SESSION['ldap']->objectClasses) || $i==-1; $i++) {
if (strpos(strtolower($_SESSION['ldap']->objectClasses[$i]), strtolower("NAME '".get_class($this)."'"))) $line = $i;
}
$objectClassName = substr($_SESSION['ldap']->objectClasses[$line], 6+strpos($_SESSION['ldap']->objectClasses[$line], "NAME '"), strlen(get_class($this)) );
$this->attributes['objectClass'][0] = $objectClassName;
} }
/** /**
* This function loads all standard LDAP attributes. It is used * This function loads the LDAP attributes for this module.
* by the modules to reduce code
* *
* @param array $attr attribute list * @param array $attributes attribute list
*/ */
function load_attributes($attr) { function load_attributes($attributes) {
// Load attributes which are displayed $this->attributes = array();
$objectClassName = $this->attributes['objectClass']; $this->attributes = array();
$attributes = array_keys($attr); // load object classes
foreach ($attributes as $attribute) { if (isset($attributes['objectClass'])) {
if (isset($this->attributes[$attribute])) { $this->attributes['objectClass'] = $attributes['objectClass'];
// decode as unicode $this->orig['objectClass'] = $attributes['objectClass'];
$this->attributes[$attribute] = $attr[$attribute]; }
$this->orig[$attribute] = $attr[$attribute]; else {
$this->attributes['objectClass'] = array();
$this->orig['objectClass'] = array();
}
// add object classes if needed
$objectClasses = $this->getManagedObjectClasses();
for ($i = 0; $i < sizeof($objectClasses); $i++) {
if (!in_array($objectClasses[$i], $this->attributes['objectClass'])) $this->attributes['objectClass'][] = $objectClasses[$i];
}
// load attributes
$attributeNames = $this->getManagedAttributes();
for ($i = 0; $i < sizeof($attributeNames); $i++) {
if (isset($attributes[$attributeNames[$i]])) {
$this->attributes[$attributeNames[$i]] = $attributes[$attributeNames[$i]];
$this->orig[$attributeNames[$i]] = $attributes[$attributeNames[$i]];
} }
} }
$this->attributes['objectClass'] = $objectClassName;
if (in_array($objectClassName[0], $attr['objectClass']))
$this->orig['objectClass'] = $objectClassName;
else $this->orig['objectClass'] = array();
return 0;
} }
/** /**
@ -160,7 +159,7 @@ class baseModule {
* @return boolean true if base module * @return boolean true if base module
*/ */
function is_base_module() { function is_base_module() {
if ($this->meta['is_base'] == true) return true; if (isset($this->meta['is_base']) && ($this->meta['is_base'] == true)) return true;
else return false; else return false;
} }
@ -360,7 +359,7 @@ class baseModule {
$messages = array(); $messages = array();
$scopes[] = 'all'; // add checks that are independent of scope $scopes[] = 'all'; // add checks that are independent of scope
for ($s = 0; $s < sizeof($scopes); $s++) { for ($s = 0; $s < sizeof($scopes); $s++) {
if (is_array($this->meta['config_checks'][$scopes[$s]])) { if (isset($this->meta['config_checks'][$scopes[$s]]) && is_array($this->meta['config_checks'][$scopes[$s]])) {
$identifiers = array_keys($this->meta['config_checks'][$scopes[$s]]); $identifiers = array_keys($this->meta['config_checks'][$scopes[$s]]);
for ($i = 0; $i < sizeof($identifiers); $i++) { for ($i = 0; $i < sizeof($identifiers); $i++) {
// check if option is required // check if option is required
@ -690,6 +689,17 @@ class baseModule {
else return array(); else return array();
} }
/**
* Returns a list of LDAP attributes which are managed by this module.
* All attribute names will be renamed to match the given spelling.
*
* @return array list of attributes
*/
function getManagedAttributes() {
if (isset($this->meta['attributes']) && is_array($this->meta['attributes'])) return $this->meta['attributes'];
else return array();
}
/** /**
* Returns a list of required PHP extensions. * Returns a list of required PHP extensions.
* *

View File

@ -855,19 +855,19 @@ class accountContainer {
} }
} }
if ($this->subpage=='finish') { if ($this->subpage=='finish') {
if ($post['createagain']) { if (isset($post['createagain'])) {
// open fresh account page // open fresh account page
unset($_SESSION[$this->base]); unset($_SESSION[$this->base]);
metaRefresh("edit.php?type=" . $this->type); metaRefresh("edit.php?type=" . $this->type);
exit(); exit();
} }
if ($post['backmain']) { if (isset($post['backmain'])) {
// Return to account list // Return to account list
unset($_SESSION[$this->base]); unset($_SESSION[$this->base]);
metaRefresh("../lists/list.php?type=" . $this->type); metaRefresh("../lists/list.php?type=" . $this->type);
exit; exit;
} }
if ($post['outputpdf']) { if (isset($post['outputpdf'])) {
// Create / display PDf-file // Create / display PDf-file
createModulePDF(array($_SESSION[$this->base]), $post['pdfStructure']); createModulePDF(array($_SESSION[$this->base]), $post['pdfStructure']);
exit; exit;
@ -1099,222 +1099,7 @@ class accountContainer {
echo "</body>\n"; echo "</body>\n";
echo "</html>\n"; echo "</html>\n";
return 0; return 0;
} }
/**
* Add attributes to variable. Syntax is array( attribute = array ( objectClass1 => MUST|MAX, objectClass2 => MUST|MAY ), ... )
* @todo remove this function when get_module_attributes() is changed
*/
function add_attributes($objectClass) {
// loop through every existing objectlass and select current objectClass
$line=-1;
for ($i=0; $i<count($_SESSION['ldap']->objectClasses) || $i==-1; $i++) {
if (strpos(strtolower($_SESSION['ldap']->objectClasses[$i]), strtolower("NAME '$objectClass'"))) $line = $i;
}
// Return error if objectClass isn't found
if ($line==-1) trigger_error (sprintf(_("ObjectClass %s required but not defined in LDAP."), $objectClass), E_USER_WARNING);
// create array with must-attributes
// Get startposition in string
if (strpos($_SESSION['ldap']->objectClasses[$line], 'MUST (')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MUST (')+6);
// Now we have a string with all must-attributes
$string = substr($string_withtail, 0, strpos($string_withtail, ')'));
$string = trim($string);
$must = explode(" $ ", $string);
// Ad must
foreach ($must as $attribute) {
if (!isset($this->attributes[$attribute])) $this->attributes[$attribute][$objectClass] = 'MUST';
else $this->attributes[$attribute][$objectClass] = 'MUST';
}
}
// create array with may-attributes
// Get startposition in string
if (strpos($_SESSION['ldap']->objectClasses[$line], 'MAY (')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MAY (')+5);
// Now we have a string with all must-attributes
$string = substr($string_withtail, 0, strpos($string_withtail, ')'));
$string = trim($string);
$may = explode(" $ ", $string);
// Ad may
foreach ($may as $attribute) {
if (!isset($this->attributes[$attribute])) $this->attributes[$attribute][$objectClass] = 'MAY';
else $this->attributes[$attribute][$objectClass] = 'MAY';
}
}
// Get attributes of subclasses
while (strpos($_SESSION['ldap']->objectClasses[$line], "SUP ")) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'SUP ')+4);
$subclass = substr($string_withtail, 0, strpos($string_withtail, ' '));
// Add account type to object
for ($i=0; $i<count($_SESSION['ldap']->objectClasses) || $i==-1; $i++) {
if (strpos($_SESSION['ldap']->objectClasses[$i], "NAME '$subclass'")) $line = $i;
}
// Return error if objectClass isn't found
if ($line==-1) trigger_error (sprintf(_("ObjectClass %s required but not defined in LDAP."), $objectClass), E_USER_WARNING);
// create array with must-attributes
// Get startposition in string
if (strpos($_SESSION['ldap']->objectClasses[$line], 'MUST (')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MUST (')+6);
// Now we have a string with all must-attributes
$string = substr($string_withtail, 0, strpos($string_withtail, ')'));
$string = trim($string);
$must = explode(" $ ", $string);
// Ad must
foreach ($must as $attribute) {
if (!isset($this->attributes[$attribute])) $this->attributes[$attribute][$objectClass] = 'MUST';
else $this->attributes[$attribute][$objectClass] = 'MUST';
}
}
// create array with may-attributes
// Get startposition in string
if (strpos($_SESSION['ldap']->objectClasses[$line], 'MAY (')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MAY (')+5);
// Now we have a string with all must-attributes
$string = substr($string_withtail, 0, strpos($string_withtail, ')'));
$string = trim($string);
$may = explode(" $ ", $string);
// Ad may
foreach ($may as $attribute) {
if (!isset($this->attributes[$attribute])) $this->attributes[$attribute][$objectClass] = 'MAY';
else $this->attributes[$attribute][$objectClass] = 'MAY';
}
}
}
}
/**
* This function returns all LDAP attributes which are used by the given object class.
* LDAP attributs which are already in use by another object class are passed as reference.
* <br>Therefore this function must be called as reference: $result =& ..get_module_attributes
*
* @param string $objectClass object class name
* @param boolean $original If original is true references will be set to original attributes. This are the original attributes
* when an LDAP entry is loaded.
* @return array list of attributes
* @todo Remove this function
*/
function get_module_attributes($objectClass, $original=false) {
// Add account type to object
$line=-1;
for ($i=0; $i<count($_SESSION['ldap']->objectClasses) || $i==-1; $i++) {
if (strpos(strtolower($_SESSION['ldap']->objectClasses[$i]), strtolower("NAME '$objectClass'"))) $line = $i;
}
// Return empty array if no objectClass wasn't found
if ($line==-1) return array();
if (strpos($_SESSION['ldap']->objectClasses[$line], 'MUST (')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MUST (')+6);
// Now we have a string with all must-attributes
$string = substr($string_withtail, 0, strpos($string_withtail, ')'));
$string = trim($string);
// Add must
foreach (explode(" $ ", $string) as $attribute) {
$return[$attribute] = array();
}
}
elseif (strpos($_SESSION['ldap']->objectClasses[$line], 'MUST ')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MUST ')+5);
// Now we have a string with the must-attribute
$string = substr($string_withtail, 0, strpos($string_withtail, ' '));
$string = trim($string);
// Add must
$return[$string] = array();
}
// create array with may-attributes
// Get startposition in string
if (strpos($_SESSION['ldap']->objectClasses[$line], 'MAY (')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MAY (')+5);
// Now we have a string with all must-attributes
$string = substr($string_withtail, 0, strpos($string_withtail, ')'));
$string = trim($string);
// Add may
foreach (explode(" $ ", $string) as $attribute) {
$return[$attribute] = array();
}
}
elseif (strpos($_SESSION['ldap']->objectClasses[$line], 'MAY ')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MAY ')+4);
// Now we have a string with the may-attribute
$string = substr($string_withtail, 0, strpos($string_withtail, ' '));
$string = trim($string);
// Add must
$return[$string] = array();
}
// Get attributes of subclasses
while (strpos($_SESSION['ldap']->objectClasses[$line], "SUP ")) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'SUP ')+4);
$subclass = substr($string_withtail, 0, strpos($string_withtail, ' '));
// Add account type to object
for ($i=0; $i<count($_SESSION['ldap']->objectClasses) || $i==-1; $i++) {
if (strpos($_SESSION['ldap']->objectClasses[$i], "NAME '$subclass'")) $line = $i;
}
// Return error if objectClass isn't found
if ($line==-1) trigger_error (sprintf(_("ObjectClass %s required but not defined in LDAP."), $subclass), E_USER_WARNING);
// create array with must-attributes
// Get startposition in string
if (strpos($_SESSION['ldap']->objectClasses[$line], 'MUST (')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MUST (')+6);
// Now we have a string with all must-attributes
$string = substr($string_withtail, 0, strpos($string_withtail, ')'));
$string = trim($string);
// Add must
foreach (explode(" $ ", $string) as $attribute) {
$return[$attribute] = array();
}
}
elseif (strpos($_SESSION['ldap']->objectClasses[$line], 'MUST ')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MUST ')+5);
// Now we have a string with the must-attribute
$string = substr($string_withtail, 0, strpos($string_withtail, ' '));
$string = trim($string);
// Add must
$return[$string] = array();
}
// create array with may-attributes
// Get startposition in string
if (strpos($_SESSION['ldap']->objectClasses[$line], 'MAY (')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MAY (')+5);
// Now we have a string with all must-attributes
$string = substr($string_withtail, 0, strpos($string_withtail, ')'));
$string = trim($string);
// Add may
foreach (explode(" $ ", $string) as $attribute) {
$return[$attribute] = array();
}
}
elseif (strpos($_SESSION['ldap']->objectClasses[$line], 'MAY ')) {
$string_withtail = substr($_SESSION['ldap']->objectClasses[$line], strpos($_SESSION['ldap']->objectClasses[$line], 'MAY ')+4);
// Now we have a string with the may-attribute
$string = substr($string_withtail, 0, strpos($string_withtail, ' '));
$string = trim($string);
// Add must
$return[$string] = array();
}
}
// make references with attibutes which are used by more than one module
$newattributes = array_keys($return);
$module = array_keys($this->module);
if (!$original) {
// Only add attributes when original is false. We don't want to add them twice
$this->add_attributes($objectClass);
for ($i=0; $i<count($module); $i++) {
if ($module[$i]!=$objectClass)
foreach ($newattributes as $attribute)
if (isset($this->module[$module[$i]]->attributes[$attribute]) && ($attribute!='objectClass'))
$return[$attribute] =& $this->module[$module[$i]]->attributes[$attribute];
}
}
else {
for ($i=0; $i<count($module); $i++) {
if ($module[$i]!=$objectClass)
foreach ($newattributes as $attribute)
if (isset($this->module[$module[$i]]->orig[$attribute]) && ($attribute!='objectClass'))
$return[$attribute] =& $this->module[$module[$i]]->orig[$attribute];
}
}
$return['objectClass'] = array();
return $return;
}
/** /**
* This function checks which LDAP attributes have changed while the account was edited. * This function checks which LDAP attributes have changed while the account was edited.
@ -1671,16 +1456,18 @@ class accountContainer {
if (!$stopprocessing) { if (!$stopprocessing) {
foreach ($attributes as $DN) { foreach ($attributes as $DN) {
if (is_array($DN['lamdaemon']['command'])) $result = lamdaemon($DN['lamdaemon']['command']); if (isset($DN['lamdaemon']['command']) && is_array($DN['lamdaemon']['command'])) {
// Error somewhere in lamdaemon $result = lamdaemon($DN['lamdaemon']['command']);
if (is_array($result)) { // Error somewhere in lamdaemon
foreach ($result as $singleresult) { if (isset($result) && is_array($result)) {
if (is_array($singleresult)) { foreach ($result as $singleresult) {
if ($singleresult[0] == 'ERROR') $stopprocessing = true; if (is_array($singleresult)) {
$temparray[0] = $singleresult[0]; if ($singleresult[0] == 'ERROR') $stopprocessing = true;
$temparray[1] = _($singleresult[1]); $temparray[0] = $singleresult[0];
$temparray[2] = _($singleresult[2]); $temparray[1] = _($singleresult[1]);
$errors[] = $temparray; $temparray[2] = _($singleresult[2]);
$errors[] = $temparray;
}
} }
} }
} }

View File

@ -63,6 +63,8 @@ class account extends baseModule {
$return['objectClasses'] = array('account'); $return['objectClasses'] = array('account');
// LDAP aliases // LDAP aliases
$return['LDAPaliases'] = array('userid' => 'uid'); $return['LDAPaliases'] = array('userid' => 'uid');
// managed attributes
$return['attributes'] = array('uid', 'description');
// available PDF fields // available PDF fields
$return['PDF_fields'] = array( $return['PDF_fields'] = array(
'description' 'description'
@ -144,21 +146,6 @@ class account extends baseModule {
return "enabled"; return "enabled";
} }
/**
* This function loads all attributes into the object.
*
* @param array $attr an array as it is retured from ldap_get_attributes()
*/
function load_attributes($attr) {
parent::load_attributes($attr);
// uid is not loaded automatically because it is called userid in schema
if (isset($attr['uid'])) {
$this->orig['uid'] = $attr['uid'];
$this->attributes['uid'] = $attr['uid'];
}
return 0;
}
/* This function returns an array with 4 entries: /* This function returns an array with 4 entries:
* array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr), 'lamdaemon' => array(cmds)), DN2 .... ) * array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr), 'lamdaemon' => array(cmds)), DN2 .... )
* DN is the DN to change. It may be possible to change several DNs, * DN is the DN to change. It may be possible to change several DNs,

View File

@ -49,6 +49,8 @@ class ieee802Device extends baseModule {
$return['dependencies'] = array('depends' => array(), 'conflicts' => array()); $return['dependencies'] = array('depends' => array(), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('ieee802Device'); $return['objectClasses'] = array('ieee802Device');
// managed attributes
$return['attributes'] = array('macAddress');
// help Entries // help Entries
$return['help'] = array( $return['help'] = array(
'mac' => array( 'mac' => array(
@ -83,31 +85,6 @@ class ieee802Device extends baseModule {
$this->messages['mac'][1] = array('ERROR', _('Account %s:') . ' ieee802Device_mac', 'MAC address is invalid!'); $this->messages['mac'][1] = array('ERROR', _('Account %s:') . ' ieee802Device_mac', 'MAC address is invalid!');
} }
/**
* This function loads all needed attributes into the object.
*
* @param array $attr an array as it is retured from ldap_get_attributes
*/
function load_attributes($attr) {
$this->attributes['objectClass'] = array();
$this->attributes['macAddress'] = array();
$this->orig['objectClass'] = array();
$this->orig['macAddress'] = array();
if (isset($attr['objectClass'])) {
$this->attributes['objectClass'] = $attr['objectClass'];
$this->orig['objectClass'] = $attr['objectClass'];
}
if (isset($attr['macAddress'])) {
$this->attributes['macAddress'] = $attr['macAddress'];
$this->orig['macAddress'] = $attr['macAddress'];
}
// add object class if needed
if (! in_array('ieee802Device', $this->orig['objectClass'])) {
$this->attributes['objectClass'][] = 'ieee802Device';
}
return 0;
}
/** /**
* This function will create the meta HTML code to show a page with all attributes. * This function will create the meta HTML code to show a page with all attributes.
* *
@ -141,7 +118,7 @@ class ieee802Device extends baseModule {
* @return array list of info/error messages * @return array list of info/error messages
*/ */
function process_attributes(&$post) { function process_attributes(&$post) {
$this->triggered_messages = array(); $errors = array();
$this->attributes['macAddress'] = array(); $this->attributes['macAddress'] = array();
// check old MACs // check old MACs
if (isset($post['mac_number'])) { if (isset($post['mac_number'])) {
@ -152,7 +129,7 @@ class ieee802Device extends baseModule {
if (!get_preg($post['macAddress' . $i], 'macAddress')) { if (!get_preg($post['macAddress' . $i], 'macAddress')) {
$message = $this->messages['mac'][0]; $message = $this->messages['mac'][0];
$message[] = $post['macAddress' . $i]; $message[] = $post['macAddress' . $i];
$this->triggered_messages[] = array($message); $errors[] = array($message);
} }
$this->attributes['macAddress'][] = $post['macAddress' . $i]; $this->attributes['macAddress'][] = $post['macAddress' . $i];
} }
@ -167,16 +144,11 @@ class ieee802Device extends baseModule {
else { else {
$message = $this->messages['mac'][0]; $message = $this->messages['mac'][0];
$message[] = $post['macAddress']; $message[] = $post['macAddress'];
$this->triggered_messages[] = array($message); $errors[] = array($message);
} }
} }
$this->attributes['macAddress'] = array_unique($this->attributes['macAddress']); $this->attributes['macAddress'] = array_unique($this->attributes['macAddress']);
if (sizeof($this->triggered_messages) > 0) { return $errors;
return $this->triggered_messages;
}
else {
return array();
}
} }
/** /**

View File

@ -49,6 +49,8 @@ class inetLocalMailRecipient extends baseModule {
$return['dependencies'] = array('depends' => array(), 'conflicts' => array()); $return['dependencies'] = array('depends' => array(), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('inetLocalMailRecipient'); $return['objectClasses'] = array('inetLocalMailRecipient');
// managed attributes
$return['attributes'] = array('mailLocalAddress', 'mailHost', 'mailRoutingAddress');
// help Entries // help Entries
$return['help'] = array( $return['help'] = array(
'routingAdr' => array( 'routingAdr' => array(
@ -123,43 +125,6 @@ class inetLocalMailRecipient extends baseModule {
$this->messages['host'][1] = array('ERROR', _('Account %s:') . ' inetLocalMailRecipient_server', 'Mail server is invalid!'); $this->messages['host'][1] = array('ERROR', _('Account %s:') . ' inetLocalMailRecipient_server', 'Mail server is invalid!');
} }
/**
* This function loads all needed attributes into the object.
*
* @param array $attr an array as it is retured from ldap_get_attributes
*/
function load_attributes($attr) {
$this->attributes['objectClass'] = array();
$this->attributes['mailLocalAddress'] = array();
$this->attributes['mailRoutingAddress'] = array();
$this->attributes['mailHost'] = array();
$this->orig['objectClass'] = array();
$this->orig['mailLocalAddress'] = array();
$this->orig['mailRoutingAddress'] = array();
$this->orig['mailHost'] = array();
if (isset($attr['objectClass'])) {
$this->attributes['objectClass'] = $attr['objectClass'];
$this->orig['objectClass'] = $attr['objectClass'];
}
if (isset($attr['mailLocalAddress'])) {
$this->attributes['mailLocalAddress'] = $attr['mailLocalAddress'];
$this->orig['mailLocalAddress'] = $attr['mailLocalAddress'];
}
if (isset($attr['mailRoutingAddress'])) {
$this->attributes['mailRoutingAddress'] = $attr['mailRoutingAddress'];
$this->orig['mailRoutingAddress'] = $attr['mailRoutingAddress'];
}
if (isset($attr['mailHost'])) {
$this->attributes['mailHost'] = $attr['mailHost'];
$this->orig['mailHost'] = $attr['mailHost'];
}
// add object class if needed
if (! in_array('inetLocalMailRecipient', $this->orig['objectClass'])) {
$this->attributes['objectClass'][] = 'inetLocalMailRecipient';
}
return 0;
}
/** /**
* This function will create the meta HTML code to show a page with all attributes. * This function will create the meta HTML code to show a page with all attributes.
* *
@ -168,20 +133,26 @@ class inetLocalMailRecipient extends baseModule {
function display_html_attributes(&$post) { function display_html_attributes(&$post) {
$return = array(); $return = array();
// mail routing address // mail routing address
$routingAddress = '';
if (isset($this->attributes['mailRoutingAddress'][0])) $routingAddress = $this->attributes['mailRoutingAddress'][0];
$return[] = array( $return[] = array(
0 => array('kind' => 'text', 'text' => _('Routing address')), 0 => array('kind' => 'text', 'text' => _('Routing address')),
1 => array('kind' => 'input', 'name' => 'routingAdr', 'type' => 'text', 'size' => '20', 'value' => $this->attributes['mailRoutingAddress'][0]), 1 => array('kind' => 'input', 'name' => 'routingAdr', 'type' => 'text', 'size' => '20', 'value' => $routingAddress),
2 => array('kind' => 'help', 'value' => 'routingAdr')); 2 => array('kind' => 'help', 'value' => 'routingAdr'));
// mail server // mail server
$mailServer = '';
if (isset($this->attributes['mailHost'][0])) $mailServer = $this->attributes['mailHost'][0];
$return[] = array( $return[] = array(
0 => array('kind' => 'text', 'text' => _('Mail server')), 0 => array('kind' => 'text', 'text' => _('Mail server')),
1 => array('kind' => 'input', 'name' => 'host', 'type' => 'text', 'size' => '20', 'value' => $this->attributes['mailHost'][0]), 1 => array('kind' => 'input', 'name' => 'host', 'type' => 'text', 'size' => '20', 'value' => $mailServer),
2 => array('kind' => 'help', 'value' => 'host')); 2 => array('kind' => 'help', 'value' => 'host'));
// list current local addresses // list current local addresses
for ($i = 0; $i < sizeof($this->attributes['mailLocalAddress']); $i++) { $localAdresses = array();
if (isset($this->attributes['mailLocalAddress'])) $localAdresses = $this->attributes['mailLocalAddress'];
for ($i = 0; $i < sizeof($localAdresses); $i++) {
$return[] = array( $return[] = array(
0 => array('kind' => 'text', 'text' => _('Local address')), 0 => array('kind' => 'text', 'text' => _('Local address')),
1 => array('kind' => 'input', 'name' => 'localAdr' . $i, 'type' => 'text', 'size' => '20', 'value' => $this->attributes['mailLocalAddress'][$i]), 1 => array('kind' => 'input', 'name' => 'localAdr' . $i, 'type' => 'text', 'size' => '20', 'value' => $localAdresses[$i]),
2 => array('kind' => 'input', 'type' => 'submit', 'name' => 'delAdr' . $i, 'value' => _("Remove")), 2 => array('kind' => 'input', 'type' => 'submit', 'name' => 'delAdr' . $i, 'value' => _("Remove")),
3 => array('kind' => 'help', 'value' => 'localAdr')); 3 => array('kind' => 'help', 'value' => 'localAdr'));
} }
@ -191,7 +162,7 @@ class inetLocalMailRecipient extends baseModule {
1 => array('kind' => 'input', 'name' => 'localAdr', 'type' => 'text', 'size' => '20', 'value' => ''), 1 => array('kind' => 'input', 'name' => 'localAdr', 'type' => 'text', 'size' => '20', 'value' => ''),
2 => array('kind' => 'input', 'type' => 'submit', 'name' => 'addAdr', 'value' => _("Add")), 2 => array('kind' => 'input', 'type' => 'submit', 'name' => 'addAdr', 'value' => _("Add")),
3 => array('kind' => 'help', 'value' => 'localAdr'), 3 => array('kind' => 'help', 'value' => 'localAdr'),
4 => array('kind' => 'input', 'type' => 'hidden', 'value' => sizeof($this->attributes['mailLocalAddress']), 'name' => 'adr_number')); 4 => array('kind' => 'input', 'type' => 'hidden', 'value' => sizeof($localAdresses), 'name' => 'adr_number'));
return $return; return $return;
} }

View File

@ -102,6 +102,10 @@ class inetOrgPerson extends baseModule {
$return['LDAPaliases'] = array('commonName' => 'cn', 'surname' => 'sn', 'streetAddress' => 'street', $return['LDAPaliases'] = array('commonName' => 'cn', 'surname' => 'sn', 'streetAddress' => 'street',
'fax' => 'facsimileTelephoneNumber', 'gn' => 'givenName', 'userid' => 'uid', 'rfc822Mailbox' => 'mail', 'fax' => 'facsimileTelephoneNumber', 'gn' => 'givenName', 'userid' => 'uid', 'rfc822Mailbox' => 'mail',
'mobileTelephoneNumber' => 'mobile'); 'mobileTelephoneNumber' => 'mobile');
// managed attributes
$return['attributes'] = array('uid', 'cn', 'employeeType', 'givenName', 'jpegPhoto', 'mail', 'manager', 'mobile',
'host', 'title', 'telephoneNumber', 'facsimileTelephoneNumber', 'street', 'postOfficeBox', 'postalCode', 'postalAddress',
'sn', 'userPassword', 'description');
// profile elements // profile elements
$return['profile_options'] = array( $return['profile_options'] = array(
array( array(
@ -485,18 +489,19 @@ class inetOrgPerson extends baseModule {
} }
// handle host-attribute in on epice because it's not set by default // handle host-attribute in on epice because it's not set by default
if (isset($this->attributes['host'])) { if ($_SESSION['ldap']->supports_unix_hosts) {
$host = $post['host']; $host = $post['host'];
if (!get_preg($host,'unixhost')) { if (!get_preg($host,'unixhost')) {
$triggered_messages['host'][] = $this->messages['host'][0]; $triggered_messages['host'][] = $this->messages['host'][0];
} }
$hosts = explode(",", $host); $hosts = explode(",", $host);
$this->attributes['host'] = array(); $this->attributes['host'] = array();
for ($i = 0; $i < sizeof($hosts); $i++) for ($i = 0; $i < sizeof($hosts); $i++) {
if ($hosts[$i] != "") { if ($hosts[$i] != "") {
$this->attributes['host'][] = $hosts[$i]; $this->attributes['host'][] = $hosts[$i];
} }
} }
}
// Do some regex-checks and return error if attributes are set to wrong values // Do some regex-checks and return error if attributes are set to wrong values
if (($this->attributes['givenName'][0] != '') && !get_preg($this->attributes['givenName'][0], 'realname')) $triggered_messages['givenName'][] = $this->messages['givenName'][0]; if (($this->attributes['givenName'][0] != '') && !get_preg($this->attributes['givenName'][0], 'realname')) $triggered_messages['givenName'][] = $this->messages['givenName'][0];
if ( !get_preg($this->attributes['sn'][0], 'realname')) $triggered_messages['sn'][] = $this->messages['lastname'][0]; if ( !get_preg($this->attributes['sn'][0], 'realname')) $triggered_messages['sn'][] = $this->messages['lastname'][0];
@ -656,7 +661,7 @@ class inetOrgPerson extends baseModule {
1 => array ( 'kind' => 'input', 'name' => 'employeeType', 'type' => 'text', 'size' => '30', 1 => array ( 'kind' => 'input', 'name' => 'employeeType', 'type' => 'text', 'size' => '30',
'maxlength' => '255', 'value' => $employeeType), 'maxlength' => '255', 'value' => $employeeType),
2 => array ('kind' => 'help', 'value' => 'employeeType')); 2 => array ('kind' => 'help', 'value' => 'employeeType'));
if (isset($this->attributes['host'])) { if ($_SESSION['ldap']->supports_unix_hosts) {
$hostvalue = ""; $hostvalue = "";
if (is_array($this->attributes['host'])) { if (is_array($this->attributes['host'])) {
$hostvalue .= implode(",", $this->attributes['host']); $hostvalue .= implode(",", $this->attributes['host']);

View File

@ -75,6 +75,9 @@ class kolabUser extends baseModule {
$return["ldap_filter"] = array('or' => "(objectClass=kolabInetOrgPerson)"); $return["ldap_filter"] = array('or' => "(objectClass=kolabInetOrgPerson)");
// managed object classes // managed object classes
$return['objectClasses'] = array('kolabInetOrgPerson'); $return['objectClasses'] = array('kolabInetOrgPerson');
// managed attributes
$return['attributes'] = array('c', 'alias', 'kolabHomeServer', 'kolabHomeMTA', 'kolabDelegate',
'cyrus-userquota', 'kolabInvitationPolicy', 'kolabFreeBusyFuture', 'kolabDeleteflag');
// profile options // profile options
$return['profile_options'] = array( $return['profile_options'] = array(
array( array(
@ -237,31 +240,6 @@ class kolabUser extends baseModule {
$this->messages['quota'][1] = array('ERROR', _('Account %s:') . ' kolabUser_quota', _('Mail quota must be a number!')); $this->messages['quota'][1] = array('ERROR', _('Account %s:') . ' kolabUser_quota', _('Mail quota must be a number!'));
} }
/**
* This function loads all needed attributes into the object.
*
* @param array $attr an array as it is retured from ldap_get_attributes
*/
function load_attributes($attr) {
$this->attributes['objectClass'] = array();
$this->orig['objectClass'] = array();
$this->orig['kolabInvitationPolicy'] = array();
// load Kolab attributes
$attributes = array('objectClass', 'c', 'kolabHomeServer', 'kolabInvitationPolicy',
'alias', 'kolabDelegate', 'kolabFreeBusyFuture', 'cyrus-userquota', 'kolabDeleteflag');
for ($i = 0; $i < sizeof($attributes); $i++) {
if (isset($attr[$attributes[$i]])) {
$this->attributes[$attributes[$i]] = $attr[$attributes[$i]];
$this->orig[$attributes[$i]] = $attr[$attributes[$i]];
}
}
// add object class if needed
if (! in_array('kolabInetOrgPerson', $this->orig['objectClass'])) {
$this->attributes['objectClass'][] = 'kolabInetOrgPerson';
}
return 0;
}
/** /**
* Returns a list of modifications which have to be made to the LDAP account. * Returns a list of modifications which have to be made to the LDAP account.
* *

View File

@ -50,6 +50,8 @@ class ldapPublicKey extends baseModule {
$return['dependencies'] = array('depends' => array(), 'conflicts' => array()); $return['dependencies'] = array('depends' => array(), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('ldapPublicKey'); $return['objectClasses'] = array('ldapPublicKey');
// managed attributes
$return['attributes'] = array('sshPublicKey');
// help Entries // help Entries
$return['help'] = array( $return['help'] = array(
'key' => array( 'key' => array(
@ -77,31 +79,6 @@ class ldapPublicKey extends baseModule {
return $return; return $return;
} }
/**
* This function loads all needed attributes into the object.
*
* @param array $attr an array as it is retured from ldap_get_attributes
*/
function load_attributes($attr) {
$this->attributes['objectClass'] = array();
$this->attributes['sshPublicKey'] = array();
$this->orig['objectClass'] = array();
$this->orig['sshPublicKey'] = array();
if (isset($attr['objectClass'])) {
$this->attributes['objectClass'] = $attr['objectClass'];
$this->orig['objectClass'] = $attr['objectClass'];
}
if (isset($attr['sshPublicKey'])) {
$this->attributes['sshPublicKey'] = $attr['sshPublicKey'];
$this->orig['sshPublicKey'] = $attr['sshPublicKey'];
}
// add object class if needed
if (! in_array('ldapPublicKey', $this->orig['objectClass'])) {
$this->attributes['objectClass'][] = 'ldapPublicKey';
}
return 0;
}
/** /**
* This function will create the meta HTML code to show a page with all attributes. * This function will create the meta HTML code to show a page with all attributes.
* *

View File

@ -55,6 +55,8 @@ class nisMailAlias extends baseModule {
$return['dependencies'] = array('depends' => array(), 'conflicts' => array()); $return['dependencies'] = array('depends' => array(), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('nisMailAlias'); $return['objectClasses'] = array('nisMailAlias');
// managed attributes
$return['attributes'] = array('cn', 'rfc822MailMember');
// help Entries // help Entries
$return['help'] = array( $return['help'] = array(
'alias' => array( 'alias' => array(
@ -102,37 +104,6 @@ class nisMailAlias extends baseModule {
$this->messages['recipient'][1] = array('ERROR', _('Account %s:') . ' nisMailAlias_recipient', 'Recipient is invalid!'); $this->messages['recipient'][1] = array('ERROR', _('Account %s:') . ' nisMailAlias_recipient', 'Recipient is invalid!');
} }
/**
* This function loads all needed attributes into the object.
*
* @param array $attr an array as it is retured from ldap_get_attributes
*/
function load_attributes($attr) {
$this->attributes['objectClass'] = array();
$this->attributes['rfc822MailMember'] = array();
$this->attributes['cn'] = array();
$this->orig['objectClass'] = array();
$this->orig['rfc822MailMember'] = array();
$this->orig['cn'] = array();
if (isset($attr['objectClass'])) {
$this->attributes['objectClass'] = $attr['objectClass'];
$this->orig['objectClass'] = $attr['objectClass'];
}
if (isset($attr['cn'])) {
$this->attributes['cn'] = $attr['cn'];
$this->orig['cn'] = $attr['cn'];
}
if (isset($attr['rfc822MailMember'])) {
$this->attributes['rfc822MailMember'] = $attr['rfc822MailMember'];
$this->orig['rfc822MailMember'] = $attr['rfc822MailMember'];
}
// add object class if needed
if (! in_array('nisMailAlias', $this->orig['objectClass'])) {
$this->attributes['objectClass'][] = 'nisMailAlias';
}
return 0;
}
/** /**
* Returns a list of modifications which have to be made to the LDAP account. * Returns a list of modifications which have to be made to the LDAP account.
* *

View File

@ -127,6 +127,9 @@ class posixAccount extends baseModule {
$return['objectClasses'] = array('posixAccount'); $return['objectClasses'] = array('posixAccount');
// LDAP aliases // LDAP aliases
$return['LDAPaliases'] = array('commonName' => 'cn', 'userid' => 'uid'); $return['LDAPaliases'] = array('commonName' => 'cn', 'userid' => 'uid');
// managed attributes
$return['attributes'] = array('cn', 'uid', 'uidNumber', 'gidNumber', 'homeDirectory',
'userPassword', 'loginShell', 'gecos', 'description');
// PHP extensions // PHP extensions
$return['extensions'] = array('mhash'); $return['extensions'] = array('mhash');
// profile checks // profile checks
@ -451,9 +454,11 @@ class posixAccount extends baseModule {
return true; return true;
} }
/* This function loads all attributes into the object /**
* $attr is an array as it's retured from ldap_get_attributes * This function loads all needed LDAP attributes.
*/ *
* @param array $attr list of attributes
*/
function load_attributes($attr) { function load_attributes($attr) {
parent::load_attributes($attr); parent::load_attributes($attr);
// get additional group memberships // get additional group memberships
@ -467,7 +472,6 @@ class posixAccount extends baseModule {
} }
} }
$this->groups_orig = $this->groups; $this->groups_orig = $this->groups;
return 0;
} }
/* This function returns an array with 3 entries: /* This function returns an array with 3 entries:

View File

@ -231,7 +231,7 @@ class posixGroup extends baseModule {
// users who can be added have a uid and gidNumber // users who can be added have a uid and gidNumber
if (isset($dn_users[$DNs[$i]]['uid'][0]) && isset($dn_users[$DNs[$i]]['gidNumber'][0]) && if (isset($dn_users[$DNs[$i]]['uid'][0]) && isset($dn_users[$DNs[$i]]['gidNumber'][0]) &&
// are not already member // are not already member
!in_array($dn_users[$DNs[$i]]['uid'][0], $this->attributes['memberUid']) && (!isset($this->attributes['memberUid']) || !in_array($dn_users[$DNs[$i]]['uid'][0], $this->attributes['memberUid'])) &&
// and do not have this group as their primary group // and do not have this group as their primary group
!($this->attributes['gidNumber'][0] == $dn_users[$DNs[$i]]['gidNumber'][0])) { !($this->attributes['gidNumber'][0] == $dn_users[$DNs[$i]]['gidNumber'][0])) {
$users[] = $dn_users[$DNs[$i]]['uid'][0]; $users[] = $dn_users[$DNs[$i]]['uid'][0];
@ -311,6 +311,8 @@ class posixGroup extends baseModule {
$return['objectClasses'] = array('posixGroup'); $return['objectClasses'] = array('posixGroup');
// LDAP aliases // LDAP aliases
$return['LDAPaliases'] = array('commonName' => 'cn'); $return['LDAPaliases'] = array('commonName' => 'cn');
// managed attributes
$return['attributes'] = array('cn', 'gidNumber', 'userPassword', 'memberUid', 'description');
// configuration options // configuration options
$return['config_options']['group'] = array( $return['config_options']['group'] = array(
array( array(
@ -703,6 +705,7 @@ class posixGroup extends baseModule {
* @return array list of info/error messages * @return array list of info/error messages
*/ */
function process_user(&$post) { function process_user(&$post) {
if (!isset($this->attributes['memberUid'])) $this->attributes['memberUid'] = array();
if (isset($post['addusers']) && isset($post['addusers_button'])) { // Add users to list if (isset($post['addusers']) && isset($post['addusers_button'])) { // Add users to list
// Add new user // Add new user
$this->attributes['memberUid'] = @array_merge($this->attributes['memberUid'], $post['addusers']); $this->attributes['memberUid'] = @array_merge($this->attributes['memberUid'], $post['addusers']);

View File

@ -107,6 +107,10 @@ class sambaAccount extends baseModule {
$return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array()); $return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('sambaAccount'); $return['objectClasses'] = array('sambaAccount');
// managed attributes
$return['attributes'] = array('rid', 'lmPassword', 'ntPassword', 'pwdLastSet', 'logonTime', 'logoffTime',
'kickoffTime', 'pwdCanChange', 'pwdMustChange', 'acctFlags', 'displayName', 'smbHome', 'homeDrive',
'scriptPath', 'profilePath', 'userWorkstations', 'primaryGroupID', 'domain');
// PHP extensions // PHP extensions
$return['extensions'] = array('mhash'); $return['extensions'] = array('mhash');
// profile options // profile options
@ -461,8 +465,7 @@ class sambaAccount extends baseModule {
if (strpos($this->attributes['acctFlags'][0], "X")) $this->noexpire = true; if (strpos($this->attributes['acctFlags'][0], "X")) $this->noexpire = true;
else $this->noexpire = false; else $this->noexpire = false;
} }
return 0; }
}
/* This function returns an array with 3 entries: /* This function returns an array with 3 entries:
* array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... ) * array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... )

View File

@ -55,6 +55,9 @@ class sambaDomain extends baseModule {
$return['dependencies'] = array('depends' => array(), 'conflicts' => array()); $return['dependencies'] = array('depends' => array(), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('sambaDomain'); $return['objectClasses'] = array('sambaDomain');
// managed attributes
$return['attributes'] = array('sambaDomainName', 'sambaSID', 'sambaNextRid', 'sambaNextGroupRid',
'sambaNextUserRid', 'sambaAlgorithmicRidBase');
// help Entries // help Entries
$return['help'] = array( $return['help'] = array(
'domainName' => array( 'domainName' => array(
@ -149,35 +152,6 @@ class sambaDomain extends baseModule {
$this->messages['RIDbase'][1] = array('ERROR', _('Account %s:') . ' sambaDomain_RIDbase', _('Algorithmic RID base is not a number!')); $this->messages['RIDbase'][1] = array('ERROR', _('Account %s:') . ' sambaDomain_RIDbase', _('Algorithmic RID base is not a number!'));
} }
/**
* This function loads all needed attributes into the object.
*
* @param array $attr an array as it is retured from ldap_get_attributes
*/
function load_attributes($attr) {
$attributes = array('sambaAlgorithmicRidBase', 'sambaDomainName', 'sambaNextGroupRid',
'sambaNextRid', 'sambaNextUserRid', 'sambaSID');
$this->attributes['objectClass'] = array();
$this->attributes['macAddress'] = array();
$this->orig['objectClass'] = array();
$this->orig['macAddress'] = array();
if (isset($attr['objectClass'])) {
$this->attributes['objectClass'] = $attr['objectClass'];
$this->orig['objectClass'] = $attr['objectClass'];
}
for ($i = 0; $i < sizeof($attributes); $i++) {
if (isset($attr[$attributes[$i]])) {
$this->attributes[$attributes[$i]] = $attr[$attributes[$i]];
$this->orig[$attributes[$i]] = $attr[$attributes[$i]];
}
}
// add object class if needed
if (! in_array('sambaDomain', $this->orig['objectClass'])) {
$this->attributes['objectClass'][] = 'sambaDomain';
}
return 0;
}
/** /**
* This function will create the meta HTML code to show a page with all attributes. * This function will create the meta HTML code to show a page with all attributes.
* *

View File

@ -174,29 +174,32 @@ class sambaGroupMapping extends baseModule {
return; return;
} }
// Get Domain-SID from group SID // Get Domain-SID from group SID
if ($this->attributes['sambaSID'][0]!='') if (isset($this->attributes['sambaSID'][0])) {
$domainSID = substr($this->attributes['sambaSID'][0], 0, strrpos($this->attributes['sambaSID'][0], "-")); $domainSID = substr($this->attributes['sambaSID'][0], 0, strrpos($this->attributes['sambaSID'][0], "-"));
}
for ($i=0; $i<count($sambaDomains); $i++ ) { for ($i=0; $i<count($sambaDomains); $i++ ) {
// List with all valid domains // List with all valid domains
$sambaDomainNames[] = $sambaDomains[$i]->name; $sambaDomainNames[] = $sambaDomains[$i]->name;
if ($domainSID==$sambaDomains[$i]->SID) { if (isset($domainSID) && ($domainSID==$sambaDomains[$i]->SID)) {
$SID = $sambaDomains[$i]->SID; $SID = $sambaDomains[$i]->SID;
$sel_domain = $sambaDomains[$i]->name; $sel_domain = $sambaDomains[$i]->name;
}
} }
}
$displayName = '';
if (isset($this->attributes['displayName'][0])) $displayName = $this->attributes['displayName'][0];
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Display name') ), $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Display name') ),
1 => array ( 'kind' => 'input', 'name' => 'displayName', 'type' => 'text', 'size' => '30', 'maxlength' => '50', 'value' => $this->attributes['displayName'][0]), 1 => array ( 'kind' => 'input', 'name' => 'displayName', 'type' => 'text', 'size' => '30', 'maxlength' => '50', 'value' => $displayName),
2 => array ( 'kind' => 'help', 'value' => 'displayName' )); 2 => array ( 'kind' => 'help', 'value' => 'displayName' ));
$names = array_keys($this->rids); $names = array_keys($this->rids);
$wrid=false; $wrid=false;
for ($i=0; $i<count($names); $i++) { for ($i=0; $i<count($names); $i++) {
if ($this->attributes['sambaSID'][0]==$SID."-".$this->rids[$names[$i]]) { if (isset($this->attributes['sambaSID'][0]) && ($this->attributes['sambaSID'][0]==$SID."-".$this->rids[$names[$i]])) {
$selected[] = $names[$i]; $selected[] = $names[$i];
$wrid=true; $wrid=true;
}
else $options[] = $names[$i];
} }
else $options[] = $names[$i];
}
if ($wrid) $options[] = $_SESSION[$this->base]->module['posixGroup']->attributes['cn'][0]; if ($wrid) $options[] = $_SESSION[$this->base]->module['posixGroup']->attributes['cn'][0];
else $selected[] = $_SESSION[$this->base]->module['posixGroup']->attributes['cn'][0]; else $selected[] = $_SESSION[$this->base]->module['posixGroup']->attributes['cn'][0];
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Windows group') ), $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Windows group') ),
@ -206,14 +209,16 @@ class sambaGroupMapping extends baseModule {
$names = array_keys($this->sambaGroupTypes); $names = array_keys($this->sambaGroupTypes);
$selected = array( _('Domain Group') ); $selected = array( _('Domain Group') );
for ($i=0; $i<count($names); $i++) { for ($i=0; $i<count($names); $i++) {
if ($this->attributes['sambaGroupType'][0]==$this->sambaGroupTypes[$names[$i]]) if (!isset($this->attributes['sambaGroupType'][0])) break;
$selected = array( $names[$i] ); if ($this->attributes['sambaGroupType'][0]==$this->sambaGroupTypes[$names[$i]]) $selected = array( $names[$i] );
} }
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Group type') ), $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Group type') ),
1 => array ( 'kind' => 'select', 'name' => 'sambaGroupType', 'options' => $names , 'options_selected' => $selected ), 1 => array ( 'kind' => 'select', 'name' => 'sambaGroupType', 'options' => $names , 'options_selected' => $selected ),
2 => array ( 'kind' => 'help', 'value' => 'sambaDomainName' )); 2 => array ( 'kind' => 'help', 'value' => 'sambaDomainName' ));
$selectedDomain = array();
if (isset($sel_domain)) $selectedDomain = array($sel_domain);
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Domain') ), $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Domain') ),
1 => array ( 'kind' => 'select', 'name' => 'sambaDomainName', 'options' => $sambaDomainNames, 'options_selected' => array ( $sel_domain ) ), 1 => array ( 'kind' => 'select', 'name' => 'sambaDomainName', 'options' => $sambaDomainNames, 'options_selected' => $selectedDomain),
2 => array ( 'kind' => 'help', 'value' => 'sambaDomainName' )); 2 => array ( 'kind' => 'help', 'value' => 'sambaDomainName' ));
return $return; return $return;
@ -234,6 +239,8 @@ class sambaGroupMapping extends baseModule {
$return['dependencies'] = array('depends' => array('posixGroup'), 'conflicts' => array()); $return['dependencies'] = array('depends' => array('posixGroup'), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('sambaGroupMapping'); $return['objectClasses'] = array('sambaGroupMapping');
// managed attributes
$return['attributes'] = array('gidNumber', 'sambaSID', 'sambaGroupType', 'displayName', 'sambaSIDList', 'description');
// available PDF fields // available PDF fields
$return['PDF_fields'] = array( $return['PDF_fields'] = array(
'gidNumber', 'gidNumber',
@ -396,6 +403,7 @@ class sambaGroupMapping extends baseModule {
* @return array list of info/error messages * @return array list of info/error messages
*/ */
function process_attributes(&$post) { function process_attributes(&$post) {
$triggered_messages = array();
$sambaDomains = search_domains(); $sambaDomains = search_domains();
if (sizeof($sambaDomains) == 0) { if (sizeof($sambaDomains) == 0) {
return array(array(array("ERROR", _('No Samba 3 domains found in LDAP! Please create one first.')))); return array(array(array("ERROR", _('No Samba 3 domains found in LDAP! Please create one first.'))));
@ -405,11 +413,13 @@ class sambaGroupMapping extends baseModule {
$this->attributes['sambaGroupType'][0] = $this->sambaGroupTypes[$post['sambaGroupType']]; $this->attributes['sambaGroupType'][0] = $this->sambaGroupTypes[$post['sambaGroupType']];
// Get Domain SID from name // Get Domain SID from name
for ($i=0; $i<count($sambaDomains); $i++ ) for ($i=0; $i<count($sambaDomains); $i++ ) {
if (!isset($post['sambaDomainName'])) break;
if ($post['sambaDomainName'] == $sambaDomains[$i]->name) { if ($post['sambaDomainName'] == $sambaDomains[$i]->name) {
$SID = $sambaDomains[$i]->SID; $SID = $sambaDomains[$i]->SID;
$RIDbase = $sambaDomain[$i]->RIDbase; $RIDbase = $sambaDomains[$i]->RIDbase;
} }
}
// Load attributes // Load attributes
$this->attributes['displayName'][0] = $post['displayName']; $this->attributes['displayName'][0] = $post['displayName'];
$rids = array_keys($this->rids); $rids = array_keys($this->rids);
@ -430,13 +440,8 @@ class sambaGroupMapping extends baseModule {
} }
} }
if (!$wrid) $this->attributes['sambaSID'][0] = $SID . "-" . ($_SESSION[$this->base]->module['posixGroup']->attributes['gidNumber'][0]*2+$RIDbase+1); if (!$wrid) $this->attributes['sambaSID'][0] = $SID . "-" . ($_SESSION[$this->base]->module['posixGroup']->attributes['gidNumber'][0]*2+$RIDbase+1);
// Return error-messages // Return error-messages
if (count($triggered_messages)!=0) { return $triggered_messages;
$this->triggered_messages = $triggered_messages;
return $triggered_messages;
}
else $this->triggered_messages = array();
} }
@ -453,15 +458,19 @@ class sambaGroupMapping extends baseModule {
$sambaDomains = search_domains(); $sambaDomains = search_domains();
// Get Domain-SID from group SID // Get Domain-SID from group SID
$domainSID = substr($this->attributes['sambaSID'][0], 0, strrpos($this->attributes['sambaSID'][0], "-")); $domainSID = substr($this->attributes['sambaSID'][0], 0, strrpos($this->attributes['sambaSID'][0], "-"));
for ($i=0; $i<count($sambaDomains); $i++ ) for ($i=0; $i<count($sambaDomains); $i++ ) {
if ($domainSID==$sambaDomains[$i]->SID) if ($domainSID==$sambaDomains[$i]->SID) {
$SID = $sambaDomains[$i]->SID; $SID = $sambaDomains[$i]->SID;
$RIDbase = $sambaDomains[$i]->RIDbase;
}
}
$names = array_keys($this->rids); $names = array_keys($this->rids);
$wrid=false; $wrid=false;
for ($i=0; $i<count($names); $i++) for ($i=0; $i<count($names); $i++) {
if ($this->attributes['sambaSID'][0]==$SID."-".$this->rids[$names[$i]]) { if ($this->attributes['sambaSID'][0]==$SID."-".$this->rids[$names[$i]]) {
$wrid=true; $wrid=true;
} }
}
if (!$wrid) $this->attributes['sambaSID'][0] == $SID."-".($_SESSION[$this->base]->module['posixGroup']->attributes['gidNumber'][0]*2+1+$RIDbase); if (!$wrid) $this->attributes['sambaSID'][0] == $SID."-".($_SESSION[$this->base]->module['posixGroup']->attributes['gidNumber'][0]*2+1+$RIDbase);
$return = $_SESSION[$this->base]->save_module_attributes($this->attributes, $this->orig); $return = $_SESSION[$this->base]->save_module_attributes($this->attributes, $this->orig);

View File

@ -126,6 +126,11 @@ class sambaSamAccount extends baseModule {
$return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array()); $return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('sambaSamAccount'); $return['objectClasses'] = array('sambaSamAccount');
// managed attributes
$return['attributes'] = array('uid', 'sambaSID', 'sambaLMPassword', 'sambaNTPassword', 'sambaPwdLastSet',
'sambaLogonTime', 'sambaLogoffTime', 'sambaKickoffTime', 'sambaPwdCanChange', 'sambaPwdMustChange', 'sambaAcctFlags',
'displayName', 'sambaHomePath', 'sambaHomeDrive', 'sambaLogonScript', 'sambaProfilePath',
'sambaUserWorkstations', 'sambaPrimaryGroupSID', 'sambaDomainName', 'sambaLogonHours');
// PHP extensions // PHP extensions
$return['extensions'] = array('mhash'); $return['extensions'] = array('mhash');
// profile checks // profile checks
@ -161,14 +166,12 @@ class sambaSamAccount extends baseModule {
// available PDF fields // available PDF fields
$return['PDF_fields'] = array( $return['PDF_fields'] = array(
'displayName', 'displayName',
'uid',
'sambaHomePath', 'sambaHomePath',
'sambaHomeDrive', 'sambaHomeDrive',
'sambaLogonScript', 'sambaLogonScript',
'sambaProfilePath', 'sambaProfilePath',
'sambaUserWorkstations', 'sambaUserWorkstations',
'sambaDomainName', 'sambaDomainName',
'description',
'sambaPrimaryGroupSID' 'sambaPrimaryGroupSID'
); );
// help Entries // help Entries
@ -505,8 +508,7 @@ class sambaSamAccount extends baseModule {
if (strpos($this->attributes['sambaAcctFlags'][0], "X")) $this->noexpire = true; if (strpos($this->attributes['sambaAcctFlags'][0], "X")) $this->noexpire = true;
else $this->noexpire = false; else $this->noexpire = false;
} }
return 0; }
}
/* This function returns an array with 3 entries: /* This function returns an array with 3 entries:
* array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... ) * array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... )
@ -1286,14 +1288,12 @@ class sambaSamAccount extends baseModule {
*/ */
function get_pdfEntries() { function get_pdfEntries() {
return array( 'sambaSamAccount_displayName' => array('<block><key>' . _('Display name') . '</key><value' . $this->attributes['displayName'][0] . '</value></block>'), return array( 'sambaSamAccount_displayName' => array('<block><key>' . _('Display name') . '</key><value' . $this->attributes['displayName'][0] . '</value></block>'),
'sambaSamAccount_uid' => array('<block><key>' . _('User name') . '</key><value>' . $this->attributes['uid'][0] . '</value></block>'),
'sambaSamAccount_sambaHomePath' => array('<block><key>' . _('Home path') . '</key><value>' . $this->attributes['sambaHomeDrive'][0] . '</value></block>'), 'sambaSamAccount_sambaHomePath' => array('<block><key>' . _('Home path') . '</key><value>' . $this->attributes['sambaHomeDrive'][0] . '</value></block>'),
'sambaSamAccount_sambaHomeDrive' => array('<block><key>' . _('Home drive') . '</key><value>' . $this->attributes['sambaHomePath'][0] . '</value></block>'), 'sambaSamAccount_sambaHomeDrive' => array('<block><key>' . _('Home drive') . '</key><value>' . $this->attributes['sambaHomePath'][0] . '</value></block>'),
'sambaSamAccount_sambaLogonScript' => array('<block><key>' . _('Logon script') . '</key><value>' . $this->attributes['sambaLogonScript'][0] . '</value></block>'), 'sambaSamAccount_sambaLogonScript' => array('<block><key>' . _('Logon script') . '</key><value>' . $this->attributes['sambaLogonScript'][0] . '</value></block>'),
'sambaSamAccount_sambaProfilePath' => array('<block><key>' . _('Profile path') . '</key><value>' . $this->attributes['sambaProfilePath'][0] . '</value></block>'), 'sambaSamAccount_sambaProfilePath' => array('<block><key>' . _('Profile path') . '</key><value>' . $this->attributes['sambaProfilePath'][0] . '</value></block>'),
'sambaSamAccount_sambaUserWorkstations' => array('<block><key>' . _('Samba workstations') . '</key><value>' . $this->attributes['sambaUserWorkstations'][0] . '</value></block>'), 'sambaSamAccount_sambaUserWorkstations' => array('<block><key>' . _('Samba workstations') . '</key><value>' . $this->attributes['sambaUserWorkstations'][0] . '</value></block>'),
'sambaSamAccount_sambaDomainName' => array('<block><key>' . _('Domain') . '</key><value>' . $this->attributes['sambaDomainName'][0] . '</value></block>'), 'sambaSamAccount_sambaDomainName' => array('<block><key>' . _('Domain') . '</key><value>' . $this->attributes['sambaDomainName'][0] . '</value></block>'),
'sambaSamAccount_description' => array('<block><key>' . _('Description') . '</key><value>' . $this->attributes['description'][0] . '</value></block>'),
'sambaSamAccount_sambaPrimaryGroupSID' => array('<block><key>' . _('Windows group') . '</key><value>' . $this->attributes['sambaPrimaryGroupSID'][0] . '</value></block>')); 'sambaSamAccount_sambaPrimaryGroupSID' => array('<block><key>' . _('Windows group') . '</key><value>' . $this->attributes['sambaPrimaryGroupSID'][0] . '</value></block>'));
} }

View File

@ -70,6 +70,9 @@ class shadowAccount extends baseModule {
$return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array()); $return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array());
// managed object classes // managed object classes
$return['objectClasses'] = array('shadowAccount'); $return['objectClasses'] = array('shadowAccount');
// managed attributes
$return['attributes'] = array('userPassword', 'shadowLastChange', 'shadowMin', 'shadowMax', 'shadowWarning',
'shadowInactive', 'shadowExpire');
// lists for expiration date // lists for expiration date
$day = array(); $mon = array(); $year = array(); $day = array(); $mon = array(); $year = array();
for ( $i=1; $i<=31; $i++ ) $day[] = $i; for ( $i=1; $i<=31; $i++ ) $day[] = $i;
@ -142,8 +145,7 @@ class shadowAccount extends baseModule {
'shadowLastChange', 'shadowLastChange',
'shadowWarning', 'shadowWarning',
'shadowInactive', 'shadowInactive',
'shadowExpire', 'shadowExpire'
'description'
); );
// help Entries // help Entries
$return['help'] = array ( $return['help'] = array (
@ -246,6 +248,7 @@ class shadowAccount extends baseModule {
* @return array list of info/error messages * @return array list of info/error messages
*/ */
function process_attributes(&$post) { function process_attributes(&$post) {
$triggered_messages = array();
// Load attributes // Load attributes
$this->attributes['shadowMin'][0] = $post['shadowMin']; $this->attributes['shadowMin'][0] = $post['shadowMin'];
$this->attributes['shadowMax'][0] = $post['shadowMax']; $this->attributes['shadowMax'][0] = $post['shadowMax'];
@ -258,11 +261,7 @@ class shadowAccount extends baseModule {
if ( $this->attributes['shadowMin'][0] > $this->attributes['shadowMax'][0]) $triggered_messages['shadowMin'][] = $this->messages['shadow_cmp'][0]; if ( $this->attributes['shadowMin'][0] > $this->attributes['shadowMax'][0]) $triggered_messages['shadowMin'][] = $this->messages['shadow_cmp'][0];
if ( !get_preg($this->attributes['shadowInactive'][0], 'digit2')) $triggered_messages['shadowInactive'][] = $this->messages['inactive'][0]; if ( !get_preg($this->attributes['shadowInactive'][0], 'digit2')) $triggered_messages['shadowInactive'][] = $this->messages['inactive'][0];
if ( !get_preg($this->attributes['shadowWarning'][0], 'digit')) $triggered_messages['shadowWarning'][] = $this->messages['shadowWarning'][0]; if ( !get_preg($this->attributes['shadowWarning'][0], 'digit')) $triggered_messages['shadowWarning'][] = $this->messages['shadowWarning'][0];
if (count($triggered_messages)!=0) { return $triggered_messages;
$this->triggered_messages = $triggered_messages;
return $triggered_messages;
}
else $this->triggered_messages = array();
} }
/** /**
@ -273,19 +272,29 @@ class shadowAccount extends baseModule {
*/ */
function display_html_attributes(&$post) { function display_html_attributes(&$post) {
// Use dd-mm-yyyy format of date because it's easier to read for humans // Use dd-mm-yyyy format of date because it's easier to read for humans
$date = getdate ($this->attributes['shadowExpire'][0]*3600*24); $shAccExpirationDate = 0;
if (isset($this->attributes['shadowExpire'][0])) $shAccExpirationDate = $this->attributes['shadowExpire'][0];
$date = getdate($shAccExpirationDate*3600*24);
$shWarning = '';
if (isset($this->attributes['shadowWarning'][0])) $shWarning = $this->attributes['shadowWarning'][0];
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Password warning') ), $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Password warning') ),
1 => array ( 'kind' => 'input', 'name' => 'shadowWarning', 'type' => 'text', 'size' => '5', 'maxlength' => '4', 'value' => $this->attributes['shadowWarning'][0] ), 1 => array ( 'kind' => 'input', 'name' => 'shadowWarning', 'type' => 'text', 'size' => '5', 'maxlength' => '4', 'value' => $shWarning),
2 => array ( 'kind' => 'help', 'value' => 'shadowWarning' )); 2 => array ( 'kind' => 'help', 'value' => 'shadowWarning' ));
$shPwdExpiration = '';
if (isset($this->attributes['shadowInactive'][0])) $shPwdExpiration = $this->attributes['shadowInactive'][0];
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Password expiration') ), $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Password expiration') ),
1 => array ( 'kind' => 'input', 'name' => 'shadowInactive', 'type' => 'text', 'size' => '5', 'maxlength' => '4', 'value' => $this->attributes['shadowInactive'][0] ), 1 => array ( 'kind' => 'input', 'name' => 'shadowInactive', 'type' => 'text', 'size' => '5', 'maxlength' => '4', 'value' => $shPwdExpiration),
2 => array ( 'kind' => 'help', 'value' => 'shadowInactive' )); 2 => array ( 'kind' => 'help', 'value' => 'shadowInactive' ));
$shMinAge = '';
if (isset($this->attributes['shadowMin'][0])) $shMinAge = $this->attributes['shadowMin'][0];
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Minimum password age') ), $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Minimum password age') ),
1 => array ( 'kind' => 'input', 'name' => 'shadowMin', 'type' => 'text', 'size' => '5', 'maxlength' => '5', 'value' => $this->attributes['shadowMin'][0] ), 1 => array ( 'kind' => 'input', 'name' => 'shadowMin', 'type' => 'text', 'size' => '5', 'maxlength' => '5', 'value' => $shMinAge),
2 => array ( 'kind' => 'help', 'value' => 'shadowMin' )); 2 => array ( 'kind' => 'help', 'value' => 'shadowMin' ));
$shMaxAge = '';
if (isset($this->attributes['shadowMax'][0])) $shMaxAge = $this->attributes['shadowMax'][0];
$return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Maximum password age') ), $return[] = array ( 0 => array ( 'kind' => 'text', 'text' => _('Maximum password age') ),
1 => array ( 'kind' => 'input', 'name' => 'shadowMax', 'type' => 'text', 'size' => '5', 'maxlength' => '5', 'value' => $this->attributes['shadowMax'][0] ), 1 => array ( 'kind' => 'input', 'name' => 'shadowMax', 'type' => 'text', 'size' => '5', 'maxlength' => '5', 'value' => $shMaxAge),
2 => array ( 'kind' => 'help', 'value' => 'shadowMax' )); 2 => array ( 'kind' => 'help', 'value' => 'shadowMax' ));
for ( $i=1; $i<=31; $i++ ) $mday[] = $i; for ( $i=1; $i<=31; $i++ ) $mday[] = $i;
@ -312,8 +321,7 @@ class shadowAccount extends baseModule {
return array('shadowAccount_shadowLastChange' => array('<block><key>' . _('Last password change') . '</key><value>' . $this->attributes['shadowLastChange'][0] . '</value></block>'), return array('shadowAccount_shadowLastChange' => array('<block><key>' . _('Last password change') . '</key><value>' . $this->attributes['shadowLastChange'][0] . '</value></block>'),
'shadowAccount_shadowWarning' => array('<block><key>' . _('Password warning') . '</key><value>' . $this->attributes['shadowWarn'][0] . '</value><block>'), 'shadowAccount_shadowWarning' => array('<block><key>' . _('Password warning') . '</key><value>' . $this->attributes['shadowWarn'][0] . '</value><block>'),
'shadowAccount_shadowInactive' => array('<block><key>' . _('Account inactive') . '</key><value>' . $this->attributes['shadowInactive'][0] . '</value></block>'), 'shadowAccount_shadowInactive' => array('<block><key>' . _('Account inactive') . '</key><value>' . $this->attributes['shadowInactive'][0] . '</value></block>'),
'shadowAccount_shadowExpire' => array('<block><key>' . _('Password expiration') . '</key><value>' . date('d. m. Y',$this->attributes['shadowExpire'][0]) . '</value></block>'), 'shadowAccount_shadowExpire' => array('<block><key>' . _('Password expiration') . '</key><value>' . date('d. m. Y',$this->attributes['shadowExpire'][0]) . '</value></block>'));
'shadowAccount_description' => array('<block><key>' . _('Description') . '</key><value>' . $this->attributes['description'][0] . '</value></block>'));
} }
/** /**