35 public function __construct($server,$port,$location,$username=
"",$password=
"");
120 $ds = ldap_connect($this->server, $this->port);
124 if (!ldap_set_option(
$ds, LDAP_OPT_PROTOCOL_VERSION, 3)) {
136 if( !isset($this->ds) ){
156 $sstr =
"(uid=".$user.
")";
157 if( isset($this->ds) ){
158 $res = ldap_search($this->ds , $this->root_dn , $sstr);
159 if( ldap_count_entries($this->ds , $res) != 1){
162 $res = ldap_get_entries( $this->ds , $res );
164 $data[
"dn"] = $res[0][
"dn"] ;
165 $data[
"fullName"] = $res[0][
"cn"][0];
166 $data[
"givenName"] = $res[0][
"givenname"][0];
167 $data[
"surName"] = $res[0][
"sn"][0];
169 $data[
"groupID"] = $res[0][
"gidnumber"][0];
170 $data[
"userID"] = $res[0][
"uidnumber"][0];
190 $sstr =
"(uidNumber=".$ID.
")";
191 if( isset($this->ds) ){
192 $res = ldap_search($this->ds , $this->root_dn , $sstr);
193 if( ldap_count_entries($this->ds , $res) != 1){
196 $res = ldap_get_entries( $this->ds , $res );
198 $data[
"dn"] = $res[0][
"dn"] ;
199 $data[
"fullName"] = $res[0][
"cn"][0];
200 $data[
"givenName"] = $res[0][
"givenname"][0];
201 $data[
"surName"] = $res[0][
"sn"][0];
202 $data[
"userName"] = $res[0][
"uid"][0];
203 $data[
"groupID"] = $res[0][
"gidnumber"][0];
204 $data[
"userID"] = $res[0][
"uidnumber"][0];
223 $sstr =
"(uid=".$user.
")";
224 if( isset($this->ds) ){
225 $res = ldap_search($this->ds , $this->root_dn , $sstr);
226 if( ldap_count_entries($this->ds , $res) != 1){
227 throw new Exception(
"username not found");
229 $res = ldap_get_entries( $this->ds , $res );
230 $dn = $res[0][
"dn"] ;
232 for (
$i=0 ;
$i<
sizeof($res[0][
"gidnumber"])-1 ; ++
$i){
235 $this->userFullName = $res[0][
"cn"][0];
236 $this->userName =
$user;
237 $this->userGroupID = $res[0][
"gidnumber"][0];
238 $this->userID = $res[0][
"uidnumber"][0];
239 $this->userGivenName = $res[0][
"givenname"][0];
240 $this->userSurName = $res[0][
"sn"][0];
252 if ( !isset($this->ds) ){
263 }
catch(Exception $e){
264 $this->reason = $e->getMessage();
268 if (!@ldap_bind($this->ds, $this->userDN, $pass)) {
269 $this->success =
false;
270 $this->reason= $this->reason.
"invalid password";
273 $this->success =
true;
289 if(
sizeof($res) > 0 ){
290 $data = array(
"fullName" => $res[
"fullName"],
291 "userName" => $res[
"userName"],
292 "givenName" => $res[
"givenName"],
293 "surName" => $res[
"surName"],
294 "groupID" => $res[
"groupID"] ,
295 "userID" => $res[
"userID"]
299 return array(
"fullName" =>
"",
"userName" =>
"",
"givenName" =>
"",
"surName" =>
"",
"groupID" =>
"",
"userID" =>
"");
313 $data = array(
"fullName" => $res[
"fullName"],
314 "givenName" => $res[
"givenName"],
315 "surName" => $res[
"surName"],
316 "userName" => $res[
"userName"],
317 "groupID" => $res[
"groupID"] ,
318 "userID" => $res[
"userID"]
327 if(
sizeof($whitelist) >0 ){
328 $sstr =
"(&(objectClass=posixGroup)(|";
329 foreach($whitelist as $white){
330 $sstr = $sstr.
"(cn=$white)";
332 $sstr = $sstr.
"(cn=p_*)";
335 $sstr =
"(objectClass=posixGroup)";
338 if( isset($this->ds) ){
339 $res = ldap_search($this->ds , $this->root_dn , $sstr);
340 $res = ldap_get_entries( $this->ds , $res );
344 for(
$i=0 ;
$i<
sizeof($res)-1 ; ++
$i){
345 if( (isset($res[
$i][
"gidnumber"][0])) AND (isset($res[$i][
"cn"][0])) ){
346 $groups[] = array($res[$i][
"cn"][0] , $res[$i][
"gidnumber"][0]);
362 $sstr =
"( &(objectClass=posixAccount)( |";
364 $sstr = $sstr.
"(gidNumber=$g)";
371 if( isset($this->ds) ){
372 $res = ldap_search($this->ds , $this->root_dn , $sstr);
373 $res = ldap_get_entries( $this->ds , $res );
376 if(
sizeof($res) > 0){
377 for(
$i=0 ;
$i<
sizeof($res)-1 ; ++
$i){
380 $info[
"fullName"] =
$user[
"cn"][0];
381 $info[
"givenName"] =
$user[
"givenname"][0];
382 $info[
"surName"] =
$user[
"sn"][0];
383 $info[
"userName"] =
$user[
"uid"][0];
384 $info[
"groupID"] =
$user[
"gidnumber"][0];
385 $info[
"userID"] =
$user[
"uidnumber"][0];
386 $users[ $info[
"userID"] ] = $info;
392 $diff = array_diff_key($users2,
$users);
393 foreach($diff as $u){
394 $users[$u[
"userID"]] = $u;
414 $sstr =
"( &(objectClass=posixGroup)(cn=p_*)( |";
416 $sstr = $sstr.
"(gidNumber=$g)";
420 if( isset($this->ds) ){
421 $res = ldap_search($this->ds , $this->root_dn , $sstr);
422 $res = ldap_get_entries( $this->ds , $res );
426 if(
sizeof($res) > 0){
429 if( (is_array($r)) ){
430 foreach( array_keys($r[
"memberuid"]) as $index){
431 if( $index !==
"count" ){
432 $users[] = $r[
"memberuid"][$index];
441 $sstr =
"( &(objectClass=posixAccount)( |";
443 $sstr = $sstr.
"(uid=$u)";
446 $res = ldap_search($this->ds , $this->root_dn , $sstr);
447 $res = ldap_get_entries( $this->ds , $res );
452 $info[
"fullName"] = $r[
"cn"][0];
453 $info[
"givenName"] = $r[
"givenname"][0];
454 $info[
"surName"] = $r[
"sn"][0];
455 $info[
"userName"] = $r[
"uid"][0];
456 $info[
"groupID"] = $r[
"gidnumber"][0];
457 $info[
"userID"] = $r[
"uidnumber"][0];
458 $users2[ $info[
"userID"] ] = $info;
470 $mapping[ $group[1] ] = $group[0];
483 $sstr =
"( &(cn=p_*)(objectClass=posixGroup)(memberUid=$user) )";
487 if( isset($this->ds) ){
488 $res = ldap_search($this->ds , $this->root_dn , $sstr);
489 $res = ldap_get_entries( $this->ds , $res );
492 if(
sizeof($res) > 0){
495 $groups[] = array( $r[
"cn"][0] , $r[
"gidnumber"][0] );
517 public function __construct($server,$port,$database,$username=
"",$password=
""){
519 $this->dbh =
new PDO(
"mysql:dbname=".$database.
";host=".$server.
";port=".$port, $username, $password,
520 array(PDO::MYSQL_ATTR_INIT_COMMAND =>
"SET NAMES 'utf8'"));
521 }
catch (PDOException $e) {
522 die(
'Connection to authentification server failed: ' . $e->getMessage());
549 throw new Exception(
"connect() not implemented yet.");
560 if ( !isset($this->dbh) ){
565 $info[
"fullName"] =
"";
566 $info[
"givenName"] =
"";
567 $info[
"surName"] =
"";
568 $info[
"userName"] = $username;
569 $info[
"groupID"] =
"";
570 $info[
"userID"] =
"";
571 $info[
"password"] =
"";
573 $sqh = $this->dbh->prepare(
"SELECT * FROM `users` WHERE `userName` = :name");
574 $r =
$sqh->execute( array(
":name"=>$username) );
576 $res =
$sqh->fetch(PDO::FETCH_ASSOC);
577 if( $res !==
false ){
578 $info[
"fullName"] = $res[
"fullName"];
579 $info[
"givenName"] = $res[
"givenName"];
580 $info[
"surName"] = $res[
"surName"];
581 $info[
"groupID"] = $res[
"gid"];
582 $info[
"userID"] = $res[
"uid"];
583 $info[
"password"] = $res[
"password"];
598 if ( !isset($this->dbh) ){
603 $info[
"fullName"] =
"";
604 $info[
"givenName"] =
"";
605 $info[
"surName"] =
"";
606 $info[
"userName"] =
"";
607 $info[
"groupID"] =
"";
608 $info[
"userID"] = $ID;
609 $info[
"password"] =
"";
611 $sqh = $this->dbh->prepare(
"SELECT * FROM `users` WHERE `uid` = :ID");
612 $r =
$sqh->execute( array(
":ID"=>$ID) );
614 $res =
$sqh->fetch(PDO::FETCH_ASSOC);
615 if( $res !==
false ){
616 $info[
"userName"] = $res[
"userName"];
617 $info[
"fullName"] = $res[
"fullName"];
618 $info[
"givenName"] = $res[
"givenName"];
619 $info[
"surName"] = $res[
"surName"];
620 $info[
"groupID"] = $res[
"gid"];
621 $info[
"userID"] = $res[
"uid"];
622 $info[
"password"] = $res[
"password"];
629 if ( !isset($this->dbh) ){
634 if( $userInfo[
"password"] ===
"" ){
635 $this->reason =
"Benutzername existiert nicht.";
636 $this->success ==
false;
639 $passwd = $userInfo[
"password"];
640 $hashed_passwd = crypt($pass,$passwd);
642 if( $passwd === $hashed_passwd ){
643 $this->userFullName = $userInfo[
"fullName"];
644 $this->userGivenName = $userInfo[
"givenName"];
645 $this->userSurName = $userInfo[
"surName"];
646 $this->userName =
$user;
647 $this->userGroupID = $userInfo[
"groupID"];
649 $this->userID = $userInfo[
"userID"];
651 $this->success =
true;
654 $this->success =
false;
655 $this->reason =
"Das Password ist falsch";
669 $data = array(
"fullName" => $res[
"fullName"],
670 "userName" => $res[
"userName"],
671 "givenName" => $res[
"givenName"],
672 "surName" => $res[
"surName"],
673 "groupID" => $res[
"groupID"] ,
674 "userID" => $res[
"userID"]
689 $data = array(
"fullName" => $res[
"fullName"],
690 "userName" => $res[
"userName"],
691 "givenName" => $res[
"givenName"],
692 "surName" => $res[
"surName"],
693 "groupID" => $res[
"groupID"] ,
694 "userID" => $res[
"userID"]
702 if ( !isset($this->dbh) ){
707 $sqh = $this->dbh->prepare(
"SELECT * FROM `groups`");
708 $sqh->execute( array() );
709 $res =
$sqh->fetchAll(PDO::FETCH_ASSOC);
713 if( (in_array($r[
"name"],$whitelist)) OR (
sizeof($whitelist) == 0) ){
714 $groups[] = array( $r[
"name"] , $r[
"gid"] );
734 $sstr = $sstr.
" (`gid`=:$c) OR";
738 $sstr = trim($sstr,
"OR");
741 if ( !isset($this->dbh) ){
746 $sqh = $this->dbh->prepare(
"SELECT * FROM `users` WHERE $sstr");
747 $sqh->execute( $sdata );
748 $res =
$sqh->fetchAll(PDO::FETCH_ASSOC);
753 $info[
"fullName"] = $r[
"fullName"];
754 $info[
"givenName"] = $r[
"givenName"];
755 $info[
"surName"] = $r[
"surName"];
756 $info[
"groupID"] = $r[
"gid"];
757 $info[
"userID"] = $r[
"uid"];
758 $info[
"userName"] = $r[
"userName"];
759 $users[ $info[
"userID"] ] = $info;
769 $mapping[ $group[1] ] = $group[0];
780 CREATE TABLE IF NOT EXISTS `users` (
781 `uid` int(11) NOT NULL,
782 `gid` int(11) NOT NULL,
783 `userName` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
784 `fullName` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
785 `givenName` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
786 `surName` varchar(256) COLLATE utf8_unicode_ci NOT NULL,
787 `password` varchar(128) COLLATE utf8_unicode_ci NOT NULL,
789 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
791 $this->dbh->exec($sql);