Blame lenses/dns_zone.aug

Packit Service a2ae7a
(*
Packit Service a2ae7a
Module: Dns_Zone
Packit Service a2ae7a
  Lens for parsing DNS zone files
Packit Service a2ae7a
Packit Service a2ae7a
Authors:
Packit Service a2ae7a
  Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
Packit Service a2ae7a
Packit Service a2ae7a
About: Reference
Packit Service a2ae7a
  RFC 1035, RFC 2782, RFC 3403
Packit Service a2ae7a
Packit Service a2ae7a
About: License
Packit Service a2ae7a
  This file is licensed under the LGPL v2+
Packit Service a2ae7a
*)
Packit Service a2ae7a
Packit Service a2ae7a
module Dns_Zone =
Packit Service a2ae7a
Packit Service a2ae7a
autoload xfm
Packit Service a2ae7a
Packit Service a2ae7a
let eol = del /([ \t\n]*(;[^\n]*)?\n)+/ "\n"
Packit Service a2ae7a
let opt_eol = del /([ \t\n]*(;[^\n]*)?\n)*/ ""
Packit Service a2ae7a
Packit Service a2ae7a
let ws = del /[ \t]+|(([ \t\n]*;[^\n]*)?\n)+[ \t]*/ " "
Packit Service a2ae7a
let opt_ws = del /(([ \t\n]*;[^\n]*)?\n)*[ \t]*/ ""
Packit Service a2ae7a
Packit Service a2ae7a
let token = /([^ \t\n";()\\]|\\\\.)+|"([^"\\]|\\\\.)*"/
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
let control = [ key /\$[^ \t\n\/]+/
Packit Service a2ae7a
                . Util.del_ws_tab
Packit Service a2ae7a
                . store token
Packit Service a2ae7a
                . eol ]
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
let labeled_token (lbl:string) (re:regexp) (sep:lens) =
Packit Service a2ae7a
    [ label lbl . store re . sep ]
Packit Service a2ae7a
Packit Service a2ae7a
let regexp_token (lbl:string) (re:regexp) =
Packit Service a2ae7a
    labeled_token lbl re Util.del_ws_tab
Packit Service a2ae7a
Packit Service a2ae7a
let type_token (re:regexp) = regexp_token "type" re
Packit Service a2ae7a
Packit Service a2ae7a
let simple_token (lbl:string) = regexp_token lbl token
Packit Service a2ae7a
Packit Service a2ae7a
let enclosed_token (lbl:string) = labeled_token lbl token ws
Packit Service a2ae7a
Packit Service a2ae7a
let last_token (lbl:string) = labeled_token lbl token eol
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
let class_re = /IN/
Packit Service a2ae7a
Packit Service a2ae7a
let ttl = regexp_token "ttl" /[0-9]+[DHMWdhmw]?/
Packit Service a2ae7a
let class = regexp_token "class" class_re
Packit Service a2ae7a
Packit Service a2ae7a
let rr =
Packit Service a2ae7a
     let simple_type = /[A-Z]+/ - class_re - /MX|NAPTR|SOA|SRV/
Packit Service a2ae7a
  in type_token simple_type . last_token "rdata"
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
let mx = type_token "MX"
Packit Service a2ae7a
         . simple_token "priority"
Packit Service a2ae7a
         . last_token "exchange"
Packit Service a2ae7a
Packit Service a2ae7a
let naptr = type_token "NAPTR"
Packit Service a2ae7a
            . simple_token "order"
Packit Service a2ae7a
            . simple_token "preference"
Packit Service a2ae7a
            . simple_token "flags"
Packit Service a2ae7a
            . simple_token "service"
Packit Service a2ae7a
            . simple_token "regexp"
Packit Service a2ae7a
            . last_token "replacement"
Packit Service a2ae7a
Packit Service a2ae7a
let soa = type_token "SOA"
Packit Service a2ae7a
          . simple_token "mname"
Packit Service a2ae7a
          . simple_token "rname"
Packit Service a2ae7a
          . Util.del_str "("
Packit Service a2ae7a
          . opt_ws
Packit Service a2ae7a
          . enclosed_token "serial"
Packit Service a2ae7a
          . enclosed_token "refresh"
Packit Service a2ae7a
          . enclosed_token "retry"
Packit Service a2ae7a
          . enclosed_token "expiry"
Packit Service a2ae7a
          . labeled_token "minimum" token opt_ws
Packit Service a2ae7a
          . Util.del_str ")"
Packit Service a2ae7a
          . eol
Packit Service a2ae7a
Packit Service a2ae7a
let srv = type_token "SRV"
Packit Service a2ae7a
         . simple_token "priority"
Packit Service a2ae7a
         . simple_token "weight"
Packit Service a2ae7a
         . simple_token "port"
Packit Service a2ae7a
         . last_token "target"
Packit Service a2ae7a
Packit Service a2ae7a
Packit Service a2ae7a
let record = seq "owner"
Packit Service a2ae7a
             . ((ttl? . class?) | (class . ttl))
Packit Service a2ae7a
             . (rr|mx|naptr|soa|srv)
Packit Service a2ae7a
let ws_record = [ Util.del_ws_tab . record ]
Packit Service a2ae7a
let records (k:regexp) = [ key k . counter "owner" . ws_record+ ]
Packit Service a2ae7a
Packit Service a2ae7a
let any_record_block = records /[^ \t\n;\/$][^ \t\n;\/]*/
Packit Service a2ae7a
let non_root_records = records /@[^ \t\n;\/]+|[^ \t\n;\/$@][^ \t\n;\/]*/
Packit Service a2ae7a
Packit Service a2ae7a
let root_records = [ del /@?/ "@"
Packit Service a2ae7a
                     . Util.del_ws_tab
Packit Service a2ae7a
                     . label "@"
Packit Service a2ae7a
                     . counter "owner"
Packit Service a2ae7a
                     . [ record ]
Packit Service a2ae7a
                     . ws_record* ]
Packit Service a2ae7a
Packit Service a2ae7a
let lns = opt_eol
Packit Service a2ae7a
          . control*
Packit Service a2ae7a
          . ( (root_records|non_root_records)
Packit Service a2ae7a
              . (control|any_record_block)* )?
Packit Service a2ae7a
Packit Service a2ae7a
let filter = incl "/var/bind/pri/*.zone"
Packit Service a2ae7a
let xfm = transform Dns_Zone.lns filter