Esempio n. 1
0
    /**
     * Take params send by "printmodifyform", do integrity 
     * checks,checkDig & call $this->updateDb
     *
     *@access public
     *@param array $params array of params: primary, xfer & xferIP
     *@return string HTML output
     */
    function PrintModified($params)
    {
        global $db, $config, $html, $l;
        list($primary, $xfer, $xferip) = $params;
        $content = "";
        $localerror = 0;
        if (empty($primary)) {
            $localerror = 1;
            $content .= sprintf($html->string_error, $l['str_secondary_you_must_provide_a_primary']) . '<br >';
        }
        // if primary modified ==> try to dig
        if ($primary != $this->masters) {
            // check primary integrity
            if (!checkPrimary($primary)) {
                $localerror = 1;
                $content .= sprintf($html->string_error, $l['str_secondary_your_primary_should_be_an_ip'] . "<br >" . $l['str_secondary_if_you_want_two_primary']) . '<br >';
            } else {
                // remove last ';' if present
                if (substr($primary, -1) == ';') {
                    $primary = substr($primary, 0, -1);
                }
                // split $primary into IPs
                $server = split(';', $primary);
                reset($server);
                while ($ipserver = array_pop($server)) {
                    $dig = checkDig($ipserver, $this->zonename);
                    if ($dig != 'NOERROR') {
                        switch ($dig) {
                            case "NOERROR":
                                $msg = $l['str_dig_result_NOERROR'];
                                break;
                            case "FORMERR":
                                $msg = $l['str_dig_result_FORMERR'];
                                break;
                            case "SERVFAIL":
                                $msg = $l['str_dig_result_SERVFAIL'];
                                break;
                            case "NXDOMAIN":
                                $msg = $l['str_dig_result_NXDOMAIN'];
                                break;
                            case "NOTIMP":
                                $msg = $l['str_dig_result_NOTIMP'];
                                break;
                            case "REFUSED":
                                $msg = $l['str_dig_result_REFUSED'];
                                break;
                            case "YXDOMAIN":
                                $msg = $l['str_dig_result_YXDOMAIN'];
                                break;
                            case "YXRRSET":
                                $msg = $l['str_dig_result_YXRRSET'];
                                break;
                            case "NXRRSET":
                                $msg = $l['str_dig_result_NXRRSET'];
                                break;
                            case "NOTAUTH":
                                $msg = $l['str_dig_result_NOTAUTH'];
                                break;
                            case "NOTZONE":
                                $msg = $l['str_dig_result_NOTZONE'];
                                break;
                            case "BADSIG":
                                $msg = $l['str_dig_result_BADSIG'];
                                break;
                            case "BADKEY":
                                $msg = $l['str_dig_result_BADKEY'];
                                break;
                            case "BADTIME":
                                $msg = $l['str_dig_result_BADTIME'];
                                break;
                        }
                        if (!empty($msg)) {
                            $dig = '"' . $dig . '" (' . $msg . ')';
                        }
                        $content .= sprintf($html->string_warning, sprintf($l['str_trying_to_dig_from_x_returned_status_x'], $ipserver, $dig));
                        $content .= " " . sprintf($l['str_secondary_non_blocking_warning_x_will_not_serve'], $config->sitename) . '<br >';
                    }
                }
            }
        }
        // check xferip
        if (!empty($xferip)) {
            if (!checkPrimary($xferip)) {
                $localerror = 1;
                $content .= sprintf($html->string_error, $l['str_secondary_invalid_list_of_allowtransfer']) . '<br >';
            }
            $xfer = 'others';
        } else {
            if ($xfer == 'others') {
                $xfer = 'master';
            }
        }
        switch ($xfer) {
            case "all":
                $xferip = 'any';
                break;
            case "master":
                $xferip = $primary;
                break;
            case "others":
                // remove last ';' if present
                if (substr($xferip, -1) == ';') {
                    $xferip = substr($xferip, 0, -1);
                }
                // suppress duplicate entry of $primary if already in $xferip
                $xferarray = split(';', $xferip);
                $xferiparray = array();
                reset($xferarray);
                while ($xferitem = array_pop($xferarray)) {
                    if ($xferitem != $primary) {
                        array_push($xferiparray, $xferitem);
                    }
                }
                $xferip = implode(";", $xferiparray);
                $xferip = $primary . ';' . $xferip;
                break;
            default:
                $xferip = "any";
        }
        if (!$localerror) {
            // updatedb
            if (!$this->updateDb($primary, $xferip)) {
                $content .= $this->error;
            } else {
                // flag status='M' to be generated & reloaded
                $ret = $this->flagModified($this->zoneid);
                if (!empty($ret)) {
                    $result .= $ret;
                } else {
                    // retrieve list of ns names
                    $nsxnames = GetListOfServerNames();
                    // retrieve list of ns addresses
                    $nsxips = GetListOfServerIPs();
                    // retrieve list of ns transfer IPs
                    $nsxferips = GetListOfServerTransferIPs();
                    $nsxferips = array_merge($nsxferips, $nsxips);
                    $nsxferips = array_unique($nsxferips);
                    $content .= '
     <h3 class=boxheader>' . sprintf($l['str_secondary_zone_successfully_modified_on_x'], $config->sitename) . '</h3>
     ' . $l['str_secondary_after_modif_be_sure_to'] . ':<ul>
     <li>' . $l['str_secondary_after_modif_add_lines_to_zonefile'] . ':<br>
     <pre>
';
                    while (list($notwanted, $nsxname) = each($nsxnames)) {
                        $content .= $this->zonename . '. IN NS ' . $nsxname . '.
';
                    }
                    $content .= '
    </pre>
    
    <li>' . $l['str_secondary_after_modif_add_to_configfile'] . ':
    <p >
    <pre>
// 
// ' . $l['str_secondary_after_modif_comment_in_sample_1'] . '
// ' . $l['str_secondary_after_modif_comment_in_sample_2'] . '
//
zone "' . $this->zonename . '" {
 type master;
 file "' . $this->zonename . '";
 allow-transfer {
  ';
                    while (list($notwanted, $nsxferip) = each($nsxferips)) {
                        $content .= $nsxferip . '; ';
                    }
                    $content .= '
 };
};
</pre>
     <li>' . $l['str_secondary_after_modif_set_firewall'] . '
     <li>' . sprintf($l['str_secondary_after_modif_delegate_x_to'], $this->zonename) . ': ';
                    reset($nsxnames);
                    $serverlist = '';
                    while (list($notwanted, $nsxname) = each($nsxnames)) {
                        $serverlist .= ' <b>' . $nsxname . '</b>; ';
                    }
                    $serverlist = substr($serverlist, 0, -1);
                    $content .= $serverlist . '
     </ul>
    
     <p>' . $l['str_secondary_reload_info'] . '<p>

     ';
                }
                // else no error
            }
            // else updatedb
        } else {
            // $error
            // nothing has been modified, go back and solve troubles
            // or print form again
        }
        return $content;
    }
