logo       
Google Custom Search
    AddThis Social Bookmark Button

r10422 - trunk/libraries/koala/sources/examples/buddha: msg#00031

Subject: r10422 - trunk/libraries/koala/sources/examples/buddha
Author: hannes
Date: Wed Dec 21 22:20:27 2005
New Revision: 10422

Modified:
   trunk/libraries/koala/sources/examples/buddha/buddha.dylan
   trunk/libraries/koala/sources/examples/buddha/cidr.dylan
   trunk/libraries/koala/sources/examples/buddha/class-editor.dylan
   trunk/libraries/koala/sources/examples/buddha/config.dylan
   trunk/libraries/koala/sources/examples/buddha/network.dylan
   trunk/libraries/koala/sources/examples/buddha/subnet.dylan
   trunk/libraries/koala/sources/examples/buddha/vlan.dylan
   trunk/libraries/koala/sources/examples/buddha/zone.dylan
Log:
Bug: 7257
some more fixes

Modified: trunk/libraries/koala/sources/examples/buddha/buddha.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/buddha.dylan  (original)
+++ trunk/libraries/koala/sources/examples/buddha/buddha.dylan  Wed Dec 21 
22:20:27 2005
@@ -20,7 +20,10 @@
 
 define thread variable *user* = #f;
 
-define variable *nameserver* = #("ns.congress.ccc.de", "ns2.congress.ccc.de");
+define variable *nameserver* = list(make(<nameserver>,
+                                         ns-name: "auth-int.congress.ccc.de"),
+                                    make(<nameserver>,
+                                         ns-name: "auth-ext.congress.ccc.de"));
 define variable *hostmaster* = "hostmaster.congress.ccc.de";
 define variable *refresh* = 180;
 define variable *retry* = 300;
@@ -41,12 +44,12 @@
 end;
 
 define method initial-responder (request :: <request>, response :: <response>)
