source: trunk/expressoAdmin1_2/inc/class.ldap_functions.inc.php @ 9

Revision 9, 29.2 KB checked in by niltonneto, 17 years ago (diff)

* empty log message *

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php
2define('PHPGW_INCLUDE_ROOT','../');
3define('PHPGW_API_INC','../phpgwapi/inc');     
4include_once(PHPGW_API_INC.'/class.common.inc.php');
5
6class ldap_functions
7{
8        var $ldap;
9        var $current_config;
10       
11        function ldap_functions(){
12                $GLOBALS['phpgw_info']['server'] = $_SESSION['phpgw_info']['expresso']['server'];
13                $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin'];
14                $common = new common();
15                $this->ldap = $common->ldapConnect();
16        }
17       
18        function validate_fields($params)
19        {
20                $params = unserialize($params['attributes']);
21                $type = $params['type'];
22                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
23                $uid = $params['uid'];
24                $mail = $params['mail'];
25                $mailalternateaddress = $params['mailalternateaddress'];
26
27                $result['status'] = true;
28               
29                if (($type == 'create_user') || ($type == 'rename_user'))
30                {
31                        // UID
32                        $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";
33                        $justthese = array("uid");
34                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
35                        $count_entries = ldap_count_entries($this->ldap,$search);
36                        if ($count_entries > 0)
37                        {
38                                $result['status'] = false;
39                                $result['msg'] = 'LOGIN já esta sendo usado.';
40                                return $result;
41                        }
42
43                        // GRUPOS
44                        $filter = "(&(phpgwAccountType=g)(cn=$uid))";
45                        $justthese = array("cn");
46                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
47                        $count_entries = ldap_count_entries($this->ldap,$search);
48                        if ($count_entries > 0)
49                        {
50                                $result['status'] = false;
51                                $result['msg'] = 'LOGIN do usuário já esta sendo usado por um grupo.';
52                                return $result;
53                        }
54               
55                        // UID em outras organizações
56                        //Quando tento retirar as organizações pelo expressoAdmin dá este erro.
57                        $filter = "(ou=*)";
58                        $justthese = array("ou");
59                        $search = ldap_list($this->ldap, $context, $filter, $justthese);
60                        $entries = ldap_get_entries($this->ldap,$search);
61                        foreach ($entries as $index=>$org)
62                        {
63                                $organization = $org['ou'][0];
64                                $organization = strtolower($organization);
65                               
66                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$organization-$uid))";
67                                $justthese = array("uid");
68                                $search = ldap_search($this->ldap, $context, $filter, $justthese);
69                                $count_entries = ldap_count_entries($this->ldap,$search);
70                                if ($count_entries > 0)
71                                {
72                                        $result['status'] = false;
73                                        $result['msg'] = 'LOGIN já esta sendo usado por outro usuário em outra organização.';
74                                        return $result;
75                                }
76                        }
77                }
78               
79                if ($type == 'rename_user')
80                {
81                        return $result;
82                }
83               
84                // MAIL
85                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
86                $justthese = array("mail", "uid");
87                $search = ldap_search($this->ldap, $context, $filter, $justthese);
88                $entries = ldap_get_entries($this->ldap,$search);
89                if ($entries['count'] == 1){
90                        if ($entries[0]['uid'][0] != $uid){
91                                $result['status'] = false;
92                                $result['msg'] = 'E-MAIL está sendo usado por 1 usuário: ' . $entries[0]['uid'][0];
93                                //ldap_close($this->ldap);
94                                return $result;
95                        }
96                }
97                else if ($entries['count'] > 1){
98                        $result['status'] = false;
99                        $result['msg'] = 'E-MAIL está sendo usado por de 2 ou mais usuários.';
100                        //ldap_close($this->ldap);
101                        return $result;
102                }
103               
104                // MAILAlternateAddress
105                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mailalternateaddress)(mailalternateaddress=$mailalternateaddress)))";
106                $justthese = array("mail", "uid");
107                $search = ldap_search($this->ldap, $context, $filter, $justthese);
108                $entries = ldap_get_entries($this->ldap,$search);
109                if ($entries['count'] == 1){
110                        if ($entries[0]['uid'][0] != $uid){
111                                $result['status'] = false;
112                                $result['msg'] = "E-MAIL alternativo está sendo usado por 1 usuário: " . $entries[0]['uid'][0];
113                                //ldap_close($this->ldap);
114                                return $result;
115                        }
116                }
117                else if ($entries['count'] > 1){
118                        $result['status'] = false;
119                        $result['msg'] = 'E-MAIL alternativo está sendo usado por 2 ou mais usuários.';
120                        return $result;
121                }
122
123                return $result;
124        }
125       
126        function validate_fields_group($params)
127        {
128                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
129                $cn = $params['cn'];
130                $result['status'] = true;
131               
132                // CN
133                $filter = "(&(phpgwAccountType=g)(cn=$cn))";
134                $justthese = array("cn");
135                $search = ldap_search($this->ldap, $context, $filter, $justthese);
136                $count_entries = ldap_count_entries($this->ldap,$search);
137                if ($count_entries > 0)
138                {
139                        $result['status'] = false;
140                        $result['msg'] = 'NOME do grupo já está sendo usado.';
141                        return $result;
142                }
143               
144                // UID
145                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$cn))";
146                $justthese = array("uid");
147                $search = ldap_search($this->ldap, $context, $filter, $justthese);
148                $count_entries = ldap_count_entries($this->ldap,$search);
149                if ($count_entries > 0)
150                {
151                        $result['status'] = false;
152                        $result['msg'] = 'NOME do grupo já esta sendo usado por um usuário.';
153                        return $result;
154                }
155               
156                return $result;
157        }
158       
159        function validate_fields_maillist($params)
160        {
161                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
162                $uid = $params['uid'];
163                $mail = $params['mail'];
164                $result['status'] = true;
165               
166                // UID
167                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
168                $justthese = array("uid");
169                $search = ldap_search($this->ldap, $context, $filter, $justthese);
170                $count_entries = ldap_count_entries($this->ldap,$search);
171                if ($count_entries > 0)
172                {
173                        $result['status'] = false;
174                        $result['msg'] = 'LOGIN da lista já está sendo usado.';
175                        return $result;
176                }
177               
178                // MAIL
179                /*
180                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
181                $justthese = array("mail");
182                $search = ldap_search($this->ldap, $context, $filter, $justthese);
183                $count_entries = ldap_count_entries($this->ldap,$search);
184                if ($count_entries > 0)
185                {
186                        $result['status'] = false;
187                        $result['msg'] = 'E-MAIL da lista já está sendo usado.';
188                        return $result;
189                }*/
190               
191                return $result;
192        }
193
194        //Busca usuários de um contexto e já retorna as options do select;
195        function get_available_users($params)
196        {
197                $context = $params['context'];
198                $recursive = $params['recursive'];
199                $justthese = array("cn", "uidNumber");
200                $filter="(phpgwAccountType=u)";
201               
202                if ($recursive == 'true')
203                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
204                else
205                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
206       
207        $entries = ldap_get_entries($this->ldap, $groups_list);
208       
209                for ($i=0; $i<$entries["count"]; $i++){
210                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
211                }
212                       
213                if (count($u_tmp))
214                        natcasesort($u_tmp);
215
216                $i = 0;
217                $users = array();
218                       
219                if (count($u_tmp))
220                {
221                        foreach ($u_tmp as $uidnumber => $cn)
222                        {
223                                $options .= "<option value=$uidnumber>$cn</option>";
224                        }
225                        unset($u_tmp);
226                }
227
228        return $options;
229        }
230
231        //Busca usuários de um contexto e já retorna as options do select;
232        function get_available_users_and_maillist($params)
233        {
234                $context = $params['context'];
235                $recursive = $params['recursive'];
236                $justthese = array("cn", "uidNumber");
237                $filter="(|(phpgwAccountType=u)(phpgwAccountType=l))";
238               
239                if ($recursive == 'true')
240                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
241                else
242                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
243       
244        $entries = ldap_get_entries($this->ldap, $groups_list);
245       
246                for ($i=0; $i<$entries["count"]; $i++){
247                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
248                }
249                       
250                if (count($u_tmp))
251                        natcasesort($u_tmp);
252
253                $i = 0;
254                $users = array();
255                       
256                if (count($u_tmp))
257                {
258                        foreach ($u_tmp as $uidnumber => $cn)
259                        {
260                                $options .= "<option value=$uidnumber>$cn</option>";
261                        }
262                        unset($u_tmp);
263                }
264
265        return $options;
266        }
267
268        function get_available_groups($params)
269        {
270                $context = $params['context'];
271                $justthese = array("cn", "gidNumber");
272        $groups_list=ldap_list($this->ldap, $context, ("(phpgwAccountType=g)"), $justthese);
273        ldap_sort($this->ldap, $groups_list, "cn");
274       
275        $entries = ldap_get_entries($this->ldap, $groups_list);
276        return $entries;               
277        }
278       
279        function get_available_maillists($params)
280        {
281                $context = $params['context'];
282                $justthese = array("uid","mail","uidNumber");
283        $maillists=ldap_list($this->ldap, $context, ("(phpgwAccountType=l)"), $justthese);
284        ldap_sort($this->ldap, $maillists, "uid");
285       
286        $entries = ldap_get_entries($this->ldap, $maillists);
287        return $entries;               
288        }
289       
290        function ldap_add_entry($dn, $entry)
291        {
292                $result = array();
293                if (!@ldap_add ( $this->ldap, $dn, $entry ))
294                {
295                        $result['status'] = false;
296                        $result['msg'] = "Erro na funcao ldap_functions->ldap_add_entry ($dn).\nRetorno do servidor:" . ldap_error($this->ldap);
297                }
298                else
299                        $result['status'] = true;
300               
301                return $result;
302        }
303       
304        function ldap_save_photo($dn, $pathphoto, $photo_exist=false)
305        {
306                $fd = fopen($pathphoto, "r");
307                $fsize = filesize($pathphoto);
308                $jpegStr = fread($fd, $fsize);
309                fclose ($fd);
310                $attrs['jpegPhoto'] = $jpegStr;
311                       
312                if ($photo_exist)
313                        $res = @ldap_mod_replace($this->ldap, $dn, $attrs);
314                else
315                        $res = @ldap_mod_add($this->ldap, $dn, $attrs);
316                       
317                if ($res)
318                {
319                        $result['status'] = true;
320                }
321                else
322                {
323                        $result['status'] = false;
324                        $result['msg'] = "Erro na funcao ldap_functions->ldap_save_photo ($dn).\\nRetorno do servidor:" . ldap_error($this->ldap);
325                }
326               
327                return $result;
328        }
329       
330        function ldap_remove_photo($dn)
331        {
332                $attrs['jpegPhoto'] = array();
333                $res = ldap_mod_del($this->ldap, $dn, $attrs);
334               
335                if ($res)
336                {
337                        $result['status'] = true;
338                }
339                else
340                {
341                        $result['status'] = false;
342                        $result['msg'] = "Erro na funcao ldap_functions->ldap_remove_photo ($dn).\\nRetorno do servidor:" . ldap_error($this->ldap);
343                }
344               
345                return $result;
346        }       
347       
348        // Pode receber tanto um único memberUid quanto um array de memberUid's
349        function add_user2group($gidNumber, $memberUid)
350        {
351                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
352                $justthese = array("dn");
353                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
354                $entry = ldap_get_entries($this->ldap, $search);
355                $group_dn = $entry[0]['dn'];
356                $attrs['memberUid'] = $memberUid;
357               
358                $res = @ldap_mod_add($this->ldap, $group_dn, $attrs);
359               
360                if ($res)
361                {
362                        $result['status'] = true;
363                }
364                else
365                {
366                        $result['status'] = false;
367                        $result['msg'] = "Erro na funcao ldap_functions->add_user2group ($memberUid).\\nRetorno do servidor:" . ldap_error($this->ldap);
368                }
369                return $result;
370        }
371       
372        function remove_user2group($gidNumber, $memberUid)
373        {
374                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
375                $justthese = array("dn");
376                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
377                $entry = ldap_get_entries($this->ldap, $search);
378                $group_dn = $entry[0]['dn'];
379                $attrs['memberUid'] = $memberUid;
380                $res = @ldap_mod_del($this->ldap, $group_dn, $attrs);
381               
382                /*echo 'usuarios recebidos para remocao no ldap';
383                echo '<pre>';
384                print_r($memberUid);*/
385               
386                if ($res)
387                {
388                        $result['status'] = true;
389                }
390                else
391                {
392                        $result['status'] = false;
393                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2group ($memberUid).\\nRetorno do servidor:" . ldap_error($this->ldap);
394                }
395                return $result;
396        }
397       
398        function add_user2maillist($uidNumber, $mail)
399        {
400                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
401                $justthese = array("dn");
402                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
403                $entry = ldap_get_entries($this->ldap, $search);
404                $group_dn = $entry[0]['dn'];
405                $attrs['mailForwardingAddress'] = $mail;
406                $res = @ldap_mod_add($this->ldap, $group_dn, $attrs);
407               
408                if ($res)
409                {
410                        $result['status'] = true;
411                }
412                else
413                {
414                        $result['status'] = false;
415                        $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist ($mail).\\nRetorno do servidor:" . ldap_error($this->ldap);
416                }
417                return $result;
418        }
419        function remove_user2maillist($uidNumber, $mail)
420        {
421                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
422                $justthese = array("dn");
423                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
424                $entry = ldap_get_entries($this->ldap, $search);
425                $group_dn = $entry[0]['dn'];
426                $attrs['mailForwardingAddress'] = $mail;
427                $res = @ldap_mod_del($this->ldap, $group_dn, $attrs);
428               
429                if ($res)
430                {
431                        $result['status'] = true;
432                }
433                else
434                {
435                        $result['status'] = false;
436                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist ($mail).\\nRetorno do servidor:" . ldap_error($this->ldap);
437                }
438                return $result;
439        }
440        function replace_user2maillists($new_mail, $old_mail)
441        {
442                $filter = "(&(phpgwAccountType=l)(mailforwardingaddress=$old_mail))";
443                $justthese = array("dn");
444                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
445                $entries = ldap_get_entries($this->ldap, $search);
446                $result['status'] = true;
447                for ($i=0; $i<$entries['count']; $i++)
448                {
449                        $attrs['mailforwardingaddress'] = $old_mail;
450                        $res1 = @ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs);
451                        $attrs['mailforwardingaddress'] = $new_mail;
452                        $res2 = @ldap_mod_add($this->ldap, $entries[$i]['dn'], $attrs);
453               
454                        if ((!$res1) || (!$res2))
455                        {
456                                $result['status'] = false;
457                                $result['msg'] = "Erro na funcao ldap_functions->replace_user2maillists ($old_mail).\\nRetorno do servidor:" . ldap_error($this->ldap);
458                        }
459                }
460               
461                return $result;
462        }
463       
464        function get_user_info($uidnumber, $context)
465        {
466                $filter="(&(phpgwAccountType=u)(uidNumber=".$uidnumber."))";
467                $search = ldap_search($this->ldap, $context, $filter);
468                $entry = ldap_get_entries($this->ldap, $search);
469
470                //Pega o dn do setor do usuario.
471                $entry[0]['dn'] = strtolower($entry[0]['dn']);
472                $sector_dn_array = explode(",", $entry[0]['dn']);
473                for($i=1; $i<count($sector_dn_array); $i++)
474                        $sector_dn .= $sector_dn_array[$i] . ',';
475                //Retira ultimo pipe.
476                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
477               
478                $result['context']                              = $sector_dn;
479                $result['uid']                                  = $entry[0]['uid'][0];
480                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
481                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
482                $result['departmentnumber']             = $entry[0]['departmentnumber'][0];
483                $result['givenname']                    = $entry[0]['givenname'][0];
484                $result['sn']                                   = $entry[0]['sn'][0];
485                $result['telephonenumber']              = $entry[0]['telephonenumber'][0];
486                $result['phpgwaccountstatus']   = $entry[0]['phpgwaccountstatus'][0];
487                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
488                $result['accountstatus']                = $entry[0]['accountstatus'][0];
489                $result['mail']                                 = $entry[0]['mail'][0];
490                $result['mailalternateaddress'] = $entry[0]['mailalternateaddress'][0];
491                $result['mailforwardingaddress']= $entry[0]['mailforwardingaddress'][0];
492                $result['deliverymode']                 = $entry[0]['deliverymode'][0];
493
494                //Photo
495                if ($entry[0]['jpegphoto']['count'] == 1)
496                        $result['photo_exist'] = 'true';
497               
498                // Samba
499                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
500                {
501                        if ($entry[0]['objectclass'][$i] == 'sambaSamAccount')
502                                $result['sambaUser'] = true;
503                }               
504                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($result['sambaUser']))
505                {
506                        $result['sambaaccflags'] = $entry[0]['sambaacctflags'][0];
507                        $result['sambalogonscript'] = $entry[0]['sambalogonscript'][0];
508                        $result['homedirectory'] = $entry[0]['homedirectory'][0];
509                }
510               
511                // MailLists
512                $justthese = array("uid","mail","uidnumber");
513                $filter="(&(phpgwAccountType=l)(mailforwardingaddress=".$result['mail']."))";
514                $search = ldap_search($this->ldap, $context, $filter, $justthese);
515        ldap_sort($this->ldap, $search, "uid");
516        $entries = ldap_get_entries($this->ldap, $search);
517        for ($i=0; $i<$entries['count']; $i++)
518        {
519                $result['maillists_info'][$i]['uidnumber'] = $entries[$i]['uidnumber'][0];
520                $result['maillists_info'][$i]['uid'] = $entries[$i]['uid'][0];
521                $result['maillists_info'][$i]['mail'] = $entries[$i]['mail'][0];
522                $result['maillists'][] = $entries[$i]['uidnumber'][0];
523        }
524       
525        // Groups
526                $justthese = array("gidnumber","cn");
527                $filter="(&(phpgwAccountType=g)(memberuid=".$result['uid']."))";
528                $search = ldap_search($this->ldap, $context, $filter, $justthese);
529        ldap_sort($this->ldap, $search, "cn");
530        $entries = ldap_get_entries($this->ldap, $search);
531        for ($i=0; $i<$entries['count']; $i++)
532        {
533                $result['groups_ldap'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['cn'][0];
534        }
535       
536                return $result;         
537        }
538       
539        function get_group_info($gidnumber, $context)
540        {
541                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
542                $search = ldap_search($this->ldap, $context, $filter);
543                $entry = ldap_get_entries($this->ldap, $search);
544
545                //Pega o dn do setor do grupo.
546                $entry[0]['dn'] = strtolower($entry[0]['dn']);
547                $sector_dn_array = explode(",", $entry[0]['dn']);
548                for($i=1; $i<count($sector_dn_array); $i++)
549                        $sector_dn .= $sector_dn_array[$i] . ',';
550                //Retira ultimo pipe.
551                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
552               
553                $result['context']                              = $sector_dn;
554                $result['cn']                                   = $entry[0]['cn'][0];
555                $result['description']                  = $entry[0]['description'][0];
556                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
557               
558                //MemberUid
559                for ($i=0; $i<$entry[0]['memberuid']['count']; $i++)
560                {
561                        $justthese = array("cn","uid","uidnumber");
562                        $filter="(&(phpgwAccountType=u)(uid=".$entry[0]['memberuid'][$i]."))";
563                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
564                        $user_entry = ldap_get_entries($this->ldap, $search);
565
566                        if ($user_entry[0]['uid'][0] == '')
567                        {
568                                $result['memberuid_info'][$i]['cn'] = '0-UID NAO EXISTE, corrigir manualmente: ' . $entry[0]['memberuid'][$i];
569                                $result['memberuid_info'][$i]['uid'] = $entry[0]['memberuid'][$i];
570                                $result['memberuid_info'][$i]['uidnumber'] = $entry[0]['memberuid'][$i];
571                        }
572                        else
573                        {
574                                $result['memberuid_info'][$i]['cn'] = $user_entry[0]['cn'][0];
575                                $result['memberuid_info'][$i]['uid'] = $user_entry[0]['uid'][0];
576                                $result['memberuid_info'][$i]['uidnumber'] = $user_entry[0]['uidnumber'][0];
577                        }
578                }
579               
580                // Samba
581                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
582                {
583                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
584                                $result['sambaGroup'] = true;
585                }
586                return $result;
587        }       
588       
589        function get_maillist_info($uidnumber, $context)
590        {
591                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
592                $search = ldap_search($this->ldap, $context, $filter);
593                $entry = ldap_get_entries($this->ldap, $search);
594
595                //Pega o dn do setor do usuario.
596                $entry[0]['dn'] = strtolower($entry[0]['dn']);
597                $sector_dn_array = explode(",", $entry[0]['dn']);
598                for($i=1; $i<count($sector_dn_array); $i++)
599                        $sector_dn .= $sector_dn_array[$i] . ',';
600                //Retira ultimo pipe.
601                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
602               
603                $result['context']                              = $sector_dn;
604                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
605                $result['uid']                                  = $entry[0]['uid'][0];
606                $result['cn']                                   = $entry[0]['cn'][0];
607                $result['mail']                                 = $entry[0]['mail'][0];
608                $result['mail']                                 = $entry[0]['mail'][0];
609                $result['accountStatus']                = $entry[0]['accountstatus'][0];
610                $result['phpgwAccountVisible']  = $entry[0]['phpgwaccountvisible'][0];
611               
612                //Members
613                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
614                {
615                        $justthese = array("cn", "uidnumber", "uid");
616                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(mail=".$entry[0]['mailforwardingaddress'][$i]."))";
617                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
618                        $user_entry = ldap_get_entries($this->ldap, $search);
619                       
620                        if ($user_entry['count'] != 0)
621                        {
622                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['uid'] = $user_entry[0]['uid'][0];
623                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['cn'] = $user_entry[0]['cn'][0];
624                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['mailforwardingaddress'] = $entry[0]['mailforwardingaddress'][$i];
625                                $result['members'][] = $user_entry[0]['uidnumber'][0];
626                        }
627                        else
628                        {
629                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['uid'] = $entry[0]['mailforwardingaddress'][$i];
630                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['cn'] = 'E-Mail nao encontrado (' . $entry[0]['mailforwardingaddress'][$i] . ')';
631                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['mailforwardingaddress'] = $entry[0]['mailforwardingaddress'][$i];
632                                $result['members'][] = $entry[0]['mailforwardingaddress'][$i];
633                        }
634                }
635               
636                return $result;
637        }       
638
639        function gidnumbers2cn($gidnumbers, $context)
640        {
641                if (count($gidnumbers))
642                {
643                        $justthese = array("cn");
644                        $i = 0;
645                        foreach ($gidnumbers as $gidnumber)
646                        {
647                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
648                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
649                               
650                                $entry = ldap_get_entries($this->ldap, $search);
651                                $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
652                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
653                               
654                                if (!strpos(strtolower($entry[0]['dn']), strtolower($context)))
655                                        $result['groups_info'][$i]['group_disabled'] = 'true';
656                                else
657                                        $result['groups_info'][$i]['group_disabled'] = 'false';
658                               
659                                $i++;
660                        }
661                }
662                return $result;
663        }
664
665        function uidnumber2uid($uidnumber)
666        {
667                $justthese = array("uid");
668                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
669                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
670                $entry = ldap_get_entries($this->ldap, $search);
671                return $entry[0]['uid'][0];
672        }
673
674        function uidnumber2mail($uidnumber)
675        {
676                $justthese = array("mail");
677                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
678                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
679                $entry = ldap_get_entries($this->ldap, $search);
680                return $entry[0]['mail'][0];
681        }
682
683       
684        function change_user_context($dn, $newrdn, $newparent)
685        {
686                if (!ldap_rename ( $this->ldap, $dn, $newrdn, $newparent, true ))
687                {
688                        $return['status'] = false;
689                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldap);
690                }
691                else
692                        $return['status'] = true;
693               
694                return $return;
695        }
696       
697        function replace_user_attributes($dn, $ldap_mod_replace)
698        {
699                if (!@ldap_mod_replace ( $this->ldap, $dn, $ldap_mod_replace ))
700                {
701                        $return['status'] = false;
702                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap);
703                }
704                else
705                        $return['status'] = true;
706               
707                return $return;
708        }
709       
710        function add_user_attributes($dn, $ldap_add)
711        {
712                if (!@ldap_mod_add ( $this->ldap, $dn, $ldap_add ))
713                {
714                        $return['status'] = false;
715                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap);
716                }
717                else
718                        $return['status'] = true;
719               
720                return $return;
721        }
722       
723        function remove_user_attributes($dn, $ldap_remove)
724        {
725                if (!@ldap_mod_del ( $this->ldap, $dn, $ldap_remove ))
726                {
727                        $return['status'] = false;
728                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldap);
729                }
730                else
731                        $return['status'] = true;
732               
733                return $return;
734        }
735       
736        function set_user_password($uid, $password)
737        {
738                $justthese = array("userPassword");
739                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
740                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
741            $entry = ldap_get_entries($this->ldap, $search);
742                $dn = $entry[0]['dn'];
743                $userPassword = $entry[0]['userpassword'][0];
744                $ldap_mod_replace['userPassword'] = $password;
745                $this->replace_user_attributes($dn, $ldap_mod_replace);
746                return $userPassword;
747        }
748       
749        function delete_user($user_info)
750        {
751                $return['status'] = true;
752               
753                // GROUPS
754                $attrs = array();
755                $attrs['memberUid'] = $user_info['uid'];
756                if (count($user_info['groups_info']))
757                {
758                        foreach ($user_info['groups_info'] as $group_info)
759                        {
760                                $gidnumber = $group_info['gidnumber'];
761                                $justthese = array("dn");
762                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
763                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
764                        $entry = ldap_get_entries($this->ldap, $search);
765                                $dn = $entry[0]['dn'];
766                       
767                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
768                                {
769                                        $return['status'] = false;
770                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap);
771                                }
772                        }
773                }
774                       
775                // MAILLISTS
776                $attrs = array();
777                $attrs['mailForwardingAddress'] = $user_info['mail'];
778                if (count($user_info['maillists_info']))
779                {
780                        foreach ($user_info['maillists_info'] as $maillists_info)
781                        {
782                                $uidnumber = $maillists_info['uidnumber'];
783                                $justthese = array("dn");
784                                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
785                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
786                        $entry = ldap_get_entries($this->ldap, $search);
787                                $dn = $entry[0]['dn'];
788                       
789                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
790                                {
791                                        $return['status'] = false;
792                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
793                                }
794                        }
795                }
796                       
797                // UID
798                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
799                if (!@ldap_delete($this->ldap, $dn))
800                {
801                        $return['status'] = false;
802                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
803                }
804               
805                return $return;
806        }
807       
808        function delete_maillist($uidnumber)
809        {
810                $return['status'] = true;
811               
812                $justthese = array("dn");
813                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
814                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
815                $entry = ldap_get_entries($this->ldap, $search);
816                $dn = $entry[0]['dn'];
817               
818                if (!@ldap_delete($this->ldap, $dn))
819                {
820                        $return['status'] = false;
821                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
822                }
823               
824                return $return;
825        }
826
827        function delete_group($gidnumber)
828        {
829                $return['status'] = true;
830               
831                $justthese = array("dn");
832                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
833                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
834                $entry = ldap_get_entries($this->ldap, $search);
835                $dn = $entry[0]['dn'];
836               
837                if (!@ldap_delete($this->ldap, $dn))
838                {
839                        $return['status'] = false;
840                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
841                }
842               
843                return $return;
844        }
845
846       
847        function rename_uid($uid, $new_uid)
848        {
849                $return['status'] = true;
850               
851                $justthese = array("dn");
852                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
853                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
854            $entry = ldap_get_entries($this->ldap, $search);
855                $dn = $entry[0]['dn'];
856               
857                $explode_dn = ldap_explode_dn($dn, 0);
858                $rdn = "uid=" . $new_uid;
859
860                $parent = array();
861                for ($j=1; $j<(count($explode_dn)-1); $j++)
862                        $parent[] = $explode_dn[$j];
863                $parent = implode(",", $parent);
864               
865                $return['new_dn'] = $rdn . ',' . $parent;
866                       
867                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
868                {
869                        $return['status'] = false;
870                        $return['msg'] .= 'Erro em ldap_funcitons->rename_uid: ' . ldap_error($this->ldap);
871                }
872               
873                //Grupos
874                $justthese = array("dn");
875                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
876                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
877            $entry = ldap_get_entries($this->ldap, $search);
878        $array_mod_add['memberUid'] = $new_uid;
879        $array_mod_del['memberUid'] = $uid;
880
881            for ($i=0; $i<=$entry['count']; $i++)
882            {
883                $dn = $entry[$i]['dn'];
884                @ldap_mod_add ( $this->ldap, $dn,  $array_mod_add);
885                @ldap_mod_del ( $this->ldap, $dn,  $array_mod_del);
886            }
887                return $return;
888        }
889
890        function rename_cn($cn, $new_cn)
891        {
892                $return['status'] = true;
893               
894                $justthese = array("dn");
895                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
896                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
897            $entry = ldap_get_entries($this->ldap, $search);
898                $dn = $entry[0]['dn'];
899               
900                $explode_dn = ldap_explode_dn($dn, 0);
901                $rdn = "cn=" . $new_cn;
902
903                $parent = array();
904                for ($j=1; $j<(count($explode_dn)-1); $j++)
905                        $parent[] = $explode_dn[$j];
906                $parent = implode(",", $parent);
907               
908                $return['new_dn'] = $rdn . ',' . $parent;
909                       
910                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
911                {
912                        $return['status'] = false;
913                }
914               
915                return $return;
916        }
917
918        function rename_departmentnumber($old_dp, $new_dp)
919        {
920               
921                $return['status'] = true;
922               
923               
924                $justthese = array("dn");
925                $filter="(&(phpgwAccountType=u)(departmentnumber=".$old_dp."))";
926                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
927            $entry = ldap_get_entries($this->ldap, $search);
928               
929            for ($i=0; $i<=$entry['count']; $i++)
930            {
931                $dn = strtolower($entry[$i]['dn']);
932                $ldap_mod_replace = array();
933                $ldap_mod_replace['departmentnumber'] = $new_dp;
934                @ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace);
935                        /*if (!@ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace))
936                        {
937                                $return['status'] = false;
938                                $return['msg'] .= 'Erro em ldap_funcitons->rename_departmentnumber: ' . ldap_error($this->ldap);
939                        }*/
940            }
941                return $return;
942        }
943}
944?>
Note: See TracBrowser for help on using the repository browser.