PowerDNS GUIの困った話(その1)。¶
PowerDNS のフロントエンドとして PowerDNS GUI (pdns-gui)を使おうとしているのですが、ちょっと困った問題があったのでメモしておきます。
ドメインのテンプレートが作成出来ない話。¶
テンプレートを作る際に、SOAレコードのcontentの値がinvalidとなり、登録できないという問題があります。pdns-guiのインストール時に自動的に設定されるdomainテンプレートのSOAレコードのcontentの値は、”ns5.dnsmadeeasy.com hostmaster.%DOMAIN% %SERIAL%”という文字列で 1 、テンプレートからdomainを作成する際にはフォームで入力したdomainの値がこの%DOMAIN%に代入されて作成されます。pdns-guiで運用する際は、dns.madeeasy.comというドメインではなく任意のドメインを指定したいので、テンプレートとして作成する際には、例えば”ns.%DOMAIN% hostmaster.%DOMAIN% %SERIAL%”という文字列も使いたいですよね。ですが、実際にはテンプレート作成を行うapps/frontend/modules/template/actions/actions.class.phpの中で、
282 switch ($data['type'])
283 {
284 case 'SOA':
285 if (!preg_match('/^[a-z0-9\.\-_]+\s[a-z0-9\.\-_]+\s%SERIAL%/',$data['content']))
286 {
287 $this->getRequest()->setError('record',"Row $i: invalid SOA content.");
288 return false;
289 }
290 break;
となっており、”%DOMAIN%”という文字列は許可されておらず、”ns0.ca.local hostmaster.ca.local %SERIAL%” のように、文字列%DOMAIN%を使わずドメインを個別に設定する必要があります。これじゃあテンプレートの意味がありません。これじゃ使い物になりませんので、以下のような、 2行パッチ書いてissueに登録 しておきました。
diff --git a/apps/frontend/modules/template/actions/actions.class.php b/apps/frontend/modules/template/actions/actions.class.php
index 9c6b6c0..2f67b9a 100644
--- a/apps/frontend/modules/template/actions/actions.class.php
+++ b/apps/frontend/modules/template/actions/actions.class.php
@@ -282,7 +282,8 @@ class templateActions extends MyActions
switch ($data['type'])
{
case 'SOA':
- if (!preg_match('/^[a-z0-9\.\-_]+\s[a-z0-9\.\-_]+\s%SERIAL%/',$data['content']))
+ if (!preg_match('/^[a-z0-9\.\-_]+\s[a-z0-9\.\-_]+\s%SERIAL%/',$data['content']) &&
+ !preg_match('/^[a-z0-9\.\-_]+\.%DOMAIN%\s[a-z0-9\-_]+\.%DOMAIN%\s%SERIAL%/',$data['content']))
{
$this->getRequest()->setError('record',"Row $i: invalid SOA content.");
return false;
--
1.7.6.3
NSレコードも同じだった。¶
ので、追加パッチを登録しておいた。
- 1
これはdata/fixtures/sample-data.ymlファイルで指定されており、template_recordテーブルに自動的にinsertされます。