source: companies/serpro/listAdmin/inc/class.ldap_functions.inc.php @ 903

Revision 903, 53.5 KB checked in by niltonneto, 15 years ago (diff)

Importacao inicial do Expresso do Serpro

RevLine 
[903]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 $ldap_write;
10        var $current_config;
11       
12        function ldap_functions()
13                {
14                $GLOBALS['phpgw_info']['server'] = $_SESSION['phpgw_info']['expresso']['server'];
15                $this->current_config = $_SESSION['phpgw_info']['expresso']['expressoAdmin'];
16                $common = new common();
17                $this->ldap = $common->ldapConnect();
18                //Para haver escrita em diretorio escravo eh necessario que se faca login na api com a opcao de seguir referrals. Foi feita aqui a divisao entre escrita e leitura pois a leitura ldap fica bem mais lenta quando configurada para seguir referrals.
19                if($GLOBALS['phpgw_info']['server']['diretorioescravo'])
20                        {
21                        $this->ldap_write = $common->ldapConnect("","","",true);
22                        }
23                        else
24                        {
25                        $this->ldap_write = $this->ldap;
26                        }
27                }
28        function validate_fields($params)
29        {
30                $params = unserialize($params['attributes']);
31                $type = $params['type'];
32                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
33                $uid = $params['uid'];
34                $mail = $params['mail'];
35                $mailalternateaddress = $params['mailalternateaddress'];
36
37                $result['status'] = true;
38               
39                if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])
40                {
41                        $result['status'] = false;
42                        $result['msg'] = 'Este LOGIN nï¿œo pode ser usado pois ï¿œ uma conta de sistema.';
43                        return $result;
44                }
45               
46                if (($type == 'create_user') || ($type == 'rename_user'))
47                {
48                        // UID
49                        $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$uid))";
50                        $justthese = array("uid");
51                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
52                        $count_entries = ldap_count_entries($this->ldap,$search);
53                        if ($count_entries > 0)
54                        {
55                                $result['status'] = false;
56                                $result['msg'] = 'LOGIN jï¿œ esta sendo usado.';
57                                return $result;
58                        }
59
60                        // GRUPOS
61                        $filter = "(&(phpgwAccountType=g)(cn=$uid))";
62                        $justthese = array("cn");
63                        $search = ldap_search($this->ldap, $context, $filter, $justthese);
64                        $count_entries = ldap_count_entries($this->ldap,$search);
65                        if ($count_entries > 0)
66                        {
67                                $result['status'] = false;
68                                $result['msg'] = 'LOGIN do usuï¿œrio jï¿œ esta sendo usado por um grupo.';
69                                return $result;
70                        }
71               
72                        // UID em outras organizaᅵᅵes
73                        //Quando tento retirar as organizaᅵᅵes pelo expressoAdmin dï¿œ este erro.
74                        $filter = "(ou=*)";
75                        $justthese = array("ou");
76                        $search = ldap_list($this->ldap, $context, $filter, $justthese);
77                        $entries = ldap_get_entries($this->ldap,$search);
78                        foreach ($entries as $index=>$org)
79                        {
80                                $organization = $org['ou'][0];
81                                $organization = strtolower($organization);
82                               
83                                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$organization-$uid))";
84                                $justthese = array("uid");
85                                $search = ldap_search($this->ldap, $context, $filter, $justthese);
86                                $count_entries = ldap_count_entries($this->ldap,$search);
87                                if ($count_entries > 0)
88                                {
89                                        $result['status'] = false;
90                                        $result['msg'] = 'LOGIN jï¿œ esta sendo usado por outro usuï¿œrio em outra organizaᅵᅵo.';
91                                        return $result;
92                                }
93                        }
94                }
95               
96                if ($type == 'rename_user')
97                {
98                        return $result;
99                }
100               
101                // MAIL
102                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
103                $justthese = array("mail", "uid");
104                $search = ldap_search($this->ldap, $context, $filter, $justthese);
105                $entries = ldap_get_entries($this->ldap,$search);
106                if ($entries['count'] == 1){
107                        if ($entries[0]['uid'][0] != $uid){
108                                $result['status'] = false;
109                                $result['msg'] = 'E-MAIL estï¿œ sendo usado por 1 usuï¿œrio: ' . $entries[0]['uid'][0];
110                                //ldap_close($this->ldap);
111                                return $result;
112                        }
113                }
114                else if ($entries['count'] > 1){
115                        $result['status'] = false;
116                        $result['msg'] = 'E-MAIL estï¿œ sendo usado por de 2 ou mais usuï¿œrios.';
117                        //ldap_close($this->ldap);
118                        return $result;
119                }
120               
121                // MAILAlternateAddress
122                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mailalternateaddress)(mailalternateaddress=$mailalternateaddress)))";
123                $justthese = array("mail", "uid");
124                $search = ldap_search($this->ldap, $context, $filter, $justthese);
125                $entries = ldap_get_entries($this->ldap,$search);
126                if ($entries['count'] == 1){
127                        if ($entries[0]['uid'][0] != $uid){
128                                $result['status'] = false;
129                                $result['msg'] = "E-MAIL alternativo estï¿œ sendo usado por 1 usuï¿œrio: " . $entries[0]['uid'][0];
130                                //ldap_close($this->ldap);
131                                return $result;
132                        }
133                }
134                else if ($entries['count'] > 1){
135                        $result['status'] = false;
136                        $result['msg'] = 'E-MAIL alternativo estï¿œ sendo usado por 2 ou mais usuï¿œrios.';
137                        return $result;
138                }
139
140                return $result;
141        }
142       
143        function validate_fields_group($params)
144        {
145                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
146                $cn = $params['cn'];
147                $result['status'] = true;
148               
149                if ($_SESSION['phpgw_info']['expresso']['global_denied_groups'][$cn])
150                {
151                        $result['status'] = false;
152                        $result['msg'] = 'Este nome de grupo nï¿œo pode ser usado pois ï¿œ um grupo de sistema.';
153                        return $result;
154                }
155               
156                // CN
157                $filter = "(&(phpgwAccountType=g)(cn=$cn))";
158                $justthese = array("cn");
159                $search = ldap_search($this->ldap, $context, $filter, $justthese);
160                $count_entries = ldap_count_entries($this->ldap,$search);
161                if ($count_entries > 0)
162                {
163                        $result['status'] = false;
164                        $result['msg'] = 'NOME do grupo jï¿œ estï¿œ sendo usado.';
165                        return $result;
166                }
167               
168                // UID
169                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=$cn))";
170                $justthese = array("uid");
171                $search = ldap_search($this->ldap, $context, $filter, $justthese);
172                $count_entries = ldap_count_entries($this->ldap,$search);
173                if ($count_entries > 0)
174                {
175                        $result['status'] = false;
176                        $result['msg'] = 'NOME do grupo jï¿œ esta sendo usado por um usuï¿œrio.';
177                        return $result;
178                }
179               
180                return $result;
181        }
182       
183        function validate_fields_maillist($params)
184        {
185                $context = $GLOBALS['phpgw_info']['server']['ldap_context'];
186                $uid = $params['uid'];
187                $mail = $params['mail'];
188                $result['status'] = true;
189               
190                if ($_SESSION['phpgw_info']['expresso']['global_denied_users'][$uid])
191                {
192                        $result['status'] = false;
193                        $result['msg'] = 'Este LOGIN nï¿œo pode ser usado pois ï¿œ uma conta de sistema.';
194                        return $result;
195                }
196               
197                // UID
198                $filter = "(&(phpgwAccountType=l)(uid=$uid))";
199                $justthese = array("uid");
200                $search = ldap_search($this->ldap, $context, $filter, $justthese);
201                $count_entries = ldap_count_entries($this->ldap,$search);
202                if ($count_entries > 0)
203                {
204                        $result['status'] = false;
205                        $result['msg'] = 'LOGIN da lista jï¿œ estï¿œ sendo usado.';
206                        return $result;
207                }
208               
209                // MAIL
210                /*
211                $filter = "(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|(mail=$mail)(mailalternateaddress=$mail)))";
212                $justthese = array("mail");
213                $search = ldap_search($this->ldap, $context, $filter, $justthese);
214                $count_entries = ldap_count_entries($this->ldap,$search);
215                if ($count_entries > 0)
216                {
217                        $result['status'] = false;
218                        $result['msg'] = 'E-MAIL da lista jï¿œ estï¿œ sendo usado.';
219                        return $result;
220                }*/
221               
222                return $result;
223        }
224
225        //Busca usuï¿œrios de um contexto e jï¿œ retorna as options do select;
226        function get_available_users($params)
227        {
228                $context = $params['context'];
229                $recursive = $params['recursive'];
230                $justthese = array("cn", "uidNumber");
231                $filter="(phpgwAccountType=u)";
232               
233                if ($recursive == 'true')
234                        $groups_list=ldap_search($this->ldap, $context, $filter, $justthese);
235                else
236                $groups_list=ldap_list($this->ldap, $context, $filter, $justthese);
237       
238        $entries = ldap_get_entries($this->ldap, $groups_list);
239       
240                for ($i=0; $i<$entries["count"]; $i++){
241                        $u_tmp[$entries[$i]["uidnumber"][0]] = $entries[$i]["cn"][0];
242                }
243                       
244                if (count($u_tmp))
245                        natcasesort($u_tmp);
246
247                $i = 0;
248                $users = array();
249                       
250                if (count($u_tmp))
251                {
252                        foreach ($u_tmp as $uidnumber => $cn)
253                        {
254                                $options .= "<option value=$uidnumber>$cn</option>";
255                        }
256                        unset($u_tmp);
257                }
258
259        return $options;
260        }
261
262        //Busca usuï¿œrios e listas de um contexto e jï¿œ retorna as options do select;
263        function get_available_users_and_maillist($params)
264        {
265
266                $context = $params['context'];
267                $recursive = $params['recursive'];
268               
269                //Usado para retirar a prï¿œpria lista das possibilidades de inclusï¿œo.
270                $denied_uidnumber = $params['denied_uidnumber'];
271               
272                $justthese = array("cn", "uidNumber");
273                $users_filter="(phpgwAccountType=u)";
274                $lists_filter = $denied_uidnumber == '' ? "(phpgwAccountType=l)" : "(&(phpgwAccountType=l)(!(uidnumber=$denied_uidnumber)))";
275               
276                $users = Array();
277                $lists = Array();               
278
279                if ($recursive == 'true')
280                {
281                        $lists_search = ldap_search($this->ldap, $context, $lists_filter, $justthese);
282                        $users_search = ldap_search($this->ldap, $context, $users_filter, $justthese);
283                }
284                else
285                {
286                        $lists_search = ldap_list($this->ldap, $context, $lists_filter, $justthese);
287                        $users_search = ldap_list($this->ldap, $context, $users_filter, $justthese);
288                }
289               
290                $lists_entries = ldap_get_entries($this->ldap, $lists_search);
291                for ($i=0; $i<$lists_entries["count"]; $i++)
292                {
293                        $l_tmp[$lists_entries[$i]["uidnumber"][0]] = $lists_entries[$i]["cn"][0];
294                }
295                       
296                if (count($l_tmp))
297                        natcasesort($l_tmp);
298                       
299                $i = 0;
300                $lists = array();
301               
302                $options .= '<option  value="-1" disabled>------------------------------&nbsp;&nbsp;&nbsp;&nbsp;Listas&nbsp;&nbsp;&nbsp;&nbsp;------------------------------ </option>'."\n";   
303                if (count($l_tmp))
304                {
305                        foreach ($l_tmp as $uidnumber => $cn)
306                        {
307                                $options .= "<option value=$uidnumber>$cn</option>";
308                        }
309                        unset($l_tmp);
310                }
311               
312                $users_entries = ldap_get_entries($this->ldap, $users_search);
313                for ($i=0; $i<$users_entries["count"]; $i++)
314                {
315                        $u_tmp[$users_entries[$i]["uidnumber"][0]] = $users_entries[$i]["cn"][0];
316                }
317                       
318                if (count($u_tmp))
319                        natcasesort($u_tmp);
320                       
321                $i = 0;
322                $users = array();
323               
324                $options .= '<option  value="-1" disabled>-----------------------------&nbsp;&nbsp;&nbsp;&nbsp;Usuarios&nbsp;&nbsp;&nbsp;&nbsp;---------------------------- </option>'."\n";   
325                if (count($u_tmp))
326                {
327                        foreach ($u_tmp as $uidnumber => $cn)
328                        {
329                                $options .= "<option value=$uidnumber class='line-above'>$cn</option>";
330                        }
331                        unset($u_tmp);
332                }
333                       
334                return $options;
335        }
336
337        //Funcao que busca apenas os usuarios de um contexto e ja retorna as options do select;
338        function get_available_users_only($params)
339        {
340
341                $context = $params['context'];
342                $recursive = $params['recursive'];
343                $filtro = $params['filtro'];
344               
345                $justthese = array("cn", "uidNumber");
346//              $users_filter="(phpgwAccountType=u)";
347$users_filter="(&(phpgwAccountType=u)(cn=*$filtro*))";
348               
349                $users = Array();
350
351                if ($recursive == 'true')
352                {
353                        $users_search = ldap_search($this->ldap, $context, $users_filter, $justthese);
354                }
355                else
356                {
357                        $users_search = ldap_list($this->ldap, $context, $users_filter, $justthese);
358                }
359               
360                $users_entries = ldap_get_entries($this->ldap, $users_search);
361                for ($i=0; $i<$users_entries["count"]; $i++)
362                {
363                        $u_tmp[$users_entries[$i]["uidnumber"][0]] = $users_entries[$i]["cn"][0];
364                }
365                       
366                if (count($u_tmp))
367                        natcasesort($u_tmp);
368                       
369                $i = 0;
370                $users = array();
371               
372                $options .= '<option  value="-1" disabled>-----------------------------&nbsp;&nbsp;&nbsp;&nbsp;Usuarios&nbsp;&nbsp;&nbsp;&nbsp;---------------------------- </option>'."\n";   
373                if (count($u_tmp))
374                {
375                        foreach ($u_tmp as $uidnumber => $cn)
376                        {
377                                $options .= "<option value=$uidnumber class='line-above'>$cn</option>";
378                        }
379                        unset($u_tmp);
380                }
381                       
382                return $options;
383        }
384
385
386        function is_user_listAdmin($uid)
387        {
388                $justthese = array("memberUid");
389                $filter = "(&(phpgwAccountType=g)(cn=listadmin)(memberuid=$uid))";
390                $dn = $GLOBALS['phpgw_info']['server']['dn_listadmin'];
391                $search = ldap_search($this->ldap, $dn, $filter, $justthese);
392                $entry = ldap_get_entries($this->ldap, $search);
393                $i = 0;
394                for($i = 0; $i <= $entry[0]['memberuid']['count']; $i++)
395                {
396                        if($entry[0]['memberuid'][$i] == $uid)
397                        {
398                                $return = 1;
399                        }
400                }
401                return $return;
402        }
403
404
405
406
407
408        function search_users_only($params)
409        {
410
411                $context = $params['context'];
412                $filtro = $params['filtro'];
413                $tipo = $params['tipo'];
414                //      $recursive = $params['recursive'];
415
416                $justthese = array("cn", "uidNumber", "mail");
417
418                if($tipo == "adm_maillist")
419                {
420                        $users_filter="(&(phpgwAccountType=u)(phpgwAccountStatus=A)(|(cn=*$filtro*)(mail=*$filtro*)))";
421                }
422                else
423                {
424                        $users_filter="(&(phpgwAccountStatus=A)(|(cn=*$filtro*)(mail=*$filtro*)))";
425                }
426
427                $users = Array();
428
429        //      if ($recursive == 'true')
430        //      {
431                $users_search = ldap_search($this->ldap, $context, $users_filter, $justthese);
432        //      }
433        //      else
434        //      {
435        //              $users_search = ldap_list($this->ldap, $context, $users_filter, $justthese);
436        //      }
437
438                $users_entries = ldap_get_entries($this->ldap, $users_search);
439                for ($i=0; $i<$users_entries["count"]; $i++)
440                {
441                                $u_tmp[$users_entries[$i]["uidnumber"][0]] = $users_entries[$i]["cn"][0] . " [" .$users_entries[$i]["mail"][0] . "]";
442                }
443
444                if(count($u_tmp) == 0) {
445                        $options .= '<option  value="-1" disabled>------&nbsp;&nbsp;&nbsp;USUARIO INVALIDO OU NAO CRIADO NO EXPRESSO&nbsp;&nbsp;&nbsp;------</option>'."\n";
446                }
447
448                if (count($u_tmp))
449                        natcasesort($u_tmp);
450
451                $i = 0;
452                $users = array();
453
454                $options .= '<option  value="-1" disabled>-----------------------------&nbsp;&nbsp;&nbsp;&nbsp;Usuarios&nbsp;&nbsp;&nbsp;&nbsp;---------------------------- </option>'."\n";
455                if (count($u_tmp))
456                {
457                        foreach ($u_tmp as $uidnumber => $cn)
458                        {
459                                $options .= "<option value=$uidnumber class='line-above'>$cn</option>";
460                        }
461
462                        unset($u_tmp);
463                }
464
465                return $options;
466        }
467
468
469        function get_available_groups($params)
470        {
471        $context = $params['context'];
472        $justthese = array("cn", "gidNumber");
473        $groups_list=ldap_search($this->ldap, $context, ("(phpgwAccountType=g)"), $justthese);
474        ldap_sort($this->ldap, $groups_list, "cn");
475        $entries = ldap_get_entries($this->ldap, $groups_list);
476        $options = '';
477        for ($i=0; $i<$entries['count']; $i++)
478                {
479                $options .= "<option value=" . $entries[$i]['gidnumber'][0] . ">" . $entries[$i]['cn'][0] . "</option>";
480                }
481        return $options;               
482        }
483       
484        function get_available_maillists($params)
485        {
486                $context = $params['context'];
487                $justthese = array("uid","mail","uidNumber");
488        $maillists=ldap_search($this->ldap, $context, ("(phpgwAccountType=l)"), $justthese);
489        ldap_sort($this->ldap, $maillists, "uid");
490       
491        $entries = ldap_get_entries($this->ldap, $maillists);
492       
493                $options = '';                 
494                for ($i=0; $i<$entries['count']; $i++)
495                {
496                        $options .= "<option value=" . $entries[$i]['uidnumber'][0] . ">" . $entries[$i]['uid'][0] . " </option>";
497                }
498        return $options;               
499        }
500       
501        function ldap_add_entry($dn, $entry)
502        {
503                $result = array();
504                if (!@ldap_add ($this->ldap_write, $dn, $entry ))
505                {
506                        $result['status'] = false;
507                        $result['msg'] = "Erro na funcao ldap_functions->ldap_add_entry ($dn).\nRetorno do servidor:" . ldap_error($this->ldap_write);
508                }
509                else
510                        $result['status'] = true;
511                return $result;
512        }
513       
514        function ldap_save_photo($dn, $pathphoto, $photo_exist=false)
515        {
516                $fd = fopen($pathphoto, "r");
517                $fsize = filesize($pathphoto);
518                $jpegStr = fread($fd, $fsize);
519                fclose ($fd);
520                $attrs['jpegPhoto'] = $jpegStr;
521                       
522                if ($photo_exist)
523                        $res = @ldap_mod_replace($this->ldap_write, $dn, $attrs);
524                else
525                        $res = @ldap_mod_add($this->ldap_write, $dn, $attrs);
526                       
527                if ($res)
528                {
529                        $result['status'] = true;
530                }
531                else
532                {
533                        $result['status'] = false;
534                        $result['msg'] = "Erro na funcao ldap_functions->ldap_save_photo ($dn).\nRetorno do servidor:" . ldap_error($this->ldap_write);
535                }
536                return $result;
537        }
538       
539        function ldap_remove_photo($dn)
540        {
541                $attrs['jpegPhoto'] = array();
542                $res = ldap_mod_del($this->ldap_write, $dn, $attrs);
543                if ($res)
544                {
545                        $result['status'] = true;
546                }
547                else
548                {
549                        $result['status'] = false;
550                        $result['msg'] = "Erro na funcao ldap_functions->ldap_remove_photo ($dn).\nRetorno do servidor:" . ldap_error($this->ldap_write);
551                }
552                return $result;
553        }       
554       
555        // Pode receber tanto um ï¿œnico memberUid quanto um array de memberUid's
556        function add_user2group($gidNumber, $memberUid)
557        {
558                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
559                $justthese = array("dn");
560                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
561                $entry = ldap_get_entries($this->ldap_write, $search);
562                $group_dn = $entry[0]['dn'];
563                $attrs['memberUid'] = $memberUid;
564               
565                $res = @ldap_mod_add($this->ldap_write, $group_dn, $attrs);
566               
567                if ($res)
568                {
569                        $result['status'] = true;
570                }
571                else
572                {
573                        $result['status'] = false;
574                        $result['msg'] = "Erro na funcao ldap_functions->add_user2group ($memberUid).\nRetorno do servidor:" . ldap_error($this->ldap_write);
575                }
576                return $result;
577        }
578       
579        function remove_user2group($gidNumber, $memberUid)
580        {
581                $filter = "(&(phpgwAccountType=g)(gidNumber=$gidNumber))";
582                $justthese = array("dn");
583                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
584                $entry = ldap_get_entries($this->ldap_write, $search);
585                $group_dn = $entry[0]['dn'];
586                $attrs['memberUid'] = $memberUid;
587                $res = @ldap_mod_del($this->ldap_write, $group_dn, $attrs);
588               
589                /*echo 'usuarios recebidos para remocao no ldap';
590                echo '<pre>';
591                print_r($memberUid);*/
592               
593                if ($res)
594                {
595                        $result['status'] = true;
596                }
597                else
598                {
599                        $result['status'] = false;
600                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2group ($memberUid).\nRetorno do servidor:" . ldap_error($this->ldap_write);
601                }
602                return $result;
603        }
604       
605        function add_user2maillist($uidNumber, $mail)
606        {
607                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
608                $justthese = array("dn");
609                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
610                $entry = ldap_get_entries($this->ldap_write, $search);
611                $group_dn = $entry[0]['dn'];
612                echo "teste...";
613
614                $attrs['mailForwardingAddress'] = $mail;
615                $res = ldap_mod_add($this->ldap_write, $group_dn, $attrs);
616               
617                if ($res)
618                {
619                        $result['status'] = true;
620                }
621                else
622                {
623                        $result['status'] = false;
624                        $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist ($mail).\nRetorno do servidor:" . ldap_error($this->ldap_write);
625                }
626                return $result;
627        }
628       
629        function add_user2maillist_adm($uidNumber, $mail)
630        {
631                $result['msg'] = "Entre adiciona adm";
632                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
633                $justthese = array("dn");
634                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
635                $entry = ldap_get_entries($this->ldap_write, $search);
636                $group_dn = $entry[0]['dn'];
637
638                $attrs['admlista'] = $mail;
639                $res = ldap_mod_add($this->ldap_write, $group_dn, $attrs);
640
641                if ($res)
642                {
643                                $result['status'] = true;
644                }
645                else
646                {
647                                $result['status'] = false;
648                                $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist ($mail).\nRetorno do servidor:" . ldap_error($this->ldap_write);
649                }
650                return $result;
651        }
652
653
654       
655        function add_user2maillist_scl($dn, $array_emails)
656        {
657                $attrs['naomoderado'] = $array_emails;
658                $res = @ldap_mod_add($this->ldap_write, $dn, $attrs);
659                if ($res)
660                {
661                        $result['status'] = true;
662                }
663                else
664                {
665                        $result['status'] = false;
666                        $result['msg'] = "Erro na funcao ldap_functions->add_user2maillist_scl ($dn).\n\nRetorno do servidor:" . ldap_error($this->ldap_write);
667                }
668                return $result;
669        }
670
671        function remove_user2maillist($uidNumber, $mail)
672        {
673                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
674                $justthese = array("dn");
675                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
676                $entry = ldap_get_entries($this->ldap_write, $search);
677                $group_dn = $entry[0]['dn'];
678                $attrs['mailForwardingAddress'] = $mail;
679                $res = @ldap_mod_del($this->ldap_write, $group_dn, $attrs);
680               
681                if ($res)
682                {
683                        $result['status'] = true;
684                }
685                else
686                {
687                        $result['status'] = false;
688                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist ($mail).\n\nRetorno do servidor:" . ldap_error($this->ldap_write);
689                }
690                return $result;
691        }
692       
693        function remove_user2maillist_adm($uidNumber, $mail)
694        {
695                $filter = "(&(phpgwAccountType=l)(uidNumber=$uidNumber))";
696                $justthese = array("dn");
697                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
698                $entry = ldap_get_entries($this->ldap_write, $search);
699                $group_dn = $entry[0]['dn'];
700                $attrsAdm['admlista'] = $mail;
701                $res = @ldap_mod_del($this->ldap_write, $group_dn, $attrsAdm);
702                if ($res)
703                {
704                                $result['status'] = true;
705                }
706                else
707                {
708                                $result['status'] = false;
709                                $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist ($mail).\n\nRetorno do servidor:" . ldap_error($this->ldap_write);
710                }
711                return $result;
712        }
713
714        function remove_user2maillist_scl($dn, $array_emails)
715        {
716                $attrs['naomoderado'] = $array_emails;
717                $res = @ldap_mod_del($this->ldap_write, $dn, $attrs);
718               
719                if ($res)
720                {
721                        $result['status'] = true;
722                }
723                else
724                {
725                        $result['status'] = false;
726                        $result['msg'] = "Erro na funcao ldap_functions->remove_user2maillist_scp ($dn).\n\nRetorno do servidor:" . ldap_error($this->ldap_write);
727                }
728                return $result;
729        }
730
731        function replace_user2maillists($new_mail, $old_mail)
732        {
733                $filter = "(&(phpgwAccountType=l)(mailforwardingaddress=$old_mail))";
734                $justthese = array("dn");
735                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
736                $entries = ldap_get_entries($this->ldap_write, $search);
737                $result['status'] = true;
738                for ($i=0; $i<$entries['count']; $i++)
739                {
740                        $attrs['mailforwardingaddress'] = $old_mail;
741                        $res1 = @ldap_mod_del($this->ldap_write, $entries[$i]['dn'], $attrs);
742                        $attrs['mailforwardingaddress'] = $new_mail;
743                        $res2 = @ldap_mod_add($this->ldap_write, $entries[$i]['dn'], $attrs);
744               
745                        if ((!$res1) || (!$res2))
746                        {
747                                $result['status'] = false;
748                                $result['msg'] = "Erro na funcao ldap_functions->replace_user2maillists ($old_mail).\nRetorno do servidor:" . ldap_error($this->ldap_write);
749                        }
750                }
751                return $result;
752        }
753       
754        function get_user_info($uidnumber, $context, $serpro=false)
755        {
756                if ($serpro)
757                        $filter="(&(objectclass=".$GLOBALS['phpgw_info']['server']['atributousuarios'].")(uidNumber=".$uidnumber."))";
758                        else
759                        $filter="(&(phpgwAccountType=u)(uidNumber=".$uidnumber."))";
760                //Precisa identificar cada atributo, pois em alguns ldaps os atributos nao sao devolvidos se nao fores explicitamente identificados na pesquisa
761                $justthese = array("dn","ou","uid","uidnumber","gidnumber","departmentnumber","givenname","sn","telephonenumber","mobile","phpgwaccountstatus","phpgwaccountvisible","accountstatus","mail","defaultmembermoderation","admlista","listPass","listPass","mailalternateaddress","mailforwardingaddress","deliverymode","userpasswordrfc2617","cn","objectclass",$GLOBALS['phpgw_info']['server']['atributoexpiracao']);
762                $search = ldap_search($this->ldap, $context, $filter, $justthese);
763                //$search = ldap_search($this->ldap, $context, $filter);
764                $entry = ldap_get_entries($this->ldap, $search);
765
766                //Pega o dn do setor do usuario.
767                $entry[0]['dn'] = strtolower($entry[0]['dn']);
768                $sector_dn_array = explode(",", $entry[0]['dn']);
769                for($i=1; $i<count($sector_dn_array); $i++)
770                        $sector_dn .= $sector_dn_array[$i] . ',';
771                //Retira ultimo pipe.
772                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
773       
774            $result['dn']               = $entry[0]['dn'];
775            $result['ou']               = $entry[0]['ou'][0];
776                $result['context']                      = $sector_dn;
777                $result['uid']                          = $entry[0]['uid'][0];
778                $result['uidnumber']            = $entry[0]['uidnumber'][0];
779                $result['gidnumber']            = $entry[0]['gidnumber'][0];
780                $result['departmentnumber']     = $entry[0]['departmentnumber'][0];
781                $result['givenname']            = $entry[0]['givenname'][0];
782                $result['sn']                           = $entry[0]['sn'][0];
783                $result['telephonenumber']      = $entry[0]['telephonenumber'][0];
784                $result['mobile']       = $entry[0]['mobile'][0];
785                $result['phpgwaccountstatus']   = $entry[0]['phpgwaccountstatus'][0];
786                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
787                $result['accountstatus']        = $entry[0]['accountstatus'][0];
788                $result['mail']                         = $entry[0]['mail'][0];
789                $result['defaultMemberModeration']   = $entry[0]['defaultmembermoderation'][0];
790                $result['admlista']                  = $entry[0]['admlista'][0];
791                $result['listPass']                     = $entry[0]['listPass'][0];
792                $result['mailalternateaddress'] = $entry[0]['mailalternateaddress'][0];
793                $result['mailforwardingaddress']= $entry[0]['mailforwardingaddress'][0];
794                $result['deliverymode']         = $entry[0]['deliverymode'][0];
795                $result['userPasswordRFC2617']  = $entry[0]['userpasswordrfc2617'][0];
796                $result['cn']                           = $entry[0]['cn'][0];
797                $result['phpgwaccount']         = false;
798                if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']))
799                        $result[$GLOBALS['phpgw_info']['server']['atributoexpiracao']]  = $entry[0][$GLOBALS['phpgw_info']['server']['atributoexpiracao']][0];
800                        else
801                        $result['phpgwaccountexpires'] = $entry[0]['phpgwaccountexpires'][0];
802                //objectclass phpgwaccount
803                foreach ($entry[0]['objectclass'] as $objectclass)
804                        {
805                        if  (strcasecmp($objectclass, 'phpgwaccount') == 0)
806                                $result['phpgwaccount']  = true;
807                        }
808                //Photo
809                if ($entry[0]['jpegphoto']['count'] == 1)
810                        $result['photo_exist'] = 'true';
811               
812                // Samba
813                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
814                {
815                        if ($entry[0]['objectclass'][$i] == 'sambaSamAccount')
816                                $result['sambaUser'] = true;
817                }               
818                if (($this->current_config['expressoAdmin_samba_support'] == 'true') && ($result['sambaUser']))
819                {
820                        $result['sambaaccflags'] = $entry[0]['sambaacctflags'][0];
821                        $result['sambalogonscript'] = $entry[0]['sambalogonscript'][0];
822                        $result['homedirectory'] = $entry[0]['homedirectory'][0];
823                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
824                        array_pop($a_tmp);
825                        $result['sambasid'] = implode("-", $a_tmp);
826                }
827               
828                // MailLists
829                $justthese = array("uid","mail","uidnumber");
830                $filter="(&(phpgwAccountType=l)(mailforwardingaddress=".$result['mail']."))";
831                $search = ldap_search($this->ldap, $context, $filter, $justthese);
832        ldap_sort($this->ldap, $search, "uid");
833        $entries = ldap_get_entries($this->ldap, $search);
834
835        for ($i=0; $i<$entries['count']; $i++)
836        {
837                $result['maillists_info'][$i]['uidnumber'] = $entries[$i]['uidnumber'][0];
838                $result['maillists_info'][$i]['uid'] = $entries[$i]['uid'][0];
839                $result['maillists_info'][$i]['mail'] = $entries[$i]['mail'][0];
840                $result['maillists'][] = $entries[$i]['uidnumber'][0];
841        }
842       
843        // Groups
844                $justthese = array("gidnumber","cn");
845                $filter="(&(phpgwAccountType=g)(memberuid=".$result['uid']."))";
846                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
847        ldap_sort($this->ldap, $search, "cn");
848        $entries = ldap_get_entries($this->ldap, $search);
849        for ($i=0; $i<$entries['count']; $i++)
850        {
851                $result['groups_ldap'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['cn'][0];
852                $result['groups'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['gidnumber'][0];
853                $result['groups_info'][ $entries[$i]['gidnumber'][0] ] = $entries[$i]['gidnumber'][0];
854        }
855                return $result;         
856        }
857       
858        function get_group_info($gidnumber, $context)
859        {
860                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
861                $search = ldap_search($this->ldap, $context, $filter);
862                $entry = ldap_get_entries($this->ldap, $search);
863
864                //Pega o dn do setor do grupo.
865                $entry[0]['dn'] = strtolower($entry[0]['dn']);
866                $sector_dn_array = explode(",", $entry[0]['dn']);
867                for($i=1; $i<count($sector_dn_array); $i++)
868                        $sector_dn .= $sector_dn_array[$i] . ',';
869                //Retira ultimo pipe.
870                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
871               
872                $result['context']                              = $sector_dn;
873                $result['cn']                                   = $entry[0]['cn'][0];
874                $result['description']                  = $entry[0]['description'][0];
875                $result['gidnumber']                    = $entry[0]['gidnumber'][0];
876                $result['phpgwaccountvisible']  = $entry[0]['phpgwaccountvisible'][0];
877                $result['email']                                = $entry[0]['mail'][0];
878               
879                //MemberUid
880                for ($i=0; $i<$entry[0]['memberuid']['count']; $i++)
881                {
882                        $justthese = array("cn","uid","uidnumber");
883                       
884                        // Montagem dinamica do filtro
885                        $filter="(&(phpgwAccountType=u)(|";
886                        for ($k=0; (($k<10) && ($i<$entry[0]['memberuid']['count'])); $k++)
887                        {
888                                $filter .= "(uid=".$entry[0]['memberuid'][$i].")";
889                                $i++;
890                        }
891                        $i--;
892                        $filter .= "))";
893                       
894                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
895                        $user_entry = ldap_get_entries($this->ldap, $search);
896
897                        for ($j=0; $j<$user_entry['count']; $j++)
898                        {
899                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['cn'] = $user_entry[$j]['cn'][0];
900                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['uidnumber'] = $user_entry[$j]['uidnumber'][0];
901                                $result['memberuid_info'][$user_entry[$j]['uid'][0]]['type'] = 'u';
902                        }
903                }
904               
905                // Retira o count do array
906                array_shift($entry[0]['memberuid']);
907               
908                // Checamos e-mails que nï¿œo fazem parte do expresso.
909                // Criamos um array temporario
910                $tmp_array = array();
911                foreach ($result['memberuid_info'] as $uid => $user_data)
912                {
913                        $tmp_array[] = $uid;
914                }
915
916                // Vemos a diferenï¿œa
917                $array_diff = array_diff($entry[0]['memberuid'], $tmp_array);
918               
919                // Incluimos no resultado
920                foreach ($array_diff as $index=>$uid)
921                {
922                        $result['memberuid_info'][$uid]['cn'] = $uid;
923                }
924               
925                // Samba
926                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
927                {
928                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
929                                $result['sambaGroup'] = true;
930
931                        $a_tmp = explode("-", $entry[0]['sambasid'][0]);
932                        array_pop($a_tmp);
933                        $result['sambasid'] = implode("-", $a_tmp);
934                }
935
936                return $result;
937        }       
938       
939        function get_maillist_info($uidnumber, $context)
940        {
941                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
942                $search = ldap_search($this->ldap, $context, $filter);
943                $entry = ldap_get_entries($this->ldap, $search);
944       
945                //Pega o dn do setor do usuario.
946                $entry[0]['dn'] = strtolower($entry[0]['dn']);
947                $sector_dn_array = explode(",", $entry[0]['dn']);
948                for($i=1; $i<count($sector_dn_array); $i++)
949                        $sector_dn .= $sector_dn_array[$i] . ',';
950                //Retira ultimo pipe.
951                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
952
953                $result['context']                      = $sector_dn;
954                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
955                $result['uid']                          = $entry[0]['uid'][0];
956                $result['cn']                           = $entry[0]['cn'][0];
957                $result['admlista']                     = $entry[0]['admlista'][0];
958                $result['defaultMemberModeration']      = $entry[0]['defaultmembermoderation'][0];
959                $result['listPass']                     = $entry[0]['listPass'][0];
960                $result['mail']                         = $entry[0]['mail'][0];
961                $result['accountStatus']                = $entry[0]['accountstatus'][0];
962                $result['accountAdm']                   = $entry[0]['accountAdm'][0];
963                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
964                $result['description']                  = $entry[0]['description'][0];
965                       
966                //Members
967                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
968                {
969                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype", "mail");
970                               
971                        // Montagem dinamica do filtro
972                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|";
973                        for ($k=0; (($k<10) && ($i<$entry[0]['mailforwardingaddress']['count'])); $k++)
974                        {
975                                $filter .= "(mail=".$entry[0]['mailforwardingaddress'][$i].")";
976                                $i++;
977                        }
978                        $i--;
979                        $filter .= "))";
980                               
981                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
982                        $user_entry = ldap_get_entries($this->ldap, $search);
983                               
984                        for ($j=0; $j<$user_entry['count']; $j++)
985                        {
986                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['uid'] = $user_entry[$j]['uid'][0];
987                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['cn'] = $user_entry[$j]['cn'][0];
988                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['type'] = $user_entry[$j]['phpgwaccounttype'][0];
989                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['mail'] = $user_entry[$j]['mail'][0];
990                                $result['members'][] = $user_entry[$j]['uidnumber'][0];
991                        }
992                }
993
994                // Retira o count do array
995                array_shift($entry[0]['mailforwardingaddress']);
996
997                // Checamos e-mails que nï¿œo fazem parte do expresso.
998                // Criamos um array temporario
999                $tmp_array = array();
1000                foreach ($result['members_info'] as $uid => $user_data)
1001                {
1002                        $tmp_array[] = $user_data['mail'];
1003                }
1004
1005                // Vemos a diferenï¿œa
1006                $array_diff = array_diff($entry[0]['mailforwardingaddress'], $tmp_array);
1007
1008                // Incluimos no resultado
1009                foreach ($array_diff as $index=>$mailforwardingaddress)
1010                {
1011                        $result['members_info'][$mailforwardingaddress]['uid'] = $mailforwardingaddress;
1012                        //$result['members_info'][$mailforwardingaddress]['cn'] = 'E-Mail nao encontrado';
1013                        $result['members_info'][$mailforwardingaddress]['cn'] = '';
1014                        $result['members_info'][$mailforwardingaddress]['mailforwardingaddress'] = $mailforwardingaddress;
1015                        $result['members'][] = $mailforwardingaddress;
1016                }
1017                return $result;
1018        }       
1019
1020        function get_adm_maillist_info($uidnumber, $context) // Funcao que coleta as informacoes dos administradores de listas no LDAP
1021        {
1022                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
1023                $search = ldap_search($this->ldap, $context, $filter);
1024                $entry = ldap_get_entries($this->ldap, $search);
1025       
1026                //Pega o dn do setor do usuario.
1027                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1028                $sector_dn_array = explode(",", $entry[0]['dn']);
1029                for($i=1; $i<count($sector_dn_array); $i++)
1030                        $sector_dn .= $sector_dn_array[$i] . ',';
1031                //Retira ultimo pipe.
1032                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1033                       
1034                $result['context']                      = $sector_dn;
1035                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
1036                $result['uid']                          = $entry[0]['uid'][0];
1037                $result['cn']                           = $entry[0]['cn'][0];
1038                $result['listPass']                     = $entry[0]['listPass'][0];
1039                $result['mail']                         = $entry[0]['mail'][0];
1040                $result['accountStatus']                = $entry[0]['accountstatus'][0];
1041                $result['accountAdm']                   = $entry[0]['accountAdm'][0];
1042                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
1043                $result['description']                  = $entry[0]['description'][0];
1044
1045                //Members
1046                for ($i=0; $i<$entry[0]['admlista']['count']; $i++)
1047                {
1048                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype", "mail", "admlista");
1049                               
1050                        // Montagem dinamica do filtro
1051                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(|";
1052                        for ($k=0; (($k<10) && ($i<$entry[0]['admlista']['count'])); $k++)
1053                        {
1054                                $filter .= "(mail=".$entry[0]['admlista'][$i].")";
1055                                $i++;
1056                        }
1057                        $i--;
1058                        $filter .= "))";
1059                               
1060                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1061                        $user_entry = ldap_get_entries($this->ldap, $search);
1062                               
1063                        for ($j=0; $j<$user_entry['count']; $j++)
1064                        {
1065                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['uid'] = $user_entry[$j]['uid'][0];
1066                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['cn'] = $user_entry[$j]['cn'][0];
1067                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['type'] = $user_entry[$j]['phpgwaccounttype'][0];
1068                                $result['members_info'][$user_entry[$j]['uidnumber'][0]]['mail'] = $user_entry[$j]['mail'][0];
1069                                $result['members'][] = $user_entry[$j]['uidnumber'][0];
1070                        }
1071                }
1072
1073                // Retira o count do array
1074                array_shift($entry[0]['admlista']);
1075
1076                // Checamos e-mails que nï¿œo fazem parte do expresso.
1077                // Criamos um array temporario
1078                $tmp_array = array();
1079                foreach ($result['members_info'] as $uid => $user_data)
1080                {
1081                        $tmp_array[] = $user_data['mail'];
1082                }
1083
1084                // Vemos a diferenï¿œa
1085                $array_diff = array_diff($entry[0]['admlista'], $tmp_array);
1086
1087                // Incluimos no resultado
1088                foreach ($array_diff as $index=>$admlista)
1089                {
1090                        $result['members_info'][$admlista]['uid'] = $admlista;
1091                        //$result['members_info'][$admlista]['cn'] = 'E-Mail nao encontrado';
1092                        $result['members_info'][$admlista]['cn'] = '';
1093                        $result['members_info'][$admlista]['admlista'] = $admlista;
1094                        $result['members'][] = $admlista;
1095                }
1096                return $result;
1097        }       
1098
1099
1100        function get_maillist_scl_info($uidnumber, $context)
1101        {
1102                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
1103                $search = ldap_search($this->ldap, $context, $filter);
1104                $entry = ldap_get_entries($this->ldap, $search);
1105
1106                //Pega o dn do setor do usuario.
1107                $entry[0]['dn'] = strtolower($entry[0]['dn']);
1108                $sector_dn_array = explode(",", $entry[0]['dn']);
1109                for($i=1; $i<count($sector_dn_array); $i++)
1110                        $sector_dn .= $sector_dn_array[$i] . ',';
1111                //Retira ultimo pipe.
1112                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
1113               
1114                $result['dn']                           = $entry[0]['dn'];
1115                $result['context']                      = $sector_dn;
1116                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
1117                $result['uid']                          = $entry[0]['uid'][0];
1118                $result['cn']                           = $entry[0]['cn'][0];
1119                $result['mail']                         = $entry[0]['mail'][0];
1120                $result['accountStatus']                = $entry[0]['accountstatus'][0];
1121                $result['accountAdm']                   = $entry[0]['accountAdm'][0];
1122                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
1123                $result['accountRestrictive']           = $entry[0]['accountrestrictive'][0];
1124                $result['participantCanSendMail']       = $entry[0]['participantcansendmail'][0];
1125                $result['description']                  = $entry[0]['description'][0];
1126               
1127                //Senders
1128                //for ($i=0; $i<$entry[0]['mailsenderaddress']['count']; $i++)
1129                //Recupera a relacao de usuario nao moderados no Mailman (podem enviar e-mails para uma lista de e-mail sem precisar da
1130                //autorizacao do moderador;
1131                for ($i=0; $i<$entry[0]['naomoderado']['count']; $i++)
1132                {
1133                        $justthese = array("cn", "uidnumber", "uid", "mail");
1134                        $filter="(&(phpgwAccountType=u)(mail=".$entry[0]['naomoderado'][$i]."))";
1135                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1136                        $user_entry = ldap_get_entries($this->ldap, $search);
1137                       
1138                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['uid'] = $user_entry[0]['uid'][0];
1139                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['cn'] = $user_entry[0]['cn'][0];
1140                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['mail'] = $user_entry[0]['mail'][0];
1141                        $result['members'][] = $user_entry[0]['uidnumber'][0];
1142                }
1143
1144                return $result;
1145        }       
1146
1147        function group_exist($gidnumber)
1148        {
1149                $justthese = array("cn");
1150                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1151                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1152                               
1153                $entry = ldap_get_entries($this->ldap, $search);
1154                if ($entry['count'] == 0)
1155                        return false;
1156                else
1157                        return true;
1158        }
1159
1160        function gidnumbers2cn($gidnumbers, $context)
1161        {
1162                $result = array();
1163                if (count($gidnumbers))
1164                {
1165                        $justthese = array("cn");
1166                        $i = 0;
1167                        foreach ($gidnumbers as $gidnumber)
1168                        {
1169                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
1170                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1171                               
1172                                $entry = ldap_get_entries($this->ldap, $search);
1173                                if ($entry['count'] == 0)
1174                                        $result['groups_info'][$i]['cn'] = '_Grupo existe no BD mas nï¿œo no LDAP';
1175                                else
1176                                        $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
1177                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
1178                               
1179                                if (!strpos(strtolower($entry[0]['dn']), strtolower($context)))
1180                                        $result['groups_info'][$i]['group_disabled'] = 'true';
1181                                else
1182                                        $result['groups_info'][$i]['group_disabled'] = 'false';
1183                               
1184                                $i++;
1185                        }
1186                }
1187                return $result;
1188        }
1189
1190        function uidnumber2uid($uidnumber)
1191        {
1192                $justthese = array("uid");
1193                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1194                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1195                $entry = ldap_get_entries($this->ldap, $search);
1196                return $entry[0]['uid'][0];
1197        }
1198
1199        function uid2uidnumber($uid)
1200        {
1201               $justthese = array("uidnumber");
1202               $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uid=".$uid."))";
1203               $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1204               $entry = ldap_get_entries($this->ldap, $search);
1205               return $entry[0]['uidnumber'][0];
1206        }
1207
1208        function uidnumber2mail($uidnumber)
1209        {
1210                $justthese = array("mail");
1211                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
1212                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1213                $entry = ldap_get_entries($this->ldap, $search);
1214                return $entry[0]['mail'][0];
1215        }
1216
1217       
1218        function change_user_context($dn, $newrdn, $newparent)
1219        {
1220                if (!ldap_rename ( $this->ldap_write, $dn, $newrdn, $newparent, true ))
1221                {
1222                        $return['status'] = false;
1223                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldap_write);
1224                }
1225                else
1226                        $return['status'] = true;
1227                return $return;
1228        }
1229       
1230        function replace_user_attributes($dn, $ldap_mod_replace)
1231        {
1232                if (!@ldap_mod_replace ( $this->ldap_write, $dn, $ldap_mod_replace ))
1233                {
1234                        $return['status'] = false;
1235                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap_write);
1236                }
1237                else
1238                        $return['status'] = true;
1239                return $return;
1240        }
1241       
1242        function add_user_attributes($dn, $ldap_add)
1243        {
1244                if (!@ldap_mod_add ( $this->ldap_write, $dn, $ldap_add ))
1245                {
1246                        $return['status'] = false;
1247                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap_write);
1248                }
1249                else
1250                        $return['status'] = true;
1251               
1252                return $return;
1253        }
1254       
1255        function remove_user_attributes($dn, $ldap_remove)
1256        {
1257                if (!@ldap_mod_del ( $this->ldap_write, $dn, $ldap_remove ))
1258                {
1259                        $return['status'] = false;
1260                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldap_write);
1261                }
1262                else
1263                        $return['status'] = true;
1264               
1265                return $return;
1266        }
1267       
1268        function set_user_password($uid, $password)
1269        {
1270                $justthese = array("userPassword");
1271                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1272                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1273                $entry = ldap_get_entries($this->ldap_write, $search);
1274                $dn = $entry[0]['dn'];
1275                $userPassword = $entry[0]['userpassword'][0];
1276                $ldap_mod_replace['userPassword'] = $password;
1277                $this->replace_user_attributes($dn, $ldap_mod_replace);
1278                return $userPassword;
1279        }
1280
1281        function set_user_expires($uid, $expires)
1282        {
1283                $justthese = array(" ");
1284                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1285                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1286                $entry = ldap_get_entries($this->ldap_write, $search);
1287                $dn = $entry[0]['dn'];
1288                if(isset($GLOBALS['phpgw_info']['server']['atributoexpiracao']))
1289                        {
1290                        if(substr($GLOBALS['phpgw_info']['server']['atributoexpiracao'],-1,1)=="Z")
1291                                {
1292                                ###quando a data de expiracao estah no formato yyyymmddhhmmssZ
1293                                $ldap_mod_replace[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = strftime("%Y%m%d%H%M%SZ", $expires);
1294                                }
1295                                else
1296                                {
1297                                ###Outro atributo ldap que, assim como o phpgwaccounttype, tambem contem hora em formato unix
1298                                $ldap_mod_replace[$GLOBALS['phpgw_info']['server']['atributoexpiracao']] = $expires;
1299                                }
1300                        }
1301                else
1302                        {
1303                        $ldap_mod_replace['phpgwaccountexpires'] = $expires;
1304                        }
1305                //$ldap_mod_replace['phpgwaccountexpires'] = $expires;
1306                $this->replace_user_attributes($dn, $ldap_mod_replace);
1307                return true;
1308        }
1309       
1310        function delete_user($user_info)
1311        {
1312                $return['status'] = true;
1313               
1314                // GROUPS
1315                $attrs = array();
1316                $attrs['memberUid'] = $user_info['uid'];
1317                if (count($user_info['groups_info']))
1318                {
1319                        foreach ($user_info['groups_info'] as $group_info)
1320                        {
1321                                $gidnumber = $group_info['gidnumber'];
1322                                $justthese = array("dn");
1323                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1324                                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1325                        $entry = ldap_get_entries($this->ldap_write, $search);
1326                                $dn = $entry[0]['dn'];
1327                       
1328                                if (!@ldap_mod_del($this->ldap_write, $dn, $attrs))
1329                                {
1330                                        $return['status'] = false;
1331                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap_write);
1332                                }
1333                        }
1334                }
1335                       
1336                // MAILLISTS
1337                $attrs = array();
1338                $attrs['mailForwardingAddress'] = $user_info['mail'];
1339                if (count($user_info['maillists_info']))
1340                {
1341                        foreach ($user_info['maillists_info'] as $maillists_info)
1342                        {
1343                                $uidnumber = $maillists_info['uidnumber'];
1344                                $justthese = array("dn");
1345                                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1346                                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1347                        $entry = ldap_get_entries($this->ldap_write, $search);
1348                                $dn = $entry[0]['dn'];
1349                       
1350                                if (!@ldap_mod_del($this->ldap_write, $dn, $attrs))
1351                                {
1352                                        $return['status'] = false;
1353                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap_write);
1354                                }
1355                        }
1356                }
1357                       
1358                // UID
1359                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
1360                if (!@ldap_delete($this->ldap_write, $dn))
1361                {
1362                        $return['status'] = false;
1363                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap_write);
1364                }
1365               
1366                return $return;
1367        }
1368function delete_user_group($user,$groups)
1369        {
1370        $return['status'] = true;
1371        $attrs = array();
1372        $attrs['memberUid'] = $user['uid'];
1373        if ($groups['groups'])
1374                {
1375                foreach ($groups['groups'] as $gidnumber)
1376                         {
1377                         $justthese = array("dn");
1378                         $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1379                         $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1380                         $entry = ldap_get_entries($this->ldap_write, $search);
1381                         $dn = $entry[0]['dn'];
1382                         if (!@ldap_mod_del($this->ldap_write, $dn, $attrs))
1383                                {
1384                                $return['status'] = false;
1385                                $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap_write);
1386                                }
1387                        }
1388                }
1389        return $return;
1390        }
1391function delete_maillist($uidnumber)
1392        {
1393                $return['status'] = true;
1394               
1395                $justthese = array("dn");
1396                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1397                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1398                $entry = ldap_get_entries($this->ldap_write, $search);
1399                $dn = $entry[0]['dn'];
1400               
1401                if (!@ldap_delete($this->ldap_write, $dn))
1402                {
1403                        $return['status'] = false;
1404                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap_write);
1405                }
1406               
1407                return $return;
1408        }
1409
1410        function delete_group($gidnumber)
1411        {
1412                $return['status'] = true;
1413               
1414                $justthese = array("dn");
1415                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1416                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1417                $entry = ldap_get_entries($this->ldap_write, $search);
1418                $dn = $entry[0]['dn'];
1419               
1420                if (!@ldap_delete($this->ldap_write, $dn))
1421                {
1422                        $return['status'] = false;
1423                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap_write);
1424                }
1425               
1426                return $return;
1427        }
1428
1429       
1430        function rename_uid($uid, $new_uid)
1431        {
1432                $return['status'] = true;
1433               
1434                $justthese = array("dn");
1435                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1436                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1437            $entry = ldap_get_entries($this->ldap_write, $search);
1438                $dn = $entry[0]['dn'];
1439               
1440                $explode_dn = ldap_explode_dn($dn, 0);
1441                $rdn = "uid=" . $new_uid;
1442
1443                $parent = array();
1444                for ($j=1; $j<(count($explode_dn)-1); $j++)
1445                        $parent[] = $explode_dn[$j];
1446                $parent = implode(",", $parent);
1447               
1448                $return['new_dn'] = $rdn . ',' . $parent;
1449                       
1450                if (!@ldap_rename($this->ldap_write, $dn, $rdn, $parent, false))
1451                {
1452                        $return['status'] = false;
1453                        $return['msg'] .= 'Erro em ldap_funcitons->rename_uid: ' . ldap_error($this->ldap_write);
1454                }
1455               
1456                //Grupos
1457                $justthese = array("dn");
1458                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
1459                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1460            $entry = ldap_get_entries($this->ldap_write, $search);
1461        $array_mod_add['memberUid'] = $new_uid;
1462        $array_mod_del['memberUid'] = $uid;
1463
1464            for ($i=0; $i<=$entry['count']; $i++)
1465            {
1466                $dn = $entry[$i]['dn'];
1467                @ldap_mod_add ( $this->ldap_write, $dn,  $array_mod_add);
1468                @ldap_mod_del ( $this->ldap_write, $dn,  $array_mod_del);
1469            }
1470                return $return;
1471        }
1472
1473        function rename_cn($cn, $new_cn)
1474        {
1475                $return['status'] = true;
1476               
1477                $justthese = array("dn");
1478                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
1479                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1480            $entry = ldap_get_entries($this->ldap_write, $search);
1481                $dn = $entry[0]['dn'];
1482               
1483                $explode_dn = ldap_explode_dn($dn, 0);
1484                $rdn = "cn=" . $new_cn;
1485
1486                $parent = array();
1487                for ($j=1; $j<(count($explode_dn)-1); $j++)
1488                        $parent[] = $explode_dn[$j];
1489                $parent = implode(",", $parent);
1490               
1491                $return['new_dn'] = $rdn . ',' . $parent;
1492                       
1493                if (!@ldap_rename($this->ldap_write, $dn, $rdn, $parent, false))
1494                {
1495                        $return['status'] = false;
1496                }
1497               
1498                return $return;
1499        }
1500/*
1501        function rename_departmentnumber($old_dp, $new_dp)
1502        {
1503                $return['status'] = true;
1504               
1505                $justthese = array("dn");
1506                $filter="(&(phpgwAccountType=u)(departmentnumber=".$old_dp."))";
1507                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1508            $entry = ldap_get_entries($this->ldap, $search);
1509               
1510            for ($i=0; $i<=$entry['count']; $i++)
1511            {
1512                $dn = strtolower($entry[$i]['dn']);
1513                $ldap_mod_replace = array();
1514                $ldap_mod_replace['departmentnumber'] = $new_dp;
1515                @ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace);
1516                        //if (!@ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace))
1517                        //{
1518                        //      $return['status'] = false;
1519                        //      $return['msg'] .= 'Erro em ldap_funcitons->rename_departmentnumber: ' . ldap_error($this->ldap);
1520                        //}
1521            }
1522                return $return;
1523        }
1524*/
1525/*
1526        function get_sambadomains($context)
1527        {
1528                $return['status'] = true;
1529                $return['sambaDomains'] = array();
1530               
1531                $justthese = array("sambaSID","sambaDomainName");
1532                $filter="(objectClass=sambaDomain)";
1533                $search = ldap_search($this->ldap, $context, $filter, $justthese);
1534            $entry = ldap_get_entries($this->ldap, $search);
1535               
1536            for ($i=0; $i<$entry['count']; $i++)
1537            {
1538                        $return['sambaDomains'][$i]['samba_domain_sid'] = $entry[$i]['sambasid'][0];
1539                        $return['sambaDomains'][$i]['samba_domain_name'] = $entry[$i]['sambadomainname'][0];
1540                        $return['sambaDomains'][$i]['samba_domain_dn'] = $entry[$i]['dn'];
1541            }
1542           
1543                return $return;
1544        }
1545*/
1546        function exist_sambadomains($context, $sambaDomainName)
1547        {
1548                $justthese = array("dn");
1549                $filter="(&(objectClass=sambaDomain)(sambaDomainName=$sambaDomainName))";
1550                $search = ldap_search($this->ldap_write, $context, $filter, $justthese);
1551            $entry = ldap_get_entries($this->ldap_write, $search);
1552           
1553                if ($entry['count'])
1554                        return true;
1555                else
1556                        return false;
1557        }
1558       
1559        // Primeiro nilvel de organizaᅵᅵo.
1560        function exist_sambadomains_in_context($params)
1561        {
1562                $dn = $GLOBALS['phpgw_info']['server']['ldap_context'];
1563                $array_dn = ldap_explode_dn ( $dn, 0 );
1564               
1565                $context = $params['context'];
1566                $array_context = ldap_explode_dn ( $context, 0 );
1567               
1568                // Pego o setor no caso do contexto ser um sub-setor.
1569                if (($array_dn['count']+1) < ($array_context['count']))
1570                {
1571                        // inverto o array_dn para poder retirar o count
1572                        $array_dn_reverse  = array_reverse ( $array_dn, false );
1573                       
1574                        //retiro o count
1575                        array_pop($array_dn_reverse);
1576                       
1577                        //incluo o setor no dn
1578                        array_push ( $array_dn_reverse,  $array_context[ $array_context['count'] - 1 - $array_dn['count']]);
1579                       
1580                        // Volto a ordem natural
1581                        $array_dn  = array_reverse ( $array_dn_reverse, false );
1582                       
1583                        // Implodo
1584                        $context = implode ( ",", $array_dn );
1585                }
1586               
1587                $justthese = array("dn","sambaDomainName");
1588                $filter="(objectClass=sambaDomain)";
1589                $search = ldap_list($this->ldap_write, $context, $filter, $justthese);
1590            $entry = ldap_get_entries($this->ldap_write, $search);
1591           
1592            for ($i=0; $i<$entry['count']; $i++)
1593            {
1594                        $return['sambaDomains'][$i] = $entry[$i]['sambadomainname'][0];
1595            }
1596           
1597                if ($entry['count'])
1598                        $return['status'] = true;
1599                else
1600                        $return['status'] = false;
1601                       
1602                return $return;
1603        }
1604       
1605        function add_sambadomain($sambadomainname, $sambasid, $context)
1606        {
1607                $result = array();
1608               
1609                $dn                                                             = "sambaDomainName=$sambadomainname,$context";
1610                $entry['sambaSID']                                      = $sambasid;
1611                $entry['objectClass']                           = 'sambaDomain';
1612                $entry['sambaAlgorithmicRidBase']       = '1000';
1613                $entry['sambaDomainName']                       = $sambadomainname;
1614               
1615                if (!@ldap_add ( $this->ldap_write, $dn, $entry ))
1616                {
1617                        $return['status'] = false;
1618                        $return['msg'] = "Erro na funcao ldap_functions->add_sambadomain ($dn).\nRetorno do servidor: " . ldap_error($this->ldap_write);
1619                }
1620                else
1621                        $return['status'] = true;
1622               
1623                return $return;
1624        }
1625       
1626        function delete_sambadomain($sambadomainname)
1627        {
1628                $return['status'] = true;
1629                $filter="(sambaDomainName=$sambadomainname)";
1630                $search = ldap_search($this->ldap_write, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter);
1631            $entry = ldap_get_entries($this->ldap_write, $search);
1632         
1633                if ($entry['count'] != 0)
1634            {
1635                        $dn = $entry[0]['dn'];
1636                       
1637                        if (!@ldap_delete($this->ldap_write, $dn))
1638                        {
1639                                $return['status'] = false;
1640                                $return['msg'] .= "Erro em ldap_functions->delete_sambadomain ($sambadomainname).\nRetorno do servidor: " . ldap_error($this->ldap_write);
1641                        }
1642            }
1643           
1644                return $return;
1645        }
1646}
1647//Geracao de senha criptografada pro Mailman
1648
1649        function encriptar($string)
1650                {
1651                $key='expresso-livre';
1652                $result = '';
1653                for($i=1; $i<=strlen($string); $i++)
1654                {
1655                        $char = substr($string, $i-1, 1);
1656                        $keychar = substr($key, ($i % strlen($key))-1, 1);
1657                        $char = chr(ord($char)+ord($keychar));
1658                        $result.=$char;
1659                }
1660                return $result;
1661                }
1662
1663?>
Note: See TracBrowser for help on using the repository browser.