{"id":19853880,"url":"https://github.com/magnetikonline/bind-zone-builder","last_synced_at":"2026-01-06T14:10:49.499Z","repository":{"id":7725945,"uuid":"9092027","full_name":"magnetikonline/bind-zone-builder","owner":"magnetikonline","description":"Generates nicely formatted BIND DNS zone files from XML source definition documents.","archived":false,"fork":false,"pushed_at":"2022-02-03T00:21:24.000Z","size":10,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-01T02:29:12.104Z","etag":null,"topics":["bind","dns"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/magnetikonline.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-03-29T04:13:33.000Z","updated_at":"2022-02-03T00:20:26.000Z","dependencies_parsed_at":"2022-09-19T02:12:58.366Z","dependency_job_id":null,"html_url":"https://github.com/magnetikonline/bind-zone-builder","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magnetikonline%2Fbind-zone-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magnetikonline%2Fbind-zone-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magnetikonline%2Fbind-zone-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/magnetikonline%2Fbind-zone-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/magnetikonline","download_url":"https://codeload.github.com/magnetikonline/bind-zone-builder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245733600,"owners_count":20663553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bind","dns"],"created_at":"2024-11-12T14:07:58.034Z","updated_at":"2026-01-06T14:10:49.449Z","avatar_url":"https://github.com/magnetikonline.png","language":"PHP","readme":"# BIND zone builder\n\nGenerates nicely formatted [BIND](https://en.wikipedia.org/wiki/BIND) DNS zone files from simple XML source definition documents. A minor rewrite of a utility I put together a few years back to simplify the management of various BIND zone instances I have under my control.\n\nAutomatically handles zone serial number increments when rewriting existing zone file(s) with new DNS record information and performs some sanity checks of source XML data (a minimum of one NS record per zone, IPv4 format checks) to hopefully avoid some basic errors.\n\nProvides support for the following record types:\n\n- **ANAME** - only IPv4 for now (could be extended to IPv6 quite easily)\n- **CNAME**\n- **MX**\n- **NS** - ensure at least one name server defined\n- **SPF** - provides a (very) simple SPF record builder - for anything more advanced a TXT record can be used\n- **TXT**\n\nTime units where required/allowed can be given either in seconds or the standard BIND units of weeks, days, hours, minutes. TTL's can be set for individual records as well, see [Configuration XML format](#configuration-xml-format) below for an example.\n\n- [Requires](#requires)\n- [Usage](#usage)\n- [Configuration XML format](#configuration-xml-format)\n\n## Requires\n\n- PHP 5.4\n- [XML Parser extension](https://www.php.net/manual/en/book.xml.php) (James Clark's expat), should be installed by default.\n\n## Usage\n\nAlso shown by running `bindzonebuilder.php` without command line option(s).\n\n```\nUsage: bindzonebuilder.php -c[file] -t[dir]\n\n  -c[file]    XML domain configuration file\n  -t[dir]     Target directory for generated bind zone files (must exist)\n```\n\n## Configuration XML format\n\nAn example XML config and output zone files, also refer to [example.xml](example.xml).\n\n```xml\n\u003czonelist\u003e\n  \u003cdomain name=\"domain01.com\" admin=\"dns@domainadmin.com\" ttl=\"1D\" refresh=\"8H\" retry=\"2H\" expire=\"1W\" negttl=\"60M\"\u003e\n    \u003crecord type=\"NS\" value=\"ns1.domain01.com.\" /\u003e\n    \u003crecord type=\"NS\" value=\"ns2.domain01.com.\" /\u003e\n    \u003crecord type=\"A\" value=\"123.255.255.123\" ttl=\"600\" /\u003e\n    \u003crecord type=\"A\" domain=\"subdomain01\" ttl=\"4H\" value=\"123.255.255.255\" /\u003e\n    \u003crecord type=\"CNAME\" domain=\"www\" value=\"domain01.com.\" /\u003e\n    \u003crecord type=\"MX\" priority=\"10\" value=\"mail1.server.com.\" /\u003e\n    \u003crecord type=\"MX\" priority=\"20\" value=\"mail2.server.com.\" /\u003e\n    \u003crecord type=\"MX\" priority=\"30\" value=\"mail3.server.com.\" /\u003e\n    \u003crecord type=\"SPF\" value=\"123.255.255.123,_spf.google.com\" /\u003e\n    \u003crecord type=\"TXT\" value=\"This is a text record\" /\u003e\n  \u003c/domain\u003e\n\n  \u003cdomain name=\"domain02.com\" admin=\"dns@domainadmin.com\" ttl=\"1D\" refresh=\"8H\" retry=\"2H\" expire=\"1W\" negttl=\"60M\"\u003e\n    \u003crecord type=\"NS\" value=\"ns1.domain02.com.\" /\u003e\n    \u003crecord type=\"NS\" value=\"ns2.domain02.com.\" /\u003e\n    \u003crecord type=\"MX\" priority=\"10\" value=\"mail1.server.com.\" /\u003e\n    \u003crecord type=\"SPF\" value=\"123.255.255.123,_spf.google.com[~]\" /\u003e\n    \u003c!--\n    Other valid SPF tail 'all' modifiers allowed are [+], [?], [-]\n    Refer to: https://en.wikipedia.org/wiki/Sender_Policy_Framework#Qualifiers\n    Default if not specified is '?all'\n    --\u003e\n  \u003c/domain\u003e\n\u003c/zonelist\u003e\n```\n\n`/output/db.domain01.com`:\n\n```\n$TTL 1D\n@ IN SOA ns1.domain01.com. dns.domainadmin.com. (\n            YYYYMMDDRR  ; Serial\n            8H      ; Refresh\n            2H      ; Retry\n            1W      ; Expire\n            60M )    ; Negative Cache TTL\n\n@            NS      ns1.domain01.com.\n@            NS      ns2.domain01.com.\n\n@        600    A      123.255.255.123\nsubdomain01    4H    A      123.255.255.255\n\nwww            CNAME    domain01.com.\n\n@            MX 10    mail1.server.com.\n@            MX 20    mail2.server.com.\n@            MX 30    mail3.server.com.\n\n@            TXT      \"v=spf1 ip4:123.255.255.123 include:_spf.google.com ?all\"\n\n@            TXT      \"This is a text record\"\n```\n\n`/output/db.domain02.com`\n\n```\n$TTL 1D\n@ IN SOA ns1.domain02.com. dns.domainadmin.com. (\n            YYYYMMDDRR  ; Serial\n            8H      ; Refresh\n            2H      ; Retry\n            1W      ; Expire\n            60M )    ; Negative Cache TTL\n\n@            NS      ns1.domain02.com.\n@            NS      ns2.domain02.com.\n\n@            MX 10    mail1.server.com.\n\n@            TXT      \"v=spf1 ip4:123.255.255.123 include:_spf.google.com ~all\"\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmagnetikonline%2Fbind-zone-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmagnetikonline%2Fbind-zone-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmagnetikonline%2Fbind-zone-builder/lists"}