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

Revision 24, 36.3 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 ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])
30                {
31                        $result['status'] = false;
32                        $result['msg'] = 'Este LOGIN não pode ser usado pois é uma conta de sistema.';
33                        return $result;
34                }
35               
36                if (($type == 'create_user') || ($type == 'rename_user'))
37                {
38                        // UID
39                        $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";
40                        $justthese = array("uid");
41                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
42                        $count_entries = ldap_count_entries($this->ldap,$search);
43                        if ($count_entries > 0)
44                        {
45                                $result['status'] = false;
46                                $result['msg'] = 'LOGIN já esta sendo usado.';
47                                return $result;
48                        }
49
50                        // GRUPOS
51                        $filter = "(&(phpgwAccountType=g)(cn=$uid))";
52                        $justthese = array("cn");
53                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
54                        $count_entries = ldap_count_entries($this->ldap,$search);
55                        if ($count_entries > 0)
56                        {
57                                $result['status'] = false;
58                                $result['msg'] = 'LOGIN do usuário já esta sendo usado por um grupo.';
59                                return $result;
60                        }
61               
62                        // UID em outras organizações
63                        //Quando tento retirar as organizações pelo expressoAdmin dá este erro.
64                        $filter = "(ou=*)";
65                        $justthese = array("ou");
66                        $search = ldap_list($this->ldap, $context, $filter, $justthese);
67                        $entries = ldap_get_entries($this->ldap,$search);
68                        foreach ($entries as $index=>$org)
69                        {
70                                $organization = $org['ou'][0];
71                                $organization = strtolower($organization);
72                               
73                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$organization-$uid))";
74                                $justthese = array("uid");
75                                $search = ldap_search($this->ldap, $context, $filter, $justthese);
76                                $count_entries = ldap_count_entries($this->ldap,$search);
77                                if ($count_entries > 0)
78                                {
79                                        $result['status'] = false;
80                                        $result['msg'] = 'LOGIN já esta sendo usado por outro usuário em outra organização.';
81                                        return $result;
82                                }
83                        }
84                }
85               
86                if ($type == 'rename_user')
87                {
88                        return $result;
89                }
90               
91                // MAIL
92                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
93                $justthese = array("mail", "uid");
94                $search = ldap_search($this->ldap, $context, $filter, $justthese);
95                $entries = ldap_get_entries($this->ldap,$search);
96                if ($entries['count'] == 1){
97                        if ($entries[0]['uid'][0] != $uid){
98                                $result['status'] = false;
99                                $result['msg'] = 'E-MAIL está sendo usado por 1 usuário: ' . $entries[0]['uid'][0];
100                                //ldap_close($this->ldap);
101                                return $result;
102                        }
103                }
104                else if ($entries['count'] > 1){
105                        $result['status'] = false;
106                        $result['msg'] = 'E-MAIL está sendo usado por de 2 ou mais usuários.';
107                        //ldap_close($this->ldap);
108                        return $result;
109                }
110               
111                // MAILAlternateAddress
112                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mailalternateaddress)(mailalternateaddress=$mailalternateaddress)))";
113                $justthese = array("mail", "uid");
114                $search = ldap_search($this->ldap, $context, $filter, $justthese);
115                $entries = ldap_get_entries($this->ldap,$search);
116                if ($entries['count'] == 1){
117                        if ($entries[0]['uid'][0] != $uid){
118                                $result['status'] = false;
119                                $result['msg'] = "E-MAIL alternativo está sendo usado por 1 usuário: " . $entries[0]['uid'][0];
120                                //ldap_close($this->ldap);
121                                return $result;
122                        }
123                }
124                else if ($entries['count'] > 1){
125                        $result['status'] = false;
126                        $result['msg'] = 'E-MAIL alternativo está sendo usado por 2 ou mais usuários.';
127                        return $result;
128                }
129
130                return $result;
131        }
132       
133        function validate_fields_group($params)
134        {
135                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
136                $cn = $params['cn'];
137                $result['status'] = true;
138               
139                if ($_SESSION['phpgw_info']['expresso']['global_denied_groups'][$cn])
140                {
141                        $result['status'] = false;
142                        $result['msg'] = 'Este nome de grupo não pode ser usado pois é um grupo de sistema.';
143                        return $result;
144                }
145               
146                // CN
147                $filter = "(&(phpgwAccountType=g)(cn=$cn))";
148                $justthese = array("cn");
149                $search = ldap_search($this->ldap, $context, $filter, $justthese);
150                $count_entries = ldap_count_entries($this->ldap,$search);
151                if ($count_entries > 0)
152                {
153                        $result['status'] = false;
154                        $result['msg'] = 'NOME do grupo já está sendo usado.';
155                        return $result;
156                }
157               
158                // UID
159                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$cn))";
160                $justthese = array("uid");
161                $search = ldap_search($this->ldap, $context, $filter, $justthese);
162                $count_entries = ldap_count_entries($this->ldap,$search);
163                if ($count_entries > 0)
164                {
165                        $result['status'] = false;
166                        $result['msg'] = 'NOME do grupo já esta sendo usado por um usuário.';
167                        return $result;
168                }
169               
170                return $result;
171        }
172       
173        function validate_fields_maillist($params)
174        {
175                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
176                $uid = $params['uid'];
177                $mail = $params['mail'];
178                $result['status'] = true;
179               
180                if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])
181                {
182                        $result['status'] = false;
183                        $result['msg'] = 'Este LOGIN não pode ser usado pois é uma conta de sistema.';
184                        return $result;
185                }
186               
187                // UID
188                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
189                $justthese = array("uid");
190                $search = ldap_search($this->ldap, $context, $filter, $justthese);
191                $count_entries = ldap_count_entries($this->ldap,$search);
192                if ($count_entries > 0)
193                {
194                        $result['status'] = false;
195                        $result['msg'] = 'LOGIN da lista já está sendo usado.';
196                        return $result;
197                }
198               
199                // MAIL
200                /*
201                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
202                $justthese = array("mail");
203                $search = ldap_search($this->ldap, $context, $filter, $justthese);
204                $count_entries = ldap_count_entries($this->ldap,$search);
205                if ($count_entries > 0)
206                {
207                        $result['status'] = false;
208                        $result['msg'] = 'E-MAIL da lista já está sendo usado.';
209                        return $result;
210                }*/
211               
212                return $result;
213        }
214
215        //Busca usuários de um contexto e já retorna as options do select;
216        function get_available_users($params)
217        {
218                $context = $params['context'];
219                $recursive = $params['recursive'];
220                $justthese = array("cn", "uidNumber");
221                $filter="(phpgwAccountType=u)";
222               
223                if ($recursive == 'true')
224                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
225                else
226                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
227       
228        $entries = ldap_get_entries($this->ldap, $groups_list);
229       
230                for ($i=0; $i<$entries["count"]; $i++){
231                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
232                }
233                       
234                if (count($u_tmp))
235                        natcasesort($u_tmp);
236
237                $i = 0;
238                $users = array();
239                       
240                if (count($u_tmp))
241                {
242                        foreach ($u_tmp as $uidnumber => $cn)
243                        {
244                                $options .= "<option value=$uidnumber>$cn</option>";
245                        }
246                        unset($u_tmp);
247                }
248
249        return $options;
250        }
251
252        //Busca usuários de um contexto e já retorna as options do select;
253        /*
254        function get_available_users_and_maillist($params)
255        {
256                $context = $params['context'];
257                $recursive = $params['recursive'];
258                $justthese = array("cn", "uidNumber");
259                $filter="(|(phpgwAccountType=u)(phpgwAccountType=l))";
260               
261                if ($recursive == 'true')
262                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
263                else
264                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
265       
266        $entries = ldap_get_entries($this->ldap, $groups_list);
267       
268                for ($i=0; $i<$entries["count"]; $i++){
269                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
270                }
271                       
272                if (count($u_tmp))
273                        natcasesort($u_tmp);
274
275                $i = 0;
276                $users = array();
277                       
278                if (count($u_tmp))
279                {
280                        foreach ($u_tmp as $uidnumber => $cn)
281                        {
282                                $options .= "<option value=$uidnumber>$cn</option>";
283                        }
284                        unset($u_tmp);
285                }
286
287        return $options;
288        }
289        */
290
291        //Busca usuários e listas de um contexto e já retorna as options do select;
292        function get_available_users_and_maillist($params)
293        {
294                $context = $params['context'];
295                $recursive = $params['recursive'];
296               
297                //Usado para retirar a própria lista das possibilidades de inclusão.
298                $denied_uidnumber = $params['denied_uidnumber'];
299               
300                $justthese = array("cn", "uidNumber");
301                $users_filter="(&(phpgwAccountType=u)(!(phpgwAccountVisible=-1)))";
302                $lists_filter = $denied_uidnumber == '' ? "(phpgwAccountType=l)" : "(&(phpgwAccountType=l)(!(uidnumber=$denied_uidnumber)))";
303               
304                $users = Array();
305                $lists = Array();               
306
307                if ($recursive == 'true')
308                {
309                        $lists_search = ldap_search($this->ldap, $context, $lists_filter, $justthese);
310                        $users_search = ldap_search($this->ldap, $context, $users_filter, $justthese);
311                }
312                else
313                {
314                        $lists_search = ldap_list($this->ldap, $context, $lists_filter, $justthese);
315                        $users_search = ldap_list($this->ldap, $context, $users_filter, $justthese);
316                }
317               
318                $lists_entries = ldap_get_entries($this->ldap, $lists_search);
319                for ($i=0; $i<$lists_entries["count"]; $i++)
320                {
321                        $l_tmp[$lists_entries[$i]["uidnumber"][0]] = $lists_entries[$i]["cn"][0];
322                }
323                       
324                if (count($l_tmp))
325                        natcasesort($l_tmp);
326                       
327                $i = 0;
328                $lists = array();
329               
330                $options .= '<option  value="-1" disabled>------------------------------&nbsp;&nbsp;&nbsp;&nbsp;Listas&nbsp;&nbsp;&nbsp;&nbsp;------------------------------ </option>'."\n";   
331                if (count($l_tmp))
332                {
333                        foreach ($l_tmp as $uidnumber => $cn)
334                        {
335                                $options .= "<option value=$uidnumber>$cn</option>";
336                        }
337                        unset($l_tmp);
338                }
339               
340                $users_entries = ldap_get_entries($this->ldap, $users_search);
341                for ($i=0; $i<$users_entries["count"]; $i++)
342                {
343                        $u_tmp[$users_entries[$i]["uidnumber"][0]] = $users_entries[$i]["cn"][0];
344                }
345                       
346                if (count($u_tmp))
347                        natcasesort($u_tmp);
348                       
349                $i = 0;
350                $users = array();
351               
352                $options .= '<option  value="-1" disabled>-----------------------------&nbsp;&nbsp;&nbsp;&nbsp;Usuários&nbsp;&nbsp;&nbsp;&nbsp;---------------------------- </option>'."\n";   
353                if (count($u_tmp))
354                {
355                        foreach ($u_tmp as $uidnumber => $cn)
356                        {
357                                $options .= "<option value=$uidnumber class='line-above'>$cn</option>";
358                        }
359                        unset($u_tmp);
360                }
361                       
362                return $options;
363        }
364
365        function get_available_groups($params)
366        {
367                $context = $params['context'];
368                $justthese = array("cn", "gidNumber");
369        $groups_list=ldap_list($this->ldap, $context, ("(phpgwAccountType=g)"), $justthese);
370        ldap_sort($this->ldap, $groups_list, "cn");
371       
372        $entries = ldap_get_entries($this->ldap, $groups_list);
373        return $entries;               
374        }
375       
376        function get_available_maillists($params)
377        {
378                $context = $params['context'];
379                $justthese = array("uid","mail","uidNumber");
380        $maillists=ldap_list($this->ldap, $context, ("(phpgwAccountType=l)"), $justthese);
381        ldap_sort($this->ldap, $maillists, "uid");
382       
383        $entries = ldap_get_entries($this->ldap, $maillists);
384        return $entries;               
385        }
386       
387        function ldap_add_entry($dn, $entry)
388        {
389                $result = array();
390                if (!@ldap_add ( $this->ldap, $dn, $entry ))
391                {
392                        $result['status'] = false;
393                        $result['msg'] = "Erro na funcao ldap_functions->ldap_add_entry ($dn).\nRetorno do servidor:" . ldap_error($this->ldap);
394                }
395                else
396                        $result['status'] = true;
397               
398                return $result;
399        }
400       
401        function ldap_save_photo($dn, $pathphoto, $photo_exist=false)
402        {
403                $fd = fopen($pathphoto, "r");
404                $fsize = filesize($pathphoto);
405                $jpegStr = fread($fd, $fsize);
406                fclose ($fd);
407                $attrs['jpegPhoto'] = $jpegStr;
408                       
409                if ($photo_exist)
410                        $res = @ldap_mod_replace($this->ldap, $dn, $attrs);
411                else
412                        $res = @ldap_mod_add($this->ldap, $dn, $attrs);
413                       
414                if ($res)
415                {
416                        $result['status'] = true;
417                }
418                else
419                {
420                        $result['status'] = false;
421                        $result['msg'] = "Erro na funcao ldap_functions->ldap_save_photo ($dn).\nRetorno do servidor:" . ldap_error($this->ldap);
422                }
423               
424                return $result;
425        }
426       
427        function ldap_remove_photo($dn)
428        {
429                $attrs['jpegPhoto'] = array();
430                $res = ldap_mod_del($this->ldap, $dn, $attrs);
431               
432                if ($res)
433                {
434                        $result['status'] = true;
435                }
436                else
437                {
438                        $result['status'] = false;
439                        $result['msg'] = "Erro na funcao ldap_functions->ldap_remove_photo ($dn).\nRetorno do servidor:" . ldap_error($this->ldap);
440                }
441               
442                return $result;
443        }       
444       
445        // Pode receber tanto um único memberUid quanto um array de memberUid's
446        function add_user2group($gidNumber, $memberUid)
447        {
448                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
449                $justthese = array("dn");
450                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
451                $entry = ldap_get_entries($this->ldap, $search);
452                $group_dn = $entry[0]['dn'];
453                $attrs['memberUid'] = $memberUid;
454               
455                $res = @ldap_mod_add($this->ldap, $group_dn, $attrs);
456               
457                if ($res)
458                {
459                        $result['status'] = true;
460                }
461                else
462                {
463                        $result['status'] = false;
464                        $result['msg'] = "Erro na funcao ldap_functions->add_user2group ($memberUid).\nRetorno do servidor:" . ldap_error($this->ldap);
465                }
466                return $result;
467        }
468       
469        function remove_user2group($gidNumber, $memberUid)
470        {
471                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
472                $justthese = array("dn");
473                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
474                $entry = ldap_get_entries($this->ldap, $search);
475                $group_dn = $entry[0]['dn'];
476                $attrs['memberUid'] = $memberUid;
477                $res = @ldap_mod_del($this->ldap, $group_dn, $attrs);
478               
479                /*echo 'usuarios recebidos para remocao no ldap';
480                echo '<pre>';
481                print_r($memberUid);*/
482               
483                if ($res)
484                {
485                        $result['status'] = true;
486                }
487                else
488                {
489                        $result['status'] = false;
490                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2group ($memberUid).\nRetorno do servidor:" . ldap_error($this->ldap);
491                }
492                return $result;
493        }
494       
495        function add_user2maillist($uidNumber, $mail)
496        {
497                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
498                $justthese = array("dn");
499                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
500                $entry = ldap_get_entries($this->ldap, $search);
501                $group_dn = $entry[0]['dn'];
502                $attrs['mailForwardingAddress'] = $mail;
503                $res = @ldap_mod_add($this->ldap, $group_dn, $attrs);
504               
505                if ($res)
506                {
507                        $result['status'] = true;
508                }
509                else
510                {
511                        $result['status'] = false;
512                        $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist ($mail).\nRetorno do servidor:" . ldap_error($this->ldap);
513                }
514                return $result;
515        }
516       
517        function add_user2maillist_scl($dn, $array_emails)
518        {
519                $attrs['mailSenderAddress'] = $array_emails;
520                $res = @ldap_mod_add($this->ldap, $dn, $attrs);
521               
522                if ($res)
523                {
524                        $result['status'] = true;
525                }
526                else
527                {
528                        $result['status'] = false;
529                        $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist_scp ($dn).\n\nRetorno do servidor:" . ldap_error($this->ldap);
530                }
531                return $result;
532        }
533
534        function remove_user2maillist($uidNumber, $mail)
535        {
536                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
537                $justthese = array("dn");
538                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
539                $entry = ldap_get_entries($this->ldap, $search);
540                $group_dn = $entry[0]['dn'];
541                $attrs['mailForwardingAddress'] = $mail;
542                $res = @ldap_mod_del($this->ldap, $group_dn, $attrs);
543               
544                if ($res)
545                {
546                        $result['status'] = true;
547                }
548                else
549                {
550                        $result['status'] = false;
551                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist ($mail).\n\nRetorno do servidor:" . ldap_error($this->ldap);
552                }
553                return $result;
554        }
555
556        function remove_user2maillist_scl($dn, $array_emails)
557        {
558                $attrs['mailSenderAddress'] = $array_emails;
559                $res = @ldap_mod_del($this->ldap, $dn, $attrs);
560               
561                if ($res)
562                {
563                        $result['status'] = true;
564                }
565                else
566                {
567                        $result['status'] = false;
568                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist_scp ($dn).\n\nRetorno do servidor:" . ldap_error($this->ldap);
569                }
570                return $result;
571        }
572
573        function replace_user2maillists($new_mail, $old_mail)
574        {
575                $filter = "(&(phpgwAccountType=l)(mailforwardingaddress=$old_mail))";
576                $justthese = array("dn");
577                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
578                $entries = ldap_get_entries($this->ldap, $search);
579                $result['status'] = true;
580                for ($i=0; $i<$entries['count']; $i++)
581                {
582                        $attrs['mailforwardingaddress'] = $old_mail;
583                        $res1 = @ldap_mod_del($this->ldap, $entries[$i]['dn'], $attrs);
584                        $attrs['mailforwardingaddress'] = $new_mail;
585                        $res2 = @ldap_mod_add($this->ldap, $entries[$i]['dn'], $attrs);
586               
587                        if ((!$res1) || (!$res2))
588                        {
589                                $result['status'] = false;
590                                $result['msg'] = "Erro na funcao ldap_functions->replace_user2maillists ($old_mail).\nRetorno do servidor:" . ldap_error($this->ldap);
591                        }
592                }
593               
594                return $result;
595        }
596       
597        function get_user_info($uidnumber, $context)
598        {
599                $filter="(&(phpgwAccountType=u)(uidNumber=".$uidnumber."))";
600                $search = ldap_search($this->ldap, $context, $filter);
601                $entry = ldap_get_entries($this->ldap, $search);
602
603                //Pega o dn do setor do usuario.
604                $entry[0]['dn'] = strtolower($entry[0]['dn']);
605                $sector_dn_array = explode(",", $entry[0]['dn']);
606                for($i=1; $i<count($sector_dn_array); $i++)
607                        $sector_dn .= $sector_dn_array[$i] . ',';
608                //Retira ultimo pipe.
609                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
610               
611                $result['context']                              = $sector_dn;
612                $result['uid']                                  = $entry[0]['uid'][0];
613                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
614                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
615                $result['departmentnumber']             = $entry[0]['departmentnumber'][0];
616                $result['givenname']                    = $entry[0]['givenname'][0];
617                $result['sn']                                   = $entry[0]['sn'][0];
618                $result['telephonenumber']              = $entry[0]['telephonenumber'][0];
619                $result['phpgwaccountstatus']   = $entry[0]['phpgwaccountstatus'][0];
620                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
621                $result['accountstatus']                = $entry[0]['accountstatus'][0];
622                $result['mail']                                 = $entry[0]['mail'][0];
623                $result['mailalternateaddress'] = $entry[0]['mailalternateaddress'][0];
624                $result['mailforwardingaddress']= $entry[0]['mailforwardingaddress'][0];
625                $result['deliverymode']                 = $entry[0]['deliverymode'][0];
626
627                //Photo
628                if ($entry[0]['jpegphoto']['count'] == 1)
629                        $result['photo_exist'] = 'true';
630               
631                // Samba
632                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
633                {
634                        if ($entry[0]['objectclass'][$i] == 'sambaSamAccount')
635                                $result['sambaUser'] = true;
636                }               
637                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($result['sambaUser']))
638                {
639                        $result['sambaaccflags'] = $entry[0]['sambaacctflags'][0];
640                        $result['sambalogonscript'] = $entry[0]['sambalogonscript'][0];
641                        $result['homedirectory'] = $entry[0]['homedirectory'][0];
642                }
643               
644                // MailLists
645                $justthese = array("uid","mail","uidnumber");
646                $filter="(&(phpgwAccountType=l)(mailforwardingaddress=".$result['mail']."))";
647                $search = ldap_search($this->ldap, $context, $filter, $justthese);
648        ldap_sort($this->ldap, $search, "uid");
649        $entries = ldap_get_entries($this->ldap, $search);
650        for ($i=0; $i<$entries['count']; $i++)
651        {
652                $result['maillists_info'][$i]['uidnumber'] = $entries[$i]['uidnumber'][0];
653                $result['maillists_info'][$i]['uid'] = $entries[$i]['uid'][0];
654                $result['maillists_info'][$i]['mail'] = $entries[$i]['mail'][0];
655                $result['maillists'][] = $entries[$i]['uidnumber'][0];
656        }
657       
658        // Groups
659                $justthese = array("gidnumber","cn");
660                $filter="(&(phpgwAccountType=g)(memberuid=".$result['uid']."))";
661                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
662        ldap_sort($this->ldap, $search, "cn");
663        $entries = ldap_get_entries($this->ldap, $search);
664        for ($i=0; $i<$entries['count']; $i++)
665        {
666                $result['groups_ldap'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['cn'][0];
667        }
668       
669                return $result;         
670        }
671       
672        function get_group_info($gidnumber, $context)
673        {
674                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
675                $search = ldap_search($this->ldap, $context, $filter);
676                $entry = ldap_get_entries($this->ldap, $search);
677
678                //Pega o dn do setor do grupo.
679                $entry[0]['dn'] = strtolower($entry[0]['dn']);
680                $sector_dn_array = explode(",", $entry[0]['dn']);
681                for($i=1; $i<count($sector_dn_array); $i++)
682                        $sector_dn .= $sector_dn_array[$i] . ',';
683                //Retira ultimo pipe.
684                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
685               
686                $result['context']                              = $sector_dn;
687                $result['cn']                                   = $entry[0]['cn'][0];
688                $result['description']                  = $entry[0]['description'][0];
689                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
690                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
691               
692                //MemberUid
693                for ($i=0; $i<$entry[0]['memberuid']['count']; $i++)
694                {
695                        $justthese = array("cn","uid","uidnumber");
696                       
697                        // Montagem dinamica do filtro
698                        $filter="(&(phpgwAccountType=u)(|";
699                        for ($k=0; (($k<10) && ($i<$entry[0]['memberuid']['count'])); $k++)
700                        {
701                                $filter .= "(uid=".$entry[0]['memberuid'][$i].")";
702                                $i++;
703                        }
704                        $i--;
705                        $filter .= "))";
706                       
707                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
708                        $user_entry = ldap_get_entries($this->ldap, $search);
709
710                        for ($j=0; $j<$user_entry['count']; $j++)
711                        {
712                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['cn'] = $user_entry[$j]['cn'][0];
713                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['uidnumber'] = $user_entry[$j]['uidnumber'][0];
714                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['type'] = 'u';
715                        }
716                }
717               
718                // Retira o count do array
719                array_shift($entry[0]['memberuid']);
720               
721                // Checamos e-mails que não fazem parte do expresso.
722                // Criamos um array temporario
723                $tmp_array = array();
724                foreach ($result['memberuid_info'] as $uid => $user_data)
725                {
726                        $tmp_array[] = $uid;
727                }
728
729                // Vemos a diferença
730                $array_diff = array_diff($entry[0]['memberuid'], $tmp_array);
731               
732                // Incluimos no resultado
733                foreach ($array_diff as $index=>$uid)
734                {
735                        $result['memberuid_info'][$uid]['cn'] = $uid;
736                }
737               
738                // Samba
739                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
740                {
741                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
742                                $result['sambaGroup'] = true;
743                }
744
745                return $result;
746        }       
747       
748        function get_maillist_info($uidnumber, $context)
749        {
750                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
751                $search = ldap_search($this->ldap, $context, $filter);
752                $entry = ldap_get_entries($this->ldap, $search);
753       
754                //Pega o dn do setor do usuario.
755                $entry[0]['dn'] = strtolower($entry[0]['dn']);
756                $sector_dn_array = explode(",", $entry[0]['dn']);
757                for($i=1; $i<count($sector_dn_array); $i++)
758                        $sector_dn .= $sector_dn_array[$i] . ',';
759                //Retira ultimo pipe.
760                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
761                       
762                $result['context']                              = $sector_dn;
763                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
764                $result['uid']                                  = $entry[0]['uid'][0];
765                $result['cn']                                   = $entry[0]['cn'][0];
766                $result['mail']                                 = $entry[0]['mail'][0];
767                $result['accountStatus']                = $entry[0]['accountstatus'][0];
768                $result['phpgwAccountVisible']  = $entry[0]['phpgwaccountvisible'][0];
769                       
770                //Members
771                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
772                {
773                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype", "mail");
774                               
775                        // Montagem dinamica do filtro
776                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|";
777                        for ($k=0; (($k<10) && ($i<$entry[0]['mailforwardingaddress']['count'])); $k++)
778                        {
779                                $filter .= "(mail=".$entry[0]['mailforwardingaddress'][$i].")";
780                                $i++;
781                        }
782                        $i--;
783                        $filter .= "))";
784                               
785                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
786                        $user_entry = ldap_get_entries($this->ldap, $search);
787                               
788                        for ($j=0; $j<$user_entry['count']; $j++)
789                        {
790                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['uid'] = $user_entry[$j]['uid'][0];
791                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['cn'] = $user_entry[$j]['cn'][0];
792                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['type'] = $user_entry[$j]['phpgwaccounttype'][0];
793                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['mail'] = $user_entry[$j]['mail'][0];
794                                $result['members'][] = $user_entry[$j]['uidnumber'][0];
795                        }
796                }
797
798                // Retira o count do array
799                array_shift($entry[0]['mailforwardingaddress']);
800
801                // Checamos e-mails que não fazem parte do expresso.
802                // Criamos um array temporario
803                $tmp_array = array();
804                foreach ($result['members_info'] as $uid => $user_data)
805                {
806                        $tmp_array[] = $user_data['mail'];
807                }
808
809                // Vemos a diferença
810                $array_diff = array_diff($entry[0]['mailforwardingaddress'], $tmp_array);
811
812                // Incluimos no resultado
813                foreach ($array_diff as $index=>$mailforwardingaddress)
814                {
815                        $result['members_info'][$mailforwardingaddress]['uid'] = $mailforwardingaddress;
816                        $result['members_info'][$mailforwardingaddress]['cn'] = 'E-Mail nao encontrado';
817                        $result['members_info'][$mailforwardingaddress]['mailforwardingaddress'] = $mailforwardingaddress;
818                        $result['members'][] = $mailforwardingaddress;
819                }
820                return $result;
821        }       
822
823        function get_maillist_scl_info($uidnumber, $context)
824        {
825                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
826                $search = ldap_search($this->ldap, $context, $filter);
827                $entry = ldap_get_entries($this->ldap, $search);
828
829                //Pega o dn do setor do usuario.
830                $entry[0]['dn'] = strtolower($entry[0]['dn']);
831                $sector_dn_array = explode(",", $entry[0]['dn']);
832                for($i=1; $i<count($sector_dn_array); $i++)
833                        $sector_dn .= $sector_dn_array[$i] . ',';
834                //Retira ultimo pipe.
835                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
836               
837                $result['dn']                                           = $entry[0]['dn'];
838                $result['context']                                      = $sector_dn;
839                $result['uidnumber']                            = $entry[0]['uidnumber'][0];
840                $result['uid']                                          = $entry[0]['uid'][0];
841                $result['cn']                                           = $entry[0]['cn'][0];
842                $result['mail']                                         = $entry[0]['mail'][0];
843                $result['accountStatus']                        = $entry[0]['accountstatus'][0];
844                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
845                $result['accountRestrictive']           = $entry[0]['accountrestrictive'][0];
846                $result['participantCanSendMail']       = $entry[0]['participantcansendmail'][0];
847               
848                //Senders
849                for ($i=0; $i<$entry[0]['mailsenderaddress']['count']; $i++)
850                {
851                        $justthese = array("cn", "uidnumber", "uid", "mail");
852                        $filter="(&(phpgwAccountType=u)(mail=".$entry[0]['mailsenderaddress'][$i]."))";
853                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
854                        $user_entry = ldap_get_entries($this->ldap, $search);
855                       
856                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['uid'] = $user_entry[0]['uid'][0];
857                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['cn'] = $user_entry[0]['cn'][0];
858                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['mail'] = $user_entry[0]['mail'][0];
859                        $result['members'][] = $user_entry[0]['uidnumber'][0];
860                }
861
862                return $result;
863        }       
864
865        function group_exist($gidnumber)
866        {
867                $justthese = array("cn");
868                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
869                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
870                               
871                $entry = ldap_get_entries($this->ldap, $search);
872                if ($entry['count'] == 0)
873                        return false;
874                else
875                        return true;
876        }
877
878        function gidnumbers2cn($gidnumbers, $context)
879        {
880                if (count($gidnumbers))
881                {
882                        $justthese = array("cn");
883                        $i = 0;
884                        foreach ($gidnumbers as $gidnumber)
885                        {
886                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
887                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
888                               
889                                $entry = ldap_get_entries($this->ldap, $search);
890                                if ($entry['count'] == 0)
891                                        $result['groups_info'][$i]['cn'] = '_Grupo existe no BD mas não no LDAP';
892                                else
893                                        $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
894                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
895                               
896                                if (!strpos(strtolower($entry[0]['dn']), strtolower($context)))
897                                        $result['groups_info'][$i]['group_disabled'] = 'true';
898                                else
899                                        $result['groups_info'][$i]['group_disabled'] = 'false';
900                               
901                                $i++;
902                        }
903                }
904                return $result;
905        }
906
907        function uidnumber2uid($uidnumber)
908        {
909                $justthese = array("uid");
910                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
911                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
912                $entry = ldap_get_entries($this->ldap, $search);
913                return $entry[0]['uid'][0];
914        }
915
916        function uidnumber2mail($uidnumber)
917        {
918                $justthese = array("mail");
919                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
920                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
921                $entry = ldap_get_entries($this->ldap, $search);
922                return $entry[0]['mail'][0];
923        }
924
925       
926        function change_user_context($dn, $newrdn, $newparent)
927        {
928                if (!ldap_rename ( $this->ldap, $dn, $newrdn, $newparent, true ))
929                {
930                        $return['status'] = false;
931                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldap);
932                }
933                else
934                        $return['status'] = true;
935               
936                return $return;
937        }
938       
939        function replace_user_attributes($dn, $ldap_mod_replace)
940        {
941                if (!@ldap_mod_replace ( $this->ldap, $dn, $ldap_mod_replace ))
942                {
943                        $return['status'] = false;
944                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap);
945                }
946                else
947                        $return['status'] = true;
948               
949                return $return;
950        }
951       
952        function add_user_attributes($dn, $ldap_add)
953        {
954                if (!@ldap_mod_add ( $this->ldap, $dn, $ldap_add ))
955                {
956                        $return['status'] = false;
957                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap);
958                }
959                else
960                        $return['status'] = true;
961               
962                return $return;
963        }
964       
965        function remove_user_attributes($dn, $ldap_remove)
966        {
967                if (!@ldap_mod_del ( $this->ldap, $dn, $ldap_remove ))
968                {
969                        $return['status'] = false;
970                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldap);
971                }
972                else
973                        $return['status'] = true;
974               
975                return $return;
976        }
977       
978        function set_user_password($uid, $password)
979        {
980                $justthese = array("userPassword");
981                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
982                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
983            $entry = ldap_get_entries($this->ldap, $search);
984                $dn = $entry[0]['dn'];
985                $userPassword = $entry[0]['userpassword'][0];
986                $ldap_mod_replace['userPassword'] = $password;
987                $this->replace_user_attributes($dn, $ldap_mod_replace);
988                return $userPassword;
989        }
990       
991        function delete_user($user_info)
992        {
993                $return['status'] = true;
994               
995                // GROUPS
996                $attrs = array();
997                $attrs['memberUid'] = $user_info['uid'];
998                if (count($user_info['groups_info']))
999                {
1000                        foreach ($user_info['groups_info'] as $group_info)
1001                        {
1002                                $gidnumber = $group_info['gidnumber'];
1003                                $justthese = array("dn");
1004                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1005                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1006                        $entry = ldap_get_entries($this->ldap, $search);
1007                                $dn = $entry[0]['dn'];
1008                       
1009                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
1010                                {
1011                                        $return['status'] = false;
1012                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap);
1013                                }
1014                        }
1015                }
1016                       
1017                // MAILLISTS
1018                $attrs = array();
1019                $attrs['mailForwardingAddress'] = $user_info['mail'];
1020                if (count($user_info['maillists_info']))
1021                {
1022                        foreach ($user_info['maillists_info'] as $maillists_info)
1023                        {
1024                                $uidnumber = $maillists_info['uidnumber'];
1025                                $justthese = array("dn");
1026                                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1027                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1028                        $entry = ldap_get_entries($this->ldap, $search);
1029                                $dn = $entry[0]['dn'];
1030                       
1031                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
1032                                {
1033                                        $return['status'] = false;
1034                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
1035                                }
1036                        }
1037                }
1038                       
1039                // UID
1040                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
1041                if (!@ldap_delete($this->ldap, $dn))
1042                {
1043                        $return['status'] = false;
1044                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
1045                }
1046               
1047                return $return;
1048        }
1049       
1050        function delete_maillist($uidnumber)
1051        {
1052                $return['status'] = true;
1053               
1054                $justthese = array("dn");
1055                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1056                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1057                $entry = ldap_get_entries($this->ldap, $search);
1058                $dn = $entry[0]['dn'];
1059               
1060                if (!@ldap_delete($this->ldap, $dn))
1061                {
1062                        $return['status'] = false;
1063                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
1064                }
1065               
1066                return $return;
1067        }
1068
1069        function delete_group($gidnumber)
1070        {
1071                $return['status'] = true;
1072               
1073                $justthese = array("dn");
1074                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1075                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1076                $entry = ldap_get_entries($this->ldap, $search);
1077                $dn = $entry[0]['dn'];
1078               
1079                if (!@ldap_delete($this->ldap, $dn))
1080                {
1081                        $return['status'] = false;
1082                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
1083                }
1084               
1085                return $return;
1086        }
1087
1088       
1089        function rename_uid($uid, $new_uid)
1090        {
1091                $return['status'] = true;
1092               
1093                $justthese = array("dn");
1094                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1095                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1096            $entry = ldap_get_entries($this->ldap, $search);
1097                $dn = $entry[0]['dn'];
1098               
1099                $explode_dn = ldap_explode_dn($dn, 0);
1100                $rdn = "uid=" . $new_uid;
1101
1102                $parent = array();
1103                for ($j=1; $j<(count($explode_dn)-1); $j++)
1104                        $parent[] = $explode_dn[$j];
1105                $parent = implode(",", $parent);
1106               
1107                $return['new_dn'] = $rdn . ',' . $parent;
1108                       
1109                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
1110                {
1111                        $return['status'] = false;
1112                        $return['msg'] .= 'Erro em ldap_funcitons->rename_uid: ' . ldap_error($this->ldap);
1113                }
1114               
1115                //Grupos
1116                $justthese = array("dn");
1117                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
1118                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1119            $entry = ldap_get_entries($this->ldap, $search);
1120        $array_mod_add['memberUid'] = $new_uid;
1121        $array_mod_del['memberUid'] = $uid;
1122
1123            for ($i=0; $i<=$entry['count']; $i++)
1124            {
1125                $dn = $entry[$i]['dn'];
1126                @ldap_mod_add ( $this->ldap, $dn,  $array_mod_add);
1127                @ldap_mod_del ( $this->ldap, $dn,  $array_mod_del);
1128            }
1129                return $return;
1130        }
1131
1132        function rename_cn($cn, $new_cn)
1133        {
1134                $return['status'] = true;
1135               
1136                $justthese = array("dn");
1137                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
1138                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1139            $entry = ldap_get_entries($this->ldap, $search);
1140                $dn = $entry[0]['dn'];
1141               
1142                $explode_dn = ldap_explode_dn($dn, 0);
1143                $rdn = "cn=" . $new_cn;
1144
1145                $parent = array();
1146                for ($j=1; $j<(count($explode_dn)-1); $j++)
1147                        $parent[] = $explode_dn[$j];
1148                $parent = implode(",", $parent);
1149               
1150                $return['new_dn'] = $rdn . ',' . $parent;
1151                       
1152                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
1153                {
1154                        $return['status'] = false;
1155                }
1156               
1157                return $return;
1158        }
1159
1160        function rename_departmentnumber($old_dp, $new_dp)
1161        {
1162               
1163                $return['status'] = true;
1164               
1165               
1166                $justthese = array("dn");
1167                $filter="(&(phpgwAccountType=u)(departmentnumber=".$old_dp."))";
1168                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1169            $entry = ldap_get_entries($this->ldap, $search);
1170               
1171            for ($i=0; $i<=$entry['count']; $i++)
1172            {
1173                $dn = strtolower($entry[$i]['dn']);
1174                $ldap_mod_replace = array();
1175                $ldap_mod_replace['departmentnumber'] = $new_dp;
1176                @ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace);
1177                        /*if (!@ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace))
1178                        {
1179                                $return['status'] = false;
1180                                $return['msg'] .= 'Erro em ldap_funcitons->rename_departmentnumber: ' . ldap_error($this->ldap);
1181                        }*/
1182            }
1183                return $return;
1184        }
1185}
1186?>
Note: See TracBrowser for help on using the repository browser.