summaryrefslogtreecommitdiffstats
path: root/ldap-site-mngmt/webinterface/lib/rbs_management_functions.php
diff options
context:
space:
mode:
Diffstat (limited to 'ldap-site-mngmt/webinterface/lib/rbs_management_functions.php')
-rw-r--r--ldap-site-mngmt/webinterface/lib/rbs_management_functions.php685
1 files changed, 0 insertions, 685 deletions
diff --git a/ldap-site-mngmt/webinterface/lib/rbs_management_functions.php b/ldap-site-mngmt/webinterface/lib/rbs_management_functions.php
deleted file mode 100644
index 2e7d5348..00000000
--- a/ldap-site-mngmt/webinterface/lib/rbs_management_functions.php
+++ /dev/null
@@ -1,685 +0,0 @@
-<?php
-
-/**
-* rbs_management_functions.php - Remote Boot Services Management Funktions-Bibliothek
-* Diese Bibliothek enthält alle Funktionen für die Verwaltung von RBS Diensten,
-* PXE Konfigurationsdateien ihren Menüeinträgen und ihren Genersichen Bootmenüeinträgen
-*
-* @param string ldapError
-* @param resource ds
-*
-* @author Tarik Gasmi
-* @copyright Tarik Gasmi
-*/
-
-
-# Konfiguration laden
-require_once("config.inc.php");
-
-$ldapError = null;
-
-
-#######################################################################
-# Funktionen zur Verwaltung von RBS Diensten
-#
-
-#
-# Neues RBS Dienst-Objekt anlegen
-#
-function add_rbs($rbsDN,$rbscn,$rbsoffer,$server,$atts){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $rbsentry ['objectclass'][0] = "RBService";
- $rbsentry ['objectclass'][1] = "top";
- $rbsentry ['cn'] = $rbscn;
- $rbsentry ['rbsofferdn'] = $rbsoffer;
- if (count($atts) != 0){
- foreach (array_keys($atts) as $key){
- if ($atts[$key] != ""){
- $rbsentry[$key] = $atts[$key];
- }
- }
- }
- if (count($server) != 0){
- if ($server['tftp'] != ""){$rbsentry ['tftpserverip'] = $server['tftp'];}
- if ($server['nfs'] != ""){$rbsentry ['nfsserverip'] = $server['nfs'];}
- if ($server['nbd'] != ""){$rbsentry ['nbdserverip'] = $server['nbd'];}
- }
- # print_r($rbsentry); echo "<br>";
- print_r($rbsDN); echo "<br>";
-
- # Standard Fallback Menü anlegen
- $pxecn = "PXE_Fallback-No-Config";
- $pxeDN = "cn=".$pxecn.",".$rbsDN;
- $filename = array("fallback-nopxe");
- $ldapuri = LDAP_HOST."/dn=cn=computers,".$auDN; # wirklich nötig??
- $mecn = "Fallback-Text";
- $meDN = "cn=".$mecn.",".$pxeDN;
- $meattribs = array("label" => "Keine PXE Boot-Konfiguration fuer die aktuelle Zeit definiert",
- "kernel" => "menu.c32",
- "submenulink" => "fallback-nopxe");
-
- if (ldap_add($ds,$rbsDN,$rbsentry)){
- if (add_pxe($pxeDN,$pxecn,$rbsDN,"",array(),$filename,$ldapuri)){
- if (add_me($meDN,$mecn,"","01",$meattribs,$pxeDN)){
- return 1;
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
-}
-
-#
-# "RBS-Angebote" im Verzeichnis suchen, die die AU ($auDN) nutzen darf,
-# Suche nach passenden RBS-Offer-DNs
-#
-function get_rbsoffers($auDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $attribs = array("dn","rbsofferdn");
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(objectclass=RBService)", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- else{
- $result = ldapArraySauber($result);
- #print_r($result);echo "<br><br>";
-
- $rbs_offers = array();
- foreach ($result as $rbs){
- #print_r(strpos($auDN, $rbs['rbsofferdn']));echo "<br>";
- if ( strpos($auDN, $rbs['rbsofferdn']) !== false )
- $rbs_offers [] = $rbs['dn'];
- }
- }
- #print_r($rbs_offers);echo "<br><br>";
- return $rbs_offers;
-}
-
-
-#
-# Beim Löschen von RBS-Objekten muss dafür gesorgt werden dass keine PXEs mehr auf
-# diese zeigen, Ref. Abhängigkeiten
-#
-function clean_up_del_rbs($rbsDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $attribs = array("dn");
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=PXEConfig)(rbservicedn=$rbsDN))", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- $delentry ['rbservicedn'] = $rbsDN;
- foreach ($result as $item){
- #print_r($item['dn']); echo "<br>";
- ldap_mod_del($ds, $item['dn'], $delentry);
- }
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=Host)(hlprbservice=$rbsDN))", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- $delentry2 ['hlprbservice'] = $rbsDN;
- foreach ($result as $item){
- #print_r($item['dn']); echo "<br>";
- ldap_mod_del($ds, $item['dn'], $delentry2);
- }
-
-}
-
-#
-# beim ändern des CN (DN) des RBS muss dieses in allen referenzierenden PXEConfig-Objekten
-# nachvollzogen werden, Ref. Abhängigkeiten
-#
-function adjust_rbs_dn($newrbsDN, $rbsDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=PXEConfig)(rbservicedn=$rbsDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $modentry ['rbservicedn'] = $newrbsDN;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry);
- }
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=Host)(hlprbservice=$rbsDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $modentry2 ['hlprbservice'] = $newrbsDN;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry2);
- }
-}
-
-function rbs_adjust_host($hostDN, $rbs){
-
- global $ds, $suffix, $ldapError;
-
- $modentry ['rbservicedn'] = $rbs;
-
- $pxearray = get_pxeconfigs($hostDN,array("dn"));
- if ( count($pxearray) != 0 ){
- foreach ( $pxearray as $item ){
- if ($result = ldap_mod_replace($ds,$item['dn'],$modentry)){
- return 1;
- }else{
- return 0;
- }
- }
- }
-}
-
-# Bei Änderung der TFTP Server IP eines RBS-Objekts entsprechend DHCP Option next-server
-# in den Hostobjekten anpassen und DHCP modify time in den AUs aktualisieren
-function adjust_dhcpnextserver($tftpIP, $rbsDN){
-
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(|(objectclass=Host)(objectclass=dhcpPool))(hlprbservice=$rbsDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $host_au = array();
- if ($tftpIP == ""){
- $deltftpentry ['dhcpoptnext-server'] = array();
- foreach ($result as $item){
- ldap_mod_del($ds, $item['dn'], array());
- $expdn = array_slice(ldap_explode_dn($item['dn'], 0), 3);
- $host_au [] = implode(",", $expdn);
- }
- }else{
- $modtftpentry ['dhcpoptnext-server'] = $tftpIP;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modtftpentry);
- $expdn = array_slice(ldap_explode_dn($item['dn'], 0), 3);
- $host_au [] = implode(",", $expdn);
- }
- }
- if ( count($host_au) != 0 ){
- $host_au = array_unique($host_au);
- update_dhcpmtime($host_au);
- }
-}
-
-# Bei Änderung des PXE Init Boot File eines RBS-Objekts entsprechend DHCP Option Filename
-# in den Hostobjekten anpassen
-function adjust_dhcpfilename($initbootfile, $rbsDN, $type){
-
- global $ds, $suffix, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=Host)(hlprbservice=$rbsDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $host_au = array();
- if ($type == "add"){
- $modentry ['dhcpoptfilename'] = $initbootfile;
- foreach ($result as $item){
- ldap_mod_add($ds, $item['dn'], $modentry);
- }
- }
- elseif ($type == "delete"){
- $modentry ['dhcpoptfilename'] = array();
- foreach ($result as $item){
- ldap_mod_del($ds, $item['dn'], $modentry);
- }
- }
- elseif ($type == "replace"){
- $modentry ['dhcpoptfilename'] = $initbootfile;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry);
- $expdn = array_slice(ldap_explode_dn($item['dn'], 0), 3);
- $host_au [] = implode(",", $expdn);
- }
- }
- if ( count($host_au) != 0 ){
- $host_au = array_unique($host_au);
- update_dhcpmtime($host_au);
- }
-}
-
-# IP Adresse eines Host ändern -> RBS TFTP Server IP anpassen (inkl. dhcpNext-server)
-function adjust_hostip_tftpserverip($oldip,$newip){
-
- global $ds, $suffix, $ldapError, $auDN;
-
- if(!($result = uniLdapSearch($ds, "cn=rbs,".$auDN, "(&(objectclass=RBService)(tftpserverip=$oldip))", array("dn","tftpserverip"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- if (count($result) != 0){
- foreach ($result as $item){
- if ($newip == ""){
- $delentry ['tftpserverip'] = array();
- ldap_mod_del($ds, $item['dn'], $delentry);
- adjust_dhcpnextserver("", $item['dn']);
- }else{
- $modentry ['tftpserverip'] = $newip;
- ldap_mod_replace($ds, $item['dn'], $modentry);
- adjust_dhcpnextserver($newip, $item['dn']);
- }
- }
- }
-}
-
-#
-# Sucht den Hostname zu einer IP im Rechnerteilbaum der AU
-# Verwaltung der am RBS beteiligten Server
-#
-function get_hostname_from_ip($ip){
-
- global $ds, $suffix, $ldapError, $auDN;
-
- $ipp = array($ip,$ip);
- $ipaddress = implode('_',$ipp);
- if(!($result = uniLdapSearch($ds, "cn=computers,".$auDN, "(&(objectclass=Host)(ipaddress=$ipaddress))", array("dn","hostname"), "", "list", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result);
- $host ['hostname'] = $result[0]['hostname'];
- $host ['dn'] = $result[0]['dn'];
- return $host;
-}
-
-
-###############################################################################
-# Funktionen zur Verwaltung von PXE Bootmenüs
-
-#
-# Überprüft, ob sich die angegebene Timerange auf einer der 4 Spezifikationsstufen mit anderen
-# Timeranges des Objkets überschneidet
-#
-function check_timerange_pxe($pxeday,$pxebeg,$pxeend,$nodeDN,$excepttimerange){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $brothers = get_pxeconfigs($nodeDN,array("timerange"));
- # keine Überschneidungen pro Spez.Ebene zulassen
- # print_r($brothers); echo "<br><br>";
- if (count($brothers) != 0){
-
- $intersect = 0;
- foreach ($brothers as $item){
-
- # Fall das Brother mehrere TimeRanges hat
- if (count($item['timerange']) > 1){
- foreach ($item['timerange'] as $tr){
-
- if($tr != $excepttimerange){
- $exptime = explode('_',$tr);
- $bpxeday = $exptime[0];
- $bpxebeg = $exptime[1];
- $bpxeend = $exptime[2];
- #echo "pxeday:"; print_r($pxeday); echo "<br>";
- #echo "bpxeday:"; print_r($bpxeday); echo "<br>";
- #echo "pxebeg:"; print_r($pxebeg); echo "<br>";
- #echo "bpxebeg:"; print_r($bpxebeg); echo "<br>";
- #echo "pxeend:"; print_r($pxeend); echo "<br>";
- #echo "bpxeend:"; print_r($bpxeend); echo "<br>";
-
- if ($pxeday == $bpxeday){
- if ( $pxebeg > $bpxeend || $pxeend < $bpxebeg ){
- # keine Überschneidung in der Uhrzeit
- }else{
- # Uhrzeit Überschneidung
- $intersect = 1;
- $intersecttr = $bpxeday."_".$bpxebeg."_".$bpxeend;
- break;
- }
- }
- }
-
- }
- }
- # Fall das Brother nur eine TimeRange hat
- elseif (count($item['timerange']) == 1){
-
- if($item['timerange'] != $excepttimerange){
- $exptime = explode('_',$item['timerange']);
- $bpxeday = $exptime[0];
- $bpxebeg = $exptime[1];
- $bpxeend = $exptime[2];
- #echo "pxeday:"; print_r($pxeday); echo "<br>";
- #echo "bpxeday:"; print_r($bpxeday); echo "<br>";
- #echo "pxebeg:"; print_r($pxebeg); echo "<br>";
- #echo "bpxebeg:"; print_r($bpxebeg); echo "<br>";
- #echo "pxeend:"; print_r($pxeend); echo "<br>";
- #echo "bmcend:"; print_r($bpxeend); echo "<br>";
-
- if ($pxeday == $bpxeday){
- if ( $pxebeg > $bpxeend || $pxeend < $bpxebeg ){
- # keine Überschneidung in der Uhrzeit
- }else{
- # Uhrzeit Überschneidung
- $intersect = 1;
- $intersecttr = $bpxeday."_".$bpxebeg."_".$bpxeend;
- break;
- }
- }
- }
- }
- }
- #echo "intersect: "; print_r($intersect); echo "<br>";
- if ($intersect == 1){
- echo "<b>[".$pxeday."_".$pxebeg."_".$pxeend."]</b> &uuml;berschneidet sich mit der
- bereits existierende <b>Time Range [".$intersecttr."]</b> !<br><br>";
- return 0;
- }else{
- return 1;
- }
- }else{
- return 1;
- }
-}
-
-
-#
-# Neues PXE Bootmenü anlegen
-#
-function add_pxe($pxeDN,$pxecn,$rbsDN,$pxetimerange,$pxeattribs,$filenames,$conffile){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $pxeentry ['objectclass'][0] = "PXEConfig";
- $pxeentry ['objectclass'][1] = "top";
- $pxeentry ['cn'] = $pxecn;
- $pxeentry ['rbservicedn'] = $rbsDN;
- #$pxeentry ['ldapuri'] = $ldapuri;
- if ($conffile != ""){$pxeentry ['fileuri'] = $conffile;}
- if (count($filenames) > 1 ){
- for ($i=0; $i<count($filenames); $i++){
- $pxeentry ['filename'][$i] = $filenames[$i];
- }
- }
- if (count($filenames) == 1){
- $pxeentry ['filename'] = $filenames[0];
- }
- if ($pxetimerange != ""){$pxeentry ['timerange'] = $pxetimerange;}
- if (count($pxeattribs) != 0){
- foreach (array_keys($pxeattribs) as $key){
- if ($pxeattribs[$key] != ""){
- $pxeentry[$key] = $pxeattribs[$key];
- }
- }
- }
- print_r($pxeentry); echo "<br>";
- print_r($pxeDN); echo "<br>";
- if (ldap_add($ds,$pxeDN,$pxeentry)){
- return 1;
- }
- else{
- return 0;
- }
-}
-
-
-#
-# PXE CN (DN) ändern, Teilbaum verschieben
-#
-function modify_pxe_dn($pxeDN, $newpxeDN){
-
- global $ds, $suffix, $ldapError;
-
- if (move_subtree($pxeDN,$newpxeDN)){
- return 1;
- }else{
- return 0;
- }
-}
-
-
-#
-# Timerange eines PXEConfig-Objekts ändern
-#
-function change_pxe_timerange($pxeDN,$newpxeDN,$pxetimerange){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- # move tree
- if (move_subtree($pxeDN,$newpxeDN)){
- # timerange ändern
- $entrypxe ['timerange'] = $pxetimerange;
- if (ldap_mod_replace($ds,$newpxeDN,$entrypxe)){
- return 1;
- }
- else{
- return 0;
- }
- }
- else{
- return 0;
- }
-}
-
-#
-# nach dem Löschen von PXEConfig Menueinträgen müssen Menüpositionen in der PXEConfig
-# angepasst werden (Lücken schließen)
-#
-function cleanup_menupositions($pxeDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $me = get_menuentries($pxeDN,array("dn","menuposition"));
- if (count($me) != 0){
- foreach ($me as $item){
- $pos = $item['menuposition'];
- $pos = preg_replace ( '/0([0-9])/', '$1', $pos);
- $menpos[$pos] = $item['dn'];
- ksort($menpos);
- }
- $p = 1;
- foreach ($menpos as $item){
- if (strlen($p) == 1){
- $p = "0".$p;
- }
- $entry ['menuposition'] = $p;
- ldap_mod_replace($ds,$item,$entry);
- $p++;
- }
- }
-}
-
-#
-# Hilfsfunktion zur Verarbeitung von Menüpositionen in PXEConfigs
-#
-function increment_menupositions($pxeDN,$menpos){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if (strlen($menpos) == 1){
- $menpos = "0".$menpos;
- }
- $meDN = get_dn_menuposition($pxeDN,$menpos);
- if ($meDN != ""){
- # zur Berechnung erst führende Nullen weg
- $menpos = preg_replace ( '/0([0-9])/', '$1', $menpos);
- $newpos = $menpos+1;
- increment_menupositions($pxeDN,$newpos);
- # zum Eintragen führenden Nullen wieder dazu
- if (strlen($newpos) == 1){
- $newpos = "0".$newpos;
- }
- $entry ['menuposition'] = $newpos;
- ldap_mod_replace($ds,$meDN,$entry);
- }
-}
-
-#
-# Neuen Menüeintrag anlegen
-#
-function add_me($meDN,$mecn,$gbmDN,$menpos,$meattribs,$pxeDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $mentry ['objectclass'][0] = "MenuEntry";
- $mentry ['objectclass'][1] = "top";
- $mentry ['cn'] = $mecn;
- if($gbmDN != ""){$mentry ['genericmenuentrydn'] = $gbmDN;}
- $mentry ['menuposition'] = $menpos;
- if (count($meattribs) != 0){
- foreach (array_keys($meattribs) as $key){
- if ($meattribs[$key] != ""){
- $mentry[$key] = $meattribs[$key];
- }
- }
- }
- print_r($mentry); echo "<br>";
- print_r($meDN); echo "<br>";
- increment_menupositions($pxeDN,$menpos); # andere jeweils um 1 erhöhen
- if (ldap_add($ds,$meDN,$mentry)){
- return 1;
- }
- else{
- return 0;
- }
-}
-
-
-#
-# Menu Entry CN (DN) ändern
-#
-function modify_me_dn($meDN, $newmeDN){
-
- global $ds, $suffix, $ldapError;
-
- if (move_subtree($meDN,$newmeDN)){
- return 1;
- }else{
- return 0;
- }
-}
-
-
-
-#####################################################################
-# Verwaltung von GBM
-#
-
-function add_gbm($gbmDN,$gbmcn,$attribs){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $entry ['objectclass'][0] = "MenuEntry";
- $entry ['objectclass'][1] = "top";
- $entry ['cn'] = $gbmcn;
- if (count($attribs) != 0){
- foreach (array_keys($attribs) as $key){
- if ($attribs[$key] != ""){
- $entry[$key] = $attribs[$key];
- }
- }
- }
- print_r($entry); echo "<br>";
- print_r($gbmDN); echo "<br>";
- if (ldap_add($ds,$gbmDN,$entry)){
- return 1;
- }
- else{
- return 0;
- }
-}
-
-
-#
-# beim löschen von GBMs muss dafür gesorgt werden, dass keine MEs mehr auf diese zeigen,
-# Ref.Abhängigkeiten (sonst gibts Fehler beim PXE-Perlskript und die Nutzer wissen nicht dass ihr PXE Menü nicht
-# mehr funktioniert, so kann man durch Fehlen des gbmDN wissen das es kein GBM mehr zu diesem ME gibt
-#
-function clean_up_del_gbm($gbmDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $attribs = array("dn","genericmenuentrydn");
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=MenuEntry)(genericmenuentrydn=$gbmDN))", $attribs, "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- #print_r($result); echo "<br><br>";
- $delentry ['genericmenuentrydn'] = $gbmDN;
- foreach ($result as $item){
- #print_r($item['dn']); echo "<br>";
- ldap_mod_del($ds, $item['dn'], $delentry);
- }
-
-}
-
-
-#
-# beim ändern des CN (DN) des GBM, Meüeinträge anpassen, Ref. Abhängigkeiten
-#
-function adjust_gbm_dn($newgbmDN, $gbmDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- if(!($result = uniLdapSearch($ds, "ou=RIPM,".$suffix, "(&(objectclass=MenuEntry)(genericmenuentrydn=$gbmDN))", array("dn"), "dn", "sub", 0, 0))) {
- # redirect(5, "", $ldapError, FALSE);
- echo "no search";
- die;
- }
- $result = ldapArraySauber($result);
- $modentry ['genericmenuentrydn'] = $newgbmDN;
- foreach ($result as $item){
- ldap_mod_replace($ds, $item['dn'], $modentry);
- }
-}
-
-
-
-function alternative_rbservices($rbsDN){
-
- global $ds, $suffix, $auDN, $ldapError;
-
- $alt_rbs = array();
-
- $rbsarray = get_rbsoffers($auDN);
- # print_r($rbsarray); echo "<br>";
- if (count($rbsarray) != 0){
- for ($i=0; $i < count($rbsarray); $i++){
- if ($rbsarray[$i] != $rbsDN){
- $exp = ldap_explode_dn ( $rbsarray[$i], 1 );
- $alt = array ("dn" => $rbsarray[$i], "cn" => $exp[0], "au" => " / ".$exp[2]);
- $alt_rbs[] = $alt;
- }
- }
- }
-
- return $alt_rbs;
-}
-
-?> \ No newline at end of file