source: trunk/jabberit_messenger/inc/class.ldap_im.inc.php @ 563

Revision 563, 9.7 KB checked in by niltonneto, 15 years ago (diff)

Correções referentes ao release 0.7.10

  • Property svn:executable set to *
Line 
1<?php
2  /***************************************************************************\
3  *  Expresso - Expresso Messenger                                            *
4  *     - Alexandre Correia / Rodrigo Souza                                                               *
5  *     - JETI - http://jeti-im.org/                                                                              *
6  * ------------------------------------------------------------------------- *
7  *  This program is free software; you can redistribute it and/or modify it  *
8  *  under the terms of the GNU General Public License as published by the    *
9  *  Free Software Foundation; either version 2 of the License, or (at your   *
10  *  option) any later version.                                               *
11  \***************************************************************************/
12
13define('PHPGW_INCLUDE_ROOT', '../');
14define('PHPGW_API_INC','../phpgwapi/inc');
15require_once( PHPGW_API_INC . '/class.common.inc.php');
16
17class ldap_im
18{
19        private $ldap;
20        private $ldap_host;
21        private $ldap_context;
22        private $ldap_dn;
23        private $ldap_pass;
24        private $common;
25        private $jid;
26        private $max_result;
27        private $ou_User;
28       
29        public final function __construct()
30        {
31                $this->ldap_host        = (isset($_SESSION['phpgw_info']['jabberit_messenger']['server_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['server_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_host'];
32                $this->ldap_context     = (isset($_SESSION['phpgw_info']['jabberit_messenger']['context_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['context_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_context'];
33                $this->ldap_dn          = (isset($_SESSION['phpgw_info']['jabberit_messenger']['user_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['user_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
34                $this->ldap_pass        = (isset($_SESSION['phpgw_info']['jabberit_messenger']['password_ldap_jabberit'])) ? $_SESSION['phpgw_info']['jabberit_messenger']['password_ldap_jabberit'] : $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
35                $this->jid                      = $_SESSION['phpgw_info']['jabberit_messenger']['user'];
36                $this->max_result       = 50;
37               
38                // Ou User
39                $this->ou_User = $_SESSION['phpgw_info']['jabberit_messenger']['account_dn'];
40                $this->ou_User = substr($this->ou_User,strpos($this->ou_User, "ou="));
41                $this->ou_User = strtoupper(substr($this->ou_User, 0, strpos($this->ou_User, ",dc=")));
42        }
43
44        public final function __destruct()
45        {
46                if( $this->ldap )
47                        ldap_close($this->ldap);
48        }       
49
50        private final function _connect_ldap()
51        {
52                $this->common = new common();
53               
54                if( !$this->ldap )
55                {
56                        $GLOBALS['phpgw_info']['server']['ldap_version3'] = true;
57                        $this->ldap = $this->common->ldapConnect( $this->ldap_host,$this->ldap_dn,$this->ldap_pass, false );
58                }
59        }
60       
61        private final function _ldapConnect($refer = false)
62        {
63                function ldapRebindJabberit($ldap_connection, $ldap_url)
64                {
65                        $acc = $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['acc'];
66                        $pw = $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['pw'];
67                       
68                        @ldap_bind($ldap_connection, $acc,$pw);
69                }
70
71                // Using ContactCenter configuration.
72                $this->ldap_host        =       $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['host'];
73                $this->ldap_context     =       $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['dn'];
74                $this->ldap_dn          =       $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['acc'];
75                $this->ldap_pass        =       $_SESSION['phpgw_info']['jabberit_messenger']['ldapManager']['pw'];
76
77                $this->ldap = ldap_connect($this->ldap_host);
78                ldap_set_option($this->ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
79                ldap_set_option($this->ldap, LDAP_OPT_REFERRALS, $refer);
80               
81                if ($refer)
82                {
83                        ldap_set_rebind_proc($this->ldap, ldapRebindJabberit);
84                }
85               
86                @ldap_bind($this->ldap,$this->ldap_dn,$this->ldap_pass);
87        }
88
89        public final function list_participants_externals($pSearch)
90        {
91                $this->_ldapConnect(true);
92               
93                $mail = $pSearch['mail'];
94               
95                if( $this->ldap )
96                {
97                        $filter = "(&(phpgwaccounttype=u)(mail=".$mail."))";
98                        $justthese = array("uid","uidNumber","cn","mail","phpgwAccountVisible","dn","jpegPhoto");
99                        $search = ldap_search($this->ldap,$this->ldap_context,$filter,$justthese, 0, $this->max_result + 1);
100                        $entry1 = ldap_get_entries($this->ldap,$search);
101                        $entry = ldap_first_entry( $this->ldap, $search );
102                }                       
103               
104                if( $entry1['count'] > 0 )
105                {
106                        $i = 0;
107                        $result_user = array();
108                        $result = array();
109
110                        while($entry)
111                        {
112                       
113                                if ( $entry1[$i]['phpgwaccountvisible'][0] != '-1' )
114                                {
115                                        $result['uidnumber'] = @ldap_get_values($this->ldap, $entry, 'uidnumber');                     
116                                        $result['mail'] = @ldap_get_values($this->ldap, $entry, 'mail');
117                                        $result['uid'] = @ldap_get_values($this->ldap, $entry, 'uid');
118                                        $result['cn'] = @ldap_get_values($this->ldap, $entry, 'cn');
119
120                                        foreach ( $result as $key => $value )
121                                                $result_user[$i][$key] = $value[0];
122
123                                        $ou = explode('dc=', $entry1[$i]['dn']);
124                                        $ou = explode("ou=",$ou[0]);
125                                        $ou = array_pop($ou);
126                                        $result_user[$i]['dn'] = strtoupper(substr($ou,0,strlen($ou)-1));
127
128                                        $result_user[$i]['photo'] = 0;
129
130                                        $photo = @ldap_get_values_len($this->ldap, $entry, 'jpegphoto');
131
132                                        if ( $photo )
133                                        {
134                                                $result_user[$i]['photo'] = 1;
135                                                $_SESSION['phpgw_info']['jabberit_messenger']['photo'][trim($result_user[$i]['uid'])] = $photo[0];
136                                        }
137
138                                        $i++;
139                                }                               
140                                $entry = ldap_next_entry($this->ldap,$entry);   
141                        }
142                       
143                        $return  = "<uids>";
144                        $return .= "<".$result_user[0]['dn']."><data>";
145                        $return .= "<cn>".$result_user[0]['cn']."</cn>";
146                        $return .= "<mail>".$result_user[0]['mail']."</mail>";
147                        $return .= "<uid>".$result_user[0]['uid']."</uid>";
148                        $return .= "<photo>".$result_user[0]['photo']."</photo>";                                                                       
149                        $return .= "</data></".$result_user[0]['dn'].">";                       
150                        $return .= "</uids>";
151
152                        return $return;         
153                }
154               
155                return '<empty/>';
156        }
157
158        public final function list_users_ldap($search, $uidnumber, $groupsDeny)
159        {
160                $this->_connect_ldap();
161       
162                if( $this->ldap )
163                {
164                        $filter = "(&(phpgwaccounttype=u)(|".$uidnumber.")(".$search ."))";
165                        $justthese = array("uid","uidNumber","cn","mail","phpgwAccountVisible","dn","jpegPhoto");
166                        // SERPRO
167                        //$justthese = array("uid","uidNumber","cn","mail","description","phpgwAccountVisible","dn","jpegPhoto");
168                        if( $groupsDeny )                       
169                                $search = ldap_search($this->ldap,$this->ou_User.",".$this->ldap_context,$filter,$justthese, 0, $this->max_result + 1);
170                        else
171                                $search = ldap_search($this->ldap,$this->ldap_context,$filter,$justthese, 0, $this->max_result + 1);
172                        $entry1 = ldap_get_entries($this->ldap,$search);
173                        $entry = ldap_first_entry( $this->ldap, $search );
174                }
175
176                if( $entry1['count'] > 0 )
177                {
178                        if( count($entry1) < $this->max_result )
179                        {
180                                $i = 0;
181                                $result_user = array();
182                                $result = array();
183
184                                while($entry)
185                                {
186                               
187                                        if ( $entry1[$i]['phpgwaccountvisible'][0] != '-1' )
188                                        {
189                                                $result['uidnumber'] = @ldap_get_values($this->ldap, $entry, 'uidnumber');                     
190                                                $result['mail'] = @ldap_get_values($this->ldap, $entry, 'mail');
191                                                $result['uid'] = @ldap_get_values($this->ldap, $entry, 'uid');
192                                                $result['cn'] = @ldap_get_values($this->ldap, $entry, 'cn');
193                                                // SERPRO
194                                                //$result['description'] = @ldap_get_values($this->ldap, $entry, 'description');
195
196                                                foreach ( $result as $key => $value )
197                                                        $result_user[$i][$key] = $value[0];
198
199                                                $ou = explode('dc=', $entry1[$i]['dn']);
200                                                $ou = explode("ou=",$ou[0]);
201                                                $ou = array_pop($ou);
202                                                $result_user[$i]['dn'] = strtoupper(substr($ou,0,strlen($ou)-1));
203
204                                                $result_user[$i]['photo'] = 0;
205                                                $photo = @ldap_get_values_len($this->ldap, $entry, 'jpegphoto');
206                                                if ( $photo )
207                                                {
208                                                        $result_user[$i]['photo'] = 1;
209                                                        $_SESSION['phpgw_info']['jabberit_messenger']['photo'][trim($result_user[$i]['uid'])] = $photo[0];
210                                                }
211                                               
212                                                $organization = explode(",", $_SESSION['phpgw_info']['jabberit_messenger']['attributes_org_ldap_jabberit']);
213
214                                                if(is_array($organization))
215                                                {
216                                                        foreach($organization as $attr)
217                                                        {
218                                                                $tmp = explode(";",$attr);
219                                                                if( strtolower(trim($tmp[0])) == strtolower(trim($result_user[$i]['dn'])) )
220                                                                {
221                                                                        switch(strtolower(trim($tmp[1])))
222                                                                        {
223                                                                                case "mail" :
224                                                                                                $uid = $result_user[$i]['mail'];
225                                                                                                $uid = substr($uid,0,strpos($uid,"@"));
226                                                                                                $result_user[$i]['uid'] = $uid;
227                                                                                                break;
228       
229                                                                                case "description" :
230                                                                                                // SERPRO
231                                                                                                // parte antes do arroba;
232                                                                                                $result_user[$i]['uid'] = $result_user[$i]['description'];                                                                             
233                                                                                                break;
234                                                                        }
235                                                                }
236                                                        }
237                                                }
238                                               
239                                                $i++;
240                                        }                               
241                                        $entry = ldap_next_entry($this->ldap,$entry);   
242                                }
243                               
244                                return $result_user;
245                        }
246                        else
247                        {
248                                return "Many Results";
249                        }
250                }
251                return 0;
252        }
253       
254        public final function listOrganizationsLdap()
255        {
256
257                $this->_connect_ldap();
258       
259                if( $this->ldap )
260                {
261                        $filter="ou=*";         
262                        $justthese = array("ou");
263                        $search = ldap_search($this->ldap,$this->ldap_context,$filter,$justthese);                     
264                        $entry = ldap_get_entries($this->ldap, $search);
265                }
266
267                foreach($entry as $tmp)
268                        if($tmp['ou'][0] != "")
269                                $result_org[] = $tmp['ou'][0]; 
270
271                return $result_org;
272        }
273       
274        public final function getGroupsLdap($pOrg)
275        {
276                $this->_ldapConnect(true);
277                $organization = 'ou=' . $pOrg['ou'] .",". $this->ldap_context;
278               
279                if( $this->ldap )       
280                {
281                        $filter = "(&(phpgwAccountType=g)(objectClass=posixGroup))";
282                        $justthese = array("cn","gidNumber");
283                        $search = ldap_list($this->ldap, $organization, $filter, $justthese);
284                        $entry = ldap_get_entries( $this->ldap, $search );
285
286                        if( $entry )
287                        {                                       
288                                $result_groups = "<ldap>";
289                                foreach($entry as $tmp)
290                                        if( $tmp['gidnumber'][0] != "" )
291                                                $result_groups .= "<org><cn>".$tmp['cn'][0]."</cn><gid>".$tmp['gidnumber'][0]."</gid></org>";
292                               
293                                $result_groups .= "</ldap>";                                           
294                        }
295                }
296
297                return $result_groups;
298        }
299
300}
301
302?>
Note: See TracBrowser for help on using the repository browser.