From owner-freebsd-ports-bugs@FreeBSD.ORG Sun Feb 18 12:10:06 2007 Return-Path: X-Original-To: freebsd-ports-bugs@hub.freebsd.org Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9C1C316A406 for ; Sun, 18 Feb 2007 12:10:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [69.147.83.40]) by mx1.freebsd.org (Postfix) with ESMTP id 8045913C494 for ; Sun, 18 Feb 2007 12:10:06 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.13.4/8.13.4) with ESMTP id l1ICA6D5019715 for ; Sun, 18 Feb 2007 12:10:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.13.4/8.13.4/Submit) id l1ICA63k019714; Sun, 18 Feb 2007 12:10:06 GMT (envelope-from gnats) Resent-Date: Sun, 18 Feb 2007 12:10:06 GMT Resent-Message-Id: <200702181210.l1ICA63k019714@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Ralf van der Enden Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E3F5F16A421 for ; Sun, 18 Feb 2007 12:03:55 +0000 (UTC) (envelope-from root@cainites.net) Received: from mail.cainites.net (xs4all.cainites.net [80.126.212.243]) by mx1.freebsd.org (Postfix) with ESMTP id 247C913C467 for ; Sun, 18 Feb 2007 12:03:52 +0000 (UTC) (envelope-from root@cainites.net) Received: by mail.cainites.net (Postfix, from userid 0) id ED56D2D1; Sun, 18 Feb 2007 13:03:48 +0100 (CET) Message-Id: <20070218120348.ED56D2D1@mail.cainites.net> Date: Sun, 18 Feb 2007 13:03:48 +0100 (CET) From: Ralf van der Enden To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: ports/109273: dns/powerdns: update opendbx patch & fix compilation using gcc 4.x on amd64 X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Ralf van der Enden List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Feb 2007 12:10:06 -0000 >Number: 109273 >Category: ports >Synopsis: dns/powerdns: update opendbx patch & fix compilation using gcc 4.x on amd64 >Confidential: no >Severity: serious >Priority: high >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Sun Feb 18 12:10:05 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Ralf van der Enden >Release: FreeBSD 6.2-RELEASE-p1 i386 >Organization: >Environment: System: FreeBSD lan.cainites.net 6.2-RELEASE-p1 FreeBSD 6.2-RELEASE-p1 #1: Sat Feb 10 10:33:32 CET 2007 root@lan.cainites.net:/usr/obj/usr/src/sys/HELLKERNEL i386 >Description: Update OpenDBX patch (as found on www.linuxnetworkds.de) which contains a bugfix for recovering from permanently lost database connections Fix compilation using gcc 4.x on amd64 systems (hope this will please pointyhat concering FBSD 7) >How-To-Repeat: >Fix: --- pdns-2.9.20_5.diff begins here --- Index: files/patch-pdns_distributor.hh =================================================================== --- files/patch-pdns_distributor.hh (revision 0) +++ files/patch-pdns_distributor.hh (revision 0) @@ -0,0 +1,11 @@ +--- pdns/distributor.hh.org Wed Mar 15 19:29:38 2006 ++++ pdns/distributor.hh Wed Feb 7 19:42:24 2007 +@@ -198,7 +198,7 @@ + return 0; + } + catch(...) { +- L< 0 ) { @@ -304,23 +304,23 @@ - len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid ); + size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid ); -+ -+ if( len < 0 ) -+ { -+ L.log( m_myname + " list: Unable to convert zone id to string - format error", Logger::Error ); -+ return false; -+ } - if( len < 0 || len > sizeof( m_buffer ) - 1 ) -+ if( len > sizeof( m_buffer ) - 1 ) ++ if( len < 0 ) { - L.log( m_myname + " list: Unable to convert zone id to string", Logger::Error ); - throw( DBException( "Error: Libc error" ) ); -+ L.log( m_myname + " list: Unable to convert zone id to string - insufficient buffer space", Logger::Error ); ++ L.log( m_myname + " list: Unable to convert zone id to string - format error", Logger::Error ); + return false; } - stmt = strbind( ":id", string( m_buffer, len ), getArg( "sql-list" ) ); ++ if( len > sizeof( m_buffer ) - 1 ) ++ { ++ L.log( m_myname + " list: Unable to convert zone id to string - insufficient buffer space", Logger::Error ); ++ return false; ++ } ++ + string stmt = getArg( "sql-list" ); + string& stmtref = strbind( ":id", string( m_buffer, len ), stmt ); @@ -335,7 +335,7 @@ } return true; -@@ -181,13 +201,13 @@ +@@ -181,23 +201,24 @@ void OdbxBackend::lookup( const QType& qtype, const string& qname, DNSPacket* dnspkt, int zoneid ) { @@ -351,8 +351,11 @@ + m_result = NULL; m_qname = qname; - -@@ -197,7 +217,8 @@ +- ++ + if( zoneid < 0 ) + { + if( qtype.getCode() == QType::ANY ) { stmt = getArg( "sql-lookup" ); } else { @@ -370,24 +373,25 @@ + stmt = getArg( "sql-lookuptypeid" ); + stmtref = strbind( ":type", qtype.getName(), stmt ); } - +- ++ size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid ); - if( len < 0 || len > sizeof( m_buffer ) - 1 ) + if( len < 0 ) -+ { -+ L.log( m_myname + " lookup: Unable to convert zone id to string - format error", Logger::Error ); -+ throw( DBException( "Error: Libc error" ) ); -+ } -+ -+ if( len > sizeof( m_buffer ) - 1 ) { - L.log( m_myname + " lookup: Unable to convert zone id to string", Logger::Error ); -+ L.log( m_myname + " lookup: Unable to convert zone id to string - insufficient buffer space", Logger::Error ); ++ L.log( m_myname + " lookup: Unable to convert zone id to string - format error", Logger::Error ); throw( DBException( "Error: Libc error" ) ); } - stmt = strbind( ":id", string( m_buffer, len ), stmt ); ++ if( len > sizeof( m_buffer ) - 1 ) ++ { ++ L.log( m_myname + " lookup: Unable to convert zone id to string - insufficient buffer space", Logger::Error ); ++ throw( DBException( "Error: Libc error" ) ); ++ } ++ + stmtref = strbind( ":id", string( m_buffer, len ), stmtref ); } @@ -453,19 +457,19 @@ - if( len < 0 || len > sizeof( m_buffer ) - 1 ) + if( len < 0 ) ++ { ++ L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "' - format error", Logger::Error ); ++ throw( DBException( "Error: Libc error" ) ); ++ } ++ ++ if( len > sizeof( m_buffer ) - 1 ) { - L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "'", Logger::Error ); -+ L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "' - format error", Logger::Error ); ++ L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "' - insufficient buffer space", Logger::Error ); throw( DBException( "Error: Libc error" ) ); } - execStmt( m_buffer, len, false ); -+ if( len > sizeof( m_buffer ) - 1 ) -+ { -+ L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "' - insufficient buffer space", Logger::Error ); -+ throw( DBException( "Error: Libc error" ) ); -+ } -+ + if( !execStmt( m_buffer, len, WRITE ) ) + { + throw( DBException( "Error: DB statement failed" ) ); @@ -490,10 +494,10 @@ + L.log( m_myname + " setFresh: Master server is unreachable", Logger::Error ); + throw( DBException( "Error: Server unreachable" ) ); + } -+ -+ size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-update-serial" ).c_str(), serial, domain_id ); - if( len < 0 || len > sizeof( m_buffer ) - 1 ) ++ size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-update-serial" ).c_str(), serial, domain_id ); ++ + if( len < 0 ) { - L.log( m_myname + " setNotified: Unable to insert values into statement '" + getArg( "sql-update-serial" ) + "'", Logger::Error ); @@ -619,15 +623,15 @@ { - stmt = strbind( ":ip", escape( ip ), getArg( "sql-supermaster" ) ); - stmt = strbind( ":ns", escape( i->content ), stmt ); +- +- execStmt( stmt.c_str(), stmt.size(), true ); + string stmt = getArg( "sql-supermaster" ); + string& stmtref = strbind( ":ip", escape( ip, READ ), stmt ); + stmtref = strbind( ":ns", escape( i->content, READ ), stmtref ); -- execStmt( stmt.c_str(), stmt.size(), true ); +- if( !getRecord() ) { return false; } + if( !execStmt( stmtref.c_str(), stmtref.size(), READ ) ) { return false; } -- if( !getRecord() ) { return false; } -- - do + if( getRecord( READ ) ) { @@ -637,15 +641,17 @@ } - } - while( getRecord() ); + +- *ddb=this; +- return true; ++ while( getRecord( READ ) ); + -+ while( getRecord( READ ) ); - - *ddb=this; - return true; ++ *ddb=this; ++ return true; ++ } } } } -+ } catch ( exception& e ) { L.log( m_myname + " superMasterBackend: Caught STL exception - " + e.what(), Logger::Error ); @@ -672,27 +678,27 @@ + L.log( m_myname + " createSlaveDomain: Master server is unreachable", Logger::Error ); + return false; + } -+ + +- if( len < 0 || len > sizeof( m_buffer ) - 1 ) + string tmp = domain; + size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-insert-slave" ).c_str(), escape( toLowerByRef( tmp ), WRITE ).c_str(), + escape( ip, WRITE ).c_str(), escape( account, WRITE ).c_str() ); - -- if( len < 0 || len > sizeof( m_buffer ) - 1 ) ++ + if( len < 0 ) { - L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "'", Logger::Error ); - throw( DBException( "Error: Libc error" ) ); + L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "' - format error", Logger::Error ); + return false; - } - -- execStmt( m_buffer, len, false ); ++ } ++ + if( len > sizeof( m_buffer ) - 1 ) + { + L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "' - insufficient buffer space", Logger::Error ); + return false; -+ } -+ + } + +- execStmt( m_buffer, len, false ); + if( !execStmt( m_buffer, len, WRITE ) ) { return false; } } catch ( exception& e ) @@ -721,13 +727,13 @@ + L.log( m_myname + " feedRecord: Master server is unreachable", Logger::Error ); + return false; + } -+ + +- if( len < 0 || len > sizeof( m_buffer ) - 1 ) + string tmp = rr.qname; + size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-insert-record" ).c_str(), rr.domain_id, + escape( toLowerByRef( tmp ), WRITE ).c_str(), rr.qtype.getName().c_str(), rr.ttl, rr.priority, + escape( rr.content, WRITE ).c_str() ); - -- if( len < 0 || len > sizeof( m_buffer ) - 1 ) ++ + if( len < 0 ) { - L.log( m_myname + " feedRecord: Unable to insert values in statement '" + getArg( "sql-insert-record" ) + "'", Logger::Error ); @@ -776,10 +782,10 @@ - len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid ); + string& stmtref = const_cast( getArg( "sql-transactbegin" ) ); + if( !execStmt( stmtref.c_str(), stmtref.size(), WRITE ) ) { return false; } -+ -+ size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid ); - if( len < 0 || len > sizeof( m_buffer ) - 1 ) ++ size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid ); ++ + if( len < 0 ) { - L.log( m_myname + " lookup: Unable to convert zone id to string", Logger::Error ); @@ -853,7 +859,7 @@ return true; --- modules/opendbxbackend/odbxprivate.cc 2006-03-15 19:29:39.000000000 +0100 -+++ modules/opendbxbackend/odbxprivate.cc 2007-01-21 18:00:22.000000000 +0100 ++++ modules/opendbxbackend/odbxprivate.cc 2007-02-16 21:42:05.000000000 +0100 @@ -2,7 +2,50 @@ @@ -870,7 +876,7 @@ + int idx = odbx_host_index[type]++ % hosts.size(); + + -+ if( m_handle[type] ) ++ if( m_handle[type] != NULL ) + { + odbx_unbind( m_handle[type] ); + odbx_finish( m_handle[type] ); @@ -906,7 +912,7 @@ { int err; -@@ -11,18 +54,21 @@ +@@ -11,18 +54,23 @@ if( m_qlog ) { L.log( m_myname + " Query: " + stmt, Logger::Info ); } @@ -916,8 +922,10 @@ - L.log( m_myname + " execStmt: Unable to execute query - " + string( odbx_error( m_handle, err ) ), Logger::Error ); - throw( AhuException( "Error: odbx_query() failed" ) ); + L.log( m_myname + " execStmt: Unable to execute query - " + string( odbx_error( m_handle[type], err ) ), Logger::Error ); -+ if( odbx_error_type( m_handle[type], err ) < 0 ) { connectTo( m_hosts[type], type ); } -+ return false; ++ ++ if( err != -ODBX_ERR_PARAM && odbx_error_type( m_handle[type], err ) > 0 ) { return false; } // ODBX_ERR_PARAM workaround ++ if( !connectTo( m_hosts[type], type ) ) { return false; } ++ if( odbx_query( m_handle[type], stmt, length ) < 0 ) { return false; } } - if( !select ) { while( getRecord() ); } @@ -933,7 +941,7 @@ { int err = 3; -@@ -31,13 +77,19 @@ +@@ -31,13 +79,19 @@ do { @@ -954,7 +962,7 @@ throw( AhuException( "Error: odbx_row_fetch() failed" ) ); } -@@ -72,13 +124,7 @@ +@@ -72,13 +126,7 @@ m_result = NULL; } } @@ -969,7 +977,7 @@ m_result = NULL; return false; -@@ -86,18 +132,18 @@ +@@ -86,18 +134,21 @@ @@ -989,11 +997,14 @@ - L.log( m_myname + " escape: Unable to escape string - " + string( odbx_error( m_handle, err ) ), Logger::Error ); - throw( AhuException( "Error: odbx_escape() failed" ) ); + L.log( m_myname + " escape(string): Unable to escape string - " + string( odbx_error( m_handle[type], err ) ), Logger::Error ); -+ throw( runtime_error( "odbx_escape() failed" ) ); ++ ++ if( err != -ODBX_ERR_PARAM && odbx_error_type( m_handle[type], err ) > 0 ) { throw( runtime_error( "odbx_escape() failed" ) ); } // ODBX_ERR_PARAM workaround ++ if( !connectTo( m_hosts[type], type ) ) { throw( runtime_error( "odbx_escape() failed" ) ); } ++ if( odbx_escape( m_handle[type], str.c_str(), str.size(), m_escbuf, &len ) < 0 ) { throw( runtime_error( "odbx_escape() failed" ) ); } } return string( m_escbuf, len ); -@@ -105,7 +151,7 @@ +@@ -105,7 +156,7 @@ @@ -1002,7 +1013,7 @@ { const char* tmp; u_int32_t nlast, nserial; -@@ -115,9 +161,8 @@ +@@ -115,9 +166,8 @@ DLOG( L.log( m_myname + " getDomainList()", Logger::Debug ) ); @@ -1014,7 +1025,7 @@ do { -@@ -128,7 +173,7 @@ +@@ -128,7 +178,7 @@ if( ( tmp = odbx_field_value( m_result, 6 ) ) != NULL ) { @@ -1023,7 +1034,7 @@ } if( !sd.serial && ( tmp = odbx_field_value( m_result, 5 ) ) != NULL ) -@@ -171,7 +216,9 @@ +@@ -171,7 +221,9 @@ list->push_back( di ); } } Index: Makefile =================================================================== --- Makefile (revision 42) +++ Makefile (working copy) @@ -7,7 +7,7 @@ PORTNAME= powerdns PORTVERSION= 2.9.20 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= dns ipv6 MASTER_SITES= http://downloads.powerdns.com/releases/ \ http://mirrors.evolva.ro/powerdns.com/releases/ --- pdns-2.9.20_5.diff ends here --- >Release-Note: >Audit-Trail: >Unformatted: