Patch title: Release 94 bulk changes
Abstract:
File: /pliant/fullpliant/recover.pli
Key:
    Removed line
    Added line
   
abstract
  [This is Pliant CDROM installation/recovery script.]

submodule "/pliant/fullpliant/computer.pli"
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"
module "install.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/execute.pli"
module "/pliant/linux/storage/partition.pli"
module "/pliant/linux/storage/filesystem.pli"
module "/pliant/language/ui/ansi_terminal.pli"
module "/pliant/linux/kernel/shutdown.pli"
module "/pliant/linux/network/net.pli"
module "/pliant/linux/network/boot.pli"
module "/pliant/language/stream/tcp.pli"
abstract
  [This is Pliant CDROM installation/recovery script.]

submodule "/pliant/fullpliant/computer.pli"
module "/pliant/language/compiler.pli"
module "/pliant/language/stream.pli"
module "/pliant/language/stream/filesystembase.pli"
module "/pliant/language/stream/multi.pli"
module "install.pli"
module "/pliant/admin/file.pli"
module "/pliant/admin/execute.pli"
module "/pliant/linux/storage/partition.pli"
module "/pliant/linux/storage/filesystem.pli"
module "/pliant/language/ui/ansi_terminal.pli"
module "/pliant/linux/kernel/shutdown.pli"
module "/pliant/linux/network/net.pli"
module "/pliant/linux/network/boot.pli"
module "/pliant/language/stream/tcp.pli"
module "/pliant/appli/database/light.pli"
module "/pliant/storage/database/light.pli"
module "/pliant/util/crypto/rsa.pli"
module "/pliant/util/network/ping.pli"
module "/pliant/protocol/dns/name.pli"
module "/pliant/protocol/http/site.pli"
module "/pliant/language/context.pli"

module "/pliant/util/crypto/rsa.pli"
module "/pliant/util/network/ping.pli"
module "/pliant/protocol/dns/name.pli"
module "/pliant/protocol/http/site.pli"
module "/pliant/language/context.pli"

constant mdadm (file_query "file:/bin/mdadm" standard)=success

