Проблема с форматом файла зоны, сбой синтаксического анализатора dnsjava — BIND 9

Я делаю приложение, которое использует синтаксический анализатор для анализа всех основных зон из DNS, синтаксический анализатор, который я использую, взят из библиотеки dnsjava (org.xbill.DNS.Master). Все зоны, которые я анализирую, уже добавлены в BIND 9 через rndc. Проблема, с которой я сталкиваюсь, заключается в том, что некоторые файлы зон не анализируются, парсер выдает ошибку

@ is not an absolute name

Пример приведен ниже, имя этой зоны - pensoul.my, ее файл выглядит так:

@ 1800 SOA ns5.mydns.my. dnsadmin.mydns.my.  2015070201 3h 1h 1w 30m
@ 84600 NS ns5.mydns.my.
@ 84600 NS ns6.mydns.my.
@ 3600 A 202.190.174.39
www 3600 A 202.190.174.39

При анализе этой и всех зон этого формата я получаю ошибку абсолютного имени.

Чтобы проверить формат этого файла зоны, я использовал команду

named-checkzone pensoul.my *filepath*

и он дает статус OK, что означает, что с форматом файла все в порядке.

Нужно ли мне использовать другой парсер или есть способ обойти это?


person Anss    schedule 20.01.2016    source источник
comment
Моя непосредственная мысль заключалась в том, что если Bind говорит, что это действительный файл, а синтаксический анализатор говорит, что это не так, то синтаксический анализатор неисправен!   -  person Michael B    schedule 20.01.2016
comment
Парсер выдает немного неуместное сообщение об ошибке, вы можете увидеть, как я ее решил, в комментарии к принятому ответу.   -  person Anss    schedule 20.01.2016


Ответы (1)


Судя по тому, что вы говорите, синтаксический анализатор либо неисправен, либо, по крайней мере, выдает вводящее в заблуждение сообщение об ошибке. @ обозначает текущий источник в файле зоны. Согласно RFC, текущий источник может быть установлен директивой $ORIGIN, директивой $INCLUDE или аргументом процедуры, загружающей файл зоны. В вашем случае BIND будет использовать имя файла в качестве «аргумента для рутинной загрузки». Похоже, что ваш парсер Java этого не делает. Это может быть из-за того, что вы неправильно вызвали его, или из-за того, что он содержит ошибки и не обрабатывает внешний регистр. Вам придется искать это в своем коде и/или документации библиотеки.

person Calle Dybedahl    schedule 20.01.2016
comment
Да, я только что решил это, добавив $ORIGIN pensoul.my в начало файла, что решило мою проблему. - person Anss; 20.01.2016