Ejemplo n.º 1
0
 /**
  * Commits changes (increases serial by 1)
  * 
  * @return Array on success, string on error
  */
 public static function commit()
 {
     // do some checks first
     $pdns_version = trim(shell_exec("sudo /usr/bin/pdns_control version 2>&1"));
     if (!preg_match('/^[0-9,\\.]+$/', $pdns_version)) {
         if (preg_match('/\\[sudo\\] password/', $pdns_version)) {
             return "Unable to run 'sudo /usr/bin/pdns_control'. Is it defined in sudoers file?";
         } else {
             return $pdns_version;
         }
     }
     $commited = array();
     $c = new Criteria();
     $c->add(AuditPeer::OBJECT, 'Record');
     $c->addGroupByColumn(AuditPeer::DOMAIN_ID);
     $c->add(AuditPeer::CREATED_AT, date("Y-m-d H:i:s", MyTools::getLastCommit()), Criteria::GREATER_THAN);
     foreach (AuditPeer::doSelect($c) as $audit) {
         $domain = DomainPeer::retrieveByPK($audit->getDomainId());
         $commited[] = $domain->getName();
         // get SOA record
         $c = new Criteria();
         $c->add(RecordPeer::DOMAIN_ID, $domain->getId());
         $c->add(RecordPeer::TYPE, 'SOA');
         $SOA = RecordPeer::doSelectOne($c);
         $temp = explode(" ", $SOA->getContent());
         $serial = $temp[2];
         $date = substr($serial, 0, 8);
         $id = substr($serial, 8);
         // today ?
         if ($date == date("Ymd")) {
             $id++;
             if (strlen($id) == 1) {
                 $id = "0" . $id;
             }
             $serial = $date . $id;
         } else {
             $serial = date("Ymd") . "01";
         }
         if ($serial >= 4294967295) {
             continue;
         }
         // don't allow >= 32bit unsigned
         $SOA->setContent(implode(" ", array($temp[0], $temp[1], $serial)));
         $SOA->save();
     }
     if ($commited) {
         SettingPeer::setValue('last_commit', time());
         sleep(2);
         if ($also_notify = sfConfig::get('app_default_also-notify')) {
             foreach ($commited as $domain) {
                 foreach ($also_notify as $host) {
                     exec("sudo /usr/bin/pdns_control notify-host {$domain} {$host}");
                 }
             }
         }
     }
     return $commited;
 }
Ejemplo n.º 2
0
 /**
  * Sets value for given key name
  *
  * @param string $name
  * @param mixed $value
  * 
  */
 public static function setValue($name, $value)
 {
     $c = new Criteria();
     $c->add(SettingPeer::NAME, $name);
     if (!($setting = SettingPeer::doSelectOne($c))) {
         $setting = new Setting();
         $setting->setName($name);
     }
     $setting->setValue($value);
     $setting->save();
 }
Ejemplo n.º 3
0
 public static function setByKey($key, $value, PropelPDO $con = null)
 {
     $c = new Criteria();
     $c->add(SettingPeer::KEY, $key);
     $s = SettingPeer::doSelectOne($c, $con);
     if (!$s) {
         $s = new Setting();
         $setting->setKey($key);
     }
     $s->setValue($value);
     return $s->save();
 }
Ejemplo n.º 4
0
 /**
  * Record Type
  */
 public function executeRecordtype()
 {
     if (!$this->isPOST()) {
         $output = array();
         if (!($record_type = SettingPeer::getValue('record_type'))) {
             return $this->renderJson(array("success" => false));
         }
         foreach (unserialize($record_type) as $type => $state) {
             $output[] = array("id" => $type, "state" => $state);
         }
         return $this->renderStore("RecordType", $output);
     } else {
         $record_type = array();
         foreach ($this->getRequestParameter('record_type') as $type => $state) {
             if ($state) {
                 $record_type[$type] = 1;
             } else {
                 $record_type[$type] = 0;
             }
         }
         SettingPeer::setValue('record_type', serialize($record_type));
         return $this->renderJson(array("success" => true, "info" => "Record types updated."));
     }
 }
