TXT DNS records
[hcoop/domtool2.git] / src / plugins / bind.sml
index 89b3938..53c1d04 100644 (file)
@@ -52,6 +52,7 @@ datatype dns_record =
        | DefaultA of string
        | AAAA of string * string
        | DefaultAAAA of string
+       | TXT of string * string
 
 val record = fn (EApp ((EApp ((EVar "dnsA", _), e1), _), e2), _) =>
                (case (Env.string e1, Domain.ip e2) of
@@ -75,6 +76,10 @@ val record = fn (EApp ((EApp ((EVar "dnsA", _), e1), _), e2), _) =>
                   | _ => NONE)
              | (EApp ((EVar "dnsDefaultAAAA", _), e), _) =>
                Option.map DefaultAAAA (Env.string e)
+             | (EApp ((EApp ((EVar "dnsTXT", _), e1), _), e2), _) =>
+               (case (Env.string e1, Env.string e2) of
+                    (SOME v1, SOME v2) => SOME (TXT (v1, v2))
+                  | _ => NONE)
              | _ => NONE
 
 fun writeRecord (evs, r) =
@@ -138,6 +143,14 @@ fun writeRecord (evs, r) =
                                   write "\tIN\tAAAA\t";
                                   write to;
                                   write "\n")
+             | TXT (from, to) => (write from;
+                                  write ".";
+                                  writeDom ();
+                                  write ".\t";
+                                  write (Int.toString ttl);
+                                  write "\tIN\tTXT\t\"";
+                                  write (String.translate (fn #"\"" => "\\\"" | ch => str ch) to);
+                                  write "\"\n")
        end
 
 val () = Env.actionV_one "dns"