store and retrieve TTLs
This commit is contained in:
+28
-10
@@ -15,12 +15,13 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: pgsqldb.c,v 1.3 2000/11/17 23:12:10 bwelling Exp $ */
|
||||
/* $Id: pgsqldb.c,v 1.4 2000/11/17 23:57:32 bwelling Exp $ */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <pgsql/libpq-fe.h>
|
||||
|
||||
@@ -30,6 +31,7 @@
|
||||
#include <isc/util.h>
|
||||
|
||||
#include <dns/sdb.h>
|
||||
#include <dns/result.h>
|
||||
|
||||
#include <named/globals.h>
|
||||
|
||||
@@ -89,7 +91,7 @@ pgsqldb_lookup(const char *zone, const char *name, void *dbdata,
|
||||
return (ISC_R_NOMEMORY);
|
||||
canonicalize(name, canonname);
|
||||
snprintf(str, sizeof(str),
|
||||
"SELECT RDTYPE,RDATA FROM \"%s\" WHERE "
|
||||
"SELECT TTL,RDTYPE,RDATA FROM \"%s\" WHERE "
|
||||
"lower(NAME) = lower('%s')", dbi->table, canonname);
|
||||
isc_mem_put(ns_g_mctx, canonname, strlen(name) * 2 + 1);
|
||||
res = PQexec(dbi->conn, str);
|
||||
@@ -103,9 +105,17 @@ pgsqldb_lookup(const char *zone, const char *name, void *dbdata,
|
||||
}
|
||||
|
||||
for (i = 0; i < PQntuples(res); i++) {
|
||||
char *type = PQgetvalue(res, i, 0);
|
||||
char *data = PQgetvalue(res, i, 1);
|
||||
result = dns_sdb_putrr(lookup, type, 3600, data);
|
||||
char *ttlstr = PQgetvalue(res, i, 0);
|
||||
char *type = PQgetvalue(res, i, 1);
|
||||
char *data = PQgetvalue(res, i, 2);
|
||||
dns_ttl_t ttl;
|
||||
char *endp;
|
||||
ttl = strtol(ttlstr, &endp, 10);
|
||||
if (*endp != '\0') {
|
||||
PQclear(res);
|
||||
return (DNS_R_BADTTL);
|
||||
}
|
||||
result = dns_sdb_putrr(lookup, type, ttl, data);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
PQclear(res);
|
||||
return (ISC_R_FAILURE);
|
||||
@@ -131,7 +141,7 @@ pgsqldb_allnodes(const char *zone, void *dbdata, dns_sdballnodes_t *allnodes) {
|
||||
UNUSED(zone);
|
||||
|
||||
snprintf(str, sizeof(str),
|
||||
"SELECT NAME,RDTYPE,RDATA FROM \"%s\" ORDER BY NAME",
|
||||
"SELECT TTL,NAME,RDTYPE,RDATA FROM \"%s\" ORDER BY NAME",
|
||||
dbi->table);
|
||||
res = PQexec(dbi->conn, str);
|
||||
if (!res || PQresultStatus(res) != PGRES_TUPLES_OK ) {
|
||||
@@ -144,10 +154,18 @@ pgsqldb_allnodes(const char *zone, void *dbdata, dns_sdballnodes_t *allnodes) {
|
||||
}
|
||||
|
||||
for (i = 0; i < PQntuples(res); i++) {
|
||||
char *name = PQgetvalue(res, i, 0);
|
||||
char *type = PQgetvalue(res, i, 1);
|
||||
char *data = PQgetvalue(res, i, 2);
|
||||
result = dns_sdb_putnamedrr(allnodes, name, type, 3600, data);
|
||||
char *ttlstr = PQgetvalue(res, i, 0);
|
||||
char *name = PQgetvalue(res, i, 1);
|
||||
char *type = PQgetvalue(res, i, 2);
|
||||
char *data = PQgetvalue(res, i, 3);
|
||||
dns_ttl_t ttl;
|
||||
char *endp;
|
||||
ttl = strtol(ttlstr, &endp, 10);
|
||||
if (*endp != '\0') {
|
||||
PQclear(res);
|
||||
return (DNS_R_BADTTL);
|
||||
}
|
||||
result = dns_sdb_putnamedrr(allnodes, name, type, ttl, data);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
PQclear(res);
|
||||
return (ISC_R_FAILURE);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: zonetodb.c,v 1.3 2000/11/17 23:12:11 bwelling Exp $ */
|
||||
/* $Id: zonetodb.c,v 1.4 2000/11/17 23:57:33 bwelling Exp $ */
|
||||
|
||||
#include <isc/buffer.h>
|
||||
#include <isc/mem.h>
|
||||
@@ -77,7 +77,7 @@ canonicalize(const char *source, char *dest) {
|
||||
}
|
||||
|
||||
void
|
||||
addrdata(dns_name_t *name, dns_rdata_t *rdata) {
|
||||
addrdata(dns_name_t *name, dns_ttl_t ttl, dns_rdata_t *rdata) {
|
||||
unsigned char namearray[DNS_NAME_MAXTEXT + 1];
|
||||
unsigned char canonnamearray[2 * DNS_NAME_MAXTEXT + 1];
|
||||
unsigned char typearray[20];
|
||||
@@ -107,9 +107,9 @@ addrdata(dns_name_t *name, dns_rdata_t *rdata) {
|
||||
canonicalize(dataarray, canondataarray);
|
||||
|
||||
snprintf(str, sizeof(str),
|
||||
"INSERT INTO %s (NAME, RDTYPE, RDATA)"
|
||||
" VALUES ('%s', '%s', '%s')",
|
||||
dbtable, canonnamearray, canontypearray, canondataarray);
|
||||
"INSERT INTO %s (NAME, TTL, RDTYPE, RDATA)"
|
||||
" VALUES ('%s', %d, '%s', '%s')",
|
||||
dbtable, canonnamearray, ttl, canontypearray, canondataarray);
|
||||
printf("%s\n", str);
|
||||
res = PQexec(conn, str);
|
||||
if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
|
||||
@@ -196,7 +196,8 @@ main(int argc, char **argv) {
|
||||
PQclear(res);
|
||||
|
||||
snprintf(str, sizeof(str),
|
||||
"CREATE TABLE %s (NAME TEXT, RDTYPE TEXT, RDATA TEXT)",
|
||||
"CREATE TABLE %s "
|
||||
"(NAME TEXT, TTL INTEGER, RDTYPE TEXT, RDATA TEXT)",
|
||||
dbtable);
|
||||
printf("%s\n", str);
|
||||
res = PQexec(conn, str);
|
||||
@@ -236,29 +237,19 @@ main(int argc, char **argv) {
|
||||
|
||||
while (result == ISC_R_SUCCESS) {
|
||||
dns_rdatasetiter_current(rdsiter, &rdataset);
|
||||
|
||||
result = dns_rdataset_first(&rdataset);
|
||||
check_result(result, "dns_rdataset_first");
|
||||
|
||||
while (result == ISC_R_SUCCESS) {
|
||||
dns_rdataset_current(&rdataset, &rdata);
|
||||
|
||||
addrdata(name, &rdata);
|
||||
|
||||
addrdata(name, rdataset.ttl, &rdata);
|
||||
dns_rdata_reset(&rdata);
|
||||
|
||||
result = dns_rdataset_next(&rdataset);
|
||||
}
|
||||
|
||||
dns_rdataset_disassociate(&rdataset);
|
||||
|
||||
result = dns_rdatasetiter_next(rdsiter);
|
||||
}
|
||||
|
||||
dns_rdatasetiter_destroy(&rdsiter);
|
||||
|
||||
dns_db_detachnode(db, &node);
|
||||
|
||||
result = dns_dbiterator_next(dbiter);
|
||||
}
|
||||
|
||||
@@ -272,12 +263,8 @@ main(int argc, char **argv) {
|
||||
closeandexit(1);
|
||||
}
|
||||
PQclear(res);
|
||||
|
||||
dns_dbiterator_destroy(&dbiter);
|
||||
|
||||
dns_db_detach(&db);
|
||||
|
||||
isc_mem_destroy(&mctx);
|
||||
|
||||
closeandexit(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user