function display_hardware
  (var Stream s) open "file:/proc/pci" in+safe
  while not s:atend
    if (s:readline parse any word:"device" any:(var Str vend
      var Str v_name := "" ; var Str d_name := "" ; var CBoo
      (var Stream lst) open "data:/pliant/fullpliant/pci_dev
      while not lst:atend
        var Str l := lst readline
        if (l 4 1)="[tab]"
          v_ok := upper:(l 0 4)=upper:vendor
          if v_ok
            v_name := l 5 l:len
        eif (l 0 1)="[tab]" and upper:(l 1 4)=upper:device a
          d_name := l 6 l:len
      v_ok := false ; d_ok := false
      (var Stream lst) open "data:/pliant/fullpliant/pci_dev
      while not lst:atend
        var Str l := lst readline
        if (l parse any:(var Str code) _ any:(var Str id) _ 
          if code="V"
            v_ok := upper:id=upper:vendor ; d_ok := false
            if v_ok
              v_name := name
          eif code="D"
            d_ok := v_ok and upper:id=upper:device
            if d_ok
              d_name := l 7 l:len
          eif code="R"
            if d_ok and upper:(right id 4 "0")=upper:(right 
              d_name := name
      console upper:vendor " " v_name "  " upper:device " " 


  enumerate_partitions c (var Dictionary partitions) (var Di
  if action="partition"
    if (file_query "file:/proc/mdstat" standard)=success
function display_hardware
  (var Stream s) open "file:/proc/pci" in+safe
  while not s:atend
    if (s:readline parse any word:"device" any:(var Str vend
      var Str v_name := "" ; var Str d_name := "" ; var CBoo
      (var Stream lst) open "data:/pliant/fullpliant/pci_dev
      while not lst:atend
        var Str l := lst readline
        if (l 4 1)="[tab]"
          v_ok := upper:(l 0 4)=upper:vendor
          if v_ok
            v_name := l 5 l:len
        eif (l 0 1)="[tab]" and upper:(l 1 4)=upper:device a
          d_name := l 6 l:len
      v_ok := false ; d_ok := false
      (var Stream lst) open "data:/pliant/fullpliant/pci_dev
      while not lst:atend
        var Str l := lst readline
        if (l parse any:(var Str code) _ any:(var Str id) _ 
          if code="V"
            v_ok := upper:id=upper:vendor ; d_ok := false
            if v_ok
              v_name := name
          eif code="D"
            d_ok := v_ok and upper:id=upper:device
            if d_ok
              d_name := l 7 l:len
          eif code="R"
            if d_ok and upper:(right id 4 "0")=upper:(right 
              d_name := name
      console upper:vendor " " v_name "  " upper:device " " 


  enumerate_partitions c (var Dictionary partitions) (var Di
  if action="partition"
    if (file_query "file:/proc/mdstat" standard)=success
      for (var Int i) 0 15
        execute "raidstop /dev/md"+string:i quiet
      if mdadm
          execute "mdadm --stop --scan" quiet
      else
        for (var Int i) 0 15
          execute "raidstop /dev/md"+string:i quiet
    each d disks type Str
      console "Partitioning " d " disk" eol
      install_partition c d
    each p partitions type DiskPartition
    each d disks type Str
      console "Partitioning " d " disk" eol
      install_partition c d
    each p partitions type DiskPartition
      if p:name<>"" and p:filesystem<>"raid"
      var Str disk_image := p:options option "disk_image" Str
      if disk_image<>""
        console "Extracting " disk_image " disk image to partition " p:device
        console ": " (shunt (file_copy "gzip:file:/fullpliant/archive/partition/"+disk_image+".gz" p:device reduced)=success "ok" "failed") eol
      eif p:name<>"" and p:filesystem<>"raid"
        console "Formating " p:device " partition"
        console ": " (shunt (install_format c p:name)=succes


  var Str fullname := options option "fullname" Str
  if (fullname parse any:(var Str name) "." any:(var Str dom
    if (data_read "target:/pliant_security/this_computer.pdb
      bits := 1024
    bits := options option "bits" Int bits
    console "Generating a "+string:bits+" bits key (be patie
    rsa_generate "target:"+fullname bits ""
    (var Stream s) open "target:/pliant_security/this_comput
    s writeline "<pdata path=[dq]/env/pliant/identity/name[d
    s writeline "<pdata path=[dq]/env/pliant/identity/domain
    s close
        console "Formating " p:device " partition"
        console ": " (shunt (install_format c p:name)=succes


  var Str fullname := options option "fullname" Str
  if (fullname parse any:(var Str name) "." any:(var Str dom
    if (data_read "target:/pliant_security/this_computer.pdb
      bits := 1024
    bits := options option "bits" Int bits
    console "Generating a "+string:bits+" bits key (be patie
    rsa_generate "target:"+fullname bits ""
    (var Stream s) open "target:/pliant_security/this_comput
    s writeline "<pdata path=[dq]/env/pliant/identity/name[d
    s writeline "<pdata path=[dq]/env/pliant/identity/domain
    s close
  var List:Str extra_lines
  (var Stream s) open "target:/pliant_security/user.pdb" in+safe
  while not s:atend
    if (s:readline eparse "<pdata path=[dq]/user/" any:(var Str user) "/right/" any:(var Str right) "/server[dq]>" (pattern keyof:c) "</pdata>")
      extra_lines += "<pdata path=[dq]/user/"+user+"/right/"+right+"/server[dq]>"+fullname+"</pdata>"
  (var Stream s) open "target:/pliant_security/user.pdb" append+safe
  each line extra_lines
    s writeline line
  s close
  var Str ip := options option "ip" Str
  var Str mask := options option "mask" Str
  if ip<>""
    (var Stream s) open "target:/pliant_security/name.pdb" a
    s writeline "<pdelete path=[dq]/name/"+fullname+"[dq] />
    s writeline "<pdata path=[dq]/host/"+fullname+"/ip[dq]>"
    s writeline "<pdata path=[dq]/mask/"+ip+"[dq]>"+mask+"</
    s close
  var Str route := options option "route" Str
  if route<>""
    (var Stream s) open "target:/pliant_security/this_comput
    s writeline "<pdata path=[dq]/env/net_route/default/path
    s close


  
export display_hardware recover_menu downgrade
  var Str ip := options option "ip" Str
  var Str mask := options option "mask" Str
  if ip<>""
    (var Stream s) open "target:/pliant_security/name.pdb" a
    s writeline "<pdelete path=[dq]/name/"+fullname+"[dq] />
    s writeline "<pdata path=[dq]/host/"+fullname+"/ip[dq]>"
    s writeline "<pdata path=[dq]/mask/"+ip+"[dq]>"+mask+"</
    s close
  var Str route := options option "route" Str
  if route<>""
    (var Stream s) open "target:/pliant_security/this_comput
    s writeline "<pdata path=[dq]/env/net_route/default/path
    s close


  
export display_hardware recover_menu downgrade