Permit EAP-Message and State from the home server, so that
[freeradius.git] / dialup_admin / lib / ldap / functions.php3
1 <?php
2 function ldap_xlat($filter,$login,$config)
3 {
4         $string = $filter;
5         if ($filter != ''){
6                 $string = preg_replace('/%u/',$login,$string);
7                 $string = preg_replace('/%U/',$HTTP_SERVER_VARS["PHP_AUTH_USER"],$string);
8                 $string = preg_replace('/%ma/',$mappings[$http_user][accounting],$string);
9                 $string = preg_replace('/%mu/',$mappings[$http_user][userdb],$string);
10         }
11
12         return $string;
13 }
14
15 function da_ldap_bind($ds,$config)
16 {
17         if ($ds){
18                 if ($config[ldap_use_http_credentials] == 'yes'){
19                         global $HTTP_SERVER_VARS;
20                         $din = $HTTP_SERVER_VARS["PHP_AUTH_USER"];
21                         $pass = $HTTP_SERVER_VARS["PHP_AUTH_PW"];
22                         if ($config[ldap_map_to_directory_manager] != '' &&
23                         $din == $config[ldap_map_to_directory_manager] &&
24                         $config[ldap_directory_manager] != '')
25                                 $din = $config[ldap_directory_manager];
26                 }
27                 if ($config[ldap_use_http_credentials] != 'yes' ||
28                         ($din == '' && $pass == '')){
29                         $din = $config[ldap_binddn];
30                         $pass = $config[ldap_bindpw];
31                 }
32                 if (preg_match('/[\s,]/',$din)){        // It looks like a dn
33                         if ($config[ldap_debug] == 'true')
34                                 print "<b>DEBUG(LDAP): Bind Request: DN='$din',PASSWD='$pass'</b><br>\n";
35                         return @ldap_bind($ds,"$din","$pass");
36                 }
37                 else{                           // It's not a DN. Find a corresponding DN
38                         if ($config[ldap_debug] == 'true')
39                 print "<b>DEBUG(LDAP): Bind Request: DN='$config[ldap_binddn]',PASSWD='$config[ldap_bindpw]'</b><br>\n";
40                         $r=@ldap_bind($ds,"$config[ldap_binddn]",$config[ldap_bindpw]);
41                         if ($r){
42                                 $sr=@ldap_search($ds,"$config[ldap_base]", 'uid=' . $din);
43                                 $info = @ldap_get_entries($ds, $sr);
44                                 $din = $info[0]['dn'];
45                                 if ($din != ''){
46                                         if ($config[ldap_debug] == 'true')
47                                                 print "<b>DEBUG(LDAP): Bind Request: DN='$din',PASSWD='$pass'</b><br>\n";
48                                         return @ldap_bind($ds,"$din","$pass");
49                                 }
50                         }
51                 }
52         }
53 }
54
55 function connect2db($config)
56 {
57         $ds=@ldap_connect("$config[ldap_server]");  // must be a valid ldap server!
58         if ($ds)
59                 $r=@da_ldap_bind($ds,$config);
60         return $ds;
61 }
62
63 function get_user_info($ds,$user,$config,$decode_normal,$k)
64 {
65         if ($ds){
66                 $attrs = array('cn');
67                 if ($config[ldap_userdn] == ''){
68                         if ($config[ldap_filter] != '')
69                                 $filter = ldap_xlat($config[ldap_filter],$login,$config);
70                         else
71                                 $filter = 'uid=' . $login;
72                 }
73                 else
74                         $filter = ldap_xlat($config[ldap_userdn],$login,$config);
75                 if ($config[ldap_debug] == 'true'){
76                         if ($config[ldap_userdn] == '')
77         print "<b>DEBUG(LDAP): Search Query: BASE='$config[ldap_base]',FILTER='$filter'</b><br>\n";
78                         else
79         print "<b>DEBUG(LDAP): Search Query: BASE='$filter',FILTER='(objectclass=radiusprofile)'</b><br>\n";
80                 }
81                 if ($config[ldap_userdn] == '')
82                         $sr=@ldap_search($ds,"$config[ldap_base]", $filter,$attrs);
83                 else
84                         $sr=@ldap_read($ds,$filter, '(objectclass=radiusprofile)',$attrs);
85                 $info = @ldap_get_entries($ds, $sr);
86                 $cn = $info[0]["cn"][0];
87                 if ($cn != '' && $decode_normal == 1)
88                         $cn = decode_string($cn,$k);
89                 if ($cn == '')
90                         $cn = '-';
91                 return $cn;
92         }
93 }
94
95 function get_user_dn($ds,$user,$config)
96 {
97         if ($ds){
98                 $attrs = array('dn');
99                 if ($config[ldap_userdn] == ''){
100                         if ($config[ldap_filter] != '')
101                                 $filter = ldap_xlat($config[ldap_filter],$login,$config);
102                         else
103                                 $filter = 'uid=' . $login;
104                 }
105                 else
106                         $filter = ldap_xlat($config[ldap_userdn],$login,$config);
107                 if ($config[ldap_debug] == 'true'){
108                         if ($config[ldap_userdn] == '')
109         print "<b>DEBUG(LDAP): Search Query: BASE='$config[ldap_base]',FILTER='$filter'</b><br>\n";
110                         else
111         print "<b>DEBUG(LDAP): Search Query: BASE='$filter',FILTER='(objectclass=radiusprofile)'</b><br>\n";
112                 }
113                 if ($config[ldap_userdn] == '')
114                         $sr=@ldap_search($ds,"$config[ldap_base]", $filter,$attrs);
115                 else
116                         $sr=@ldap_read($ds,$filter, '(objectclass=radiusprofile)',$attrs);
117                 $entry = ldap_first_entry($ds, $sr);
118                 if ($entry)
119                         $dn = ldap_get_dn($ds,$entry);
120                 return $dn;
121         }
122 }
123
124 function check_user_passwd($dn,$passwd,$config)
125 {
126         $ds=@ldap_connect("$config[ldap_server]");
127         if ($ds && $dn != '' && $passwd != ''){
128                 $r = @ldap_bind($ds,$dn,$passwd);
129                 if ($r)
130                         return TRUE;
131                 else
132                         return FALSE;
133         }
134         else
135                 return FALSE;
136
137         return FALSE;
138 }      
139
140 function closedb($ds,$config)
141 {
142         if ($ds)
143                 @ldap_close($ds);
144 }
145 ?>