"Fossies" - the Fresh Open Source Software Archive 
Member "adLDAP-4.0.4/src/classes/adLDAPUtils.php" (13 Apr 2013, 8100 Bytes) of package /linux/www/old/adLDAP-4.0.4.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) PHP source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "adLDAPUtils.php" see the
Fossies "Dox" file reference documentation.
1 <?php
2 /**
3 * PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY
4 * Version 4.0.4
5 *
6 * PHP Version 5 with SSL and LDAP support
7 *
8 * Written by Scott Barnett, Richard Hyland
9 * email: scott@wiggumworld.com, adldap@richardhyland.com
10 * http://adldap.sourceforge.net/
11 *
12 * Copyright (c) 2006-2012 Scott Barnett, Richard Hyland
13 *
14 * We'd appreciate any improvements or additions to be submitted back
15 * to benefit the entire community :)
16 *
17 * This library is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Lesser General Public
19 * License as published by the Free Software Foundation; either
20 * version 2.1 of the License.
21 *
22 * This library is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 * Lesser General Public License for more details.
26 *
27 * @category ToolsAndUtilities
28 * @package adLDAP
29 * @subpackage Utils
30 * @author Scott Barnett, Richard Hyland
31 * @copyright (c) 2006-2012 Scott Barnett, Richard Hyland
32 * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html LGPLv2.1
33 * @revision $Revision: 97 $
34 * @version 4.0.4
35 * @link http://adldap.sourceforge.net/
36 */
37 require_once(dirname(__FILE__) . '/../adLDAP.php');
38
39 /**
40 * UTILITY FUNCTIONS
41 */
42 class adLDAPUtils {
43 const ADLDAP_VERSION = '4.0.4';
44
45 /**
46 * The current adLDAP connection via dependency injection
47 *
48 * @var adLDAP
49 */
50 protected $adldap;
51
52 public function __construct(adLDAP $adldap) {
53 $this->adldap = $adldap;
54 }
55
56
57 /**
58 * Take an LDAP query and return the nice names, without all the LDAP prefixes (eg. CN, DN)
59 *
60 * @param array $groups
61 * @return array
62 */
63 public function niceNames($groups)
64 {
65
66 $groupArray = array();
67 for ($i=0; $i<$groups["count"]; $i++){ // For each group
68 $line = $groups[$i];
69
70 if (strlen($line)>0) {
71 // More presumptions, they're all prefixed with CN=
72 // so we ditch the first three characters and the group
73 // name goes up to the first comma
74 $bits=explode(",", $line);
75 $groupArray[] = substr($bits[0], 3, (strlen($bits[0])-3));
76 }
77 }
78 return $groupArray;
79 }
80
81 /**
82 * Escape characters for use in an ldap_create function
83 *
84 * @param string $str
85 * @return string
86 */
87 public function escapeCharacters($str) {
88 $str = str_replace(",", "\,", $str);
89 return $str;
90 }
91
92 /**
93 * Escape strings for the use in LDAP filters
94 *
95 * DEVELOPERS SHOULD BE DOING PROPER FILTERING IF THEY'RE ACCEPTING USER INPUT
96 * Ported from Perl's Net::LDAP::Util escape_filter_value
97 *
98 * @param string $str The string the parse
99 * @author Port by Andreas Gohr <andi@splitbrain.org>
100 * @return string
101 */
102 public function ldapSlashes($str){
103 return preg_replace('/([\x00-\x1F\*\(\)\\\\])/e',
104 '"\\\\\".join("",unpack("H2","$1"))',
105 $str);
106 }
107
108 /**
109 * Converts a string GUID to a hexdecimal value so it can be queried
110 *
111 * @param string $strGUID A string representation of a GUID
112 * @return string
113 */
114 public function strGuidToHex($strGUID)
115 {
116 $strGUID = str_replace('-', '', $strGUID);
117
118 $octet_str = '\\' . substr($strGUID, 6, 2);
119 $octet_str .= '\\' . substr($strGUID, 4, 2);
120 $octet_str .= '\\' . substr($strGUID, 2, 2);
121 $octet_str .= '\\' . substr($strGUID, 0, 2);
122 $octet_str .= '\\' . substr($strGUID, 10, 2);
123 $octet_str .= '\\' . substr($strGUID, 8, 2);
124 $octet_str .= '\\' . substr($strGUID, 14, 2);
125 $octet_str .= '\\' . substr($strGUID, 12, 2);
126 //$octet_str .= '\\' . substr($strGUID, 16, strlen($strGUID));
127 for ($i=16; $i<=(strlen($strGUID)-2); $i++) {
128 if (($i % 2) == 0) {
129 $octet_str .= '\\' . substr($strGUID, $i, 2);
130 }
131 }
132
133 return $octet_str;
134 }
135
136 /**
137 * Convert a binary SID to a text SID
138 *
139 * @param string $binsid A Binary SID
140 * @return string
141 */
142 public function getTextSID($binsid) {
143 $hex_sid = bin2hex($binsid);
144 $rev = hexdec(substr($hex_sid, 0, 2));
145 $subcount = hexdec(substr($hex_sid, 2, 2));
146 $auth = hexdec(substr($hex_sid, 4, 12));
147 $result = "$rev-$auth";
148
149 for ($x=0;$x < $subcount; $x++) {
150 $subauth[$x] =
151 hexdec($this->littleEndian(substr($hex_sid, 16 + ($x * 8), 8)));
152 $result .= "-" . $subauth[$x];
153 }
154
155 // Cheat by tacking on the S-
156 return 'S-' . $result;
157 }
158
159 /**
160 * Converts a little-endian hex number to one that hexdec() can convert
161 *
162 * @param string $hex A hex code
163 * @return string
164 */
165 public function littleEndian($hex)
166 {
167 $result = '';
168 for ($x = strlen($hex) - 2; $x >= 0; $x = $x - 2) {
169 $result .= substr($hex, $x, 2);
170 }
171 return $result;
172 }
173
174 /**
175 * Converts a binary attribute to a string
176 *
177 * @param string $bin A binary LDAP attribute
178 * @return string
179 */
180 public function binaryToText($bin)
181 {
182 $hex_guid = bin2hex($bin);
183 $hex_guid_to_guid_str = '';
184 for($k = 1; $k <= 4; ++$k) {
185 $hex_guid_to_guid_str .= substr($hex_guid, 8 - 2 * $k, 2);
186 }
187 $hex_guid_to_guid_str .= '-';
188 for($k = 1; $k <= 2; ++$k) {
189 $hex_guid_to_guid_str .= substr($hex_guid, 12 - 2 * $k, 2);
190 }
191 $hex_guid_to_guid_str .= '-';
192 for($k = 1; $k <= 2; ++$k) {
193 $hex_guid_to_guid_str .= substr($hex_guid, 16 - 2 * $k, 2);
194 }
195 $hex_guid_to_guid_str .= '-' . substr($hex_guid, 16, 4);
196 $hex_guid_to_guid_str .= '-' . substr($hex_guid, 20);
197 return strtoupper($hex_guid_to_guid_str);
198 }
199
200 /**
201 * Converts a binary GUID to a string GUID
202 *
203 * @param string $binaryGuid The binary GUID attribute to convert
204 * @return string
205 */
206 public function decodeGuid($binaryGuid)
207 {
208 if ($binaryGuid === null){ return "Missing compulsory field [binaryGuid]"; }
209
210 $strGUID = $this->binaryToText($binaryGuid);
211 return $strGUID;
212 }
213
214 /**
215 * Convert a boolean value to a string
216 * You should never need to call this yourself
217 *
218 * @param bool $bool Boolean value
219 * @return string
220 */
221 public function boolToStr($bool)
222 {
223 return ($bool) ? 'TRUE' : 'FALSE';
224 }
225
226 /**
227 * Convert 8bit characters e.g. accented characters to UTF8 encoded characters
228 */
229 public function encode8Bit(&$item, $key) {
230 $encode = false;
231 if (is_string($item)) {
232 for ($i=0; $i<strlen($item); $i++) {
233 if (ord($item[$i]) >> 7) {
234 $encode = true;
235 }
236 }
237 }
238 if ($encode === true && $key != 'password') {
239 $item = utf8_encode($item);
240 }
241 }
242
243 /**
244 * Get the current class version number
245 *
246 * @return string
247 */
248 public function getVersion() {
249 return self::ADLDAP_VERSION;
250 }
251
252 /**
253 * Round a Windows timestamp down to seconds and remove the seconds between 1601-01-01 and 1970-01-01
254 *
255 * @param long $windowsTime
256 * @return long $unixTime
257 */
258 public static function convertWindowsTimeToUnixTime($windowsTime) {
259 $unixTime = round($windowsTime / 10000000) - 11644477200;
260 return $unixTime;
261 }
262 }
263
264 ?>