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


function recover_menu
  console eol
  console "PCI hardware content is:" eol
  display_hardware
  console eol
  console "FULLPLIANT INSTALL/RECOVERY UTILITY" eol
  console eol
  if this_computer:env:"pliant":"system":"medium"<>"cdrom"
    console "This utility must be executed from a CD" eol
    return
  var Str fullname ip mask route
  console "Current identity:" eol
  for (var Int i) 0 2
    var Str root := shunt i=0 "md0" i=1 "hda1" i=2 "sda1" ""
    if fullname=""
      if (is_partition "device:/"+root) and (filesystem_moun
        pliant_multi_file_system mount "target:/" "file:/mnt
        if (data_read "target:/pliant_security/this_computer
          fullname := name+"."+domain
          console "  computer name is " fullname eol
          computer_fullname := fullname
          if (data_read "target:/pliant_security/name.pdb" "
            console "  IP is " ip eol
            net_shutdown "eth0"
            if (net_configure "eth0" ip+"/255.255.255.0")=fa
              console "Failed to reconfigure network card." 
abstract
  [This is Pliant CDROM installation/recovery script.]


function recover_menu
  console eol
  console "PCI hardware content is:" eol
  display_hardware
  console eol
  console "FULLPLIANT INSTALL/RECOVERY UTILITY" eol
  console eol
  if this_computer:env:"pliant":"system":"medium"<>"cdrom"
    console "This utility must be executed from a CD" eol
    return
  var Str fullname ip mask route
  console "Current identity:" eol
  for (var Int i) 0 2
    var Str root := shunt i=0 "md0" i=1 "hda1" i=2 "sda1" ""
    if fullname=""
      if (is_partition "device:/"+root) and (filesystem_moun
        pliant_multi_file_system mount "target:/" "file:/mnt
        if (data_read "target:/pliant_security/this_computer
          fullname := name+"."+domain
          console "  computer name is " fullname eol
          computer_fullname := fullname
          if (data_read "target:/pliant_security/name.pdb" "
            console "  IP is " ip eol
            net_shutdown "eth0"
            if (net_configure "eth0" ip+"/255.255.255.0")=fa
              console "Failed to reconfigure network card." 
          if (data_read "target:/pliant_security/this_comput
          if (data_read "target:/pliant_security/this_computer.pdb" "/env/net_route/default/path" route)=success or (data_read "target:/pliant_security/this_computer.pdb" "/env/net_route/internet/path" route)=success
            console "  default route is " route eol
            if (net_route "0.0.0.0/0.0.0.0" route)=failure
              console "Failed to set default route." eol
            console "  " (shunt (net_ping "212.180.52.85")=s
          var CBool matched := false
          if (data_read "target:/pliant_security/name.pdb" "
            if (data_read "target:/pliant_security/name_secr
              console "  found " rsa_nbbits:public_key " bit
              site_database:data:site delete fullname
              site_secret_database:data:site delete fullname
              name_database:data:host create fullname
              name_database:data:host:fullname public_key :=
              name_secret_database:data:host create fullname
              name_secret_database:data:host:fullname privat
              matched := (public_key parse word:"rsa" any:(v
          if not matched
            console "Could not find existing keys pair: gene
            rsa_generate "host:"+fullname 128 ""
        pliant_multi_file_system dismount "target:/"
        filesystem_dismount "file:/mnt/target/"
  console eol
  var Data:Computer c ; var Int count := 0
  console "Available computer models are: " eol
  each cc computer
    if (file_query "file:/fullpliant/archive/"+keyof:cc+".tg
      console "  " keyof:cc eol
      c :> cc ; count += 1   
  console eol
  if count<>1
    var Str cname := keyboard_input "Computer model: "
    c :> computer cname
    if not exists:c or (file_query "file:/fullpliant/archive
      console "There is no such a computer." eol
      return
    console eol
  var Str new_fullname := keyboard_input "Computer name: "
  if new_fullname<>"" or fullname=""
    fullname := new_fullname
    if (fullname search "." -1)=(-1)
      console "The name must be something like "+fullname+".
      return
    computer_fullname := fullname
  var Str new_ip := keyboard_input "IP: "
  if new_ip<>"" or ip=""
    ip := new_ip
    var Str mask := keyboard_input "mask: "
    net_shutdown "eth0"
    if (net_configure "eth0" ip+"/"+mask)=success
      console "Network card is configured." eol
    else
      console "Failed to reconfigure network card." eol
    route := keyboard_input "Default route: "
    if route<>""
      if (net_route "0.0.0.0/0.0.0.0" route)=success
        console "Default route is ok." eol
      else
        console "Failed to set default route." eol
      console (shunt (net_ping "212.180.52.85")=success "Int
  part menu
    console eol
    console "Possible actions are: command check parted part
    console "If you select 'partition', all datas on all dis
    console "If you select 'format', all datas on the "+c:en
    console "If you select 'install', your programs and conf
    console "If you select 'recover', only programs should b
    console "If you select 'setup', only computer name, IP a
    console "Anyway, nothing is granted." eol
    console eol
    var Str action := keyboard_input "action: "
    console eol
    if action="command"
      var Link:List program :> new List
      while { var Str l := keyboard_input "> " ; l<>"" }
        program append addressof:(new Str l)
      pliant_compiler_semaphore request
      var Link:Module module :> new Module
      module name := "recover"
      module include the_module:"/pliant/language/basic/safe
      module include the_module:"/pliant/language/compiler.p
      module include the_module:"/pliant/admin/file.pli"
      module include the_module:"/pliant/admin/execute.pli"
      error_push_record (var ErrorRecord e) error_filter_all
      compile_text program module
      var Str err := shunt e:id<>error_id_noerror e:message 
      e id := error_id_noerror
      error_pull_record e
      pliant_compiler_semaphore release
      if err<>""
        console err eol
      restart menu
    eif action="check"
      filesystem_mount c:env:"partition":"root":"device" "fi
      filesystem_dismount "file:/mnt/target/"
      restart menu
    eif (action parse word:"check" any:(var Str device))
      filesystem_mount device "file:/mnt/target/" "check rea
      filesystem_dismount "file:/mnt/target/"
      restart menu
    eif action="parted"
      execute "parted"
      restart menu
    eif action="partition" or action="format" or action="ins
      recover c action "fullname "+string:fullname+" ip "+st
    else
      console "Unsupported action specifyed." eol
      restart menu


  
export display_hardware recover_menu downgrade
            console "  default route is " route eol
            if (net_route "0.0.0.0/0.0.0.0" route)=failure
              console "Failed to set default route." eol
            console "  " (shunt (net_ping "212.180.52.85")=s
          var CBool matched := false
          if (data_read "target:/pliant_security/name.pdb" "
            if (data_read "target:/pliant_security/name_secr
              console "  found " rsa_nbbits:public_key " bit
              site_database:data:site delete fullname
              site_secret_database:data:site delete fullname
              name_database:data:host create fullname
              name_database:data:host:fullname public_key :=
              name_secret_database:data:host create fullname
              name_secret_database:data:host:fullname privat
              matched := (public_key parse word:"rsa" any:(v
          if not matched
            console "Could not find existing keys pair: gene
            rsa_generate "host:"+fullname 128 ""
        pliant_multi_file_system dismount "target:/"
        filesystem_dismount "file:/mnt/target/"
  console eol
  var Data:Computer c ; var Int count := 0
  console "Available computer models are: " eol
  each cc computer
    if (file_query "file:/fullpliant/archive/"+keyof:cc+".tg
      console "  " keyof:cc eol
      c :> cc ; count += 1   
  console eol
  if count<>1
    var Str cname := keyboard_input "Computer model: "
    c :> computer cname
    if not exists:c or (file_query "file:/fullpliant/archive
      console "There is no such a computer." eol
      return
    console eol
  var Str new_fullname := keyboard_input "Computer name: "
  if new_fullname<>"" or fullname=""
    fullname := new_fullname
    if (fullname search "." -1)=(-1)
      console "The name must be something like "+fullname+".
      return
    computer_fullname := fullname
  var Str new_ip := keyboard_input "IP: "
  if new_ip<>"" or ip=""
    ip := new_ip
    var Str mask := keyboard_input "mask: "
    net_shutdown "eth0"
    if (net_configure "eth0" ip+"/"+mask)=success
      console "Network card is configured." eol
    else
      console "Failed to reconfigure network card." eol
    route := keyboard_input "Default route: "
    if route<>""
      if (net_route "0.0.0.0/0.0.0.0" route)=success
        console "Default route is ok." eol
      else
        console "Failed to set default route." eol
      console (shunt (net_ping "212.180.52.85")=success "Int
  part menu
    console eol
    console "Possible actions are: command check parted part
    console "If you select 'partition', all datas on all dis
    console "If you select 'format', all datas on the "+c:en
    console "If you select 'install', your programs and conf
    console "If you select 'recover', only programs should b
    console "If you select 'setup', only computer name, IP a
    console "Anyway, nothing is granted." eol
    console eol
    var Str action := keyboard_input "action: "
    console eol
    if action="command"
      var Link:List program :> new List
      while { var Str l := keyboard_input "> " ; l<>"" }
        program append addressof:(new Str l)
      pliant_compiler_semaphore request
      var Link:Module module :> new Module
      module name := "recover"
      module include the_module:"/pliant/language/basic/safe
      module include the_module:"/pliant/language/compiler.p
      module include the_module:"/pliant/admin/file.pli"
      module include the_module:"/pliant/admin/execute.pli"
      error_push_record (var ErrorRecord e) error_filter_all
      compile_text program module
      var Str err := shunt e:id<>error_id_noerror e:message 
      e id := error_id_noerror
      error_pull_record e
      pliant_compiler_semaphore release
      if err<>""
        console err eol
      restart menu
    eif action="check"
      filesystem_mount c:env:"partition":"root":"device" "fi
      filesystem_dismount "file:/mnt/target/"
      restart menu
    eif (action parse word:"check" any:(var Str device))
      filesystem_mount device "file:/mnt/target/" "check rea
      filesystem_dismount "file:/mnt/target/"
      restart menu
    eif action="parted"
      execute "parted"
      restart menu
    eif action="partition" or action="format" or action="ins
      recover c action "fullname "+string:fullname+" ip "+st
    else
      console "Unsupported action specifyed." eol
      restart menu


  
export display_hardware recover_menu downgrade