Started Work Again

This commit is contained in:
lamclennan 2017-01-07 18:37:13 +10:00
parent 3bf4e2874a
commit 1aaa24280f
7 changed files with 152 additions and 61 deletions

View file

@ -45,23 +45,25 @@ if(isset($input->action) && $input->action == "addDomain") {
$soaContent = implode(" ", $soaData);
$db->autocommit(false);
$db->beginTransaction();
$stmt = $db->prepare("INSERT INTO domains(name,type) VALUES (?,?)");
$stmt->bind_param("ss", $input->name, $input->type);
$stmt = $db->prepare("INSERT INTO domains(name,type) VALUES (:name,:type)");
$stmt->bindValue(':name', $input->name, PDO::PARAM_STR);
$stmt->bindValue(':type', $input->type, PDO::PARAM_STR);
$stmt->execute();
$stmt->close();
$stmt = $db->prepare("SELECT LAST_INSERT_ID()");
$stmt = $db->prepare("SELECT id FROM domains WHERE name=:name AND type=:type LIMIT 1");
$stmt->bindValue(':name', $input->name, PDO::PARAM_STR);
$stmt->bindValue(':type', $input->type, PDO::PARAM_STR);
$stmt->execute();
$stmt->bind_result($newDomainId);
$stmt->fetch();
$stmt->close();
$newDomainId = $stmt->fetchColumn();
$stmt = $db->prepare("INSERT INTO records(domain_id,name,type,content,ttl) VALUES (?,?,'SOA',?,?)");
$stmt->bind_param("issi", $newDomainId, $input->name, $soaContent, $input->ttl);
$stmt = $db->prepare("INSERT INTO records(domain_id,name,type,content,ttl) VALUES (:domain_id,:name,'SOA',:content,:ttl)");
$stmt->bindValue(':domain_id', $newDomainId, PDO::PARAM_INT);
$stmt->bindValue(':name', $input->name, PDO::PARAM_STR);
$stmt->bindValue(':content', $soaContent, PDO::PARAM_STR);
$stmt->bindValue(':ttl', $input->ttl, PDO::PARAM_INT);
$stmt->execute();
$stmt->close();
$db->commit();

View file

@ -98,15 +98,58 @@ CREATE TABLE IF NOT EXISTS options (
PRIMARY KEY (name)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO options(name,value) VALUES ('schema_version', 3);
INSERT INTO options(name,value) VALUES ('schema_version', 4);
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE TABLE IF NOT EXISTS supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id),
KEY comments_domain_id_idx (domain_id),
KEY comments_name_type_idx (name,type),
KEY comments_order_idx (domain_id, modified_at)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id),
KEY domainmetadata_idx (domain_id, kind)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id),
KEY domainidindex (domain_id)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id),
UNIQUE KEY namealgoindex (name, algorithm)
) Engine=InnoDB DEFAULT CHARSET=latin1;
";
$sql["pgsql"]="
@ -146,8 +189,6 @@ CREATE INDEX IF NOT EXISTS nametype_index ON records(name,type);
CREATE INDEX IF NOT EXISTS domain_id ON records(domain_id);
CREATE INDEX IF NOT EXISTS recordorder ON records (domain_id, ordername text_pattern_ops);
CREATE TABLE IF NOT EXISTS user (
id SERIAL PRIMARY KEY,
name varchar(50) NOT NULL,
@ -250,7 +291,7 @@ CREATE TABLE IF NOT EXISTS tsigkeys (
CREATE UNIQUE INDEX IF NOT EXISTS namealgoindex ON tsigkeys(name, algorithm);
";
try {
$db = new PDO("$input->type:dbname=$input->database;host=$input->host;port=$input->port", $input->user, $input->password); ;
$db = new PDO("$input->type:dbname=$input->database;host=$input->host;port=$input->port", $input->user, $input->password);
}
catch (PDOException $e) {
$retval['status'] = "error";

View file

@ -31,7 +31,7 @@ if(isset($input->action) && $input->action == "requestUpgrade") {
$currentVersion = getVersion($db);
if($currentVersion < 1) {
$sql = "
$sql["mysql"] = "
CREATE TABLE IF NOT EXISTS remote (
id int(11) NOT NULL AUTO_INCREMENT,
record int(11) NOT NULL,
@ -54,12 +54,12 @@ if(isset($input->action) && $input->action == "requestUpgrade") {
INSERT INTO options(name,value) VALUES ('schema_version', 1);
";
$db->multi_query($sql);
while ($db->next_result()) {;}
$sql["pgsql"] = "";
$stmt = $db->query($sql[$config['db_type']]);
while ($stmt->nextRowset()) {;}
}
if($currentVersion < 2) {
$sql = "
$sql["mysql"] = "
ALTER TABLE permissions
DROP FOREIGN KEY permissions_ibfk_1;
ALTER TABLE permissions
@ -79,12 +79,12 @@ if(isset($input->action) && $input->action == "requestUpgrade") {
UPDATE options SET value=2 WHERE name='schema_version';
";
$db->multi_query($sql);
while ($db->next_result()) {;}
$sql["pgsql"] = "";
$stmt = $db->query($sql[$config['db_type']]);
while ($stmt->nextRowset()) {;}
}
if($currentVersion < 3) {
$sql = "
$sql["mysql"] = "
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
@ -98,11 +98,59 @@ if(isset($input->action) && $input->action == "requestUpgrade") {
UPDATE options SET value=3 WHERE name='schema_version';
";
$db->multi_query($sql);
while ($db->next_result()) {;}
$sql["pgsql"] = "";
$stmt = $db->query($sql[$config['db_type']]);
while ($stmt->nextRowset()) {;}
}
if($currentVersion < 4) {
$sql["mysql"] = "
CREATE TABLE IF NOT EXISTS supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id),
KEY comments_domain_id_idx (domain_id),
KEY comments_name_type_idx (name,type),
KEY comments_order_idx (domain_id, modified_at)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id),
KEY domainidindex (domain_id)
) Engine=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id),
UNIQUE KEY namealgoindex (name, algorithm)
) Engine=InnoDB DEFAULT CHARSET=latin1;
UPDATE options SET value=4 WHERE name='schema_version';
";
$sql["pgsql"] = "";
$stmt = $db->query($sql[$config['db_type']]);
while ($stmt->nextRowset()) {;}
}
$retval['status'] = "success";
}

View file

@ -24,6 +24,12 @@ $config['db_password'] = "";
$config['db_port'] = 3306;
$config['db_name'] = "pdnsmanager";
//HTTP API Settings
$config['api_functionality'] = true;
$config['api_host'] = "localhost"
$config['api_port'] = 8080;
$config['api_key'] = "";
//Remote update
$config['nonce_lifetime'] = 15;

View file

@ -17,7 +17,7 @@
*/
function getExpectedVersion() {
return 3;
return 4;
}
function checkVersion($db) {
@ -29,19 +29,14 @@ function checkVersion($db) {
}
function getVersion($db) {
$stmt = $db->prepare("SHOW TABLES LIKE 'options'");
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows() < 1) {
try {
$stmt = $db->prepare("SELECT value FROM options WHERE name='schema_version' LIMIT 1");
$stmt->execute();
$version = $stmt->fetchColumn();
} catch (Exception $e) {
return 0;
}
$stmt->close();
$stmt = $db->prepare("SELECT value FROM options WHERE name='schema_version'");
$stmt->execute();
$stmt->bind_result($version);
$stmt->fetch();
$stmt->close();
return $version;
}

View file

@ -16,8 +16,9 @@
* limitations under the License.
*/
$db = new mysqli($config['db_host'], $config['db_user'], $config['db_password'], $config['db_name'], $config['db_port']);
if ($db->connect_error) {
die("Connection to database failed");
try {
$db = new PDO("$config['db_type']:dbname=$config['db_name'];host=$config['db_host'];port=$config['db_port']", $config['db_user'], $config['db_password']);
}
catch (PDOException $e) {
die("Connection to database failed");
}

View file

@ -18,16 +18,13 @@
function update_serial($db, $domainId) {
$db->autocommit(false);
$db->begin_transaction();
$db->beginTransaction();
$stmt = $db->prepare("SELECT content FROM records WHERE type='SOA' AND domain_id=?");
$stmt->bind_param("i", $domainId);
$stmt = $db->prepare("SELECT content FROM records WHERE type='SOA' AND domain_id=:domain_id LIMIT 1");
$stmt->bindValue(':domain_id', $domainId, PDO::PARAM_INT);
$stmt->execute();
$stmt->bind_result($content);
$stmt->fetch();
$stmt->close();
$content = $stmt->fetchColumn();
$content = explode(" ", $content);
$serial = $content[2];
@ -50,8 +47,9 @@ function update_serial($db, $domainId) {
$newsoa = implode(" ", $content);
$stmt = $db->prepare("UPDATE records SET content=? WHERE type='SOA' AND domain_id=?");
$stmt->bind_param("si", $newsoa, $domainId);
$stmt = $db->prepare("UPDATE records SET content=:content WHERE type='SOA' AND domain_id=:domain_id");
$stmt->bindValue(':content', $newsoa, PDO::PARAM_STR);
$stmt->bindValue(':domain_id', $domainId, PDO::PARAM_INT);
$stmt->execute();
$db->commit();