"; if (count($groups != 0)){ foreach ($groups as $group){ #$entry = array("member"); if ( count($group['member']) > 1 ){ for($i=0; $i"; ldap_mod_replace($ds,$group['dn'],$entry); } if ( count($group['member']) == 1 && $group['member'] == $hostDN ){ $entry['member'] = $newhostDN; # print_r($entry); echo ""; ldap_mod_replace($ds,$group['dn'],$entry); } } } } } # Rechner neu anlegen function add_host($hostDN,$hostname,$hostdesc,$mac,$ip,$atts,$dhcp){ global $ds, $suffix, $auDN, $assocdom, $ldapError; $entryhost ['objectclass'][0] = "Host"; $entryhost ['objectclass'][1] = "dhcpHost"; $entryhost ['objectclass'][2] = "dhcpOptions"; $entryhost ['objectclass'][3] = "top"; $entryhost ["hostname"] = $hostname; $entryhost ["domainname"] = $assocdom; if ($hostdesc != ""){$entryhost ["description"] = $hostdesc;} if ($mac != ""){ $entryhost ["hwaddress"] = $mac; if ($dhcp != "none" && $dhcp != ""){ $entryhost ["dhcphlpcont"] = $dhcp; } } foreach (array_keys($atts) as $key){ if ($atts[$key] != ""){ $entryhost[$key] = $atts[$key]; } } print_r($entryhost); echo "
"; if ($result = ldap_add($ds, $hostDN, $entryhost)){ if($ip != ""){ $syntax = new Syntaxcheck; if( $syntax->check_ip_syntax($ip) ){ $newip_array = array($ip,$ip); $newip = implode('_',$newip_array); print_r($newip); echo "

"; if (new_ip_host($newip,$hostDN,$auDN)){ echo "IP erfolgreich eingetragen

"; if ($mac != "" && $dhcp != "none" && $dhcp != ""){ $entryfa ["dhcpoptfixed-address"] = "ip"; if (ldap_mod_add($ds,$hostDN,$entryfa)){ echo "DHCP Fixed-Address erfolgreich auf IP gesetzt

"; }else{ echo "Fehler beim Setzen der DHCP Fixed-Address

"; } } }else{ echo "Fehler beim eintragen der IP

"; } }else{ echo "Falsche IP Syntax! IP nicht eingetragen

"; } } echo "Rechner erfolgreich eingetragen"; if ($mac != "" && $dhcp != "none" && $dhcp != ""){ update_dhcpmtime(array()); } return 1; } else{ $mesg = "Fehler beim eintragen des neuen Rechners!"; return 0; } } # Rechner löschen function delete_host($hostDN){ global $ds, $suffix, $auDN, $ldapError; $hostdata = get_node_data($hostDN,array("hwaddress","ipaddress")); # IP Adresse freigeben if ($hostdata['ipaddress'] != ""){ delete_ip_host($hostDN,$auDN); } if (dive_into_tree_del($hostDN,"")){ # alle DN Objekte in denen Rechner stand ebenfalls löschen # Member in Groups $groups = get_groups_member($auDN,array("dn","cn"),$hostDN); # echo "Rechner aus den Gruppen entfernen:
"; print_r($groups); echo "
"; if (count($groups) != 0){ $entrydel ['member'] = $hostDN; foreach ($groups as $group){ echo "Entferne gelöschten Rechner aus Gruppe ".$group['cn']."
"; $resultG = ldap_mod_del($ds, $group['dn'], $entrydel); # Filename in Gruppen-PXEs $pxes = get_pxeconfigs($group['dn'],array("dn","cn")); if ( count($pxes) != 0 && $hostdata['hwaddress'] != ""){ foreach ($pxes as $pxe){ $delfilename ['filename'] = "01-".$hostdata['hwaddress']; $resultP = ldap_mod_del($ds,$pxe['dn'],$delfilename); echo "Entferne MAC des gelöschten Rechners aus Gruppen-PXE ".$pxe['cn']."
"; } } } } # DHCP, DNS, RBS Server ... noch todo # ... return 1; } else{ return 0; } } ############################################################################### # Funktionen zur Verwaltung von Rechnergruppen # # Gruppen DN ändern function modify_group_dn($groupDN, $newgroupDN){ global $ds, $suffix, $ldapError; if (move_subtree($groupDN,$newgroupDN)){ adjust_dn_entries($groupDN,$newgroupDN);} } # Gruppe neu anlegen function add_group($groupDN,$groupcn,$groupdesc,$addmember){ global $ds, $suffix, $auDN, $assocdom, $ldapError; $entrygroup ['objectclass'][0] = "groupOfComputers"; $entrygroup ['objectclass'][1] = "top"; $entrygroup ["cn"] = $groupcn; if ($groupdesc != ""){$entrygroup ["description"] = $groupdesc;} # Members anlegen (zuerst 'none' rausnehmen) $n = array_search('none',$addmember); if ($n === 0 ){array_splice($addmember, $n, 1);} if (count($addmember) != 0){ $i = 0; foreach ($addmember as $member){ $exp = explode('_',$member); $entrygroup['member'][$i] = $exp[0]; $i++; } } print_r($entrygroup); echo "
"; if ($result = ldap_add($ds, $groupDN, $entrygroup)){ return 1; } else{ return 0; } } # Gruppe löschen function delete_group($groupDN){ global $ds, $suffix, $auDN, $ldapError; if (dive_into_tree_del($groupDN,"")){ # alle DN Objekte in denen Gruppe stand ebenfalls löschen # DHCP ... noch todo return 1; } else{ return 0; } } function add_groupmember($groupDN,$member){ global $ds, $suffix, $auDN, $ldapError; } function delete_groupmember($groupDN,$member){ global $ds, $suffix, $auDN, $ldapError; } ############################################################################### # Funktionen zur Verwaltung von MachineConfigs # function check_timerange($mcday,$mcbeg,$mcend,$nodeDN,$excepttimerange){ global $ds, $suffix, $auDN, $ldapError; $brothers = get_machineconfigs($nodeDN,array("timerange")); # keine Überschneidungen pro Spez.Ebene zulassen #print_r($brothers); echo "

"; if (count($brothers) != 0){ $intersect = 0; foreach ($brothers as $item){ # Fall, dass Brother mehrere TimeRanges hat if (count($item['timerange']) > 1){ foreach ($item['timerange'] as $tr){ if($tr != $excepttimerange){ $exptime = explode('_',$tr); $bmcday = $exptime[0]; $bmcbeg = $exptime[1]; $bmcend = $exptime[2]; #echo "mcday:"; print_r($mcday); echo "
"; #echo "bmcday:"; print_r($bmcday); echo "
"; #echo "mcbeg:"; print_r($mcbeg); echo "
"; #echo "bmcbeg:"; print_r($bmcbeg); echo "
"; #echo "mcend:"; print_r($mcend); echo "
"; #echo "bmcend:"; print_r($bmcend); echo "
"; if ($mcday == $bmcday){ if ( $mcbeg > $bmcend || $mcend < $bmcbeg ){ # keine Überschneidung in der Uhrzeit }else{ # Uhrzeit Überschneidung $intersect = 1; $intersecttr = $bmcday."_".$bmcbeg."_".$bmcend; break; } } } } } # Fall, dass Brother nur eine TimeRange hat elseif (count($item['timerange']) == 1){ if($item['timerange'] != $excepttimerange){ $exptime = explode('_',$item['timerange']); $bmcday = $exptime[0]; $bmcbeg = $exptime[1]; $bmcend = $exptime[2]; #echo "mcday:"; print_r($mcday); echo "
"; #echo "bmcday:"; print_r($bmcday); echo "
"; #echo "mcbeg:"; print_r($mcbeg); echo "
"; #echo "bmcbeg:"; print_r($bmcbeg); echo "
"; #echo "mcend:"; print_r($mcend); echo "
"; #echo "bmcend:"; print_r($bmcend); echo "
"; if ($mcday == $bmcday){ if ( $mcbeg > $bmcend || $mcend < $bmcbeg ){ # keine Überschneidung in der Uhrzeit }else{ # Uhrzeit Überschneidung $intersect = 1; $intersecttr = $bmcday."_".$bmcbeg."_".$bmcend; break; } } } } } #echo "intersect: "; print_r($intersect); echo "
"; if ($intersect == 1){ echo "[".$mcday."_".$mcbeg."_".$mcend."] überschneidet sich mit der bereits existierende Time Range [".$intersecttr."] !"; return 0; }else{ return 1; } }else{ return 1; } } function add_mc($mcDN,$mccn,$mctimerange,$mcdesc,$mcattribs){ global $ds, $suffix, $auDN, $ldapError; $mcentry ['objectclass'][0] = "MachineConfig"; $mcentry ['objectclass'][1] = "top"; $mcentry ['cn'] = $mccn; if ($mctimerange != ""){$mcentry ['timerange'] = $mctimerange;} if ($mcdesc != ""){$mcentry ['description'] = $mcdesc;} if ($mcdesc == ""){$mcentry ['description'] = $mccn;} foreach (array_keys($mcattribs) as $key){ if ($mcattribs[$key] != ""){ $mcentry[$key] = $mcattribs[$key]; } } #print_r($mcentry); echo "
"; #print_r($mcDN); echo "
"; if (ldap_add($ds,$mcDN,$mcentry)){ return 1; } else{ return 0; } } # MachineConfig CN (DN) ändern function modify_mc_dn($mcDN, $newmcDN){ global $ds, $suffix, $ldapError; if (move_subtree($mcDN,$newmcDN)){ return 1; }else{ return 0; } } function change_mc_timerange($mcDN,$newmcDN,$mctimerange){ global $ds, $suffix, $auDN, $ldapError; # move tree if (move_subtree($mcDN,$newmcDN)){ # timerange ändern $entrymc ['timerange'] = $mctimerange; if (ldap_mod_replace($ds,$newmcDN,$entrymc)){ return 1; } else{ return 0; } } else{ return 0; } } ?>