-  block(return)
-    dynamic-bind(*user* = make(<user>,
-                               username: "admin",
-                               password: "foo",
-                               email: "buddhaadmin@local",
-                               admin: #t))
+  dynamic-bind(*user* = make(<user>,
+                             username: "admin",
+                             password: "foo",
+                             email: "buddhaadmin@local",
+                             admin: #t))
+    block(return)
       if (request.request-method = #"post")
         respond-to-post(#"edit", request, response);
         return();
@@ -147,6 +150,7 @@
 define page adduser end;
 define page logout end;
 define page dhcp end;
+define page tinydns end;
 
 define macro with-buddha-template
   { with-buddha-template(?stream:variable, ?title:expression)
@@ -456,6 +460,15 @@
 end;
 
 define method respond-to-get
+    (page == #"tinydns",
+     request :: <request>,
+     response :: <response>,
+     #key errors)
+  set-content-type(response, "text/plain");
+  print-tinydns-zone-file(*config*, output-stream(response));
+end;
+
+define method respond-to-get
     (page == #"network",
      request :: <request>,
      response :: <response>,
@@ -562,7 +575,7 @@
      request :: <request>,
      response :: <response>,
      #key errors)
-  //TODO: edit/remove forms
+
   //      strip more infos from table
   //      generate tinydns/bind config file
   let out = output-stream(response);
@@ -571,6 +584,7 @@
     collect(with-xml()
               div(id => "content")
               {
+                a("tinydns.conf", href => "/tinydns"),
                 do(browse-table(<zone>, *config*.zones)),
                 do(add-form(<zone>, "Zones", *config*.zones, 
fill-from-request: errors))
               }
@@ -609,6 +623,11 @@
 end;
 
 define function main () => ()
+  *users*["hannes"] := make(<user>,
+                            username: "hannes",
+                            password: "fnord",
+                            admin: #t,
+                            email: "hannes@xxxxxxxxxxx");
   block()
     start-server();
   exception (e :: <condition>)

Modified: trunk/libraries/koala/sources/examples/buddha/cidr.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/cidr.dylan    (original)
+++ trunk/libraries/koala/sources/examples/buddha/cidr.dylan    Wed Dec 21 
22:20:27 2005
@@ -78,8 +78,8 @@
 end;
 
 define method split-cidr (cidr :: <cidr>, bitmask :: <integer>)
-  if (cidr.cidr-netmask < bitmask)
-    let result = make(<stretchy-vector>);
+  let result = make(<stretchy-vector>);
+  if (cidr.cidr-netmask <= bitmask)
     block(return)
       let cur-cidr = make(<cidr>,
                           network-address: cidr.cidr-network-address,
@@ -87,19 +87,21 @@
       while (cidr-in-cidr?(cur-cidr, cidr))
         result := add!(result, cur-cidr);
         cur-cidr := make(<cidr>,
-                         network-address: cur-cidr.network-address + ash(2, 32 
- bitmask),
+                         network-address: cur-cidr.network-address + ash(2, 31 
- bitmask),
                          netmask: bitmask);
       end;
-      return(result);
     end;
   end;
+  result;
 end;
 
 define method cidr-to-reverse-zone (cidr :: <cidr>)
   => (zone-name :: <string>)
   let res = "";
   for (i from 2 to 0 by -1)
-    res := concatenate(res, cidr.cidr-network-address[i], ".")
+    res := concatenate(res,
+                       integer-to-string(cidr.cidr-network-address[i]),
+                       ".")
   end;
   concatenate(res, "in-addr.arpa.");
 end;

Modified: trunk/libraries/koala/sources/examples/buddha/class-editor.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/class-editor.dylan    
(original)
+++ trunk/libraries/koala/sources/examples/buddha/class-editor.dylan    Wed Dec 
21 22:20:27 2005
@@ -132,17 +132,19 @@
              collect(with-xml()
                        \select(name => slot.slot-name)
                        { do(for (ele in slot.slot-global-list(*config*))
-                              if (fill-from-request & (ele = value))
-                                collect(with-xml()
-                                          option(as(<string>, ele),
-                                                 value => get-reference(ele),
-                                                 selected => "selected")
-                                        end);
-                              else
-                                collect(with-xml()
-                                          option(as(<string>, ele),
-                                                 value => get-reference(ele))
-                                        end);
+                              if (visible?(ele))
+                                if (fill-from-request & (ele = value))
+                                  collect(with-xml()
+                                            option(as(<string>, ele),
+                                                   value => get-reference(ele),
+                                                   selected => "selected")
+                                          end);
+                                else
+                                  collect(with-xml()
+                                            option(as(<string>, ele),
+                                                   value => get-reference(ele))
+                                          end);
+                                end;
                               end;
                             end)
                        }
@@ -321,14 +323,14 @@
 
 define method parse (name, type)
   let value = get-query-value(name);
-  if (type = <string>)
-    value;
-  elseif (type = <boolean>)
+  if (type = <boolean>)
     if (value = name)
       #t;
     else
       #f;
     end;
+  elseif (type = <string>)
+    value;
   elseif (type = <integer>)
     string-to-integer(value)
   else

Modified: trunk/libraries/koala/sources/examples/buddha/config.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/config.dylan  (original)
+++ trunk/libraries/koala/sources/examples/buddha/config.dylan  Wed Dec 21 
22:20:27 2005
@@ -1,6 +1,10 @@
 module: buddha
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
+define class <reference-object> (<object>)
+  slot visible? :: <boolean> = #t, init-keyword: visible?:;
+end;
+
 define web-class <config> (<object>)
   data config-name :: <string>;
   has-many vlan;
@@ -43,6 +47,10 @@
          list);
 end;
 
+define method fixup (object :: <object>)
+  #t;
+end;
+
 define method check (zone :: <zone>)
  => (res :: <boolean>)
   if (any?(method(x) x.zone-name = zone.zone-name end , *config*.zones))
@@ -103,8 +111,10 @@
     network.cidr.cidr-network-address := base-network-address(network.cidr);
   end;
   if (fits?(network))
-    //add reverse delegated zones...
-    add-reverse-zones(network);
+    if (network.reverse-dns?)
+      //add reverse delegated zones...
+      add-reverse-zones(network);
+    end;
     #t;
   else
     signal(make(<buddha-form-error>,

Modified: trunk/libraries/koala/sources/examples/buddha/network.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/network.dylan (original)
+++ trunk/libraries/koala/sources/examples/buddha/network.dylan Wed Dec 21 
22:20:27 2005
@@ -1,12 +1,22 @@
 module: buddha
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
-define web-class <network> (<object>)
+define web-class <network> (<reference-object>)
   data cidr :: <cidr>;
   data dhcp? :: <boolean>;
   data dhcp-default-lease-time :: <integer>;
   data dhcp-max-lease-time :: <integer>;
+  data reverse-dns? :: <boolean>;
   has-many dhcp-option :: <string>;
+end;
+
+define method initialize (net :: <network>,
+                          #rest rest, #key, #all-keys)
+  next-method();
+  net.reverse-dns? := #f;
+  net.dhcp? := #t;
+  net.dhcp-default-lease-time := 600;
+  net.dhcp-max-lease-time := 7200;
 end;
 
 define method \< (a :: <network>, b :: <network>)

Modified: trunk/libraries/koala/sources/examples/buddha/subnet.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/subnet.dylan  (original)
+++ trunk/libraries/koala/sources/examples/buddha/subnet.dylan  Wed Dec 21 
22:20:27 2005
@@ -17,6 +17,12 @@
   data dhcp-router :: <ip-address>;
 end;
 
+define method fixup (subnet :: <subnet>)
+  subnet.dhcp-start := base-network-address(subnet.cidr) + 2;
+  subnet.dhcp-end := broadcast-address(subnet.cidr) - 1;
+  subnet.dhcp-router := base-network-address(subnet.cidr) + 1;
+end;
+
 define method print-object (subnet :: <subnet>, stream :: <stream>)
  => ()
   format(stream, "Subnet %s\n", as(<string>, subnet));

Modified: trunk/libraries/koala/sources/examples/buddha/vlan.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/vlan.dylan    (original)
+++ trunk/libraries/koala/sources/examples/buddha/vlan.dylan    Wed Dec 21 
22:20:27 2005
@@ -1,7 +1,7 @@
 module: buddha
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
-define web-class <vlan> (<object>)
+define web-class <vlan> (<reference-object>)
   data number :: <integer>;
   data vlan-name :: <string>;
   data description :: <string>;

Modified: trunk/libraries/koala/sources/examples/buddha/zone.dylan
==============================================================================
--- trunk/libraries/koala/sources/examples/buddha/zone.dylan    (original)
+++ trunk/libraries/koala/sources/examples/buddha/zone.dylan    Wed Dec 21 
22:20:27 2005
@@ -1,20 +1,54 @@
 module: buddha
 author: Hannes Mehnert <hannes@xxxxxxxxxxx>
 
-define class <cname> (<object>)
-  slot source :: <string>, init-keyword: source:;
-  slot target :: <string>, init-keyword: target:;
+define web-class <cname> (<object>)
+  data source :: <string>;
+  data target :: <string>;
 end;
 
-define class <mail-exchange> (<object>)
-  slot mx-name :: <string>, init-keyword: mx-name:;
-  slot priority :: <integer>, init-keyword: priority:;
+define method print-object (cname :: <cname>, stream :: <stream>)
+ => ();
+  format(stream, "CNAME: %s\n", as(<string>, cname));
+end method;
+
+define method as (class == <string>, cname :: <cname>)
+ => (res :: <string>)
+  concatenate(cname.source, " => ", cname.target);
 end;
 
-define web-class <zone> (<object>)
+define web-class <mail-exchange> (<object>)
+  data mx-name :: <string>;
+  data priority :: <integer>;
+end;
+
+define method print-object (mx :: <mail-exchange>, stream :: <stream>)
+ => ();
+  format(stream, "MX: %s\n", as(<string>, mx));
+end method;
+
+define method as (class == <string>, mx :: <mail-exchange>)
+ => (res :: <string>)
+  concatenate(mx.mx-name, ":", integer-to-string(mx.priority));
+end;
+
+define web-class <nameserver> (<object>)
+  data ns-name :: <string>;
+end;
+
+define method print-object (ns :: <nameserver>, stream :: <stream>)
+ => ();
+  format(stream, "NS: %s\n", as(<string>, ns));
+end method;
+
+define method as (class == <string>, ns :: <nameserver>)
+ => (res :: <string>)
+  ns.ns-name;
+end;
+
+define web-class <zone> (<reference-object>)
   data zone-name :: <string>;
   data reverse? :: <boolean>;
-  has-many cname;
+  has-many cname :: <cname>;
   data hostmaster :: <string>;
   data serial :: <integer>;
   data refresh :: <integer>;
@@ -22,9 +56,24 @@
   data expire :: <integer>;
   data time-to-live :: <integer>;
   data minimum :: <integer>;
-  has-many nameserver :: <string>;
+  has-many nameserver :: <nameserver>;
   has-many mail-exchange :: <mail-exchange>;
-  has-many text :: <string>;
+  //has-many text :: <string>;
+end;
+
+define method initialize (zone :: <zone>,
+                          #rest rest, #key, #all-keys)
+  next-method();
+  zone.hostmaster := *hostmaster*;
+  zone.serial := 0;
+  zone.refresh := *refresh*;
+  zone.retry := *retry*;
+  zone.expire := *expire*;
+  zone.time-to-live := *time-to-live*;
+  zone.minimum := *minimum*;
+  for (ele in *nameserver*)
+    zone.nameservers := add!(zone.nameservers, ele);
+  end;
 end;
 
 define method print-object (zone :: <zone>, stream :: <stream>)
@@ -41,6 +90,7 @@
   a.zone-name < b.zone-name
 end;
 
+/*
 define method print-bind-zone-file (print-zone :: <zone>, stream :: <stream>)
   format(stream, "@\tIN\tSOA\t%s.\t%s. (\n",
          print-zone.nameservers[0],
@@ -82,18 +132,19 @@
        end, print-zone.cnames);
   end;
 end;
+*/
 
 define method print-tinydns-zone-file (print-zone :: <zone>, stream :: 
<stream>)
   //Zfqdn:mname:rname:ser:ref:ret:exp:min:ttl:timestamp:lo
-  format(stream, "Z%s:%s:%s:%d:%d:%d:%d:%d:%d\n",
-         print-zone.zone-name, print-zone.nameservers[0],
-         print-zone.hostmaster, print-zone.serial,
-         print-zone.refresh, print-zone.retry,
-         print-zone.expire, print-zone.minimum,
-         print-zone.time-to-live);
+  format(stream, "Z%s:%s.:%s.\n", //:%d:%d:%d:%d:%d:%d\n",
+         print-zone.zone-name, print-zone.nameservers[0].ns-name,
+         print-zone.hostmaster); //, print-zone.serial,
+//         print-zone.refresh, print-zone.retry,
+//         print-zone.expire, print-zone.minimum,
+//         print-zone.time-to-live);
   //nameserver
   do(method(x)
-         format(stream, "&%s::%s\n", print-zone.zone-name, x)
+         format(stream, "&%s::%s.\n", print-zone.zone-name, x.ns-name)
      end, print-zone.nameservers);
   if (print-zone.reverse?)
     //PTR
@@ -107,10 +158,10 @@
                    end, *config*.hosts));
   else
     //MX
-    do(method(x)
-           format(stream, "@%s::%s:%d\n",
-                  print-zone.zone-name, tail(x), head(x));
-       end, print-zone.mail-exchanges);
+    //do(method(x)
+    //       format(stream, "@%s::%s:%d\n",
+    //              print-zone.zone-name, tail(x), head(x));
+    //   end, print-zone.mail-exchanges);
     //A
     do(method(x)
            format(stream, "+%s:%s\n",
@@ -133,24 +184,17 @@
   let network-string
     = concatenate(parts[2], ".", parts[1], ".", parts[0], ".0");
   make(<network>, cidr: make(<cidr>,
-                             network-address: network-string,
+                             network-address: make(<ip-address>, data: 
network-string),
                              netmask: 24));
 end;
 
 define method add-reverse-zones (network :: <network>) => ()
   //XXX: add hostmaster, mx, nameserver,...
   for (subnet in split-cidr(network.cidr, 24))
-    *config*.zones := add!(*config*.zones,
-                           make(<zone>,
-                                reverse?: #t,
-                                zone-name: cidr-to-reverse-zone(subnet),
-                                nameserver: *nameserver*,
-                                hostmaster: *hostmaster*,
-                                serial: 0,
-                                refresh: *refresh*,
-                                retry: *retry*,
-                                expire: *expire*,
-                                time-to-live: *time-to-live*,
-                                minimum: *minimum*));
+    let zone = make(<zone>,
+                    reverse?: #t,
+                    zone-name: cidr-to-reverse-zone(subnet),
+                    visible?: #f);
+    *config*.zones := add!(*config*.zones, zone);
   end;
 end;
-- 
Gd-chatter mailing list
Gd-chatter@xxxxxxxxxxxxxxxx
https://gauss.gwydiondylan.org/mailman/listinfo/gd-chatter




Try Searching:
servers, voip, java, networking, microsoft ...
<Prev in Thread] Current Thread [Next in Thread>