Patch title: Release 90 bulk changes
Abstract:
File: /protocol/dns/name.page
Key:
    Removed line
    Added line
   
module "/pliant/language/unsafe.pli"
module "name.pli"
module "/pliant/language/unsafe.pli"
module "name.pli"
module "/pliant/protocol/dns/client.pli"
module "/pliant/protocol/http/site.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/util/crypto/rsa.pli"
module "/pliant/util/crypto/legal.pli"
# module "/pliant/fullpliant/computer.pli"

function ip_sort ip -> s
  arg Str ip s
module "/pliant/protocol/http/site.pli"
module "/pliant/fullpliant/this_computer.pli"
module "/pliant/util/crypto/rsa.pli"
module "/pliant/util/crypto/legal.pli"
# module "/pliant/fullpliant/computer.pli"

function ip_sort ip -> s
  arg Str ip s
  if (ip parse (var Int i1) "." (var Int i2) "." (var Int i3
  if (ip parse (var Int i1) "." (var Int i2) "." (var Int i3) "." (var Int i4) any)
    s := (right string:i1 3 "0")+"."+(right string:i2 3 "0")
  else
    s := ip


note "DNS client and server global settings for this compute
  read_only not allowed:"administrator"
  title "This computer DNS settings"
  table columns 3 border 0
    cell [DNS service:]
    cell
      var Str dns := this_computer:env:"pliant":"dns":"servi
      select "" dns
        option "" ""
        option "Yes" "true"
        option "No" "false"
    cell [Should we run the DNS server on this computer ?]
    cell [DNS providers:]
    cell
      var Str provider1 := this_computer:env:"pliant":"dns":
    s := (right string:i1 3 "0")+"."+(right string:i2 3 "0")
  else
    s := ip


note "DNS client and server global settings for this compute
  read_only not allowed:"administrator"
  title "This computer DNS settings"
  table columns 3 border 0
    cell [DNS service:]
    cell
      var Str dns := this_computer:env:"pliant":"dns":"servi
      select "" dns
        option "" ""
        option "Yes" "true"
        option "No" "false"
    cell [Should we run the DNS server on this computer ?]
    cell [DNS providers:]
    cell
      var Str provider1 := this_computer:env:"pliant":"dns":
      input "" provider1   
      input "" provider1 noeol
      if provider1<>""
        var DateTime start := datetime
        var Str answer := dns_query "www.debian.org" 1 provider1 5
        var DateTime stop := datetime
        small
          text (shunt answer<>"" "ok" "broken")+" in "+(string 1000*(stop:seconds-start:seconds) "fixed 0")+" ms"
      eol
      var Str provider2 := this_computer:env:"pliant":"dns":
      var Str provider2 := this_computer:env:"pliant":"dns":
      input "" provider2   
      input "" provider2 noeol
      if provider2<>""
        var DateTime start := datetime
        var Str answer := dns_query "www.debian.org" 1 provider2 5
        var DateTime stop := datetime
        small
          text (shunt answer<>"" "ok" "broken")+" in "+(string 1000*(stop:seconds-start:seconds) "fixed 0")+" ms"
      eol
    cell [IP addresses of external DNS we should forward que
    cell [DNS cache:]
    cell
      var Str cache := this_computer:env:"pliant":"dns":"cac
      input "" cache 
    cell
      [For what IPs should the Pliant DNS server behaves as 
      fixed [ 10.0.0.0/255.0.0.0 127.0.0.1]
    cell [Default domain:]
    cell
      var Str default := this_computer:env:"pliant":"dns":"d
      input "" default
    cell
      [What domain (such as 'mycrop.com') should be added wh
      [Applies only for local queries, local meaning in the 
  if allowed:"administrator"
    button "Update"
      this_computer "pliant" "dns" "service" := dns
      if provider1<>""
        this_computer "pliant" "dns" "provider1" := provider
      else
        this_computer:env:"pliant":"dns" delete "provider1"
      if provider2<>""
        this_computer "pliant" "dns" "provider2" := provider
      else
        this_computer:env:"pliant":"dns" delete "provider2"
      this_computer "pliant" "dns" "cache" := cache
      this_computer "pliant" "dns" "default" := default
      goto_backward
eol
page note "Compute IP reverse mapping"
  title "IP reverse mapping"
  var (Index Str Str) ips
  each n name_database:data:name
    if (n:ip parse (var Int i1) "." (var Int i2) "." (var In
      ips insert (ip_sort n:ip) keyof:n
  each h name_database:data:host
    if (h:ip parse (var Int i1) "." (var Int i2) "." (var In
      ips insert (ip_sort h:ip) keyof:h
    var Int i := 0
    cell [IP addresses of external DNS we should forward que
    cell [DNS cache:]
    cell
      var Str cache := this_computer:env:"pliant":"dns":"cac
      input "" cache 
    cell
      [For what IPs should the Pliant DNS server behaves as 
      fixed [ 10.0.0.0/255.0.0.0 127.0.0.1]
    cell [Default domain:]
    cell
      var Str default := this_computer:env:"pliant":"dns":"d
      input "" default
    cell
      [What domain (such as 'mycrop.com') should be added wh
      [Applies only for local queries, local meaning in the 
  if allowed:"administrator"
    button "Update"
      this_computer "pliant" "dns" "service" := dns
      if provider1<>""
        this_computer "pliant" "dns" "provider1" := provider
      else
        this_computer:env:"pliant":"dns" delete "provider1"
      if provider2<>""
        this_computer "pliant" "dns" "provider2" := provider
      else
        this_computer:env:"pliant":"dns" delete "provider2"
      this_computer "pliant" "dns" "cache" := cache
      this_computer "pliant" "dns" "default" := default
      goto_backward
eol
page note "Compute IP reverse mapping"
  title "IP reverse mapping"
  var (Index Str Str) ips
  each n name_database:data:name
    if (n:ip parse (var Int i1) "." (var Int i2) "." (var In
      ips insert (ip_sort n:ip) keyof:n
  each h name_database:data:host
    if (h:ip parse (var Int i1) "." (var Int i2) "." (var In
      ips insert (ip_sort h:ip) keyof:h
    var Int i := 0
    while ((h:options option "ip" i Str) parse (var Int i1) 
    while ((h:options option "ip" i Str) parse (var Int i1) "." (var Int i2) "." (var Int i3) "." (var Int i4) any)
      ips insert (ip_sort (h:options option "ip" i Str)) key
      i += 1
  if false
    each c computer_database:data:computer
      each d c:env:"net_device"
        if (d:"ip" parse (var Int i1) "." (var Int i2) "." (
          ips insert (ip_sort d:"ip") keyof:c
  table columns 2
    cell header [IP]
    cell header [name]
    each ip ips
      cell
        if ((ips key ip) parse (var Int i1) "." (var Int i2)
          text string:i1+"."+string:i2+"."+string:i3+"."+str
        else
          text (ips key ip)
      cell
        text ip   



  var CBool migrate := false
  each n name_database:data:name
    if (name_ip site_database:data:site:(keyof n):computer)=
      migrate := true
    eif site_database:data:site:(keyof n):ip=(name_ip n:ip)
      migrate := true
  if migrate
    para
      page button "Drop no use sites IPs"
        each n name_database:data:name
          if (name_ip site_database:data:site:(keyof n):comp
            name_database:data:name delete keyof:n
          eif site_database:data:site:(keyof n):ip=(name_ip 
            name_database:data:name delete keyof:n
        reload_page
      ips insert (ip_sort (h:options option "ip" i Str)) key
      i += 1
  if false
    each c computer_database:data:computer
      each d c:env:"net_device"
        if (d:"ip" parse (var Int i1) "." (var Int i2) "." (
          ips insert (ip_sort d:"ip") keyof:c
  table columns 2
    cell header [IP]
    cell header [name]
    each ip ips
      cell
        if ((ips key ip) parse (var Int i1) "." (var Int i2)
          text string:i1+"."+string:i2+"."+string:i3+"."+str
        else
          text (ips key ip)
      cell
        text ip   



  var CBool migrate := false
  each n name_database:data:name
    if (name_ip site_database:data:site:(keyof n):computer)=
      migrate := true
    eif site_database:data:site:(keyof n):ip=(name_ip n:ip)
      migrate := true
  if migrate
    para
      page button "Drop no use sites IPs"
        each n name_database:data:name
          if (name_ip site_database:data:site:(keyof n):comp
            name_database:data:name delete keyof:n
          eif site_database:data:site:(keyof n):ip=(name_ip 
            name_database:data:name delete keyof:n
        reload_page