/pliant/protocol/dns/name.pli
 
 1  submodule "/pliant/storage/database.pli" 
 2  module "/pliant/protocol/http/site.pli" 
 3  module "/pliant/language/type/text/str8.pli" 
 4   
 5  public 
 6   
 7   
 8  type NameIP 
 9    field Str ip # or host 
 10    field Str options 
 11    field Str comment 
 12   
 13  type NameDomain 
 14    field Set:Str dns 
 15    field Set:Str mail 
 16    field Str mailbox 
 17    field Bool authoritative <- true 
 18   
 19  type NameReverse 
 20    field Set:Str ptr 
 21   
 22  type NameHost 
 23    field Str public_key 
 24    field Str physical 
 25    field Str ip 
 26    field Int port http_port remote_port <- undefined 
 27    field Str building 
 28    field Str options 
 29    field Str comment 
 30   
 31  type NameBuilding 
 32    field Set:Str proxy 
 33    field Str options 
 34    field Str comment 
 35   
 36  type NameDatabase 
 37    field Set:NameIP name 
 38    field Set:NameDomain domain 
 39    field Set:Str mask 
 40    field Set:NameReverse reverse 
 41    field Set:NameHost host 
 42    field Set:NameBuilding building 
 43   
 44  (gvar Database:NameDatabase name_database) load "security:/name.pdb" log "security:/name.log" mount "/pliant/name" 
 45   
 46   
 47  type NameSessionKey 
 48    field Str8 key 
 49    field DateTime timestamp 
 50   
 51  type NameSecret 
 52    field Str private_key 
 53    field Set:NameSessionKey session 
 54    field Set:NameSessionKey user_session 
 55   
 56  type NameSecretDatabase 
 57    field Set:NameSecret host 
 58   
 59  (gvar Database:NameSecretDatabase name_secret_database) load "security:/name_secret.pdb" 
 60   
 61   
 62  function name_resolve name -> ip 
 63    arg Str name ip 
 64    if (name parse (var Int i1) "." (var Int i2) "." (var Int i3) "." (var Int i4)) or (name search ":" -1)<>(-1) 
 65      return name 
 66    ip := name_database:data:name:name:ip 
 67    if ip<>"" 
 68      return 
 69    var Data:NameHost :> name_database:data:host:name 
 70    if exists:h 
 71      ip := ip 
 72      if ip<>"" 
 73        return 
 74      ip := physical 
 75      if ip<>"" 
 76        return 
 77    var Data:Site :> site_database:data:site:name 
 78    if exists:s 
 79      ip := ip 
 80      if ip<>"" 
 81        return 
 82      ip := computer 
 83   
 84  function name_ip name -> ip 
 85    arg Str name ip 
 86    ip := name_resolve name 
 87    if ip<>"" and not (ip parse (var Int i1) "." (var Int i2) "." (var Int i3) "." (var Int i4)) and (ip search ":" -1)=(-1) 
 88      ip := name_resolve ip 
 89      if ip<>"" and not (ip parse (var Int i1) "." (var Int i2) "." (var Int i3) "." (var Int i4)) and (ip search ":" -1)=(-1) 
 90        ip := name_resolve ip 
 91    if ip="" and name="localhost" 
 92      ip := "127.0.0.1" 
 93   
 94  function name_mask name -> mask 
 95    arg Str name mask 
 96    var Str ip := name_ip name 
 97    if (ip parse (var Int i1) "." (var Int i2) "." (var Int i3) "." (var Int i4)) 
 98      each name_database:data:mask 
 99        if (keyof:parse (var Int d1) "." (var Int d2) "." (var Int d3) "." (var Int d4)) 
 100          if (parse (var Int m1) "." (var Int m2) "." (var Int m3) "." (var Int m4)) 
 101            if (i1 .and. m1)=d1 and (i2 .and. m2)=d2 and (i3 .and. m3)=d3 and (i4 .and. m4)=d4 
 102              return m   
 103    mask := "255.255.255.0" 
 104   
 105  export name_ip name_mask