ports/96891: [patch] port dns/powerdns does not have option for compiling geo backend
Ralf van der Enden
tremere at cainites.net
Tue Jan 9 09:20:32 UTC 2007
The following reply was made to PR ports/96891; it has been noted by GNATS.
From: "Ralf van der Enden" <tremere at cainites.net>
To: "Stefan Walter" <sw at gegenunendlich.de>
Cc: "GNATS" <FreeBSD-gnats-submit at FreeBSD.org>
Subject: Re: ports/96891: [patch] port dns/powerdns does not have option for compiling geo backend
Date: Tue, 9 Jan 2007 09:25:05 +0100
This is a multi-part message in MIME format.
------=_NextPart_000_0079_01C733D0.0C2B7FE0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Hi Stefan,
Sorry for the long wait, but I've been quite busy. I also had to redo the
patch and test some things.
Hopefully the attachment can be read this time.
Best regards,
Ralf
----- Original Message -----
From: "Stefan Walter" <sw at gegenunendlich.de>
To: "Ralf van der Enden" <tremere at cainites.net>
Cc: "GNATS" <FreeBSD-gnats-submit at FreeBSD.org>
Sent: Sunday, November 19, 2006 5:18 PM
Subject: Re: ports/96891: [patch] port dns/powerdns does not have option for
compiling geo backend
Hi Ralf,
unfortunately, the patch you sent cannot be applied easily because your
mail client sent it in quoted-printable format, which mangles line feeds,
for instance. (See http://www.freebsd.org/cgi/query-pr.cgi?pr=ports/96891
for what your patch looks like.) Could you re-send the patch or make it
available for download on a server? (Please note that I have just
committed changes from two other PRs to the port, so you might have to
generate a new patch.)
Stefan
------=_NextPart_000_0079_01C733D0.0C2B7FE0
Content-Type: application/octet-stream;
name="pdns-2.9.20_2.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="pdns-2.9.20_2.diff"
diff -ruN powerdns/Makefile powerdns.new/Makefile=0A=
--- powerdns/Makefile Sun Nov 19 16:57:30 2006=0A=
+++ powerdns.new/Makefile Mon Jan 8 10:47:21 2007=0A=
@@ -7,14 +7,14 @@=0A=
=0A=
PORTNAME=3D powerdns=0A=
PORTVERSION=3D 2.9.20=0A=
-PORTREVISION=3D 1=0A=
+PORTREVISION=3D 2=0A=
CATEGORIES=3D dns ipv6=0A=
MASTER_SITES=3D http://downloads.powerdns.com/releases/ \=0A=
http://mirrors.evolva.ro/powerdns.com/releases/=0A=
DISTNAME=3D pdns-${PORTVERSION}=0A=
=0A=
MAINTAINER=3D tremere at cainites.net=0A=
-COMMENT=3D An advanced DNS server with SQL backend=0A=
+COMMENT=3D An advanced DNS server with multiple backends including SQL=0A=
=0A=
BUILD_DEPENDS=3D bjam:${PORTSDIR}/devel/boost=0A=
=0A=
@@ -25,8 +25,9 @@=0A=
CXXFLAGS+=3D -I${LOCALBASE}/include=0A=
LDFLAGS+=3D -L${LOCALBASE}/lib=0A=
CONFIGURE_TARGET=3D --build=3D${MACHINE_ARCH}-portbld-freebsd${OSREL}=0A=
-CONFIGURE_ARGS+=3D --with-modules=3D"${CONFIGURE_MODULES} pipe" \=0A=
- --with-dynmodules=3D""=0A=
+CONFIGURE_ARGS+=3D --with-modules=3D"pipe" \=0A=
+ --with-dynmodules=3D"${CONFIGURE_MODULES}" \=0A=
+ --sysconfdir=3D"${PREFIX}/etc/pdns"=0A=
# --enable-debug=0A=
SCRIPTS_ENV=3D WRKDIRPREFIX=3D"${WRKDIRPREFIX}" \=0A=
CURDIR2=3D"${.CURDIR}" \=0A=
@@ -37,97 +38,84 @@=0A=
=0A=
SUB_FILES=3D pkg-message=0A=
=0A=
+OPTIONS=3D PGSQL "PostgreSQL backend" on \=0A=
+ MYSQL "MySQL backend" off \=0A=
+ SQLITE "SQLite 2 backend" off \=0A=
+ SQLITE3 "SQLite 3 backend" off \=0A=
+ OPENDBX "OpenDBX backend" off \=0A=
+ OPENLDAP "OpenLDAP backend" off \=0A=
+ GEO "Geo backend" off=0A=
+=0A=
.include <bsd.port.pre.mk>=0A=
=0A=
USE_RC_SUBR+=3D pdns=0A=
=0A=
-# use user config if possible=0A=
-.if exists(${WRKDIRPREFIX}${.CURDIR}/Makefile.inc)=0A=
-.include "${WRKDIRPREFIX}${.CURDIR}/Makefile.inc"=0A=
+.if defined(WITH_GEO)=0A=
+CONFIGURE_MODULES+=3D "geo"=0A=
+PLIST_SUB+=3D WITHGEO=3D""=0A=
.else=0A=
-.if defined(BATCH)=0A=
-# default package, can be configured in /etc/make.conf=0A=
-POWERDNS_OPTIONS?=3D \"PostgreSQL\"=0A=
-.endif=0A=
-# make INDEX match=0A=
-NO_DESCRIBE=3Dyes=0A=
+PLIST_SUB+=3D WITHGEO=3D"@comment "=0A=
.endif=0A=
=0A=
-.if defined(WITH_POSTGRESQL_DRIVER) && =
!defined(WITHOUT_POSTGRESQL_DRIVER)=0A=
-LIB_DEPENDS+=3D pq[+][+].4:${PORTSDIR}/databases/postgresql-libpq++=0A=
-CONFIGURE_ARGS+=3D --enable-pgsql =
--with-pgsql-includes=3D${LOCALBASE}/include=0A=
+.if defined(WITH_PGSQL)=0A=
+USE_PGSQL?=3D YES=0A=
CONFIGURE_MODULES+=3D "gpgsql"=0A=
-CFLAGS+=3D -DDLLIMPORT=3D""=0A=
+PLIST_SUB+=3D WITHPGSQL=3D""=0A=
.else=0A=
-CONFIGURE_ARGS+=3D --disable-pgsql=0A=
+CONFIGURE_ARG+=3D --disable-pgsql=0A=
+PLIST_SUB+=3D WITHPGSQL=3D"@comment "=0A=
.endif=0A=
=0A=
-.if defined(WITH_MYSQL_DRIVER)=0A=
+.if defined(WITH_MYSQL)=0A=
USE_MYSQL?=3D YES=0A=
-CONFIGURE_ARGS+=3D --enable-mysql --with-mysql-includes=3D${LOCALBASE}=0A=
CONFIGURE_MODULES+=3D "gmysql"=0A=
+CXXFLAGS+=3D -I${LOCALBASE}/include/mysql=0A=
+LDFLAGS+=3D -L${LOCALBASE}/lib/mysql=0A=
PLIST_SUB+=3D WITHMYSQL=3D""=0A=
.else=0A=
CONFIGURE_ARGS+=3D --disable-mysql=0A=
PLIST_SUB+=3D WITHMYSQL=3D"@comment "=0A=
.endif=0A=
=0A=
-.if defined(WITH_LDAP)=0A=
+.if defined(WITH_OPENLDAP)=0A=
USE_OPENLDAP?=3D YES=0A=
CONFIGURE_MODULES+=3D "ldap"=0A=
-PLIST_SUB+=3D WITHLDAP=3D""=0A=
CXXFLAGS+=3D -L${LOCALBASE}/lib -DLDAP_DEPRECATED=3D1=0A=
+PLIST_SUB+=3D WITHOPENLDAP=3D""=0A=
.else=0A=
-PLIST_SUB+=3D WITHLDAP=3D"@comment "=0A=
+PLIST_SUB+=3D WITHOPENLDAP=3D"@comment "=0A=
.endif=0A=
=0A=
.if defined(WITH_SQLITE)=0A=
-LIB_DEPENDS+=3D sqlite.2:${PORTSDIR}/databases/sqlite2=0A=
-CONFIGURE_ARGS+=3D --enable-sqlite=0A=
+USE_SQLITE?=3D 2=0A=
CONFIGURE_MODULES+=3D "gsqlite"=0A=
-PLIST_SUB+=3D WITHSQLLITE=3D""=0A=
+PLIST_SUB+=3D WITHSQLITE=3D""=0A=
.else=0A=
-CONFIGURE_ARGS+=3D --disable-sqlite=0A=
-PLIST_SUB+=3D WITHSQLLITE=3D"@comment "=0A=
+PLIST_SUB+=3D WITHSQLITE=3D"@comment "=0A=
.endif=0A=
=0A=
-.if defined(POWERDNS_WITH_RECURSOR)=0A=
-USE_RC_SUBR+=3D pdns_recursor=0A=
-CONFIGURE_ARGS+=3D --enable-recursor=0A=
-PLIST_SUB+=3D RECURSOR=3D""=0A=
+.if defined(WITH_SQLITE3)=0A=
+USE_SQLITE?=3D 3=0A=
+CONFIGURE_MODULES+=3D "sqlite"=0A=
+PLIST_SUB+=3D WITHSQLITE3=3D""=0A=
.else=0A=
-PLIST_SUB+=3D RECURSOR=3D"@comment "=0A=
+PLIST_SUB+=3D WITHSQLITE3=3D"@comment "=0A=
.endif=0A=
=0A=
-.if defined(POWERDNS_WITH_RECURSOR)=0A=
-.if exists(/usr/include/ucontext.h) && ${OSVERSION} >=3D 500000=0A=
-UCONTEXT!=3D ${AWK} '/setcontext/ { print "YES" }' \=0A=
- /usr/include/ucontext.h=0A=
-.if ${UCONTEXT} =3D=3D ""=0A=
-BROKEN=3D setcontext for recursor not found or FreeBSD version lower =
than 5.0=0A=
-.endif=0A=
-.endif=0A=
+.if defined(WITH_OPENDBX)=0A=
+LIB_DEPENDS+=3D opendbx.1:${PORTSDIR}/databases/opendbx=0A=
+CONFIGURE_MODULES+=3D "opendbx"=0A=
+PLIST_SUB+=3D WITHOPENDBX=3D""=0A=
+CXXFLAGS+=3D -L${LOCALBASE}/lib=0A=
+.else=0A=
+PLIST_SUB+=3D WITHOPENDBX=3D"@comment "=0A=
.endif=0A=
=0A=
.if ${OSVERSION} < 500039=0A=
USE_GCC=3D3.4=0A=
.endif=0A=
=0A=
-.if defined(NO_DESCRIBE)=0A=
-describe:=0A=
-.if defined(BATCH)=0A=
- @ ${SETENV} ${SCRIPTS_ENV} ${SH} ${FILESDIR}/configure.powerdns=0A=
-.endif=0A=
- @cd ${.CURDIR} && ${MAKE} ${__softMAKEFLAGS} BATCH=3Dyes ${.TARGET}=0A=
-.endif=0A=
-=0A=
-pre-everything::=0A=
- @ ${SETENV} ${SCRIPTS_ENV} ${SH} ${FILESDIR}/configure.powerdns=0A=
-=0A=
-post-clean:=0A=
- @ ${RM} -f ${WRKDIRPREFIX}${.CURDIR}/Makefile.inc=0A=
-=0A=
-.if defined(WITH_LDAP)=0A=
+.if defined(WITH_OPENLDAP)=0A=
post-patch:=0A=
${REINPLACE_CMD} -e 's;-I. ;-I. -I${LOCALBASE}/include ;' \=0A=
-e 's;la_LDFLAGS =3D;la_LDFLAGS =3D -L${LOCALBASE}/lib;' \=0A=
@@ -138,8 +126,8 @@=0A=
.endif=0A=
=0A=
post-install:=0A=
-.if !exists(${PREFIX}/etc/pdns.conf)=0A=
- ${INSTALL_DATA} ${PREFIX}/etc/pdns.conf-dist ${PREFIX}/etc/pdns.conf=0A=
+.if !exists(${PREFIX}/etc/pdns/pdns.conf)=0A=
+ ${INSTALL_DATA} ${PREFIX}/etc/pdns/pdns.conf-dist =
${PREFIX}/etc/pdns/pdns.conf=0A=
.endif=0A=
.if !defined(NOPORTDOCS)=0A=
${MKDIR} ${EXAMPLESDIR}=0A=
diff -ruN powerdns/Makefile.inc powerdns.new/Makefile.inc=0A=
--- powerdns/Makefile.inc Wed Feb 15 13:56:36 2006=0A=
+++ powerdns.new/Makefile.inc Thu Jan 1 01:00:00 1970=0A=
@@ -1 +0,0 @@=0A=
-WITH_POSTGRESQL_DRIVER=3DYES=0A=
diff -ruN powerdns/files/configure.powerdns =
powerdns.new/files/configure.powerdns=0A=
--- powerdns/files/configure.powerdns Sun Nov 19 16:54:44 2006=0A=
+++ powerdns.new/files/configure.powerdns Thu Jan 1 01:00:00 1970=0A=
@@ -1,70 +0,0 @@=0A=
-#!/bin/sh=0A=
-#=0A=
-# $FreeBSD: ports/dns/powerdns/files/configure.powerdns,v 1.10 =
2006/11/19 15:54:44 stefan Exp $=0A=
-#=0A=
-if [ -f ${WRKDIRPREFIX}${CURDIR2}/Makefile.inc ]; then=0A=
- exit=0A=
-fi=0A=
-=0A=
-if [ "${POWERDNS_OPTIONS}" ]; then=0A=
- set ${POWERDNS_OPTIONS}=0A=
-else=0A=
- dialog --title "configuration options" --clear \=0A=
- --checklist "\n\=0A=
-Please select desired options:" -1 -1 8 \=0A=
-PostgreSQL "PostgreSQL driver" ON \=0A=
-MySQL "MySQL driver" OFF \=0A=
-OpenLDAP "OpenLDAP backend" OFF \=0A=
-SQLite "SQLite backend" OFF \=0A=
-Recursor "Build Recursor (DEPRECATED)" OFF \=0A=
-2> /tmp/checklist.tmp.$$=0A=
-=0A=
- retval=3D$?=0A=
- if [ -s /tmp/checklist.tmp.$$ ]; then=0A=
- set `cat /tmp/checklist.tmp.$$`=0A=
- fi=0A=
- rm -f /tmp/checklist.tmp.$$=0A=
-=0A=
- case $retval in=0A=
- 0) if [ -z "$*" ]; then=0A=
- echo "Nothing selected"=0A=
- fi=0A=
- ;;=0A=
- 1) echo "Cancel pressed."=0A=
- exit 1=0A=
- ;;=0A=
- esac=0A=
-fi=0A=
-=0A=
-${MKDIR} ${WRKDIRPREFIX}${CURDIR2}=0A=
-exec > ${WRKDIRPREFIX}${CURDIR2}/Makefile.inc=0A=
-=0A=
-while [ "$1" ]; do=0A=
- case $1 in=0A=
- \"PostgreSQL\")=0A=
- echo WITH_POSTGRESQL_DRIVER=3DYES=0A=
- ;;=0A=
- \"MySQL\")=0A=
- echo WITH_MYSQL_DRIVER=3DYES=0A=
- ;;=0A=
- \"OpenLDAP\")=0A=
- echo WITH_LDAP=3DYES=0A=
- ;;=0A=
- \"SQLite\")=0A=
- echo WITH_SQLITE=3DYES=0A=
- echo SQLITE_PORT?=3Ddatabases/sqlite=0A=
- ;;=0A=
- \"Recursor\")=0A=
- echo POWERDNS_WITH_RECURSOR=3DYES=0A=
- ;;=0A=
- \"nothing\"|true)=0A=
- ;;=0A=
- *)=0A=
- echo "Invalid option(s): $*" > /dev/stderr=0A=
- rm -f ${WRKDIRPREFIX}${CURDIR2}/Makefile.inc=0A=
- exit 1=0A=
- ;;=0A=
- esac=0A=
- shift=0A=
-done=0A=
-exec > /dev/stderr=0A=
diff -ruN powerdns/files/patch-opendbx powerdns.new/files/patch-opendbx=0A=
--- powerdns/files/patch-opendbx Thu Jan 1 01:00:00 1970=0A=
+++ powerdns.new/files/patch-opendbx Sun Jan 7 17:12:05 2007=0A=
@@ -0,0 +1,1038 @@=0A=
+--- modules/opendbxbackend/odbxbackend.hh 2006-03-15 19:29:39.000000000 =
+0100=0A=
++++ modules/opendbxbackend/odbxbackend.hh 2006-09-03 11:34:13.000000000 =
+0200=0A=
+@@ -1,11 +1,10 @@=0A=
+ /*=0A=
+ * PowerDNS OpenDBX Backend=0A=
+- * Copyright (C) 2005 Norbert Sendetzky <norbert at linuxnetworks.de>=0A=
++ * Copyright (C) 2005-2006 Norbert Sendetzky =
<norbert at linuxnetworks.de>=0A=
+ *=0A=
+ * This program is free software; you can redistribute it and/or =
modify=0A=
+- * it under the terms of the GNU General Public License as published =
by=0A=
+- * the Free Software Foundation; either version 2 of the License, or=0A=
+- * any later version.=0A=
++ * it under the terms of the GNU General Public License version 2=0A=
++ * as published by the Free Software Foundation=0A=
+ *=0A=
+ * This program is distributed in the hope that it will be useful,=0A=
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of=0A=
+@@ -14,7 +13,7 @@=0A=
+ *=0A=
+ * You should have received a copy of the GNU General Public License=0A=
+ * along with this program; if not, write to the Free Software=0A=
+- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA =
02111-1307 USA=0A=
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA =
02110-1301 USA=0A=
+ */=0A=
+ =0A=
+ =0A=
+@@ -32,7 +31,6 @@=0A=
+ #include <pdns/arguments.hh>=0A=
+ #include <pdns/logger.hh>=0A=
+ #include <odbx.h>=0A=
+-#include "modules/ldapbackend/utils.hh"=0A=
+ =0A=
+ =0A=
+ #ifndef ODBXBACKEND_HH=0A=
+@@ -53,19 +51,23 @@=0A=
+ =0A=
+ class OdbxBackend : public DNSBackend=0A=
+ {=0A=
++ enum QueryType { READ, WRITE };=0A=
++=0A=
+ string m_myname;=0A=
+ string m_qname;=0A=
+ int m_default_ttl;=0A=
+ bool m_qlog;=0A=
+- odbx_t* m_handle;=0A=
++ odbx_t* m_handle[2];=0A=
+ odbx_result_t* m_result;=0A=
+ char m_escbuf[BUFLEN];=0A=
+ char m_buffer[2*BUFLEN];=0A=
++ vector<string> m_hosts[2];=0A=
+ =0A=
+- bool getRecord();=0A=
+- void execStmt( const char* stmt, unsigned long length, bool select );=0A=
+- void getDomainList( const string& query, vector<DomainInfo>* list, =
bool (*check_fcn)(u_int32_t,u_int32_t,SOAData*,DomainInfo*) );=0A=
+- string escape( const string& str );=0A=
++ string escape( const string& str, QueryType type );=0A=
++ bool connectTo( const vector<string>& host, QueryType type );=0A=
++ bool getDomainList( const string& query, vector<DomainInfo>* list, =
bool (*check_fcn)(u_int32_t,u_int32_t,SOAData*,DomainInfo*) );=0A=
++ bool execStmt( const char* stmt, unsigned long length, QueryType type =
);=0A=
++ bool getRecord( QueryType type );=0A=
+ =0A=
+ =0A=
+ public:=0A=
+@@ -107,37 +109,40 @@=0A=
+ void declareArguments( const string &suffix=3D"" )=0A=
+ {=0A=
+ declare( suffix, "backend", "OpenDBX backend","mysql" );=0A=
+- declare( suffix, "host", "Name or address of one or more DBMS =
server","127.0.0.1" );=0A=
+- declare( suffix, "port", "Port the DBMS server is listening to","" );=0A=
++ declare( suffix, "host-read", "Name or address of one or more DBMS =
server to read from","127.0.0.1" );=0A=
++ declare( suffix, "host-write", "Name or address of one or more DBMS =
server used for updates","127.0.0.1" );=0A=
++ declare( suffix, "port", "Port the DBMS server are listening to","" =
);=0A=
+ declare( suffix, "database", "Database name containing the DNS =
records","powerdns" );=0A=
+ declare( suffix, "username","User for connecting to the =
DBMS","powerdns");=0A=
+ declare( suffix, "password","Password for connecting to the =
DBMS","");=0A=
+ =0A=
+- declare( suffix, "sql-list", "AXFR query", "SELECT domain_id, name, =
type, ttl, prio, content FROM records WHERE domain_id=3D':id'" );=0A=
++ declare( suffix, "sql-list", "AXFR query", "SELECT domain_id, name, =
type, ttl, prio, content FROM records WHERE domain_id=3D:id" );=0A=
+ =0A=
+ declare( suffix, "sql-lookup", "Lookup query","SELECT domain_id, =
name, type, ttl, prio, content FROM records WHERE name=3D':name'" );=0A=
+- declare( suffix, "sql-lookupid", "Lookup query with id","SELECT =
domain_id, name, type, ttl, prio, content FROM records WHERE =
domain_id=3D':id' AND name=3D':name'" );=0A=
++ declare( suffix, "sql-lookupid", "Lookup query with id","SELECT =
domain_id, name, type, ttl, prio, content FROM records WHERE =
domain_id=3D:id AND name=3D':name'" );=0A=
+ declare( suffix, "sql-lookuptype", "Lookup query with type","SELECT =
domain_id, name, type, ttl, prio, content FROM records WHERE =
name=3D':name' AND type=3D':type'" );=0A=
+- declare( suffix, "sql-lookuptypeid", "Lookup query with type and =
id","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE =
domain_id=3D':id' AND name=3D':name' AND type=3D':type'" );=0A=
++ declare( suffix, "sql-lookuptypeid", "Lookup query with type and =
id","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE =
domain_id=3D:id AND name=3D':name' AND type=3D':type'" );=0A=
+ =0A=
+- declare( suffix, "sql-zonedelete","Delete all records for this =
zone","DELETE FROM records WHERE domain_id=3D':id'" );=0A=
+- declare( suffix, "sql-zoneinfo","Get domain info","SELECT d.id, =
d.name, d.type, d.master, d.last_check, r.content FROM domains AS d LEFT =
JOIN records AS r ON d.id=3Dr.domain_id WHERE ( d.name=3D':name' AND =
r.type=3D'SOA' ) OR ( d.name=3D':name' AND r.domain_id IS NULL )" );=0A=
++ declare( suffix, "sql-zonedelete","Delete all records for this =
zone","DELETE FROM records WHERE domain_id=3D:id" );=0A=
++ declare( suffix, "sql-zoneinfo","Get domain info","SELECT d.id, =
d.name, d.type, d.master, d.last_check, r.content FROM domains d LEFT =
JOIN records r ON ( d.id=3Dr.domain_id AND r.type=3D'SOA' ) WHERE =
d.name=3D':name' AND d.status=3D'A'" );=0A=
+ =0A=
+ declare( suffix, "sql-transactbegin", "Start transaction", "BEGIN" );=0A=
+ declare( suffix, "sql-transactend", "Finish transaction", "COMMIT" );=0A=
+ declare( suffix, "sql-transactabort", "Abort transaction", =
"ROLLBACK" );=0A=
+ =0A=
+ declare( suffix, "sql-insert-slave","Add slave domain", "INSERT INTO =
domains ( name, type, master, account ) VALUES ( '%s', 'SLAVE', '%s', =
'%s' )" );=0A=
+- declare( suffix, "sql-insert-record","Feed record into table", =
"INSERT INTO records ( domain_id, name, type, ttl, prio, content ) =
VALUES ( '%d', '%s', '%s', '%d', '%d', '%s' )" );=0A=
++ declare( suffix, "sql-insert-record","Feed record into table", =
"INSERT INTO records ( domain_id, name, type, ttl, prio, content ) =
VALUES ( %d, '%s', '%s', %d, %d, '%s' )" );=0A=
+ =0A=
+- declare( suffix, "sql-update-serial", "Set zone to notified", =
"UPDATE domains SET notified_serial=3D'%d' WHERE id=3D'%d'" );=0A=
+- declare( suffix, "sql-update-lastcheck", "Set time of last check", =
"UPDATE domains SET last_check=3D'%d' WHERE id=3D'%d'" );=0A=
++ declare( suffix, "sql-update-serial", "Set zone to notified", =
"UPDATE domains SET notified_serial=3D%d WHERE id=3D%d" );=0A=
++ declare( suffix, "sql-update-lastcheck", "Set time of last check", =
"UPDATE domains SET last_check=3D%d WHERE id=3D%d" );=0A=
+ =0A=
+- declare( suffix, "sql-master", "Get master record for zone", "SELECT =
master FROM domains WHERE name=3D':name' AND type=3D'SLAVE'" );=0A=
++ declare( suffix, "sql-master", "Get master record for zone", "SELECT =
master FROM domains WHERE name=3D':name' AND status=3D'A' AND =
type=3D'SLAVE'" );=0A=
+ declare( suffix, "sql-supermaster","Get supermaster info", "SELECT =
account FROM supermasters WHERE ip=3D':ip' AND nameserver=3D':ns'" );=0A=
+ =0A=
+- declare( suffix, "sql-infoslaves", "Get all unfresh slaves", "SELECT =
d.id, d.name, d.master, d.notified_serial, d.last_check, r.change_date, =
r.content FROM domains AS d LEFT JOIN records AS r ON d.id=3Dr.domain_id =
WHERE ( d.type=3D'SLAVE' AND r.type=3D'SOA' ) OR ( d.type=3D'SLAVE' AND =
r.domain_id IS NULL )" );=0A=
+- declare( suffix, "sql-infomasters", "Get all updated masters", =
"SELECT d.id, d.name, d.master, d.notified_serial, d.last_check, =
r.change_date, r.content FROM domains AS d, records AS r WHERE =
d.type=3D'MASTER' AND d.id=3Dr.domain_id AND r.type=3D'SOA'" );=0A=
++ declare( suffix, "sql-infoslaves", "Get all unfresh slaves", "SELECT =
d.id, d.name, d.master, d.notified_serial, d.last_check, r.change_date, =
r.content FROM domains d LEFT JOIN records r ON ( d.id=3Dr.domain_id AND =
r.type=3D'SOA' ) WHERE d.status=3D'A' AND d.type=3D'SLAVE'" );=0A=
++ declare( suffix, "sql-infomasters", "Get all updated masters", =
"SELECT d.id, d.name, d.master, d.notified_serial, d.last_check, =
r.change_date, r.content FROM domains d JOIN records r ON =
d.id=3Dr.domain_id WHERE d.status=3D'A' AND d.type=3D'MASTER' AND =
r.type=3D'SOA'" );=0A=
++=0A=
++ declare( suffix, "host", "depricated, use host-read and host-write =
instead","" );=0A=
+ }=0A=
+ =0A=
+ =0A=
+--- modules/opendbxbackend/odbxbackend.cc 2006-03-15 19:29:39.000000000 =
+0100=0A=
++++ modules/opendbxbackend/odbxbackend.cc 2006-06-17 11:39:04.000000000 =
+0200=0A=
+@@ -2,62 +2,80 @@=0A=
+ =0A=
+ =0A=
+ =0A=
+-unsigned int odbx_host_index =3D 0;=0A=
++inline string& strbind( const string& search, const string& replace, =
string& subject )=0A=
++{=0A=
++ size_t pos =3D 0;=0A=
++=0A=
++ while( ( pos =3D subject.find( search, pos ) ) !=3D string::npos )=0A=
++ {=0A=
++ subject.replace( pos, search.size(), replace );=0A=
++ pos +=3D replace.size();=0A=
++ }=0A=
++=0A=
++ return subject;=0A=
++}=0A=
++=0A=
++=0A=
++=0A=
++inline string& toLowerByRef( string& str )=0A=
++{=0A=
++ for( unsigned int i =3D 0; i < str.length(); i++ )=0A=
++ {=0A=
++ str[i] =3D dns_tolower( str[i] );=0A=
++ }=0A=
++=0A=
++ return str;=0A=
++}=0A=
+ =0A=
+ =0A=
+ =0A=
+ OdbxBackend::OdbxBackend( const string& suffix )=0A=
+ {=0A=
+- int err =3D -1;=0A=
+- unsigned int idx, i, h;=0A=
+ vector<string> hosts;=0A=
+ =0A=
+ =0A=
+ try=0A=
+ {=0A=
+ m_result =3D NULL;=0A=
++ m_handle[READ] =3D NULL;=0A=
++ m_handle[WRITE] =3D NULL;=0A=
+ m_myname =3D "[OpendbxBackend]";=0A=
+ m_default_ttl =3D arg().asNum( "default-ttl" );=0A=
+ m_qlog =3D arg().mustDo( "query-logging" );=0A=
+ =0A=
+ setArgPrefix( "opendbx" + suffix );=0A=
+- stringtok( hosts, getArg( "host" ), ", " );=0A=
+ =0A=
+- idx =3D odbx_host_index++ % hosts.size();=0A=
+-=0A=
+- for( i =3D 0; i < hosts.size(); i++ )=0A=
++ if( getArg( "host" ).size() > 0 )=0A=
+ {=0A=
+- h =3D ( idx + i ) % hosts.size();=0A=
+- if( !( err =3D odbx_init( &m_handle, getArg( "backend" ).c_str(), =
hosts[h].c_str(), getArg( "port" ).c_str() ) ) ) { break; }=0A=
++ L.log( m_myname + " WARNING: Using depricated opendbx-host =
parameter", Logger::Warning );=0A=
++ stringtok( m_hosts[READ], getArg( "host" ), ", " );=0A=
++ m_hosts[WRITE] =3D m_hosts[READ];=0A=
+ }=0A=
+-=0A=
+- if( err < 0 )=0A=
++ else=0A=
+ {=0A=
+- L.log( m_myname + " OdbxBackend: Unable to connect to server - " + =
string( odbx_error( m_handle, err ) ), Logger::Error );=0A=
+- throw( AhuException( "Fatal: odbx_init() failed" ) );=0A=
++ stringtok( m_hosts[READ], getArg( "host-read" ), ", " );=0A=
++ stringtok( m_hosts[WRITE], getArg( "host-write" ), ", " );=0A=
+ }=0A=
+ =0A=
+- if( ( err =3D odbx_bind_simple( m_handle, getArg( "database" =
).c_str(), getArg( "username" ).c_str(), getArg( "password" ).c_str() ) =
) < 0 )=0A=
+- {=0A=
+- L.log( m_myname + " OdbxBackend: Unable to bind to database - " + =
string( odbx_error( m_handle, err ) ), Logger::Error );=0A=
+- throw( AhuException( "Fatal: odbx_bind_simple() failed" ) );=0A=
+- }=0A=
++ if( !connectTo( m_hosts[READ], READ ) ) { throw( AhuException( =
"Fatal: Connecting to server for reading failed" ) ); }=0A=
++ if( !connectTo( m_hosts[WRITE], WRITE ) ) { throw( AhuException( =
"Fatal: Connecting to server for writing failed" ) ); }=0A=
+ }=0A=
+ catch( exception& e )=0A=
+ {=0A=
+- L.log( m_myname + " OdbxBackend: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Fatal: STL exception" ) );=0A=
++ L.log( m_myname + " OdbxBackend(): Caught STL exception - " + =
e.what(), Logger::Error );=0A=
++ throw( AhuException( "Fatal: STL exception" ) );=0A=
+ }=0A=
+-=0A=
+- L.log( m_myname + " Connection succeeded", Logger::Notice );=0A=
+ }=0A=
+ =0A=
+ =0A=
+ =0A=
+ OdbxBackend::~OdbxBackend()=0A=
+ {=0A=
+- odbx_unbind( m_handle );=0A=
+- odbx_finish( m_handle );=0A=
++ odbx_unbind( m_handle[WRITE] );=0A=
++ odbx_unbind( m_handle[READ] );=0A=
++=0A=
++ odbx_finish( m_handle[WRITE] );=0A=
++ odbx_finish( m_handle[READ] );=0A=
+ }=0A=
+ =0A=
+ =0A=
+@@ -65,17 +83,17 @@=0A=
+ bool OdbxBackend::getDomainInfo( const string& domain, DomainInfo& di )=0A=
+ {=0A=
+ const char* tmp;=0A=
+- string stmt;=0A=
+ =0A=
+ =0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " getDomainInfo()", Logger::Debug ) );=0A=
+ =0A=
+- stmt =3D strbind( ":name", escape( toLower( domain ) ), getArg( =
"sql-zoneinfo" ) );=0A=
+- execStmt( stmt.c_str(), stmt.size(), true );=0A=
++ string stmt =3D getArg( "sql-zoneinfo" );=0A=
++ string& stmtref =3D strbind( ":name", escape( toLower( domain ), =
READ ), stmt );=0A=
+ =0A=
+- if( !getRecord() ) { return false; }=0A=
++ if( !execStmt( stmtref.c_str(), stmtref.size(), READ ) ) { return =
false; }=0A=
++ if( !getRecord( READ ) ) { return false; }=0A=
+ =0A=
+ do=0A=
+ {=0A=
+@@ -95,7 +113,7 @@=0A=
+ =0A=
+ if( ( tmp =3D odbx_field_value( m_result, 1 ) ) !=3D NULL )=0A=
+ {=0A=
+- di.zone =3D string( tmp );=0A=
++ di.zone =3D string( tmp, odbx_field_length( m_result, 1 ) );=0A=
+ }=0A=
+ =0A=
+ if( ( tmp =3D odbx_field_value( m_result, 2 ) ) !=3D NULL )=0A=
+@@ -112,7 +130,7 @@=0A=
+ =0A=
+ if( ( tmp =3D odbx_field_value( m_result, 3 ) ) !=3D NULL )=0A=
+ {=0A=
+- di.master =3D string( tmp );=0A=
++ di.master =3D string( tmp, odbx_field_length( m_result, 3 ) );=0A=
+ }=0A=
+ =0A=
+ if( ( tmp =3D odbx_field_value( m_result, 5 ) ) !=3D NULL )=0A=
+@@ -125,16 +143,16 @@=0A=
+ SOAData sd;=0A=
+ =0A=
+ sd.serial =3D 0;=0A=
+- DNSPacket::fillSOAData( string( tmp ), sd );=0A=
++ DNSPacket::fillSOAData( string( tmp, odbx_field_length( m_result, =
6 ) ), sd );=0A=
+ di.serial =3D sd.serial;=0A=
+ }=0A=
+ }=0A=
+- while( getRecord() );=0A=
++ while( getRecord( READ ) );=0A=
+ }=0A=
+ catch( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " getDomainInfo: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return true;=0A=
+@@ -144,11 +162,6 @@=0A=
+ =0A=
+ bool OdbxBackend::list( const string& target, int zoneid )=0A=
+ {=0A=
+- string stmt;=0A=
+- size_t len;=0A=
+-=0A=
+-=0A=
+-=0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " list()", Logger::Debug ) );=0A=
+@@ -156,22 +169,29 @@=0A=
+ m_qname =3D "";=0A=
+ m_result =3D NULL;=0A=
+ =0A=
+- len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );=0A=
++ size_t len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", =
zoneid );=0A=
+ =0A=
+- if( len < 0 || len > sizeof( m_buffer ) - 1 )=0A=
++ if( len < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " list: Unable to convert zone id to string", =
Logger::Error );=0A=
+- throw( DBException( "Error: Libc error" ) );=0A=
++ L.log( m_myname + " list: Unable to convert zone id to string - =
format error", Logger::Error );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+- stmt =3D strbind( ":id", string( m_buffer, len ), getArg( "sql-list" =
) );=0A=
++ if( len > sizeof( m_buffer ) - 1 )=0A=
++ {=0A=
++ L.log( m_myname + " list: Unable to convert zone id to string - =
insufficient buffer space", Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
++=0A=
++ string stmt =3D getArg( "sql-list" );=0A=
++ string& stmtref =3D strbind( ":id", string( m_buffer, len ), stmt );=0A=
+ =0A=
+- execStmt( stmt.c_str(), stmt.size(), true );=0A=
++ if( !execStmt( stmtref.c_str(), stmtref.size(), READ ) ) { return =
false; }=0A=
+ }=0A=
+ catch( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " list: Caught STL exception - " + e.what(), =
Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return true;=0A=
+@@ -181,23 +201,24 @@=0A=
+ =0A=
+ void OdbxBackend::lookup( const QType& qtype, const string& qname, =
DNSPacket* dnspkt, int zoneid )=0A=
+ {=0A=
+- string stmt;=0A=
+-=0A=
+-=0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " lookup()", Logger::Debug ) );=0A=
+ =0A=
++ string stmt;=0A=
++ string& stmtref =3D stmt;=0A=
++=0A=
+ m_result =3D NULL;=0A=
+ m_qname =3D qname;=0A=
+- =0A=
++=0A=
+ if( zoneid < 0 )=0A=
+ {=0A=
+ if( qtype.getCode() =3D=3D QType::ANY )=0A=
+ {=0A=
+ stmt =3D getArg( "sql-lookup" );=0A=
+ } else {=0A=
+- stmt =3D strbind( ":type", qtype.getName(), getArg( =
"sql-lookuptype" ) );=0A=
++ stmt =3D getArg( "sql-lookuptype" );=0A=
++ stmtref =3D strbind( ":type", qtype.getName(), stmt );=0A=
+ }=0A=
+ }=0A=
+ else=0A=
+@@ -206,22 +227,34 @@=0A=
+ {=0A=
+ stmt =3D getArg( "sql-lookupid" );=0A=
+ } else {=0A=
+- stmt =3D strbind( ":type", qtype.getName(), getArg( =
"sql-lookuptypeid" ) );=0A=
++ stmt =3D getArg( "sql-lookuptypeid" );=0A=
++ stmtref =3D strbind( ":type", qtype.getName(), stmt );=0A=
+ }=0A=
+- =0A=
++=0A=
+ size_t len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", =
zoneid );=0A=
+ =0A=
+- if( len < 0 || len > sizeof( m_buffer ) - 1 )=0A=
++ if( len < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " lookup: Unable to convert zone id to string", =
Logger::Error );=0A=
++ L.log( m_myname + " lookup: Unable to convert zone id to string - =
format error", Logger::Error );=0A=
+ throw( DBException( "Error: Libc error" ) );=0A=
+ }=0A=
+ =0A=
+- stmt =3D strbind( ":id", string( m_buffer, len ), stmt );=0A=
++ if( len > sizeof( m_buffer ) - 1 )=0A=
++ {=0A=
++ L.log( m_myname + " lookup: Unable to convert zone id to string - =
insufficient buffer space", Logger::Error );=0A=
++ throw( DBException( "Error: Libc error" ) );=0A=
++ }=0A=
++=0A=
++ stmtref =3D strbind( ":id", string( m_buffer, len ), stmtref );=0A=
+ }=0A=
+ =0A=
+- stmt =3D strbind( ":name", escape( toLower( qname ) ), stmt );=0A=
+- execStmt( stmt.c_str(), stmt.size(), true );=0A=
++ string tmp =3D qname;=0A=
++ stmtref =3D strbind( ":name", escape( toLowerByRef( tmp ), READ ), =
stmtref );=0A=
++=0A=
++ if( !execStmt( stmtref.c_str(), stmtref.size(), READ ) )=0A=
++ {=0A=
++ throw( DBException( "Error: DB statement failed" ) );=0A=
++ }=0A=
+ }=0A=
+ catch( exception& e )=0A=
+ {=0A=
+@@ -241,7 +274,7 @@=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " get()", Logger::Debug ) );=0A=
+ =0A=
+- if( getRecord() )=0A=
++ if( getRecord( READ ) )=0A=
+ {=0A=
+ rr.content =3D "";=0A=
+ rr.priority =3D 0;=0A=
+@@ -257,7 +290,7 @@=0A=
+ =0A=
+ if( m_qname.empty() && ( tmp =3D odbx_field_value( m_result, 1 ) ) =
!=3D NULL )=0A=
+ {=0A=
+- rr.qname =3D string( tmp );=0A=
++ rr.qname =3D string( tmp, odbx_field_length( m_result, 1 ) );=0A=
+ }=0A=
+ =0A=
+ if( ( tmp =3D odbx_field_value( m_result, 2 ) ) !=3D NULL )=0A=
+@@ -277,7 +310,7 @@=0A=
+ =0A=
+ if( ( tmp =3D odbx_field_value( m_result, 5 ) ) !=3D NULL )=0A=
+ {=0A=
+- rr.content =3D string( tmp );=0A=
++ rr.content =3D string( tmp, odbx_field_length( m_result, 5 ) );=0A=
+ }=0A=
+ =0A=
+ return true;=0A=
+@@ -286,7 +319,7 @@=0A=
+ catch( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " get: Caught STL exception - " + e.what(), =
Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return false;=0A=
+@@ -302,15 +335,30 @@=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " setFresh()", Logger::Debug ) );=0A=
+ =0A=
++ if( !m_handle[WRITE] && !connectTo( m_hosts[WRITE], WRITE ) )=0A=
++ {=0A=
++ L.log( m_myname + " setFresh: Master server is unreachable", =
Logger::Error );=0A=
++ throw( DBException( "Error: Server unreachable" ) );=0A=
++ }=0A=
++=0A=
+ len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( =
"sql-update-lastcheck" ).c_str(), time( 0 ), domain_id );=0A=
+ =0A=
+- if( len < 0 || len > sizeof( m_buffer ) - 1 )=0A=
++ if( len < 0 )=0A=
++ {=0A=
++ L.log( m_myname + " setFresh: Unable to insert values into =
statement '" + getArg( "sql-update-lastcheck" ) + "' - format error", =
Logger::Error );=0A=
++ throw( DBException( "Error: Libc error" ) );=0A=
++ }=0A=
++=0A=
++ if( len > sizeof( m_buffer ) - 1 )=0A=
+ {=0A=
+- L.log( m_myname + " setFresh: Unable to insert values into =
statement '" + getArg( "sql-update-lastcheck" ) + "'", Logger::Error );=0A=
++ L.log( m_myname + " setFresh: Unable to insert values into =
statement '" + getArg( "sql-update-lastcheck" ) + "' - insufficient =
buffer space", Logger::Error );=0A=
+ throw( DBException( "Error: Libc error" ) );=0A=
+ }=0A=
+ =0A=
+- execStmt( m_buffer, len, false );=0A=
++ if( !execStmt( m_buffer, len, WRITE ) )=0A=
++ {=0A=
++ throw( DBException( "Error: DB statement failed" ) );=0A=
++ }=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+@@ -323,22 +371,34 @@=0A=
+ =0A=
+ void OdbxBackend::setNotified( u_int32_t domain_id, u_int32_t serial )=0A=
+ {=0A=
+- size_t len;=0A=
+-=0A=
+-=0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " setNotified()", Logger::Debug ) );=0A=
+ =0A=
+- len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( =
"sql-update-serial" ).c_str(), serial, domain_id );=0A=
++ if( !m_handle[WRITE] && !connectTo( m_hosts[WRITE], WRITE ) )=0A=
++ {=0A=
++ L.log( m_myname + " setFresh: Master server is unreachable", =
Logger::Error );=0A=
++ throw( DBException( "Error: Server unreachable" ) );=0A=
++ }=0A=
+ =0A=
+- if( len < 0 || len > sizeof( m_buffer ) - 1 )=0A=
++ size_t len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( =
"sql-update-serial" ).c_str(), serial, domain_id );=0A=
++=0A=
++ if( len < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " setNotified: Unable to insert values into =
statement '" + getArg( "sql-update-serial" ) + "'", Logger::Error );=0A=
++ L.log( m_myname + " setNotified: Unable to insert values into =
statement '" + getArg( "sql-update-serial" ) + "' - format error", =
Logger::Error );=0A=
+ throw( DBException( "Error: Libc error" ) );=0A=
+ }=0A=
+ =0A=
+- execStmt( m_buffer, len, false );=0A=
++ if( len > sizeof( m_buffer ) - 1 )=0A=
++ {=0A=
++ L.log( m_myname + " setNotified: Unable to insert values into =
statement '" + getArg( "sql-update-serial" ) + "' - insufficient buffer =
space", Logger::Error );=0A=
++ throw( DBException( "Error: Libc error" ) );=0A=
++ }=0A=
++=0A=
++ if( !execStmt( m_buffer, len, WRITE ) )=0A=
++ {=0A=
++ throw( DBException( "Error: DB statement failed" ) );=0A=
++ }=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+@@ -351,17 +411,15 @@=0A=
+ =0A=
+ bool OdbxBackend::isMaster( const string& domain, const string& ip )=0A=
+ {=0A=
+- string stmt;=0A=
+-=0A=
+-=0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " isMaster()", Logger::Debug ) );=0A=
+ =0A=
+- stmt =3D strbind( ":name", escape( toLower( domain ) ), getArg( =
"sql-master" ) );=0A=
+- execStmt( stmt.c_str(), stmt.size(), true );=0A=
++ string stmt =3D getArg( "sql-master" );=0A=
++ string& stmtref =3D strbind( ":name", escape( toLower( domain ), =
READ ), stmt );=0A=
+ =0A=
+- if( !getRecord() ) { return false; }=0A=
++ if( !execStmt( stmtref.c_str(), stmtref.size(), READ ) ) { return =
false; }=0A=
++ if( !getRecord( READ ) ) { return false; }=0A=
+ =0A=
+ do=0A=
+ {=0A=
+@@ -369,16 +427,17 @@=0A=
+ {=0A=
+ if( !strcmp( odbx_field_value( m_result, 0 ), ip.c_str() ) )=0A=
+ {=0A=
++ while( getRecord( READ ) );=0A=
+ return true;=0A=
+ }=0A=
+ }=0A=
+ }=0A=
+- while( getRecord() );=0A=
++ while( getRecord( READ ) );=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " isMaster: Caught STL exception - " + e.what(), =
Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return false;=0A=
+@@ -392,15 +451,17 @@=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " getUnfreshSlaveInfos()", Logger::Debug ) );=0A=
+ =0A=
+- if( unfresh !=3D NULL )=0A=
++ if( unfresh =3D=3D NULL )=0A=
+ {=0A=
+- getDomainList( getArg( "sql-infoslaves" ), unfresh, &checkSlave );=0A=
++ L.log( m_myname + " getUnfreshSlaveInfos: invalid parameter - NULL =
pointer", Logger::Error );=0A=
++ return;=0A=
+ }=0A=
++=0A=
++ getDomainList( getArg( "sql-infoslaves" ), unfresh, &checkSlave );=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " getUnfreshSlaveInfo: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
+ }=0A=
+ }=0A=
+ =0A=
+@@ -412,15 +473,17 @@=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " getUpdatedMasters()", Logger::Debug ) );=0A=
+ =0A=
+- if( updated !=3D NULL )=0A=
++ if( updated =3D=3D NULL )=0A=
+ {=0A=
+- getDomainList( getArg( "sql-infomasters" ), updated, &checkMaster );=0A=
++ L.log( m_myname + " getUpdatedMasters: invalid parameter - NULL =
pointer", Logger::Error );=0A=
++ return;=0A=
+ }=0A=
++=0A=
++ getDomainList( getArg( "sql-infomasters" ), updated, &checkMaster );=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " getUpdatedMasters: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
+ }=0A=
+ }=0A=
+ =0A=
+@@ -428,43 +491,41 @@=0A=
+ =0A=
+ bool OdbxBackend::superMasterBackend( const string& ip, const string& =
domain, const vector<DNSResourceRecord>& set, string* account, =
DNSBackend** ddb )=0A=
+ {=0A=
+- string stmt;=0A=
+- vector<DNSResourceRecord>::const_iterator i;=0A=
+-=0A=
+-=0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " superMasterBackend()", Logger::Debug ) );=0A=
+ =0A=
+ if( account !=3D NULL && ddb !=3D NULL )=0A=
+ {=0A=
++ vector<DNSResourceRecord>::const_iterator i;=0A=
++=0A=
+ for( i =3D set.begin(); i !=3D set.end(); i++ )=0A=
+ {=0A=
+- stmt =3D strbind( ":ip", escape( ip ), getArg( "sql-supermaster" ) =
);=0A=
+- stmt =3D strbind( ":ns", escape( i->content ), stmt );=0A=
+-=0A=
+- execStmt( stmt.c_str(), stmt.size(), true );=0A=
++ string stmt =3D getArg( "sql-supermaster" );=0A=
++ string& stmtref =3D strbind( ":ip", escape( ip, READ ), stmt );=0A=
++ stmtref =3D strbind( ":ns", escape( i->content, READ ), stmtref );=0A=
+ =0A=
+- if( !getRecord() ) { return false; }=0A=
++ if( !execStmt( stmtref.c_str(), stmtref.size(), READ ) ) { return =
false; }=0A=
+ =0A=
+- do=0A=
++ if( getRecord( READ ) )=0A=
+ {=0A=
+ if( odbx_field_value( m_result, 0 ) !=3D NULL )=0A=
+ {=0A=
+ *account =3D string( odbx_field_value( m_result, 0 ), =
odbx_field_length( m_result, 0 ) );=0A=
+ }=0A=
+- }=0A=
+- while( getRecord() );=0A=
+ =0A=
+- *ddb=3Dthis;=0A=
+- return true;=0A=
++ while( getRecord( READ ) );=0A=
++=0A=
++ *ddb=3Dthis;=0A=
++ return true;=0A=
++ }=0A=
+ }=0A=
+ }=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " superMasterBackend: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return false;=0A=
+@@ -474,28 +535,38 @@=0A=
+ =0A=
+ bool OdbxBackend::createSlaveDomain( const string& ip, const string& =
domain, const string& account )=0A=
+ {=0A=
+- size_t len;=0A=
+-=0A=
+-=0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " createSlaveDomain()", Logger::Debug ) );=0A=
+ =0A=
+- len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( =
"sql-insert-slave" ).c_str(), escape( toLower( domain ) ).c_str(),=0A=
+- escape( ip ).c_str(), escape( account ).c_str() );=0A=
++ if( !m_handle[WRITE] && !connectTo( m_hosts[WRITE], WRITE ) )=0A=
++ {=0A=
++ L.log( m_myname + " createSlaveDomain: Master server is =
unreachable", Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
+ =0A=
+- if( len < 0 || len > sizeof( m_buffer ) - 1 )=0A=
++ string tmp =3D domain;=0A=
++ size_t len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( =
"sql-insert-slave" ).c_str(), escape( toLowerByRef( tmp ), WRITE =
).c_str(),=0A=
++ escape( ip, WRITE ).c_str(), escape( account, WRITE ).c_str() );=0A=
++=0A=
++ if( len < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " createSlaveDomain: Unable to insert values in =
statement '" + getArg( "sql-insert-slave" ) + "'", Logger::Error );=0A=
+- throw( DBException( "Error: Libc error" ) );=0A=
++ L.log( m_myname + " createSlaveDomain: Unable to insert values in =
statement '" + getArg( "sql-insert-slave" ) + "' - format error", =
Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
++=0A=
++ if( len > sizeof( m_buffer ) - 1 )=0A=
++ {=0A=
++ L.log( m_myname + " createSlaveDomain: Unable to insert values in =
statement '" + getArg( "sql-insert-slave" ) + "' - insufficient buffer =
space", Logger::Error );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+- execStmt( m_buffer, len, false );=0A=
++ if( !execStmt( m_buffer, len, WRITE ) ) { return false; }=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " createSlaveDomain: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return true;=0A=
+@@ -505,28 +576,39 @@=0A=
+ =0A=
+ bool OdbxBackend::feedRecord( const DNSResourceRecord& rr )=0A=
+ {=0A=
+- size_t len;=0A=
+-=0A=
+-=0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " feedRecord()", Logger::Debug ) );=0A=
+ =0A=
+- len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( =
"sql-insert-record" ).c_str(), rr.domain_id,=0A=
+- escape( toLower( rr.qname ) ).c_str(), rr.qtype.getName().c_str(), =
rr.ttl, rr.priority, escape( rr.content ).c_str() );=0A=
++ if( !m_handle[WRITE] && !connectTo( m_hosts[WRITE], WRITE ) )=0A=
++ {=0A=
++ L.log( m_myname + " feedRecord: Master server is unreachable", =
Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
+ =0A=
+- if( len < 0 || len > sizeof( m_buffer ) - 1 )=0A=
++ string tmp =3D rr.qname;=0A=
++ size_t len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( =
"sql-insert-record" ).c_str(), rr.domain_id,=0A=
++ escape( toLowerByRef( tmp ), WRITE ).c_str(), =
rr.qtype.getName().c_str(), rr.ttl, rr.priority,=0A=
++ escape( rr.content, WRITE ).c_str() );=0A=
++=0A=
++ if( len < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " feedRecord: Unable to insert values in =
statement '" + getArg( "sql-insert-record" ) + "'", Logger::Error );=0A=
+- throw( DBException( "Error: Libc error" ) );=0A=
++ L.log( m_myname + " feedRecord: Unable to insert values in =
statement '" + getArg( "sql-insert-record" ) + "' - format error", =
Logger::Error );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+- execStmt( m_buffer, len, false );=0A=
++ if( len > sizeof( m_buffer ) - 1 )=0A=
++ {=0A=
++ L.log( m_myname + " feedRecord: Unable to insert values in =
statement '" + getArg( "sql-insert-record" ) + "' - insufficient buffer =
space", Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
++=0A=
++ if( !execStmt( m_buffer, len, WRITE ) ) { return false; }=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " feedRecord: Caught STL exception - " + e.what(), =
Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return true;=0A=
+@@ -536,33 +618,41 @@=0A=
+ =0A=
+ bool OdbxBackend::startTransaction( const string& domain, int zoneid )=0A=
+ {=0A=
+- size_t len;=0A=
+- string stmt;=0A=
+-=0A=
+-=0A=
+ try=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " startTransaction()", Logger::Debug ) );=0A=
+ =0A=
+- stmt =3D getArg( "sql-transactbegin" );=0A=
+- execStmt( stmt.c_str(), stmt.size(), false );=0A=
++ if( !m_handle[WRITE] && !connectTo( m_hosts[WRITE], WRITE ) )=0A=
++ {=0A=
++ L.log( m_myname + " startTransaction: Master server is =
unreachable", Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
+ =0A=
+- len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );=0A=
++ string& stmtref =3D const_cast<string&>( getArg( "sql-transactbegin" =
) );=0A=
++ if( !execStmt( stmtref.c_str(), stmtref.size(), WRITE ) ) { return =
false; }=0A=
+ =0A=
+- if( len < 0 || len > sizeof( m_buffer ) - 1 )=0A=
++ size_t len =3D snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", =
zoneid );=0A=
++=0A=
++ if( len < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " lookup: Unable to convert zone id to string", =
Logger::Error );=0A=
+- throw( DBException( "Error: Libc error" ) );=0A=
++ L.log( m_myname + " startTransaction: Unable to convert zone id to =
string - format error", Logger::Error );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+- stmt =3D strbind( ":id", string( m_buffer, len ), getArg( =
"sql-zonedelete" ) );=0A=
++ if( len > sizeof( m_buffer ) - 1 )=0A=
++ {=0A=
++ L.log( m_myname + " startTransaction: Unable to convert zone id to =
string - insufficient buffer space", Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
+ =0A=
+- execStmt( stmt.c_str(), stmt.size(), false );=0A=
++ string stmt =3D getArg( "sql-zonedelete" );=0A=
++ stmtref =3D strbind( ":id", string( m_buffer, len ), stmt );=0A=
++ if( !execStmt( stmtref.c_str(), stmtref.size(), WRITE ) ) { return =
false; }=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " startTransaction: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return true;=0A=
+@@ -576,12 +666,19 @@=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " commitTransaction()", Logger::Debug ) );=0A=
+ =0A=
+- execStmt( getArg( "sql-transactend" ).c_str(), getArg( =
"sql-transactend" ).size(), false );=0A=
++ if( !m_handle[WRITE] && !connectTo( m_hosts[WRITE], WRITE ) )=0A=
++ {=0A=
++ L.log( m_myname + " commitTransaction: Master server is =
unreachable", Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
++=0A=
++ const string& stmt =3D getArg( "sql-transactend" );=0A=
++ if( !execStmt( stmt.c_str(), stmt.size(), WRITE ) ) { return false; }=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " commitTransaction: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return true;=0A=
+@@ -595,12 +692,19 @@=0A=
+ {=0A=
+ DLOG( L.log( m_myname + " abortTransaction()", Logger::Debug ) );=0A=
+ =0A=
+- execStmt( getArg( "sql-transactabort" ).c_str(), getArg( =
"sql-transabort" ).size(), false );=0A=
++ if( !m_handle[WRITE] && !connectTo( m_hosts[WRITE], WRITE ) )=0A=
++ {=0A=
++ L.log( m_myname + " abortTransaction: Master server is =
unreachable", Logger::Error );=0A=
++ return false;=0A=
++ }=0A=
++=0A=
++ const string& stmt =3D getArg( "sql-transactabort" );=0A=
++ if( !execStmt( stmt.c_str(), stmt.size(), WRITE ) ) { return false; }=0A=
+ }=0A=
+ catch ( exception& e )=0A=
+ {=0A=
+ L.log( m_myname + " abortTransaction: Caught STL exception - " + =
e.what(), Logger::Error );=0A=
+- throw( DBException( "Error: STL exception" ) );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+ return true;=0A=
+--- modules/opendbxbackend/odbxprivate.cc 2006-03-15 19:29:39.000000000 =
+0100=0A=
++++ modules/opendbxbackend/odbxprivate.cc 2006-09-02 01:02:36.000000000 =
+0200=0A=
+@@ -2,7 +2,50 @@=0A=
+ =0A=
+ =0A=
+ =0A=
+-void OdbxBackend::execStmt( const char* stmt, unsigned long length, =
bool select )=0A=
++unsigned int odbx_host_index[2] =3D { 0, 0 };=0A=
++=0A=
++=0A=
++=0A=
++bool OdbxBackend::connectTo( const vector<string>& hosts, QueryType =
type )=0A=
++{=0A=
++ int err;=0A=
++ unsigned int h, i;=0A=
++ int idx =3D odbx_host_index[type]++ % hosts.size();=0A=
++=0A=
++=0A=
++ if( m_handle[type] )=0A=
++ {=0A=
++ odbx_unbind( m_handle[type] );=0A=
++ odbx_finish( m_handle[type] );=0A=
++ m_handle[type] =3D NULL;=0A=
++ }=0A=
++=0A=
++ for( i =3D 0; i < hosts.size(); i++ )=0A=
++ {=0A=
++ h =3D ( idx + i ) % hosts.size();=0A=
++=0A=
++ if( ( err =3D odbx_init( &(m_handle[type]), getArg( "backend" =
).c_str(), hosts[h].c_str(), getArg( "port" ).c_str() ) ) =3D=3D =
ODBX_ERR_SUCCESS )=0A=
++ {=0A=
++ if( ( err =3D odbx_bind_simple( m_handle[type], getArg( "database" =
).c_str(), getArg( "username" ).c_str(), getArg( "password" ).c_str() ) =
) =3D=3D ODBX_ERR_SUCCESS )=0A=
++ {=0A=
++ L.log( m_myname + " Database connection (" + (type ? "write" : =
"read") + ") to '" + hosts[h] + "' succeeded", Logger::Notice );=0A=
++ return true;=0A=
++ }=0A=
++=0A=
++ L.log( m_myname + " Unable to bind to database on host " + hosts[h] =
+ " - " + string( odbx_error( m_handle[type], err ) ), Logger::Error );=0A=
++ continue;=0A=
++ }=0A=
++=0A=
++ L.log( m_myname + " Unable to connect to server on host " + hosts[h] =
+ " - " + string( odbx_error( m_handle[type], err ) ), Logger::Error );=0A=
++ }=0A=
++=0A=
++ m_handle[type] =3D NULL;=0A=
++ return false;=0A=
++}=0A=
++=0A=
++=0A=
++=0A=
++bool OdbxBackend::execStmt( const char* stmt, unsigned long length, =
QueryType type )=0A=
+ {=0A=
+ int err;=0A=
+ =0A=
+@@ -11,18 +54,21 @@=0A=
+ =0A=
+ if( m_qlog ) { L.log( m_myname + " Query: " + stmt, Logger::Info ); }=0A=
+ =0A=
+- if( ( err =3D odbx_query( m_handle, stmt, length ) ) < 0 )=0A=
++ if( ( err =3D odbx_query( m_handle[type], stmt, length ) ) < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " execStmt: Unable to execute query - " + string( =
odbx_error( m_handle, err ) ), Logger::Error );=0A=
+- throw( AhuException( "Error: odbx_query() failed" ) );=0A=
++ L.log( m_myname + " execStmt: Unable to execute query - " + string( =
odbx_error( m_handle[type], err ) ), Logger::Error );=0A=
++ connectTo( m_hosts[type], type );=0A=
++ return false;=0A=
+ }=0A=
+ =0A=
+- if( !select ) { while( getRecord() ); }=0A=
++ if( type =3D=3D WRITE ) { while( getRecord( type ) ); }=0A=
++=0A=
++ return true;=0A=
+ }=0A=
+ =0A=
+ =0A=
+ =0A=
+-bool OdbxBackend::getRecord()=0A=
++bool OdbxBackend::getRecord( QueryType type )=0A=
+ {=0A=
+ int err =3D 3;=0A=
+ =0A=
+@@ -31,13 +77,19 @@=0A=
+ =0A=
+ do=0A=
+ {=0A=
++ if( err < 0 )=0A=
++ {=0A=
++ L.log( m_myname + " getRecord: Unable to get next result - " + =
string( odbx_error( m_handle[type], err ) ), Logger::Error );=0A=
++ throw( AhuException( "Error: odbx_result() failed" ) );=0A=
++ }=0A=
++=0A=
+ if( m_result !=3D NULL )=0A=
+ {=0A=
+ if( err =3D=3D 3 )=0A=
+ {=0A=
+ if( ( err =3D odbx_row_fetch( m_result ) ) < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " getRecord: Unable to get next row - " + =
string( odbx_error( m_handle, err ) ), Logger::Error );=0A=
++ L.log( m_myname + " getRecord: Unable to get next row - " + =
string( odbx_error( m_handle[type], err ) ), Logger::Error );=0A=
+ throw( AhuException( "Error: odbx_row_fetch() failed" ) );=0A=
+ }=0A=
+ =0A=
+@@ -72,13 +124,7 @@=0A=
+ m_result =3D NULL;=0A=
+ }=0A=
+ }=0A=
+- while( ( err =3D odbx_result( m_handle, &m_result, NULL, 0 ) ) > 0 );=0A=
+-=0A=
+- if( err < 0 )=0A=
+- {=0A=
+- L.log( m_myname + " getRecord: Unable to get next result - " + =
string( odbx_error( m_handle, err ) ), Logger::Error );=0A=
+- throw( AhuException( "Error: odbx_result() failed" ) );=0A=
+- }=0A=
++ while( ( err =3D odbx_result( m_handle[type], &m_result, NULL, 0 ) ) =
!=3D 0 );=0A=
+ =0A=
+ m_result =3D NULL;=0A=
+ return false;=0A=
+@@ -86,18 +132,18 @@=0A=
+ =0A=
+ =0A=
+ =0A=
+-string OdbxBackend::escape( const string& str )=0A=
++string OdbxBackend::escape( const string& str, QueryType type )=0A=
+ {=0A=
+ int err;=0A=
+ unsigned long len =3D sizeof( m_escbuf );=0A=
+ =0A=
+ =0A=
+- DLOG( L.log( m_myname + " escape()", Logger::Debug ) );=0A=
++ DLOG( L.log( m_myname + " escape(string)", Logger::Debug ) );=0A=
+ =0A=
+- if( ( err =3D odbx_escape( m_handle, str.c_str(), str.size(), =
m_escbuf, &len ) ) < 0 )=0A=
++ if( ( err =3D odbx_escape( m_handle[type], str.c_str(), str.size(), =
m_escbuf, &len ) ) < 0 )=0A=
+ {=0A=
+- L.log( m_myname + " escape: Unable to escape string - " + string( =
odbx_error( m_handle, err ) ), Logger::Error );=0A=
+- throw( AhuException( "Error: odbx_escape() failed" ) );=0A=
++ L.log( m_myname + " escape(string): Unable to escape string - " + =
string( odbx_error( m_handle[type], err ) ), Logger::Error );=0A=
++ throw( runtime_error( "odbx_escape() failed" ) );=0A=
+ }=0A=
+ =0A=
+ return string( m_escbuf, len );=0A=
+@@ -105,7 +151,7 @@=0A=
+ =0A=
+ =0A=
+ =0A=
+-void OdbxBackend::getDomainList( const string& stmt, =
vector<DomainInfo>* list, bool =
(*check_fcn)(u_int32_t,u_int32_t,SOAData*,DomainInfo*) )=0A=
++bool OdbxBackend::getDomainList( const string& stmt, =
vector<DomainInfo>* list, bool =
(*check_fcn)(u_int32_t,u_int32_t,SOAData*,DomainInfo*) )=0A=
+ {=0A=
+ const char* tmp;=0A=
+ u_int32_t nlast, nserial;=0A=
+@@ -115,9 +161,8 @@=0A=
+ =0A=
+ DLOG( L.log( m_myname + " getDomainList()", Logger::Debug ) );=0A=
+ =0A=
+- execStmt( stmt.c_str(), stmt.size(), true );=0A=
+-=0A=
+- if( !getRecord() ) { return; }=0A=
++ if( !execStmt( stmt.c_str(), stmt.size(), READ ) ) { return false; }=0A=
++ if( !getRecord( READ ) ) { return false; }=0A=
+ =0A=
+ do=0A=
+ {=0A=
+@@ -128,7 +173,7 @@=0A=
+ =0A=
+ if( ( tmp =3D odbx_field_value( m_result, 6 ) ) !=3D NULL )=0A=
+ {=0A=
+- DNSPacket::fillSOAData( string( tmp ), sd );=0A=
++ DNSPacket::fillSOAData( string( tmp, odbx_field_length( m_result, 6 =
) ), sd );=0A=
+ }=0A=
+ =0A=
+ if( !sd.serial && ( tmp =3D odbx_field_value( m_result, 5 ) ) !=3D =
NULL )=0A=
+@@ -171,7 +216,9 @@=0A=
+ list->push_back( di );=0A=
+ }=0A=
+ }=0A=
+- while( getRecord() );=0A=
++ while( getRecord( READ ) );=0A=
++=0A=
++ return true;=0A=
+ }=0A=
+ =0A=
+ =0A=
diff -ruN powerdns/files/pdns.conf powerdns.new/files/pdns.conf=0A=
--- powerdns/files/pdns.conf Mon Jul 18 14:59:51 2005=0A=
+++ powerdns.new/files/pdns.conf Sun Jan 7 23:20:21 2007=0A=
@@ -16,6 +16,15 @@=0A=
#launch=3Dgsqlite=0A=
#gsqlite-database=3D<path to your SQLite database>=0A=
=0A=
+# OpenDBX=0A=
+#launch=3Dopendbx=0A=
+#opendbx-backend=3Dmysql=0A=
+#opendbx-host=3D127.0.0.1=0A=
+#opendbx-database=3Dpdns=0A=
+#opendbx-username=3Dpdns=0A=
+#opendbx-password=3Dpdns=0A=
+=0A=
+# Autogenerated configuration file template=0A=
#################################=0A=
# allow-axfr-ips If disabled, DO allow zonetransfers from these IP =
addresses=0A=
#=0A=
@@ -242,6 +251,21 @@=0A=
# soa-minimum-ttl=3D3600=0A=
=0A=
#################################=0A=
+# soa-refresh-default Default SOA refresh=0A=
+#=0A=
+# soa-refresh-default=3D10800=0A=
+=0A=
+#################################=0A=
+# soa-retry-default Default SOA retry=0A=
+#=0A=
+# soa-retry-default=3D3600=0A=
+=0A=
+#################################=0A=
+# soa-expire-default Default SOA expire=0A=
+#=0A=
+# soa-expire-default=3D604800=0A=
+=0A=
+#################################=0A=
# soa-serial-offset Make sure that no SOA serial is less than this =
number=0A=
#=0A=
# soa-serial-offset=3D0=0A=
@@ -300,5 +324,3 @@=0A=
# wildcards Honor wildcards in the database=0A=
#=0A=
# wildcards=3D=0A=
-=0A=
-=0A=
diff -ruN powerdns/files/pdns.in powerdns.new/files/pdns.in=0A=
--- powerdns/files/pdns.in Mon Feb 20 21:46:57 2006=0A=
+++ powerdns.new/files/pdns.in Sun Jan 7 22:52:41 2007=0A=
@@ -32,4 +32,7 @@=0A=
=0A=
required_files=3D${pdns_conf}=0A=
=0A=
+monitor_cmd=3D"${command} --daemon=3Dno --guardian=3Dno =
--control-console --loglevel=3D9"=0A=
+extra_commands=3D"monitor"=0A=
+=0A=
run_rc_command "$1"=0A=
diff -ruN powerdns/files/pdns_mysql.sql powerdns.new/files/pdns_mysql.sql=0A=
--- powerdns/files/pdns_mysql.sql Mon Jan 20 07:10:35 2003=0A=
+++ powerdns.new/files/pdns_mysql.sql Sun Jan 7 23:27:10 2007=0A=
@@ -1,38 +1,50 @@=0A=
-create table domains (=0A=
- id INT auto_increment,=0A=
- name VARCHAR(255) NOT NULL,=0A=
- master VARCHAR(20) DEFAULT NULL,=0A=
- last_check INT DEFAULT NULL,=0A=
- type VARCHAR(6) NOT NULL,=0A=
- notified_serial INT DEFAULT NULL,=0A=
- account VARCHAR(40) DEFAULT NULL,=0A=
- primary key (id)=0A=
-)type=3DInnoDB;=0A=
+CREATE TABLE domains (=0A=
+ id INT auto_increment,=0A=
+ name VARCHAR(255) NOT NULL,=0A=
+ type VARCHAR(6) NOT NULL,=0A=
+ master VARCHAR(40) DEFAULT NULL,=0A=
+ account VARCHAR(40) DEFAULT NULL,=0A=
+ notified_serial INT DEFAULT NULL,=0A=
+ last_check INT DEFAULT NULL,=0A=
+CONSTRAINT pk_id=0A=
+ PRIMARY KEY (id),=0A=
+CONSTRAINT unq_name=0A=
+ UNIQUE (name)=0A=
+) type=3DInnoDB;=0A=
=0A=
-CREATE UNIQUE INDEX name_index ON domains(name);=0A=
=0A=
CREATE TABLE records (=0A=
- id INT auto_increment,=0A=
- domain_id INT DEFAULT NULL,=0A=
- name VARCHAR(255) DEFAULT NULL,=0A=
- type VARCHAR(6) DEFAULT NULL,=0A=
- content VARCHAR(255) DEFAULT NULL,=0A=
- ttl INT DEFAULT NULL,=0A=
- prio INT DEFAULT NULL,=0A=
- change_date INT DEFAULT NULL,=0A=
- primary key(id)=0A=
-)type=3DInnoDB;=0A=
-=0A=
-CREATE INDEX rec_name_index ON records(name);=0A=
-CREATE INDEX nametype_index ON records(name,type);=0A=
-CREATE INDEX domain_id ON records(domain_id);=0A=
-=0A=
-create table supermasters (=0A=
- ip VARCHAR(25) NOT NULL,=0A=
- nameserver VARCHAR(255) NOT NULL,=0A=
- account VARCHAR(40) DEFAULT NULL=0A=
+ id INT auto_increment,=0A=
+ domain_id INT DEFAULT NULL,=0A=
+ name VARCHAR(255) DEFAULT NULL,=0A=
+ type VARCHAR(6) DEFAULT NULL,=0A=
+ ttl INT DEFAULT NULL,=0A=
+ prio INT DEFAULT NULL,=0A=
+ content VARCHAR(255) DEFAULT NULL,=0A=
+ change_date INT DEFAULT NULL,=0A=
+CONSTRAINT pk_id=0A=
+ PRIMARY KEY (id),=0A=
+CONSTRAINT fk_domainid=0A=
+ FOREIGN KEY (domain_id)=0A=
+ REFERENCES domains(id)=0A=
+ ON UPDATE CASCADE=0A=
+ ON DELETE CASCADE=0A=
+) type=3DInnoDB;=0A=
+=0A=
+CREATE INDEX idx_rdomainid ON records(domain_id);=0A=
+CREATE INDEX idx_rname ON records(name);=0A=
+CREATE INDEX idx_rname_rtype ON records(name,type);=0A=
+=0A=
+=0A=
+CREATE TABLE supermasters (=0A=
+ ip VARCHAR(40) NOT NULL,=0A=
+ nameserver VARCHAR(255) NOT NULL,=0A=
+ account VARCHAR(40) DEFAULT NULL=0A=
);=0A=
=0A=
-GRANT SELECT ON supermasters TO pdns;=0A=
-GRANT ALL ON domains TO pdns;=0A=
-GRANT ALL ON records TO pdns;=0A=
+CREATE INDEX idx_smip_smns ON supermasters(ip,nameserver);=0A=
+=0A=
+=0A=
+GRANT SELECT ON supermasters TO powerdns;=0A=
+GRANT ALL ON domains TO powerdns;=0A=
+GRANT ALL ON records TO powerdns;=0A=
diff -ruN powerdns/files/pdns_postgresql.sql =
powerdns.new/files/pdns_postgresql.sql=0A=
--- powerdns/files/pdns_postgresql.sql Mon Jan 20 07:10:35 2003=0A=
+++ powerdns.new/files/pdns_postgresql.sql Sun Jan 7 23:27:10 2007=0A=
@@ -1,40 +1,52 @@=0A=
-create table domains (=0A=
- id SERIAL PRIMARY KEY,=0A=
- name VARCHAR(255) NOT NULL,=0A=
- master VARCHAR(20) DEFAULT NULL,=0A=
- last_check INT DEFAULT NULL,=0A=
- type VARCHAR(6) NOT NULL,=0A=
- notified_serial INT DEFAULT NULL,=0A=
- account VARCHAR(40) DEFAULT NULL=0A=
+CREATE TABLE domains (=0A=
+ id SERIAL,=0A=
+ name VARCHAR(255) NOT NULL,=0A=
+ type VARCHAR(6) NOT NULL,=0A=
+ master VARCHAR(40) DEFAULT NULL,=0A=
+ account VARCHAR(40) DEFAULT NULL=0A=
+ notified_serial INT DEFAULT NULL,=0A=
+ last_check INT DEFAULT NULL,=0A=
+CONSTRAINT pk_id=0A=
+ PRIMARY KEY (id),=0A=
+CONSTRAINT unq_name=0A=
+ UNIQUE (name)=0A=
);=0A=
-CREATE UNIQUE INDEX name_index ON domains(name);=0A=
+=0A=
=0A=
CREATE TABLE records (=0A=
- id SERIAL PRIMARY KEY,=0A=
- domain_id INT DEFAULT NULL,=0A=
- name VARCHAR(255) DEFAULT NULL,=0A=
- type VARCHAR(6) DEFAULT NULL,=0A=
- content VARCHAR(255) DEFAULT NULL,=0A=
- ttl INT DEFAULT NULL,=0A=
- prio INT DEFAULT NULL,=0A=
- change_date INT DEFAULT NULL,=0A=
- CONSTRAINT domain_exists=0A=
- FOREIGN KEY(domain_id) REFERENCES domains(id)=0A=
- ON DELETE CASCADE=0A=
+ id SERIAL,=0A=
+ domain_id INT DEFAULT NULL,=0A=
+ name VARCHAR(255) DEFAULT NULL,=0A=
+ type VARCHAR(6) DEFAULT NULL,=0A=
+ ttl INT DEFAULT NULL,=0A=
+ prio INT DEFAULT NULL,=0A=
+ content VARCHAR(255) DEFAULT NULL,=0A=
+ change_date INT DEFAULT NULL,=0A=
+CONSTRAINT pk_id=0A=
+ PRIMARY KEY (id),=0A=
+CONSTRAINT fk_domainid=0A=
+ FOREIGN KEY (domain_id)=0A=
+ REFERENCES domains(id)=0A=
+ ON UPDATE CASCADE=0A=
+ ON DELETE CASCADE=0A=
);=0A=
=0A=
-CREATE INDEX rec_name_index ON records(name);=0A=
-CREATE INDEX nametype_index ON records(name,type);=0A=
-CREATE INDEX domain_id ON records(domain_id);=0A=
-=0A=
-create table supermasters (=0A=
- ip VARCHAR(25) NOT NULL,=0A=
- nameserver VARCHAR(255) NOT NULL,=0A=
- account VARCHAR(40) DEFAULT NULL=0A=
+CREATE INDEX idx_rdomainid ON records(domain_id);=0A=
+CREATE INDEX idx_rname ON records(name);=0A=
+CREATE INDEX idx_rname_rtype ON records(name,type);=0A=
+=0A=
+=0A=
+CREATE TABLE supermasters (=0A=
+ ip VARCHAR(40) NOT NULL,=0A=
+ nameserver VARCHAR(255) NOT NULL,=0A=
+ account VARCHAR(40) DEFAULT NULL=0A=
);=0A=
=0A=
-GRANT SELECT ON supermasters TO pdns;=0A=
-GRANT ALL ON domains TO pdns;=0A=
-GRANT ALL ON domains_id_seq TO pdns;=0A=
-GRANT ALL ON records TO pdns;=0A=
-GRANT ALL ON records_id_seq TO pdns;=0A=
+CREATE INDEX idx_smip_smns ON supermasters(ip,nameserver);=0A=
+=0A=
+=0A=
+GRANT SELECT ON supermasters TO powerdns;=0A=
+GRANT ALL ON domains TO powerdns;=0A=
+GRANT ALL ON domains_id_seq TO powerdns;=0A=
+GRANT ALL ON records TO powerdns;=0A=
+GRANT ALL ON records_id_seq TO powerdns;=0A=
diff -ruN powerdns/files/pdns_recursor.in =
powerdns.new/files/pdns_recursor.in=0A=
--- powerdns/files/pdns_recursor.in Mon Feb 20 21:46:57 2006=0A=
+++ powerdns.new/files/pdns_recursor.in Thu Jan 1 01:00:00 1970=0A=
@@ -1,35 +0,0 @@=0A=
-#!/bin/sh=0A=
-#=0A=
-# $FreeBSD: ports/dns/powerdns/files/pdns_recursor.in,v 1.2 2006/02/20 =
20:46:57 dougb Exp $=0A=
-#=0A=
-=0A=
-# PROVIDE: pdns_recursor=0A=
-# REQUIRE: DAEMON=0A=
-# KEYWORD: shutdown=0A=
-=0A=
-#=0A=
-# Add the following lines to /etc/rc.conf to enable pdns_recursor:=0A=
-#=0A=
-#pdns_recursor_enable=3D"YES"=0A=
-#=0A=
-# See http://rtfm.powerdns.com for flags.=0A=
-#=0A=
-=0A=
-. %%RC_SUBR%%=0A=
-=0A=
-name=3Dpdns_recursor=0A=
-rcvar=3D`set_rcvar`=0A=
-=0A=
-command=3D%%PREFIX%%/sbin/pdns_recursor=0A=
-=0A=
-# set defaults=0A=
-=0A=
-pdns_recursor_enable=3D${pdns_recursor_enable:-"NO"}=0A=
-pdns_recursor_conf=3D${pdns_recursor_conf:-"%%PREFIX%%/etc/recursor.conf=
"}=0A=
-pdns_recursor_flags=3D${pdns_recursor_flags:-""}=0A=
-=0A=
-load_rc_config ${name}=0A=
-=0A=
-required_files=3D${pdns_recursor_conf}=0A=
-=0A=
-run_rc_command "$1"=0A=
diff -ruN powerdns/files/pdns_sqlite.sql =
powerdns.new/files/pdns_sqlite.sql=0A=
--- powerdns/files/pdns_sqlite.sql Sat Mar 6 13:44:50 2004=0A=
+++ powerdns.new/files/pdns_sqlite.sql Sun Jan 7 23:27:10 2007=0A=
@@ -1,33 +1,45 @@=0A=
-create table domains (=0A=
- id INTEGER PRIMARY KEY,=0A=
- name VARCHAR(255) NOT NULL,=0A=
- master VARCHAR(20) DEFAULT NULL,=0A=
- last_check INTEGER DEFAULT NULL,=0A=
- type VARCHAR(6) NOT NULL,=0A=
- notified_serial INTEGER DEFAULT NULL,=0A=
- account VARCHAR(40) DEFAULT NULL=0A=
+CREATE TABLE domains (=0A=
+ id INT AUTOINCREMENT,=0A=
+ name VARCHAR(255) NOT NULL,=0A=
+ type VARCHAR(6) NOT NULL,=0A=
+ master VARCHAR(40) DEFAULT NULL,=0A=
+ account VARCHAR(40) DEFAULT NULL,=0A=
+ notified_serial INT DEFAULT NULL,=0A=
+ last_check INT DEFAULT NULL,=0A=
+CONSTRAINT pk_id=0A=
+ PRIMARY KEY (id),=0A=
+CONSTRAINT unq_name=0A=
+ UNIQUE (name)=0A=
);=0A=
=0A=
-CREATE UNIQUE INDEX name_index ON domains(name);=0A=
=0A=
CREATE TABLE records (=0A=
- id INTEGER PRIMARY KEY,=0A=
- domain_id INTEGER DEFAULT NULL,=0A=
- name VARCHAR(255) DEFAULT NULL,=0A=
- type VARCHAR(6) DEFAULT NULL,=0A=
- content VARCHAR(255) DEFAULT NULL,=0A=
- ttl INTEGER DEFAULT NULL,=0A=
- prio INTEGER DEFAULT NULL,=0A=
- change_date INTEGER DEFAULT NULL=0A=
+ id INT AUTOINCREMENT,=0A=
+ domain_id INT DEFAULT NULL,=0A=
+ name VARCHAR(255) DEFAULT NULL,=0A=
+ type VARCHAR(6) DEFAULT NULL,=0A=
+ ttl INT DEFAULT NULL,=0A=
+ prio INT DEFAULT NULL,=0A=
+ content VARCHAR(255) DEFAULT NULL,=0A=
+ change_date INT DEFAULT NULL,=0A=
+CONSTRAINT pk_id=0A=
+ PRIMARY KEY (id),=0A=
+CONSTRAINT fk_domainid=0A=
+ FOREIGN KEY (domain_id)=0A=
+ REFERENCES domains(id)=0A=
+ ON UPDATE CASCADE=0A=
+ ON DELETE CASCADE=0A=
);=0A=
=0A=
-CREATE INDEX rec_name_index ON records(name);=0A=
-CREATE INDEX nametype_index ON records(name,type);=0A=
-CREATE INDEX domain_id ON records(domain_id);=0A=
-=0A=
-create table supermasters (=0A=
- ip VARCHAR(25) NOT NULL,=0A=
- nameserver VARCHAR(255) NOT NULL,=0A=
- account VARCHAR(40) DEFAULT NULL=0A=
+CREATE INDEX idx_rdomainid ON records(domain_id);=0A=
+CREATE INDEX idx_rname ON records(name);=0A=
+CREATE INDEX idx_rname_rtype ON records(name,type);=0A=
+=0A=
+=0A=
+CREATE TABLE supermasters (=0A=
+ ip VARCHAR(40) NOT NULL,=0A=
+ nameserver VARCHAR(255) NOT NULL,=0A=
+ account VARCHAR(40) DEFAULT NULL=0A=
);=0A=
=0A=
+CREATE INDEX idx_smip_smns ON supermasters(ip,nameserver);=0A=
diff -ruN powerdns/files/pkg-message.in powerdns.new/files/pkg-message.in=0A=
--- powerdns/files/pkg-message.in Mon Jul 18 14:59:51 2005=0A=
+++ powerdns.new/files/pkg-message.in Sun Jan 7 23:20:45 2007=0A=
@@ -4,12 +4,7 @@=0A=
=0A=
pdns_enable=3D"YES"=0A=
=0A=
- If you want to use the powerdns recursor,=0A=
- you need the following additional line in /etc/rc.conf=0A=
-=0A=
- pdns_recursor_enable=3D"YES"=0A=
-=0A=
- Configuration templates are available in %%PREFIX%%/etc=0A=
+ Configuration templates are available in %%PREFIX%%/etc/pdns=0A=
as pdns.conf-dist.=0A=
*******************************************************************=0A=
=0A=
diff -ruN powerdns/pkg-plist powerdns.new/pkg-plist=0A=
--- powerdns/pkg-plist Thu Feb 23 11:36:22 2006=0A=
+++ powerdns.new/pkg-plist Sun Jan 7 22:49:32 2007=0A=
@@ -2,22 +2,40 @@=0A=
bin/zone2ldap=0A=
bin/zone2sql=0A=
sbin/pdns_server=0A=
+%%WITHPGSQL%%lib/libgpgsqlbackend.a=0A=
+%%WITHPGSQL%%lib/libgpgsqlbackend.la=0A=
+%%WITHPGSQL%%lib/libgpgsqlbackend.so=0A=
+%%WITHPGSQL%%lib/libgpgsqlbackend.so.0=0A=
%%WITHMYSQL%%lib/libgmysqlbackend.a=0A=
+%%WITHMYSQL%%lib/libgmysqlbackend.la=0A=
%%WITHMYSQL%%lib/libgmysqlbackend.so=0A=
%%WITHMYSQL%%lib/libgmysqlbackend.so.0=0A=
-%%WITHSQLLITE%%lib/libgsqlitebackend.a=0A=
-%%WITHSQLLITE%%lib/libgsqlitebackend.so=0A=
-%%WITHSQLLITE%%lib/libgsqlitebackend.so.0=0A=
-%%WITHLDAP%%lib/libldapbackend.a=0A=
-%%WITHLDAP%%lib/libldapbackend.so=0A=
-%%WITHLDAP%%lib/libldapbackend.so.0=0A=
+%%WITHSQLITE%%lib/libgsqlitebackend.a=0A=
+%%WITHSQLITE%%lib/libgsqlitebackend.la=0A=
+%%WITHSQLITE%%lib/libgsqlitebackend.so=0A=
+%%WITHSQLITE%%lib/libgsqlitebackend.so.0=0A=
+%%WITHSQLITE3%%lib/libgsqlitebackend.a=0A=
+%%WITHSQLITE3%%lib/libgsqlitebackend.la=0A=
+%%WITHSQLITE3%%lib/libgsqlitebackend.so=0A=
+%%WITHSQLITE3%%lib/libgsqlitebackend.so.0=0A=
+%%WITHOPENLDAP%%lib/libldapbackend.a=0A=
+%%WITHOPENLDAP%%lib/libldapbackend.la=0A=
+%%WITHOPENLDAP%%lib/libldapbackend.so=0A=
+%%WITHOPENLDAP%%lib/libldapbackend.so.0=0A=
+%%WITHOPENDBX%%lib/libopendbxbackend.a=0A=
+%%WITHOPENDBX%%lib/libopendbxbackend.la=0A=
+%%WITHOPENDBX%%lib/libopendbxbackend.so=0A=
+%%WITHOPENDBX%%lib/libopendbxbackend.so.0=0A=
+%%WITHGEO%%lib/libgeobackend.a=0A=
+%%WITHGEO%%lib/libgeobackend.la=0A=
+%%WITHGEO%%lib/libgeobackend.so=0A=
+%%WITHGEO%%lib/libgeobackend.so.0=0A=
lib/libpipebackend.a=0A=
lib/libpipebackend.la=0A=
lib/libpipebackend.so=0A=
lib/libpipebackend.so.0=0A=
-%%RECURSOR%%sbin/pdns_recursor=0A=
- at unexec if cmp -s %D/etc/pdns.conf %D/etc/pdns.conf-dist; then rm -f =
%D/etc/pdns.conf; fi=0A=
-etc/pdns.conf-dist=0A=
+ at unexec if cmp -s %D/etc/pdns/pdns.conf %D/etc/pdns/pdns.conf-dist; =
then rm -f %D/etc/pdns/pdns.conf; fi=0A=
+etc/pdns/pdns.conf-dist=0A=
@exec [ -f %B/pdns.conf ] || cp %B/%f %B/pdns.conf=0A=
%%PORTDOCS%%share/examples/powerdns/pdns.conf=0A=
%%PORTDOCS%%share/examples/powerdns/pdns_mysql.sql=0A=
------=_NextPart_000_0079_01C733D0.0C2B7FE0--
More information about the freebsd-ports-bugs
mailing list