backend_isode_ldap.php

changeset 0
472198dc918e
equal deleted inserted replaced
-1:000000000000 0:472198dc918e
1 <?php
2
3 Class RegistrationBackend {
4
5 protected $dbconn;
6
7 protected $hostname = "localhost";
8 protected $port = 389;
9 protected $bind_dn;
10 protected $bind_pw;
11 protected $base_dn;
12 protected $objectClass = array(
13 "cmuSaslUser",
14 "mboxUser",
15 "inetUser",
16 "inetOrgPerson",
17 "organizationalPerson",
18 "person"
19 );
20
21 protected $debug = FALSE;
22
23 private $ldap;
24
25 function init($config)
26 {
27 if(array_key_exists('ldapHostname', $config))
28 $this->hostname = $config['ldapHostname'];
29 if(array_key_exists('ldapPort', $config))
30 $this->port = $config['ldapPort'];
31 if(array_key_exists('ldapBindDN', $config))
32 $this->bind_dn = $config['ldapBindDN'];
33 if(array_key_exists('ldapBindPass', $config))
34 $this->bind_pw = $config['ldapBindPass'];
35 if(array_key_exists('ldapBaseDN', $config))
36 $this->base_dn = $config['ldapBaseDN'];
37
38 if($config['debug'])
39 $this->debug = TRUE;
40
41 $this->ldap = ldap_connect($this->hostname, $this->port)
42 or die("Cannot connect to DSA");
43
44 ldap_set_option($this->ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
45
46 ldap_bind($this->ldap, $this->bind_dn, $this->bind_pw)
47 or die("Cannot bind to DSA");
48 }
49
50 function validate($user, $pass)
51 {
52 if(strcspn($user, " \"#+,;<=>\\") !== strlen($user))
53 return "Your username contains invalid characters.";
54 return NULL;
55 }
56
57 function exists($user)
58 {
59 $dn = "uid=" . $user . "," . $this->base_dn;
60 $res = @ldap_read($this->ldap, $dn, "objectClass=inetOrgPerson");
61 if($res === FALSE)
62 return FALSE;
63 return TRUE;
64 }
65
66 function create($user, $pass)
67 {
68 $dn = "uid=" . $user . "," . $this->base_dn;
69
70 $attrs["objectClass"] = $this->objectClass;
71 $attrs["uid"] = $user;
72 $attrs["userPassword"] = $pass;
73
74 # X.500 person class requires a Surname.
75 $attrs["sn"] = $user;
76
77 # Something else (?) requires a CommonName.
78 $attrs["cn"] = $attrs["sn"];
79
80 if (@ldap_add($this->ldap, $dn, $attrs))
81 {
82 return TRUE;
83 }
84 else
85 {
86 if($this->debug)
87 {
88 $errno = ldap_errno($this->ldap);
89 echo "<p>Exciting error number " . $errno . ": <i>" . ldap_err2str($errno) . "</i></p>";
90 echo "<p>DN: " . $dn . "</p>";
91 echo "<p>Attrs: <pre>";
92 print_r($attrs);
93 echo "</pre></p>";
94 }
95 return FALSE;
96 }
97 }
98
99
100 function close()
101 {
102 ldap_unbind($this->ldap);
103 }
104 }
105
106 ?>

mercurial