View | Details | Raw Unified | Return to bug 108685
Collapse All | Expand All

(-)files/pdns.conf (-1 / +1 lines)
Lines 48-54 Link Here
48
#################################
48
#################################
49
# config-dir	Location of configuration directory (pdns.conf)
49
# config-dir	Location of configuration directory (pdns.conf)
50
#
50
#
51
# config-dir=/usr/local/etc
51
# config-dir=/usr/local/etc/pdns
52
52
53
#################################
53
#################################
54
# config-name	Name of this virtual configuration - will rename the binary image
54
# config-name	Name of this virtual configuration - will rename the binary image
(-)files/pdns.in (-1 / +1 lines)
Lines 25-31 Link Here
25
# set defaults
25
# set defaults
26
26
27
pdns_enable=${pdns_enable:-"NO"}
27
pdns_enable=${pdns_enable:-"NO"}
28
pdns_conf=${pdns_conf:-"%%PREFIX%%/etc/pdns.conf"}
28
pdns_conf=${pdns_conf:-"%%PREFIX%%/etc/pdns/pdns.conf"}
29
pdns_flags=${pdns_flags:-""}
29
pdns_flags=${pdns_flags:-""}
30
30
31
load_rc_config ${name}
31
load_rc_config ${name}
(-)files/patch-opendbx (-77 / +75 lines)
Lines 1-5 Link Here
1
--- modules/opendbxbackend/odbxbackend.hh	2006-03-15 19:29:39.000000000 +0100
1
--- modules/opendbxbackend/odbxbackend.hh	2006-03-15 19:29:39.000000000 +0100
2
+++ modules/opendbxbackend/odbxbackend.hh	2006-09-03 11:34:13.000000000 +0200
2
+++ modules/opendbxbackend/odbxbackend.hh	2007-01-25 22:16:13.000000000 +0100
3
@@ -1,11 +1,10 @@
3
@@ -1,11 +1,10 @@
4
 /*
4
 /*
5
  *  PowerDNS OpenDBX Backend
5
  *  PowerDNS OpenDBX Backend
Lines 75-116 Link Here
75
 		declare( suffix, "password","Password for connecting to the DBMS","");
75
 		declare( suffix, "password","Password for connecting to the DBMS","");
76
 
76
 
77
-		declare( suffix, "sql-list", "AXFR query", "SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=':id'" );
77
-		declare( suffix, "sql-list", "AXFR query", "SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=':id'" );
78
+		declare( suffix, "sql-list", "AXFR query", "SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=:id" );
78
+		declare( suffix, "sql-list", "AXFR query", "SELECT \"domain_id\", \"name\", \"type\", \"ttl\", \"prio\", \"content\" FROM \"records\" WHERE \"domain_id\"=:id" );
79
 
79
 
80
 		declare( suffix, "sql-lookup", "Lookup query","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE name=':name'" );
80
-		declare( suffix, "sql-lookup", "Lookup query","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE name=':name'" );
81
-		declare( suffix, "sql-lookupid", "Lookup query with id","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=':id' AND name=':name'" );
81
-		declare( suffix, "sql-lookupid", "Lookup query with id","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=':id' AND name=':name'" );
82
+		declare( suffix, "sql-lookupid", "Lookup query with id","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=:id AND name=':name'" );
82
-		declare( suffix, "sql-lookuptype", "Lookup query with type","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE name=':name' AND type=':type'" );
83
 		declare( suffix, "sql-lookuptype", "Lookup query with type","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE name=':name' AND type=':type'" );
84
-		declare( suffix, "sql-lookuptypeid", "Lookup query with type and id","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=':id' AND name=':name' AND type=':type'" );
83
-		declare( suffix, "sql-lookuptypeid", "Lookup query with type and id","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=':id' AND name=':name' AND type=':type'" );
85
+		declare( suffix, "sql-lookuptypeid", "Lookup query with type and id","SELECT domain_id, name, type, ttl, prio, content FROM records WHERE domain_id=:id AND name=':name' AND type=':type'" );
84
+		declare( suffix, "sql-lookup", "Lookup query","SELECT \"domain_id\", \"name\", \"type\", \"ttl\", \"prio\", \"content\" FROM \"records\" WHERE \"name\"=':name'" );
85
+		declare( suffix, "sql-lookupid", "Lookup query with id","SELECT \"domain_id\", \"name\", \"type\", \"ttl\", \"prio\", \"content\" FROM \"records\" WHERE \"domain_id\"=:id AND \"name\"=':name'" );
86
+		declare( suffix, "sql-lookuptype", "Lookup query with type","SELECT \"domain_id\", \"name\", \"type\", \"ttl\", \"prio\", \"content\" FROM \"records\" WHERE \"name\"=':name' AND \"type\"=':type'" );
87
+		declare( suffix, "sql-lookuptypeid", "Lookup query with type and id","SELECT \"domain_id\", \"name\", \"type\", \"ttl\", \"prio\", \"content\" FROM \"records\" WHERE \"domain_id\"=:id AND \"name\"=':name' AND \"type\"=':type'" );
86
 
88
 
87
-		declare( suffix, "sql-zonedelete","Delete all records for this zone","DELETE FROM records WHERE domain_id=':id'" );
89
-		declare( suffix, "sql-zonedelete","Delete all records for this zone","DELETE FROM records WHERE domain_id=':id'" );
88
-		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=r.domain_id WHERE ( d.name=':name' AND r.type='SOA' ) OR ( d.name=':name' AND r.domain_id IS NULL )" );
90
-		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=r.domain_id WHERE ( d.name=':name' AND r.type='SOA' ) OR ( d.name=':name' AND r.domain_id IS NULL )" );
89
+		declare( suffix, "sql-zonedelete","Delete all records for this zone","DELETE FROM records WHERE domain_id=:id" );
91
+		declare( suffix, "sql-zonedelete","Delete all records for this zone","DELETE FROM \"records\" WHERE \"domain_id\"=:id" );
90
+		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=r.domain_id AND r.type='SOA' ) WHERE d.name=':name' AND d.status='A'" );
92
+		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\"=r.\"domain_id\" AND r.\"type\"='SOA' ) WHERE d.\"name\"=':name' AND d.\"status\"='A'" );
91
 
93
 
92
 		declare( suffix, "sql-transactbegin", "Start transaction", "BEGIN" );
94
 		declare( suffix, "sql-transactbegin", "Start transaction", "BEGIN" );
93
 		declare( suffix, "sql-transactend", "Finish transaction", "COMMIT" );
95
 		declare( suffix, "sql-transactend", "Finish transaction", "COMMIT" );
94
 		declare( suffix, "sql-transactabort", "Abort transaction", "ROLLBACK" );
96
 		declare( suffix, "sql-transactabort", "Abort transaction", "ROLLBACK" );
95
 
97
 
96
 		declare( suffix, "sql-insert-slave","Add slave domain", "INSERT INTO domains ( name, type, master, account ) VALUES ( '%s', 'SLAVE', '%s', '%s' )" );
98
-		declare( suffix, "sql-insert-slave","Add slave domain", "INSERT INTO domains ( name, type, master, account ) VALUES ( '%s', 'SLAVE', '%s', '%s' )" );
97
-		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' )" );
99
-		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' )" );
98
+		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' )" );
100
+		declare( suffix, "sql-insert-slave","Add slave domain", "INSERT INTO \"domains\" ( \"name\", \"type\", \"master\", \"account\" ) VALUES ( '%s', 'SLAVE', '%s', '%s' )" );
101
+		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' )" );
102
+
103
+		declare( suffix, "sql-update-serial", "Set zone to notified", "UPDATE \"domains\" SET \"notified_serial\"=%d WHERE \"id\"=%d" );
104
+		declare( suffix, "sql-update-lastcheck", "Set time of last check", "UPDATE \"domains\" SET \"last_check\"=%d WHERE \"id\"=%d" );
99
 
105
 
100
-		declare( suffix, "sql-update-serial", "Set zone to notified", "UPDATE domains SET notified_serial='%d' WHERE id='%d'" );
106
-		declare( suffix, "sql-update-serial", "Set zone to notified", "UPDATE domains SET notified_serial='%d' WHERE id='%d'" );
101
-		declare( suffix, "sql-update-lastcheck", "Set time of last check", "UPDATE domains SET last_check='%d' WHERE id='%d'" );
107
-		declare( suffix, "sql-update-lastcheck", "Set time of last check", "UPDATE domains SET last_check='%d' WHERE id='%d'" );
102
+		declare( suffix, "sql-update-serial", "Set zone to notified", "UPDATE domains SET notified_serial=%d WHERE id=%d" );
108
+		declare( suffix, "sql-master", "Get master record for zone", "SELECT \"master\" FROM \"domains\" WHERE \"name\"=':name' AND \"status\"='A' AND \"type\"='SLAVE'" );
103
+		declare( suffix, "sql-update-lastcheck", "Set time of last check", "UPDATE domains SET last_check=%d WHERE id=%d" );
109
+		declare( suffix, "sql-supermaster","Get supermaster info", "SELECT \"account\" FROM \"supermasters\" WHERE \"ip\"=':ip' AND \"nameserver\"=':ns'" );
104
 
110
 
105
-		declare( suffix, "sql-master", "Get master record for zone", "SELECT master FROM domains WHERE name=':name' AND type='SLAVE'" );
111
-		declare( suffix, "sql-master", "Get master record for zone", "SELECT master FROM domains WHERE name=':name' AND type='SLAVE'" );
106
+		declare( suffix, "sql-master", "Get master record for zone", "SELECT master FROM domains WHERE name=':name' AND status='A' AND type='SLAVE'" );
112
-		declare( suffix, "sql-supermaster","Get supermaster info", "SELECT account FROM supermasters WHERE ip=':ip' AND nameserver=':ns'" );
107
 		declare( suffix, "sql-supermaster","Get supermaster info", "SELECT account FROM supermasters WHERE ip=':ip' AND nameserver=':ns'" );
113
+		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\"=r.\"domain_id\" AND r.\"type\"='SOA' ) WHERE d.\"status\"='A' AND d.\"type\"='SLAVE'" );
114
+		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\"=r.\"domain_id\" WHERE d.\"status\"='A' AND d.\"type\"='MASTER' AND r.\"type\"='SOA'" );
108
 
115
 
109
-		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=r.domain_id WHERE ( d.type='SLAVE' AND r.type='SOA' ) OR ( d.type='SLAVE' AND r.domain_id IS NULL )" );
116
-		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=r.domain_id WHERE ( d.type='SLAVE' AND r.type='SOA' ) OR ( d.type='SLAVE' AND r.domain_id IS NULL )" );
110
-		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='MASTER' AND d.id=r.domain_id AND r.type='SOA'" );
117
-		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='MASTER' AND d.id=r.domain_id AND r.type='SOA'" );
111
+		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=r.domain_id AND r.type='SOA' ) WHERE d.status='A' AND d.type='SLAVE'" );
112
+		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=r.domain_id WHERE d.status='A' AND d.type='MASTER' AND r.type='SOA'" );
113
+
114
+		declare( suffix, "host", "depricated, use host-read and host-write instead","" );
118
+		declare( suffix, "host", "depricated, use host-read and host-write instead","" );
115
 	}
119
 	}
116
 
120
 
Lines 167-175 Link Here
167
 
171
 
168
 		setArgPrefix( "opendbx" + suffix );
172
 		setArgPrefix( "opendbx" + suffix );
169
-		stringtok( hosts, getArg( "host" ), ", " );
173
-		stringtok( hosts, getArg( "host" ), ", " );
170
 
171
-		idx = odbx_host_index++ % hosts.size();
172
-
174
-
175
-		idx = odbx_host_index++ % hosts.size();
176
 
173
-		for( i = 0; i < hosts.size(); i++ )
177
-		for( i = 0; i < hosts.size(); i++ )
174
+		if( getArg( "host" ).size() > 0 )
178
+		if( getArg( "host" ).size() > 0 )
175
 		{
179
 		{
Lines 300-322 Link Here
300
 
304
 
301
-		len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
305
-		len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
302
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
306
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
307
+
308
+		if( len < 0 )
309
+		{
310
+			L.log( m_myname + " list: Unable to convert zone id to string - format error",  Logger::Error );
311
+			return false;
312
+		}
303
 
313
 
304
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
314
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
305
+		if( len < 0 )
315
+		if( len > sizeof( m_buffer ) - 1 )
306
 		{
316
 		{
307
-			L.log( m_myname + " list: Unable to convert zone id to string",  Logger::Error );
317
-			L.log( m_myname + " list: Unable to convert zone id to string",  Logger::Error );
308
-			throw( DBException( "Error: Libc error" ) );
318
-			throw( DBException( "Error: Libc error" ) );
309
+			L.log( m_myname + " list: Unable to convert zone id to string - format error",  Logger::Error );
319
+			L.log( m_myname + " list: Unable to convert zone id to string - insufficient buffer space",  Logger::Error );
310
+			return false;
320
+			return false;
311
 		}
321
 		}
312
 
322
 
313
-		stmt = strbind( ":id", string( m_buffer, len ), getArg( "sql-list" ) );
323
-		stmt = strbind( ":id", string( m_buffer, len ), getArg( "sql-list" ) );
314
+		if( len > sizeof( m_buffer ) - 1 )
315
+		{
316
+			L.log( m_myname + " list: Unable to convert zone id to string - insufficient buffer space",  Logger::Error );
317
+			return false;
318
+		}
319
+
320
+		string stmt = getArg( "sql-list" );
324
+		string stmt = getArg( "sql-list" );
321
+		string& stmtref = strbind( ":id", string( m_buffer, len ), stmt );
325
+		string& stmtref = strbind( ":id", string( m_buffer, len ), stmt );
322
 
326
 
Lines 331-337 Link Here
331
 	}
335
 	}
332
 
336
 
333
 	return true;
337
 	return true;
334
@@ -181,23 +201,24 @@
338
@@ -181,13 +201,13 @@
335
 
339
 
336
 void OdbxBackend::lookup( const QType& qtype, const string& qname, DNSPacket* dnspkt, int zoneid )
340
 void OdbxBackend::lookup( const QType& qtype, const string& qname, DNSPacket* dnspkt, int zoneid )
337
 {
341
 {
Lines 347-357 Link Here
347
+
351
+
348
 		m_result = NULL;
352
 		m_result = NULL;
349
 		m_qname = qname;
353
 		m_qname = qname;
350
-		
354
 		
351
+
355
@@ -197,7 +217,8 @@
352
 		if( zoneid < 0 )
353
 		{
354
 			if( qtype.getCode() == QType::ANY )
355
 			{
356
 			{
356
 				stmt = getArg( "sql-lookup" );
357
 				stmt = getArg( "sql-lookup" );
357
 			} else {
358
 			} else {
Lines 369-393 Link Here
369
+				stmt = getArg( "sql-lookuptypeid" );
370
+				stmt = getArg( "sql-lookuptypeid" );
370
+				stmtref = strbind( ":type", qtype.getName(), stmt );
371
+				stmtref = strbind( ":type", qtype.getName(), stmt );
371
 			}
372
 			}
372
- 			
373
  			
373
+
374
 			size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
374
 			size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
375
 
375
 
376
-			if( len < 0 || len > sizeof( m_buffer ) - 1 )
376
-			if( len < 0 || len > sizeof( m_buffer ) - 1 )
377
+			if( len < 0 )
377
+			if( len < 0 )
378
+			{
379
+				L.log( m_myname + " lookup: Unable to convert zone id to string - format error",  Logger::Error );
380
+				throw( DBException( "Error: Libc error" ) );
381
+			}
382
+
383
+			if( len > sizeof( m_buffer ) - 1 )
378
 			{
384
 			{
379
-				L.log( m_myname + " lookup: Unable to convert zone id to string",  Logger::Error );
385
-				L.log( m_myname + " lookup: Unable to convert zone id to string",  Logger::Error );
380
+				L.log( m_myname + " lookup: Unable to convert zone id to string - format error",  Logger::Error );
386
+				L.log( m_myname + " lookup: Unable to convert zone id to string - insufficient buffer space",  Logger::Error );
381
 				throw( DBException( "Error: Libc error" ) );
387
 				throw( DBException( "Error: Libc error" ) );
382
 			}
388
 			}
383
 
389
 
384
-			stmt = strbind( ":id", string( m_buffer, len ), stmt );
390
-			stmt = strbind( ":id", string( m_buffer, len ), stmt );
385
+			if( len > sizeof( m_buffer ) - 1 )
386
+			{
387
+				L.log( m_myname + " lookup: Unable to convert zone id to string - insufficient buffer space",  Logger::Error );
388
+				throw( DBException( "Error: Libc error" ) );
389
+			}
390
+
391
+			stmtref = strbind( ":id", string( m_buffer, len ), stmtref );
391
+			stmtref = strbind( ":id", string( m_buffer, len ), stmtref );
392
 		}
392
 		}
393
 
393
 
Lines 453-471 Link Here
453
 
453
 
454
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
454
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
455
+		if( len < 0 )
455
+		if( len < 0 )
456
+		{
457
+			L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "' - format error",  Logger::Error );
458
+			throw( DBException( "Error: Libc error" ) );
459
+		}
460
+
461
+		if( len > sizeof( m_buffer ) - 1 )
462
 		{
456
 		{
463
-			L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "'",  Logger::Error );
457
-			L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "'",  Logger::Error );
464
+			L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "' - insufficient buffer space",  Logger::Error );
458
+			L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "' - format error",  Logger::Error );
465
 			throw( DBException( "Error: Libc error" ) );
459
 			throw( DBException( "Error: Libc error" ) );
466
 		}
460
 		}
467
 
461
 
468
-		execStmt( m_buffer, len, false );
462
-		execStmt( m_buffer, len, false );
463
+		if( len > sizeof( m_buffer ) - 1 )
464
+		{
465
+			L.log( m_myname + " setFresh: Unable to insert values into statement '" + getArg( "sql-update-lastcheck" ) + "' - insufficient buffer space",  Logger::Error );
466
+			throw( DBException( "Error: Libc error" ) );
467
+		}
468
+
469
+		if( !execStmt( m_buffer, len, WRITE ) )
469
+		if( !execStmt( m_buffer, len, WRITE ) )
470
+		{
470
+		{
471
+			throw( DBException( "Error: DB statement failed" ) );
471
+			throw( DBException( "Error: DB statement failed" ) );
Lines 490-499 Link Here
490
+			L.log( m_myname + " setFresh: Master server is unreachable",  Logger::Error );
490
+			L.log( m_myname + " setFresh: Master server is unreachable",  Logger::Error );
491
+			throw( DBException( "Error: Server unreachable" ) );
491
+			throw( DBException( "Error: Server unreachable" ) );
492
+		}
492
+		}
493
+
494
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-update-serial" ).c_str(), serial, domain_id );
493
 
495
 
494
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
496
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
495
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-update-serial" ).c_str(), serial, domain_id );
496
+
497
+		if( len < 0 )
497
+		if( len < 0 )
498
 		{
498
 		{
499
-			L.log( m_myname + " setNotified: Unable to insert values into statement '" + getArg( "sql-update-serial" ) + "'",  Logger::Error );
499
-			L.log( m_myname + " setNotified: Unable to insert values into statement '" + getArg( "sql-update-serial" ) + "'",  Logger::Error );
Lines 619-633 Link Here
619
 			{
619
 			{
620
-				stmt = strbind( ":ip", escape( ip ), getArg( "sql-supermaster" ) );
620
-				stmt = strbind( ":ip", escape( ip ), getArg( "sql-supermaster" ) );
621
-				stmt = strbind( ":ns", escape( i->content ), stmt );
621
-				stmt = strbind( ":ns", escape( i->content ), stmt );
622
-
623
-				execStmt( stmt.c_str(), stmt.size(), true );
624
+				string stmt = getArg( "sql-supermaster" );
622
+				string stmt = getArg( "sql-supermaster" );
625
+				string& stmtref = strbind( ":ip", escape( ip, READ ), stmt );
623
+				string& stmtref = strbind( ":ip", escape( ip, READ ), stmt );
626
+				stmtref = strbind( ":ns", escape( i->content, READ ), stmtref );
624
+				stmtref = strbind( ":ns", escape( i->content, READ ), stmtref );
627
 
625
 
628
-				if( !getRecord() ) { return false; }
626
-				execStmt( stmt.c_str(), stmt.size(), true );
629
+				if( !execStmt( stmtref.c_str(), stmtref.size(), READ ) ) { return false; }
627
+				if( !execStmt( stmtref.c_str(), stmtref.size(), READ ) ) { return false; }
630
 
628
 
629
-				if( !getRecord() ) { return false; }
630
-
631
-				do
631
-				do
632
+				if( getRecord( READ ) )
632
+				if( getRecord( READ ) )
633
 				{
633
 				{
Lines 637-653 Link Here
637
 					}
637
 					}
638
-				}
638
-				}
639
-				while( getRecord() );
639
-				while( getRecord() );
640
 
641
-				*ddb=this;
642
-				return true;
643
+					while( getRecord( READ ) );
644
+
640
+
645
+					*ddb=this;
641
+					while( getRecord( READ ) );
646
+					return true;
642
 
647
+				}
643
 				*ddb=this;
644
 				return true;
648
 			}
645
 			}
649
 		}
646
 		}
650
 	}
647
 	}
648
+	}
651
 	catch ( exception& e )
649
 	catch ( exception& e )
652
 	{
650
 	{
653
 		L.log( m_myname + " superMasterBackend: Caught STL exception - " + e.what(),  Logger::Error );
651
 		L.log( m_myname + " superMasterBackend: Caught STL exception - " + e.what(),  Logger::Error );
Lines 674-700 Link Here
674
+			L.log( m_myname + " createSlaveDomain: Master server is unreachable",  Logger::Error );
672
+			L.log( m_myname + " createSlaveDomain: Master server is unreachable",  Logger::Error );
675
+			return false;
673
+			return false;
676
+		}
674
+		}
677
 
675
+
678
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
679
+		string tmp = domain;
676
+		string tmp = domain;
680
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-insert-slave" ).c_str(), escape( toLowerByRef( tmp ), WRITE ).c_str(),
677
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-insert-slave" ).c_str(), escape( toLowerByRef( tmp ), WRITE ).c_str(),
681
+			escape( ip, WRITE ).c_str(), escape( account, WRITE ).c_str() );
678
+			escape( ip, WRITE ).c_str(), escape( account, WRITE ).c_str() );
682
+
679
 
680
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
683
+		if( len < 0 )
681
+		if( len < 0 )
684
 		{
682
 		{
685
-			L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "'",  Logger::Error );
683
-			L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "'",  Logger::Error );
686
-			throw( DBException( "Error: Libc error" ) );
684
-			throw( DBException( "Error: Libc error" ) );
687
+			L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "' - format error",  Logger::Error );
685
+			L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "' - format error",  Logger::Error );
688
+			return false;
686
+			return false;
689
+		}
687
 		}
690
+
688
 
689
-		execStmt( m_buffer, len, false );
691
+		if( len > sizeof( m_buffer ) - 1 )
690
+		if( len > sizeof( m_buffer ) - 1 )
692
+		{
691
+		{
693
+			L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "' - insufficient buffer space",  Logger::Error );
692
+			L.log( m_myname + " createSlaveDomain: Unable to insert values in statement '" + getArg( "sql-insert-slave" ) + "' - insufficient buffer space",  Logger::Error );
694
+			return false;
693
+			return false;
695
 		}
694
+		}
696
 
695
+
697
-		execStmt( m_buffer, len, false );
698
+		if( !execStmt( m_buffer, len, WRITE ) ) { return false; }
696
+		if( !execStmt( m_buffer, len, WRITE ) ) { return false; }
699
 	}
697
 	}
700
 	catch ( exception& e )
698
 	catch ( exception& e )
Lines 723-735 Link Here
723
+			L.log( m_myname + " feedRecord: Master server is unreachable",  Logger::Error );
721
+			L.log( m_myname + " feedRecord: Master server is unreachable",  Logger::Error );
724
+			return false;
722
+			return false;
725
+		}
723
+		}
726
 
724
+
727
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
728
+		string tmp = rr.qname;
725
+		string tmp = rr.qname;
729
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-insert-record" ).c_str(), rr.domain_id,
726
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, getArg( "sql-insert-record" ).c_str(), rr.domain_id,
730
+			escape( toLowerByRef( tmp ), WRITE ).c_str(), rr.qtype.getName().c_str(), rr.ttl, rr.priority,
727
+			escape( toLowerByRef( tmp ), WRITE ).c_str(), rr.qtype.getName().c_str(), rr.ttl, rr.priority,
731
+			escape( rr.content, WRITE ).c_str() );
728
+			escape( rr.content, WRITE ).c_str() );
732
+
729
 
730
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
733
+		if( len < 0 )
731
+		if( len < 0 )
734
 		{
732
 		{
735
-			L.log( m_myname + " feedRecord: Unable to insert values in statement '" + getArg( "sql-insert-record" ) + "'",  Logger::Error );
733
-			L.log( m_myname + " feedRecord: Unable to insert values in statement '" + getArg( "sql-insert-record" ) + "'",  Logger::Error );
Lines 778-787 Link Here
778
-		len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
776
-		len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
779
+		string& stmtref = const_cast<string&>( getArg( "sql-transactbegin" ) );
777
+		string& stmtref = const_cast<string&>( getArg( "sql-transactbegin" ) );
780
+		if( !execStmt( stmtref.c_str(), stmtref.size(), WRITE ) ) { return false; }
778
+		if( !execStmt( stmtref.c_str(), stmtref.size(), WRITE ) ) { return false; }
779
+
780
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
781
 
781
 
782
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
782
-		if( len < 0 || len > sizeof( m_buffer ) - 1 )
783
+		size_t len = snprintf( m_buffer, sizeof( m_buffer ) - 1, "%d", zoneid );
784
+
785
+		if( len < 0 )
783
+		if( len < 0 )
786
 		{
784
 		{
787
-			L.log( m_myname + " lookup: Unable to convert zone id to string",  Logger::Error );
785
-			L.log( m_myname + " lookup: Unable to convert zone id to string",  Logger::Error );
Lines 855-861 Link Here
855
 
853
 
856
 	return true;
854
 	return true;
857
--- modules/opendbxbackend/odbxprivate.cc	2006-03-15 19:29:39.000000000 +0100
855
--- modules/opendbxbackend/odbxprivate.cc	2006-03-15 19:29:39.000000000 +0100
858
+++ modules/opendbxbackend/odbxprivate.cc	2006-09-02 01:02:36.000000000 +0200
856
+++ modules/opendbxbackend/odbxprivate.cc	2007-01-21 18:00:22.000000000 +0100
859
@@ -2,7 +2,50 @@
857
@@ -2,7 +2,50 @@
860
 
858
 
861
 
859
 
Lines 885-891 Link Here
885
+
883
+
886
+		if( ( err = odbx_init( &(m_handle[type]), getArg( "backend" ).c_str(), hosts[h].c_str(), getArg( "port" ).c_str() ) ) == ODBX_ERR_SUCCESS )
884
+		if( ( err = odbx_init( &(m_handle[type]), getArg( "backend" ).c_str(), hosts[h].c_str(), getArg( "port" ).c_str() ) ) == ODBX_ERR_SUCCESS )
887
+		{
885
+		{
888
+			if( ( err = odbx_bind_simple( m_handle[type], getArg( "database" ).c_str(), getArg( "username" ).c_str(), getArg( "password" ).c_str() ) ) == ODBX_ERR_SUCCESS )
886
+			if( ( err = odbx_bind( m_handle[type], getArg( "database" ).c_str(), getArg( "username" ).c_str(), getArg( "password" ).c_str(), ODBX_BIND_SIMPLE ) ) == ODBX_ERR_SUCCESS )
889
+			{
887
+			{
890
+				L.log( m_myname + " Database connection (" + (type ? "write" : "read") + ") to '" + hosts[h] + "' succeeded", Logger::Notice );
888
+				L.log( m_myname + " Database connection (" + (type ? "write" : "read") + ") to '" + hosts[h] + "' succeeded", Logger::Notice );
891
+				return true;
889
+				return true;
Lines 918-924 Link Here
918
-		L.log( m_myname + " execStmt: Unable to execute query - " + string( odbx_error( m_handle, err ) ),  Logger::Error );
916
-		L.log( m_myname + " execStmt: Unable to execute query - " + string( odbx_error( m_handle, err ) ),  Logger::Error );
919
-		throw( AhuException( "Error: odbx_query() failed" ) );
917
-		throw( AhuException( "Error: odbx_query() failed" ) );
920
+		L.log( m_myname + " execStmt: Unable to execute query - " + string( odbx_error( m_handle[type], err ) ),  Logger::Error );
918
+		L.log( m_myname + " execStmt: Unable to execute query - " + string( odbx_error( m_handle[type], err ) ),  Logger::Error );
921
+		connectTo( m_hosts[type], type );
919
+		if( odbx_error_type( m_handle[type], err ) < 0 ) { connectTo( m_hosts[type], type ); }
922
+		return false;
920
+		return false;
923
 	}
921
 	}
924
 
922
 
(-)Makefile (-2 / +2 lines)
Lines 7-13 Link Here
7
7
8
PORTNAME=	powerdns
8
PORTNAME=	powerdns
9
PORTVERSION=	2.9.20
9
PORTVERSION=	2.9.20
10
PORTREVISION=	3
10
PORTREVISION=	4
11
CATEGORIES=	dns ipv6
11
CATEGORIES=	dns ipv6
12
MASTER_SITES=	http://downloads.powerdns.com/releases/ \
12
MASTER_SITES=	http://downloads.powerdns.com/releases/ \
13
		http://mirrors.evolva.ro/powerdns.com/releases/
13
		http://mirrors.evolva.ro/powerdns.com/releases/
Lines 98-104 Link Here
98
.endif
98
.endif
99
99
100
.if defined(WITH_OPENDBX)
100
.if defined(WITH_OPENDBX)
101
LIB_DEPENDS+=		opendbx.1:${PORTSDIR}/databases/opendbx
101
LIB_DEPENDS+=		opendbx.[1-2]:${PORTSDIR}/databases/opendbx
102
CONFIGURE_MODULES+=	"opendbx"
102
CONFIGURE_MODULES+=	"opendbx"
103
PLIST_SUB+=		WITHOPENDBX=""
103
PLIST_SUB+=		WITHOPENDBX=""
104
CXXFLAGS+=		-L${LOCALBASE}/lib
104
CXXFLAGS+=		-L${LOCALBASE}/lib

Return to bug 108685