Skip to content

Instantly share code, notes, and snippets.

@Habbie
Created May 11, 2021 20:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Habbie/f21d5b4cf87f2f3b9f85134eaf40c812 to your computer and use it in GitHub Desktop.
Save Habbie/f21d5b4cf87f2f3b9f85134eaf40c812 to your computer and use it in GitHub Desktop.
diff --git a/modules/gpgsqlbackend/gpgsqlbackend.cc b/modules/gpgsqlbackend/gpgsqlbackend.cc
index de4de76ff..4b3275e3e 100644
--- a/modules/gpgsqlbackend/gpgsqlbackend.cc
+++ b/modules/gpgsqlbackend/gpgsqlbackend.cc
@@ -141,7 +141,7 @@ public:
declare(suffix, "delete-rrset-query", "", "delete from records where domain_id=$1 and name=$2 and type=$3");
declare(suffix, "delete-names-query", "", "delete from records where domain_id=$1 and name=$2");
- declare(suffix, "add-domain-key-query", "", "insert into cryptokeys (domain_id, flags, active, published, content) select id, $1, $2, $3, $4 from domains where name=$5");
+ declare(suffix, "add-domain-key-query", "", "insert into cryptokeys (domain_id, flags, active, published, content) select id, $1, $2, $3, $4 from domains where name=$5 returning id");
declare(suffix, "get-last-inserted-key-id-query", "", "select lastval()");
declare(suffix, "list-domain-keys-query", "", "select cryptokeys.id, flags, case when active then 1 else 0 end as active, case when published then 1 else 0 end as published, content from domains, cryptokeys where cryptokeys.domain_id=domains.id and name=$1");
declare(suffix, "get-all-domain-metadata-query", "", "select kind,content from domains, domainmetadata where domainmetadata.domain_id=domains.id and name=$1");
diff --git a/pdns/backends/gsql/gsqlbackend.cc b/pdns/backends/gsql/gsqlbackend.cc
index 5f55bd48a..e8d1c41f1 100644
--- a/pdns/backends/gsql/gsqlbackend.cc
+++ b/pdns/backends/gsql/gsqlbackend.cc
@@ -734,8 +734,15 @@ bool GSQLBackend::addDomainKey(const DNSName& name, const KeyData& key, int64_t&
bind("published", key.published)->
bind("content", key.content)->
bind("domain", name)->
- execute()->
- reset();
+ execute();
+
+ if (d_AddDomainKeyQuery_stmt->hasNextRow()) {
+ SSqlStatement::row_t row;
+ d_AddDomainKeyQuery_stmt->nextRow(row);
+ id = std::stoi(row[0]);
+ d_AddDomainKeyQuery_stmt->reset();
+ return true;
+ }
}
catch (SSqlException &e) {
throw PDNSException("GSQLBackend unable to store key for domain '"+ name.toLogString() + "': "+e.txtReason());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment