TXT DNS records
authorAdam Chlipala <adamc@hcoop.net>
Sun, 23 Dec 2007 22:41:38 +0000 (22:41 +0000)
committerAdam Chlipala <adamc@hcoop.net>
Sun, 23 Dec 2007 22:41:38 +0000 (22:41 +0000)
lib/bind.dtl
lib/easy_domain.dtl
src/plugins/bind.sml

index 9cbc2fb..09d71e1 100644 (file)
@@ -7,6 +7,7 @@ extern val dnsAAAA : host -> ipv6 -> dnsRecord;
 extern val dnsCNAME : host -> domain -> dnsRecord;
 extern val dnsMX : int -> domain -> dnsRecord;
 extern val dnsNS : domain -> dnsRecord;
+extern val dnsTXT : host -> no_newlines -> dnsRecord;
 
 extern val dnsDefaultA : ip -> dnsRecord;
 extern val dnsDefaultAAAA : ipv6 -> dnsRecord;
index 56bc092..47d8df7 100644 (file)
@@ -80,3 +80,4 @@ val dnsMail = \num -> \host -> dns (dnsMX num host);
 val dnsAlias = \from -> \to -> dns (dnsCNAME from to);
 val dnsDefault = \to -> dns (dnsDefaultA to);
 val dnsDefaultv6 = \to -> dns (dnsDefaultAAAA to);
+val dnsText = \from -> \to -> dns (dnsTXT from to);
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"