/**
  * 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;
 }
Exemple #2
0
 /**
  * Gets timestamp when domain was created
  */
 public function getCreatedAt()
 {
     $c = new Criteria();
     $c->add(AuditPeer::OBJECT, 'Domain');
     $c->add(AuditPeer::TYPE, 'ADD');
     $c->add(AuditPeer::OBJECT_KEY, $this->getId());
     $c->addAscendingOrderByColumn(AuditPeer::ID);
     $audit = AuditPeer::doSelectOne($c);
     return $audit->getCreatedAt();
 }
Exemple #3
0
$template = array("DomainId" => null, "Name" => null, "Type" => null, "Content" => null, "Ttl" => null, "Prio" => null);
define('SF_ROOT_DIR', realpath(dirname(__FILE__) . '/../..'));
define('SF_APP', 'frontend');
define('SF_ENVIRONMENT', 'cli');
define('SF_DEBUG', true);
require_once SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php';
// initialize database manager
$databaseManager = new sfDatabaseManager();
$databaseManager->initialize();
$c = new Criteria();
$c->add(AuditPeer::OBJECT, 'Record');
$c->addGroupByColumn(AuditPeer::OBJECT_KEY);
foreach (AuditPeer::doSelect($c) as $group) {
    echo "================= " . $group->getObjectKey() . " ================\n";
    $c1 = new Criteria();
    $c1->add(AuditPeer::OBJECT, 'Record');
    $c1->add(AuditPeer::OBJECT_KEY, $group->getObjectKey());
    $prev_changes = $template;
    foreach (AuditPeer::doSelect($c1) as $audit) {
        echo "   " . $audit->getType() . "\n";
        if ($audit->getType() == 'DELETE') {
            $changes = $prev_changes;
        } else {
            $current_changes = unserialize($audit->getObjectChanges());
            $changes = array_merge($prev_changes, $current_changes);
            $prev_changes = $changes;
        }
        $audit->setObjectChanges(serialize($changes));
        $audit->save();
    }
}
 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(AuditPeer::ID, $pks, Criteria::IN);
         $objs = AuditPeer::doSelect($criteria, $con);
     }
     return $objs;
 }
Exemple #5
0
 public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
 {
     $keys = AuditPeer::getFieldNames($keyType);
     if (array_key_exists($keys[0], $arr)) {
         $this->setID($arr[$keys[0]]);
     }
     if (array_key_exists($keys[1], $arr)) {
         $this->setRemoteIpAddress($arr[$keys[1]]);
     }
     if (array_key_exists($keys[2], $arr)) {
         $this->setObject($arr[$keys[2]]);
     }
     if (array_key_exists($keys[3], $arr)) {
         $this->setObjectKey($arr[$keys[3]]);
     }
     if (array_key_exists($keys[4], $arr)) {
         $this->setDomainId($arr[$keys[4]]);
     }
     if (array_key_exists($keys[5], $arr)) {
         $this->setObjectChanges($arr[$keys[5]]);
     }
     if (array_key_exists($keys[6], $arr)) {
         $this->setQuery($arr[$keys[6]]);
     }
     if (array_key_exists($keys[7], $arr)) {
         $this->setType($arr[$keys[7]]);
     }
     if (array_key_exists($keys[8], $arr)) {
         $this->setCreatedAt($arr[$keys[8]]);
     }
 }