[Gd-chatter] r11075 - trunk/libraries/network/koala/sources/examples/buddha

hannes at gwydiondylan.org hannes at gwydiondylan.org
Mon Dec 18 05:04:16 CET 2006


Author: hannes
Date: Mon Dec 18 05:04:12 2006
New Revision: 11075

Modified:
   trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan
   trunk/libraries/network/koala/sources/examples/buddha/cidr.dylan
   trunk/libraries/network/koala/sources/examples/buddha/config.dylan
   trunk/libraries/network/koala/sources/examples/buddha/ipv4.dylan
   trunk/libraries/network/koala/sources/examples/buddha/ipv6.dylan
   trunk/libraries/network/koala/sources/examples/buddha/library.dylan
   trunk/libraries/network/koala/sources/examples/buddha/network.dylan
   trunk/libraries/network/koala/sources/examples/buddha/zone.dylan
Log:
Bug: 7257
more fixes

Modified: trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/buddha.dylan	Mon Dec 18 05:04:12 2006
@@ -322,17 +322,6 @@
                 do(add-form(real-type,
                             #f,
                             parent-object,
-                            xml: if (real-type = <network>)
-                                   with-xml()
-                                     div { text("generate reverse zone"),
-                                           input(type => "checkbox",
-                                                 name => "reverse-dns?",
-                                                 value => "reverse-dns?")
-                                          }
-                                   end
-                                 else
-                                   #f
-                                 end,
                             fill-from-request: errors))
               }
             end);
@@ -1181,7 +1170,27 @@
   format(out, "%=", page);
 end;
 
+/*define method save (change :: <change>) => ()
+  next-method();
+  block ()
+    broadcast-message(*xmpp-bot*, as(<string>, with-xml() html { do(print-xml(change)) } end));
+  exception (e :: <condition>)
+    xmpp-worker();
+  end;
+end;
+
+define variable *xmpp-bot* = #f;
+
+define function xmpp-worker ()
+  block()
+    *xmpp-bot* := make(<xmpp-bot>, jid: "buddha at jabber.berlin.ccc.de", password: "fnord");
+  exception (e :: <condition>)
+    *xmpp-bot* := #f
+  end;
+end; */
 define function main () => ()
+  //xmpp-worker();
+  //sleep(3);
   register-url("/buddha.css", maybe-serve-static-file);
   block()
     start-server();

Modified: trunk/libraries/network/koala/sources/examples/buddha/cidr.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/cidr.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/cidr.dylan	Mon Dec 18 05:04:12 2006
@@ -117,11 +117,15 @@
 define method cidr-to-reverse-zone (cidr :: <cidr>)
   => (zone-name :: <string>)
   let res = "";
-  for (i from 2 to 0 by -1)
-    res := concatenate(res,
-                       integer-to-string(cidr.cidr-network-address[i]),
-                       ".")
+  let nums = truncate/(cidr.cidr-netmask, 8);
+  for (i from nums - 1 to 0 by -1)
+    res := concatenate(res, ip-address-to-string(cidr.cidr-network-address, i))
   end;
-  concatenate(res, "in-addr.arpa.");
+  concatenate(res, if (instance?(cidr.cidr-network-address, <ipv4-address>))
+                     "in-addr.arpa."
+                   elseif (instance?(cidr.cidr-network-address, <ipv6-address>))
+                     "ip6.arpa"
+                   end);
 end;
 
+

Modified: trunk/libraries/network/koala/sources/examples/buddha/config.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/config.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/config.dylan	Mon Dec 18 05:04:12 2006
@@ -151,10 +151,6 @@
     network.cidr.cidr-network-address := base-network-address(network.cidr);
   end;
   if (every?(method(x) x = network end, overlaps(network)))
