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

Revision 23, 35.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                        $filter="(&(phpgwAccountType=u)(uid=".$entry[0]['memberuid'][$i]."))";
697                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
698                        $user_entry = ldap_get_entries($this->ldap, $search);
699
700                        if ($user_entry[0]['uid'][0] == '')
701                        {
702                                $result['memberuid_info'][$i]['cn'] = '0-UID NAO EXISTE, corrigir manualmente: ' . $entry[0]['memberuid'][$i];
703                                $result['memberuid_info'][$i]['uid'] = $entry[0]['memberuid'][$i];
704                                $result['memberuid_info'][$i]['uidnumber'] = $entry[0]['memberuid'][$i];
705                        }
706                        else
707                        {
708                                $result['memberuid_info'][$i]['cn'] = $user_entry[0]['cn'][0];
709                                $result['memberuid_info'][$i]['uid'] = $user_entry[0]['uid'][0];
710                                $result['memberuid_info'][$i]['uidnumber'] = $user_entry[0]['uidnumber'][0];
711                        }
712                }
713               
714                // Samba
715                for ($i=0; $i<$entry[0]['objectclass']['count']; $i++)
716                {
717                        if ($entry[0]['objectclass'][$i] == 'sambaGroupMapping')
718                                $result['sambaGroup'] = true;
719                }
720                return $result;
721        }       
722       
723        function get_maillist_info($uidnumber, $context)
724        {
725                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
726                $search = ldap_search($this->ldap, $context, $filter);
727                $entry = ldap_get_entries($this->ldap, $search);
728
729                //Pega o dn do setor do usuario.
730                $entry[0]['dn'] = strtolower($entry[0]['dn']);
731                $sector_dn_array = explode(",", $entry[0]['dn']);
732                for($i=1; $i<count($sector_dn_array); $i++)
733                        $sector_dn .= $sector_dn_array[$i] . ',';
734                //Retira ultimo pipe.
735                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
736               
737                $result['context']                              = $sector_dn;
738                $result['uidnumber']                    = $entry[0]['uidnumber'][0];
739                $result['uid']                                  = $entry[0]['uid'][0];
740                $result['cn']                                   = $entry[0]['cn'][0];
741                $result['mail']                                 = $entry[0]['mail'][0];
742                $result['accountStatus']                = $entry[0]['accountstatus'][0];
743                $result['phpgwAccountVisible']  = $entry[0]['phpgwaccountvisible'][0];
744               
745                //Members
746                for ($i=0; $i<$entry[0]['mailforwardingaddress']['count']; $i++)
747                {
748                        $justthese = array("cn", "uidnumber", "uid", "phpgwaccounttype");
749                        $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(mail=".$entry[0]['mailforwardingaddress'][$i]."))";
750                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
751                        $user_entry = ldap_get_entries($this->ldap, $search);
752                       
753                        if ($user_entry['count'] != 0)
754                        {
755                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['uid'] = $user_entry[0]['uid'][0];
756                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['cn'] = $user_entry[0]['cn'][0];
757                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['type'] = $user_entry[0]['phpgwaccounttype'][0];
758                                $result['members_info'][$user_entry[0]['uidnumber'][0]]['mailforwardingaddress'] = $entry[0]['mailforwardingaddress'][$i];
759                                $result['members'][] = $user_entry[0]['uidnumber'][0];
760                        }
761                        else
762                        {
763                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['uid'] = $entry[0]['mailforwardingaddress'][$i];
764                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['cn'] = 'E-Mail nao encontrado (' . $entry[0]['mailforwardingaddress'][$i] . ')';
765                                $result['members_info'][$entry[0]['mailforwardingaddress'][$i]]['mailforwardingaddress'] = $entry[0]['mailforwardingaddress'][$i];
766                                $result['members'][] = $entry[0]['mailforwardingaddress'][$i];
767                        }
768                }
769               
770                return $result;
771        }       
772
773        function get_maillist_scl_info($uidnumber, $context)
774        {
775                $filter="(&(phpgwAccountType=l)(uidNumber=".$uidnumber."))";
776                $search = ldap_search($this->ldap, $context, $filter);
777                $entry = ldap_get_entries($this->ldap, $search);
778
779                //Pega o dn do setor do usuario.
780                $entry[0]['dn'] = strtolower($entry[0]['dn']);
781                $sector_dn_array = explode(",", $entry[0]['dn']);
782                for($i=1; $i<count($sector_dn_array); $i++)
783                        $sector_dn .= $sector_dn_array[$i] . ',';
784                //Retira ultimo pipe.
785                $sector_dn = substr($sector_dn,0,(strlen($sector_dn) - 1));
786               
787                $result['dn']                                           = $entry[0]['dn'];
788                $result['context']                                      = $sector_dn;
789                $result['uidnumber']                            = $entry[0]['uidnumber'][0];
790                $result['uid']                                          = $entry[0]['uid'][0];
791                $result['cn']                                           = $entry[0]['cn'][0];
792                $result['mail']                                         = $entry[0]['mail'][0];
793                $result['accountStatus']                        = $entry[0]['accountstatus'][0];
794                $result['phpgwAccountVisible']          = $entry[0]['phpgwaccountvisible'][0];
795                $result['accountRestrictive']           = $entry[0]['accountrestrictive'][0];
796                $result['participantCanSendMail']       = $entry[0]['participantcansendmail'][0];
797               
798                //Senders
799                for ($i=0; $i<$entry[0]['mailsenderaddress']['count']; $i++)
800                {
801                        $justthese = array("cn", "uidnumber", "uid", "mail");
802                        $filter="(&(phpgwAccountType=u)(mail=".$entry[0]['mailsenderaddress'][$i]."))";
803                        $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
804                        $user_entry = ldap_get_entries($this->ldap, $search);
805                       
806                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['uid'] = $user_entry[0]['uid'][0];
807                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['cn'] = $user_entry[0]['cn'][0];
808                        $result['senders_info'][$user_entry[0]['uidnumber'][0]]['mail'] = $user_entry[0]['mail'][0];
809                        $result['members'][] = $user_entry[0]['uidnumber'][0];
810                }
811
812                return $result;
813        }       
814
815        function group_exist($gidnumber)
816        {
817                $justthese = array("cn");
818                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
819                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
820                               
821                $entry = ldap_get_entries($this->ldap, $search);
822                if ($entry['count'] == 0)
823                        return false;
824                else
825                        return true;
826        }
827
828        function gidnumbers2cn($gidnumbers, $context)
829        {
830                if (count($gidnumbers))
831                {
832                        $justthese = array("cn");
833                        $i = 0;
834                        foreach ($gidnumbers as $gidnumber)
835                        {
836                                $filter="(&(phpgwAccountType=g)(gidNumber=".$gidnumber."))";
837                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
838                               
839                                $entry = ldap_get_entries($this->ldap, $search);
840                                if ($entry['count'] == 0)
841                                        $result['groups_info'][$i]['cn'] = '_Grupo existe no BD mas não no LDAP';
842                                else
843                                        $result['groups_info'][$i]['cn'] = $entry[0]['cn'][0];
844                                $result['groups_info'][$i]['gidnumber'] = $gidnumber;
845                               
846                                if (!strpos(strtolower($entry[0]['dn']), strtolower($context)))
847                                        $result['groups_info'][$i]['group_disabled'] = 'true';
848                                else
849                                        $result['groups_info'][$i]['group_disabled'] = 'false';
850                               
851                                $i++;
852                        }
853                }
854                return $result;
855        }
856
857        function uidnumber2uid($uidnumber)
858        {
859                $justthese = array("uid");
860                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
861                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
862                $entry = ldap_get_entries($this->ldap, $search);
863                return $entry[0]['uid'][0];
864        }
865
866        function uidnumber2mail($uidnumber)
867        {
868                $justthese = array("mail");
869                $filter="(&(|(phpgwAccountType=u)(phpgwAccountType=l))(uidNumber=".$uidnumber."))";
870                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
871                $entry = ldap_get_entries($this->ldap, $search);
872                return $entry[0]['mail'][0];
873        }
874
875       
876        function change_user_context($dn, $newrdn, $newparent)
877        {
878                if (!ldap_rename ( $this->ldap, $dn, $newrdn, $newparent, true ))
879                {
880                        $return['status'] = false;
881                        $return['msg'] = 'Erro em ldap_funcitons->change_user_context: ' . ldap_error($this->ldap);
882                }
883                else
884                        $return['status'] = true;
885               
886                return $return;
887        }
888       
889        function replace_user_attributes($dn, $ldap_mod_replace)
890        {
891                if (!@ldap_mod_replace ( $this->ldap, $dn, $ldap_mod_replace ))
892                {
893                        $return['status'] = false;
894                        $return['msg'] = 'Erro em ldap_funcitons->replace_user_attributes: ' . ldap_error($this->ldap);
895                }
896                else
897                        $return['status'] = true;
898               
899                return $return;
900        }
901       
902        function add_user_attributes($dn, $ldap_add)
903        {
904                if (!@ldap_mod_add ( $this->ldap, $dn, $ldap_add ))
905                {
906                        $return['status'] = false;
907                        $return['msg'] = 'Erro em ldap_funcitons->add_user_attributes: ' . ldap_error($this->ldap);
908                }
909                else
910                        $return['status'] = true;
911               
912                return $return;
913        }
914       
915        function remove_user_attributes($dn, $ldap_remove)
916        {
917                if (!@ldap_mod_del ( $this->ldap, $dn, $ldap_remove ))
918                {
919                        $return['status'] = false;
920                        $return['msg'] = 'Erro em ldap_funcitons->remove_user_attributes: ' . ldap_error($this->ldap);
921                }
922                else
923                        $return['status'] = true;
924               
925                return $return;
926        }
927       
928        function set_user_password($uid, $password)
929        {
930                $justthese = array("userPassword");
931                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
932                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
933            $entry = ldap_get_entries($this->ldap, $search);
934                $dn = $entry[0]['dn'];
935                $userPassword = $entry[0]['userpassword'][0];
936                $ldap_mod_replace['userPassword'] = $password;
937                $this->replace_user_attributes($dn, $ldap_mod_replace);
938                return $userPassword;
939        }
940       
941        function delete_user($user_info)
942        {
943                $return['status'] = true;
944               
945                // GROUPS
946                $attrs = array();
947                $attrs['memberUid'] = $user_info['uid'];
948                if (count($user_info['groups_info']))
949                {
950                        foreach ($user_info['groups_info'] as $group_info)
951                        {
952                                $gidnumber = $group_info['gidnumber'];
953                                $justthese = array("dn");
954                                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
955                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
956                        $entry = ldap_get_entries($this->ldap, $search);
957                                $dn = $entry[0]['dn'];
958                       
959                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
960                                {
961                                        $return['status'] = false;
962                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, grupos: ' . ldap_error($this->ldap);
963                                }
964                        }
965                }
966                       
967                // MAILLISTS
968                $attrs = array();
969                $attrs['mailForwardingAddress'] = $user_info['mail'];
970                if (count($user_info['maillists_info']))
971                {
972                        foreach ($user_info['maillists_info'] as $maillists_info)
973                        {
974                                $uidnumber = $maillists_info['uidnumber'];
975                                $justthese = array("dn");
976                                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
977                                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
978                        $entry = ldap_get_entries($this->ldap, $search);
979                                $dn = $entry[0]['dn'];
980                       
981                                if (!@ldap_mod_del($this->ldap, $dn, $attrs))
982                                {
983                                        $return['status'] = false;
984                                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
985                                }
986                        }
987                }
988                       
989                // UID
990                $dn = "uid=" . $user_info['uid'] . "," . $user_info['context'];
991                if (!@ldap_delete($this->ldap, $dn))
992                {
993                        $return['status'] = false;
994                        $return['msg'] .= 'Erro em ldap_funcitons->delete_user, listas de email: ' . ldap_error($this->ldap);
995                }
996               
997                return $return;
998        }
999       
1000        function delete_maillist($uidnumber)
1001        {
1002                $return['status'] = true;
1003               
1004                $justthese = array("dn");
1005                $filter="(&(phpgwAccountType=l)(uidnumber=".$uidnumber."))";
1006                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1007                $entry = ldap_get_entries($this->ldap, $search);
1008                $dn = $entry[0]['dn'];
1009               
1010                if (!@ldap_delete($this->ldap, $dn))
1011                {
1012                        $return['status'] = false;
1013                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
1014                }
1015               
1016                return $return;
1017        }
1018
1019        function delete_group($gidnumber)
1020        {
1021                $return['status'] = true;
1022               
1023                $justthese = array("dn");
1024                $filter="(&(phpgwAccountType=g)(gidnumber=".$gidnumber."))";
1025                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1026                $entry = ldap_get_entries($this->ldap, $search);
1027                $dn = $entry[0]['dn'];
1028               
1029                if (!@ldap_delete($this->ldap, $dn))
1030                {
1031                        $return['status'] = false;
1032                        $return['msg'] .= 'Erro em ldap_funcitons->delete_maillist, listas de email: ' . ldap_error($this->ldap);
1033                }
1034               
1035                return $return;
1036        }
1037
1038       
1039        function rename_uid($uid, $new_uid)
1040        {
1041                $return['status'] = true;
1042               
1043                $justthese = array("dn");
1044                $filter="(&(phpgwAccountType=u)(uid=".$uid."))";
1045                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1046            $entry = ldap_get_entries($this->ldap, $search);
1047                $dn = $entry[0]['dn'];
1048               
1049                $explode_dn = ldap_explode_dn($dn, 0);
1050                $rdn = "uid=" . $new_uid;
1051
1052                $parent = array();
1053                for ($j=1; $j<(count($explode_dn)-1); $j++)
1054                        $parent[] = $explode_dn[$j];
1055                $parent = implode(",", $parent);
1056               
1057                $return['new_dn'] = $rdn . ',' . $parent;
1058                       
1059                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
1060                {
1061                        $return['status'] = false;
1062                        $return['msg'] .= 'Erro em ldap_funcitons->rename_uid: ' . ldap_error($this->ldap);
1063                }
1064               
1065                //Grupos
1066                $justthese = array("dn");
1067                $filter="(&(phpgwAccountType=g)(memberuid=".$uid."))";
1068                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1069            $entry = ldap_get_entries($this->ldap, $search);
1070        $array_mod_add['memberUid'] = $new_uid;
1071        $array_mod_del['memberUid'] = $uid;
1072
1073            for ($i=0; $i<=$entry['count']; $i++)
1074            {
1075                $dn = $entry[$i]['dn'];
1076                @ldap_mod_add ( $this->ldap, $dn,  $array_mod_add);
1077                @ldap_mod_del ( $this->ldap, $dn,  $array_mod_del);
1078            }
1079                return $return;
1080        }
1081
1082        function rename_cn($cn, $new_cn)
1083        {
1084                $return['status'] = true;
1085               
1086                $justthese = array("dn");
1087                $filter="(&(phpgwAccountType=g)(uid=".$cn."))";
1088                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1089            $entry = ldap_get_entries($this->ldap, $search);
1090                $dn = $entry[0]['dn'];
1091               
1092                $explode_dn = ldap_explode_dn($dn, 0);
1093                $rdn = "cn=" . $new_cn;
1094
1095                $parent = array();
1096                for ($j=1; $j<(count($explode_dn)-1); $j++)
1097                        $parent[] = $explode_dn[$j];
1098                $parent = implode(",", $parent);
1099               
1100                $return['new_dn'] = $rdn . ',' . $parent;
1101                       
1102                if (!@ldap_rename($this->ldap, $dn, $rdn, $parent, false))
1103                {
1104                        $return['status'] = false;
1105                }
1106               
1107                return $return;
1108        }
1109
1110        function rename_departmentnumber($old_dp, $new_dp)
1111        {
1112               
1113                $return['status'] = true;
1114               
1115               
1116                $justthese = array("dn");
1117                $filter="(&(phpgwAccountType=u)(departmentnumber=".$old_dp."))";
1118                $search = ldap_search($this->ldap, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
1119            $entry = ldap_get_entries($this->ldap, $search);
1120               
1121            for ($i=0; $i<=$entry['count']; $i++)
1122            {
1123                $dn = strtolower($entry[$i]['dn']);
1124                $ldap_mod_replace = array();
1125                $ldap_mod_replace['departmentnumber'] = $new_dp;
1126                @ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace);
1127                        /*if (!@ldap_mod_replace ( $this->ldap, $dn,  $ldap_mod_replace))
1128                        {
1129                                $return['status'] = false;
1130                                $return['msg'] .= 'Erro em ldap_funcitons->rename_departmentnumber: ' . ldap_error($this->ldap);
1131                        }*/
1132            }
1133                return $return;
1134        }
1135}
1136?>
Note: See TracBrowser for help on using the repository browser.