";
exit;
}
if ($entries[count]==1) {
return $entries[0][dn];
} else switch (authorized($zonename)) {
case -2:
error_confirm("The zone does not belong to a valid top level domain");
exit;
case -1:
error_confirm("The zone is owned by someone else");
print_whois($zonename);
exit;
default:
return;
}
}
function print_zone_soa($zonedata, $constr)
{
print "
TTL: $ttl";
if ($type=="MX")
print " Pref: $preference";
print "
\n";
}
}
if (ereg("[amo]", $setconstr)) {
if (ereg("[f]", $selet)) {
print "\n";
}
print "
\n";
print "
";
// 'Delete' form
$onclick = "if(confirm('Do you really want to remove zone: $zonename0 and all its resource records?'))";
if (ereg("[f]", $selet)) {
$onclick .= "{ parent.frames.menu.location='$ZONEEDIT?call=dnslist&selet=$selet&wait=1';".
"parent.frames.main.location='$ZONEEDIT?call=removezone&zonedn=$zonedn&selet=$selet'; }";
} else {
$onclick .= "{ parent.window.location='$ZONEEDIT?call=removezone&zonedn=$zonedn'; }";
}
if (ereg("[am]", $setconstr)) {
print "\n";
}
// form for reset/refresh button
if (ereg("[f]", $selet)) {
print "".
"
\n";
}
function new_zone($new_zonename = "")
{
global $HTTP_GET_VARS, $ZONE_SOA, $ZONEEDIT, $BASEDN;
if (isset($HTTP_GET_VARS[selet])) $selet = $HTTP_GET_VARS[selet];
$zonedata = $ZONE_SOA;
$zonedata[dnsserial] = new_serial();
$onsubmit = "{ parent.frames.menu.location='$ZONEEDIT?call=dnslist&selet=$selet&wait=1'; }";
print "
Add new DNS zone
";
print "";
}
function add_zone()
{
global $ldap, $HTTP_POST_VARS, $BASEDN, $ZONE_SOA, $ZONE_ENTRY, $ZONE_INFO;
$zonedata = array();
foreach ($ZONE_INFO as $za) {
if (strlen($HTTP_POST_VARS[$za])>0) {
$zonedata[$za] = $HTTP_POST_VARS[$za];
}
}
$zonedata["cn"] = $zonedata["dnszonename"];
$zonedata["objectclass"] = "dnszone";
$zonedn = "cn=$zonedata[cn],$BASEDN";
ldap_add($ldap, $zonedn, $zonedata) or die("Failed to add zonedn: $zonedn");
foreach ($ZONE_ENTRY as $ze) {
$dnch = "cn=$ze[cn],$zonedn";
ldap_add($ldap, $dnch, $ze) or die("Failed to add rrset dn: $dnch");
}
return $zonedn;
}
function remove_zone($zonedn)
{
global $ldap;
$query = ldap_list($ldap, $zonedn, "(objectclass=DNSrrset)");
$entries = ldap_get_entries($ldap, $query);
ldap_free_result($query);
for ($i = 0; $i<$entries[count]; $i++) {
ldap_delete($ldap, $entries[$i][dn]) or die("Failed to delete dn: $entries[$i][dn]");
}
ldap_delete($ldap, $zonedn) or die("Failed to delete dn: $zonedn");
return 1;
}
function new_serial($zonedn = 0)
{
global $ldap;
$newserial = date("Ymd")."00";
if ($zonedn) {
$query = ldap_read($ldap, $zonedn, "(objectclass=DNSzone)");
$entries = ldap_get_entries($ldap, $query);
$oldserial = $entries[0][dnsserial][0];
}
return ($newserial>$oldserial) ? $newserial : $oldserial+1;
}
function add_rrset($zonedn)
{
global $ldap, $binddn, $HTTP_POST_VARS, $DEFAULT_TTL, $DEFAULT_PREFERENCE;
if (!isset($HTTP_POST_VARS[dnsdomainname])) die("No domainname specified");
if (strlen($HTTP_POST_VARS[dnsdomainname])>0)
$entry[dnsdomainname] = $HTTP_POST_VARS[dnsdomainname];
if (!isset($HTTP_POST_VARS[dnstype])) die("No type specified");
$entry[dnstype] = $HTTP_POST_VARS[dnstype];
$entry[dnsclass] = "IN"; // INternet is hardcoded
$entry[dnsttl] = $DEFAULT_TTL;
// $entry[owner] = $binddn;
if ($entry[dnstype]=="MX" || $entry[dnstype]=="NS") {
for ($i = 1;; $i++) {
$setcn = "$entry[dnstype]$i:$entry[dnsdomainname]";
$query = ldap_list($ldap, $zonedn, "(&(objectclass=dnsrrset)(cn=$setcn))");
$rrset = ldap_get_entries($ldap, $query);
ldap_free_result($query);
if ($rrset[count]==0)
break;
}
if ($entry[dnstype]=="MX")
$entry[dnspreference] = $DEFAULT_PREFERENCE;
} else {
$setcn = "$entry[dnstype]:$entry[dnsdomainname]";
$query = ldap_list($ldap, $zonedn, "(&(objectclass=dnsrrset)(cn=$setcn))");
$rrset = ldap_get_entries($ldap, $query);
ldap_free_result($query);
if ($rrset[count]>0) {
error_confirm("$entry[dnsdomainname] has already been added to this zone");
return;
}
}
$entry[objectclass] = "dnsrrset";
$entry[cn] = $setcn;
$setdn = "cn=$setcn,$zonedn";
ldap_add($ldap, $setdn, $entry) or die("Faild to add DNSrrset $setdn to DNSzone $zonedn");
}
function modify_rrset($zonedn, $setdn)
{
global $ldap, $HTTP_POST_VARS;
$zonename = get_zone_name($zonedn);
$entry = array();
if (isset($HTTP_POST_VARS[dnscname])) {
if ($HTTP_POST_VARS[dnscname]=="") {
$entry[dnscname] = array();
} elseif (ereg("\.$", $HTTP_POST_VARS[dnscname])) {
if (checkdnsrr($HTTP_POST_VARS[dnscname], "A")) {
$entry[dnscname] = $HTTP_POST_VARS[dnscname];
} else {
error_confirm("Error: $HTTP_POST_VARS[dnscname] does not resolve to a valid IP-address");
return;
}
} elseif (isset($HTTP_POST_VARS[dnsipaddr0]) || isset($HTTP_POST_VARS[dnscipaddr])) {
// records with their own address settings are not checked against DNS
$entry[dnscname] = $HTTP_POST_VARS[dnscname];
} else {
if (!checkdnsrr("$HTTP_POST_VARS[dnscname].$zonename", "A")) {
print "
Warning: $HTTP_POST_VARS[dnscname].$zonename".
" does not resolve to a valid IP-address
\n";
}
$entry[dnscname] = $HTTP_POST_VARS[dnscname];
}
}
if (isset($HTTP_POST_VARS[dnscipaddr])) {
if (ereg("^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$", $HTTP_POST_VARS[dnscipaddr], $reg)) {
$regip = "$reg[1].$reg[2].$reg[3].$reg[4]";
if (check_unique_cipaddr($setdn, $regip))
$entry[dnscipaddr] = $regip;
else
return;
} elseif ($HTTP_POST_VARS[dnscipaddr]=="") {
$entry[dnscipaddr] = array();
} else {
error_confirm("$HTTP_POST_VARS[dnscipaddr] is not a valid IP-address");
return;
}
}
if (isset($HTTP_POST_VARS[dnsttl])) {
if (ereg("([0-9]+)", $HTTP_POST_VARS[dnsttl], $reg)) {
$entry[dnsttl] = $reg[1];
} else {
error_confirm("$HTTP_POST_VARS[dnsttl] is not a valid Time To Live");
return;
}
}
if (isset($HTTP_POST_VARS[dnspreference])) {
if (ereg("([0-9]+)", $HTTP_POST_VARS[dnspreference], $reg)) {
$entry[dnspreference] = $reg[1];
} else {
error_confirm("$HTTP_POST_VARS[dnspreference] is not a valid MX-prefrence");
return;
}
}
$entry[dnsipaddr] = array();
for ($i = 0; isset($HTTP_POST_VARS["dnsipaddr$i"]); $i++) {
$ipaddr = $HTTP_POST_VARS["dnsipaddr$i"];
if (ereg("^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$", $ipaddr, $reg)) {
array_push($entry[dnsipaddr], "$reg[1].$reg[2].$reg[3].$reg[4]");
} elseif ($ipaddr!="") {
error_confirm("$ipaddr is not a valid IP-address");
return;
}
}
ldap_modify($ldap, $setdn, $entry) or die("Faild to modify DNSrrest $setdn in DNSzone $zonedn");
ldap_mod_replace($ldap, $zonedn, array("dnsserial"=>new_serial($zonedn)));
}
function delete_rrset($zonedn, $setdn)
{
global $ldap;
ldap_delete($ldap, $setdn) or die("Failed to delete $setdn from LDAP");;
ldap_mod_replace($ldap, $zonedn, array("dnsserial"=>new_serial($zonedn)));
}
function check_unique_cipaddr($setdn, $cipaddr)
{
global $ldap, $BASEDN;
$query = ldap_search($ldap, $BASEDN, "(&(objectclass=dnsrrset)(dnscipaddr=$cipaddr))");
$entries = ldap_get_entries($ldap, $query);
ldap_free_result($query);
for ($i = 0; $i<$entries[count]; $i++) {
$dn = $entries[$i][dn];
if ($dn!=$setdn) {
error_confirm("Canonical IP-address $cipaddr is already used by $dn");
return 0;
}
}
return 1;
}
function print_whois($zonename)
{
global $WHOISSERVERS;
return; // weil unser FW-Gschaftler den Port 43 von innen nach aussen zugedreht hat
if (ereg("\.([a-zA-Z]+)$", $zonename, $regex)) {
$whoissrv = $WHOISSERVERS["$regex[1]"];
if (isset($whoissrv)) {
$whoisrecord = system("whois -h $whoissrv $zonename");
print "