-    if (get-query-value("reverse-dns?"))
-      //add reverse delegated zones...
-      add-reverse-zones(network);
-    end;
     #t;
   else
     signal(make(<web-error>,
@@ -249,10 +245,7 @@
 end;
 
 define method print-tinydns-zone-file
-    (config :: <collection>, stream :: <stream>, #key reverse-table)
+    (config :: <collection>, stream :: <stream>)
  => ()
-  let reverse-table = make(<string-table>);
-  for (zone in config)
-    print-tinydns-zone-file(zone, stream, reverse-table: reverse-table)
-  end;
+  do(rcurry(print-tinydns-zone-file, stream), config)
 end;

Modified: trunk/libraries/network/koala/sources/examples/buddha/ipv4.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/ipv4.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/ipv4.dylan	Mon Dec 18 05:04:12 2006
@@ -184,3 +184,8 @@
   end block;
   mask;
 end;
+
+define method ip-address-to-string (ip :: <ipv4-address>, index :: <integer>) => (res :: <string>)
+  concatenate(integer-to-string(ip[index]), ".");
+end;
+

Modified: trunk/libraries/network/koala/sources/examples/buddha/ipv6.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/ipv6.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/ipv6.dylan	Mon Dec 18 05:04:12 2006
@@ -93,4 +93,9 @@
 define constant $bottom-v6-address = as(<ipv6-address>, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
 
 
-
+define method ip-address-to-string (ip :: <ipv6-address>, index :: <integer>) => (res :: <string>)
+  let s1 = integer-to-string(ip[index], base: 16, size: 2);
+  concatenate(copy-sequence(s1, start: 1), ".",
+              copy-sequence(s1, end: 1), ".");
+end;  
+  

Modified: trunk/libraries/network/koala/sources/examples/buddha/library.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/library.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/library.dylan	Mon Dec 18 05:04:12 2006
@@ -14,6 +14,7 @@
   use xml-parser;
   use dylan;
   use web-framework;
+  use xmpp-bot;
   export buddha;
 end;
 
@@ -58,4 +59,5 @@
   use users;
   use change;
   use utils;
+  use xmpp-bot;
 end;

Modified: trunk/libraries/network/koala/sources/examples/buddha/network.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/network.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/network.dylan	Mon Dec 18 05:04:12 2006
@@ -81,6 +81,14 @@
   format(stream, "Network: CIDR: %s\n", as(<string>, network));
 end;
 
+define function get-reverse-cidrs (network :: <network>)
+  let mask = 8 * (ceiling/(network.cidr.cidr-netmask, 8));
+  if (mask ~= network.cidr.cidr-netmask)
+    map(cidr-to-reverse-zone, split-cidr(network.cidr, mask));
+  else
+    list(cidr-to-reverse-zone(network.cidr))
+  end;
+end;
 define method print-isc-dhcpd-file (print-network :: <ipv4-network>,
                                     stream :: <stream>)
   => ();

Modified: trunk/libraries/network/koala/sources/examples/buddha/zone.dylan
==============================================================================
--- trunk/libraries/network/koala/sources/examples/buddha/zone.dylan	(original)
+++ trunk/libraries/network/koala/sources/examples/buddha/zone.dylan	Mon Dec 18 05:04:12 2006
@@ -135,8 +135,7 @@
 end;
 
 define method print-tinydns-zone-file (print-zone :: <zone>,
-                                       stream :: <stream>,
-                                       #key reverse-table)
+                                       stream :: <stream>)
   //Zfqdn:mname:rname:ser:ref:ret:exp:min:ttl:timestamp:lo
   format(stream, "Z%s:%s.:%s.\n", //:%d:%d:%d:%d:%d:%d\n",
          print-zone.zone-name, print-zone.nameservers[0].ns-name,
@@ -144,90 +143,59 @@
 //         print-zone.refresh, print-zone.retry,
 //         print-zone.expire, print-zone.minimum,
 //         print-zone.time-to-live);
+  //reverse zones for networks
+  do(method(x)
+       format(stream, "Z%s:%s.:%s.\n",
+              x, print-zone.nameservers[0].ns-name, print-zone.hostmaster);
+     end, apply(concatenate, map(get-reverse-cidrs, storage(<network>))));
   //nameserver
   do(method(x)
          format(stream, "&%s::%s.\n", print-zone.zone-name, x.ns-name)
      end, print-zone.nameservers);
-  if (print-zone.reverse?)
-    //PTR
-    if (reverse-table)
-      let net = parse-cidr(print-zone.zone-name);
-      let ip = net.cidr.cidr-network-address;
-      while (ip < broadcast-address(net.cidr))
-        let reverse-name = element(reverse-table,
-                                   as(<string>, ip),
-                                   default: concatenate("hacker-", get-ptr(ip)));
-        format(stream, "^%d.%s:%s.%s:%d\n",
-               ip[3],
-               print-zone.zone-name,
-               reverse-name,
-               "congress.ccc.de",
-               300);
-        ip := ip + 1;
-      end;
-    end;
-  else
-    //MX
-    do(method(x)
-           format(stream, "@%s::%s.%s:%d\n",
-                  print-zone.zone-name, mx-name(x), print-zone.zone-name, priority(x));
-       end, print-zone.mail-exchanges);
-    //Hosts
-    do(method(x)
-           if (reverse-table) reverse-table[as(<string>, x.ipv4-address)] := x.host-name end;
-           format(stream, "=%s.%s:%s:%d\n",
-                  x.host-name,
-                  print-zone.zone-name,
-                  as(<string>, x.ipv4-address),
-                  x.time-to-live);
-           unless (x.ipv6-address = $bottom-v6-address)
-             format(stream, "6%s.%s:%s:%d\n",
-                    x.host-name,
-                    print-zone.zone-name,
-                    as-dns-string(x.ipv6-address),
-                    x.time-to-live);
-           end;
-       end, choose(method(x)
-                       x.zone = print-zone
-                   end, storage(<host>)));
-    //A
-    do(method(x)
-         unless (x.ipv4-address = $bottom-v4-address)
-           format(stream, "+%s.%s:%s:%d\n",
-                  x.host-name,
-                  print-zone.zone-name,
-                  as(<string>, x.ipv4-address),
-                  x.time-to-live);
-         end;
-         unless (x.ipv6-address = $bottom-v6-address)
-           format(stream, "3%s.%s:%s:%d\n",
-                  x.host-name,
-                  print-zone.zone-name,
-                  as-dns-string(x.ipv6-address),
-                  x.time-to-live);
-         end;
-       end, print-zone.host-records);
-    //CNAME
-    do(method(x)
-           format(stream, "C%s.%s:%s.%s\n",
-                  source(x), print-zone.zone-name, target(x), print-zone.zone-name);
-       end, print-zone.cnames);
-    //a records for dynamic PTR records
-    let rev-net = storage(<network>)[0].cidr;
-    let ip = rev-net.cidr-network-address;
-    if (reverse-table)
-      while (ip < broadcast-address(rev-net))
-        unless (element(reverse-table, as(<string>, ip), default: #f))
-          format(stream, "+%s.%s:%s:%d\n",
-                 concatenate("hacker-", get-ptr(ip)),
-                 print-zone.zone-name,
-                 ip,
-                 300);
-        end;
-        ip := ip + 1;
-      end;
-    end;
-  end;
+  //MX
+  do(method(x)
+       format(stream, "@%s::%s.%s:%d\n",
+              print-zone.zone-name, mx-name(x), print-zone.zone-name, priority(x));
+     end, print-zone.mail-exchanges);
+  //Hosts
+  do(method(x)
+       format(stream, "=%s.%s:%s:%d\n",
+              x.host-name,
+              print-zone.zone-name,
+              as(<string>, x.ipv4-address),
+              x.time-to-live);
+       unless (x.ipv6-address = $bottom-v6-address)
+         format(stream, "6%s.%s:%s:%d\n",
+                x.host-name,
+                print-zone.zone-name,
+                as-dns-string(x.ipv6-address),
+                x.time-to-live);
+       end;
+     end, choose(method(x)
+                   x.zone = print-zone
+                 end, storage(<host>)));
+  //A
+  do(method(x)
+       unless (x.ipv4-address = $bottom-v4-address)
+         format(stream, "+%s.%s:%s:%d\n",
+                x.host-name,
+                print-zone.zone-name,
+                as(<string>, x.ipv4-address),
+                x.time-to-live);
+       end;
+       unless (x.ipv6-address = $bottom-v6-address)
+         format(stream, "3%s.%s:%s:%d\n",
+                x.host-name,
+                print-zone.zone-name,
+                as-dns-string(x.ipv6-address),
+                x.time-to-live);
+       end;
+     end, print-zone.host-records);
+  //CNAME
+  do(method(x)
+       format(stream, "C%s.%s:%s.%s\n",
+              source(x), print-zone.zone-name, target(x), print-zone.zone-name);
+     end, print-zone.cnames);
 end;
 
 define method parse-cidr (zone-name :: <string>) => (network :: <network>)



More information about the chatter mailing list