[Wiki] changed: CustomizingPreferences
Wiki Guest <[email protected]>
| Newsgroups | gmane.comp.horde.cvs |
|---|---|
| Message-ID | <[email protected]> |
guest [195.28.83.205] Thu, 08 Jan 2009 03:05:47 -0500
Modified page: http://wiki.horde.org/CustomizingPreferences
New Revision: 3.2
Change log: added modifications of KMM's hooks, for the Active
Directory in Windows 2003 domain
@@ -326,8 +326,137 @@
}
</code>
KMM
+
+-----
+
++++++ modifications to connect to the "Active Directory" in the
Windows 2003 domain
+
+I've made some modifications of KMM's hooks, and inserted new one for
the identity's name - ID.
+ To work, you have to add the 'hook' => 'true', to $prefs['id'] , to
$prefs['fullname'] , and to $prefs['from_addr'] in the prefs.php file.
+More info:
+- Theese hooks were modified and tested for the "Active Directory"
enviroment on the Windows 2003 (+SP2) server/domain.
+- Horde was set to authenticate against the same "Active Directory",
so conf.php does have all necessary information that may be used later
in the hooks.
+- Hooks variables containing ldap connection information can be
directed to mentioned conf.php .
+
+<code type="php">
+if (!function_exists('_prefs_hook_id')) {
+ function _prefs_hook_id($uid = null)
+ {
+ global $conf;
+ $ldapServer = $conf['auth']['params']['hostspec']; // will
read server info from the conf.php, but can be changed to simple IP
address or FQDN if necessary = server.domain.com .
+ $ldapPort = '3268';
+ $binddn = $conf['auth']['params']['binddn']; // will read
the binddn user from the conf.php required to authenticate against
ldap. can be changed to '[email protected]' .
+ $bindpw = $conf['auth']['params']['password']; // will read
the $binddn user's password from the conf.php required to authenticate
against ldap. can be changed to simple text = 'PASSWORD' .
+ $searchBase = $conf['auth']['params']['basedn']; // will read
the $basedn from the conf.php, but can be changed to =
'ou=SomeOrgUnit,dc=domain,dc=com' .
+ $ds = ldap_connect($ldapServer, $ldapPort);
+ ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); //
specify the LDAP protocol to use the version 3 .
+ ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); // to be able
to perform the searches on Windows 2003 Server Active Directory, this
option must be set.
+
+ if (is_null($uid)) {
+ $uid = Auth::getAuth();
+ }
+
+ if (ldap_bind($ds, $binddn, $bindpw)) {
+ $searchResult = ldap_search($ds, $searchBase,
$conf['auth']['params']['uid'] . '=' . $uid);
+ }
+
+ $information = ldap_get_entries($ds, $searchResult);
+
+ // Get the cn or GECOS value; could also pull givenName + sn
but that usually == cn
+ if ($information[0]['cn'][0] != '') {
+ $id = $information[0]['cn'][0];
+ } else {
+ $id = $information[0]['gecos'][0];
+ }
+
+ ldap_close($ds);
+
+ return $id;
+ }
+}
+</code>
+
+<code type="php">
+if (!function_exists('_prefs_hook_fullname')) {
+ function _prefs_hook_fullname($uid = null)
+ {
+ global $conf;
+ $ldapServer = $conf['auth']['params']['hostspec']; // will
read server info from the conf.php, but can be changed to simple IP
address or FQDN if necessary = server.domain.com .
+ $ldapPort = '3268';
+ $binddn = $conf['auth']['params']['binddn']; // will read
the binddn user from the conf.php required to authenticate against
ldap. can be changed to '[email protected]' .
+ $bindpw = $conf['auth']['params']['password']; // will read
the $binddn user's password from the conf.php required to authenticate
against ldap. can be changed to simple text = 'PASSWORD' .
+ $searchBase = $conf['auth']['params']['basedn']; // will read
the $basedn from the conf.php, but can be changed to =
'ou=SomeOrgUnit,dc=domain,dc=com' .
+ $ds = ldap_connect($ldapServer, $ldapPort);
+ ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); //
specify the LDAP protocol to use the version 3 .
+ ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); // to be able
to perform the searches on Windows 2003 Server Active Directory, this
option must be set.
+
+ if (is_null($uid)) {
+ $uid = Auth::getAuth();
+ }
+
+ if (ldap_bind($ds, $binddn, $bindpw)) {
+ $searchResult = ldap_search($ds, $searchBase,
$conf['auth']['params']['uid'] . '=' . $uid);
+ }
+
+ $information = ldap_get_entries($ds, $searchResult);
+
+ // Get the cn or GECOS value; could also pull givenName + sn
but that usually == cn
+ if ($information[0]['cn'][0] != '') {
+ $name = $information[0]['cn'][0];
+ } else {
+ $name = $information[0]['gecos'][0];
+ }
+
+ ldap_close($ds);
+
+ return $name;
+ }
+}
+</code>
+
+<code type="php">
+if (!function_exists('_prefs_hook_from_addr')) {
+ function _prefs_hook_from_addr($uid = null)
+ {
+ global $conf;
+ $domain_name = 'domain.com';
+ $ldapServer = $conf['auth']['params']['hostspec']; // will
read server info from the conf.php, but can be changed to simple IP
address or FQDN if necessary = server.domain.com .
+// $ldapPort = '3268';
+ $binddn = $conf['auth']['params']['binddn']; // will read
the binddn user from the conf.php required to authenticate against
ldap. can be changed to '[email protected]' .
+ $bindpw = $conf['auth']['params']['password']; // will read
the $binddn user's password from the conf.php required to authenticate
against ldap. can be changed to simple text = 'PASSWORD' .
+ $searchBase = $conf['auth']['params']['basedn']; // will read
the $basedn from the conf.php, but can be changed to =
'ou=SomeOrgUnit,dc=domain,dc=com' .
+ $ds = ldap_connect($ldapServer, $ldapPort);
+ ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); //
specify the LDAP protocol to use the version 3 .
+ ldap_set_option($ds, LDAP_OPT_REFERRALS, 0); // to be able
to perform the searches on Windows 2003 Server Active Directory, this
option must be set.
+
+ if (is_null($uid)) {
+ $uid = Auth::getAuth();
+ }
+
+ // If your search scope is more than one, substitute
ldap_search for ldap_list
+ if (ldap_bind($ds, $binddn, $bindpw)) {
+ $searchResult = ldap_search($ds, $searchBase,
$conf['auth']['params']['uid'] . '=' . $uid);
+ }
+
+ $information = ldap_get_entries($ds, $searchResult);
+
+ // derive the email address if possible
+ if ($information[0]['mail'][0] != '') {
+ $emailname = $information[0]['mail'][0];
+ } else {
+ $emailname = $information[0]['uid'][0] . '@' . $domain_name;
+ }
+
+ ldap_close($ds);
+
+ return $emailname;
+ }
+}
+</code>
+
+Daniel
-----
For the environments where users are authenticated against IMAP
server and all users have at least one email address with the same
domain name like others in the form [email protected], you can
create a hook which adds this implicit address to the default
identity. This can be usefull for Horde modules like WHUPS operate
with default e-mail addresses of users. I didn't use preference hook
for "from_addr" because what I really needed is not the default
address for new identities, but the value for the default identity,
even when the identity already exists. From prefs hook I was unable to
write to other preferences (do not know why), so I created a
postauthentication hook which does everything needed. The only thing I
have not resolved is how to tell the preferences cache to update the
data immediatelly. But in the database everything is stored so this
resolves at the next login automatically.
--
To unsubscribe, mail: [email protected]