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