Esempio n. 2
0
 /**
  * Update SOA of current zone
  *
  *@access private
  *@param string $xferip IP(s) allowed to do zone transfers
  *@param int $defaultttl default TTL to be used
  *@param int $soarefresh refresh interval
  *@param int $soaretry retry interval
  *@param int $soaexpire expire interval
  *@param int $soaminimum negative TTL
  *@return string 1 if success, 0 if DB error, string of error else
  */
 function updateSOA($xferip, $defaultttl, $soarefresh, $soaretry, $soaexpire, $soaminimum)
 {
     global $db, $l;
     $result = "";
     $this->VerifySOA($defaultttl, 86400, "TTL");
     $this->VerifySOA($soarefresh, 86400);
     $this->VerifySOA($soaretry, 10800);
     $this->VerifySOA($soaexpire, 3600000);
     $this->VerifySOA($soaminimum, 10800);
     if (!empty($xferip)) {
         if (!checkPrimary($xferip)) {
             $this->error .= $l['str_primary_soa_invalid_xfer'];
         }
     } else {
         $xferip = 'any';
     }
     if (!empty($this->error)) {
         return 0;
     }
     // dns_confprimary
     // upgrade serial
     $this->serial = getSerial($this->serial);
     if ($this->creation == 0) {
         $query = "UPDATE dns_confprimary SET serial='" . $this->serial . "',\n          xfer='" . $xferip . "', refresh='" . $soarefresh . "',\n          retry='" . $soaretry . "', expiry='" . $soaexpire . "',\n          minimum='" . $soaminimum . "', defaultttl='" . $defaultttl . "'\n          WHERE zoneid='" . $this->zoneid . "'";
     } else {
         $query = "SELECT count(*) FROM dns_confprimary WHERE zoneid='" . $this->zoneid . "'";
         $res = $db->query($query);
         if ($db->error()) {
             $this->error = $l['str_trouble_with_db'];
             return 0;
         }
         $line = $db->fetch_row($res);
         if ($line[0] != 0) {
             $this->error = $l['str_zone_already_exists'];
             return 0;
         }
         $query = "INSERT INTO dns_confprimary (zoneid,serial,xfer,refresh,\n          retry,expiry,minimum,defaultttl)\n          VALUES ('" . $this->zoneid . "','" . $this->serial . "','" . $xferip . "'\n          ,'" . $soarefresh . "','" . $soaretry . "','" . $soaexpire . "','" . $soaminimum . "','" . $defaultttl . "')";
     }
     $res = $db->query($query);
     if ($db->error()) {
         $this->error = $l['str_trouble_with_db'];
         return 0;
     }
     $this->refresh = $soarefresh;
     $this->retry = $soaretry;
     $this->expire = $soaexpire;
     $this->minimum = $soaminimum;
     $this->defaultttl = $defaultttl;
     return 1;
 }