[Pdns-users] Intercepting domainmetadata with Postgresql

Klaus Darilion klaus.mailinglists at pernau.at
Fri Mar 21 14:31:17 UTC 2014


I just wanted to share my results in intercepting the domainmetadata 
query. I wanted to have "ALSO-NOTIFY" not only "per-zone", but also 
"per-customer". Therefore I wrote a small table function which seems to 
work nicely.

Maybe someone can use such a feature too.


CREATE OR REPLACE FUNCTION intercept_domainmetadata(domain text, kind 
text) RETURNS TABLE (content text) AS $$
   IF ( (kind = 'ALSO-NOTIFY') OR (kind = 'ALLOW-AXFR-FROM') ) THEN
     RETURN QUERY SELECT unnest(string_to_array(secondaries, ','))
                  FROM domains,accounts
                  WHERE soap_domains.name=domain AND 
soap_domains.account=accounts.username AND accounts.secondaries IS NOT NULL;
   END IF;
   RETURN QUERY SELECT domainmetadata.content
                FROM domains, domainmetadata
                WHERE domainmetadata.domain_id=domains.id AND 
domains.name=domain AND domainmetadata.kind=kind;
$$ LANGUAGE plpgsql;

(Table domains were extended with column "account", which is a foreign 
key to "username" in the accounts table. The accounts table has a column 
"secondaries", which allows to specify the to be notified secondaries as 
coma separated list, e.g:,1::F,

Then change the PowerDNS query from
select content from domains, domainmetadata where 
domainmetadata.domain_id=domains.id and name='%s' and 
select content from intercept_domainmetadata(%s,%s)

More information about the Pdns-users mailing list