2004-11-01 13:56:54 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2007-12-08 11:07:23 +00:00
< html > < head > < title > Module HowTo - General module options< / title >
< link rel = "stylesheet" type = "text/css" href = "style/layout.css" > < / head > < body >
2004-11-01 13:56:54 +00:00
< div style = "text-align: center;" >
< h1 > Module HowTo - General module options< br >
< / h1 >
< br >
< br >
< div style = "text-align: left;" > < br >
< h2 > 1. Account types< br >
< / h2 >
2007-12-08 11:07:23 +00:00
LAM currently provides three account types: < span style = "font-weight: bold;" > users, groups, hosts< br >
2004-11-01 13:56:54 +00:00
< / span > A module can manage one or more account types.< br >
< br >
The types are specified with < span style = "font-weight: bold;" > can_manage()< / span >
or < span style = "font-weight: bold;" > meta['account_types']< / span > .< br >
< br >
2007-12-08 11:07:23 +00:00
< span style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br style = "font-weight: bold; text-decoration: underline;" >
2004-11-01 13:56:54 +00:00
< br >
Our < span style = "font-style: italic;" > ieee802Device< / span >
module will be used only for host accounts.< br >
< br >
2007-12-08 11:07:23 +00:00
< table style = "width: 100%; text-align: left;" class = "mod-code" border = "0" cellpadding = "2" cellspacing = "2" >
2004-11-01 13:56:54 +00:00
< tbody >
< tr >
< td style = "vertical-align: top;" > /**< br >
* Returns meta data that is interpreted by parent
class< br >
*< br >
* @return array array with meta data< br >
*/< br >
< span style = "font-weight: bold;" > function< / span >
get_metaData() {< br >
$return = array();< br >
// manages host accounts< br >
< span style = "color: rgb(255, 0, 0);" >
2007-12-08 11:07:23 +00:00
$return["account_types"] = array("host");< / span > < br style = "color: rgb(255, 0, 0);" >
2004-11-01 13:56:54 +00:00
return $return;< br >
}< br >
< / td >
< / tr >
< / tbody >
< / table >
< br >
< br >
2005-01-10 10:58:05 +00:00
< h2 > 2. Base modules< br >
< / h2 >
In LDAP every entry needs exactly one < span style = "font-style: italic;" > structural
2007-12-08 11:07:23 +00:00
object class< / span > . Therefore all modules which provide a < span style = "font-style: italic;" > structural object class< / span > are marked
2005-01-10 10:58:05 +00:00
as < span style = "font-weight: bold;" > base module< / span > .< br >
< br >
This is done with < span style = "font-weight: bold;" > is_base_module()< / span >
or < span style = "font-weight: bold;" > meta['is_base']< / span > .< br >
< br >
2007-12-08 11:07:23 +00:00
< span style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br style = "font-weight: bold; text-decoration: underline;" >
2005-01-10 10:58:05 +00:00
< br >
The < span style = "font-style: italic;" > inetOrgPerson< / span >
module manages the structural object class "inetOrgPerson" and
therefore is a < span style = "font-weight: bold;" > base module< / span > .< br >
If your module is not a base module you can skip the meta data for
this, default is < span style = "font-style: italic;" > false< / span > .< br >
< br >
2007-12-08 11:07:23 +00:00
< table style = "width: 100%; text-align: left;" class = "mod-code" border = "0" cellpadding = "2" cellspacing = "2" >
2005-01-10 10:58:05 +00:00
< tbody >
< tr >
< td style = "vertical-align: top;" > /**< br >
* Returns meta data that is interpreted by parent
class< br >
*< br >
* @return array array with meta data< br >
*/< br >
< span style = "font-weight: bold;" > function< / span >
get_metaData() {< br >
$return = array();< br >
// base module< br >
< span style = "color: rgb(255, 0, 0);" >
2007-12-08 11:07:23 +00:00
$return["is_base"] = true;< / span > < br style = "color: rgb(255, 0, 0);" >
2005-01-10 10:58:05 +00:00
return $return;< br >
}< br >
< / td >
< / tr >
< / tbody >
< / table >
< br >
< br >
< h2 > 3. Alias name< / h2 >
2007-12-08 11:07:23 +00:00
The module name is very limited, therefore every module has an < span style = "font-style: italic;" > alias name< / span > . This < span style = "font-style: italic;" > alias name< / span > has no limitations and
2004-11-01 13:56:54 +00:00
can be translated. It may contain special characters but make sure that
it does not contain HTML special characters like "< ".< br >
The < span style = "font-style: italic;" > alias name < / span > can be the
same for all managed < span style = "font-style: italic;" > account types< / span >
or differ for each type.< br >
< br >
The < span style = "font-style: italic;" > alias name< / span > is specified
with < span style = "font-weight: bold;" > get_alias()< / span >
or < span style = "font-weight: bold;" > meta['alias']< / span > .< br >
< br >
2007-12-08 11:07:23 +00:00
< span style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br style = "font-weight: bold; text-decoration: underline;" >
2004-11-01 13:56:54 +00:00
< br >
Our < span style = "font-style: italic;" > ieee802Device< / span >
module will get the alias MAC address.< br >
< br >
2007-12-08 11:07:23 +00:00
< table style = "width: 100%; text-align: left;" class = "mod-code" border = "0" cellpadding = "2" cellspacing = "2" >
2004-11-01 13:56:54 +00:00
< tbody >
< tr >
< td style = "vertical-align: top;" > /**< br >
* Returns meta data that is interpreted by parent
class< br >
*< br >
* @return array array with meta data< br >
*/< br >
< span style = "font-weight: bold;" > function< / span >
get_metaData() {< br >
$return = array();< br >
2006-05-01 16:13:10 +00:00
// alias name< br >
2004-11-01 13:56:54 +00:00
< span style = "color: rgb(255, 0, 0);" >
2007-12-08 11:07:23 +00:00
$return["alias"] = _("MAC address");< / span > < br style = "color: rgb(255, 0, 0);" >
2004-11-01 13:56:54 +00:00
return $return;< br >
}< br >
< / td >
< / tr >
< / tbody >
< / table >
< br >
< br >
2005-01-10 10:58:05 +00:00
< h2 > 4. Dependencies< / h2 >
2004-11-01 13:56:54 +00:00
Modules can depend on eachother. This is useful if you need to access
attributes from other modules or the managed object classes of your
module are not structural.< br >
< br >
The dependencies are specified with < span style = "font-weight: bold;" > get_dependencies()< / span >
or < span style = "font-weight: bold;" > meta['dependencies']< / span > .< br >
< br >
2007-12-08 11:07:23 +00:00
< span style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br style = "font-weight: bold; text-decoration: underline;" >
2004-11-01 13:56:54 +00:00
< br >
Our < span style = "font-style: italic;" > ieee802Device< / span >
module depends on the account module (because it is the only structural
module at this time).< br >
< br >
2007-12-08 11:07:23 +00:00
< table style = "width: 100%; text-align: left;" class = "mod-code" border = "0" cellpadding = "2" cellspacing = "2" >
2004-11-01 13:56:54 +00:00
< tbody >
< tr >
< td style = "vertical-align: top;" > /**< br >
* Returns meta data that is interpreted by parent
class< br >
*< br >
* @return array array with meta data< br >
*/< br >
< span style = "font-weight: bold;" > function< / span >
get_metaData() {< br >
$return = array();< br >
2006-05-01 16:13:10 +00:00
// module dependencies< br >
2004-11-01 13:56:54 +00:00
< span style = "color: rgb(255, 0, 0);" >
$return['dependencies'] = array('depends' =>
2007-12-08 11:07:23 +00:00
array('account'), 'conflicts' => array());< / span > < br style = "color: rgb(255, 0, 0);" >
2004-11-01 13:56:54 +00:00
return $return;< br >
}< br >
< / td >
< / tr >
< / tbody >
< / table >
< br >
< br >
2005-01-10 10:58:05 +00:00
< h2 > 5. Messages< / h2 >
2004-11-01 13:56:54 +00:00
There are many situations where you will display messages to the user.
The modules should define such messages at a common place to make it
easier to modify them without searching the complete file.< br >
2007-12-08 11:07:23 +00:00
The < span style = "font-style: italic;" > baseModule< / span > offers the $< span style = "font-weight: bold;" > messages< / span > variable for this. It
2004-11-01 13:56:54 +00:00
should be filled by a function called < span style = "font-weight: bold;" > load_Messages()< / span > .< br >
The < span style = "font-style: italic;" > baseModule< / span > will
automatically check if you have implemented this function and call it
at construction time.< br >
< br >
2007-12-08 11:07:23 +00:00
< span style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br style = "font-weight: bold; text-decoration: underline;" >
2004-11-01 13:56:54 +00:00
< br >
Now let our < span style = "font-style: italic;" > ieee802Device< / span >
module define a message.< br >
< br >
2007-12-08 11:07:23 +00:00
< table style = "width: 100%; text-align: left;" class = "mod-code" border = "0" cellpadding = "2" cellspacing = "2" >
2004-11-01 13:56:54 +00:00
< tbody >
< tr >
< td style = "vertical-align: top;" > /**< br >
* This function fills the error message array with
messages< br >
*/< br >
2007-12-08 11:07:23 +00:00
< span style = "font-weight: bold;" > function< / span > < span style = "color: rgb(255, 0, 0);" > load_Messages< / span > () {< br >
2004-11-01 13:56:54 +00:00
$this-> messages['mac'][0] =
array('ERROR', 'MAC address is invalid!'); // third array value
is set dynamically< br >
}< br >
< / td >
< / tr >
< / tbody >
< / table >
< br >
< br >
2006-04-05 15:48:27 +00:00
< h2 > 6. Managed object classes< br >
2004-11-01 13:56:54 +00:00
< / h2 >
< h2 > < / h2 >
2006-04-05 15:48:27 +00:00
You can tell LAM what object classes are managed by your module.< br >
LAM will then check the spelling of the objectClass attributes and
correct it automatically. This is useful if other applications (e.g.
smbldap-tools) also create accounts and the spelling is differnt.< br >
< br >
< span style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br >
< br >
The < span style = "font-style: italic;" > ieee802Device< / span > module
manages one object class.< br >
< br >
2007-12-08 11:07:23 +00:00
< table style = "width: 100%; text-align: left;" class = "mod-code" border = "0" cellpadding = "2" cellspacing = "2" >
2006-04-05 15:48:27 +00:00
< tbody >
< tr >
< td style = "vertical-align: top;" > /**< br >
* Returns meta data that is interpreted by parent
class< br >
*< br >
* @return array array with meta data< br >
*/< br >
< span style = "font-weight: bold;" > function< / span >
get_metaData() {< br >
$return = array();< br >
2006-05-01 16:13:10 +00:00
// managed object classes< br >
2006-04-05 15:48:27 +00:00
< span style = "color: rgb(255, 0, 0);" >
$return['objectClasses'] = array('ieee802Device');< / span > < br >
return $return;< br >
}< br >
< / td >
< / tr >
< / tbody >
< / table >
2004-11-01 13:56:54 +00:00
< br >
< br >
2006-05-01 16:13:10 +00:00
< h2 > 7. Known LDAP aliases< br >
< / h2 >
LDAP attributes can have several names (e.g. "cn" and "commonName" are
the same). If you manage such attributes then tell LAM about the alias
names.< br >
LAM will then convert all alias names to the given attribute names
automatically.< br >
< br >
< span style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br >
< br >
The < span style = "font-style: italic;" > posixGroup< / span > module manages
the "cn" attribute. This attribute is also known under the alias
"commonName".< br >
This way the module will never see attributes called "commonName"
because LAM renames them as soon as the LDAP entry is loaded.< br >
< br >
2007-12-08 11:07:23 +00:00
< table style = "width: 100%; text-align: left;" class = "mod-code" border = "0" cellpadding = "2" cellspacing = "2" >
2006-05-01 16:13:10 +00:00
< tbody >
< tr >
< td style = "vertical-align: top;" > /**< br >
* Returns meta data that is interpreted by parent
class< br >
*< br >
* @return array array with meta data< br >
*/< br >
< span style = "font-weight: bold;" > function< / span >
get_metaData() {< br >
$return = array();< br >
// LDAP aliases< br >
< span style = "color: rgb(255, 0, 0);" >
$return['LDAPaliases'] = array('commonName' =>
'cn');< / span > < br >
return $return;< br >
}< br >
< / td >
< / tr >
< / tbody >
< / table >
< br >
< br >
2004-11-01 13:56:54 +00:00
< span style = "font-weight: bold;" > < / span >
< h2 > < span style = "font-weight: bold;" > < / span > < / h2 >
< / div >
< / div >
2007-12-08 11:07:23 +00:00
< h2 > 8. Icon< br >
< / h2 >
You can specify a icon for you module. It will be displayed on the
account pages and other module specific places (e.g. file upload).< br >
The icons must be 32x32 pixels in size. The location is relative to the < span style = "font-style: italic;" > graphics< / span > directory.< br >
< br >
< span style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br >
< br >
The < span style = "font-style: italic;" > posixGroup< / span > module uses the "tux.png" from the graphics directory.< br >
< br >
< table style = "width: 100%; text-align: left;" class = "mod-code" border = "0" cellpadding = "2" cellspacing = "2" >
< tbody >
< tr >
< td style = "vertical-align: top;" > /**< br >
* Returns meta data that is interpreted by parent
class< br >
*< br >
* @return array array with meta data< br >
*/< br >
< span style = "font-weight: bold;" > function< / span >
get_metaData() {< br >
$return = array();< br > // icon< br >
< span style = "color: rgb(255, 0, 0);" > $return['icon'] = 'tux.png';< / span > < br >
return $return;< br >
}< br >
< / td >
< / tr >
< / tbody >
< / table >
< br >
< br >
< span style = "font-weight: bold;" > < / span >
< h2 > < span style = "font-weight: bold;" > < / span > < / h2 >
< / body > < / html >