--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fhiiqm/ldap_mod_uid.php Fri Feb 05 14:03:40 2016 +0100
@@ -0,0 +1,234 @@
+#!/usr/bin/php
+<?php
+
+/**
+ * @author Bettina Schwarzer, Fritz-Haber-Institut
+ * @copyright 11/2014
+ *
+ * Uebertragen von Telefon-Nr. je Mitarbeiter nach LDAP
+ */
+
+ error_reporting(E_ALL ^ E_NOTICE);
+
+ function ldap_replace($sn,$gn,$mail,$tel)
+ {
+ /** ersetzt bestehende Eintraege von LDAP-Objektklassen
+ * erstellt weiteres Attribut zu Telefon
+ *
+ * Parameter
+ * $sn
+ * $gn - givenName
+ * $tel[] - telephonNumber
+ * */
+ global $ldapconn;
+ global $ldapbd;
+
+ if ($ldapbd)
+ {
+ $base="ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
+ $uid = ldap_search_uid($sn,$gn,$mail);
+ //Parameter abfragen
+ if ($uid)
+ {
+ $dn = "uid=".$uid .",ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
+/*
+ $su = array("ä","ö","ü","ß","Ä","Ö","Ü");
+ $rp = array("ae","oe","ue","ss","Ae","Oe","Ue");
+ $gn = str_replace($su,$rp,$gn);
+ $sn = str_replace($su,$rp,$sn);
+ $entry["sn"] = $sn;
+ $entry["givenName"] = $gn;
+// print_r ($entry); echo "ldapconn=$ldapconn: single<br />";
+ $result1 = ldap_mod_replace($ldapconn, $dn, $entry);
+ if (!$result1)
+ {
+ printf("LDAP-Fehlernummer replace: %s<br>\n", ldap_errno($ldapconn));
+ printf("LDAP-Fehler replace: %s<br>\n", ldap_error($ldapconn));
+ }
+*/
+ if (is_array($tel) && $tel)
+ {
+ $entry2["telephoneNumber"] = array();
+ $afields = array ("telephoneNumber");
+ $searcht = @ldap_search($ldapconn,$dn,"(telephoneNumber=*)",$afields);
+// echo "anzahl telefonNumber=" . ldap_count_entries($ldapconn,$searcht)."<br />";
+ if (ldap_count_entries($ldapconn,$searcht))
+ {
+ $result = ldap_mod_del($ldapconn, $dn, $entry2);
+ if (!$result && ldap_errno($ldapconn) <> 16)
+ {
+ printf("LDAP-Fehlernummer del: %s<br>\n", ldap_errno($ldapconn));
+ printf("LDAP-Fehler deltel: %s<br>\n", ldap_error($ldapconn));
+ }
+ }
+ foreach ($tel as $telf)
+ {
+ if ($telf > "!") $entry2["telephoneNumber"][] = $telf;
+ }
+ }
+ $result2 = ldap_mod_add($ldapconn, $dn, $entry2);
+ if (!$result2)
+ {
+ printf("LDAP-Fehlernummer add: %s<br>\n", ldap_errno($ldapconn));
+ printf("LDAP-Fehler addtel: %s<br>\n", ldap_error($ldapconn));
+ return 0;
+ }
+
+ return 1;
+ }
+ else
+ {
+ echo "Mitarbeiter '".$gn ." " . $sn ."' konnte nicht identifiziert werden.<br />";
+ return 1;
+ }
+ }
+ }
+ function ldap_search_uid($sn,$gn,$mail)
+ {
+ /** Sucht uid des gegebenen Nutzers
+ *
+ * Parameter
+ * $sn
+ * $gn - givenName
+ * */
+ global $ldapconn;
+ global $ldapbd;
+
+ if ($ldapbd)
+ {
+ $base="ou=people,dc=ppb,dc=rz-berlin,dc=mpg,dc=de";
+ $su = array("ä","ö","ü","ß","Ä","Ö","Ü","ó","é");
+ $rp = array("ae","oe","ue","ss","Ae","Oe","Ue","o","e");
+ $afields = array ("uid");
+// $afields = array ("uid","cn","mail","sn");
+ if (strpos($sn,' ')) // Nachname mit Leerzeichen
+ {
+ $snt = substr(strstr($sn,' '),1); // 2. Teil Nachname
+ $sntr = str_replace($su,$rp,$snt);
+ }
+ $gnr = str_replace($su,$rp,$gn);
+ $snr = str_replace($su,$rp,$sn);
+ $gnu = utf8_encode($gn);
+ $snu = utf8_encode($sn);
+ if (isset($mail) && $mail)
+ {
+ $filter = "(mail=$mail)";
+ $search=@ldap_search($ldapconn,$base,$filter,$afields);
+ }
+ if (!$mail || ($mail && !ldap_count_entries($ldapconn,$search)))
+ {
+ if ($gn && $sn)
+ $filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$gn*)(mail=$sn*))";
+ if ($sn && !$gn)
+ $filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$sn*))";
+ if (!$sn && $gn)
+ $filter = "(|(&(sn=$sn*)(givenName=$gn*))(mail=$gn*))";
+ $search=@ldap_search($ldapconn,$base,$filter,$afields);
+ }
+ if (!ldap_count_entries($ldapconn,$search))
+ {
+ if ($gn && $sn)
+ $filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$gnr*)(mail=$snr*))";
+ if ($sn && !$gn)
+ $filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$snr*))";
+ if (!$sn && $gn)
+ $filter = "(|(&(sn=$snr*)(givenName=$gnr*))(mail=$gnr*))";
+ $search=@ldap_search($ldapconn,$base,$filter,$afields);
+ }
+ if (!ldap_count_entries($ldapconn,$search))
+ {
+ if ($gn && $sn)
+ $filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$gnu*)(mail=$snu*))";
+ if ($sn && !$gn)
+ $filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$snu*))";
+ if (!$sn && $gn)
+ $filter = "(|(&(sn=$snu*)(givenName=$gnu*))(mail=$gnu*))";
+ $search=@ldap_search($ldapconn,$base,$filter,$afields);
+ }
+ if (isset($snt)&& $snt && !ldap_count_entries($ldapconn,$search))
+ {
+ if ($gn && $snt)
+ $filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$gn*)(mail=$snt*))";
+ if ($snt && !$gn)
+ $filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$snt*))";
+ if (!$sn && $gn)
+ $filter = "(|(&(sn=$snt*)(givenName=$gn*))(mail=$gn*))";
+ $search=@ldap_search($ldapconn,$base,$filter,$afields);
+ }
+ if (isset($snt) && $snt && !ldap_count_entries($ldapconn,$search))
+ {
+ if ($gn && $snt)
+ $filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$gnr*)(mail=$sntr*))";
+ if ($snt && !$gn)
+ $filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$sntr*))";
+ if (!$sn && $gn)
+ $filter = "(|(&(sn=$sntr*)(givenName=$gnr*))(mail=$gnr*))";
+ $search=@ldap_search($ldapconn,$base,$filter,$afields);
+ }
+ if (ldap_count_entries($ldapconn,$search))
+ {
+ $info = ldap_get_entries($ldapconn, $search);
+ for ($i=0; $i<$info["count"]; $i++)
+ $uid = $info[$i]["uid"][0];
+ }
+ return $uid;
+ }
+ else {return 0;}
+ }
+
+ include_once($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/dbconnect.inc.php");
+ if (!isset($dbc) || !$dbc) $dbc = new dbconnection();
+ $sql = "CALL fhiiqm.tel_list_comp('1','','','',@anz);";
+ $result = $dbc ->queryObjectArray($sql);
+ if ($result)
+ {
+ include($_SERVER['DOCUMENT_ROOT'] ."/fhiiqm/inc/conf.inc.php");
+ $erfolg = 1;
+ $ldaphost = "a-rth-urp-hil-ipdenu.rz-berlin.mpg.de"; // Ihr ldap server
+// $ldaphost = "ldaps://a-rth-urp-hil-ipdenu.rz-berlin.mpg.de"; // Ihr ssl-ldap server
+ $ldapport = 389; // StandardPortnummer ldap server
+// $ldapport = 636; // SSL-Portnummer ldap server
+
+ // Verbindung zu LDAP
+// if (!$ldapconn) $ldapconn = ldap_connect( $ldaphost, $ldapport );
+// ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); // nur zur Fehlersuche
+ if (!$ldapconn) $ldapconn = ldap_connect( $ldaphost)
+ or die( "Keine Verbindung zu $ldaphost möglich" );
+ ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
+ ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
+ if ($ldapconn && ldap_start_tls($ldapconn)) $ldapbd = @ldap_bind($ldapconn, $ldaprdn, $ldappwd);
+// if ($ldapconn) $ldapbd = @ldap_bind($ldapconn, $ldaprdn, $ldappwd);
+ if (!$ldapbd) echo ldap_errno($ldapconn).": ".ldap_error($ldapconn)."<br/>";
+
+ if ($ldapbd)
+ {
+ foreach ($result as $row)
+ {
+ $sn = $row->name;
+ $gn = $row->vorname;
+ $tels = $row->tel;
+ $mail = $row->email;
+ $atel = explode("; ",$tels);
+ foreach ($atel as $key=>$tel)
+ {
+ $pat = "/([^0-9\+\-\ \(\)\#\/])+/";
+ if (preg_match($pat,$tel)) unset($atel[$key]);
+ elseif (strlen($tel) > 4 && substr($tel,0,1) != 0 ) $atel[$key] = '0'.$tel;
+ elseif (substr($tel,0,1) == '#')
+ {
+ $atel[$key] = substr($tel,1);
+ }
+ }
+ $atelf = array_filter($atel); //filtert alle 'falschen' Werte und damit key/value-Eintraege aus $atel
+ if (isset($atel) && $atel && count($atelf) > 0)
+ {
+// print_r($atelf); echo "->$sn, $gn<br />";
+ $erfolg = $erfolg && ldap_replace($sn,$gn,$mail,$atelf);
+ }
+ }
+ if ($erfolg) $erfolg = "mit Erfolg"; else $erfolg = "nicht oder nur teilweise";
+ echo "LDAP wurde $erfolg aktualisiert<br />";
+ ldap_unbind($ldapconn);
+ }
+ }
+?>
\ No newline at end of file