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
|