]> granicus.if.org Git - pdns/commitdiff
make gsql insertion handle huge records. Fixes #407. Patch by Ruben d'Arco
authorPeter van Dijk <peter.van.dijk@netherlabs.nl>
Thu, 8 Mar 2012 20:58:55 +0000 (20:58 +0000)
committerPeter van Dijk <peter.van.dijk@netherlabs.nl>
Thu, 8 Mar 2012 20:58:55 +0000 (20:58 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2476 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/backends/gsql/gsqlbackend.cc

index 0e500bd09325df1d9414211189530debb57b4088..3d8fdc74aeda94d1d41cb6725391b12b2bd42549 100644 (file)
@@ -750,27 +750,29 @@ bool GSQLBackend::get(DNSResourceRecord &r)
 
 bool GSQLBackend::feedRecord(const DNSResourceRecord &r)
 {
-  char output[10240];
+  char *output;
   if(d_dnssecQueries) {
-    snprintf(output,sizeof(output)-1,d_InsertRecordQuery.c_str(),
-          sqlEscape(r.content).c_str(),
-          r.ttl, r.priority,
-          sqlEscape(r.qtype.getName()).c_str(),
-          r.domain_id, toLower(sqlEscape(r.qname)).c_str(), (int)r.auth); 
+    asprintf(&output, d_InsertRecordQuery.c_str(),
+      sqlEscape(r.content).c_str(),
+      r.ttl, r.priority,
+      sqlEscape(r.qtype.getName()).c_str(),
+      r.domain_id, toLower(sqlEscape(r.qname)).c_str(), (int)r.auth); 
   }
   else {
-    snprintf(output,sizeof(output)-1,d_InsertRecordQuery.c_str(),
-          sqlEscape(r.content).c_str(),
-          r.ttl, r.priority,
-          sqlEscape(r.qtype.getName()).c_str(),
-          r.domain_id, toLower(sqlEscape(r.qname)).c_str()); 
+    asprintf(&output, d_InsertRecordQuery.c_str(),
+      sqlEscape(r.content).c_str(),
+      r.ttl, r.priority,
+      sqlEscape(r.qtype.getName()).c_str(),
+      r.domain_id, toLower(sqlEscape(r.qname)).c_str()); 
   }
      
      
   try {
     d_db->doCommand(output);
+    free(output);
   }
   catch (SSqlException &e) {
+    free(output);
     throw AhuException(e.txtReason());
   }
   return true; // XXX FIXME this API should not return 'true' I think -ahu