|
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 |
|