Ejemplo n.º 5
0
 public function executeAnnounce($request)
 {
     register_shutdown_function(array($this, "timeout"), $request);
     $this->encoder = new File_Bittorrent2_Encode();
     try {
         if (!SettingPeer::retrieveByKey('tracker_active')) {
             throw new limeException('turn-on-tracker', 'Tracker not active');
         }
         $response = $this->response_ok;
         $this->form = new ClientForm();
         $this->form->bind($request->getGetParameters());
         if (!$this->form->isValid()) {
             return $this->doError(implode(';\\n', $this->form->getValidatorSchema()->getMessages()));
         }
         $params = $request->getGetParameters();
         $params['info_hash'] = unpack('H*', $params['info_hash']);
         $params['info_hash'] = $params['info_hash'][1];
         $params['peer_id'] = $params['peer_id'];
         $request->setTimeLimit(10);
         $my_client = ClientPeer::retrieveByParameters($params);
         $request->setIgnoreUserAbort(true);
         // semi-transactional now
         $my_client->updateWithParameters($params, $request);
         if (!$my_client->isDeleted()) {
             $my_client->save();
             $torrent = $my_client->getTorrent();
             $clients = ClientPeer::reap($torrent->getClients());
             $request->setIgnoreUserAbort(false);
             $request->setTimeLimit(20);
             if (!isset($params['compact'])) {
                 $params['compact'] = TRUE;
             }
             if ($params['compact']) {
                 $response['peers'] = '';
             }
             $complete = 0;
             $incomplete = 0;
             foreach ($clients as $peer_client) {
                 if ($my_client->getId() != $peer_client->getId() && !$peer_client->isDeleted()) {
                     if ($peer_client->isComplete()) {
                         $complete++;
                     } else {
                         $incomplete++;
                     }
                     if ($params['compact']) {
                         $response['peers'] .= $peer_client->getDict(true);
                     } else {
                         $response['peers'][] = $peer_client->getDict();
                     }
                 }
             }
         } else {
             $request->setIgnoreUserAbort(false);
             $request->setTimeLimit(20);
             unset($response['peers']);
             // no need to send a stopping peer a list of peers
         }
         $response['tracker id'] = $my_client->getTrackerId();
         $response['complete'] = $complete;
         $response['incomplete'] = $incomplete;
         //  return sfView::ERROR;
         sfConfig::set('sf_web_debug', false);
         //return $this->renderText(print_r($response,true));
         $output = $this->encoder->encode($response);
         return $this->renderText($output);
     } catch (Exception $e) {
         return $this->doError($e . '');
     }
 }
 public function performTests()
 {
     $settings = $this->getSettings();
     if (!$settings['test_sideload']) {
         $settings['test_sideload'] = $this->testSideload();
         SettingPeer::setByKey('test_sideload', true);
     }
 }
Ejemplo n.º 7
0
        echo "Table {$table} - changing engine to InnoDB...\n";
        $sql = "ALTER TABLE `{$db_name}`.`{$table}` ENGINE = InnoDB";
        try {
            $statement = $connection->prepareStatement($sql);
            $statement->executeQuery();
        } catch (Exception $e) {
            innoDBError($sql, $e);
            break;
        }
        $upgraded = true;
    }
}
// set record_type setting
if (!SettingPeer::getValue('record_type')) {
    echo "Settings->record_type missing, updating...\n";
    $types = array("A" => 1, "AAAA" => 0, "AFSDB" => 0, "CERT" => 0, "CNAME" => 1, "DNSKEY" => 0, "DS" => 0, "HINFO" => 0, "KEY" => 0, "LOC" => 0, "MX" => 1, "NAPTR" => 1, "NS" => 1, "NSEC" => 0, "PTR" => 1, "RP" => 0, "RRSIG" => 0, "SOA" => 1, "SPF" => 1, "SSHFP" => 0, "SRV" => 1, "TXT" => 1);
    SettingPeer::setValue('record_type', serialize($types));
    $upgraded = true;
}
if ($upgraded) {
    echo "Clearing cache...\n";
    passthru(SF_ROOT_DIR . "/symfony cc");
    echo "Done.\n";
} else {
    echo "Your Power DNS GUI is up to date. Nothing to upgrade.\n";
}
function innoDBError($sql, $e)
{
    echo $e->getMessage() . "\n\n";
    echo "Please make sure 'records' and 'domain' tables engine is set to InnoDB\n\n";
}
Ejemplo n.º 8
0
 public function executeTracker($request)
 {
     if ($request->getMethod() != sfRequest::POST) {
         return;
     }
     $form = $this->form = new TrackerForm();
     $form->bind($request->getPostParameters());
     $user = $this->getUser();
     if (!$form->isValid()) {
         return sfView::ERROR;
     }
     $active = $form->getValue('active');
     SettingPeer::setByKey('tracker_active', $active);
     $user->setFlash('notice', 'BitTorrent tracker ' . ($active ? 'on' : 'off'));
     $this->redirect('@settings');
 }
Ejemplo n.º 9
0
 public function configure()
 {
     $this->setWidgets(array('active' => new sfWidgetFormSelectRadio(array('choices' => array(1 => 'yes', 0 => 'no')))));
     $this->setValidators(array('active' => new sfValidatorInteger(array('required' => true))));
     $this->setDefaults(array('active' => SettingPeer::retrieveByKey('tracker_active')));
 }
Ejemplo n.º 10
0
 public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
 {
     $keys = SettingPeer::getFieldNames($keyType);
     if (array_key_exists($keys[0], $arr)) {
         $this->setName($arr[$keys[0]]);
     }
     if (array_key_exists($keys[1], $arr)) {
         $this->setValue($arr[$keys[1]]);
     }
 }
Ejemplo n.º 11
0
 public static function retrieveByPKs($pks, $con = null)
 {
     if ($con === null) {
         $con = Propel::getConnection(self::DATABASE_NAME);
     }
     $objs = null;
     if (empty($pks)) {
         $objs = array();
     } else {
         $criteria = new Criteria();
         $criteria->add(SettingPeer::NAME, $pks, Criteria::IN);
         $objs = SettingPeer::doSelect($criteria, $con);
     }
     return $objs;
 }