home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / inet / root.2 / usr / lib / scoadmin / dns / dnsGUI / dnsGUI~
Text File  |  1998-08-19  |  244KB  |  6,531 lines

  1. #!/bin/osavtcl
  2. # Copyright (c) 1992-1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3. #                                                                         
  4. #        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5. #                   SANTA CRUZ OPERATION INC.                             
  6. #                                                                         
  7. #   The copyright notice above does not evidence any actual or intended   
  8. #   publication of such source code.                                      
  9.  
  10. #******************************************************************************
  11. #
  12. #    Copyright (C) 1992-1998 The Santa Cruz Operation, Inc.
  13. #        All Rights Reserved.
  14. #
  15. #    The information in this file is provided for the exclusive use of
  16. #    the licensees of The Santa Cruz Operation, Inc.  Such users have the
  17. #    right to use, modify, and incorporate this code into other products
  18. #    for purposes authorized by the license agreement provided they include
  19. #    this notice and the associated copyright notice with any such product.
  20. #    The information in this file is provided "AS IS" without warranty.
  21. #
  22. #===============================================================================
  23. #@package: SCO_DNS_MSGS SCO_DNS_MSGS
  24. proc SCO_DNS_MSGS {} {}
  25. global SCO_DNS_MSGS
  26. set SCO_DNS_MSGS(@catalog@) {dns.cat@sa 1}
  27. set SCO_DNS_MSGS(ERR_UNIX) {1 %s}
  28. set SCO_DNS_MSGS(ERR_NO_HOSTNAME) {2 {Must specify hostname}}
  29. set SCO_DNS_MSGS(ERR_CHAR1) {3 {Invalid input: %s\nOnly alpha-numeric, '-' or '.' are allowed.}}
  30. set SCO_DNS_MSGS(ERR_CHAR2) {4 {Invalid character input at: %s}}
  31. set SCO_DNS_MSGS(ERR_NO_UNDERBAR) {5 {Using '_' in hostnames does not\nconform to RFC 952}}
  32. set SCO_DNS_MSGS(ERR_BAD_HOSTNAME) {6 {You have specified a fully qualified hostname,\nbut have not terminated the hostname with \".\", so the\ncurrent zone name will get appended to the hostname.\n\nSelect OK to continue adding the host, Cancel to go\nback and change the hostname.}}
  33. set SCO_DNS_MSGS(ERR_NO_IP_ADDR) {7 {Must specify IP address}}
  34. set SCO_DNS_MSGS(ERR_BAD_IP_ADDR1) {8 {IP address must be in standard dot notation:\nn.n.n.n, where n is a digit 0-255}}
  35. set SCO_DNS_MSGS(ERR_BAD_IP_ADDR2) {9 {IP address must start with one of the\nnetwork addresses for this zone:\n%s}}
  36. set SCO_DNS_MSGS(ERR_BAD_HINFO) {10 {Must specify both hardware and\noperating system information}}
  37. set SCO_DNS_MSGS(ERR_NO_HARDWARE) {11 {Must specify hardware information}}
  38. set SCO_DNS_MSGS(ERR_NO_OS) {12 {Must specify operating system information}}
  39. set SCO_DNS_MSGS(ERR_BAD_MX) {13 {Must specify both mail exchanger and\npreference level}}
  40. set SCO_DNS_MSGS(ERR_NO_GATEWAY) {14 {Must specify mail exchanger}}
  41. set SCO_DNS_MSGS(ERR_BAD_RP) {15 {Must specify both owner's mail address\nand TXT record location}}
  42. set SCO_DNS_MSGS(ERR_NO_OWNER) {16 {Must specify owner's mail address}}
  43. set SCO_DNS_MSGS(ERR_BAD_OWNER) {17 {Owner's mail address must be in DNS form\n(replace \"@\" with \".\")}}
  44. set SCO_DNS_MSGS(ERR_NO_MX) {18 {Must specify mail exchanger}}
  45. set SCO_DNS_MSGS(ERR_NO_TXT) {19 {Must specify description}}
  46. set SCO_DNS_MSGS(ERR_BAD_TXT) {20 {Description cannot exceed 256 characters}}
  47. set SCO_DNS_MSGS(ERR_NO_ZONE_NAME) {21 {Must specify zone name}}
  48. set SCO_DNS_MSGS(ERR_NO_NETWORKS) {22 {Must specify at least one network address}}
  49. set SCO_DNS_MSGS(ERR_NO_SERVER) {23 {Must specify name server}}
  50. set SCO_DNS_MSGS(ERR_NO_SERVER_NAME) {24 {Must specify name server hostname}}
  51. set SCO_DNS_MSGS(ERR_NO_SERVER_IPADDR) {25 {Must specify name server IP address}}
  52. set SCO_DNS_MSGS(ERR_NO_SERVERS) {26 {Secondary and stub servers must specify\nat least one other name server}}
  53. set SCO_DNS_MSGS(ERR_TOO_MANY_SERVERS) {27 {No more that 10 additional name servers may be defined}}
  54. set SCO_DNS_MSGS(ERR_NO_FORWARDERS) {28 {Must specify at least one forwarder}}
  55. set SCO_DNS_MSGS(ERR_GET_SOA) {29 {Unable to determine SOA for zone}}
  56. set SCO_DNS_MSGS(ERR_FIX_SOA) {30 {Incomplete Start Of Authority record}}
  57. set SCO_DNS_MSGS(ERR_NO_PIC) {31 {Must specify person in charge}}
  58. set SCO_DNS_MSGS(ERR_BAD_PIC) {32 {Person in charge mail address must be in DNS form\n(replace \"@\" with \".\")}}
  59. set SCO_DNS_MSGS(ERR_NO_REFRESH) {33 {Must specify refresh rate}}
  60. set SCO_DNS_MSGS(ERR_BAD_REFRESH) {34 {Refresh rate must be 1-99999999}}
  61. set SCO_DNS_MSGS(ERR_NO_RETRY) {35 {Must specify transfer retry value}}
  62. set SCO_DNS_MSGS(ERR_BAD_RETRY) {36 {Transfer retry must be 1-99999999}}
  63. set SCO_DNS_MSGS(ERR_NO_EXPIRE) {37 {Must specify expire value}}
  64. set SCO_DNS_MSGS(ERR_BAD_EXPIRE1) {38 {Expire time must be 2-99999999}}
  65. set SCO_DNS_MSGS(ERR_BAD_EXPIRE2) {39 {Expire time must be greater than refresh and retry times}}
  66. set SCO_DNS_MSGS(ERR_NO_TTL) {40 {Must specify minimum time-to-live value}}
  67. set SCO_DNS_MSGS(ERR_BAD_TTL) {41 {Version number must be 1-99999999}}
  68. set SCO_DNS_MSGS(ERR_GET_SERVER_CONFIG) {42 {FATAL ERROR: Unable to determine current configuration}}
  69. set SCO_DNS_MSGS(ERR_UPDATE_ROOT) {43 {Unable to obtain latest list of root servers}}
  70. set SCO_DNS_MSGS(ERR_BUILD_PTR_FILES) {44 {Unable to rebuild configuration files}}
  71. set SCO_DNS_MSGS(ERR_ADD_ZONE) {45 {Unable to add new zone}}
  72. set SCO_DNS_MSGS(ERR_DEL_ZONE) {46 {Unable to delete zone}}
  73. set SCO_DNS_MSGS(ERR_MOD_ZONE) {47 {Unable to modify zone}}
  74. set SCO_DNS_MSGS(ERR_GET_FORWARDERS) {48 {Unable to get list of forwarders}}
  75. set SCO_DNS_MSGS(ERR_SAVE_FORWARDERS) {49 {Unable to change list of forwarders}}
  76. set SCO_DNS_MSGS(ERR_GET_BOGUSNS) {50 {Unable to get list of bogus name servers}}
  77. set SCO_DNS_MSGS(ERR_SAVE_BOGUSNS) {51 {Unable to change list of bogus name servers}}
  78. set SCO_DNS_MSGS(ERR_GET_XFRNETS) {52 {Unable to get list of zone transfer requestors}}
  79. set SCO_DNS_MSGS(ERR_SAVE_XFRNETS) {53 {Unable to change the list of networks zone transfer requestors}}
  80. set SCO_DNS_MSGS(ERR_GET_SORTLIST) {54 {Unable to get list of prefered networks}}
  81. set SCO_DNS_MSGS(ERR_SAVE_SORTLIST) {55 {Unable to change list of prefered networks}}
  82. set SCO_DNS_MSGS(ERR_GET_SERVER_LIST) {56 {Unable to get list of additional name servers}}
  83. set SCO_DNS_MSGS(ERR_ADD_HOST) {57 {Unable to add new host}}
  84. set SCO_DNS_MSGS(ERR_MOD_HOST) {58 {Unable to modify host}}
  85. set SCO_DNS_MSGS(ERR_ADD_RECORD) {59 {Unable to add record}}
  86. set SCO_DNS_MSGS(ERR_DEL_RECORD) {60 {Unable to delete record}}
  87. set SCO_DNS_MSGS(ERR_MOD_RECORD) {61 {Unable to modify record}}
  88. set SCO_DNS_MSGS(ERR_GET_LIMITS) {62 {Unable to get server limits}}
  89. set SCO_DNS_MSGS(ERR_GET_OPTIONS) {63 {Unable to get server options}}
  90. set SCO_DNS_MSGS(MSG_TIME_NAME) {64 {year week day hour minute second}}
  91. set SCO_DNS_MSGS(MSG_TIME_NAMES) {65 {years weeks days hours minutes seconds}}
  92. set SCO_DNS_MSGS(MSG_NULL) {66 { }}
  93. set SCO_DNS_MSGS(MSG_ADD) {67 Add}
  94. set SCO_DNS_MSGS(MSG_DELETE) {68 Delete}
  95. set SCO_DNS_MSGS(MSG_MODIFY) {69 Modify}
  96. set SCO_DNS_MSGS(MSG_CLOSE) {70 Close}
  97. set SCO_DNS_MSGS(MSG_APPLY) {71 Apply}
  98. set SCO_DNS_MSGS(MSG_DELETE_ENTRY) {72 {Delete this entry?}}
  99. set SCO_DNS_MSGS(MSG_UPDATE_ROOT) {73 {Get latest list of root servers for the cache file?}}
  100. set SCO_DNS_MSGS(MSG_MORE_SERVERS) {74 {It is recommended that at least two servers\nare used per zone.\n\nSelect \"OK\" to continue, \"Cancel\" to go back\nand add additional name servers.}}
  101. set SCO_DNS_MSGS(MSG_REPLACE_ZONE) {75 {Changing zone name or type will delete\nold zone data.}}
  102. set SCO_DNS_MSGS(MSG_YES) {76 Yes}
  103. set SCO_DNS_MSGS(MSG_NO) {77 No}
  104. set SCO_DNS_MSGS(MSG_PRIMARY) {78 Primary}
  105. set SCO_DNS_MSGS(MSG_SECONDARY) {79 Secondary}
  106. set SCO_DNS_MSGS(MSG_STUB) {80 Stub}
  107. set SCO_DNS_MSGS(MSG_CACHING) {81 Caching-only}
  108. set SCO_DNS_MSGS(MSG_CONF_CACHING) {82 {Configure as caching-only server ?}}
  109. set SCO_DNS_MSGS(MSG_SORTLIST_TITLE) {83 {Preferred Networks}}
  110. set SCO_DNS_MSGS(MSG_NEW_ADDRESS_SH) {84 {New network to add to list}}
  111. set SCO_DNS_MSGS(MSG_ADD_ADDRESS_SH) {85 {Add the new network to list}}
  112. set SCO_DNS_MSGS(MSG_DEL_ADDRESS_SH) {86 {Delete the selected network from list}}
  113. set SCO_DNS_MSGS(MSG_SORT_LIST_SH) {87 {Networks to query after local network addresses}}
  114. set SCO_DNS_MSGS(MSG_PROMOTE) {88 Promote}
  115. set SCO_DNS_MSGS(MSG_PROMOTE_SH) {89 {Promote selected network}}
  116. set SCO_DNS_MSGS(MSG_DEMOTE) {90 Demote}
  117. set SCO_DNS_MSGS(MSG_DEMOTE_SH) {91 {Demote selected network}}
  118. set SCO_DNS_MSGS(MSG_FWDERS_TITLE) {92 Forwarders}
  119. set SCO_DNS_MSGS(MSG_SLAVE_MODE) {93 {Use forwarders only:}}
  120. set SCO_DNS_MSGS(MSG_SLAVE_YES_SH) {94 {Set server in slave mode}}
  121. set SCO_DNS_MSGS(MSG_SLAVE_NO_SH) {95 {Do not set server in slave mode}}
  122. set SCO_DNS_MSGS(MSG_FWDERS) {96 {Name servers:}}
  123. set SCO_DNS_MSGS(MSG_NEW_FWDERS_SH) {97 {New name server to add to list}}
  124. set SCO_DNS_MSGS(MSG_ADD_FWDERS_SH) {98 {Add name server to list}}
  125. set SCO_DNS_MSGS(MSG_DEL_FWDERS_SH) {99 {Delete selected name server from list}}
  126. set SCO_DNS_MSGS(MSG_FWDERS_LIST_SH) {100 {Name servers to act as forwarders}}
  127. set SCO_DNS_MSGS(MSG_XFERNETS_TITLE) {101 {Zone Transfer Requestors}}
  128. set SCO_DNS_MSGS(MSG_NETWORKS) {102 Networks:}
  129. set SCO_DNS_MSGS(MSG_NEW_NETWORK_SH_) {103 {New network or address to add to list}}
  130. set SCO_DNS_MSGS(MSG_NETWORK_LIST_SH_) {104 {Networks that can request zone transfers}}
  131. set SCO_DNS_MSGS(MSG_BOGUSNS_TITLE) {105 {Bad Name Servers}}
  132. set SCO_DNS_MSGS(MSG_BOGUSNAMESRVS) {106 {Name servers:}}
  133. set SCO_DNS_MSGS(MSG_NEW_BOGUSNS_SH) {107 {New name server to add to bogus list}}
  134. set SCO_DNS_MSGS(MSG_ADD_BOGUSNS_SH) {108 {Add name server to list}}
  135. set SCO_DNS_MSGS(MSG_DEL_BOGUSNS_SH) {109 {Delete selected name server from list}}
  136. set SCO_DNS_MSGS(MSG_BOGUSNS_LIST_SH) {110 {Name servers to ignore results/requests from}}
  137. set SCO_DNS_MSGS(MSG_NS_TITLE) {111 {Name Server (NS) Records}}
  138. set SCO_DNS_MSGS(MSG_ZONE_SERVERS) {112 Servers:}
  139. set SCO_DNS_MSGS(MSG_NEW_SERVER_SH) {113 {New name server to add to server list}}
  140. set SCO_DNS_MSGS(MSG_ADD_SERVER_SH) {114 {Add the name server to list}}
  141. set SCO_DNS_MSGS(MSG_DEL_SERVER_SH) {115 {Delete selected name server from list}}
  142. set SCO_DNS_MSGS(MSG_SERVER_LIST_SH) {116 {Additional name servers for this zone}}
  143. set SCO_DNS_MSGS(MSG_ADD_NS_TITLE) {117 {New Name Server (NS) Record}}
  144. set SCO_DNS_MSGS(MSG_MOD_NS_TITLE) {118 {Modify Name Server (NS) Record}}
  145. set SCO_DNS_MSGS(MSG_ADD_NAMESERVER_SH) {119 {Add new name server to list}}
  146. set SCO_DNS_MSGS(MSG_MOD_SERVER_SH) {120 {Modify selected name server}}
  147. set SCO_DNS_MSGS(MSG_SERVER_NAME) {121 Nameserver:}
  148. set SCO_DNS_MSGS(MSG_SERVER_NAME_SH) {122 {Hostname of name server}}
  149. set SCO_DNS_MSGS(MSG_SERVER_IP) {123 {IP address:}}
  150. set SCO_DNS_MSGS(MSG_SERVER_IP_SH) {124 {IP address of name server}}
  151. set SCO_DNS_MSGS(MSG_SERVERS_HDR) {125 {Nameserver \"IP address\"}}
  152. set SCO_DNS_MSGS(MSG_ADD_ZONE_TITLE) {126 {Add Zone}}
  153. set SCO_DNS_MSGS(MSG_MOD_ZONE_TITLE) {127 {Modify Zone}}
  154. set SCO_DNS_MSGS(MSG_ZONE_NAME) {128 {Zone name:}}
  155. set SCO_DNS_MSGS(MSG_ZONE_NAME_SH) {129 {Unique name for this zone}}
  156. set SCO_DNS_MSGS(MSG_ZONE_TYPE) {130 {Server type:}}
  157. set SCO_DNS_MSGS(MSG_ZONE_TYPE_SH) {131 {Type of server that host will act as for zone}}
  158. set SCO_DNS_MSGS(MSG_ZONE_NETWORKS) {132 Networks:}
  159. set SCO_DNS_MSGS(MSG_NEW_NETWORK_SH) {133 {New network to add to list}}
  160. set SCO_DNS_MSGS(MSG_ADD_NETWORK_SH) {134 {Add network to list}}
  161. set SCO_DNS_MSGS(MSG_DEL_NETWORK_SH) {135 {Delete selected network from list}}
  162. set SCO_DNS_MSGS(MSG_NETWORK_LIST_SH) {136 {Networks this zone contains}}
  163. set SCO_DNS_MSGS(MSG_EDIT_SOA) {137 {Start of Authority...}}
  164. set SCO_DNS_MSGS(MSG_EDIT_SOA_SH) {138 {Edit Start of Authority record for this zone}}
  165. set SCO_DNS_MSGS(MSG_EDIT_NS) {139 {Name servers...}}
  166. set SCO_DNS_MSGS(MSG_EDIT_NS_SH) {140 {List additional name servers (NS records) for this zone}}
  167. set SCO_DNS_MSGS(MSG_CONFIG_TITLE) {141 Zones}
  168. set SCO_DNS_MSGS(MSG_ZONES) {142 Zones}
  169. set SCO_DNS_MSGS(MSG_ZONES_SH) {143 {DNS zones for which this server maintains data}}
  170. set SCO_DNS_MSGS(MSG_ZONES_HDR) {144 {Zone \"Server type\" Networks}}
  171. set SCO_DNS_MSGS(MSG_ADD_ZONE) {145 Add...}
  172. set SCO_DNS_MSGS(MSG_ADD_ZONE_SH) {146 {Add a zone}}
  173. set SCO_DNS_MSGS(MSG_MOD_ZONE) {147 Modify...}
  174. set SCO_DNS_MSGS(MSG_MOD_ZONE_SH) {148 {Modify selected zone}}
  175. set SCO_DNS_MSGS(MSG_DEL_ZONE) {149 Delete}
  176. set SCO_DNS_MSGS(MSG_DEL_ZONE_SH) {150 {Delete selected zone}}
  177. set SCO_DNS_MSGS(MSG_SOA_TITLE) {151 {Start Of Authority (SOA) Record}}
  178. set SCO_DNS_MSGS(MSG_DEFAULT_SOA_TITLE) {152 {Default Start Of Authority (SOA) Record}}
  179. set SCO_DNS_MSGS(MSG_PIC) {153 {Person in charge:}}
  180. set SCO_DNS_MSGS(MSG_PIC_SH) {154 {Mail address (in DNS form) of responsible person}}
  181. set SCO_DNS_MSGS(MSG_REFRESH) {155 {Refresh rate:}}
  182. set SCO_DNS_MSGS(MSG_REFRESH_SH) {156 {How often secondary servers should check if zone transfer is required}}
  183. set SCO_DNS_MSGS(MSG_RETRY) {157 {Transfer retry:}}
  184. set SCO_DNS_MSGS(MSG_RETRY_SH) {158 {Seconds secondary server waits to retry failed zone transfer}}
  185. set SCO_DNS_MSGS(MSG_EXPIRE) {159 Expire:}
  186. set SCO_DNS_MSGS(MSG_EXPIRE_SH) {160 {Max time unrefreshed data can be used by secondary server}}
  187. set SCO_DNS_MSGS(MSG_TTL) {161 Time-to-live:}
  188. set SCO_DNS_MSGS(MSG_TTL_SH) {162 {Default minimum time records can be cached}}
  189. set SCO_DNS_MSGS(MSG_CONFIG_LIMITS_TITLE) {163 Limits}
  190. set SCO_DNS_MSGS(MSG_LIMITS_IN) {164 {Transfer limit:}}
  191. set SCO_DNS_MSGS(MSG_LIMITS_IN_SH) {165 {Maximum simultaneous named-xfer processes}}
  192. set SCO_DNS_MSGS(MSG_LIMITS_PER_NS) {166 {Transfer per name server:}}
  193. set SCO_DNS_MSGS(MSG_LIMITS_PER_NS_SH) {167 {Maximum named-xfer processes to any name server}}
  194. set SCO_DNS_MSGS(MSG_LIMITS_DATASIZE) {168 {Data segment size:}}
  195. set SCO_DNS_MSGS(MSG_LIMITS_DATASIZE_SH) {169 {Maximum data cache size in Mbytes}}
  196. set SCO_DNS_MSGS(MSG_CONFIG_OPTS_TITLE) {170 Options}
  197. set SCO_DNS_MSGS(MSG_OPTS_NO_RECURSION) {171 Recursion:}
  198. set SCO_DNS_MSGS(MSG_OPTS_RECURSION_SH) {172 {Allow recursive queries}}
  199. set SCO_DNS_MSGS(MSG_OPTS_NO_RECURSION_SH) {173 {Do not fetch data for recursive queries}}
  200. set SCO_DNS_MSGS(MSG_OPTS_FETCH_GLUE) {174 {Fetch glue:}}
  201. set SCO_DNS_MSGS(MSG_OPTS_FETCH_GLUE_SH) {175 {Fetch missing glue}}
  202. set SCO_DNS_MSGS(MSG_OPTS_NO_FETCH_GLUE_SH) {176 {Do not fetch missing glue}}
  203. set SCO_DNS_MSGS(MSG_OPTS_QUERY_LOG) {177 {Query log:}}
  204. set SCO_DNS_MSGS(MSG_OPTS_QUERY_LOG_SH) {178 {Log all queries to syslog}}
  205. set SCO_DNS_MSGS(MSG_OPTS_NO_QUERY_LOG_SH) {179 {Do not log queries}}
  206. set SCO_DNS_MSGS(MSG_CNAME_TITLE) {180 {Host Alias (CNAME) Records}}
  207. set SCO_DNS_MSGS(MSG_CNAMES) {181 Aliases:}
  208. set SCO_DNS_MSGS(MSG_NEW_CNAME_SH) {182 {New alias to add to list}}
  209. set SCO_DNS_MSGS(MSG_ADD_CNAME_SH) {183 {Add the alias to list}}
  210. set SCO_DNS_MSGS(MSG_DEL_CNAME_SH) {184 {Delete selected alias from list}}
  211. set SCO_DNS_MSGS(MSG_CNAME_LIST_SH) {185 {Aliases for host}}
  212. set SCO_DNS_MSGS(MSG_HINFO_TITLE) {186 {Host Information (HINFO) Record}}
  213. set SCO_DNS_MSGS(MSG_DEFAULT_HINFO_TITLE) {187 {Default Host Information (HINFO) Record}}
  214. set SCO_DNS_MSGS(MSG_HARDWARE) {188 Hardware:}
  215. set SCO_DNS_MSGS(MSG_HARDWARE_SH) {189 {Description of host's hardware}}
  216. set SCO_DNS_MSGS(MSG_OS) {190 {Operating system:}}
  217. set SCO_DNS_MSGS(MSG_OS_SH) {191 {Operating system running on host}}
  218. set SCO_DNS_MSGS(MSG_MX_TITLE) {192 {Mail Exchanger (MX) Record}}
  219. set SCO_DNS_MSGS(MSG_DEFAULT_MX_TITLE) {193 {Default Mail Exchangers}}
  220. set SCO_DNS_MSGS(MSG_GATEWAY) {194 {Mail exchanger:}}
  221. set SCO_DNS_MSGS(MSG_NEW_MX_SH) {195 {New mail exchanger to add to list}}
  222. set SCO_DNS_MSGS(MSG_ADD_MX_SH) {196 {Add mail exchanger to list}}
  223. set SCO_DNS_MSGS(MSG_DEL_MX_SH) {197 {Delete selected mail exchanger from list}}
  224. set SCO_DNS_MSGS(MSG_PROMOTE_MX_SH) {198 {Increase priority of selected mail exchanger}}
  225. set SCO_DNS_MSGS(MSG_DEMOTE_MX_SH) {199 {Decrease priority of selected mail exchanger}}
  226. set SCO_DNS_MSGS(MSG_GATEWAY_SH) {200 {Prioritized list of mail exchangers}}
  227. set SCO_DNS_MSGS(MSG_RP_TITLE) {201 {Responsible Person (RP) Record}}
  228. set SCO_DNS_MSGS(MSG_DEFAULT_RP_TITLE) {202 {Default Responsible Person (RP) Record}}
  229. set SCO_DNS_MSGS(MSG_OWNER) {203 {Mail address:}}
  230. set SCO_DNS_MSGS(MSG_OWNER_SH) {204 {RP's mail address (in DNS form)}}
  231. set SCO_DNS_MSGS(MSG_MAILX) {205 {TXT address:}}
  232. set SCO_DNS_MSGS(MSG_MAILX_SH) {206 {RP's TXT record (in DNS form)}}
  233. set SCO_DNS_MSGS(MSG_ZONE_TXT_TITLE) {207 {Zone Description (TXT) Record}}
  234. set SCO_DNS_MSGS(MSG_TXT_TITLE) {208 {Host Description (TXT) Record}}
  235. set SCO_DNS_MSGS(MSG_TXT_PROMPT) {209 Description:}
  236. set SCO_DNS_MSGS(MSG_ADD_TITLE) {210 {Add Host (A) Record}}
  237. set SCO_DNS_MSGS(MSG_ADD_MULTI_TITLE) {211 {Add Multi-Homed Host (A) Record}}
  238. set SCO_DNS_MSGS(MSG_MOD_TITLE) {212 {Modify Host (A) Record}}
  239. set SCO_DNS_MSGS(MSG_HOSTNAME) {213 Hostname:}
  240. set SCO_DNS_MSGS(MSG_HOSTNAME_SH) {214 {Fully qualified hostname for this record}}
  241. set SCO_DNS_MSGS(MSG_IPADDRESS) {215 {IP address:}}
  242. set SCO_DNS_MSGS(MSG_IPADDRESS_SH) {216 {IP address to associate with hostname}}
  243. set SCO_DNS_MSGS(MSG_NEW_IP_SH) {217 {New IP address to add to list}}
  244. set SCO_DNS_MSGS(MSG_ADD_IP_SH) {218 {Add IP address to list}}
  245. set SCO_DNS_MSGS(MSG_DEL_IP_SH) {219 {Delete selected IP address from list}}
  246. set SCO_DNS_MSGS(MSG_IP_LIST_SH) {220 {IP addresses to associate with hostname}}
  247. set SCO_DNS_MSGS(MSG_OPTIONAL_DATA) {221 {Optional records}}
  248. set SCO_DNS_MSGS(MSG_ALIASES) {222 Aliases...}
  249. set SCO_DNS_MSGS(MSG_ALIASES_SH) {223 {Names that are aliases for the IP address (CNAME)}}
  250. set SCO_DNS_MSGS(MSG_HINFO) {224 {Host info...}}
  251. set SCO_DNS_MSGS(MSG_HINFO_SH) {225 {Hardware and operating system info for this host (HINFO)}}
  252. set SCO_DNS_MSGS(MSG_MAIL) {226 {Mail exchangers...}}
  253. set SCO_DNS_MSGS(MSG_MAIL_SH) {227 {Hosts that know how to deliver mail to this host (MX)}}
  254. set SCO_DNS_MSGS(MSG_RESPONSIBLE) {228 Owner...}
  255. set SCO_DNS_MSGS(MSG_RESPONSIBLE_SH) {229 {The responsible person for this host (RP)}}
  256. set SCO_DNS_MSGS(MSG_DESC) {230 Description...}
  257. set SCO_DNS_MSGS(MSG_DESC_SH) {231 {Free-form text describing this host (TXT)}}
  258. set SCO_DNS_MSGS(MSG_CHANGE_TITLE) {232 {Switch Zones}}
  259. set SCO_DNS_MSGS(MSG_NEW_ZONE) {233 {New zone:}}
  260. set SCO_DNS_MSGS(MSG_NEW_ZONE_SH) {234 {New zone to configure}}
  261. set SCO_DNS_MSGS(MSG_SORT_TITLE) {235 Sort}
  262. set SCO_DNS_MSGS(MSG_SORT_NONE) {236 {Do not sort (faster)}}
  263. set SCO_DNS_MSGS(MSG_SORT_BY) {237 {Sort by}}
  264. set SCO_DNS_MSGS(MSG_SORT_BY_HOST) {238 Hostname}
  265. set SCO_DNS_MSGS(MSG_SORT_BY_IP) {239 {IP Address}}
  266. set SCO_DNS_MSGS(MSG_SORT_ORDER) {240 {Sort order}}
  267. set SCO_DNS_MSGS(MSG_SORT_UP) {241 Ascending}
  268. set SCO_DNS_MSGS(MSG_SORT_DOWN) {242 Descending}
  269. set SCO_DNS_MSGS(MSG_SORTING) {243 Sorting...}
  270. set SCO_DNS_MSGS(MSG_SEARCH_TITLE) {244 Search}
  271. set SCO_DNS_MSGS(MSG_SEARCH) {245 {Hostname or IP address:}}
  272. set SCO_DNS_MSGS(MSG_SEARCH_SH) {246 {Hostname or IP address to search for}}
  273. set SCO_DNS_MSGS(MSG_SEARCHING) {247 Searching...}
  274. set SCO_DNS_MSGS(MSG_NOT_FOUND) {248 {\"%s\" not found}}
  275. set SCO_DNS_MSGS(MSG_TRANSFER_TITLE) {249 {Zone Transfer}}
  276. set SCO_DNS_MSGS(MSG_ZONE) {250 Zone:}
  277. set SCO_DNS_MSGS(MSG_ZONE_SH) {251 {Zone to transfer data for}}
  278. set SCO_DNS_MSGS(MSG_SERVER) {252 Server:}
  279. set SCO_DNS_MSGS(MSG_SERVER_SH) {253 {Server to transfer zone data from}}
  280. set SCO_DNS_MSGS(MSG_TEST_TITLE) {254 {Test Configuration}}
  281. set SCO_DNS_MSGS(MSG_HOST_PROMPT) {255 Host:}
  282. set SCO_DNS_MSGS(MSG_TEST_PROMPT_SH) {256 {Host name or IP address to query}}
  283. set SCO_DNS_MSGS(MSG_QUERY) {257 Query}
  284. set SCO_DNS_MSGS(MSG_QUERY_SH) {258 {Obtain all DNS records associated with the host name or IP address}}
  285. set SCO_DNS_MSGS(MSG_RESULTS) {259 Results:}
  286. set SCO_DNS_MSGS(MSG_RESULTS_SH) {260 {Results of query}}
  287. set SCO_DNS_MSGS(MSG_VERSION) {261 {DNS Manager %s}}
  288. set SCO_DNS_MSGS(MSG_APP_TITLE) {262 {DNS Manager}}
  289. set SCO_DNS_MSGS(MSG_TITLE) {263 {DNS Manager on %s}}
  290. set SCO_DNS_MSGS(MSG_INITIALIZING) {264 Initializing...}
  291. set SCO_DNS_MSGS(MSG_LOAD_CONFIG) {265 {Reading server configuration...}}
  292. set SCO_DNS_MSGS(MSG_LOAD_DEFAULTS) {266 {Reading defaults...}}
  293. set SCO_DNS_MSGS(MSG_LOAD_ZONE) {267 {Reading zone database...}}
  294. set SCO_DNS_MSGS(MSG_IMPORTING) {268 {Importing file...}}
  295. set SCO_DNS_MSGS(MSG_UPDATING) {269 {Getting latest list of root servers...}}
  296. set SCO_DNS_MSGS(MSG_REBUILDING) {270 {Building configuration files for %s...}}
  297. set SCO_DNS_MSGS(MSG_EXITING) {271 {Saving configuration...}}
  298. set SCO_DNS_MSGS(MSG_NETWORK) {272 Network}
  299. set SCO_DNS_MSGS(MSG_HOSTS) {273 {Records for zone \"%1$s\" on %2$s:}}
  300. set SCO_DNS_MSGS(MSG_NO_ZONES) {274 {No primary zones configured}}
  301. set SCO_DNS_MSGS(MSG_ZONES_TITLE) {275 {Zones configured on %1$s:}}
  302. set SCO_DNS_MSGS(MSG_MENU_HOST) {276 Host}
  303. set SCO_DNS_MSGS(MSG_MENU_HOST_MN) {277 t}
  304. set SCO_DNS_MSGS(MSG_MENU_OPEN_HOST) {278 {Open Host...}}
  305. set SCO_DNS_MSGS(MSG_MENU_OPEN_HOST_MN) {279 h}
  306. set SCO_DNS_MSGS(MSG_MENU_OPEN_HOST_SH) {280 {Manage DNS server on another host}}
  307. set SCO_DNS_MSGS(MSG_MENU_EXIT) {281 Exit}
  308. set SCO_DNS_MSGS(MSG_MENU_EXIT_MN) {282 x}
  309. set SCO_DNS_MSGS(MSG_MENU_EXIT_SH) {283 {Exit DNS Manager}}
  310. set SCO_DNS_MSGS(MSG_MENU_VIEW_ZONES) {284 Zones}
  311. set SCO_DNS_MSGS(MSG_MENU_VIEW_ZONES_SH) {285 {View Zones}}
  312. set SCO_DNS_MSGS(MSG_MENU_VIEW_ZONEREC) {286 Records}
  313. set SCO_DNS_MSGS(MSG_MENU_VIEW_ZONEREC_SH) {287 {View selected zone records}}
  314. set SCO_DNS_MSGS(MSG_MENU_SERVER) {288 Server}
  315. set SCO_DNS_MSGS(MSG_MENU_SERVER_MN) {289 S}
  316. set SCO_DNS_MSGS(MSG_MENU_SETUP) {290 {Setup wizards}}
  317. set SCO_DNS_MSGS(MSG_MENU_PRIMARY) {291 Primary...}
  318. set SCO_DNS_MSGS(MSG_MENU_PRIMARY_SH) {292 {Configure host as primary DNS server}}
  319. set SCO_DNS_MSGS(MSG_MENU_SECONDARY) {293 Secondary...}
  320. set SCO_DNS_MSGS(MSG_MENU_SECONDARY_SH) {294 {Configure host as secondary DNS server}}
  321. set SCO_DNS_MSGS(MSG_MENU_CACHE) {295 Caching-only...}
  322. set SCO_DNS_MSGS(MSG_MENU_CACHE_SH) {296 {Configure host as caching-only DNS server}}
  323. set SCO_DNS_MSGS(MSG_MENU_ZONES) {297 Zones}
  324. set SCO_DNS_MSGS(MSG_MENU_ZONES_MN) {298 Z}
  325. set SCO_DNS_MSGS(MSG_MENU_ZONES_SH) {299 {Define zones for which this host maintains data}}
  326. set SCO_DNS_MSGS(MSG_MENU_LIMITS) {300 Limits...}
  327. set SCO_DNS_MSGS(MSG_MENU_LIMITS_SH) {301 {Define limits for which this host maintains data}}
  328. set SCO_DNS_MSGS(MSG_MENU_OPTS) {302 Options...}
  329. set SCO_DNS_MSGS(MSG_MENU_OPTS_SH) {303 {Define options for which this host maintains data}}
  330. set SCO_DNS_MSGS(MSG_MENU_FORWARDERS) {304 Forwarders...}
  331. set SCO_DNS_MSGS(MSG_MENU_FORWARDERS_SH) {305 {Define the list of forwarder name servers}}
  332. set SCO_DNS_MSGS(MSG_MENU_SORTLIST) {306 Preferred...}
  333. set SCO_DNS_MSGS(MSG_MENU_SORTLIST_SH) {307 {Define which networks to prefer}}
  334. set SCO_DNS_MSGS(MSG_MENU_BOGUSNS) {308 {Bad servers...}}
  335. set SCO_DNS_MSGS(MSG_MENU_BOGUSNS_SH) {309 {Define certain name servers to be ignored}}
  336. set SCO_DNS_MSGS(MSG_MENU_XFERNETS) {310 Requesters...}
  337. set SCO_DNS_MSGS(MSG_MENU_XFERNETS_SH) {311 {Define which networks can request zone transfers}}
  338. set SCO_DNS_MSGS(MSG_MENU_ENABLED) {312 {Stop Server}}
  339. set SCO_DNS_MSGS(MSG_MENU_ENABLED_SH) {313 {named is running}}
  340. set SCO_DNS_MSGS(MSG_MENU_DISABLED) {314 {Start Server}}
  341. set SCO_DNS_MSGS(MSG_MENU_DISABLED_SH) {315 {named is not running}}
  342. set SCO_DNS_MSGS(MSG_MENU_REC) {316 Records}
  343. set SCO_DNS_MSGS(MSG_MENU_REC_MN) {317 R}
  344. set SCO_DNS_MSGS(MSG_MENU_ADD) {318 Add...}
  345. set SCO_DNS_MSGS(MSG_MENU_ADD_MN) {319 A}
  346. set SCO_DNS_MSGS(MSG_MENU_ADD_SH) {320 {Add zone}}
  347. set SCO_DNS_MSGS(MSG_MENU_NAMESERVER) {321 Nameserver...}
  348. set SCO_DNS_MSGS(MSG_MENU_NAMESERVER_SH) {322 {Add name server record to current zone (required)}}
  349. set SCO_DNS_MSGS(MSG_MENU_MX) {323 {Mail Exchangers...}}
  350. set SCO_DNS_MSGS(MSG_MENU_MX_SH) {324 {Define mail exchangers for zone (MX)}}
  351. set SCO_DNS_MSGS(MSG_MENU_RP) {325 Owner...}
  352. set SCO_DNS_MSGS(MSG_MENU_RP_SH) {326 {Define responsible person for zone (RP)}}
  353. set SCO_DNS_MSGS(MSG_MENU_HINFO) {327 {Host Info...}}
  354. set SCO_DNS_MSGS(MSG_MENU_HINFO_SH) {328 {Define default host configuration for zone (HINFO)}}
  355. set SCO_DNS_MSGS(MSG_MENU_TXT) {329 Description...}
  356. set SCO_DNS_MSGS(MSG_MENU_TXT_SH) {330 {Describe zone (TXT)}}
  357. set SCO_DNS_MSGS(MSG_MENU_HOSTS) {331 Host...}
  358. set SCO_DNS_MSGS(MSG_MENU_HOSTS_SH) {332 {Add new host (and associated records) to zone}}
  359. set SCO_DNS_MSGS(MSG_MENU_MULTIHOSTS) {333 {Multi-homed host...}}
  360. set SCO_DNS_MSGS(MSG_MENU_MULTIHOSTS_SH) {334 {Add new multi-homed host (and associated records) to zone}}
  361. set SCO_DNS_MSGS(MSG_MENU_MOD) {335 Modify...}
  362. set SCO_DNS_MSGS(MSG_MENU_MOD_SH) {336 {Modify selected record}}
  363. set SCO_DNS_MSGS(MSG_MENU_DEL) {337 Delete}
  364. set SCO_DNS_MSGS(MSG_MENU_DEL_SH) {338 {Delete selected record}}
  365. set SCO_DNS_MSGS(MSG_MENU_VIEW) {339 View}
  366. set SCO_DNS_MSGS(MSG_MENU_VIEW_MN) {340 V}
  367. set SCO_DNS_MSGS(MSG_MENU_CHANGE_ZONE) {341 {Switch zone...}}
  368. set SCO_DNS_MSGS(MSG_MENU_CHANGE_ZONE_SH) {342 {Switch to another zone}}
  369. set SCO_DNS_MSGS(MSG_MENU_SORT) {343 Sort...}
  370. set SCO_DNS_MSGS(MSG_MENU_SORT_SH) {344 {Define how to sort entries in zone database}}
  371. set SCO_DNS_MSGS(MSG_MENU_SEARCH) {345 Search...}
  372. set SCO_DNS_MSGS(MSG_MENU_SEARCH_SH) {346 {Search for particular host or IP address in database}}
  373. set SCO_DNS_MSGS(MSG_EXPAND_ALL) {347 {Expand All}}
  374. set SCO_DNS_MSGS(MSG_EXPAND_ALL_SH) {348 {Expand all records in zone database}}
  375. set SCO_DNS_MSGS(MSG_COLLAPSE_ALL) {349 {Collapse All}}
  376. set SCO_DNS_MSGS(MSG_COLLAPSE_ALL_SH) {350 {Collapse all records in zone database}}
  377. set SCO_DNS_MSGS(MSG_EXPAND) {351 Expand}
  378. set SCO_DNS_MSGS(MSG_EXPAND_SH) {352 {Expand selected record in zone database}}
  379. set SCO_DNS_MSGS(MSG_COLLAPSE) {353 Collapse}
  380. set SCO_DNS_MSGS(MSG_COLLAPSE_SH) {354 {Collapse selected record in zone database}}
  381. set SCO_DNS_MSGS(MSG_MENU_OPTIONS) {355 Options}
  382. set SCO_DNS_MSGS(MSG_MENU_OPTIONS_MN) {356 O}
  383. set SCO_DNS_MSGS(MSG_MENU_DEFAULTS) {357 Defaults}
  384. set SCO_DNS_MSGS(MSG_MENU_DEFAULTS_MN) {358 D}
  385. set SCO_DNS_MSGS(MSG_MENU_SOA) {359 {Start Of Authority...}}
  386. set SCO_DNS_MSGS(MSG_MENU_DEFSOA_SH) {360 {Default Start of Authority (SOA) record for new zones}}
  387. set SCO_DNS_MSGS(MSG_MENU_DEFMX_SH) {361 {Default mail exchanger (MX) records for new zones}}
  388. set SCO_DNS_MSGS(MSG_MENU_DEFRP_SH) {362 {Default responsible person (RP) record for new zones}}
  389. set SCO_DNS_MSGS(MSG_MENU_DEFHINFO_SH) {363 {Default host information (HINFO) record for new zones}}
  390. set SCO_DNS_MSGS(MSG_MENU_IMPORT) {364 {Import file...}}
  391. set SCO_DNS_MSGS(MSG_MENU_IMPORT_SH) {365 {Import host records from file}}
  392. set SCO_DNS_MSGS(MSG_MENU_UPDATE) {366 {Update Cache File}}
  393. set SCO_DNS_MSGS(MSG_MENU_UPDATE_SH) {367 {Get latest list of root servers}}
  394. set SCO_DNS_MSGS(MSG_MENU_TRANSFER) {368 {Zone Transfer...}}
  395. set SCO_DNS_MSGS(MSG_MENU_TRANSFER_SH) {369 {Initiate zone transfer}}
  396. set SCO_DNS_MSGS(MSG_MENU_TEST) {370 {Test Configuration...}}
  397. set SCO_DNS_MSGS(MSG_MENU_TEST_SH) {371 {Test current configuration can resolve names}}
  398. #@package: netcommon \
  399.     Confirm debug StatusTemp StatusRestore GetManagedHost SetInstance \
  400.     OnlyOneCopy isOwner ownerOpen
  401. proc Confirm {widget default message okcallback} {
  402.     set YN [VtQuestionDialog $widget.YN \
  403.         -ok \
  404.         -okCallback $okcallback \
  405.         -autoLock $okcallback \
  406.         -cancel \
  407.         -message $message \
  408.         ]
  409.     VtShow $YN
  410. }
  411. proc debug {debug} {
  412.     global Main
  413.     if { $Main(debug) } {
  414.     echo $debug
  415.     }
  416. }
  417. proc StatusTemp {widget status} {
  418.     set statusBar [VxGetVar $widget statusBar]
  419.     set old [SaStatusBarGet $statusBar]
  420.     VxSetVar $widget SavesStatus $old
  421.     SaStatusBarSet $statusBar $status
  422. }
  423. proc StatusRestore {widget} {
  424.     set old [VxGetVar $widget SavesStatus]
  425.     SaStatusBarSet [VxGetVar $widget statusBar] $old
  426. }
  427. proc GetManagedHost {} {
  428.     global argv
  429.     set scriptName [file tail [info script]]
  430.     foreach opt $argv {
  431.         if { ![info exists managedHost] } {
  432.                 set managedHost $opt
  433.         } else {
  434.                 echo "Usage: $scriptName [hostName]"
  435.         }
  436.     }
  437.     set localHost [SaHostExtractSystemName [SaHostGetLocalName]]
  438.     if { ![info exists managedHost] } {
  439.         set managedHost $localHost
  440.     }
  441.     return $managedHost
  442. }
  443. proc SetInstance {object} {
  444.     global managedHost
  445.     set instance "[list [list systemId $managedHost]] $object"
  446.     return [list $instance]
  447. }
  448. proc OnlyOneCopy {fname {remote 1}} {
  449.     global managedHost
  450.     if {$remote && [info exist managedHost] && ![cequal $managedHost [SaHostGetLocalName]]} {
  451.     set instance "[list [list systemId $managedHost]] $fname"
  452.     set objcall [list ObjectAction {sco net} \
  453.         [list $instance] OnlyOneCopy {}]
  454.     set bmipResponse [SaMakeObjectCall $objcall]
  455.     set firstBmip [lindex $bmipResponse 0]
  456.     set errStack [BmipResponseErrorStack firstBmip]
  457.     if {[lempty $errStack]} {
  458.         return [BmipResponseActionInfo firstBmip]
  459.     } else {
  460.         return 1
  461.     }
  462.     }
  463.     set fd ""
  464.     if { ! [ file exists $fname ] } {
  465.     unlink -nocomplain $fname
  466.     system "/etc/mknod $fname p"
  467.     }
  468.     if {[isOwner]} {
  469.     owner exec /bin/chown [id userid] $fname
  470.     }
  471.     catch { set fd [open $fname {WRONLY NONBLOCK}] } ErrorCode
  472.     if { [ csubstr "$ErrorCode" 0 4 ] == "file" } {
  473.     close $fd
  474.     set fd ""
  475.     } else {
  476.     catch {set fd [ open $fname RDWR ]} ErrorCode
  477.     }
  478.     if {[isOwner]} {
  479.     owner exec /bin/chown root $fname
  480.     }
  481.     if { [ csubstr "$fd" 0 4 ] != "file" } {
  482.     return 0
  483.     } else {
  484.     return 1
  485.     }
  486. }
  487. proc isOwner args {
  488.     global isOwner_cache
  489.     set user [lvarpop args]
  490.     switch -- $user {
  491.         -host {
  492.             set host [lvarpop args]
  493.             set user [lvarpop args]
  494.         }
  495.         default {
  496.             set host ""
  497.         }
  498.     }
  499.     if {![cequal $host ""]} {
  500.         set instance "[list [list systemId $host]] NULL"
  501.         set objcall [list ObjectAction {sco net} \
  502.             [list $instance] isOwner $user]
  503.         set bmipResponse [SaMakeObjectCall $objcall]
  504.         set firstBmip [lindex $bmipResponse 0]
  505.         set errStack [BmipResponseErrorStack firstBmip]
  506.         if {[lempty $errStack]} {
  507.             return [BmipResponseActionInfo firstBmip]
  508.         } else {
  509.             return 0
  510.         }
  511.     } else {
  512.         if {[cequal $user ""]} {
  513.             set user [id user]
  514.         }
  515.         if {[info exist isOwner_cache($user)]} {
  516.             return $isOwner_cache($user)
  517.         }
  518.         set owners(root) root
  519.         set sc [scancontext create]
  520.         scanmatch $sc "^mail=\(.*\)$" {
  521.             foreach name $matchInfo(submatch0) {
  522.                 set owners($name) $name
  523.             }
  524.         }
  525.         foreach file [glob -nocomplain -- /var/sadm/install/admin/*] {
  526.             set fd [open $file r]
  527.             scanfile $sc $fd
  528.             close $fd
  529.         }
  530.         scancontext delete $sc 
  531.         catch {unset owners(root)}
  532.         set isOwner_cache($user) [info exist owners($user)]    
  533.         return $isOwner_cache($user)
  534.     }
  535. }
  536. proc ownerOpen {cmd fpath {openMode {}}} {
  537.     switch -exact -- $cmd {
  538.     r -
  539.     readfile {
  540.         if {[lempty $openMode]} {
  541.             set openMode r
  542.         }
  543.         set cmd readfile
  544.     }
  545.     w -
  546.     writefile {
  547.         if {[lempty $openMode]} {
  548.             set openMode w
  549.         }
  550.         set cmd writefile
  551.     }
  552.     default {
  553.         return -1
  554.     }
  555.     }
  556.     set path "/usr/lib/scoadmin/snmpmgr"
  557.     if {[id userid] == 0} {
  558.     set openCmd [format "| %s/%s %s" $path $cmd $fpath]
  559.     } else {
  560.     set openCmd [format "| /sbin/tfadmin %s %s" $cmd $fpath]
  561.     }
  562.     set ret [catch {open $openCmd $openMode} fd]
  563.     return [expr {($ret == 0) ? $fd : -1}]
  564. }
  565. #@packend
  566. proc SetAddButSensitivityCB {dataW buttonW listW delW cbs} {
  567.     keylget cbs dialog dialog
  568.     set data   [VxGetVar $dialog $dataW ]
  569.     set button [VxGetVar $dialog $buttonW ]
  570.     set delBut [VxGetVar $dialog $delW ]
  571.     set list   [VxGetVar $dialog $listW]
  572.     set value [VtGetValues $data -value]
  573.     if {$value == {}} {
  574.         VtSetSensitive $button 0
  575.     } else {
  576.         VtSetSensitive $button 1
  577.         VtSetSensitive $delBut 0
  578.         VtListDeselectItem $list -all
  579.     }
  580. }
  581. proc SetDelButSensitivityCB {dataW buttonW cbs} {
  582.     keylget cbs dialog dialog
  583.     set data   [VxGetVar $dialog $dataW ]
  584.     set button [VxGetVar $dialog $buttonW ]
  585.     set value [VtListGetSelectedItem $data]
  586.     if {$value == {}} {
  587.         VtSetSensitive $button 0
  588.     } else {
  589.         VtSetSensitive $button 1
  590.     }
  591. }
  592. proc AddEntryToListCB {dataW listW cbs} {
  593.     keylget cbs dialog dialog
  594.     set data [VxGetVar $dialog $dataW ]
  595.     set list [VxGetVar $dialog $listW]
  596.     set value [VtGetValues $data -value]
  597.     VtListAddItem $list -item $value
  598.     VtSetValues $data -value ""
  599.     VtUnLock
  600. }
  601. proc DeleteEntryFromListCB {dataW buttonW cbs} {
  602.     keylget cbs dialog dialog
  603.     set data   [VxGetVar $dialog $dataW]
  604.     set button [VxGetVar $dialog $buttonW ]
  605.     set selected [VtListGetSelectedItem $data -byPositionList]
  606.     VtListDeleteItem $data -position $selected 
  607.     VtSetSensitive $button 0
  608.     VtUnLock
  609. }
  610. proc ReDisplay {data} {        ;#CALLOUT for netadm.tlib
  611.     global VIEW SORT
  612.     switch $SORT(ORDER) {
  613.     up    {set sortType "-increasing"}
  614.     default    {set sortType "-decreasing"}
  615.     }
  616.     if {[cequal $VIEW ZONEREC]} {
  617.     set index [expr {[cequal host $SORT(ITEM)] == 0 ? 1 : 0}]
  618.     set parents [lsort $sortType -command "SortHost $index" $data]
  619.     } else {
  620.     set priority [list [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY] \
  621.         [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY] \
  622.         [IntlLocalizeMsg SCO_DNS_MSG_STUB] \
  623.         [IntlLocalizeMsg SCO_DNS_MSG_CACHING]]
  624.     set parents [lsort $sortType -command "SortZone \"$priority\"" $data]
  625.     }
  626.     return $parents
  627. }
  628. proc SortZone {priority element1 element2} {
  629.     set el1 [lindex $element1 0]
  630.     set el2 [lindex $element2 0]
  631.     foreach type $priority {
  632.     if {[cequal $el1 $type] && [cequal $el2 $type]} {
  633.         return [string compare [lindex $element1 0] [lindex $element2 0]]
  634.     } elseif [cequal $el1 $type] { return -1
  635.     } elseif [cequal $el2 $type] { return 1
  636.     }
  637.     }
  638.     return 0
  639. }
  640. proc SortHost {ind element1 element2} {
  641.     if {$ind} {        ;# ip match
  642.     set element1 [split [lindex $element1 $ind] .]
  643.     set element2 [split [lindex $element2 $ind] .]
  644.     foreach el1 $element1 {
  645.         set el2 [lvarpop element2]
  646.         if {$el1 == $el2} {continue}
  647.         return [expr {($el1 < $el2) ? -1 : 1}]
  648.     }
  649.     } else {        ;# string match
  650.     return [string compare [lindex $element1 $ind] [lindex $element2 $ind]]
  651.     }
  652.     return 0
  653. }
  654. proc FindItemParent {selected all} {    ;#CALLOUT for netadm.tlib
  655.     global VIEW BROWSER
  656.     if [cequal $VIEW ZONES] {
  657.     set parent [VtDrawnListGetItem $BROWSER -field 2 \
  658.         [lindex [lindex $selected 3] 1]]
  659.     } else {
  660.     set parent [VtDrawnListGetItem $BROWSER -field 1 \
  661.         [lindex [lindex $selected 3] 0]]
  662.     }
  663.     return [lsearch -exact $all [lindex $parent 0]]
  664. }
  665. proc GetIcon {data} {            ;#CALLOUT for netadm.tlib
  666.     switch -- [lindex $data 2] {
  667.     ZONE    { set icon 1 }
  668.     default { set icon 0 }
  669.     }
  670.     return $icon
  671. }
  672. proc GetZones {} {
  673.     global ZONES
  674.     if [info exists ZONES] {
  675.         return [array names ZONES]
  676.     } else {
  677.         return {}
  678.     }
  679. }
  680. proc GetNetworks {parentId} {
  681.     set ent [browser:ParentData $parentId]
  682.     set networks {}
  683.     if [keylget ent children children] {
  684.     foreach child $children {
  685.         if [cequal [lindex $child 0] [IntlLocalizeMsg SCO_DNS_MSG_NETWORK]] {
  686.         lappend networks [lindex $child 1]
  687.         }
  688.     }
  689.    }
  690.    return $networks
  691. }
  692. proc FQDN {host} {
  693.     set dotpos [string last "." $host]
  694.     set len [expr {[string length $host] - 1}]
  695.     return [expr { ($dotpos > -1) && ($dotpos != $len) }]
  696. }
  697. proc Init:ZoneEntry {{modify {}}} {
  698.     global ZoneEntry DEFAULTS
  699.     global BROWSER
  700.     set ZoneEntry {}
  701.     keylset ZoneEntry CNAME {}
  702.     keylset ZoneEntry TXT   {}
  703.     keylset ZoneEntry MX    {}
  704.     keylset hinfo hw  {}
  705.     keylset hinfo os  {}
  706.     keylset ZoneEntry HINFO $hinfo
  707.     keylset rp owner  {}
  708.     keylset rp mx     {}
  709.     keylset ZoneEntry RP    $rp
  710.     if {[lempty $modify]} {
  711.     keylset ZoneEntry MX    $DEFAULTS(MX_exchangers)
  712.     keylset hinfo hw  $DEFAULTS(HINFO_hw)
  713.     keylset hinfo os  $DEFAULTS(HINFO_os)
  714.     keylset ZoneEntry HINFO $hinfo
  715.     keylset rp owner  $DEFAULTS(RP_owner)
  716.     keylset rp mx     $DEFAULTS(RP_mx)
  717.     keylset ZoneEntry RP    $rp
  718.     return
  719.     }
  720.     set pos [lindex [VtDrawnListGetSelectedItem $BROWSER -byPositionList] 0]
  721.     set parent [browser:FindItemParent $pos]
  722.     set parentId [browser:ParentId $parent]
  723.     set ent [browser:ParentData $parentId]
  724.     keylget ent children children
  725.     foreach child $children {
  726.     set type [lindex $child 0]
  727.     set data [lindex $child 1]
  728.         switch $type {
  729.        CNAME { keylget ZoneEntry CNAME cnames
  730.           lappend cnames $data
  731.           keylset ZoneEntry CNAME $cnames
  732.                 }
  733.           HINFO { keylset hinfo hw [lindex $data 0]
  734.           keylset hinfo os [lindex $data 1]
  735.           keylset ZoneEntry HINFO $hinfo
  736.         }
  737.           MX    { keylget ZoneEntry MX exchangers
  738.           lappend exchangers [lindex $data 1]
  739.           keylset ZoneEntry MX $exchangers
  740.         }
  741.           RP    { keylset rp owner [lindex $data 0]
  742.           keylset rp mx    [lindex $data 1]
  743.           keylset ZoneEntry RP $rp
  744.         }
  745.           TXT   { keylset ZoneEntry TXT $data}
  746.         }
  747.     }
  748. }
  749. proc DummyCB {cbs} {
  750. }
  751. proc CreateZone {type name {networks {}}} {
  752.     global tempSOA tempNS
  753.     set attrs {}
  754.     keylset attrs file "db.${name}"
  755.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  756.     set newtype "dNSPrimary"
  757.         keylset attrs serial  1        ;#XXX
  758.         keylset attrs mailbox [keylget tempSOA pic]
  759.         keylset attrs refresh [keylget tempSOA refresh]
  760.         keylset attrs retry   [keylget tempSOA retry]
  761.         keylset attrs expire  [keylget tempSOA expire]
  762.         keylset attrs minimum [keylget tempSOA ttl]
  763.     set serverList {}
  764.         foreach serverRec $tempNS {
  765.             keylget serverRec data optData
  766.             lappend serverList [list [keylget optData nameserver] \
  767.                      [keylget optData ipaddr]]
  768.         }
  769.         keylset attrs serverList $serverList
  770.     } else {
  771.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY]] {
  772.         set newtype "dNSSecondary"
  773.     } else {
  774.         set newtype "dNSStub"
  775.     }
  776.     set serverList {}
  777.         foreach serverRec $tempNS {
  778.             keylget serverRec data optData
  779.             lappend serverList [keylget optData nameserver]
  780.         }
  781.         keylset attrs serverList $serverList
  782.     }
  783.     set objcall [list ObjectCreate \
  784.         [list sco $newtype] [SetInstance $name] $attrs]
  785.     set bmipResponse [SaMakeObjectCall $objcall]
  786.     set firstBmip [lindex $bmipResponse 0]
  787.     set errStack [BmipResponseErrorStack firstBmip]
  788.     if { ![lempty $errStack] } {
  789.            ErrorPush errStack 1 SCO_DNS_ERR_ADD_ZONE
  790.     }
  791.     foreach net $networks {
  792.     set network [ReverseAddr $net]
  793.         keylset attrs file "db.${network}"
  794.         set objcall [list ObjectCreate \
  795.                         [list sco $newtype] \
  796.             [SetInstance ${network}.in-addr.arpa] $attrs]
  797.         set bmipResponse [SaMakeObjectCall $objcall]
  798.         set firstBmip [lindex $bmipResponse 0]
  799.         set errStack [BmipResponseErrorStack firstBmip]
  800.         if { ![lempty $errStack] } {
  801.            ErrorPush errStack 1 SCO_DNS_ERR_ADD_ZONE
  802.         }
  803.     }
  804. }
  805. proc ReverseAddr {net} {
  806.     set ret {}
  807.     set ptr [split $net "."]
  808.     set len [llength $ptr]
  809.     while {$len} {
  810.     incr len -1
  811.     lappend ret [lindex $ptr $len]
  812.     }
  813.     return  [join $ret "."]
  814. }
  815. proc DeleteZone {type name {networks {}}} {
  816.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  817.     set type "dNSPrimary"
  818.     } elseif [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY]] {
  819.     set type "dNSSecondary"
  820.     } else {
  821.     set type "dNSStub"
  822.     }
  823.     set objcall [list ObjectDelete \
  824.                         [list sco $type] [SetInstance $name] {}]
  825.     set bmipResponse [SaMakeObjectCall $objcall]
  826.     set firstBmip [lindex $bmipResponse 0]
  827.     set errStack [BmipResponseErrorStack firstBmip]
  828.     if { ![lempty $errStack] } {
  829.            ErrorPush errStack 1 SCO_DNS_ERR_DEL_ZONE
  830.     }
  831.     foreach net $networks {
  832.     set network [ReverseAddr $net]
  833.         set objcall [list ObjectDelete [list sco $type] \
  834.                 [SetInstance ${network}.in-addr.arpa] {}]
  835.         set bmipResponse [SaMakeObjectCall $objcall]
  836.         set firstBmip [lindex $bmipResponse 0]
  837.         set errStack [BmipResponseErrorStack firstBmip]
  838.         if { ![lempty $errStack] } {
  839.            ErrorPush errStack 1 SCO_DNS_ERR_DEL_ZONE
  840.         }
  841.     }
  842. }
  843. proc cvtsecs {secs} {
  844.     if [lempty $secs] {return ""}
  845.     set nums "31557600 604800 86400 3600 60 1"
  846.     set names [IntlLocalizeMsg SCO_DNS_MSG_TIME_NAME]
  847.     set plural [IntlLocalizeMsg SCO_DNS_MSG_TIME_NAMES]
  848.     set result ""
  849.     loop i 0 [llength $nums] {
  850.             if {[set num [expr $secs/[lindex $nums $i]]] != 0} {
  851.                 if {$num == 1} {
  852.                     append result " $num [lindex $names $i]"
  853.                 } else {
  854.                     append result " $num [lindex $plural $i]"
  855.                 }
  856.                 set secs [expr "$secs % [lindex $nums $i]"]
  857.             }
  858.     }
  859.     return $result
  860. }
  861. proc CompareFields {index type element1 element2} {
  862.     set value1 [string tolower [lindex $element1 $index]]
  863.     set value2 [string tolower [lindex $element2 $index]]
  864.     if [cequal $type NUM] {
  865.         if {$value1 == $value2} {
  866.             return 0
  867.         } elseif {$value1 < $value2} {
  868.             return -1
  869.         } else {
  870.             return 1
  871.         }
  872.     } else {
  873.         return [string compare $value1 $value2]
  874.     }
  875. }
  876. proc DoSortCB {cbs} {
  877.     global Main SORT
  878.     keylget cbs dialog dialog
  879.     StatusTemp $Main(Dialog) [IntlLocalizeMsg SCO_DNS_MSG_SORTING]
  880.     set by    [VxGetVar $dialog by ]
  881.     set order [VxGetVar $dialog order]
  882.     set field     [VxGetShortName [VtGetValues $by -value]]
  883.     set direction [VxGetShortName [VtGetValues $order -value]]
  884.     VxEndFormCB $cbs
  885.     set SORT(ITEM) $field
  886.     set SORT(ORDER) $direction
  887.     browser:ReDisplay
  888.     StatusRestore $Main(Dialog)
  889.     VtUnLock
  890. }
  891. proc SortByCB {cbs} {
  892.     global SORT VIEW
  893.     set dialog [keylget cbs dialog]
  894.     set form [VtFormDialog $dialog.cname \
  895.         -ok -cancel -help \
  896.                 -okLabel [IntlLocalizeMsg SCO_DNS_MSG_APPLY] \
  897.                 -okCallback DoSortCB \
  898.                 -autoLock DoSortCB \
  899.                 -cancelCallback VxEndFormCB \
  900.                 -cancelButton CANCEL \
  901.                 -title [IntlLocalizeMsg SCO_DNS_MSG_SORT_TITLE] ]
  902.     set frame1 [VtFrame $form.frame1 \
  903.         -title [IntlLocalizeMsg SCO_DNS_MSG_SORT_BY] \
  904.     -MOTIF_topOffset 20 -CHARM_topOffset 1 \
  905.         -leftSide FORM -rightSide FORM ]
  906.     set subform1 [VtForm $frame1.subform1 -marginWidth 0 -marginHeight 0]
  907.     set by [VtRadioBox $subform1.by]
  908.     set host   [VtToggleButton $by.host \
  909.             -label [IntlLocalizeMsg SCO_DNS_MSG_SORT_BY_HOST] \
  910.             -font medNormalFont -set 1]
  911.     set ipaddr [VtToggleButton $by.ipaddr \
  912.             -label [IntlLocalizeMsg SCO_DNS_MSG_SORT_BY_IP] \
  913.             -font medNormalFont ]
  914.     set frame2 [VtFrame $form.frame2 \
  915.         -title [IntlLocalizeMsg SCO_DNS_MSG_SORT_ORDER] \
  916.     -MOTIF_topOffset 20 -CHARM_topOffset 1 \
  917.         -leftSide FORM -rightSide FORM ]
  918.     set subform2 [VtForm $frame2.subform2 -marginWidth 0 -marginHeight 0]
  919.     set order [VtRadioBox $subform2.order]
  920.     set up   [VtToggleButton $order.up \
  921.             -label [IntlLocalizeMsg SCO_DNS_MSG_SORT_UP] \
  922.             -font medNormalFont -set 1]
  923.     set down [VtToggleButton $order.down \
  924.             -label [IntlLocalizeMsg SCO_DNS_MSG_SORT_DOWN] \
  925.             -font medNormalFont ]
  926.     set sep [VtSeparator $form.sep1 -horizontal \
  927.         -leftSide FORM -rightSide FORM \
  928.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  929.         -topSide $subform2 -CHARM_topOffset 1]
  930.     set status [SaStatusBar $form.status 0]
  931.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  932.     VxSetVar $form by     $by
  933.     VxSetVar $form order  $order
  934.     VxSetVar $form frame1 $frame1
  935.     VxSetVar $form frame2 $frame2
  936.     VtSetValues $by -value $SORT(ITEM)
  937.     VtSetValues $order -value $SORT(ORDER)
  938.     if [cequal $VIEW ZONES] {        ;# ignore when viewing zones only
  939.     VtSetSensitive $by 0
  940.     }
  941.     VtShow $form
  942.     VtUnLock
  943. }
  944. proc UpdateLabelCB {widget cbs} {
  945.     keylget cbs dialog dialog
  946.     set value [VtGetValues [VxGetVar $dialog $widget] -value]
  947.     set value [string trimleft $value 0]    ;# strip off any leading 0's
  948.     if {![ctype digit $value]} then {
  949.         VtSetValues [VxGetVar $dialog $widget] -value {}
  950.     VtSetValues [VxGetVar $dialog ${widget}L] -label {}
  951.     } else {
  952.     VtSetValues [VxGetVar $dialog ${widget}L] -label [cvtsecs $value]
  953.     }
  954. }
  955. proc multi:AddEntryToListCB {dataW listW cbs} {
  956.     global NETWORKS ZONE
  957.     keylget cbs dialog dialog
  958.     set data [VxGetVar $dialog $dataW ]
  959.     set list [VxGetVar $dialog $listW]
  960.     set value [getIPwidgetValue $data]
  961.     set networks [keylget NETWORKS $ZONE]
  962.     set current [VtListGetItem $list -all]
  963.     if {[lsearch -exact $current $value] == -1} {
  964.     VtListAddItem $list -item $value
  965.     }
  966.     setIPwidgetValue $data [lindex $networks 0]
  967.     VtUnLock
  968. }
  969. proc CompleteAddEntryToList {value data list cbs} {
  970.     VtListAddItem $list -item $value
  971.     VtSetValues $data -value ""
  972.     VtUnLock
  973. }
  974. proc host:AddEntryToListCB {dataW listW cbs} {
  975.     keylget cbs dialog dialog
  976.     set data [VxGetVar $dialog $dataW ]
  977.     set list [VxGetVar $dialog $listW]
  978.     set value [VtGetValues $data -value]
  979.     if {[regexp -- {[^A-Za-z0-9.-_]} $value inval]} {
  980.     ctoken value $inval
  981.         ErrorPush errStack 0 SCO_DNS_ERR_CHAR1 [list $value]
  982.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  983.         VtUnLock
  984.         return
  985.     }
  986.     if [FQDN $value] {
  987.     set warnform [VtWarningDialog $dialog.warn \
  988.                 -ok -okCallback "CompleteAddEntryToList $value $data $list" \
  989.                 -autoLock CompleteAddEntryToList \
  990.         -cancel \
  991.                 -message [IntlLocalizeMsg SCO_DNS_ERR_BAD_HOSTNAME] \
  992.               ]
  993.         VtShow $warnform
  994.     VtUnLock
  995.     } else {
  996.         VtListAddItem $list -item $value
  997.         VtSetValues $data -value ""
  998.         VtUnLock
  999.     }
  1000. }
  1001. proc dns:AddEntryToListCB {dataW listW cbs} {
  1002.     keylget cbs dialog dialog
  1003.     set data [VxGetVar $dialog $dataW ]
  1004.     set list [VxGetVar $dialog $listW]
  1005.     set servers [VtListGetItem $list -all]
  1006.     if {[llength $servers] == 10} {
  1007.         ErrorPush errStack 0 SCO_DNS_ERR_TOO_MANY_SERVERS
  1008.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1009.         VtUnLock
  1010.         return
  1011.     }
  1012.     set value [getIPwidgetValue $data]
  1013.     VtListAddItem $list -item $value
  1014.     setIPwidgetValue $data "..."
  1015.     VtUnLock
  1016. }
  1017. proc dns:checkIPWidgetCB {form cbs} {
  1018.     set value  [keylget cbs value]
  1019.     set widget [keylget cbs widget]
  1020.     set dialog [keylget cbs dialog]
  1021.     set addBut [VxGetVar $dialog addBut]
  1022.     set delBut [VxGetVar $dialog delBut]
  1023.     set list   [VxGetVar $dialog serverList]
  1024.     set a_addr [VxGetVar $form a_addr]
  1025.     set b_addr [VxGetVar $form b_addr]
  1026.     set c_addr [VxGetVar $form c_addr]
  1027.     set d_addr [VxGetVar $form d_addr]
  1028.     set skip 0
  1029.     set length [string length $value]
  1030.     if {$length == 0} {
  1031.     VtSetSensitive $addBut 0
  1032.     return
  1033.     }
  1034.     if {$length == 3} {
  1035.     set skip 1
  1036.     }
  1037.     if {[string range $value [expr $length - 1] end] == "."} {
  1038.     set skip 1
  1039.     set value [string range $value 0 [expr $length - 2]]
  1040.     VtSetValues $widget -value $value
  1041.     }
  1042.     if {![ctype digit $value]} then {
  1043.     VtBeep
  1044.     VtSetValues $widget -value ""
  1045.     VtSetSensitive $addBut 0
  1046.     return
  1047.     }
  1048.     if {$value < 0 || $value > 255} then {
  1049.     VtBeep
  1050.     VtSetValues $widget -value ""
  1051.     VtSetSensitive $addBut 0
  1052.     return
  1053.     }
  1054.     set a_val [VtGetValues $a_addr -value]
  1055.     set b_val [VtGetValues $b_addr -value]
  1056.     set c_val [VtGetValues $c_addr -value]
  1057.     set d_val [VtGetValues $d_addr -value]
  1058.     if {($a_val != "") && ($b_val != "") && ($c_val != "") && ($d_val != "")} {
  1059.     VtSetSensitive $addBut 1
  1060.     VtSetSensitive $delBut 0
  1061.         VtListDeselectItem $list -all
  1062.     } else {
  1063.     VtSetSensitive $addBut 0
  1064.     }
  1065.     if {$skip} then {
  1066.     if {$widget == $a_addr} {VtSetFocus $b_addr}
  1067.     if {$widget == $b_addr} {VtSetFocus $c_addr}
  1068.     if {$widget == $c_addr} {VtSetFocus $d_addr}
  1069.     }
  1070. }
  1071. proc dns:createIPwidget {form value shortHelp changedCB okCB} {
  1072.     set values [split $value "."]
  1073.     set a_addr [VtText $form.a -columns 3 \
  1074.         -value [lindex $values 0] \
  1075.         -callback "SaSetFocus next" \
  1076.         -valueChangedCallback "$changedCB" \
  1077.         -shortHelpCallback SaShortHelpCB \
  1078.         -shortHelpString "[IntlLocalizeMsg $shortHelp]" ]
  1079.     set a_label [VtLabel $form.al -label "." \
  1080.         -leftOffset 0 \
  1081.         -leftSide $a_addr -alignTop $a_addr]
  1082.     set b_addr [VtText $form.b -columns 3 \
  1083.         -value [lindex $values 1] \
  1084.         -callback "SaSetFocus next" \
  1085.         -valueChangedCallback "$changedCB" \
  1086.         -leftOffset 0 \
  1087.         -leftSide $a_label -alignTop $a_label \
  1088.         -shortHelpCallback SaShortHelpCB \
  1089.         -shortHelpString "[IntlLocalizeMsg $shortHelp]" ]
  1090.     set b_label [VtLabel $form.bl -label "." \
  1091.         -leftOffset 0 \
  1092.         -leftSide $b_addr -alignTop $b_addr]
  1093.     set c_addr [VtText $form.c -columns 3 \
  1094.         -value [lindex $values 2] \
  1095.         -callback "SaSetFocus next" \
  1096.         -valueChangedCallback "$changedCB" \
  1097.         -leftOffset 0 \
  1098.         -leftSide $b_label -alignTop $b_label \
  1099.         -shortHelpCallback SaShortHelpCB \
  1100.         -shortHelpString "[IntlLocalizeMsg $shortHelp]" ]
  1101.     set c_label [VtLabel $form.cl -label "." \
  1102.         -leftOffset 0 \
  1103.         -leftSide $c_addr -alignTop $c_addr]
  1104.     set d_addr [VtText $form.d -columns 3 \
  1105.         -value [lindex $values 3] \
  1106.         -callback "$okCB" \
  1107.         -autoLock [lindex $okCB 0] \
  1108.         -valueChangedCallback "$changedCB" \
  1109.         -leftSide $c_label -alignTop $c_label \
  1110.         -leftOffset 0 \
  1111.         -shortHelpCallback SaShortHelpCB \
  1112.         -shortHelpString "[IntlLocalizeMsg $shortHelp]" ]
  1113.     VxSetVar $form a_addr $a_addr
  1114.     VxSetVar $form b_addr $b_addr
  1115.     VxSetVar $form c_addr $c_addr
  1116.     VxSetVar $form d_addr $d_addr
  1117. }
  1118. proc dns:SetAddButSensitivityCB {dataW buttonW listW delW cbs} {
  1119.     keylget cbs dialog dialog
  1120.     set data   [VxGetVar $dialog $dataW ]
  1121.     set button [VxGetVar $dialog $buttonW]
  1122.     set delBut [VxGetVar $dialog $delW ]
  1123.     set list   [VxGetVar $dialog $listW]
  1124.     set a_addr [VxGetVar $data a_addr]
  1125.     set b_addr [VxGetVar $data b_addr]
  1126.     set c_addr [VxGetVar $data c_addr]
  1127.     set d_addr [VxGetVar $data d_addr]
  1128.     set a_val [VtGetValues $a_addr -value]
  1129.     set b_val [VtGetValues $b_addr -value]
  1130.     set c_val [VtGetValues $c_addr -value]
  1131.     set d_val [VtGetValues $d_addr -value]
  1132.     if {($a_val != "") && ($b_val != "") && ($c_val != "") && ($d_val != "")} {
  1133.         VtSetSensitive $button 1
  1134.     VtSetSensitive $delBut 0
  1135.         VtListDeselectItem $list -all
  1136.     } else {
  1137.         VtSetSensitive $button 0
  1138.     }
  1139. }
  1140. proc network:AddEntryToListCB {dataW listW cbs} {
  1141.     keylget cbs dialog dialog
  1142.     set data [VxGetVar $dialog $dataW ]
  1143.     set list [VxGetVar $dialog $listW]
  1144.     set value [getIPwidgetValue $data]
  1145.     set value [string trimright $value "."]
  1146.     set current [VtListGetItem $list -all]
  1147.     if {[lsearch -exact $current $value] == -1} {
  1148.     VtListAddItem $list -item $value
  1149.     }
  1150.     setIPwidgetValue $data "..."
  1151.     VtUnLock
  1152. }
  1153. proc network:checkIPWidgetCB {form tuple cbs} {
  1154.     set value  [keylget cbs value]
  1155.     set widget [keylget cbs widget]
  1156.     set dialog [keylget cbs dialog]
  1157.     set addBut [VxGetVar $dialog addBut]
  1158.     set delBut [VxGetVar $dialog delBut]
  1159.     set list   [VxGetVar $dialog serverList]
  1160.     set a_addr [VxGetVar $form a_addr]
  1161.     set b_addr [VxGetVar $form b_addr]
  1162.     set c_addr [VxGetVar $form c_addr]
  1163.     set d_addr [VxGetVar $form d_addr]
  1164.     set skip 0
  1165.     if {$value != ""} {
  1166.         set length [string length $value]
  1167.         if {$length >= 3} {
  1168.         set skip 1
  1169.         }
  1170.         if {[string range $value [expr $length - 1] end] == "."} {
  1171.         set skip 1
  1172.         set value [string range $value 0 [expr $length - 2]]
  1173.         VtSetValues $widget -value $value
  1174.         }
  1175.     if {![ctype digit $value]} then {
  1176.         VtBeep
  1177.         VtSetValues $widget -value ""
  1178.         VtSetSensitive $addBut 0
  1179.         return
  1180.         }
  1181.         if {$value < 0 || $value > 255} then {
  1182.         VtBeep
  1183.         VtSetValues $widget -value ""
  1184.         VtSetSensitive $addBut 0
  1185.         return
  1186.         }
  1187.     }
  1188.     set a_val [VtGetValues $a_addr -value]
  1189.     set b_val [VtGetValues $b_addr -value]
  1190.     set c_val [VtGetValues $c_addr -value]
  1191.     set d_val [VtGetValues $d_addr -value]
  1192.     set incomplete 0
  1193.     switch $tuple {
  1194.     a_addr    { if {($a_val == "") || ($b_val != "") || \
  1195.               ($c_val != "") || ($d_val != "")} {
  1196.             set incomplete 1
  1197.           }
  1198.         }
  1199.     b_addr    { if {($a_val == "") || \
  1200.               (($b_val == "") && ($c_val != "") || ($d_val != ""))} {
  1201.             set incomplete 1
  1202.           }
  1203.         }
  1204.     c_addr    { if {($a_val == "") || ($b_val == "") || \
  1205.               (($c_val == "") && ($d_val != ""))} {
  1206.             set incomplete 1
  1207.           }
  1208.         }
  1209.     d_addr    { if {($a_val == "") || ($b_val == "") || ($c_val == "")} {
  1210.             set incomplete 1
  1211.           }
  1212.         }
  1213.     }
  1214.     if {! $incomplete} {
  1215.     VtSetSensitive $addBut 1
  1216.     VtSetSensitive $delBut 0
  1217.         VtListDeselectItem $list -all
  1218.     } else {
  1219.     VtSetSensitive $addBut 0
  1220.     }
  1221.     if {$skip} then {
  1222.     if {$tuple == "a_addr"} {VtSetFocus $b_addr}
  1223.     if {$tuple == "b_addr"} {VtSetFocus $c_addr}
  1224.     if {$tuple == "c_addr"} {VtSetFocus $d_addr}
  1225.     }
  1226. }
  1227. proc network:createIPwidget {form value shortHelp} {
  1228.     set values [split $value "."]
  1229.     set a_addr [VtText $form.a -columns 3 \
  1230.         -value [lindex $values 0] \
  1231.         -callback "SaSetFocus next" \
  1232.         -valueChangedCallback "network:checkIPWidgetCB $form a_addr" \
  1233.         -shortHelpCallback SaShortHelpCB \
  1234.         -shortHelpString "[IntlLocalizeMsg $shortHelp]" ]
  1235.     set a_label [VtLabel $form.al -label "." \
  1236.         -leftOffset 0 \
  1237.         -leftSide $a_addr -alignTop $a_addr]
  1238.     set b_addr [VtText $form.b -columns 3 \
  1239.         -value [lindex $values 1] \
  1240.         -callback "SaSetFocus next" \
  1241.         -valueChangedCallback "network:checkIPWidgetCB $form b_addr" \
  1242.         -leftOffset 0 \
  1243.         -leftSide $a_label -alignTop $a_label \
  1244.         -shortHelpCallback SaShortHelpCB \
  1245.         -shortHelpString "[IntlLocalizeMsg $shortHelp]" ]
  1246.     set b_label [VtLabel $form.bl -label "." \
  1247.         -leftOffset 0 \
  1248.         -leftSide $b_addr -alignTop $b_addr]
  1249.     set c_addr [VtText $form.c -columns 3 \
  1250.         -value [lindex $values 2] \
  1251.         -callback "SaSetFocus next" \
  1252.         -valueChangedCallback "network:checkIPWidgetCB $form c_addr" \
  1253.         -leftOffset 0 \
  1254.         -leftSide $b_label -alignTop $b_label \
  1255.         -shortHelpCallback SaShortHelpCB \
  1256.         -shortHelpString "[IntlLocalizeMsg $shortHelp]" ]
  1257.     set c_label [VtLabel $form.cl -label "." \
  1258.         -leftOffset 0 \
  1259.         -leftSide $c_addr -alignTop $c_addr]
  1260.     set d_addr [VtText $form.d -columns 3 \
  1261.         -value [lindex $values 3] \
  1262.         -callback "network:AddEntryToListCB newServer serverList" \
  1263.         -autoLock network:AddEntryToListCB \
  1264.         -valueChangedCallback "network:checkIPWidgetCB $form d_addr" \
  1265.         -leftSide $c_label -alignTop $c_label \
  1266.         -leftOffset 0 \
  1267.         -shortHelpCallback SaShortHelpCB \
  1268.         -shortHelpString "[IntlLocalizeMsg $shortHelp]" ]
  1269.     VxSetVar $form a_addr $a_addr
  1270.     VxSetVar $form b_addr $b_addr
  1271.     VxSetVar $form c_addr $c_addr
  1272.     VxSetVar $form d_addr $d_addr
  1273. }
  1274. proc LoadServerConfig {} {
  1275.     global managedHost DEFAULTS Main ZONE ZONES NETWORKS
  1276.     StatusTemp $Main(Dialog) [IntlLocalizeMsg SCO_DNS_MSG_LOAD_CONFIG]
  1277.     set curzone  {}
  1278.     set networks {}
  1279.     set objcall [list ObjectGet -scope firstLevelOnly \
  1280.             {sco dNSystem} [SetInstance "NULL"] name]
  1281.     set bmipResponse [SaMakeObjectCall $objcall]
  1282.     foreach item $bmipResponse {
  1283.            set errStack [BmipResponseErrorStack item]
  1284.            if { ![lempty $errStack] } {
  1285.             ErrorPush errStack 1 SCO_DNS_ERR_GET_SERVER_CONFIG
  1286.        }
  1287.        set zonename [BmipResponseAttrValList item]
  1288.        set zonename [keylget zonename name]
  1289.            set zonetype [BmipResponseClass item]
  1290.        if [cequal $zonetype "sco dNSPrimary"] {
  1291.            set zonetype [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]
  1292.        } elseif [cequal $zonetype "sco dNSSecondary"] {
  1293.            set zonetype [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY]
  1294.        } elseif [cequal $zonetype "sco dNSStub"] {
  1295.            set zonetype [IntlLocalizeMsg SCO_DNS_MSG_STUB]
  1296.        } else {
  1297.         continue
  1298.        }
  1299.        set arpaPos [string last ".in-addr.arpa" $zonename]
  1300.        if {$arpaPos > -1} {
  1301.         incr arpaPos -1
  1302.         set network [string range $zonename 0 $arpaPos]
  1303.            if {! [cequal $network "0.0.127"]} {
  1304.             set network [ReverseAddr $network]
  1305.             lappend networks $network
  1306.             if {$curzone != ""} {
  1307.                 set curdata $ZONES($curzone)
  1308.                 set curdata [lreplace $curdata 1 1 $networks]
  1309.                 set ZONES($curzone) $curdata
  1310.                     keylset NETWORKS [lindex $curzone 0] \
  1311.                       "[GetCommonOctects $networks] $networks"
  1312.             }
  1313.         }
  1314.        } else {
  1315.         set networks {}
  1316.         set ZONES($zonename) [list $zonetype $networks] 
  1317.         set curzone $zonename
  1318.        }
  1319.     }
  1320.     set primZones {}
  1321.     foreach name [GetZones] {
  1322.     set entry $ZONES($name)
  1323.     if [cequal [lindex $entry 0] [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  1324.         lappend primZones $name
  1325.     }
  1326.     }
  1327.     if {[lsearch -exact $primZones $ZONE] < 0} {
  1328.     set ZONE [lindex $primZones 0]
  1329.     }
  1330.     StatusRestore $Main(Dialog)
  1331. }
  1332. proc DisplayRecord {type record pos {mode {COLLAPSED}} {highlight {}} {ign 0}} {
  1333.     keylget record name name
  1334.     keylget record data optData
  1335.     switch $type {
  1336.     ZONE    {
  1337.         set mx {}
  1338.         set rp {}
  1339.         set txt {}
  1340.         set hinfo {}
  1341.         keylget optData zoneType  zoneType
  1342.         keylget optData mxList    mx
  1343.         keylget optData rpList    rp
  1344.         keylget optData txtList   txt
  1345.         keylget optData hinfoList hinfo
  1346.         keylget optData networks networks
  1347.         set optdata {}
  1348.         if {! [lempty $hinfo]} {
  1349.            if {[keylget hinfo hw hw] && \
  1350.                [keylget hinfo os os]} {
  1351.             if {[llength $hw] > 1} {
  1352.                 set hw "\"$hw\""
  1353.             }
  1354.             if {[llength $os] > 1} {
  1355.                 set os "\"$os\""
  1356.             }
  1357.             if {![lempty $hw] && ![lempty $os]} {
  1358.                 lappend optdata [list "HINFO" "$hw $os"]
  1359.             }
  1360.            }
  1361.         }
  1362.             if {! [lempty $mx]} {
  1363.            set exchangers [lsort -increasing -command "CompareFields 0 NUM" $mx]
  1364.            foreach exchanger $exchangers {
  1365.             lassign $exchanger pref gateway
  1366.             lappend optdata [list "MX" "$pref $gateway"]
  1367.            }
  1368.             }
  1369.             if {! [lempty $rp]} {
  1370.            lassign [lindex $rp 0] owner mx
  1371.            lappend optdata [list "RP" "$owner $mx"]
  1372.             }
  1373.             if {! [lempty $txt]} {
  1374.            lappend optdata [list "TXT" [lindex $txt 0]]
  1375.             }
  1376.             if {! [lempty $networks]} {
  1377.             set networks [lsort -increasing $networks]
  1378.             foreach net $networks {
  1379.             lappend optdata [list \
  1380.                 [IntlLocalizeMsg SCO_DNS_MSG_NETWORK] $net]
  1381.             }
  1382.             }
  1383.         browser:AddEntry $pos $mode [list "$zoneType" "$name" "$type"] $optdata $highlight $ign
  1384.     }
  1385.     A    { 
  1386.         keylget optData addrList  ipaddr
  1387.         keylget optData aliasList cname
  1388.         keylget optData mxList    mx
  1389.         keylget optData rpList    rp
  1390.         keylget optData hinfoList hinfo
  1391.         keylget optData txtList   txt
  1392.         set optdata {}
  1393.         if {! [lempty $cname]} {
  1394.            foreach alias $cname {
  1395.             lappend optdata [list "CNAME" $alias] 
  1396.            }
  1397.         }
  1398.         if {! [lempty $hinfo]} {
  1399.            if {[keylget hinfo hw hw] && \
  1400.                [keylget hinfo os os]} {
  1401.             if {[llength $hw] > 1} {
  1402.                 set hw "\"$hw\""
  1403.             }
  1404.             if {[llength $os] > 1} {
  1405.                 set os "\"$os\""
  1406.             }
  1407.             if {![lempty $hw] && ![lempty $os]} {
  1408.                 lappend optdata [list "HINFO" "$hw $os"]
  1409.             }
  1410.             }
  1411.             }
  1412.             if {! [lempty $mx]} {
  1413.            set exchangers [lsort -increasing -command "CompareFields 0 NUM" $mx]
  1414.            foreach exchanger $exchangers {
  1415.             lassign $exchanger pref gateway
  1416.             lappend optdata [list "MX" "$pref $gateway"]
  1417.            }
  1418.             }
  1419.             if {! [lempty $rp]} {
  1420.            lassign [lindex $rp 0] owner mx
  1421.            if {![lempty $owner] && ![lempty $mx]} {
  1422.             lappend optdata [list "RP" "$owner $mx"]
  1423.            }
  1424.             }
  1425.             if {! [lempty $txt]} {
  1426.            lappend optdata [list "TXT" [lindex $txt 0]]
  1427.             }
  1428.         browser:AddEntry $pos $mode [list "$name" "$ipaddr" "$type"] $optdata $highlight $ign
  1429.     }
  1430.     }
  1431. }
  1432. proc SetZones {} {
  1433.     global Main managedHost ZONE ZONES DEFAULTS 
  1434.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  1435.     set prompt   [VxGetVar $Main(Dialog) prompt]
  1436.     set zones [GetZones]
  1437.     if [lempty $zones] {
  1438.         VtSetValues $prompt -label [IntlLocalizeMsg SCO_DNS_MSG_NO_ZONES]
  1439.     } else {
  1440.         StatusTemp $Main(Dialog) [IntlLocalizeMsg SCO_DNS_MSG_LOAD_ZONE]
  1441.     VtSetValues $prompt -label [IntlLocalizeMsg SCO_DNS_MSG_ZONES_TITLE [list $managedHost]]
  1442.         VtDrawnListDeleteItem $mainlist -all
  1443.     foreach zone $zones {
  1444.         set recData {}
  1445.         set zoneInfo $ZONES($zone)
  1446.         lassign $zoneInfo type networks
  1447.         if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  1448.         set objcall [list ObjectGet {sco hostTabEntry} \
  1449.                     [SetInstance "$zone $zone"] \
  1450.                     {mxList rpList hinfoList txtList}]
  1451.         set bmipResponse [SaMakeObjectCall $objcall]
  1452.         set firstBmip [lindex $bmipResponse 0]
  1453.         set errStack [BmipResponseErrorStack firstBmip]
  1454.         if ![lempty $errStack] {
  1455.            ErrorPush errStack 1 SCO_DNS_ERR_GET_SERVER_CONFIG
  1456.         } else {
  1457.            set attrs [BmipResponseAttrValList firstBmip]
  1458.         }
  1459.        } elseif {![cequal $type [IntlLocalizeMsg SCO_DNS_MSG_STUB]] && \
  1460.            ![cequal $type [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY]] && \
  1461.            ![cequal $type [IntlLocalizeMsg SCO_DNS_MSG_CACHING]]} {
  1462.         continue            ;# ignore unknown types
  1463.        }
  1464.        keylset attrs zoneType $type
  1465.        keylset attrs networks $networks
  1466.        keylset recData data $attrs
  1467.        keylset recData name $zone
  1468.        keylset recData type $type
  1469.        DisplayRecord ZONE $recData 0 COLLAPSED {} 1
  1470.     }
  1471.     StatusRestore $Main(Dialog) 
  1472.         if {! [catch {VtDrawnListSelectItem $mainlist -position 1}]} {
  1473.             SaDrawnListShowSelectedItem $mainlist
  1474.     }
  1475.         SetSensitivityCB [list [list dialog $Main(Dialog)]]
  1476.     }
  1477. }
  1478. proc SetZoneRecords {} {
  1479.     global Main managedHost ZONE ZONES DEFAULTS 
  1480.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  1481.     set prompt   [VxGetVar $Main(Dialog) prompt]
  1482.     if [lempty $ZONE] {
  1483.         VtSetValues $prompt -label [IntlLocalizeMsg SCO_DNS_MSG_NO_ZONES]
  1484.     } else {
  1485.         StatusTemp $Main(Dialog) [IntlLocalizeMsg SCO_DNS_MSG_LOAD_ZONE]
  1486.         VtSetValues $prompt -label [IntlLocalizeMsg SCO_DNS_MSG_HOSTS \
  1487.             [list $ZONE $managedHost]]
  1488.         VtDrawnListDeleteItem $mainlist -all
  1489.     set records {}
  1490.         set objcall [list ObjectGet -scope 1 {sco hostTab} \
  1491.         [SetInstance $ZONE] name]
  1492.         set bmipResponse [SaMakeObjectCall $objcall]
  1493.         set firstBmip [lindex $bmipResponse 0]
  1494.         set errStack [BmipResponseErrorStack firstBmip]
  1495.         if { ![lempty $errStack] } {
  1496.        ErrorPush errStack 1 SCO_DNS_ERR_GET_SERVER_CONFIG
  1497.         } else {
  1498.        foreach item $bmipResponse {
  1499.         set attrs [BmipResponseAttrValList item]
  1500.         if [keylget attrs name name] {
  1501.            lappend records $name
  1502.         }
  1503.        }
  1504.         }
  1505.         set objcall [list ObjectGet {sco dNSPrimary} \
  1506.           [SetInstance $ZONE] serverList]
  1507.         set bmipResponse [SaMakeObjectCall $objcall]
  1508.         set firstBmip [lindex $bmipResponse 0]
  1509.         set errStack [BmipResponseErrorStack firstBmip]
  1510.         if [lempty $errStack] {
  1511.         set attrs   [BmipResponseAttrValList firstBmip]
  1512.         set servers [keylget attrs serverList]
  1513.     } else {
  1514.         set servers {}
  1515.     }
  1516.     foreach record $records {
  1517.        set objcall [list ObjectGet {sco hostTabEntry} \
  1518.             [SetInstance "$ZONE $record"] \
  1519.             {addrList aliasList mxList rpList txtList hinfoList}]
  1520.        set bmipResponse [SaMakeObjectCall $objcall]
  1521.        set firstBmip [lindex $bmipResponse 0]
  1522.        set errStack [BmipResponseErrorStack firstBmip]
  1523.        if ![lempty $errStack] {
  1524.         ErrorPush errStack 1 SCO_DNS_ERR_GET_SERVER_CONFIG
  1525.        }
  1526.        set attrs [BmipResponseAttrValList firstBmip]
  1527.       set found 0
  1528.       foreach ns $servers {
  1529.         if [cequal $record [lindex $ns 0]] {
  1530.            incr found
  1531.            break
  1532.         }
  1533.       }
  1534.       if {$found != 0} { continue }
  1535.        set recData {}
  1536.        keylset recData type "A"
  1537.        keylset recData name $record
  1538.        keylset recData data $attrs
  1539.        DisplayRecord A $recData 0 COLLAPSED NOHIGHLIGHT 1
  1540.         }
  1541.         if {! [catch {VtDrawnListSelectItem $mainlist -position 1}]} {
  1542.             SaDrawnListShowSelectedItem $mainlist
  1543.     }
  1544.     browser:ReDisplay    ;#sort browser
  1545.         SetSensitivityCB [list [list dialog $Main(Dialog)]]
  1546.     }
  1547. }
  1548. proc SaveDefaults {} {
  1549.     global DEFAULTS DEFAULTS_MODIFIED ZONE
  1550.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI zone \"$ZONE\"" {}
  1551.     if {! $DEFAULTS_MODIFIED} {
  1552.     return
  1553.     }
  1554.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI SOA_pic \
  1555.     \"$DEFAULTS(SOA_pic)\"" {}
  1556.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI SOA_refresh \
  1557.     \"$DEFAULTS(SOA_refresh)\"" {}
  1558.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI SOA_retry \
  1559.      \"$DEFAULTS(SOA_retry)\"" {}
  1560.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI SOA_expire \
  1561.     \"$DEFAULTS(SOA_expire)\"" {}
  1562.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI SOA_ttl \
  1563.     \"$DEFAULTS(SOA_ttl)\"" {}
  1564.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI MX_exchangers \
  1565.     \"$DEFAULTS(MX_exchangers)\"" {}
  1566.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI RP_owner \
  1567.     \"$DEFAULTS(RP_owner)\"" {}
  1568.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI RP_mx \
  1569.     \"$DEFAULTS(RP_mx)\"" {}
  1570.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI HINFO_hw \
  1571.     \"$DEFAULTS(HINFO_hw)\"" {}
  1572.     ErrorCatch {} 1 "SaScreenPolicySet dnsGUI HINFO_os \
  1573.     \"$DEFAULTS(HINFO_os)\"" {}
  1574.     set DEFAULTS_MODIFIED 0
  1575. }
  1576. proc LoadDefaults {} {
  1577.     global DEFAULTS DEFAULTS_MODIFIED ZONE
  1578.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI zone" ZONE
  1579.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI SOA_pic" \
  1580.     DEFAULTS(SOA_pic)
  1581.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI SOA_refresh" \
  1582.     DEFAULTS(SOA_refresh)
  1583.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI SOA_retry" \
  1584.      DEFAULTS(SOA_retry)
  1585.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI SOA_expire" \
  1586.     DEFAULTS(SOA_expire)
  1587.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI SOA_ttl" \
  1588.     DEFAULTS(SOA_ttl)
  1589.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI MX_exchangers" \
  1590.     DEFAULTS(MX_exchangers)
  1591.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI RP_owner" \
  1592.     DEFAULTS(RP_owner)
  1593.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI RP_mx" \
  1594.     DEFAULTS(RP_mx)
  1595.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI HINFO_hw" \
  1596.     DEFAULTS(HINFO_hw)
  1597.     ErrorCatch {} 1 "SaScreenPolicyGet dnsGUI HINFO_os" \
  1598.     DEFAULTS(HINFO_os)
  1599.     set DEFAULTS_MODIFIED 0
  1600. }
  1601. proc SaveConfig {{newMode {}}} {
  1602.     global Main
  1603.     StatusTemp $Main(Dialog) [IntlLocalizeMsg SCO_DNS_MSG_EXITING]
  1604.     set objcall [list ObjectGet {sco dNSystem} [SetInstance "NULL"] dNSMode]
  1605.     set bmipResponse [SaMakeObjectCall $objcall]
  1606.     set firstBmip [lindex $bmipResponse 0]
  1607.     set errStack [BmipResponseErrorStack firstBmip]
  1608.     if { ![lempty $errStack] } {
  1609.         ErrorPush errStack 1 SCO_DNS_ERR_GET_SERVER_CONFIG
  1610.     } else {
  1611.     set attrs [BmipResponseAttrValList firstBmip]
  1612.     set mode [keylget attrs dNSMode]
  1613.     }
  1614.     if ![lempty $newMode] {
  1615.     set mode $newMode
  1616.     }
  1617.     set objcall [list ObjectReplace {sco dNSystem} [SetInstance "NULL"] \
  1618.             [list [list dNSMode $mode]]]
  1619.     set bmipResponse [SaMakeObjectCall $objcall]
  1620.     set firstBmip [lindex $bmipResponse 0]
  1621.     set errStack [BmipResponseErrorStack firstBmip]
  1622.     if { ![lempty $errStack] } {
  1623.         ErrorPush errStack 1 SCO_DNS_ERR_GET_SERVER_CONFIG
  1624.     }
  1625.     foreach zone [GetZones] {
  1626.     if {[ErrorCatch errStack 0 "RebuildZone $zone" {}] != 0} then {
  1627.         SaDisplayErrorStacks $Main(Dialog).err \
  1628.             [list $errStack] NOHELP \
  1629.             {VtClose; exit 1;}
  1630.         VtUnLock
  1631.         return
  1632.     }
  1633.     }
  1634.     SaShortHelpStore "dnsGUI"
  1635.     if {[ErrorCatch errStack 0 "SaveDefaults" {}] != 0} then {
  1636.     SaDisplayErrorStacks $Main(Dialog).save_err [list $errStack] NOHELP
  1637.     }
  1638.     StatusRestore $Main(Dialog)
  1639. }
  1640. proc ClosePrgCB {cbs} {
  1641.     keylget cbs dialog dialog
  1642.     set selected [browser:SetGetParent]
  1643.     lassign $selected type name
  1644.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_CACHING]] {
  1645.     DoExitCB caching    ;# caching-only is configured by default ...
  1646.     } elseif [lempty [GetZones]] {
  1647.     VtShow [VtQuestionDialog $dialog.YN \
  1648.         -ok -cancel \
  1649.         -okCallback "DoExitCB caching" \
  1650.         -autoLock DoExitCB \
  1651.         -cancelCallback "DoExitCB off" \
  1652.         -okLabel [IntlLocalizeMsg SCO_DNS_MSG_YES] \
  1653.         -cancelLabel [IntlLocalizeMsg SCO_DNS_MSG_NO] \
  1654.         -message [IntlLocalizeMsg SCO_DNS_MSG_CONF_CACHING]]
  1655.     VtUnLock
  1656.     } else {
  1657.     DoExitCB master
  1658.     }
  1659. }
  1660. proc DoExitCB {{mode {}} {cbs {}}} {
  1661.     if {![lempty $mode]} {
  1662.     SaveConfig $mode
  1663.     if {[cequal caching $mode]} {
  1664.         ErrorCatch errStack 0 CreateCache {}
  1665.     }
  1666.     }
  1667.     RestartServer
  1668.     VtUnLock
  1669.     VtClose
  1670.     exit 0
  1671. }
  1672. proc SetCnameCB {cbs} {
  1673.     global ZoneEntry
  1674.     keylget cbs dialog dialog
  1675.     set aliasList [VxGetVar $dialog aliasList]
  1676.     set aliases [VtListGetItem $aliasList -all]
  1677.     if {[regexp -- {[^A-Za-z0-9.-_]} $aliases inval]} {
  1678.     ctoken aliases $inval
  1679.     ErrorPush errStack 0 SCO_DNS_ERR_CHAR2 [list $aliases]
  1680.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1681.         VtUnLock
  1682.         return
  1683.     }
  1684.     keylset ZoneEntry CNAME $aliases
  1685.     VxEndFormCB $cbs
  1686.     VtUnLock
  1687. }
  1688. proc GetCnameCB {cbs} {
  1689.     global ZoneEntry
  1690.     keylget cbs dialog dialog
  1691.     keylget ZoneEntry CNAME cnameRec
  1692.     set form [VtFormDialog $dialog.cname \
  1693.                 -ok \
  1694.                 -okCallback SetCnameCB \
  1695.                 -autoLock SetCnameCB \
  1696.                 -cancel \
  1697.                 -cancelCallback VxEndFormCB \
  1698.                 -cancelButton CANCEL \
  1699.                 -help \
  1700.                 -title [IntlLocalizeMsg SCO_DNS_MSG_CNAME_TITLE] ]
  1701.     set alform [SaAlignedForm $form.align [list \
  1702.                         [list SCO_DNS_MSG_CNAMES \
  1703.                   [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  1704.         ]]
  1705.     VtSetValues $alform -leftSide FORM -rightSide FORM
  1706.     VtSetValues [VxGetVar $alform label1] -bottomSide NONE
  1707.     set aliases [VxGetVar $alform widget1]
  1708.     set newAlias [VtText $aliases.new -columns 18 \
  1709.         -callback "host:AddEntryToListCB newAlias aliasList" \
  1710.         -autoLock host:AddEntryToListCB \
  1711.         -valueChangedCallback "SetAddButSensitivityCB newAlias addBut aliasList delBut" \
  1712.                 -shortHelpCallback SaShortHelpCB \
  1713.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_NEW_CNAME_SH]]
  1714.     set butrc [VtRowColumn $aliases.buts \
  1715.         -leftSide $newAlias -topSide FORM -vertical]
  1716.     set addBut [VtPushButton $butrc.add \
  1717.         -callback "host:AddEntryToListCB newAlias aliasList" \
  1718.         -autoLock host:AddEntryToListCB \
  1719.                 -shortHelpCallback SaShortHelpCB \
  1720.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_CNAME_SH]\
  1721.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  1722.     set delBut [VtPushButton $butrc.del \
  1723.         -callback "DeleteEntryFromListCB aliasList delBut" \
  1724.         -autoLock DeleteEntryFromListCB \
  1725.                 -shortHelpCallback SaShortHelpCB \
  1726.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_CNAME_SH]\
  1727.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  1728.     set aliasList [VtList $aliases.list \
  1729.         -columns 15 -topSide $newAlias \
  1730.         -itemList $cnameRec \
  1731.         -callback "SetDelButSensitivityCB aliasList delBut" \
  1732.         -shortHelpCallback SaShortHelpCB \
  1733.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_CNAME_LIST_SH] \
  1734.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  1735.     set sep [VtSeparator $form.sep1 -horizontal \
  1736.         -leftSide FORM -rightSide FORM \
  1737.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  1738.         -topSide $alform -CHARM_topOffset 1]
  1739.     set status [SaStatusBar $form.status 0]
  1740.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  1741.     VxSetVar $form newAlias    $newAlias
  1742.     VxSetVar $form addBut      $addBut
  1743.     VxSetVar $form delBut      $delBut
  1744.     VxSetVar $form aliasList   $aliasList
  1745.     SetAddButSensitivityCB newAlias addBut aliasList delBut [list [list dialog $form]]
  1746.     SetDelButSensitivityCB aliasList delBut [list [list dialog $form]]
  1747.     VtShow $form
  1748.     VtUnLock
  1749. }
  1750. proc CheckHinfo {strict hw os} {
  1751.     if {$strict} {
  1752.         if [lempty $hw] { ErrorPush {} 1 SCO_DNS_ERR_NO_HARDWARE }
  1753.         if [lempty $os] { ErrorPush {} 1 SCO_DNS_ERR_NO_OS }
  1754.     } else {
  1755.         if {($hw == {}) && ($os != {})} {
  1756.             ErrorPush {} 1 SCO_DNS_ERR_BAD_HINFO
  1757.         }
  1758.         if {($os == {}) && ($hw != {})} {
  1759.             ErrorPush {} 1 SCO_DNS_ERR_BAD_HINFO
  1760.         }
  1761.    }
  1762.    if {[regexp -- {[^A-Za-z0-9.-_     ]} $hw inval]} {
  1763.     ctoken hw $inval
  1764.     ErrorPush {} 1 SCO_DNS_ERR_CHAR2 [list $hw]
  1765.    }
  1766.    if {[regexp -- {[^A-Za-z0-9.-_     ]} $os inval]} {
  1767.     ctoken os $inval
  1768.     ErrorPush {} 1 SCO_DNS_ERR_CHAR2 [list $os]
  1769.    }
  1770. }
  1771. proc SetHostHinfoCB {cbs} {
  1772.     global ZoneEntry
  1773.     keylget cbs dialog dialog
  1774.     set hwW [VxGetVar $dialog hardware ]
  1775.     set osW [VxGetVar $dialog os       ]
  1776.     set hw [VtGetValues $hwW -value]
  1777.     set os [VtGetValues $osW -value]
  1778.     if [ErrorCatch errStack 0 "CheckHinfo 0 \"$hw\" \"$os\"" {}] {
  1779.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1780.         VtUnLock
  1781.         return
  1782.     }
  1783.     set hinfo {}
  1784.     keylset hinfo hw $hw
  1785.     keylset hinfo os $os
  1786.     keylset ZoneEntry HINFO $hinfo
  1787.     VxEndFormCB $cbs
  1788.     VtUnLock
  1789. }
  1790. proc SetDefaultHinfoCB {cbs} {
  1791.     global DEFAULTS DEFAULTS_MODIFIED
  1792.     keylget cbs dialog dialog
  1793.     set hwW [VxGetVar $dialog hardware ]
  1794.     set osW [VxGetVar $dialog os       ]
  1795.     set hw [VtGetValues $hwW -value]
  1796.     set os [VtGetValues $osW -value]
  1797.     if [ErrorCatch errStack 0 "CheckHinfo 0 \"$hw\" \"$os\"" {}] {
  1798.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1799.         VtUnLock
  1800.         return
  1801.     }
  1802.     set DEFAULTS(HINFO_hw) $hw
  1803.     set DEFAULTS(HINFO_os) $os
  1804.     set DEFAULTS_MODIFIED 1
  1805.     VxEndFormCB $cbs
  1806.     VtUnLock
  1807. }
  1808. proc ModHinfoCB {mode cbs} {
  1809.     global Main ZONE ZONES
  1810.     keylget cbs dialog dialog
  1811.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  1812.     set hwW [VxGetVar $dialog hardware ]
  1813.     set osW [VxGetVar $dialog os       ]
  1814.     set hw [VtGetValues $hwW -value]
  1815.     set os [VtGetValues $osW -value]
  1816.     if [ErrorCatch errStack 0 "CheckHinfo 1 \"$hw\" \"$os\"" {}] {
  1817.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1818.         VtUnLock
  1819.         return
  1820.     }
  1821.     keylset hinfo hw $hw
  1822.     keylset hinfo os $os
  1823.     switch $mode {
  1824.     ZONE {
  1825.         set objcall [list ObjectReplace {sco hostTabEntry} \
  1826.             [SetInstance "$ZONE $ZONE"] \
  1827.             [list [list hinfoList [list $hinfo]]]]
  1828.         set bmipResponse [SaMakeObjectCall $objcall]
  1829.         set firstBmip [lindex $bmipResponse 0]
  1830.         set errStack [BmipResponseErrorStack firstBmip]
  1831.         if { ![lempty $errStack] } {
  1832.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_RECORD
  1833.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1834.            VtUnLock
  1835.            return
  1836.         }
  1837.         set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  1838.             -byPositionList] 0]
  1839.         set zoneInfo $ZONES($ZONE)
  1840.         lassign $zoneInfo type networks
  1841.         set recData {}
  1842.         keylset recData type $type
  1843.         keylset recData name $ZONE
  1844.         set attrs [GetZoneOrHostAttrs]
  1845.         keylset attrs hinfoList $hinfo
  1846.         keylset attrs zoneType $type
  1847.         keylset attrs networks $networks
  1848.         keylset recData data $attrs
  1849.         set pos [browser:FindItemParent $pos]
  1850.         VtDrawnListSelectItem $mainlist -position $pos
  1851.         browser:RemoveEntryFromPos $pos
  1852.         DisplayRecord ZONE $recData $pos EXPANDED
  1853.     }
  1854.     default {    ;# HOST
  1855.         set recData {}
  1856.         keylset recData type "A"
  1857.         set attrs [GetZoneOrHostAttrs]
  1858.         lassign [keylget attrs unknown] host ipaddr
  1859.         keylset recData name $host
  1860.         keyldel attrs unknown
  1861.         keylset attrs hinfoList $hinfo
  1862.         keylset attrs addrList $ipaddr
  1863.         keylset attrs zoneType primary
  1864.         keylset recData data $attrs
  1865.         set objcall [list ObjectReplace {sco hostTabEntry} \
  1866.             [SetInstance "$ZONE $host"] \
  1867.             [list [list hinfoList [list $hinfo]]]]
  1868.         set bmipResponse [SaMakeObjectCall $objcall]
  1869.         set firstBmip [lindex $bmipResponse 0]
  1870.         set errStack [BmipResponseErrorStack firstBmip]
  1871.         if { ![lempty $errStack] } {
  1872.              ErrorPush errStack 0 SCO_DNS_ERR_MOD_HOST
  1873.              SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1874.              VtUnLock
  1875.              return
  1876.         }
  1877.         set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  1878.             -byPositionList] 0]
  1879.         browser:RemoveEntryFromPos $pos
  1880.         DisplayRecord A $recData $pos EXPANDED
  1881.     }
  1882.     }
  1883.     VtDrawnListSelectItem $mainlist -position $pos
  1884.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  1885.     -byPositionList] 0]
  1886.     set parent [browser:FindItemParent $pos]
  1887.     VtDrawnListSelectItem $mainlist -position $parent
  1888.     SaDrawnListShowSelectedItem $mainlist
  1889.     SetSensitivityCB $cbs
  1890.     VxEndFormCB $cbs
  1891.     VtUnLock
  1892. }
  1893. proc AddZoneHinfo {zone dialog} {
  1894.     global ZoneEntry
  1895.     keylget ZoneEntry HINFO hinfo
  1896.     if [lempty $hinfo] {
  1897.     return {}
  1898.     }
  1899.     keylget hinfo hw hw
  1900.     if [lempty $hw] {
  1901.     return {}
  1902.     }
  1903.     set objcall [list ObjectAdd {sco hostTabEntry} \
  1904.             [SetInstance "$zone $zone"] \
  1905.             [list [list hinfoList [list $hinfo]]]]
  1906.     set bmipResponse [SaMakeObjectCall $objcall]
  1907.     set firstBmip [lindex $bmipResponse 0]
  1908.     set errStack [BmipResponseErrorStack firstBmip]
  1909.     if { ![lempty $errStack] } {
  1910.         ErrorPush errStack 0 SCO_DNS_ERR_ADD_RECORD
  1911.           SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  1912.           VtUnLock
  1913.            return -code return
  1914.     }
  1915.     return $hinfo
  1916. }
  1917. proc HinfoCB {action cbs} {
  1918.     global DEFAULTS Main ZoneEntry
  1919.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  1920.     keylget cbs dialog dialog
  1921.     set title    "SCO_DNS_MSG_HINFO_TITLE"
  1922.     switch $action {
  1923.          MOD_ZONE_BRW    -
  1924.          MOD_ZONE    { set callback "ModHinfoCB ZONE"
  1925.             }
  1926.      MOD_HOST_BRW    { set callback "ModHinfoCB HOST"
  1927.             }
  1928.      MOD_HOST    -
  1929.      ADD_ZONE    -
  1930.          ADD_HOST    { set callback "SetHostHinfoCB"
  1931.             }
  1932.          DEFAULTS    { set callback "SetDefaultHinfoCB"
  1933.                       set title    "SCO_DNS_MSG_DEFAULT_HINFO_TITLE"
  1934.             }
  1935.     }
  1936.     set form [VtFormDialog $dialog.hinfo \
  1937.                 -ok \
  1938.                 -okCallback $callback \
  1939.                 -autoLock $callback \
  1940.                 -cancel \
  1941.                 -cancelCallback VxEndFormCB \
  1942.                 -cancelButton CANCEL \
  1943.                 -help \
  1944.                 -title [IntlLocalizeMsg $title] ]
  1945.     set alform [SaAlignedForm $form.align [list \
  1946.                         [list SCO_DNS_MSG_HARDWARE \
  1947.                               [list VtText -columns 21 \
  1948.                         -shortHelpCallback SaShortHelpCB \
  1949.                         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_HARDWARE_SH] ]] \
  1950.                         [list SCO_DNS_MSG_OS \
  1951.                               [list VtText -columns 21 \
  1952.                         -shortHelpCallback SaShortHelpCB \
  1953.                         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_OS_SH] ]] \
  1954.         ]]
  1955.     VtSetValues $alform -rightSide FORM
  1956.     set sep [VtSeparator $form.sep1 -horizontal \
  1957.         -leftSide FORM -rightSide FORM \
  1958.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  1959.         -topSide $alform -CHARM_topOffset 1]
  1960.     set status [SaStatusBar $form.status 0]
  1961.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  1962.     set hw [VxGetVar $alform widget1]
  1963.     set os [VxGetVar $alform widget2]
  1964.     switch $action {
  1965.      MOD_HOST_BRW -
  1966.          MOD_ZONE_BRW   {
  1967.               set pos [lindex [VtDrawnListGetSelectedItem \
  1968.                     $mainlist -byPositionList] 0]
  1969.                   set entry [browser:GetItemFromPos $pos]
  1970.                   VtSetValues $hw -value [lindex [lindex $entry 1] 0]
  1971.                   VtSetValues $os -value [lindex [lindex $entry 1] 1]
  1972.             }
  1973.     MOD_ZONE    -
  1974.     MOD_HOST    {
  1975.               keylget ZoneEntry HINFO hinfoRec
  1976.                   VtSetValues $hw -value [keylget hinfoRec hw]
  1977.                   VtSetValues $os -value [keylget hinfoRec os]
  1978.             }
  1979.          ADD_ZONE   -
  1980.          ADD_HOST   {
  1981.               if {[keylget ZoneEntry HINFO hinfoRec]} {
  1982.             VtSetValues $hw -value [keylget hinfoRec hw]
  1983.             VtSetValues $os -value [keylget hinfoRec os]
  1984.               } else {
  1985.             VtSetValues $hw -value $DEFAULTS(HINFO_hw)
  1986.             VtSetValues $os -value $DEFAULTS(HINFO_os)
  1987.               }
  1988.             }
  1989.          DEFAULTS   { VtSetValues $hw -value $DEFAULTS(HINFO_hw)
  1990.                   VtSetValues $os -value $DEFAULTS(HINFO_os)
  1991.             }
  1992.     }
  1993.     VxSetVar $form hardware $hw
  1994.     VxSetVar $form os       $os
  1995.     VtShow $form
  1996.     VtUnLock
  1997. }
  1998. proc SetHostMxCB {cbs} {
  1999.     global ZoneEntry
  2000.     keylget cbs dialog dialog
  2001.     set mxList [VxGetVar $dialog serverList]
  2002.     set exchangers [VtListGetItem $mxList -all]
  2003.     keylset ZoneEntry MX $exchangers
  2004.     VxEndFormCB $cbs
  2005.     VtUnLock
  2006. }
  2007. proc SetDefaultMxCB {cbs} {
  2008.     global DEFAULTS DEFAULTS_MODIFIED
  2009.     keylget cbs dialog dialog
  2010.     set mxList [VxGetVar $dialog serverList]
  2011.     set exchangers [VtListGetItem $mxList -all]
  2012.     set DEFAULTS(MX_exchangers) $exchangers
  2013.     set DEFAULTS_MODIFIED 1
  2014.     VxEndFormCB $cbs
  2015.     VtUnLock
  2016. }
  2017. proc ModCnameCB {mode cbs} {
  2018.     global Main ZONE ZONES
  2019.     keylget cbs dialog dialog
  2020.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  2021.     set aliasList [VxGetVar $dialog aliasList]
  2022.     set aliases [VtListGetItem $aliasList -all]
  2023.     set recData {}
  2024.     keylset recData type "A"
  2025.     set attrs [GetZoneOrHostAttrs]
  2026.     lassign [keylget attrs unknown] host ipaddr
  2027.     keylset recData name $host
  2028.     keyldel attrs unknown
  2029.     keylset attrs aliasList $aliases
  2030.     keylset attrs addrList $ipaddr
  2031.     keylset attrs zoneType primary
  2032.     keylset recData data $attrs
  2033.     set objcall [list ObjectReplace {sco hostTabEntry} \
  2034.     [SetInstance "$ZONE $host"] \
  2035.     [list [list aliasList $aliases]]]
  2036.     set bmipResponse [SaMakeObjectCall $objcall]
  2037.     set firstBmip [lindex $bmipResponse 0]
  2038.     set errStack [BmipResponseErrorStack firstBmip]
  2039.     if { ![lempty $errStack] } {
  2040.     ErrorPush errStack 0 SCO_DNS_ERR_MOD_HOST
  2041.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2042.     VtUnLock
  2043.     return
  2044.     }
  2045.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2046.     -byPositionList] 0]
  2047.     browser:RemoveEntryFromPos $pos
  2048.     DisplayRecord A $recData $pos EXPANDED
  2049.     VtDrawnListSelectItem $mainlist -position $pos
  2050.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2051.     -byPositionList] 0]
  2052.     set parent [browser:FindItemParent $pos]
  2053.     VtDrawnListSelectItem $mainlist -position $parent
  2054.     SaDrawnListShowSelectedItem $mainlist
  2055.     SetSensitivityCB $cbs
  2056.     VxEndFormCB $cbs
  2057.     VtUnLock
  2058. }
  2059. proc ModMxCB {mode cbs} {
  2060.     global Main ZONE ZONES
  2061.     keylget cbs dialog dialog
  2062.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  2063.     set mxList [VxGetVar $dialog serverList]
  2064.     set exchangers [VtListGetItem $mxList -all]
  2065.     if [lempty $exchangers] {
  2066.         ErrorPush errStack 0 SCO_DNS_ERR_NO_GATEWAY
  2067.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2068.         VtUnLock
  2069.         return
  2070.     }
  2071.     set pref 5
  2072.     set mxs {}
  2073.     foreach exchanger $exchangers {
  2074.     lappend mxs [list $pref $exchanger]
  2075.     incr pref 5        ;# 5 step increments
  2076.     }
  2077.     switch $mode {
  2078.     ZONE {
  2079.         set objcall [list ObjectReplace {sco hostTabEntry} \
  2080.             [SetInstance "$ZONE $ZONE"] \
  2081.             [list [list mxList $mxs]]]
  2082.         set bmipResponse [SaMakeObjectCall $objcall]
  2083.         set firstBmip [lindex $bmipResponse 0]
  2084.         set errStack [BmipResponseErrorStack firstBmip]
  2085.         if { ![lempty $errStack] } {
  2086.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_RECORD
  2087.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2088.            VtUnLock
  2089.            return
  2090.         }
  2091.         set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2092.             -byPositionList] 0]
  2093.         set zoneInfo $ZONES($ZONE)
  2094.         lassign $zoneInfo type networks
  2095.         set recData {}
  2096.         keylset recData type $type
  2097.         keylset recData name $ZONE
  2098.         set attrs [GetZoneOrHostAttrs]
  2099.         keylset attrs mxList $mxs
  2100.         keylset attrs zoneType $type
  2101.         keylset attrs networks $networks
  2102.         keylset recData data $attrs
  2103.         set pos [browser:FindItemParent $pos]
  2104.         VtDrawnListSelectItem $mainlist -position $pos
  2105.         browser:RemoveEntryFromPos $pos
  2106.         DisplayRecord ZONE $recData $pos EXPANDED
  2107.     }
  2108.     default {    ;# HOST
  2109.         set recData {}
  2110.         keylset recData type "A"
  2111.         set attrs [GetZoneOrHostAttrs]
  2112.         lassign [keylget attrs unknown] host ipaddr
  2113.         keylset recData name $host
  2114.         keyldel attrs unknown
  2115.         keylset attrs mxList $mxs
  2116.         keylset attrs addrList $ipaddr
  2117.         keylset attrs zoneType primary
  2118.         keylset recData data $attrs
  2119.         set objcall [list ObjectReplace {sco hostTabEntry} \
  2120.             [SetInstance "$ZONE $host"] \
  2121.             [list [list mxList $mxs]]]
  2122.         set bmipResponse [SaMakeObjectCall $objcall]
  2123.         set firstBmip [lindex $bmipResponse 0]
  2124.         set errStack [BmipResponseErrorStack firstBmip]
  2125.         if { ![lempty $errStack] } {
  2126.              ErrorPush errStack 0 SCO_DNS_ERR_MOD_HOST
  2127.              SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2128.              VtUnLock
  2129.              return
  2130.         }
  2131.         set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2132.             -byPositionList] 0]
  2133.         browser:RemoveEntryFromPos $pos
  2134.         DisplayRecord A $recData $pos EXPANDED
  2135.     }
  2136.     }
  2137.     VtDrawnListSelectItem $mainlist -position $pos
  2138.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2139.     -byPositionList] 0]
  2140.     set parent [browser:FindItemParent $pos]
  2141.     VtDrawnListSelectItem $mainlist -position $parent
  2142.     SaDrawnListShowSelectedItem $mainlist
  2143.     SetSensitivityCB $cbs
  2144.     VxEndFormCB $cbs
  2145.     VtUnLock
  2146. }
  2147. proc AddZoneMx {zone dialog} {
  2148.     global ZoneEntry
  2149.     keylget ZoneEntry MX mx
  2150.     if [lempty $mx] {
  2151.         return {}
  2152.     }
  2153.     set mxs {}
  2154.     set pref 5
  2155.     foreach exchanger $mx {
  2156.     lappend mxs [list $pref $exchanger]
  2157.     incr pref 5        ;# 5 step increments
  2158.     }
  2159.     set objcall [list ObjectAdd {sco hostTabEntry} \
  2160.             [SetInstance "$zone $zone"] \
  2161.             [list [list mxList $mxs]]]
  2162.     set bmipResponse [SaMakeObjectCall $objcall]
  2163.     set firstBmip [lindex $bmipResponse 0]
  2164.     set errStack [BmipResponseErrorStack firstBmip]
  2165.     if { ![lempty $errStack] } {
  2166.         ErrorPush errStack 0 SCO_DNS_ERR_ADD_RECORD
  2167.           SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2168.           VtUnLock
  2169.            return
  2170.     }
  2171.     return $mxs
  2172. }
  2173. proc GetRecord {pos type} {
  2174.     set parent [browser:FindItemParent $pos]
  2175.     set parentId [browser:ParentId $parent]
  2176.     set ent [browser:ParentData $parentId]
  2177.     keylget ent children children
  2178.     set res {}
  2179.     foreach child $children {
  2180.     if [cequal [lindex $child 0] $type] {
  2181.         lappend res [lindex $child 1]
  2182.     }
  2183.     }
  2184.     return $res
  2185. }
  2186. proc CnameCB {action cbs} {
  2187.     global DEFAULTS Main ZoneEntry
  2188.     keylget cbs dialog dialog
  2189.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  2190.     set title    "SCO_DNS_MSG_CNAME_TITLE"
  2191.     switch $action {
  2192.          MOD_HOST       { set callback "ModCnameCB HOST"
  2193.                         }
  2194.          HOST           { set callback SetCnameCB
  2195.                         }
  2196.          DEFAULTS       { set callback "SetDefaultMxCB"
  2197.                           set title    "SCO_DNS_MSG_DEFAULT_MX_TITLE"
  2198.                         }
  2199.     }
  2200.     set form [VtFormDialog $dialog.cname \
  2201.                 -ok \
  2202.                 -okCallback $callback \
  2203.                 -autoLock $callback \
  2204.                 -cancel \
  2205.                 -cancelCallback VxEndFormCB \
  2206.                 -cancelButton CANCEL \
  2207.                 -help \
  2208.                 -title [IntlLocalizeMsg SCO_DNS_MSG_CNAME_TITLE] ]
  2209.     set alform [SaAlignedForm $form.align [list \
  2210.                         [list SCO_DNS_MSG_CNAMES \
  2211.                   [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  2212.         ]]
  2213.     VtSetValues $alform -leftSide FORM -rightSide FORM
  2214.     VtSetValues [VxGetVar $alform label1] -bottomSide NONE
  2215.     set aliases [VxGetVar $alform widget1]
  2216.     set newAlias [VtText $aliases.new -columns 18 \
  2217.         -callback "host:AddEntryToListCB newAlias aliasList" \
  2218.         -autoLock host:AddEntryToListCB \
  2219.         -valueChangedCallback "SetAddButSensitivityCB newAlias addBut aliasList delBut" \
  2220.                 -shortHelpCallback SaShortHelpCB \
  2221.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_NEW_CNAME_SH]]
  2222.     set butrc [VtRowColumn $aliases.buts \
  2223.         -leftSide $newAlias -topSide FORM -vertical]
  2224.     set addBut [VtPushButton $butrc.add \
  2225.         -callback "host:AddEntryToListCB newAlias aliasList" \
  2226.         -autoLock host:AddEntryToListCB \
  2227.                 -shortHelpCallback SaShortHelpCB \
  2228.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_CNAME_SH]\
  2229.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  2230.     set delBut [VtPushButton $butrc.del \
  2231.         -callback "DeleteEntryFromListCB aliasList delBut" \
  2232.         -autoLock DeleteEntryFromListCB \
  2233.                 -shortHelpCallback SaShortHelpCB \
  2234.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_CNAME_SH]\
  2235.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  2236.     set aliasList [VtList $aliases.list \
  2237.         -columns 15 -topSide $newAlias \
  2238.         -callback "SetDelButSensitivityCB aliasList delBut" \
  2239.         -shortHelpCallback SaShortHelpCB \
  2240.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_CNAME_LIST_SH] \
  2241.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  2242.     set sep [VtSeparator $form.sep1 -horizontal \
  2243.         -leftSide FORM -rightSide FORM \
  2244.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  2245.         -topSide $alform -CHARM_topOffset 1]
  2246.     set status [SaStatusBar $form.status 0]
  2247.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  2248.     VxSetVar $form newAlias    $newAlias
  2249.     VxSetVar $form addBut      $addBut
  2250.     VxSetVar $form delBut      $delBut
  2251.     VxSetVar $form aliasList   $aliasList
  2252.     switch $action {
  2253.      MOD_HOST   { set pos [lindex [VtDrawnListGetSelectedItem \
  2254.                     $mainlist -byPositionList] 0]
  2255.               set entry [browser:GetItemFromPos $pos]
  2256.               set cnames [GetRecord $pos CNAME]
  2257.               set cnames [lsort -increasing $cnames]
  2258.                   VtListAddItem $aliasList -itemList $cnames
  2259.                     }
  2260.          HOST       { keylget ZoneEntry CNAME cnameRec
  2261.                   VtListAddItem $aliasList -itemList $cnameRec
  2262.                     }
  2263.          DEFAULTS   { VtListAddItem $aliasList -itemList $DEFAULTS(MX_exchangers)
  2264.                     }
  2265.     }
  2266.     SetAddButSensitivityCB newAlias addBut aliasList delBut [list [list dialog $form]]
  2267.     SetDelButSensitivityCB aliasList delBut [list [list dialog $form]]
  2268.     VtShow $form
  2269.     VtUnLock
  2270. }
  2271. proc MxCB {action cbs} {
  2272.     global DEFAULTS Main ZoneEntry
  2273.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  2274.     keylget cbs dialog dialog
  2275.     set title    "SCO_DNS_MSG_MX_TITLE"
  2276.     switch $action {
  2277.          MOD_ZONE    -
  2278.          MOD_ZONE_BRW   { set callback "ModMxCB ZONE"
  2279.                         }
  2280.          MOD_HOST_BRW   { set callback "ModMxCB HOST"
  2281.                         }
  2282.      MOD_HOST    -
  2283.      ADD_ZONE    -
  2284.          ADD_HOST       { set callback "SetHostMxCB"
  2285.                         }
  2286.          DEFAULTS       { set callback "SetDefaultMxCB"
  2287.                           set title    "SCO_DNS_MSG_DEFAULT_MX_TITLE"
  2288.                         }
  2289.     }
  2290.     keylget cbs dialog dialog
  2291.     set form [VtFormDialog $dialog.fmx \
  2292.                 -ok \
  2293.                 -okCallback $callback \
  2294.                 -autoLock $callback \
  2295.                 -cancel \
  2296.                 -cancelCallback VxEndFormCB \
  2297.                 -cancelButton CANCEL \
  2298.                 -help \
  2299.                 -title [IntlLocalizeMsg $title] ]
  2300.     set alform [SaAlignedForm $form.align [list \
  2301.                         [list SCO_DNS_MSG_GATEWAY \
  2302.                   [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  2303.         ]]
  2304.     VtSetValues $alform -leftSide FORM -rightSide FORM
  2305.     VtSetValues [VxGetVar $alform label1] -bottomSide NONE
  2306.     set mxForm [VxGetVar $alform widget1]
  2307.     set newServer [VtText $mxForm.new -columns 18 \
  2308.         -callback "host:AddEntryToListCB newServer serverList" \
  2309.         -autoLock host:AddEntryToListCB \
  2310.         -valueChangedCallback "SetAddButSensitivityCB newServer addBut serverList delBut" \
  2311.                 -shortHelpCallback SaShortHelpCB \
  2312.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_NEW_MX_SH]]
  2313.     set butrc [VtRowColumn $mxForm.buts \
  2314.         -leftSide $newServer -topSide FORM -vertical]
  2315.     set addBut [VtPushButton $butrc.add \
  2316.         -callback "host:AddEntryToListCB newServer serverList" \
  2317.         -autoLock host:AddEntryToListCB \
  2318.                 -shortHelpCallback SaShortHelpCB \
  2319.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_MX_SH]\
  2320.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  2321.     set delBut [VtPushButton $butrc.del \
  2322.         -callback DeleteServerFromListCB \
  2323.         -autoLock DeleteServerFromListCB \
  2324.                 -shortHelpCallback SaShortHelpCB \
  2325.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_MX_SH]\
  2326.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  2327.     set promote [VtPushButton $butrc.promote \
  2328.         -callback PromoteServerCB  \
  2329.         -autoLock PromoteServerCB \
  2330.                 -shortHelpCallback SaShortHelpCB \
  2331.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_PROMOTE_MX_SH]\
  2332.         -label [IntlLocalizeMsg SCO_DNS_MSG_PROMOTE] ]
  2333.     set demote [VtPushButton $butrc.demote \
  2334.         -callback DemoteServerCB \
  2335.         -autoLock DemoteServerCB \
  2336.                 -shortHelpCallback SaShortHelpCB \
  2337.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEMOTE_MX_SH]\
  2338.         -label [IntlLocalizeMsg SCO_DNS_MSG_DEMOTE] ]
  2339.     set serverList [VtList $mxForm.list \
  2340.         -columns 15 -topSide $newServer \
  2341.         -callback SetDelServerButSensitivityCB \
  2342.         -shortHelpCallback SaShortHelpCB \
  2343.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_GATEWAY_SH] \
  2344.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  2345.     set sep [VtSeparator $form.sep1 -horizontal \
  2346.         -leftSide FORM -rightSide FORM \
  2347.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  2348.         -topSide $alform -CHARM_topOffset 1]
  2349.     set status [SaStatusBar $form.status 0]
  2350.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  2351.     switch -- $action {
  2352.      MOD_HOST_BRW -
  2353.          MOD_ZONE_BRW { 
  2354.              set pos [lindex [VtDrawnListGetSelectedItem \
  2355.                     $mainlist -byPositionList] 0]
  2356.               set entry [browser:GetItemFromPos $pos]
  2357.               set exchangers [GetRecord $pos MX]
  2358.               set exchangers [lsort -increasing \
  2359.                 -command "CompareFields 0 NUM" $exchangers]
  2360.               set items {}
  2361.               foreach exchanger $exchangers {
  2362.             lappend items [lindex $exchanger 1]
  2363.               }
  2364.                   VtListAddItem $serverList -itemList $items
  2365.                     }
  2366.          MOD_ZONE   - 
  2367.          MOD_HOST   { keylget ZoneEntry MX mxRec
  2368.                   VtListAddItem $serverList -itemList $mxRec
  2369.                     }
  2370.          ADD_HOST   -
  2371.          ADD_ZONE   {
  2372.               if {[keylget ZoneEntry MX mxRec]} {
  2373.             VtListAddItem $serverList -itemList $mxRec
  2374.               } else {
  2375.             VtListAddItem $serverList -itemList $DEFAULTS(MX_exchangers)
  2376.               }
  2377.             }
  2378.          DEFAULTS   { VtListAddItem $serverList -itemList $DEFAULTS(MX_exchangers)
  2379.                     }
  2380.     }
  2381.     VxSetVar $form newServer   $newServer
  2382.     VxSetVar $form addBut      $addBut
  2383.     VxSetVar $form delBut      $delBut
  2384.     VxSetVar $form promote     $promote
  2385.     VxSetVar $form demote      $demote
  2386.     VxSetVar $form serverList  $serverList
  2387.     SetAddButSensitivityCB newServer addBut serverList delBut \
  2388.         [list [list dialog $form]]
  2389.     SetDelServerButSensitivityCB [list [list dialog $form]]
  2390.     VtShow $form
  2391.     VtUnLock
  2392. }
  2393. proc CheckRp {strict owner mx} {
  2394.     if {$strict} {
  2395.         if [lempty $owner] { ErrorPush {} 1 SCO_DNS_ERR_NO_OWNER }
  2396.         if [lempty $mx] { ErrorPush {} 1 SCO_DNS_ERR_NO_MX }
  2397.     } else {
  2398.         if {($owner == {}) && ($mx != {})} {
  2399.             ErrorPush {} 1 SCO_DNS_ERR_BAD_RP
  2400.         }
  2401.         if {($mx == {}) && ($owner != {})} {
  2402.             ErrorPush {} 1 SCO_DNS_ERR_BAD_RP
  2403.         }
  2404.     }
  2405.     if {[regexp -- {[^A-Za-z0-9.-_]} $owner inval]} {
  2406.     ctoken owner $inval
  2407.     ErrorPush {} 1 SCO_DNS_ERR_CHAR2 [list $owner]
  2408.     }
  2409.     if {[regexp -- {[^A-Za-z0-9.-_     ]} $mx inval]} {
  2410.     ctoken mx $inval
  2411.     ErrorPush {} 1 SCO_DNS_ERR_CHAR2 [list $mx]
  2412.     }
  2413. }
  2414. proc SetHostRpCB {cbs} {
  2415.     global ZoneEntry
  2416.     keylget cbs dialog dialog
  2417.     set ownerW [VxGetVar $dialog owner]
  2418.     set mxW    [VxGetVar $dialog mx   ]
  2419.     set owner [VtGetValues $ownerW -value]
  2420.     set mx    [VtGetValues $mxW -value]
  2421.     if [ErrorCatch errStack 0 "CheckRp 0 \"$owner\" \"$mx\"" {}] {
  2422.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2423.         VtUnLock
  2424.         return
  2425.     }
  2426.     regsub "@" $owner "\." owner
  2427.     regsub "@" $mx "\." mx
  2428.     set rp {}
  2429.     keylset rp owner $owner
  2430.     keylset rp mx    $mx
  2431.     if {[FQDN $owner] || [FQDN $mx]} {
  2432.     VtShow [VtWarningDialog $dialog.warn \
  2433.         -ok -cancel \
  2434.         -autoLock DoSetHostRpCB \
  2435.         -okCallback "DoSetHostRpCB [list $rp] [list $cbs]" \
  2436.         -message [IntlLocalizeMsg SCO_DNS_ERR_BAD_HOSTNAME] \
  2437.         ]
  2438.     } else {
  2439.     keylset ZoneEntry RP $rp
  2440.     VxEndFormCB $cbs
  2441.     }
  2442.     VtUnLock
  2443. }
  2444. proc DoSetHostRpCB {rp cbs {dummycbs {}}} {
  2445.     global ZoneEntry
  2446.     keylset ZoneEntry RP $rp
  2447.     VxEndFormCB $cbs
  2448.     VtUnLock
  2449. }
  2450. proc SetDefaultRpCB {cbs} {
  2451.     global DEFAULTS DEFAULTS_MODIFIED
  2452.     keylget cbs dialog dialog
  2453.     set ownerW [VxGetVar $dialog owner]
  2454.     set mxW    [VxGetVar $dialog mx   ]
  2455.     set owner [VtGetValues $ownerW -value]
  2456.     set mx    [VtGetValues $mxW -value]
  2457.     if [ErrorCatch errStack 0 "CheckRp 0 \"$owner\" \"$mx\"" {}] {
  2458.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2459.         VtUnLock
  2460.         return
  2461.     }
  2462.     regsub "@" $owner "\." owner
  2463.     regsub "@" $mx "\." mx
  2464.     if {[FQDN $owner] || [FQDN $mx]} {
  2465.     VtShow [VtWarningDialog $dialog.warn \
  2466.         -ok -cancel \
  2467.         -autoLock DoSetDefaultRpCB \
  2468.         -okCallback "DoSetDefaultRpCB $owner $mx [list $cbs]" \
  2469.         -message [IntlLocalizeMsg SCO_DNS_ERR_BAD_HOSTNAME] \
  2470.         ]
  2471.     } else {
  2472.     set DEFAULTS(RP_owner) $owner
  2473.     set DEFAULTS(RP_mx)    $mx
  2474.     set DEFAULTS_MODIFIED 1
  2475.     VxEndFormCB $cbs
  2476.     }
  2477.     VtUnLock
  2478. }
  2479. proc DoSetDefaultRpCB {owner mx cbs {dummycbs {}}} {
  2480.     global DEFAULTS DEFAULTS_MODIFIED
  2481.     set DEFAULTS(RP_owner) $owner
  2482.     set DEFAULTS(RP_mx)    $mx
  2483.     set DEFAULTS_MODIFIED 1
  2484.     VxEndFormCB $cbs
  2485.     VtUnLock
  2486. }
  2487. proc ModRpCB {mode cbs} {
  2488.     keylget cbs dialog dialog
  2489.     set ownerW [VxGetVar $dialog owner]
  2490.     set mxW    [VxGetVar $dialog mx   ]
  2491.     set owner [VtGetValues $ownerW -value]
  2492.     set mx    [VtGetValues $mxW -value]
  2493.     if [ErrorCatch errStack 0 "CheckRp 1 \"$owner\" \"$mx\"" {}] {
  2494.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2495.         VtUnLock
  2496.         return
  2497.     }
  2498.     regsub "@" $owner "\." owner
  2499.     regsub "@" $mx "\." mx
  2500.     if {[FQDN $owner] || [FQDN $mx]} {
  2501.     VtShow [VtWarningDialog $dialog.warn \
  2502.         -ok -okCallback "CompleteModRP $mode $mx $owner [list $cbs]" \
  2503.         -autoLock CompleteModRP \
  2504.         -cancel \
  2505.         -message [IntlLocalizeMsg SCO_DNS_ERR_BAD_HOSTNAME] \
  2506.         ]
  2507.     VtUnLock
  2508.     } else {
  2509.     CompleteModRP $mode $mx $owner $cbs
  2510.     }
  2511. }
  2512. proc CompleteModRP {mode rp owner cbs {dummycbs {}}} {
  2513.     global Main ZONE ZONES
  2514.     keylget cbs dialog dialog
  2515.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  2516.     switch $mode {
  2517.     ZONE {
  2518.         set objcall [list ObjectReplace {sco hostTabEntry} \
  2519.             [SetInstance "$ZONE $ZONE"] \
  2520.             [list [list rpList [list [list $owner $rp]]]]]
  2521.         set bmipResponse [SaMakeObjectCall $objcall]
  2522.         set firstBmip [lindex $bmipResponse 0]
  2523.         set errStack [BmipResponseErrorStack firstBmip]
  2524.         if { ![lempty $errStack] } {
  2525.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_RECORD
  2526.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2527.            VtUnLock
  2528.            return
  2529.         }
  2530.         set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2531.             -byPositionList] 0]
  2532.         set zoneInfo $ZONES($ZONE)
  2533.         lassign $zoneInfo type networks
  2534.         set recData {}
  2535.         keylset recData type $type
  2536.         keylset recData name $ZONE
  2537.         set attrs [GetZoneOrHostAttrs]
  2538.         keylset attrs rpList [list [list $owner $rp]]
  2539.         keylset attrs zoneType $type
  2540.         keylset attrs networks $networks
  2541.         keylset recData data $attrs
  2542.         set pos [browser:FindItemParent $pos]
  2543.         VtDrawnListSelectItem $mainlist -position $pos
  2544.         browser:RemoveEntryFromPos $pos
  2545.         DisplayRecord ZONE $recData $pos EXPANDED
  2546.     }
  2547.     default {    ;# HOST
  2548.         set recData {}
  2549.         keylset recData type "A"
  2550.         set attrs [GetZoneOrHostAttrs]
  2551.         lassign [keylget attrs unknown] host ipaddr
  2552.         keylset recData name $host
  2553.         keyldel attrs unknown
  2554.         keylset attrs rpList [list [list $owner $rp]]
  2555.         keylset attrs addrList $ipaddr
  2556.         keylset attrs zoneType primary
  2557.         keylset recData data $attrs
  2558.         set objcall [list ObjectReplace {sco hostTabEntry} \
  2559.             [SetInstance "$ZONE $host"] \
  2560.             [list [list rpList [list [list $owner $rp]]]]]
  2561.         set bmipResponse [SaMakeObjectCall $objcall]
  2562.         set firstBmip [lindex $bmipResponse 0]
  2563.         set errStack [BmipResponseErrorStack firstBmip]
  2564.         if { ![lempty $errStack] } {
  2565.              ErrorPush errStack 0 SCO_DNS_ERR_MOD_HOST
  2566.              SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2567.              VtUnLock
  2568.              return
  2569.         }
  2570.         set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2571.             -byPositionList] 0]
  2572.         browser:RemoveEntryFromPos $pos
  2573.         DisplayRecord A $recData $pos EXPANDED
  2574.     }
  2575.     }
  2576.     VtDrawnListSelectItem $mainlist -position $pos
  2577.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2578.     -byPositionList] 0]
  2579.     set parent [browser:FindItemParent $pos]
  2580.     VtDrawnListSelectItem $mainlist -position $parent
  2581.     SaDrawnListShowSelectedItem $mainlist
  2582.     SetSensitivityCB $cbs
  2583.     VxEndFormCB $cbs
  2584.     VtUnLock
  2585. }
  2586. proc AddZoneRp {zone dialog} {
  2587.     global ZoneEntry
  2588.     keylget ZoneEntry RP rp
  2589.     if [lempty $rp] {
  2590.     return {}
  2591.     }
  2592.     keylget rp owner owner
  2593.     keylget rp mx mx
  2594.     if {[lempty $owner] && [lempty $mx]} {
  2595.     return {}
  2596.     }
  2597.     set objcall [list ObjectAdd {sco hostTabEntry} \
  2598.             [SetInstance "$zone $zone"] \
  2599.             [list [list rpList [list [list $owner $mx]]]]]
  2600.     set bmipResponse [SaMakeObjectCall $objcall]
  2601.     set firstBmip [lindex $bmipResponse 0]
  2602.     set errStack [BmipResponseErrorStack firstBmip]
  2603.     if { ![lempty $errStack] } {
  2604.         ErrorPush errStack 0 SCO_DNS_ERR_ADD_RECORD
  2605.           SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2606.            return -code return
  2607.     }
  2608.     return $rp
  2609. }
  2610. proc RpCB {action cbs} {
  2611.     global DEFAULTS Main ZoneEntry
  2612.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  2613.     keylget cbs dialog dialog
  2614.     set title    "SCO_DNS_MSG_RP_TITLE"
  2615.     switch $action {
  2616.          MOD_ZONE_BRW    -
  2617.          MOD_ZONE       { set callback "ModRpCB ZONE"
  2618.                         }
  2619.          MOD_HOST_BRW    { set callback "ModRpCB HOST"
  2620.                         }
  2621.      MOD_HOST    -
  2622.      ADD_HOST    -
  2623.      ADD_ZONE    { set callback "SetHostRpCB"
  2624.                         }
  2625.          DEFAULTS       { set callback "SetDefaultRpCB"
  2626.                           set title    "SCO_DNS_MSG_DEFAULT_RP_TITLE"
  2627.                         }
  2628.     }
  2629.     set form [VtFormDialog $dialog.rp \
  2630.                 -ok \
  2631.                 -okCallback $callback \
  2632.                 -autoLock $callback \
  2633.                 -cancel \
  2634.                 -cancelCallback VxEndFormCB \
  2635.                 -cancelButton CANCEL \
  2636.                 -help \
  2637.                 -title [IntlLocalizeMsg $title] ]
  2638.     set alform [SaAlignedForm $form.align [list \
  2639.                         [list SCO_DNS_MSG_OWNER \
  2640.                               [list VtText -columns 21 \
  2641.                         -shortHelpCallback SaShortHelpCB \
  2642.                         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_OWNER_SH] ]] \
  2643.                         [list SCO_DNS_MSG_MAILX \
  2644.                               [list VtText -columns 21 \
  2645.                         -shortHelpCallback SaShortHelpCB \
  2646.                         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_MAILX_SH] ]] \
  2647.         ]]
  2648.     VtSetValues $alform -rightSide FORM
  2649.     set sep [VtSeparator $form.sep1 -horizontal \
  2650.         -leftSide FORM -rightSide FORM \
  2651.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  2652.         -topSide $alform -CHARM_topOffset 1]
  2653.     set status [SaStatusBar $form.status 0]
  2654.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  2655.     set owner [VxGetVar $alform widget1]
  2656.     set mx    [VxGetVar $alform widget2]
  2657.     switch $action {
  2658.      MOD_HOST_BRW -
  2659.          MOD_ZONE_BRW   { set pos [lindex [VtDrawnListGetSelectedItem \
  2660.                                                 $mainlist -byPositionList] 0]
  2661.                       set entry [browser:GetItemFromPos $pos]
  2662.                       VtSetValues $owner -value [lindex [lindex $entry 1] 0]
  2663.                       VtSetValues $mx    -value [lindex [lindex $entry 1] 1]
  2664.                     }
  2665.      MOD_ZONE   -
  2666.          MOD_HOST   { keylget ZoneEntry RP rpRec
  2667.                   VtSetValues $owner -value [keylget rpRec owner]
  2668.               VtSetValues $mx    -value [keylget rpRec mx]
  2669.                     }
  2670.          ADD_HOST   -
  2671.          ADD_ZONE   {
  2672.               if {[keylget ZoneEntry RP rpRec]} {
  2673.             VtSetValues $owner -value [keylget rpRec owner]
  2674.             VtSetValues $mx    -value [keylget rpRec mx]
  2675.               } else {
  2676.             VtSetValues $owner -value $DEFAULTS(RP_owner)
  2677.             VtSetValues $mx    -value $DEFAULTS(RP_mx)
  2678.               }
  2679.             }
  2680.          DEFAULTS   { VtSetValues $owner -value $DEFAULTS(RP_owner)
  2681.                   VtSetValues $mx    -value $DEFAULTS(RP_mx)
  2682.                     }
  2683.     }
  2684.     VxSetVar $form owner $owner
  2685.     VxSetVar $form mx    $mx
  2686.     VtShow $form
  2687.     VtUnLock
  2688. }
  2689. proc SetHostTxtCB {cbs} {
  2690.     global ZoneEntry
  2691.     keylget cbs dialog dialog
  2692.     set txtW [VxGetVar $dialog txt]
  2693.     set txt [VtGetValues $txtW -value]
  2694.     if {[regexp -- {[^A-Za-z0-9.,-_     ]} $txt inval]} {
  2695.     ctoken txt $inval
  2696.         ErrorPush errStack 0 SCO_DNS_ERR_CHAR2 [list $txt]
  2697.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2698.         VtUnLock
  2699.         return
  2700.     }
  2701.     if {[string length $txt] >256} {
  2702.         ErrorPush errStack 0 SCO_DNS_ERR_BAD_TXT
  2703.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2704.         VtUnLock
  2705.         return
  2706.     }
  2707.     keylset ZoneEntry TXT [translit {"()\{\}\\} {} $txt]
  2708.     VxEndFormCB $cbs
  2709.     VtUnLock
  2710. }
  2711. proc ModTxtCB {mode cbs} {
  2712.     global Main ZONE ZONES
  2713.     keylget cbs dialog dialog
  2714.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  2715.     set txtW [VxGetVar $dialog txt]
  2716.     set txt [VtGetValues $txtW -value]
  2717.     if {[lempty $txt]} {
  2718.         ErrorPush errStack 0 SCO_DNS_ERR_NO_TXT
  2719.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2720.         VtUnLock
  2721.         return
  2722.     }
  2723.     if {[regexp -- {[^A-Za-z0-9.,-_     ]} $txt inval]} {
  2724.     ctoken txt $inval
  2725.     ErrorPush errStack 0 SCO_DNS_ERR_CHAR2 [list $txt]
  2726.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2727.         VtUnLock
  2728.         return
  2729.     }
  2730.     if {[string length $txt] >256} {
  2731.         ErrorPush errStack 0 SCO_DNS_ERR_BAD_TXT
  2732.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2733.         VtUnLock
  2734.         return
  2735.     }
  2736.     switch $mode {
  2737.     ZONE {
  2738.         set objcall [list ObjectReplace {sco hostTabEntry} \
  2739.             [SetInstance "$ZONE $ZONE"] \
  2740.             [list [list txtList [list $txt]]]]
  2741.         set bmipResponse [SaMakeObjectCall $objcall]
  2742.         set firstBmip [lindex $bmipResponse 0]
  2743.         set errStack [BmipResponseErrorStack firstBmip]
  2744.         if { ![lempty $errStack] } {
  2745.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_RECORD
  2746.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2747.            VtUnLock
  2748.            return
  2749.         }
  2750.         set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2751.             -byPositionList] 0]
  2752.         set zoneInfo $ZONES($ZONE)
  2753.         lassign $zoneInfo type networks
  2754.         set recData {}
  2755.         keylset recData type $type
  2756.         keylset recData name $ZONE
  2757.         set attrs [GetZoneOrHostAttrs]
  2758.         keylset attrs txtList [list $txt]
  2759.         keylset attrs zoneType $type
  2760.         keylset attrs networks $networks
  2761.         keylset recData data $attrs
  2762.         set pos [browser:FindItemParent $pos]
  2763.         VtDrawnListSelectItem $mainlist -position $pos
  2764.         browser:RemoveEntryFromPos $pos
  2765.         DisplayRecord ZONE $recData $pos EXPANDED
  2766.     }
  2767.     default {    ;# HOST
  2768.         set recData {}
  2769.         keylset recData type "A"
  2770.         set attrs [GetZoneOrHostAttrs]
  2771.         set host [lindex [keylget attrs unknown] 0]
  2772.         set ipaddr [lindex [keylget attrs unknown] 1]
  2773.         keylset recData name $host
  2774.         keyldel attrs unknown
  2775.         keylset attrs txtList [list $txt]
  2776.         keylset attrs addrList $ipaddr
  2777.         keylset attrs zoneType primary
  2778.         keylset recData data $attrs
  2779.         set objcall [list ObjectReplace {sco hostTabEntry} \
  2780.             [SetInstance "$ZONE $host"] \
  2781.             [list [list txtList [list $txt]]]]
  2782.         set bmipResponse [SaMakeObjectCall $objcall]
  2783.         set firstBmip [lindex $bmipResponse 0]
  2784.         set errStack [BmipResponseErrorStack firstBmip]
  2785.         if { ![lempty $errStack] } {
  2786.              ErrorPush errStack 0 SCO_DNS_ERR_MOD_HOST
  2787.              SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2788.              VtUnLock
  2789.              return
  2790.         }
  2791.         set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2792.             -byPositionList] 0]
  2793.         browser:RemoveEntryFromPos $pos
  2794.         DisplayRecord A $recData $pos EXPANDED
  2795.     }
  2796.     }
  2797.     VtDrawnListSelectItem $mainlist -position $pos
  2798.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist \
  2799.     -byPositionList] 0]
  2800.     set parent [browser:FindItemParent $pos]
  2801.     VtDrawnListSelectItem $mainlist -position $parent
  2802.     SaDrawnListShowSelectedItem $mainlist
  2803.     SetSensitivityCB $cbs
  2804.     VxEndFormCB $cbs
  2805.     VtUnLock
  2806. }
  2807. proc AddZoneTxt {zone dialog} {
  2808.     global ZoneEntry
  2809.     keylget ZoneEntry TXT txt
  2810.     if [lempty $txt] {
  2811.         return {}
  2812.     }
  2813.     set recData {}
  2814.     keylset recData type    "TXT"
  2815.     keylset recData name    $zone
  2816.     set optData {}
  2817.     keylset optData txt  "$txt"
  2818.     keylset recData data $optData
  2819.     set objcall [list ObjectAdd {sco hostTabEntry} \
  2820.             [SetInstance "$zone $zone"] \
  2821.             [list [list txtList [list $txt]]]]
  2822.     set bmipResponse [SaMakeObjectCall $objcall]
  2823.     set firstBmip [lindex $bmipResponse 0]
  2824.     set errStack [BmipResponseErrorStack firstBmip]
  2825.     if { ![lempty $errStack] } {
  2826.         ErrorPush errStack 0 SCO_DNS_ERR_ADD_RECORD
  2827.           SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  2828.           VtUnLock
  2829.            return -code return
  2830.     }
  2831.     return [list $txt]
  2832. }
  2833. proc TxtCB {action cbs} {
  2834.     global Main ZoneEntry
  2835.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  2836.     keylget cbs dialog dialog
  2837.     set title    "SCO_DNS_MSG_ZONE_TXT_TITLE"
  2838.     switch $action {
  2839.          MOD_ZONE_BRW    -
  2840.          MOD_ZONE       { set callback "ModTxtCB ZONE"
  2841.                         }
  2842.          MOD_HOST_BRW   { set callback "ModTxtCB HOST"
  2843.                         }
  2844.      MOD_HOST    -
  2845.      ADD_ZONE    -
  2846.      ADD_HOST    { set callback "SetHostTxtCB"
  2847.                         }
  2848.     }
  2849.     set form [VtFormDialog $dialog.txt \
  2850.                 -ok \
  2851.                 -okCallback $callback \
  2852.                 -autoLock $callback \
  2853.                 -cancel \
  2854.                 -cancelCallback VxEndFormCB \
  2855.                 -cancelButton CANCEL \
  2856.                 -help \
  2857.                 -title [IntlLocalizeMsg $title] ]
  2858.     set prompt [VtLabel $form.prompt \
  2859.     -label [IntlLocalizeMsg SCO_DNS_MSG_TXT_PROMPT] ]
  2860.     set txt [VtText $form.txt -columns 25 -rows 3 \
  2861.         -shortHelpCallback SaShortHelpCB \
  2862.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_DESC_SH] \
  2863.     -leftSide $prompt -alignTop $prompt -rightSide FORM]
  2864.     set sep [VtSeparator $form.sep1 -horizontal \
  2865.         -leftSide FORM -rightSide FORM \
  2866.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  2867.         -topSide $txt -CHARM_topOffset 1]
  2868.     set status [SaStatusBar $form.status 0]
  2869.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  2870.     switch $action {
  2871.      MOD_HOST_BRW -
  2872.          MOD_ZONE_BRW   { set pos [lindex [VtDrawnListGetSelectedItem \
  2873.                                                 $mainlist -byPositionList] 0]
  2874.                       set entry [browser:GetItemFromPos $pos]
  2875.                       VtSetValues $txt -value [lindex $entry 1]
  2876.                     }
  2877.      ADD_ZONE -
  2878.      ADD_HOST -
  2879.      MOD_ZONE -
  2880.      MOD_HOST   { keylget ZoneEntry TXT txtRec
  2881.               VtSetValues $txt -value $txtRec
  2882.                     }
  2883.     }
  2884.     VxSetVar $form txt $txt
  2885.     VtShow $form
  2886.     VtUnLock
  2887. }
  2888. proc BuildHostButtons {form mode} {
  2889.     set frame [VtFrame $form.frame1 \
  2890.         -title [IntlLocalizeMsg SCO_DNS_MSG_OPTIONAL_DATA] \
  2891.     -MOTIF_topOffset 5 -CHARM_topOffset 1 \
  2892.         -leftSide FORM -rightSide FORM ]
  2893.     set subform [VtForm $frame.form]
  2894.     set optButs [VtRowColumn $subform.rowcol -numColumns 3]
  2895.     if {[cequal ADD_HOST $mode] || [cequal MOD_HOST $mode]} {
  2896.     set cname [VtPushButton $optButs.cname \
  2897.         -label [IntlLocalizeMsg SCO_DNS_MSG_ALIASES] \
  2898.         -MOTIF_labelCenter \
  2899.         -callback GetCnameCB \
  2900.         -autoLock GetCnameCB \
  2901.         -shortHelpCallback SaShortHelpCB \
  2902.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_ALIASES_SH] ]
  2903.     VxSetVar $form cname  $cname
  2904.     }
  2905.     set hinfo [VtPushButton $optButs.hinfo \
  2906.     -label [IntlLocalizeMsg SCO_DNS_MSG_HINFO] \
  2907.     -MOTIF_labelCenter \
  2908.     -callback "HinfoCB $mode" \
  2909.     -autoLock HinfoCB \
  2910.         -shortHelpCallback SaShortHelpCB \
  2911.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_HINFO_SH] ]
  2912.     set mx [VtPushButton $optButs.mx \
  2913.     -label [IntlLocalizeMsg SCO_DNS_MSG_MAIL] \
  2914.     -MOTIF_labelCenter \
  2915.     -callback "MxCB $mode" \
  2916.     -autoLock MxCB \
  2917.         -shortHelpCallback SaShortHelpCB \
  2918.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MAIL_SH] ]
  2919.     set rp [VtPushButton $optButs.rp \
  2920.     -label [IntlLocalizeMsg SCO_DNS_MSG_RESPONSIBLE] \
  2921.     -MOTIF_labelCenter \
  2922.     -callback "RpCB $mode" \
  2923.     -autoLock RpCB \
  2924.         -shortHelpCallback SaShortHelpCB \
  2925.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_RESPONSIBLE_SH] ]
  2926.     set txt [VtPushButton $optButs.txt \
  2927.     -label [IntlLocalizeMsg SCO_DNS_MSG_DESC] \
  2928.     -MOTIF_labelCenter \
  2929.     -callback "TxtCB $mode" \
  2930.     -autoLock TxtCB \
  2931.         -shortHelpCallback SaShortHelpCB \
  2932.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_DESC_SH] ]
  2933.     VxSetVar $form hinfo  $hinfo
  2934.     VxSetVar $form mx     $mx
  2935.     VxSetVar $form rp     $rp
  2936.     VxSetVar $form txt    $txt
  2937.     return $frame
  2938. }
  2939. proc BuildHostForm { action form } {
  2940.     set alform1 [SaAlignedForm $form.align [list \
  2941.         [list SCO_DNS_MSG_HOSTNAME \
  2942.             [list VtText -columns 21 \
  2943.                         -shortHelpCallback SaShortHelpCB \
  2944.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_HOSTNAME_SH] ]] \
  2945.         [list SCO_DNS_MSG_IPADDRESS \
  2946.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  2947.         ]]
  2948.     VtSetValues $alform1 -rightSide FORM
  2949.     VtSetValues [VxGetVar $alform1 widget1] -rightSide NONE
  2950.     VtSetValues [VxGetVar $alform1 form2] -MOTIF_topOffset 20 -CHARM_topOffset 1
  2951.     VtSetValues [VxGetVar $alform1 widget2] -rightSide NONE
  2952.     createIPwidget [VxGetVar $alform1 widget2] "..." SCO_DNS_MSG_IPADDRESS_SH
  2953.     set frame [BuildHostButtons $form $action]
  2954.     set status [SaStatusBar $form.status 0]
  2955.     VtSetValues $frame -bottomSide $status -bottomOffset 0
  2956.     VxSetVar $form host   [VxGetVar $alform1 widget1]
  2957.     VxSetVar $form ipaddr [VxGetVar $alform1 widget2]
  2958. }
  2959. proc BuildMultihostForm { action form } {
  2960.     set alform1 [SaAlignedForm $form.align [list \
  2961.         [list SCO_DNS_MSG_HOSTNAME \
  2962.             [list VtText -columns 21 \
  2963.             -shortHelpCallback SaShortHelpCB \
  2964.             -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_HOSTNAME_SH] ]] \
  2965.         [list SCO_DNS_MSG_IPADDRESS \
  2966.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  2967.         ]]
  2968.     VtSetValues $alform1 -rightSide FORM
  2969.     VtSetValues [VxGetVar $alform1 widget1] -rightSide NONE
  2970.     VtSetValues [VxGetVar $alform1 form2] \
  2971.             -MOTIF_topOffset 20 -CHARM_topOffset 1
  2972.     set servers [VxGetVar $alform1 widget2]
  2973.     VtSetValues $servers -rightSide NONE
  2974.     VtSetValues [VxGetVar $alform1 label2] -bottomSide NONE
  2975.     set subform [VtForm $servers.subform -marginHeight 0 -marginWidth 0]
  2976.     dns:createIPwidget $subform "..." SCO_DNS_MSG_NEW_IP_SH \
  2977.             "dns:checkIPWidgetCB $subform" \
  2978.             "multi:AddEntryToListCB newServer serverList"
  2979.     set butrc [VtRowColumn $servers.buts \
  2980.         -leftSide $subform -topSide FORM -vertical]
  2981.     set addBut [VtPushButton $butrc.add \
  2982.         -callback "multi:AddEntryToListCB newServer serverList" \
  2983.         -autoLock multi:AddEntryToListCB \
  2984.                 -shortHelpCallback SaShortHelpCB \
  2985.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_IP_SH]\
  2986.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  2987.     set delBut [VtPushButton $butrc.del \
  2988.         -callback "DeleteEntryFromListCB serverList delBut" \
  2989.         -autoLock DeleteEntryFromListCB \
  2990.                 -shortHelpCallback SaShortHelpCB \
  2991.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_IP_SH]\
  2992.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  2993.     set serverList [VtList $servers.list \
  2994.         -columns 15 -topSide $subform \
  2995.         -callback "SetDelButSensitivityCB serverList delBut" \
  2996.         -shortHelpCallback SaShortHelpCB \
  2997.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_IP_LIST_SH] \
  2998.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  2999.     set frame [BuildHostButtons $form $action]
  3000.     set status [SaStatusBar $form.status 0]
  3001.     VtSetValues $frame -bottomSide $status -bottomOffset 0
  3002.     set hostW [VxGetVar $alform1 widget1]
  3003.     VxSetVar $form host       $hostW
  3004.     VxSetVar $form ipaddr     $serverList
  3005.     VxSetVar $form newServer  $subform
  3006.     VxSetVar $form addBut     $addBut
  3007.     VxSetVar $form delBut     $delBut
  3008.     VxSetVar $form serverList $serverList
  3009.     set focusList [list $hostW $subform $butrc $serverList $frame]
  3010.     SaSetTabGroups $form $focusList
  3011.     lappend focusList [VtGetValues $form -ok]
  3012.     SaSetFocusList $form $focusList
  3013.     dns:SetAddButSensitivityCB newServer addBut serverList delBut [list [list dialog $form]]
  3014.     SetDelButSensitivityCB serverList delBut [list [list dialog $form]]
  3015. }
  3016. proc CheckHost {host multi ipaddrW networks} {
  3017.     if [lempty $host] { ErrorPush {} 1 SCO_DNS_ERR_NO_HOSTNAME }
  3018.     if {[regexp -- {[^A-Za-z0-9.-]} $host inval]} {
  3019.     ctoken host $inval
  3020.     ErrorPush {} 1 SCO_DNS_ERR_CHAR1 [list $host]
  3021.     }
  3022.     if {$multi} {
  3023.         set ipaddr  [VtListGetItem $ipaddrW -all]
  3024.         if [lempty $ipaddr] {
  3025.         ErrorPush {} 1 SCO_DNS_ERR_NO_IP_ADDR
  3026.     }
  3027.     } else {
  3028.         set ipaddr  [getIPwidgetValue $ipaddrW]
  3029.         if [cequal $ipaddr "..."] {
  3030.             ErrorPush {} 1 SCO_DNS_ERR_NO_IP_ADDR
  3031.         }
  3032.     if {! [checkIPaddr $ipaddr]} {
  3033.             ErrorPush {} 1 SCO_DNS_ERR_BAD_IP_ADDR1
  3034.         }
  3035.     }
  3036.     return $ipaddr
  3037. }
  3038. proc DoAddHostCB {multi cbs} {
  3039.     keylget cbs dialog dialog
  3040.     set hostW   [VxGetVar $dialog host   ]
  3041.     set ipaddrW [VxGetVar $dialog ipaddr ]
  3042.     set host    [VtGetValues $hostW -value]
  3043.     if {[regexp -- _ $host]} {
  3044.     VtShow [VtWarningDialog $dialog.warn \
  3045.                 -ok -message [IntlLocalizeMsg SCO_DNS_ERR_NO_UNDERBAR]]
  3046.     VtUnLock
  3047.     } else {
  3048.         ActionAddHostCB $host $multi $ipaddrW $cbs
  3049.     }
  3050. }
  3051. proc ActionAddHostCB {host multi ipaddrW cbs {dummycbs {}}} {
  3052.     global NETWORKS ZONE
  3053.     keylget cbs dialog dialog
  3054.     set networks [keylget NETWORKS $ZONE]
  3055.     if [ErrorCatch errStack 0 "CheckHost \"$host\" $multi $ipaddrW [list $networks]" ipaddr] {
  3056.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3057.     VtUnLock
  3058.     return
  3059.     }
  3060.     if [FQDN $host] {
  3061.     set warnform [VtWarningDialog $dialog.warn \
  3062.                 -ok -okCallback "CompleteAddHost $host [list $ipaddr] $multi [list $cbs]" \
  3063.                 -autoLock CompleteAddHost \
  3064.         -cancel \
  3065.                 -message [IntlLocalizeMsg SCO_DNS_ERR_BAD_HOSTNAME] \
  3066.               ]
  3067.         VtShow $warnform
  3068.     VtUnLock
  3069.     } else {
  3070.         CompleteAddHost $host $ipaddr $multi $cbs 
  3071.     }
  3072. }
  3073. proc CompleteAddHost {host ipaddr multi cbs {dummycbs {}}} {
  3074.     global Main ZoneEntry DEFAULTS ZONE NETWORKS ZONE
  3075.     keylget cbs dialog dialog
  3076.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  3077.     set hostW    [VxGetVar $dialog host   ]
  3078.     set ipaddrW  [VxGetVar $dialog ipaddr ]
  3079.     set networks [keylget NETWORKS $ZONE]
  3080.     set mxs {}
  3081.     set rps {}
  3082.     set txts {}
  3083.     set recData {}
  3084.     keylset recData type    "A"
  3085.     keylset recData name    $host
  3086.     keylget ZoneEntry CNAME cnames
  3087.     if {![keylget ZoneEntry HINFO hinfo]} {
  3088.     set hinfo {}
  3089.     }
  3090.     keylget ZoneEntry MX    mx
  3091.     keylget ZoneEntry RP    rp
  3092.     keylget ZoneEntry TXT   txt
  3093.     if {! [lempty $cnames]} {
  3094.     foreach name $cnames {
  3095.         lappend optData [list "CNAME" $name]
  3096.     }
  3097.     }
  3098.     if {! [lempty $mx]} {
  3099.     set pref 5
  3100.     foreach exchanger $mx {
  3101.         lappend mxs [list $pref $exchanger]
  3102.         incr pref 5        ;# 5 step increments
  3103.     }
  3104.     }
  3105.     if {([keylget rp owner] != {}) && ([keylget rp mx] != {})} {
  3106.     lappend rps [list [keylget rp owner] [keylget rp mx]]
  3107.     }
  3108.     if {! [lempty $txt]} {
  3109.     lappend txts $txt
  3110.     }
  3111.     set attrs [list [list addrList $ipaddr] [list aliasList $cnames] \
  3112.               [list mxList $mxs] [list rpList $rps] \
  3113.               [list hinfoList [list $hinfo]] [list txtList $txts]]
  3114.     set objcall [list ObjectCreate \
  3115.                         {sco hostTabEntry} [SetInstance "$ZONE $host"] $attrs]
  3116.     set bmipResponse [SaMakeObjectCall $objcall]
  3117.     set firstBmip [lindex $bmipResponse 0]
  3118.     set errStack [BmipResponseErrorStack firstBmip]
  3119.     if { ![lempty $errStack] } {
  3120.            ErrorPush errStack 0 SCO_DNS_ERR_ADD_HOST
  3121.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3122.            VtUnLock
  3123.            return
  3124.     }
  3125.     keylset attrs txtList $txts
  3126.     keylset attrs hinfoList $hinfo
  3127.     keylset recData data  $attrs
  3128.     DisplayRecord A $recData 0
  3129.     VtDrawnListSelectItem $mainlist -position 0 
  3130.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist -byPositionList] 0]
  3131.     set parent [browser:FindItemParent $pos]
  3132.     VtDrawnListSelectItem $mainlist -position $parent
  3133.     SaDrawnListShowSelectedItem $mainlist
  3134.     SetSensitivityCB $cbs
  3135.     VtSetValues $hostW -value ""
  3136.     if {$multi} {
  3137.     VtListDeleteItem $ipaddrW -all
  3138.         set newServer [VxGetVar $dialog newServer]
  3139.         setIPwidgetValue $newServer [lindex $networks 0]
  3140.     } else {
  3141.         setIPwidgetValue $ipaddrW [lindex $networks 0]
  3142.     }
  3143.     Init:ZoneEntry
  3144.     VtSetFocus $hostW
  3145.     VtUnLock
  3146. }
  3147. proc AddHostCB { multi cbs } {
  3148.     global ZONE NETWORKS
  3149.     keylget cbs dialog dialog
  3150.     Init:ZoneEntry
  3151.     set form [VtFormDialog $dialog.add \
  3152.                 -ok -okLabel [IntlLocalizeMsg SCO_DNS_MSG_ADD] \
  3153.                 -okCallback "DoAddHostCB $multi" \
  3154.                 -autoLock DoAddHostCB \
  3155.                 -cancel -cancelLabel [IntlLocalizeMsg SCO_DNS_MSG_CLOSE] \
  3156.                 -cancelCallback VxEndFormCB \
  3157.                 -cancelButton CANCEL \
  3158.                 -help \
  3159.                 -title [IntlLocalizeMsg SCO_DNS_MSG_ADD_TITLE] ]
  3160.     if {$multi} {
  3161.         BuildMultihostForm ADD_HOST $form
  3162.         set ipaddrW [VxGetVar $form newServer]
  3163.         setIPwidgetValue $ipaddrW [lindex [keylget NETWORKS $ZONE] 0]
  3164.     } else {
  3165.         BuildHostForm ADD_HOST $form
  3166.         set ipaddrW [VxGetVar $form ipaddr]
  3167.         setIPwidgetValue $ipaddrW [lindex [keylget NETWORKS $ZONE] 0]
  3168.     }
  3169.     VtShow $form
  3170.     VtUnLock
  3171. }
  3172. proc DoModifyHostCB {multi cbs} {
  3173.     keylget cbs dialog dialog
  3174.     set hostW   [VxGetVar $dialog host     ]
  3175.     set ipaddrW [VxGetVar $dialog ipaddr ]
  3176.     set host    [VtGetValues $hostW -value]
  3177.     if [regexp -- _ $host] {
  3178.     VtShow [VtWarningDialog $dialog.warn \
  3179.                 -ok -message [IntlLocalizeMsg SCO_DNS_ERR_NO_UNDERBAR]]
  3180.     VtUnLock
  3181.     } else {
  3182.         ActionModHostCB $host $multi $ipaddrW $cbs
  3183.     }
  3184. }
  3185. proc ActionModHostCB {host multi ipaddrW cbs {dummycbs {}}} {
  3186.     global NETWORKS ZONE
  3187.     keylget cbs dialog dialog
  3188.     set networks [keylget NETWORKS $ZONE]
  3189.     if [ErrorCatch errStack 0 "CheckHost \"$host\" $multi $ipaddrW [list $networks]" ipaddr] {
  3190.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3191.     VtUnLock
  3192.     return
  3193.     }
  3194.     if [FQDN $host] {
  3195.     set warnform [VtWarningDialog $dialog.warn \
  3196.                 -ok -okCallback "CompleteModHostCB $host [list $ipaddr] $multi [list $cbs]" \
  3197.                 -autoLock CompleteModHostCB \
  3198.         -cancel \
  3199.                 -message [IntlLocalizeMsg SCO_DNS_ERR_BAD_HOSTNAME] \
  3200.               ]
  3201.         VtShow $warnform
  3202.     VtUnLock
  3203.     } else {
  3204.         CompleteModHostCB $host $ipaddr $multi $cbs 
  3205.     }
  3206. }
  3207. proc CompleteModHostCB {host ipaddr multi cbs {dummycbs {}}} {
  3208.     global Main ZoneEntry DEFAULTS ZONE NETWORKS ZONE
  3209.     keylget cbs dialog dialog
  3210.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  3211.     set hostW    [VxGetVar $dialog host   ]
  3212.     set ipaddrW  [VxGetVar $dialog ipaddr ]
  3213.     set networks [keylget NETWORKS $ZONE]
  3214.     set mxs {}
  3215.     set rps {}
  3216.     set txts {}
  3217.     set recData {}
  3218.     keylset recData type    "A"
  3219.     keylset recData name    $host
  3220.     set attrs [CnvZoneEntry $ZoneEntry]
  3221.     keylget ZoneEntry CNAME cnames    ;# rec not handled by CnvZoneEntry
  3222.     keylset attrs addrList $ipaddr
  3223.     keylset attrs aliasList $cnames
  3224.     set selected [lindex [VtDrawnListGetSelectedItem $mainlist \
  3225.                 -byRecordList] 0]
  3226.     set oldhost  [lindex $selected 1]
  3227.     set objcall [list ObjectDelete \
  3228.         {sco hostTabEntry} [SetInstance "$ZONE $oldhost"] {}]
  3229.     set bmipResponse [SaMakeObjectCall $objcall]
  3230.     set firstBmip [lindex $bmipResponse 0]
  3231.     set errStack [BmipResponseErrorStack firstBmip]
  3232.     if { ![lempty $errStack] } {
  3233.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_HOST
  3234.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3235.            VtUnLock
  3236.            return
  3237.     }
  3238.     set objcall [list ObjectCreate \
  3239.         {sco hostTabEntry} [SetInstance "$ZONE $host"] $attrs]
  3240.     set bmipResponse [SaMakeObjectCall $objcall]
  3241.     set firstBmip [lindex $bmipResponse 0]
  3242.     set errStack [BmipResponseErrorStack firstBmip]
  3243.     if { ![lempty $errStack] } {
  3244.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_HOST
  3245.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3246.            VtUnLock
  3247.            return
  3248.     }
  3249.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist -byPositionList] 0]
  3250.     browser:RemoveEntryFromPos $pos
  3251.     keylset attrs hinfoList [lindex [keylget attrs hinfoList] 0]
  3252.     keylset recData data  $attrs
  3253.     DisplayRecord A $recData $pos
  3254.     VtDrawnListSelectItem $mainlist -position $pos
  3255.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist -byPositionList] 0]
  3256.     set parent [browser:FindItemParent $pos]
  3257.     VtDrawnListSelectItem $mainlist -position $parent
  3258.     SaDrawnListShowSelectedItem $mainlist
  3259.     SetSensitivityCB $cbs
  3260.     VxEndFormCB $cbs
  3261.     VtUnLock
  3262. }
  3263. proc CnvZoneEntry {ZoneEntry} {
  3264.     set mxs {}
  3265.     set rps {}
  3266.     set txts {}
  3267.     set attrs {}
  3268.     if {![keylget ZoneEntry HINFO hinfo]} {
  3269.     set hinfo {}
  3270.     }
  3271.     keylget ZoneEntry MX    mx
  3272.     keylget ZoneEntry RP    rp
  3273.     keylget ZoneEntry TXT   txt
  3274.     if {! [lempty $mx]} {
  3275.     set pref 5
  3276.     foreach exchanger $mx {
  3277.         lappend mxs [list $pref $exchanger]
  3278.         incr pref 5        ;# 5 step increments
  3279.     }
  3280.     }
  3281.     if {([keylget rp owner] != {}) && ([keylget rp mx] != {})} {
  3282.     lappend rps [list [keylget rp owner] [keylget rp mx]]
  3283.     }
  3284.     if {! [lempty $txt]} {
  3285.     lappend txts $txt
  3286.     }
  3287.     set attrs [list [list mxList $mxs] [list rpList $rps] \
  3288.         [list hinfoList [list $hinfo]] [list txtList $txts]]
  3289.     return $attrs
  3290. }
  3291. proc ModifyHostCB { cbs } {
  3292.     global Main
  3293.     keylget cbs dialog dialog
  3294.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  3295.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist -byPositionList] 0]
  3296.     set parent [browser:FindItemParent $pos]
  3297.     VtDrawnListSelectItem $mainlist -position $parent
  3298.     set entry [browser:GetItemFromPos $parent]
  3299.     lassign $entry host ipaddr
  3300.     set multi 1                ;# always use multi-host...
  3301.     set title SCO_DNS_MSG_MOD_TITLE
  3302.     set form [VtFormDialog $dialog.modify \
  3303.                 -ok -cancel -help \
  3304.                 -okCallback "DoModifyHostCB $multi" \
  3305.                 -autoLock DoModifyHostCB \
  3306.                 -cancelCallback VxEndFormCB \
  3307.                 -cancelButton CANCEL \
  3308.                 -title [IntlLocalizeMsg $title] ]
  3309.     if {$multi} {
  3310.         BuildMultihostForm MOD_HOST $form
  3311.     } else {
  3312.         BuildHostForm MOD_HOST $form
  3313.     }
  3314.     set hostW   [VxGetVar $form host   ]
  3315.     VtSetValues $hostW -value $host
  3316.     set ipaddrW [VxGetVar $form ipaddr ]
  3317.     if {$multi} {
  3318.     VtListAddItem $ipaddrW -itemList $ipaddr
  3319.     } else {
  3320.         setIPwidgetValue $ipaddrW $ipaddr 
  3321.     }
  3322.     Init:ZoneEntry modify
  3323.     VtShow $form
  3324.     VtUnLock
  3325. }
  3326. proc GetZoneOrHostAttrs {} {
  3327.     global Main DEFAULTS
  3328.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  3329.     set pos [lindex [VtDrawnListGetSelectedItem $mainlist -byPositionList] 0]
  3330.     set parentPos [browser:FindItemParent $pos]
  3331.     VtDrawnListSelectItem $mainlist -position $parentPos
  3332.     set parentId [browser:ParentId $parentPos]
  3333.     set ent [browser:ParentData $parentId]
  3334.     keylget ent children children
  3335.     set attrs {}
  3336.     keylset attrs aliasList    {}
  3337.     keylset attrs txtList    {}
  3338.     keylset attrs mxList    {}
  3339.     keylset attrs rpList    {}
  3340.     keylset attrs hinfoList    {}
  3341.     keylset attrs networks    {}
  3342.     keylset attrs unknown    $parentId
  3343.     foreach record $children {
  3344.     set type [lindex $record 0]
  3345.     set data [lindex $record 1]
  3346.         switch $type {
  3347.       networks {        ;# DUMMY record for zones only ...
  3348.           keylset attrs networks $data
  3349.       }
  3350.       CNAME {
  3351.           keylget attrs aliasList cname
  3352.           lappend cname $data
  3353.           keylset attrs aliasList $cname
  3354.         }
  3355.           HINFO { keylset hinfo hw [lindex $data 0]
  3356.           keylset hinfo os [lindex $data 1]
  3357.           keylset attrs hinfoList $hinfo
  3358.         }
  3359.           MX    { keylget attrs mxList exchangers
  3360.           lappend exchangers $data
  3361.           keylset attrs mxList $exchangers
  3362.         }
  3363.           RP    { keylset rp owner [lindex $data 0]
  3364.           keylset rp mx    [lindex $data 1]
  3365.           keylset attrs rpList $rp
  3366.         }
  3367.           TXT   { keylget attrs txtList txt
  3368.           lappend txt $data
  3369.           keylset attrs txtList $txt
  3370.         }
  3371.         }
  3372.     }
  3373.     return $attrs
  3374. }
  3375. proc ModifyCB {cbs} {
  3376.     global BROWSER VIEW
  3377.     set pos [lindex [VtDrawnListGetSelectedItem $BROWSER -byPositionList] 0]
  3378.     set entry [lindex [browser:GetItemFromPos $pos] 0]
  3379.     set type  [lindex $entry 0]
  3380.     switch -- $VIEW {
  3381.     ZONES    { set mode MOD_ZONE_BRW }
  3382.     default { set mode MOD_HOST_BRW }
  3383.     }
  3384.     switch -- $type {
  3385.     CNAME    { CnameCB $mode $cbs    }
  3386.     MX    { MxCB $mode $cbs    }
  3387.     RP    { RpCB $mode $cbs    }
  3388.     TXT    { TxtCB $mode $cbs    }
  3389.     HINFO    { HinfoCB $mode $cbs    }
  3390.     default    {
  3391.         if [string match "MOD_ZONE_BRW" $mode] {
  3392.            ModifyZoneCB $cbs
  3393.         } else {
  3394.            ModifyHostCB $cbs
  3395.         }
  3396.     }
  3397.     }
  3398. }
  3399. proc DoDeleteHostCB {cbs} {
  3400.     global Main ZONE BROWSER
  3401.     set pos [lindex [VtDrawnListGetSelectedItem $BROWSER -byPositionList] 0]
  3402.     set entry [lindex [browser:GetItemFromPos $pos] 0]
  3403.     set type  [lindex $entry 0]
  3404.     set parentPos [browser:FindItemParent $pos]
  3405.     set parentId [lindex [browser:GetItemFromPos $parentPos] 0]
  3406.     switch $type {
  3407.     CNAME    {
  3408.               set objcall [list ObjectReplace {sco hostTabEntry} \
  3409.             [SetInstance "$ZONE $parentId"] {{aliasList {}}}]
  3410.               set bmipResponse [SaMakeObjectCall $objcall]
  3411.               set firstBmip [lindex $bmipResponse 0]
  3412.               set errStack [BmipResponseErrorStack firstBmip]
  3413.               if ![lempty $errStack] {
  3414.                    ErrorPush errStack 0 SCO_DNS_ERR_DEL_RECORD
  3415.                    SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  3416.                    VtUnLock
  3417.                    return
  3418.               }
  3419.     }
  3420.     MX    { 
  3421.               set objcall [list ObjectReplace {sco hostTabEntry} \
  3422.             [SetInstance "$ZONE $parentId"] {{mxList {}}}]
  3423.               set bmipResponse [SaMakeObjectCall $objcall]
  3424.               set firstBmip [lindex $bmipResponse 0]
  3425.               set errStack [BmipResponseErrorStack firstBmip]
  3426.               if { ![lempty $errStack] } {
  3427.                    ErrorPush errStack 0 SCO_DNS_ERR_DEL_RECORD
  3428.                    SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  3429.                    VtUnLock
  3430.                    return
  3431.               }
  3432.     }
  3433.     RP    { 
  3434.               set objcall [list ObjectReplace {sco hostTabEntry} \
  3435.             [SetInstance "$ZONE $parentId"] {{rpList {}}}]
  3436.               set bmipResponse [SaMakeObjectCall $objcall]
  3437.               set firstBmip [lindex $bmipResponse 0]
  3438.               set errStack [BmipResponseErrorStack firstBmip]
  3439.               if { ![lempty $errStack] } {
  3440.                    ErrorPush errStack 0 SCO_DNS_ERR_DEL_RECORD
  3441.                    SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  3442.                    VtUnLock
  3443.                    return
  3444.               }
  3445.     }
  3446.     HINFO    { 
  3447.               set objcall [list ObjectReplace {sco hostTabEntry} \
  3448.             [SetInstance "$ZONE $parentId"] {{hinfoList {}}}]
  3449.               set bmipResponse [SaMakeObjectCall $objcall]
  3450.               set firstBmip [lindex $bmipResponse 0]
  3451.               set errStack [BmipResponseErrorStack firstBmip]
  3452.               if { ![lempty $errStack] } {
  3453.                    ErrorPush errStack 0 SCO_DNS_ERR_DEL_RECORD
  3454.                    SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  3455.                    VtUnLock
  3456.                    return
  3457.               }
  3458.     }
  3459.     TXT    { 
  3460.               set objcall [list ObjectReplace {sco hostTabEntry} \
  3461.             [SetInstance "$ZONE $parentId"] {{txtList {}}}]
  3462.               set bmipResponse [SaMakeObjectCall $objcall]
  3463.               set firstBmip [lindex $bmipResponse 0]
  3464.               set errStack [BmipResponseErrorStack firstBmip]
  3465.               if { ![lempty $errStack] } {
  3466.                    ErrorPush errStack 0 SCO_DNS_ERR_DEL_RECORD
  3467.                    SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  3468.                    VtUnLock
  3469.                    return
  3470.               }
  3471.     }
  3472.     default { # delete a host record
  3473.               set objcall [list ObjectDelete {sco hostTabEntry} \
  3474.             [SetInstance "$ZONE $parentId"] {}]
  3475.               set bmipResponse [SaMakeObjectCall $objcall]
  3476.               set firstBmip [lindex $bmipResponse 0]
  3477.               set errStack [BmipResponseErrorStack firstBmip]
  3478.               if { ![lempty $errStack] } {
  3479.                    ErrorPush errStack 0 SCO_DNS_ERR_DEL_RECORD
  3480.                    SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  3481.                    VtUnLock
  3482.                    return
  3483.               }
  3484.     }
  3485.     }
  3486.     browser:RemoveEntryFromPos $pos
  3487.     set allentries [VtDrawnListGetItem $BROWSER -all]
  3488.     if {$allentries != ""} {
  3489.         if {[llength $allentries] < $pos} {
  3490.                 incr pos -1
  3491.         }
  3492.         VtDrawnListSelectItem $BROWSER -position $pos
  3493.         set parent [browser:FindItemParent $pos]
  3494.         VtDrawnListSelectItem $BROWSER -position $parent
  3495.     }
  3496.     SetSensitivityCB $cbs
  3497.     VtUnLock
  3498. }
  3499. proc DeleteHostCB { cbs } {
  3500.     keylget cbs dialog dialog
  3501.     set mainlist [VxGetVar $dialog mainlist]
  3502.     set selected [lindex [VtDrawnListGetSelectedItem $mainlist -byRecordList] 0]
  3503.     set YN [VtQuestionDialog $dialog.YN \
  3504.         -okCallback DoDeleteHostCB \
  3505.         -autoLock DoDeleteHostCB \
  3506.         -cancel \
  3507.         -message [IntlLocalizeMsg SCO_DNS_MSG_DELETE_ENTRY] ]
  3508.     VtShow $YN
  3509.     VtUnLock
  3510. }
  3511. proc SetAddServerButSensitivityCB {cbs} {
  3512.     keylget cbs dialog dialog
  3513.     set data    [VxGetVar $dialog newServer ]
  3514.     set button  [VxGetVar $dialog addBut ]
  3515.     set delBut  [VxGetVar $dialog delBut ]
  3516.     set promote [VxGetVar $dialog promote ]
  3517.     set demote  [VxGetVar $dialog demote ]
  3518.     set list    [VxGetVar $dialog serverList]
  3519.     set a_addr [VxGetVar $data a_addr]
  3520.     set b_addr [VxGetVar $data b_addr]
  3521.     set c_addr [VxGetVar $data c_addr]
  3522.     set d_addr [VxGetVar $data d_addr]
  3523.     set a_val [VtGetValues $a_addr -value]
  3524.     set b_val [VtGetValues $b_addr -value]
  3525.     set c_val [VtGetValues $c_addr -value]
  3526.     set d_val [VtGetValues $d_addr -value]
  3527.     if {($a_val != "") && ($b_val != "") && ($c_val != "") && ($d_val != "")} {
  3528.         VtSetSensitive $button 1
  3529.         VtSetSensitive $delBut 0
  3530.         VtSetSensitive $promote 0
  3531.         VtSetSensitive $demote 0
  3532.         VtListDeselectItem $list -all
  3533.     } else {
  3534.         VtSetSensitive $button 0
  3535.     }
  3536. }
  3537. proc SetDelServerButSensitivityCB {cbs} {
  3538.     keylget cbs dialog dialog
  3539.     set delBut  [VxGetVar $dialog delBut ]
  3540.     set promote [VxGetVar $dialog promote ]
  3541.     set demote  [VxGetVar $dialog demote ]
  3542.     set list    [VxGetVar $dialog serverList]
  3543.     set value [VtListGetSelectedItem $list]
  3544.     if {$value == 0} {
  3545.         VtSetSensitive $delBut 0
  3546.         VtSetSensitive $promote 0
  3547.         VtSetSensitive $demote 0
  3548.     } else {
  3549.         VtSetSensitive $delBut 1
  3550.         set pos   [VtListGetSelectedItem $list -byPositionList]
  3551.         set count [llength [VtListGetItem $list -all]]
  3552.         if {$pos == $count} {
  3553.                VtSetSensitive $demote 0
  3554.         } else {
  3555.             VtSetSensitive $demote 1
  3556.         }
  3557.         if {$pos > 1} {
  3558.             VtSetSensitive $promote 1
  3559.         } else {
  3560.             VtSetSensitive $promote 0
  3561.         }
  3562.     }
  3563. }
  3564. proc AddServerToListCB {cbs} {
  3565.     keylget cbs dialog dialog
  3566.     set data    [VxGetVar $dialog newServer ]
  3567.     set list    [VxGetVar $dialog serverList]
  3568.     set value [getIPwidgetValue $data]
  3569.     VtListAddItem $list -item $value
  3570.     setIPwidgetValue $data "..."
  3571.     VtUnLock
  3572. }
  3573. proc DeleteServerFromListCB {cbs} {
  3574.     keylget cbs dialog dialog
  3575.     set list    [VxGetVar $dialog serverList]
  3576.     set button  [VxGetVar $dialog delBut]
  3577.     set promote [VxGetVar $dialog promote ]
  3578.     set demote  [VxGetVar $dialog demote ]
  3579.     set selected [VtListGetSelectedItem $list -byPositionList]
  3580.     VtListDeleteItem $list -position $selected 
  3581.     VtSetSensitive $button 0
  3582.     VtSetSensitive $promote 0
  3583.     VtSetSensitive $demote 0
  3584.     VtUnLock
  3585. }
  3586. proc PromoteServerCB {cbs} {
  3587.     keylget cbs dialog dialog
  3588.     set serverList [VxGetVar $dialog serverList]
  3589.     set promote    [VxGetVar $dialog promote]
  3590.     set demote     [VxGetVar $dialog demote]
  3591.     set item [VtListGetSelectedItem $serverList -byItemList]
  3592.     set pos  [VtListGetSelectedItem $serverList -byPositionList]
  3593.     VtListDeleteItem $serverList -positionList $pos
  3594.     incr pos -1
  3595.     VtListAddItem $serverList -itemList $item -position $pos
  3596.     VtListSelectItem $serverList -position $pos
  3597.     if {$pos == 1} {
  3598.         VtSetSensitive $promote 0
  3599.     }
  3600.     VtSetSensitive $demote 1
  3601.     VtUnLock
  3602. }
  3603. proc DemoteServerCB {cbs} {
  3604.     keylget cbs dialog dialog
  3605.     set serverList  [VxGetVar $dialog serverList]
  3606.     set promote [VxGetVar $dialog promote]
  3607.     set demote  [VxGetVar $dialog demote]
  3608.     set item [VtListGetSelectedItem $serverList -byItemList]
  3609.     set pos  [VtListGetSelectedItem $serverList -byPositionList]
  3610.     VtListDeleteItem $serverList -positionList $pos
  3611.     incr pos
  3612.     VtListAddItem $serverList -itemList $item -position $pos
  3613.     VtListSelectItem $serverList -position $pos
  3614.     set count [llength [VtListGetItem $serverList -all]]
  3615.     if {$pos == $count} {
  3616.         VtSetSensitive $demote 0
  3617.     }
  3618.     VtSetSensitive $promote 1
  3619.     VtUnLock
  3620. }
  3621. proc SetSortlistCB {cbs} {
  3622.     keylget cbs dialog dialog
  3623.     set serverList [VxGetVar $dialog serverList]
  3624.     set sortlist [VtListGetItem $serverList -all]
  3625.     keylset attrs dNSSortlist $sortlist
  3626.     set objcall [list ObjectReplace {sco dNSystem} [SetInstance "NULL"] $attrs]
  3627.     set bmipResponse [SaMakeObjectCall $objcall]
  3628.     set firstBmip [lindex $bmipResponse 0]
  3629.     set errStack [BmipResponseErrorStack firstBmip]
  3630.     if { ![lempty $errStack] } {
  3631.         ErrorPush errStack 0 SCO_DNS_ERR_SAVE_SORTLIST
  3632.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3633.         VtUnLock
  3634.     return
  3635.     }
  3636.     VxEndFormCB $cbs
  3637.     VtUnLock
  3638. }
  3639. proc GetSortlistCB {cbs} {
  3640.     keylget cbs dialog dialog
  3641.     set objcall [list ObjectGet {sco dNSystem} [SetInstance "NULL"] dNSSortlist]
  3642.     set bmipResponse [SaMakeObjectCall $objcall]
  3643.     set firstBmip [lindex $bmipResponse 0]
  3644.     set errStack [BmipResponseErrorStack firstBmip]
  3645.     if { ![lempty $errStack] } {
  3646.         ErrorPush errStack 0 SCO_DNS_ERR_GET_SORTLIST
  3647.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3648.         VtUnLock
  3649.         return
  3650.     } else {
  3651.     set attrs [BmipResponseAttrValList firstBmip]
  3652.     set sortlist  [keylget attrs dNSSortlist]
  3653.     }
  3654.     set form [VtFormDialog $dialog.sortlist \
  3655.                 -ok \
  3656.                 -okCallback SetSortlistCB \
  3657.                 -autoLock SetSortlistCB \
  3658.                 -cancel \
  3659.                 -cancelCallback VxEndFormCB \
  3660.                 -cancelButton CANCEL \
  3661.                 -help \
  3662.                 -title [IntlLocalizeMsg SCO_DNS_MSG_SORTLIST_TITLE] ]
  3663.     set alform [SaAlignedForm $form.align [list \
  3664.                         [list SCO_DNS_MSG_NETWORKS \
  3665.                   [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  3666.         ]]
  3667.     VtSetValues $alform -leftSide FORM -rightSide FORM
  3668.     VtSetValues [VxGetVar $alform label1] -bottomSide NONE
  3669.     set sortlistForm [VxGetVar $alform widget1]
  3670.     set subform [VtForm $sortlistForm.subform -marginHeight 0 -marginWidth 0]
  3671.     dns:createIPwidget $subform "..." SCO_DNS_MSG_NEW_ADDRESS_SH \
  3672.         "dns:checkIPWidgetCB $subform" \
  3673.         AddServerToListCB
  3674.     set butrc [VtRowColumn $sortlistForm.buts \
  3675.         -leftSide $subform -topSide FORM -vertical]
  3676.     set addBut [VtPushButton $butrc.add \
  3677.         -callback AddServerToListCB \
  3678.         -autoLock AddServerToListCB \
  3679.                 -shortHelpCallback SaShortHelpCB \
  3680.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_ADDRESS_SH]\
  3681.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  3682.     set delBut [VtPushButton $butrc.del \
  3683.         -callback DeleteServerFromListCB \
  3684.         -autoLock DeleteServerFromListCB \
  3685.                 -shortHelpCallback SaShortHelpCB \
  3686.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_ADDRESS_SH]\
  3687.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  3688.     set promote [VtPushButton $butrc.promote \
  3689.         -callback PromoteServerCB  \
  3690.         -autoLock PromoteServerCB \
  3691.                 -shortHelpCallback SaShortHelpCB \
  3692.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_PROMOTE_SH]\
  3693.         -label [IntlLocalizeMsg SCO_DNS_MSG_PROMOTE] ]
  3694.     set demote [VtPushButton $butrc.demote \
  3695.         -callback DemoteServerCB \
  3696.         -autoLock DemoteServerCB \
  3697.                 -shortHelpCallback SaShortHelpCB \
  3698.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEMOTE_SH]\
  3699.         -label [IntlLocalizeMsg SCO_DNS_MSG_DEMOTE] ]
  3700.     set serverList [VtList $sortlistForm.list \
  3701.         -columns 15 -topSide $subform \
  3702.         -itemList $sortlist \
  3703.         -callback SetDelServerButSensitivityCB \
  3704.         -shortHelpCallback SaShortHelpCB \
  3705.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_SORT_LIST_SH] \
  3706.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  3707.     set sep [VtSeparator $form.sep1 -horizontal \
  3708.         -leftSide FORM -rightSide FORM \
  3709.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  3710.         -topSide $alform -CHARM_topOffset 1]
  3711.     set status [SaStatusBar $form.status 0]
  3712.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  3713.     VxSetVar $form newServer   $subform
  3714.     VxSetVar $form addBut      $addBut
  3715.     VxSetVar $form delBut      $delBut
  3716.     VxSetVar $form promote     $promote
  3717.     VxSetVar $form demote      $demote
  3718.     VxSetVar $form serverList  $serverList
  3719.     SetAddServerButSensitivityCB [list [list dialog $form]]
  3720.     SetDelServerButSensitivityCB [list [list dialog $form]]
  3721.     VtShow $form
  3722.     VtUnLock
  3723. }
  3724. proc SetFwdersCB {cbs} {
  3725.     keylget cbs dialog dialog
  3726.     set slaveW     [VxGetVar $dialog slave]
  3727.     set serverList [VxGetVar $dialog serverList]
  3728.     set slave      [VxGetShortName [VtGetValues $slaveW -value]]
  3729.     set forwarders [VtListGetItem $serverList -all]
  3730.     if [cequal $slave yes] {
  3731.     if [lempty $forwarders] {
  3732.         ErrorPush errStack 0 SCO_DNS_ERR_NO_FORWARDERS
  3733.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3734.             VtUnLock
  3735.             return 0
  3736.     }
  3737.     keylset attrs slave 1
  3738.     } else {
  3739.     keylset attrs slave 0
  3740.     }
  3741.     keylset attrs dNSForwarders $forwarders
  3742.     set objcall [list ObjectReplace {sco dNSystem} [SetInstance "NULL"] $attrs]
  3743.     set bmipResponse [SaMakeObjectCall $objcall]
  3744.     set firstBmip [lindex $bmipResponse 0]
  3745.     set errStack [BmipResponseErrorStack firstBmip]
  3746.     if { ![lempty $errStack] } {
  3747.         ErrorPush errStack 0 SCO_DNS_ERR_SAVE_FORWARDERS
  3748.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3749.         VtUnLock
  3750.     return
  3751.     }
  3752.     VxEndFormCB $cbs
  3753.     VtUnLock
  3754. }
  3755. proc GetFwdersCB {cbs} {
  3756.     keylget cbs dialog dialog
  3757.     set objcall [list ObjectGet {sco dNSystem} [SetInstance "NULL"] \
  3758.               {slave dNSForwarders}]
  3759.     set bmipResponse [SaMakeObjectCall $objcall]
  3760.     set firstBmip [lindex $bmipResponse 0]
  3761.     set errStack [BmipResponseErrorStack firstBmip]
  3762.     if { ![lempty $errStack] } {
  3763.         ErrorPush errStack 0 SCO_DNS_ERR_GET_FORWARDERS
  3764.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3765.         VtUnLock
  3766.         return
  3767.     } else {
  3768.     set attrs [BmipResponseAttrValList firstBmip]
  3769.     set slavemode  [keylget attrs slave]
  3770.     set forwarders [keylget attrs dNSForwarders]
  3771.     }
  3772.     set form [VtFormDialog $dialog.forwarders \
  3773.                 -ok \
  3774.                 -okCallback SetFwdersCB \
  3775.                 -autoLock SetFwdersCB \
  3776.                 -cancel \
  3777.                 -cancelCallback VxEndFormCB \
  3778.                 -cancelButton CANCEL \
  3779.                 -help \
  3780.                 -title [IntlLocalizeMsg SCO_DNS_MSG_FWDERS_TITLE] ]
  3781.     set alform [SaAlignedForm $form.align [list \
  3782.         [list SCO_DNS_MSG_SLAVE_MODE \
  3783.             [list VtRadioBox -horizontal ]] \
  3784.         [list SCO_DNS_MSG_FWDERS \
  3785.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  3786.         ]]
  3787.     VtSetValues $alform -leftSide FORM -rightSide FORM
  3788.     VtSetValues [VxGetVar $alform label2] -bottomSide NONE
  3789.     set slave [VxGetVar $alform widget1]
  3790.     set yes [VtToggleButton $slave.yes \
  3791.         -label [IntlLocalizeMsg SCO_DNS_MSG_YES] \
  3792.             -shortHelpCallback SaShortHelpCB \
  3793.             -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_SLAVE_YES_SH]]
  3794.     set no [VtToggleButton $slave.no \
  3795.         -label [IntlLocalizeMsg SCO_DNS_MSG_NO] \
  3796.             -shortHelpCallback SaShortHelpCB \
  3797.             -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_SLAVE_NO_SH]]
  3798.     if {$slavemode} {
  3799.     VtSetValues $slave -value $yes
  3800.     } else {
  3801.     VtSetValues $slave -value $no
  3802.     }
  3803.     set fwdForm [VxGetVar $alform widget2]
  3804.     set subform [VtForm $fwdForm.subform -marginHeight 0 -marginWidth 0]
  3805.     dns:createIPwidget $subform "..." SCO_DNS_MSG_NEW_FWDERS_SH \
  3806.         "dns:checkIPWidgetCB $subform" \
  3807.         AddServerToListCB
  3808.     set butrc [VtRowColumn $fwdForm.buts \
  3809.         -leftSide $subform -topSide FORM -vertical]
  3810.     set addBut [VtPushButton $butrc.add \
  3811.         -callback AddServerToListCB \
  3812.         -autoLock AddServerToListCB \
  3813.                 -shortHelpCallback SaShortHelpCB \
  3814.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_FWDERS_SH]\
  3815.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  3816.     set delBut [VtPushButton $butrc.del \
  3817.         -callback "DeleteEntryFromListCB serverList delBut" \
  3818.         -autoLock DeleteEntryFromListCB \
  3819.                 -shortHelpCallback SaShortHelpCB \
  3820.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_FWDERS_SH]\
  3821.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  3822.     set serverList [VtList $fwdForm.list \
  3823.         -columns 15 -topSide $subform \
  3824.         -itemList $forwarders \
  3825.         -callback "SetDelButSensitivityCB serverList delBut" \
  3826.         -shortHelpCallback SaShortHelpCB \
  3827.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_FWDERS_LIST_SH] \
  3828.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  3829.     set sep [VtSeparator $form.sep1 -horizontal \
  3830.         -leftSide FORM -rightSide FORM \
  3831.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  3832.         -topSide $alform -CHARM_topOffset 1]
  3833.     set status [SaStatusBar $form.status 0]
  3834.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  3835.     VxSetVar $form slave      $slave
  3836.     VxSetVar $form newServer  $subform
  3837.     VxSetVar $form addBut     $addBut
  3838.     VxSetVar $form delBut     $delBut
  3839.     VxSetVar $form serverList $serverList
  3840.     dns:SetAddButSensitivityCB newServer addBut serverList delBut [list [list dialog $form]]
  3841.     SetDelButSensitivityCB serverList delBut [list [list dialog $form]]
  3842.     VtShow $form
  3843.     VtUnLock
  3844. }
  3845. proc SetXfernetsCB {cbs} {
  3846.     keylget cbs dialog dialog
  3847.     set serverList [VxGetVar $dialog serverList]
  3848.     set xfernets [VtListGetItem $serverList -all]
  3849.     keylset attrs dNSXfrnets $xfernets
  3850.     set objcall [list ObjectReplace {sco dNSystem} [SetInstance "NULL"] $attrs]
  3851.     set bmipResponse [SaMakeObjectCall $objcall]
  3852.     set firstBmip [lindex $bmipResponse 0]
  3853.     set errStack [BmipResponseErrorStack firstBmip]
  3854.     if { ![lempty $errStack] } {
  3855.         ErrorPush errStack 0 SCO_DNS_ERR_SAVE_XFRNETS
  3856.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3857.         VtUnLock
  3858.     return
  3859.     }
  3860.     VxEndFormCB $cbs
  3861.     VtUnLock
  3862. }
  3863. proc GetXfernetsCB {cbs} {
  3864.     keylget cbs dialog dialog
  3865.     set objcall [list ObjectGet {sco dNSystem} [SetInstance "NULL"] dNSXfrnets]
  3866.     set bmipResponse [SaMakeObjectCall $objcall]
  3867.     set firstBmip [lindex $bmipResponse 0]
  3868.     set errStack [BmipResponseErrorStack firstBmip]
  3869.     if { ![lempty $errStack] } {
  3870.         ErrorPush errStack 0 SCO_DNS_ERR_GET_XFRNETS
  3871.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3872.         VtUnLock
  3873.         return
  3874.     } else {
  3875.     set attrs [BmipResponseAttrValList firstBmip]
  3876.     set xfernets  [keylget attrs dNSXfrnets]
  3877.     }
  3878.     set form [VtFormDialog $dialog.xfernets \
  3879.                 -ok \
  3880.                 -okCallback SetXfernetsCB \
  3881.                 -autoLock SetXfernetsCB \
  3882.                 -cancel \
  3883.                 -cancelCallback VxEndFormCB \
  3884.                 -cancelButton CANCEL \
  3885.                 -help \
  3886.                 -title [IntlLocalizeMsg SCO_DNS_MSG_XFERNETS_TITLE] ]
  3887.     set alform [SaAlignedForm $form.align [list \
  3888.         [list SCO_DNS_MSG_NETWORKS \
  3889.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  3890.         ]]
  3891.     VtSetValues $alform -leftSide FORM -rightSide FORM
  3892.     VtSetValues [VxGetVar $alform label1] -bottomSide NONE
  3893.     set xfernetForm [VxGetVar $alform widget1]
  3894.     set subform [VtForm $xfernetForm.subform -marginHeight 0 -marginWidth 0]
  3895.     dns:createIPwidget $subform "..." SCO_DNS_MSG_NEW_NETWORK_SH_ \
  3896.         "dns:checkIPWidgetCB $subform" \
  3897.         AddServerToListCB
  3898.     set butrc [VtRowColumn $xfernetForm.buts \
  3899.         -leftSide $subform -topSide FORM -vertical]
  3900.     set addBut [VtPushButton $butrc.add \
  3901.         -callback AddServerToListCB \
  3902.         -autoLock AddServerToListCB \
  3903.                 -shortHelpCallback SaShortHelpCB \
  3904.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_NETWORK_SH]\
  3905.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  3906.     set delBut [VtPushButton $butrc.del \
  3907.         -callback "DeleteEntryFromListCB serverList delBut" \
  3908.         -autoLock DeleteEntryFromListCB \
  3909.                 -shortHelpCallback SaShortHelpCB \
  3910.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_NETWORK_SH]\
  3911.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  3912.     set serverList [VtList $xfernetForm.list \
  3913.         -columns 15 -topSide $subform \
  3914.         -itemList $xfernets \
  3915.         -callback "SetDelButSensitivityCB serverList delBut" \
  3916.         -shortHelpCallback SaShortHelpCB \
  3917.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_NETWORK_LIST_SH_] \
  3918.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  3919.     set sep [VtSeparator $form.sep1 -horizontal \
  3920.         -leftSide FORM -rightSide FORM \
  3921.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  3922.         -topSide $alform -CHARM_topOffset 1]
  3923.     set status [SaStatusBar $form.status 0]
  3924.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  3925.     VxSetVar $form newServer   $subform
  3926.     VxSetVar $form addBut      $addBut
  3927.     VxSetVar $form delBut      $delBut
  3928.     VxSetVar $form serverList  $serverList
  3929.     dns:SetAddButSensitivityCB newServer addBut serverList delBut [list [list dialog $form]]
  3930.     SetDelButSensitivityCB serverList delBut [list [list dialog $form]]
  3931.     VtShow $form
  3932.     VtUnLock
  3933. }
  3934. proc SetBogusnsCB {cbs} {
  3935.     keylget cbs dialog dialog
  3936.     set serverList [VxGetVar $dialog serverList]
  3937.     set bogusns [VtListGetItem $serverList -all]
  3938.     keylset attrs dNSBogusns $bogusns
  3939.     set objcall [list ObjectReplace {sco dNSystem} [SetInstance "NULL"] $attrs]
  3940.     set bmipResponse [SaMakeObjectCall $objcall]
  3941.     set firstBmip [lindex $bmipResponse 0]
  3942.     set errStack [BmipResponseErrorStack firstBmip]
  3943.     if { ![lempty $errStack] } {
  3944.         ErrorPush errStack 0 SCO_DNS_ERR_SAVE_BOGUSNS
  3945.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3946.         VtUnLock
  3947.     return
  3948.     }
  3949.     VxEndFormCB $cbs
  3950.     VtUnLock
  3951. }
  3952. proc GetBogusnsCB {cbs} {
  3953.     keylget cbs dialog dialog
  3954.     set objcall [list ObjectGet {sco dNSystem} [SetInstance "NULL"] dNSBogusns]
  3955.     set bmipResponse [SaMakeObjectCall $objcall]
  3956.     set firstBmip [lindex $bmipResponse 0]
  3957.     set errStack [BmipResponseErrorStack firstBmip]
  3958.     if { ![lempty $errStack] } {
  3959.         ErrorPush errStack 0 SCO_DNS_ERR_GET_BOGUSNS
  3960.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  3961.         VtUnLock
  3962.         return
  3963.     } else {
  3964.     set attrs [BmipResponseAttrValList firstBmip]
  3965.     set bogusns  [keylget attrs dNSBogusns]
  3966.     }
  3967.     set form [VtFormDialog $dialog.bogusns \
  3968.                 -ok \
  3969.                 -okCallback SetBogusnsCB \
  3970.                 -autoLock SetBogusnsCB \
  3971.                 -cancel \
  3972.                 -cancelCallback VxEndFormCB \
  3973.                 -cancelButton CANCEL \
  3974.                 -help \
  3975.                 -title [IntlLocalizeMsg SCO_DNS_MSG_BOGUSNS_TITLE] ]
  3976.     set alform [SaAlignedForm $form.align [list \
  3977.         [list SCO_DNS_MSG_BOGUSNAMESRVS \
  3978.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  3979.         ]]
  3980.     VtSetValues $alform -leftSide FORM -rightSide FORM
  3981.     VtSetValues [VxGetVar $alform label1] -bottomSide NONE
  3982.     set bogusnss [VxGetVar $alform widget1]
  3983.     set subform [VtForm $bogusnss.subform -marginHeight 0 -marginWidth 0]
  3984.     dns:createIPwidget $subform "..." SCO_DNS_MSG_NEW_BOGUSNS_SH \
  3985.         "dns:checkIPWidgetCB $subform" \
  3986.         AddServerToListCB
  3987.     set butrc [VtRowColumn $bogusnss.buts \
  3988.         -leftSide $subform -topSide FORM -vertical]
  3989.     set addBut [VtPushButton $butrc.add \
  3990.         -callback AddServerToListCB \
  3991.         -autoLock AddServerToListCB \
  3992.                 -shortHelpCallback SaShortHelpCB \
  3993.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_BOGUSNS_SH]\
  3994.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  3995.     set delBut [VtPushButton $butrc.del \
  3996.         -callback "DeleteEntryFromListCB serverList delBut" \
  3997.         -autoLock DeleteEntryFromListCB \
  3998.                 -shortHelpCallback SaShortHelpCB \
  3999.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_BOGUSNS_SH]\
  4000.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  4001.     set serverList [VtList $bogusnss.list \
  4002.         -columns 15 -topSide $subform \
  4003.         -itemList $bogusns \
  4004.         -callback "SetDelButSensitivityCB serverList delBut" \
  4005.         -shortHelpCallback SaShortHelpCB \
  4006.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_BOGUSNS_LIST_SH] \
  4007.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  4008.     set sep [VtSeparator $form.sep1 -horizontal \
  4009.         -leftSide FORM -rightSide FORM \
  4010.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  4011.         -topSide $alform -CHARM_topOffset 1]
  4012.     set status [SaStatusBar $form.status 0]
  4013.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  4014.     VxSetVar $form newServer   $subform
  4015.     VxSetVar $form addBut      $addBut
  4016.     VxSetVar $form delBut      $delBut
  4017.     VxSetVar $form serverList  $serverList
  4018.     dns:SetAddButSensitivityCB newServer addBut serverList delBut [list [list dialog $form]]
  4019.     SetDelButSensitivityCB serverList delBut [list [list dialog $form]]
  4020.     VtShow $form
  4021.     VtUnLock
  4022. }
  4023. proc GetCommonOctects {{networks {}}} {
  4024.     if {[llength $networks] == 1} {
  4025.     return $networks
  4026.     } 
  4027.     set i 0
  4028.     foreach network $networks {
  4029.     set i 0
  4030.     foreach octect [split $network "."] {
  4031.         lappend octects($i) $octect
  4032.         incr i
  4033.     }
  4034.     }
  4035.     set network {}
  4036.     loop j 0 $i {
  4037.     set octect [lrmdups $octects($j)]
  4038.     if {[llength $octect] > 1} {
  4039.         break
  4040.     }
  4041.     append network "${octect}."
  4042.     }
  4043.     return $network
  4044. }
  4045. proc DoAddZoneCB {cbs} {
  4046.     global ZONES NETWORKS DEFAULTS managedHost tempSOA tempNS Main
  4047.     keylget cbs dialog dialog
  4048.     set nameW       [VxGetVar $dialog name]
  4049.     set typeW       [VxGetVar $dialog type]
  4050.     set networkList [VxGetVar $dialog serverList]
  4051.     set parent      [VxGetVar $dialog parent]
  4052.     set name     [VtGetValues $nameW -value]
  4053.     set type     [VtGetValues $typeW -value]
  4054.     set networks [VtListGetItem $networkList -all]
  4055.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_CACHING]] {
  4056.     set name [IntlLocalizeMsg SCO_DNS_MSG_CACHING]
  4057.     browser:AddEntry 0 COLLAPSED [list "$name" {} "$name"] {}
  4058.     SaveConfig caching
  4059.     SetSensitivityCB [list [list dialog $dialog]]
  4060.     VxEndFormCB [list [list dialog $dialog]]
  4061.     if [ErrorCatch errStack 0 "CreateCache" {}] {
  4062.         SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  4063.     }
  4064.     VtUnLock
  4065.     return
  4066.     } else {
  4067.     if {[llength $name] == 0} {
  4068.             ErrorPush errStack 0 SCO_DNS_ERR_NO_ZONE_NAME
  4069.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4070.             VtUnLock
  4071.             return
  4072.     }
  4073.     if {[llength $networks] == 0} {
  4074.         ErrorPush errStack 0 SCO_DNS_ERR_NO_NETWORKS
  4075.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4076.         VtUnLock
  4077.         return
  4078.     }
  4079.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  4080.         if [ErrorCatch errStack 0 "CheckSoa 1 \
  4081.             \"[keylget tempSOA pic]\" \
  4082.             \"[keylget tempSOA refresh]\" \
  4083.             \"[keylget tempSOA retry]\" \
  4084.             \"[keylget tempSOA expire]\" \
  4085.             \"[keylget tempSOA ttl]\"" {}] {
  4086.             ErrorPush errStack 0 SCO_DNS_ERR_FIX_SOA
  4087.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4088.             VtUnLock
  4089.             return
  4090.         }
  4091.         regsub "@" [keylget tempSOA pic] "\." pic
  4092.         keylset tempSOA pic $pic
  4093.         if {[llength $tempNS] == 0} {
  4094.         NameserversCB ADD_ZONE $cbs
  4095.         return
  4096.         }
  4097.     } else {
  4098.         if {[llength $tempNS] == 0} {
  4099.                 ErrorPush errStack 0 SCO_DNS_ERR_NO_SERVERS
  4100.                 SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4101.                 VtUnLock
  4102.                 return
  4103.         }
  4104.     }
  4105.     }
  4106.     CompleteAddZone $parent $dialog $name $type $networks
  4107. }
  4108. proc CompleteAddZone {parent dialog name type networks {cbs {}}} {
  4109.     global ZONES NETWORKS managedHost 
  4110.     global BROWSER ZONE
  4111.     if {[cequal "." [cindex $name end]]} {
  4112.     set name [crange $name 0 "end -1"]
  4113.     }
  4114.     set recData {}
  4115.     keylset recData type   "NS"
  4116.     keylset recData name   $name
  4117.     set optData {}
  4118.     lappend optData [list "nameserver"  "$managedHost"]
  4119.     keylset recData data $optData
  4120.     lappend tempNs $recData
  4121.     if [ErrorCatch errStack 0 "CreateZone $type $name [list $networks]" {}] {
  4122.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4123.            VtUnLock
  4124.            return
  4125.     }
  4126.     set attrs {}
  4127.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  4128.     keylset attrs txtList   [AddZoneTxt $name $dialog]
  4129.     keylset attrs rpList    [AddZoneRp $name $dialog]
  4130.     keylset attrs mxList    [AddZoneMx $name $dialog]
  4131.     keylset attrs hinfoList [AddZoneHinfo $name $dialog]
  4132.     }
  4133.     set ZONES($name) [list $type $networks] 
  4134.     keylset NETWORKS $name "[GetCommonOctects $networks] $networks"
  4135.     set zoneNets {}
  4136.     foreach zoneNet $networks {
  4137.     lappend zoneNets [list [IntlLocalizeMsg SCO_DNS_MSG_NETWORK] \
  4138.             "$zoneNet"]
  4139.     }
  4140.     set recData {}
  4141.     keylset recData type    ZONE
  4142.     keylset recData name    $name
  4143.     keylset attrs zoneType    $type
  4144.     keylset attrs networks    $networks
  4145.     keylset recData data    $attrs
  4146.     DisplayRecord ZONE $recData 0 {} 1
  4147.     VtDrawnListSelectItem $BROWSER -position 0 
  4148.     set pos [lindex [VtDrawnListGetSelectedItem $BROWSER -byPositionList] 0]
  4149.     set parent [browser:FindItemParent $pos]
  4150.     VtDrawnListSelectItem $BROWSER -position $parent
  4151.     SaDrawnListShowSelectedItem $BROWSER
  4152.     set ZONE $name                ;# set to new ZONE
  4153.     SetSensitivityCB [list [list dialog $dialog]]
  4154.     VxEndFormCB [list [list dialog $dialog]]
  4155.     VtUnLock
  4156. }
  4157. proc SetNameserversCB {cbs} {
  4158.     global tempNS
  4159.     keylget cbs dialog dialog
  4160.     set serverList [VxGetVar $dialog serverList]
  4161.     set parent     [VxGetVar $dialog parent]
  4162.     set typeW      [VxGetVar $parent type]
  4163.     set nameW      [VxGetVar $parent name]
  4164.     set type    [VtGetValues $typeW -value]
  4165.     set name    [VtGetValues $nameW -value]
  4166.     if {$type != [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]} {
  4167.         set servers [VtListGetItem $serverList -all]
  4168.         if {[llength $servers] == 0} {
  4169.                 ErrorPush errStack 0 SCO_DNS_ERR_NO_SERVERS
  4170.                 SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4171.                 VtUnLock
  4172.                 return
  4173.         }
  4174.     } else {
  4175.         set servers [VtDrawnListGetItem $serverList -all]
  4176.     }
  4177.     set tempNS {}
  4178.     foreach server $servers {
  4179.         set recData {}
  4180.         keylset recData type   "NS"
  4181.         keylset recData name   $name
  4182.         set optData {}
  4183.     if {[llength $server] > 1} {
  4184.             lappend optData [list "nameserver" [lindex $server 0]]
  4185.             lappend optData [list "ipaddr"     [lindex $server 1]]
  4186.     } else {
  4187.             lappend optData [list "nameserver" $server]
  4188.         }
  4189.         keylset recData data $optData
  4190.     lappend tempNS $recData
  4191.     }
  4192.     VxEndFormCB $cbs
  4193.     VtUnLock
  4194. }
  4195. proc NameserversCB {action cbs} {
  4196.     keylget cbs dialog dialog
  4197.     set nameW [VxGetVar $dialog name]
  4198.     set typeW [VxGetVar $dialog type]
  4199.     set name  [VtGetValues $nameW -value]
  4200.     set type  [VtGetValues $typeW -value]
  4201.     if {[llength $name] == 0} {
  4202.         ErrorPush errStack 0 SCO_DNS_ERR_NO_ZONE_NAME
  4203.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4204.         VtUnLock
  4205.         return
  4206.     }
  4207.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  4208.     GetNsCB $action $cbs
  4209.     } else {
  4210.     GetAdditionalServersCB $cbs
  4211.     }
  4212.     VtUnLock
  4213. }
  4214. proc CheckNs {name ipaddr} {
  4215.     if {[llength $name] == 0} {
  4216.         ErrorPush {} 1 SCO_DNS_ERR_NO_SERVER_NAME
  4217.     }
  4218.     if {[regexp -- {[^A-Za-z0-9.-]} $name inval]} {
  4219.     ctoken name $inval
  4220.     ErrorPush {} 1 SCO_DNS_ERR_CHAR1 [list $name]
  4221.     }
  4222.     if [cequal $ipaddr "..."] {
  4223.         ErrorPush {} 1 SCO_DNS_ERR_NO_SERVER_IPADDR
  4224.     }
  4225.     if {! [checkIPaddr $ipaddr]} {
  4226.        ErrorPush {} 1 SCO_DNS_ERR_BAD_IP_ADDR1
  4227.     }
  4228. }
  4229. proc DoAddNameserverCB {cbs} {
  4230.     keylget cbs dialog dialog
  4231.     set nameW    [VxGetVar $dialog name]
  4232.     set ipaddrW    [VxGetVar $dialog ipaddr]
  4233.     set name   [VtGetValues $nameW -value]
  4234.     set ipaddr [getIPwidgetValue $ipaddrW]
  4235.     if [ErrorCatch errStack 0 "CheckNs \"$name\" \"$ipaddr\"" {}] {
  4236.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4237.         VtUnLock
  4238.         return
  4239.     }
  4240.     if [FQDN $name] {
  4241.     set warnform [VtWarningDialog $dialog.warn \
  4242.                 -ok -okCallback "CompleteAddNameserver $dialog $name $ipaddr" \
  4243.                 -autoLock CompleteAddNameserver \
  4244.         -cancel \
  4245.                 -message [IntlLocalizeMsg SCO_DNS_ERR_BAD_HOSTNAME] \
  4246.               ]
  4247.         VtShow $warnform
  4248.     VtUnLock
  4249.     return
  4250.     } 
  4251.     CompleteAddNameserver $dialog $name $ipaddr
  4252. }
  4253. proc CompleteAddNameserver {dialog name ipaddr {cbs {}}} {
  4254.     set parent     [VxGetVar $dialog parent]
  4255.     set serverList [VxGetVar $parent serverList]
  4256.     VtDrawnListAddItem $serverList -position 0 -fieldList [list $name $ipaddr]
  4257.     VtDrawnListSelectItem $serverList -position 0
  4258.     SaDrawnListShowSelectedItem $serverList
  4259.     SelectServerCB [list [list dialog $parent]]
  4260.     VxEndFormCB [list [list dialog $dialog]]
  4261.     VtUnLock
  4262. }
  4263. proc AddNameserverCB {cbs} {
  4264.     global tempNS
  4265.     keylget cbs dialog dialog
  4266.     set form [VtFormDialog $dialog.nameservers \
  4267.                 -ok \
  4268.                 -okCallback DoAddNameserverCB \
  4269.                 -autoLock DoAddNameserverCB \
  4270.                 -cancel \
  4271.                 -cancelCallback VxEndFormCB \
  4272.                 -cancelButton CANCEL \
  4273.                 -help \
  4274.                 -title [IntlLocalizeMsg SCO_DNS_MSG_ADD_NS_TITLE] ]
  4275.     set alform [SaAlignedForm $form.align [list \
  4276.         [list SCO_DNS_MSG_SERVER_NAME \
  4277.             [list VtText \
  4278.                     -shortHelpCallback SaShortHelpCB \
  4279.                     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_SERVER_NAME_SH] ]] \
  4280.         [list SCO_DNS_MSG_SERVER_IP \
  4281.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  4282.         ]]
  4283.     set ipaddrW [VxGetVar $alform widget2]
  4284.     createIPwidget $ipaddrW "..." SCO_DNS_MSG_SERVER_IP_SH 
  4285.     set sep [VtSeparator $form.sep1 -horizontal \
  4286.         -leftSide FORM -rightSide FORM \
  4287.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  4288.         -topSide $alform -CHARM_topOffset 1 -MOTIF_topOffset 20]
  4289.     set status [SaStatusBar $form.status 0]
  4290.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  4291.     VxSetVar $form parent     $dialog
  4292.     VxSetVar $form name       [VxGetVar $alform widget1]
  4293.     VxSetVar $form ipaddr     $ipaddrW
  4294.     VtShow $form
  4295.     VtUnLock
  4296. }
  4297. proc DoModNameserverCB {cbs} {
  4298.     keylget cbs dialog dialog
  4299.     set nameW      [VxGetVar $dialog name]
  4300.     set ipaddrW    [VxGetVar $dialog ipaddr]
  4301.     set name   [VtGetValues $nameW -value]
  4302.     set ipaddr [getIPwidgetValue $ipaddrW]
  4303.     if [ErrorCatch errStack 0 "CheckNs \"$name\" \"$ipaddr\"" {}] {
  4304.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4305.         VtUnLock
  4306.         return
  4307.     }
  4308.     if [FQDN $name] {
  4309.     set warnform [VtWarningDialog $dialog.warn \
  4310.                 -ok -okCallback "CompleteModNameserver $dialog $name $ipaddr" \
  4311.                 -autoLock CompleteModNameserver \
  4312.         -cancel \
  4313.                 -message [IntlLocalizeMsg SCO_DNS_ERR_BAD_HOSTNAME] \
  4314.               ]
  4315.         VtShow $warnform
  4316.     VtUnLock
  4317.     return
  4318.     } 
  4319.     CompleteModNameserver $dialog $name $ipaddr
  4320. }
  4321. proc CompleteModNameserver {dialog name ipaddr {cbs {}}} {
  4322.     set parent     [VxGetVar $dialog parent]
  4323.     set serverList [VxGetVar $parent serverList]
  4324.     set pos [lindex [VtDrawnListGetSelectedItem $serverList -byPositionList] 0]
  4325.     VtDrawnListDeleteItem $serverList -position $pos 
  4326.     VtDrawnListAddItem $serverList -position $pos -fieldList [list $name $ipaddr]
  4327.     VtDrawnListSelectItem $serverList -position $pos
  4328.     SaDrawnListShowSelectedItem $serverList
  4329.     SelectServerCB [list [list dialog $parent]]
  4330.     VxEndFormCB [list [list dialog $dialog]]
  4331.     VtUnLock
  4332. }
  4333. proc ModNameserverCB {cbs} {
  4334.     global tempNS
  4335.     keylget cbs dialog dialog
  4336.     set form [VtFormDialog $dialog.nameservers \
  4337.                 -ok \
  4338.                 -okCallback DoModNameserverCB \
  4339.                 -autoLock DoModNameserverCB \
  4340.                 -cancel \
  4341.                 -cancelCallback VxEndFormCB \
  4342.                 -cancelButton CANCEL \
  4343.                 -help \
  4344.                 -title [IntlLocalizeMsg SCO_DNS_MSG_MOD_NS_TITLE] ]
  4345.     set alform [SaAlignedForm $form.align [list \
  4346.         [list SCO_DNS_MSG_SERVER_NAME \
  4347.             [list VtText \
  4348.                     -shortHelpCallback SaShortHelpCB \
  4349.                     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_SERVER_NAME_SH] ]] \
  4350.         [list SCO_DNS_MSG_SERVER_IP \
  4351.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  4352.         ]]
  4353.     set ipaddrW [VxGetVar $alform widget2]
  4354.     createIPwidget $ipaddrW "..." SCO_DNS_MSG_SERVER_IP_SH 
  4355.     set sep [VtSeparator $form.sep1 -horizontal \
  4356.         -leftSide FORM -rightSide FORM \
  4357.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  4358.         -topSide $alform -CHARM_topOffset 1 -MOTIF_topOffset 20]
  4359.     set status [SaStatusBar $form.status 0]
  4360.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  4361.     VxSetVar $form parent     $dialog
  4362.     VxSetVar $form name       [VxGetVar $alform widget1]
  4363.     VxSetVar $form ipaddr     $ipaddrW
  4364.     set serverList [VxGetVar $dialog serverList]
  4365.     set selected [lindex [VtDrawnListGetSelectedItem $serverList \
  4366.                 -byRecordList] 0]
  4367.     VtSetValues [VxGetVar $alform widget1] -value [lindex $selected 0]
  4368.     setIPwidgetValue $ipaddrW [lindex $selected 1]
  4369.     VtShow $form
  4370.     VtUnLock
  4371. }
  4372. proc DoDelNameserverCB {parent cbs} {
  4373.     set serverList [VxGetVar $parent serverList]
  4374.     set pos [lindex [VtDrawnListGetSelectedItem $serverList -byPositionList] 0]
  4375.     VtDrawnListDeleteItem $serverList -position $pos 
  4376.     if {! [catch {VtDrawnListSelectItem $serverList -position $pos}]} {
  4377.         SaDrawnListShowSelectedItem $serverList
  4378.     }
  4379.     SelectServerCB [list [list dialog $parent]]
  4380. }
  4381. proc DelNameserverCB { cbs } {
  4382.     keylget cbs dialog dialog
  4383.     set YN [VtQuestionDialog $dialog.YN \
  4384.         -okCallback "DoDelNameserverCB $dialog" \
  4385.         -autoLock DoDelNameserverCB \
  4386.         -cancel \
  4387.         -message [IntlLocalizeMsg SCO_DNS_MSG_DELETE_ENTRY] ]
  4388.     VtShow $YN
  4389.     VtUnLock
  4390. }
  4391. proc SelectServerCB {cbs} {
  4392.     keylget cbs dialog dialog
  4393.     set serverList [VxGetVar $dialog serverList]
  4394.     set modify     [VxGetVar $dialog modBut]
  4395.     set delete     [VxGetVar $dialog delBut]
  4396.     set selected [VtDrawnListGetSelectedItem $serverList]
  4397.     if {$selected == 0} {
  4398.         VtSetSensitive $modify 0
  4399.         VtSetSensitive $delete 0
  4400.     } else {
  4401.         VtSetSensitive $modify 1
  4402.         VtSetSensitive $delete 1
  4403.     }
  4404.     VtUnLock -once
  4405. }
  4406. proc GetNsCB {action cbs} {
  4407.     global managedHost
  4408.     global tempNS
  4409.     keylget cbs dialog dialog
  4410.     set form [VtFormDialog $dialog.nameservers \
  4411.                 -ok -cancel -help \
  4412.                 -okCallback SetNameserversCB \
  4413.                 -autoLock SetNameserversCB \
  4414.                 -cancelCallback VxEndFormCB \
  4415.                 -cancelButton CANCEL \
  4416.                 -title [IntlLocalizeMsg SCO_DNS_MSG_NS_TITLE] ]
  4417.     set butrc [VtRowColumn $form.buts \
  4418.         -CHARM_spacing 1 \
  4419.         -leftSide NONE -topSide FORM \
  4420.         -rightSide FORM -vertical]
  4421.     set addBut [VtPushButton $butrc.add \
  4422.     -callback AddNameserverCB \
  4423.     -autoLock AddNameserverCB \
  4424.         -shortHelpCallback SaShortHelpCB \
  4425.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_NAMESERVER_SH]\
  4426.     -label [IntlLocalizeMsg SCO_DNS_MSG_ADD_ZONE] ]
  4427.     set modBut [VtPushButton $butrc.mod \
  4428.     -callback ModNameserverCB \
  4429.     -autoLock ModNameserverCB \
  4430.         -shortHelpCallback SaShortHelpCB \
  4431.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_MOD_SERVER_SH]\
  4432.     -label [IntlLocalizeMsg SCO_DNS_MSG_MOD_ZONE] ]
  4433.     set delBut [VtPushButton $butrc.del \
  4434.     -callback DelNameserverCB \
  4435.     -autoLock DelNameserverCB \
  4436.         -shortHelpCallback SaShortHelpCB \
  4437.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_SERVER_SH]\
  4438.     -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  4439.     set serverList [VtDrawnList $form.list \
  4440.         -rows 4 -columns 35 \
  4441.         -labelList [IntlLocalizeMsg SCO_DNS_MSG_SERVERS_HDR] \
  4442.         -labelFormatList {{STRING 20} {STRING 15}} \
  4443.         -callback SelectServerCB \
  4444.         -defaultCallback ModNameserverCBCB \
  4445.         -autoLock {SelectServerCB ModNameserverCBCB} \
  4446.         -formatList {{STRING 20} {STRING 15}} \
  4447.         -leftSide FORM -topSide FORM \
  4448.         -rightSide $butrc \
  4449.         -shortHelpCallback SaShortHelpCB \
  4450.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_SERVER_LIST_SH] ]
  4451.     set sep [VtSeparator $form.sep1 -horizontal \
  4452.         -leftSide FORM -rightSide FORM \
  4453.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  4454.         -topSide $serverList -CHARM_topOffset 1 -MOTIF_topOffset 20]
  4455.     set status [SaStatusBar $form.status 0]
  4456.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  4457.     VxSetVar $form parent     $dialog
  4458.     VxSetVar $form addBut     $addBut
  4459.     VxSetVar $form delBut     $delBut
  4460.     VxSetVar $form modBut     $modBut
  4461.     VxSetVar $form serverList $serverList
  4462.     VtShow $form
  4463.     set servers {}
  4464.     set hostIp    {}
  4465.     switch -- $action {
  4466.     ADD_ZONE {
  4467.         set ret [net:tout /usr/sbin/host "-t A $managedHost" 3]
  4468.         foreach line [split $ret \n] {
  4469.             set hostIp [lindex $line end]
  4470.             if {[ctype digit [translit . {} $hostIp]]} {
  4471.             lappend servers [list $managedHost $hostIp]
  4472.             break
  4473.             }
  4474.         }
  4475.     }
  4476.     }
  4477.     foreach record $tempNS {
  4478.     keylget record data optData
  4479.     keylget optData nameserver nameserver
  4480.     keylget optData ipaddr ipaddr
  4481.     if ![cequal $hostIp $ipaddr] {
  4482.         lappend servers [list $nameserver $ipaddr]
  4483.     }
  4484.     }
  4485.     VtDrawnListAddItem $serverList -recordList $servers
  4486.     if {! [catch {VtDrawnListSelectItem $serverList -position 1}]} {
  4487.         SaDrawnListShowSelectedItem $serverList
  4488.     }
  4489.     SelectServerCB [list [list dialog $form]]
  4490.     VtUnLock
  4491. }
  4492. proc GetAdditionalServersCB {cbs} {
  4493.     global tempNS
  4494.     keylget cbs dialog dialog
  4495.     set form [VtFormDialog $dialog.nameservers \
  4496.                 -ok -cancel -help \
  4497.                 -okCallback SetNameserversCB \
  4498.                 -autoLock SetNameserversCB \
  4499.                 -cancelCallback VxEndFormCB \
  4500.                 -cancelButton CANCEL \
  4501.                 -title [IntlLocalizeMsg SCO_DNS_MSG_NS_TITLE] ]
  4502.     set alform [SaAlignedForm $form.align [list \
  4503.         [list SCO_DNS_MSG_ZONE_SERVERS \
  4504.               [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  4505.         ]]
  4506.     set servers [VxGetVar $alform widget1]
  4507.     VtSetValues [VxGetVar $alform label1] -bottomSide NONE
  4508.     set subform [VtForm $servers.subform -marginHeight 0 -marginWidth 0]
  4509.     dns:createIPwidget $subform "..." SCO_DNS_MSG_NEW_SERVER_SH \
  4510.     "dns:checkIPWidgetCB $subform" \
  4511.     "dns:AddEntryToListCB newServer serverList"
  4512.     set butrc [VtRowColumn $servers.buts \
  4513.     -leftSide $subform -topSide FORM -vertical]
  4514.     set addBut [VtPushButton $butrc.add \
  4515.     -callback "dns:AddEntryToListCB newServer serverList" \
  4516.     -autoLock dns:AddEntryToListCB \
  4517.         -shortHelpCallback SaShortHelpCB \
  4518.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_SERVER_SH]\
  4519.     -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  4520.     set delBut [VtPushButton $butrc.del \
  4521.     -callback "DeleteEntryFromListCB serverList delBut" \
  4522.     -autoLock DeleteEntryFromListCB \
  4523.         -shortHelpCallback SaShortHelpCB \
  4524.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_SERVER_SH]\
  4525.     -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  4526.     set serverList [VtList $servers.list \
  4527.     -columns 15 -topSide $subform \
  4528.     -callback "SetDelButSensitivityCB serverList delBut" \
  4529.     -shortHelpCallback SaShortHelpCB \
  4530.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_SERVER_LIST_SH] \
  4531.         -leftSide FORM -rightSide $butrc -bottomSide FORM]
  4532.     set sep [VtSeparator $form.sep1 -horizontal \
  4533.         -leftSide FORM -rightSide FORM \
  4534.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  4535.         -topSide $alform -CHARM_topOffset 1 -MOTIF_topOffset 20]
  4536.     set status [SaStatusBar $form.status 0]
  4537.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  4538.     VxSetVar $form parent     $dialog
  4539.     VxSetVar $form newServer  $subform
  4540.     VxSetVar $form addBut     $addBut
  4541.     VxSetVar $form delBut     $delBut
  4542.     VxSetVar $form serverList $serverList
  4543.     VtShow $form
  4544.     set servers {}
  4545.     foreach record $tempNS {
  4546.     keylget record data optData
  4547.     lappend servers [keylget optData nameserver] 
  4548.     }
  4549.     VtListSetItem $serverList -itemList $servers
  4550.     dns:SetAddButSensitivityCB newServer addBut serverList delBut [list [list dialog $form]]
  4551.     SetDelButSensitivityCB serverList delBut [list [list dialog $form]]
  4552.     VtUnLock
  4553. }
  4554. proc ChangedTypeCB {oldType cbs} {
  4555.     global tempSOA managedHost DEFAULTS
  4556.     global tempNS
  4557.     keylget cbs dialog dialog
  4558.     set typeW  [VxGetVar $dialog type]
  4559.     set soaBut [VxGetVar $dialog soaBut]
  4560.     set type [VtGetValues $typeW -value]
  4561.     if ![cequal $oldType $type] {
  4562.     set tempNS {}                ;#XXX
  4563.     }
  4564.     set name    [VxGetVar $dialog name]
  4565.     set mx    [VxGetVar $dialog mx]
  4566.     set rp    [VxGetVar $dialog rp]
  4567.     set txt    [VxGetVar $dialog txt]
  4568.     set hinfo    [VxGetVar $dialog hinfo]
  4569.     set nsBut      [VxGetVar $dialog nsBut]
  4570.     set newServer [VxGetVar $dialog newServer]
  4571.     set addBut      [VxGetVar $dialog addBut]
  4572.     set delBut      [VxGetVar $dialog delBut]
  4573.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  4574.     if [lempty $tempSOA] {
  4575.         keylset tempSOA origin  $managedHost
  4576.         keylset tempSOA pic     $DEFAULTS(SOA_pic)
  4577.         keylset tempSOA refresh $DEFAULTS(SOA_refresh)
  4578.         keylset tempSOA retry   $DEFAULTS(SOA_retry)
  4579.         keylset tempSOA expire  $DEFAULTS(SOA_expire)
  4580.         keylset tempSOA ttl     $DEFAULTS(SOA_ttl)
  4581.     }
  4582.     foreach w [list $name $newServer $soaBut $mx $rp $txt $hinfo] {
  4583.         VtSetSensitive $w 1
  4584.     }
  4585.     } elseif {[cequal $type [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY]] || \
  4586.             [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_STUB]] } {
  4587.     VtSetSensitive $newServer 1
  4588.     foreach w [list $addBut $delBut $soaBut $mx $rp $txt $hinfo] {
  4589.         VtSetSensitive $w 0
  4590.     }
  4591.     } else {
  4592.     foreach w [list $newServer $addBut $delBut $soaBut $mx $rp $txt $hinfo] {
  4593.         VtSetSensitive $w 0
  4594.     }
  4595.     }
  4596.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_CACHING]] {
  4597.     VtSetSensitive $name 0
  4598.     VtSetSensitive $nsBut 0
  4599.     } else {
  4600.     VtSetSensitive $name 1
  4601.     VtSetSensitive $nsBut 1        ;#XXX reset network IP widget and list
  4602.     }
  4603. }
  4604. proc BuildZoneForm {action form type} {
  4605.     global ZONES
  4606.     if {![info exists ZONES] || \
  4607.          [lempty [array names ZONES]]} {
  4608.     set defaultZone [IntlLocalizeMsg SCO_DNS_MSG_CACHING]
  4609.     set serverTypes [list [IntlLocalizeMsg SCO_DNS_MSG_CACHING] \
  4610.             [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY] \
  4611.             [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY] \
  4612.             [IntlLocalizeMsg SCO_DNS_MSG_STUB] ]
  4613.     } else {
  4614.     set defaultZone [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]
  4615.     set serverTypes [list [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY] \
  4616.             [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY] \
  4617.             [IntlLocalizeMsg SCO_DNS_MSG_STUB]]
  4618.     }
  4619.     set alform [SaAlignedForm $form.align [list \
  4620.     [list SCO_DNS_MSG_ZONE_TYPE \
  4621.         [list VtComboBox \
  4622.         -valueChangedCallback "ChangedTypeCB $type" \
  4623.         -readOnly -columns 15 \
  4624.         -itemList $serverTypes \
  4625.         -shortHelpCallback SaShortHelpCB \
  4626.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ZONE_TYPE_SH] ]] \
  4627.     [list SCO_DNS_MSG_ZONE_NAME \
  4628.         [list VtText -columns 18 \
  4629.         -shortHelpCallback SaShortHelpCB \
  4630.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_ZONE_NAME_SH] ]] \
  4631.     [list SCO_DNS_MSG_ZONE_NETWORKS \
  4632.         [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  4633.     ]]
  4634.     VtSetValues $alform -leftSide FORM -rightSide FORM
  4635.     VtSetValues [VxGetVar $alform form2] -MOTIF_topOffset 20 -CHARM_topOffset 0
  4636.     VtSetValues [VxGetVar $alform form3] -MOTIF_topOffset 20 -CHARM_topOffset 0
  4637.     VtSetValues [VxGetVar $alform widget1] -rightSide NONE
  4638.     VtSetValues [VxGetVar $alform widget2] -rightSide NONE
  4639.     VtSetValues [VxGetVar $alform label3] -bottomSide NONE
  4640.     set networks [VxGetVar $alform widget3]
  4641.     set subform [VtForm $networks.subform -marginHeight 0 -marginWidth 0]
  4642.     network:createIPwidget $subform "..." SCO_DNS_MSG_NEW_NETWORK_SH
  4643.     set d_addr [VxGetVar $subform d_addr]
  4644.     VtSetSensitive $d_addr 0
  4645.     set butrc [VtRowColumn $networks.buts \
  4646.         -leftSide $subform -topSide FORM -vertical]
  4647.     set addBut [VtPushButton $butrc.add \
  4648.         -callback "network:AddEntryToListCB newServer serverList" \
  4649.         -autoLock network:AddEntryToListCB \
  4650.                 -shortHelpCallback SaShortHelpCB \
  4651.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ADD_NETWORK_SH]\
  4652.         -label [IntlLocalizeMsg SCO_DNS_MSG_ADD] ]
  4653.     set delBut [VtPushButton $butrc.del \
  4654.         -callback "DeleteEntryFromListCB serverList delBut" \
  4655.         -autoLock DeleteEntryFromListCB \
  4656.                 -shortHelpCallback SaShortHelpCB \
  4657.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_DEL_NETWORK_SH]\
  4658.         -label [IntlLocalizeMsg SCO_DNS_MSG_DELETE] ]
  4659.     set serverList [VtList $networks.list \
  4660.         -columns 15 -rows 3 -CHARM_rows 2 \
  4661.         -topSide $subform \
  4662.         -callback "SetDelButSensitivityCB serverList delBut" \
  4663.         -shortHelpCallback SaShortHelpCB \
  4664.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_NETWORK_LIST_SH] \
  4665.                 -leftSide FORM -rightSide $butrc -bottomSide FORM]
  4666.     set frame0 [VtFrame $form.frame0 \
  4667.     -MOTIF_topOffset 10 -CHARM_topOffset 0 \
  4668.         -leftSide FORM -rightSide FORM ]
  4669.     set buttons [VtRowColumn $frame0.buts -horizontal]
  4670.     set soaButW [VtPushButton $buttons.soa \
  4671.         -label [IntlLocalizeMsg SCO_DNS_MSG_EDIT_SOA] \
  4672.         -shortHelpCallback SaShortHelpCB \
  4673.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_EDIT_SOA_SH] \
  4674.         -callback "SoaCB $action" -autoLock SoaCB]
  4675.     set nsButW [VtPushButton $buttons.ns \
  4676.         -label [IntlLocalizeMsg SCO_DNS_MSG_EDIT_NS] \
  4677.         -shortHelpCallback SaShortHelpCB \
  4678.         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_EDIT_NS_SH] \
  4679.         -callback "NameserversCB $action" -autoLock NameserversCB]
  4680.     set frame [BuildHostButtons $form $action]
  4681.     set sep [VtSeparator $form.sep1 -horizontal \
  4682.         -leftSide FORM -rightSide FORM \
  4683.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  4684.         -topSide $frame -CHARM_topOffset 0 -MOTIF_topOffset 5]
  4685.     set status [SaStatusBar $form.status 0]
  4686.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  4687.     VxSetVar $form type        [VxGetVar $alform widget1]
  4688.     VxSetVar $form name        [VxGetVar $alform widget2]
  4689.     VxSetVar $form newServer    $subform
  4690.     VxSetVar $form addBut    $addBut
  4691.     VxSetVar $form delBut    $delBut
  4692.     VxSetVar $form serverList    $serverList
  4693.     VxSetVar $form soaBut    $soaButW
  4694.     VxSetVar $form nsBut    $nsButW
  4695.     set typeW [VxGetVar $form type]
  4696.     VtSetValues $typeW -value $defaultZone
  4697. }
  4698. proc AddZoneCB { cbs } {
  4699.     global tempSOA tempNS managedHost DEFAULTS
  4700.     keylget cbs dialog dialog
  4701.     set tempSOA {}
  4702.     set tempNS  {}
  4703.     keylset tempSOA origin  $managedHost
  4704.     keylset tempSOA pic     $DEFAULTS(SOA_pic)
  4705.     keylset tempSOA refresh $DEFAULTS(SOA_refresh)
  4706.     keylset tempSOA retry   $DEFAULTS(SOA_retry)
  4707.     keylset tempSOA expire  $DEFAULTS(SOA_expire)
  4708.     keylset tempSOA ttl     $DEFAULTS(SOA_ttl)
  4709.     set form [VtFormDialog $dialog.addzone \
  4710.                 -ok -cancel -help \
  4711.                 -okCallback DoAddZoneCB \
  4712.                 -autoLock DoAddZoneCB \
  4713.                 -cancelCallback VxEndFormCB \
  4714.                 -cancelButton CANCEL \
  4715.                 -title [IntlLocalizeMsg SCO_DNS_MSG_ADD_ZONE_TITLE] ]
  4716.     BuildZoneForm ADD_ZONE $form [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]
  4717.     VxSetVar $form parent $dialog
  4718.     ChangedTypeCB [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY] \
  4719.           [list [list dialog $form]]
  4720.     dns:SetAddButSensitivityCB newServer addBut serverList delBut \
  4721.         [list [list dialog $form]]
  4722.     SetDelButSensitivityCB serverList delBut [list [list dialog $form]]
  4723.     Init:ZoneEntry
  4724.     VtShow $form
  4725.     VtUnLock
  4726. }
  4727. proc DoModifyZoneCB {cbs} {
  4728.     global ZONES NETWORKS tempSOA tempNS managedHost
  4729.     keylget cbs dialog dialog
  4730.     set nameW       [VxGetVar $dialog name]
  4731.     set typeW       [VxGetVar $dialog type]
  4732.     set networkList [VxGetVar $dialog serverList]
  4733.     set parent      [VxGetVar $dialog parent]
  4734.     set name     [VtGetValues $nameW -value]
  4735.     set type     [VtGetValues $typeW -value]
  4736.     set networks [VtListGetItem $networkList -all]
  4737.     if {[llength $name] == 0} {
  4738.         ErrorPush errStack 0 SCO_DNS_ERR_NO_ZONE_NAME
  4739.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4740.         VtUnLock
  4741.         return
  4742.     }
  4743.     if {[llength $networks] == 0} {
  4744.         ErrorPush errStack 0 SCO_DNS_ERR_NO_NETWORKS
  4745.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4746.         VtUnLock
  4747.         return
  4748.     }
  4749.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  4750.         if [ErrorCatch errStack 0 "CheckSoa 1 \
  4751.             \"[keylget tempSOA pic]\" \
  4752.             \"[keylget tempSOA refresh]\" \
  4753.             \"[keylget tempSOA retry]\" \
  4754.             \"[keylget tempSOA expire]\" \
  4755.             \"[keylget tempSOA ttl]\"" {}] {
  4756.             ErrorPush errStack 0 SCO_DNS_ERR_FIX_SOA
  4757.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4758.             VtUnLock
  4759.             return
  4760.         }
  4761.     regsub "@" [keylget tempSOA pic] "\." pic
  4762.     keylset tempSOA pic $pic
  4763.     if {[llength $tempNS] == 0} {
  4764.         NameserversCB MOD_ZONE $cbs
  4765.         return
  4766.     }
  4767.     } else {
  4768.         if {[llength $tempNS] == 0} {
  4769.                 ErrorPush errStack 0 SCO_DNS_ERR_NO_SERVERS
  4770.                 SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4771.                 VtUnLock
  4772.                 return
  4773.         }
  4774.     }
  4775.     CompleteModZone $dialog $name $type $networks
  4776. }
  4777. proc ReplaceZoneCB {dialog oldtype oldname oldnets type name networks cbs} {
  4778.     global ZONES NETWORKS
  4779.     unset ZONES($oldname)
  4780.     keyldel NETWORKS $oldname
  4781.     set ZONES($name) {}
  4782.     if [ErrorCatch errStack 0 "DeleteZone $oldtype $oldname [list $oldnets]" {}] {
  4783.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4784.            VtUnLock
  4785.            return
  4786.     }
  4787.     if [ErrorCatch errStack 0 "CreateZone $type $name [list $networks]" {}] {
  4788.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4789.            VtUnLock
  4790.            return
  4791.     }
  4792.     FinalizeModZone $dialog $name $type $networks
  4793. }
  4794. proc CompleteModZone {dialog name type networks {cbs {}}} {
  4795.     global ZONES NETWORKS managedHost tempSOA tempNS
  4796.     set parent   [VxGetVar $dialog parent]
  4797.     set selected [browser:GetSelectedItem]
  4798.     lassign $selected oldtype oldname
  4799.     set oldnets    [GetNetworks [lrange $selected 0 2]]
  4800.     if {($oldname != $name) || ($oldtype != $type)} {
  4801.     set warnform [VtWarningDialog $dialog.warn \
  4802.                 -ok -cancel \
  4803.         -okCallback "ReplaceZoneCB $dialog $oldtype $oldname \
  4804.             [list $oldnets] $type $name [list $networks]" \
  4805.                 -autoLock ReplaceZoneCB \
  4806.                 -message [IntlLocalizeMsg SCO_DNS_MSG_REPLACE_ZONE] \
  4807.               ]
  4808.         VtShow $warnform
  4809.     VtUnLock
  4810.     return
  4811.     } else {
  4812.         set attrs {}
  4813.         keylset attrs file "db.${name}"
  4814.         if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  4815.         set newtype "dNSPrimary"
  4816.             keylset attrs serial  1        ;#XXX
  4817.             keylset attrs mailbox [keylget tempSOA pic]
  4818.             keylset attrs refresh [keylget tempSOA refresh]
  4819.             keylset attrs retry   [keylget tempSOA retry]
  4820.             keylset attrs expire  [keylget tempSOA expire]
  4821.             keylset attrs minimum [keylget tempSOA ttl]
  4822.         set serverList {}
  4823.             foreach serverRec $tempNS {
  4824.                 keylget serverRec data optData
  4825.                 lappend serverList [list [keylget optData nameserver]\
  4826.                              [keylget optData ipaddr]]
  4827.             }
  4828.         } else {
  4829.             if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY]] {
  4830.             set newtype "dNSSecondary"
  4831.         } else {
  4832.             set newtype "dNSStub"
  4833.         }
  4834.         set serverList {}
  4835.             foreach serverRec $tempNS {
  4836.                 keylget serverRec data optData
  4837.                 lappend serverList [keylget optData nameserver]
  4838.             }
  4839.         }
  4840.         set objcall [list ObjectReplace \
  4841.                         [list sco $newtype] [SetInstance $name] \
  4842.             [list [list serverList $serverList]]]
  4843.         set bmipResponse [SaMakeObjectCall $objcall]
  4844.         set firstBmip [lindex $bmipResponse 0]
  4845.         set errStack [BmipResponseErrorStack firstBmip]
  4846.         if { ![lempty $errStack] } {
  4847.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_ZONE
  4848.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4849.            VtUnLock
  4850.            return
  4851.         }
  4852.         set objcall [list ObjectReplace \
  4853.                         [list sco $newtype] [SetInstance $name] $attrs]
  4854.         set bmipResponse [SaMakeObjectCall $objcall]
  4855.         set firstBmip [lindex $bmipResponse 0]
  4856.         set errStack [BmipResponseErrorStack firstBmip]
  4857.         if { ![lempty $errStack] } {
  4858.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_ZONE
  4859.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4860.            VtUnLock
  4861.            return
  4862.         }
  4863.     set changes [intersect3 $oldnets $networks]
  4864.         foreach net [lindex $changes 1] {
  4865.         set network [ReverseAddr $net]
  4866.         keylset attrs file "db.${network}"
  4867.         set objcall [list ObjectReplace \
  4868.         [list sco $newtype] [SetInstance ${network}.in-addr.arpa] $attrs]
  4869.         set bmipResponse [SaMakeObjectCall $objcall]
  4870.         set firstBmip [lindex $bmipResponse 0]
  4871.         set errStack [BmipResponseErrorStack firstBmip]
  4872.         if { ![lempty $errStack] } {
  4873.         ErrorPush errStack 0 SCO_DNS_ERR_MOD_ZONE
  4874.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4875.         VtUnLock
  4876.         return
  4877.         }
  4878.         }
  4879.     foreach net [lindex $changes 0] {
  4880.         set network [ReverseAddr $net]
  4881.         set objcall [list ObjectDelete \
  4882.         [list sco $newtype] [SetInstance ${network}.in-addr.arpa] {}]
  4883.         set bmipResponse [SaMakeObjectCall $objcall]
  4884.         set firstBmip [lindex $bmipResponse 0]
  4885.         set errStack [BmipResponseErrorStack firstBmip]
  4886.         if { ![lempty $errStack] } {
  4887.         ErrorPush errStack 0 SCO_DNS_ERR_DEL_ZONE
  4888.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4889.         VtUnLock
  4890.         return
  4891.         }
  4892.     }
  4893.         foreach net [lindex $changes 2] {
  4894.         set network [ReverseAddr $net]
  4895.         keylset attrs file "db.${network}"
  4896.         keylset attrs serverList $serverList
  4897.         set objcall [list ObjectCreate [list sco $newtype] \
  4898.             [SetInstance ${network}.in-addr.arpa] $attrs]
  4899.         set bmipResponse [SaMakeObjectCall $objcall]
  4900.         set firstBmip [lindex $bmipResponse 0]
  4901.         set errStack [BmipResponseErrorStack firstBmip]
  4902.         if { ![lempty $errStack] } {
  4903.         ErrorPush errStack 0 SCO_DNS_ERR_ADD_ZONE
  4904.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4905.         VtUnLock
  4906.         return
  4907.         }
  4908.     }
  4909.     }
  4910.     FinalizeModZone $dialog $name $type $networks
  4911. }
  4912. proc FinalizeModZone {dialog name type networks} {
  4913.     global managedHost tempNS NETWORKS ZONES
  4914.     global BROWSER ZoneEntry
  4915.     set parent   [VxGetVar $dialog parent]
  4916.     set pos      [lindex [VtDrawnListGetSelectedItem $BROWSER \
  4917.                 -byPositionList] 0]
  4918.     keylset NETWORKS $name "[GetCommonOctects $networks] $networks"
  4919.     set ZONES($name) [list $type $networks]
  4920.     set zoneNets {}
  4921.     foreach zoneNet $networks {
  4922.     lappend zoneNets [list [IntlLocalizeMsg SCO_DNS_MSG_NETWORK] \
  4923.             "$zoneNet"]
  4924.     }
  4925.     set recData {}
  4926.     keylset recData type ZONE
  4927.     keylset recData name $name
  4928.     set attrs [CnvZoneEntry $ZoneEntry]
  4929.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  4930.         set objcall [list ObjectReplace {sco hostTabEntry} \
  4931.                 [SetInstance "$name $name"] $attrs]
  4932.         set bmipResponse [SaMakeObjectCall $objcall]
  4933.         set firstBmip [lindex $bmipResponse 0]
  4934.         set errStack [BmipResponseErrorStack firstBmip]
  4935.         if { ![lempty $errStack] } {
  4936.            ErrorPush errStack 0 SCO_DNS_ERR_MOD_ZONE
  4937.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4938.            VtUnLock
  4939.            return
  4940.         }
  4941.     }
  4942.     keylset attrs zoneType $type
  4943.     keylset attrs networks $networks
  4944.     keylset recData data $attrs
  4945.     set pos [browser:FindItemParent $pos]
  4946.     VtDrawnListSelectItem $BROWSER -position $pos
  4947.     browser:RemoveEntryFromPos $pos
  4948.     DisplayRecord ZONE $recData $pos COLLAPSED
  4949.     VtDrawnListSelectItem $BROWSER -position $pos
  4950.     VxEndFormCB [list [list dialog $dialog]]
  4951.     VtUnLock
  4952. }
  4953. proc ModifyZoneCB { cbs } {
  4954.     global ZONES tempSOA tempNS managedHost
  4955.     keylget cbs dialog dialog
  4956.     set selected [browser:SetGetParent]
  4957.     lassign $selected type name
  4958.     set networks [GetNetworks [lrange $selected 0 2]]
  4959.     set tempSOA {}
  4960.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  4961.         set objcall [list ObjectGet {sco dNSPrimary} \
  4962.           [SetInstance $name] \
  4963.           {serverList mailbox refresh retry expire minimum}]
  4964.         set bmipResponse [SaMakeObjectCall $objcall]
  4965.         set firstBmip [lindex $bmipResponse 0]
  4966.         set errStack [BmipResponseErrorStack firstBmip]
  4967.         if { ![lempty $errStack] } {
  4968.              ErrorPush errStack 0 SCO_DNS_ERR_GET_SOA
  4969.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4970.             VtUnLock
  4971.             return
  4972.         } else {
  4973.         set attrs [BmipResponseAttrValList firstBmip]
  4974.             keylset tempSOA origin  $managedHost
  4975.             keylset tempSOA pic     [keylget attrs mailbox]
  4976.             keylset tempSOA refresh [keylget attrs refresh]
  4977.             keylset tempSOA retry   [keylget attrs retry]
  4978.             keylset tempSOA expire  [keylget attrs expire]
  4979.             keylset tempSOA ttl     [keylget attrs minimum]
  4980.         set servers         [keylget attrs serverList]
  4981.         }
  4982.     } else {
  4983.         if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY]] {
  4984.         set OSAtype "dNSSecondary"
  4985.         } else {
  4986.         set OSAtype "dNSStub"
  4987.         }
  4988.         set objcall [list ObjectGet [list sco $OSAtype] \
  4989.               [SetInstance $name] serverList]
  4990.         set bmipResponse [SaMakeObjectCall $objcall]
  4991.         set firstBmip [lindex $bmipResponse 0]
  4992.         set errStack [BmipResponseErrorStack firstBmip]
  4993.         if { ![lempty $errStack] } {
  4994.              ErrorPush errStack 0 SCO_DNS_ERR_GET_SOA
  4995.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  4996.             VtUnLock
  4997.             return
  4998.         } else {
  4999.         set attrs [BmipResponseAttrValList firstBmip]
  5000.         set servers [keylget attrs serverList]
  5001.         }
  5002.     }
  5003.     set tempNS {}
  5004.     foreach server $servers {
  5005.     set hostname [lindex $server 0]
  5006.     set recData {}
  5007.     keylset recData type   "NS"
  5008.     keylset recData name   $name
  5009.     set optData {}
  5010.     lappend optData [list "nameserver"  "$hostname"]
  5011.     if {[llength $server] > 1} {
  5012.         lappend optData [list "ipaddr" [lindex [lindex $server 1] 0]]
  5013.     }
  5014.     keylset recData data $optData
  5015.     lappend tempNS $recData
  5016.     }
  5017.     set form [VtFormDialog $dialog.modzone \
  5018.                 -ok -cancel -help \
  5019.                 -okCallback DoModifyZoneCB \
  5020.                 -autoLock DoModifyZoneCB \
  5021.                 -cancelCallback VxEndFormCB \
  5022.                 -cancelButton CANCEL \
  5023.                 -title [IntlLocalizeMsg SCO_DNS_MSG_MOD_ZONE_TITLE] ]
  5024.     BuildZoneForm MOD_ZONE $form $type
  5025.     VxSetVar $form parent $dialog
  5026.     set nameW       [VxGetVar $form name]
  5027.     set typeW       [VxGetVar $form type]
  5028.     set networkList [VxGetVar $form serverList]
  5029.     VtSetValues $nameW -value $name
  5030.     VtSetValues $typeW -value $type
  5031.     VtListSetItem $networkList -itemList $networks
  5032.     ChangedTypeCB $type [list [list dialog $form]]
  5033.     dns:SetAddButSensitivityCB newServer addBut serverList delBut [list [list dialog $form]]
  5034.     SetDelButSensitivityCB serverList delBut [list [list dialog $form]]
  5035.     Init:ZoneEntry modify
  5036.     VtShow $form
  5037.     VtUnLock
  5038. }
  5039. proc DoDeleteZoneCB {dialog cbs} {
  5040.     global ZONE ZONES BROWSER
  5041.     set selected [browser:SetGetParent]
  5042.     lassign $selected type name
  5043.     set networks [GetNetworks [lrange $selected 0 2]]
  5044.     if ![cequal $type [IntlLocalizeMsg SCO_DNS_MSG_CACHING]] {
  5045.     if [ErrorCatch errStack 0 "DeleteZone $type $name [list $networks]" {}] {
  5046.               SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5047.               VtUnLock
  5048.               return
  5049.     }
  5050.     }
  5051.     set pos [lindex [VtDrawnListGetSelectedItem $BROWSER -byPositionList] 0]
  5052.     browser:RemoveEntryFromPos $pos
  5053.     set allEnt [VtDrawnListGetItem $BROWSER -all]
  5054.     if ![lempty $allEnt] {
  5055.         if {[llength $allEnt] < $pos} {
  5056.                 incr pos -1
  5057.         }
  5058.         VtDrawnListSelectItem $BROWSER -position $pos
  5059.     }
  5060.     catch {unset ZONES($name)}
  5061.     lassign [GetZones] ZONE        ;# assign to first if there is one
  5062.     SaveConfig
  5063.     ZoneSetSensitivity $dialog
  5064.     VtUnLock
  5065. }
  5066. proc DeleteZoneCB { cbs } {
  5067.     keylget cbs dialog dialog
  5068.     set YN [VtQuestionDialog $dialog.YN \
  5069.         -okCallback "DoDeleteZoneCB $dialog" \
  5070.         -autoLock DoDeleteZoneCB \
  5071.         -cancel \
  5072.         -message [IntlLocalizeMsg SCO_DNS_MSG_DELETE_ENTRY] ]
  5073.     VtShow $YN
  5074.     VtUnLock
  5075. }
  5076. proc UpdateConfigCB {cbs} {
  5077.     global Main ZONE
  5078.     keylget cbs dialog dialog
  5079.     set zones {}
  5080.     set zoneList [VxGetVar $dialog zoneList]
  5081.     set allentries [VtDrawnListGetItem $zoneList -all]
  5082.     set primZones {}
  5083.     foreach entry $allentries {
  5084.     if [cequal [lindex $entry 1] [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  5085.         lappend primZones [lindex $entry 0]
  5086.     }
  5087.     }
  5088.     if {[lsearch -exact $primZones $ZONE] < 0} {
  5089.     set ZONE [lindex $primZones 0]
  5090.         if [ErrorCatch errStack 0 "SetZoneRecords" {}] {
  5091.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5092.             VtUnLock
  5093.             return
  5094.        }
  5095.     }
  5096.     SetSensitivityCB [list [list dialog $Main(Dialog)]]
  5097.     VxEndFormCB $cbs
  5098.     VtUnLock
  5099. }
  5100. proc ZoneSetSensitivity {dialog} {
  5101.     global BROWSER VIEW managedHost
  5102.     set zones   [VxGetVar $dialog change]
  5103.     set zonerec [VxGetVar $dialog zonerec]
  5104.     set zoneadd        [VxGetVar $dialog zoneadd]
  5105.     set zonemodify    [VxGetVar $dialog zonemodify]
  5106.     set zonedelete    [VxGetVar $dialog zonedelete]
  5107.     set hosts    [VxGetVar $dialog hosts]
  5108.     set import    [VxGetVar $dialog import]
  5109.     set modify    [VxGetVar $dialog modify]
  5110.     set delete    [VxGetVar $dialog delete]
  5111.     set selectedPos  [VtDrawnListGetSelectedItem $BROWSER -byPositionList]
  5112.     set selected [expr {$selectedPos == 0 ? 0 : 1}]
  5113.     switch -- $VIEW {
  5114.     ZONES {
  5115.         set parentPos [browser:FindItemParent $selectedPos]
  5116.         set ent [browser:GetItemFromPos $parentPos]
  5117.         set allowZoneAdd 1
  5118.         set allowZoneMod $selected
  5119.         set allowZoneRecs 0
  5120.         if [cequal [lindex $ent 0] \
  5121.             [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  5122.             set allowZoneRecs 1
  5123.         } elseif [cequal [lindex $ent 0] \
  5124.             [IntlLocalizeMsg SCO_DNS_MSG_CACHING]] {
  5125.             set allowZoneAdd 0
  5126.             set allowZoneMod 0
  5127.         }
  5128.         if {$selectedPos == 0} {
  5129.            set AllowZoneDel 0
  5130.         } else {
  5131.            set AllowZoneDel [expr {$selectedPos == $parentPos}]
  5132.         }
  5133.         VtSetSensitive $zones 0
  5134.         VtSetSensitive $zonerec $allowZoneRecs
  5135.         VtSetSensitive $zoneadd $allowZoneAdd
  5136.         VtSetSensitive $zonemodify $allowZoneMod
  5137.         VtSetSensitive $zonedelete $AllowZoneDel
  5138.         VtSetSensitive $hosts 0
  5139.         VtSetSensitive $import 0
  5140.         VtSetSensitive $modify 0
  5141.         VtSetSensitive $delete 0
  5142.     }
  5143.     default {
  5144.         VtSetSensitive $zones 1
  5145.         VtSetSensitive $zonerec 0
  5146.         VtSetSensitive $zoneadd 0
  5147.         VtSetSensitive $zonemodify 0
  5148.         VtSetSensitive $zonedelete 0
  5149.         VtSetSensitive $hosts 1
  5150.         if [cequal [exec /bin/uname -n] [SaHostExtractSystemName $managedHost]] {
  5151.             VtSetSensitive $import 1
  5152.         } else {
  5153.             VtSetSensitive $import 0
  5154.         }
  5155.         VtSetSensitive $modify $selected
  5156.         VtSetSensitive $delete $selected
  5157.     }
  5158.     }
  5159. }
  5160. proc ViewZonesCB {cbs} {
  5161.     global VIEW ZONES ZONE
  5162.     global BROWSER displayData managedHost
  5163.     keylget cbs dialog dialog
  5164.     catch {unset displayData}
  5165.     set VIEW ZONES
  5166.         ;# display all ZONES
  5167.     if [ErrorCatch errStack 0 "SetZones" {}] {
  5168.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5169.     VtUnLock
  5170.     return
  5171.     }
  5172.     browser:ReDisplay            ;#sort browser
  5173.     if {![lempty $ZONE]} {
  5174.     set all [VtDrawnListGetItem $BROWSER -all]
  5175.     set ent [VtDrawnListGetItem $BROWSER -field 2 $ZONE]
  5176.     set pos [lsearch -exact $all [lindex $ent 0]]
  5177.     set pos [expr {($pos == -1) ? 1 : $pos + 1}]
  5178.     } else {
  5179.     if {[lempty [GetZones]]} {
  5180.         set objcall [list ObjectAction {sco dNSystem} \
  5181.         [SetInstance NULL] {configured} {}]
  5182.         set bmipResponse [SaMakeObjectCall $objcall]
  5183.         set firstBmip [lindex $bmipResponse 0]
  5184.         set errStack [BmipResponseErrorStack firstBmip]
  5185.         if [lempty $errStack] {
  5186.         set output [BmipResponseActionInfo firstBmip]
  5187.         if ![lempty $output] {
  5188.             set name [IntlLocalizeMsg SCO_DNS_MSG_CACHING]
  5189.             browser:AddEntry 0 COLLAPSED [list "$name" {} "$name"] {} 1
  5190.         }
  5191.         }
  5192.     }
  5193.     set pos 1
  5194.     }
  5195.     if {![lempty $ZONE]} {
  5196.     VtDrawnListSelectItem $BROWSER -position $pos
  5197.     }
  5198.     browser:SetSensitivity $dialog
  5199.     ZoneSetSensitivity $dialog
  5200.     VtUnLock
  5201. }
  5202. proc ViewZoneRecordsCB {cbs} {
  5203.     global VIEW ZONE ZONES BROWSER displayData
  5204.     keylget cbs dialog dialog
  5205.     set ZONE [lindex [browser:SetGetParent] 1]
  5206.     catch {unset displayData}
  5207.     set VIEW ZONEREC
  5208.     if [ErrorCatch errStack 0 "SetZoneRecords" {}] {
  5209.            SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5210.            VtUnLock
  5211.            return
  5212.     }
  5213.     ZoneSetSensitivity $dialog
  5214.     VtUnLock
  5215. }
  5216. proc GetLimits {cbs} {
  5217.     global LIMITS
  5218.     keylget cbs dialog dialog
  5219.     set objcall [list ObjectGet {sco dNSystem} [SetInstance "NULL"] \
  5220.               {XferIn XferPerNs XferDatasize}]
  5221.     set bmipResponse [SaMakeObjectCall $objcall]
  5222.     set firstBmip [lindex $bmipResponse 0]
  5223.     set errStack [BmipResponseErrorStack firstBmip]
  5224.     if { ![lempty $errStack] } {
  5225.         ErrorPush errStack 0 SCO_DNS_ERR_GET_LIMITS
  5226.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5227.         VtUnLock
  5228.         return -code return
  5229.     } else {
  5230.     set attrs [BmipResponseAttrValList firstBmip]
  5231.     set transfers_in     [keylget attrs XferIn]
  5232.     set transfers_per_ns    [keylget attrs XferPerNs]
  5233.     set datasize        [keylget attrs XferDatasize]
  5234.     if [lempty $transfers_in] {
  5235.         set LIMITS(transfers_in)    10
  5236.     } else {
  5237.         set LIMITS(transfers_in)    $transfers_in
  5238.     }
  5239.     if [lempty $transfers_per_ns] {
  5240.         set LIMITS(transfers_per_ns) 2
  5241.     } else {
  5242.         set LIMITS(transfers_per_ns) $transfers_per_ns
  5243.     }
  5244.     if [lempty $datasize] {
  5245.         set LIMITS(datasize)    64
  5246.     } else {
  5247.         set LIMITS(datasize)    $datasize
  5248.     }
  5249.     }
  5250. }
  5251. proc ConfigLimitsCB { cbs } {
  5252.     keylget cbs dialog dialog
  5253.     GetLimits  $cbs
  5254.     set form [VtFormDialog $dialog.configLimits \
  5255.     -ok -reset -cancel -help \
  5256.     -okCallback UpdateLimitsCB \
  5257.     -resetCallback ResetLimitsCB \
  5258.     -cancelCallback VxEndFormCB \
  5259.     -autoLock UpdateLimitsCB \
  5260.     -title [IntlLocalizeMsg SCO_DNS_MSG_CONFIG_LIMITS_TITLE]]
  5261.     set alform [SaAlignedForm $form.align [list \
  5262.     [list SCO_DNS_MSG_LIMITS_IN \
  5263.         [list VxSpinButton 8 1 {} 1000 {} 1 {} {} {}]] \
  5264.     [list SCO_DNS_MSG_LIMITS_PER_NS \
  5265.         [list VxSpinButton 8 1 {} 10000 {} 1 1 {} {}]] \
  5266.     [list SCO_DNS_MSG_LIMITS_DATASIZE \
  5267.         [list VxSpinButton 8 1 {} 10000 {} 1 1 {} {}]] \
  5268.     ]]
  5269.     VtSetValues $alform -rightSide FORM
  5270.     set sep [VtSeparator $form.sep1 -horizontal \
  5271.         -leftSide FORM -rightSide FORM \
  5272.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  5273.         -topSide $alform -CHARM_topOffset 1]
  5274.     set status [SaStatusBar $form.status 0]
  5275.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  5276.     set inW [VxGetVar $alform widget1]
  5277.     set transfers_in [VxGetVar $inW text]
  5278.     set perNSW [VxGetVar $alform widget2]
  5279.     set transfers_per_ns [VxGetVar $perNSW text]
  5280.     set datasizeW [VxGetVar $alform widget3]
  5281.     set datasize [VxGetVar $datasizeW text]
  5282.     VtSetValues $transfers_in -shortHelpCallback SaShortHelpCB \
  5283.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_LIMITS_IN_SH]
  5284.     VtSetValues $transfers_per_ns -shortHelpCallback SaShortHelpCB \
  5285.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_LIMITS_PER_NS_SH]
  5286.     VtSetValues $datasize -shortHelpCallback SaShortHelpCB \
  5287.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_LIMITS_DATASIZE_SH]
  5288.     VxSetVar $form transfers_in    $transfers_in
  5289.     VxSetVar $form transfers_per_ns $transfers_per_ns
  5290.     VxSetVar $form datasize $datasize
  5291.     ResetLimitsCB [list [list dialog $form]]
  5292.     VtShow $form
  5293.     VtUnLock
  5294. }
  5295. proc ResetLimitsCB {cbs} {
  5296.     global LIMITS
  5297.     keylget cbs dialog dialog
  5298.     VtSetValues [VxGetVar $dialog transfers_in] \
  5299.         -value $LIMITS(transfers_in)
  5300.     VtSetValues [VxGetVar $dialog transfers_per_ns] \
  5301.         -value $LIMITS(transfers_per_ns)
  5302.     VtSetValues [VxGetVar $dialog datasize] -value $LIMITS(datasize)
  5303. }
  5304. proc UpdateLimitsCB {cbs} {
  5305.     keylget cbs dialog dialog
  5306.     set XferIn      [VtGetValues [VxGetVar $dialog transfers_in] -value]
  5307.     set XferPerNs [VtGetValues [VxGetVar $dialog transfers_per_ns] -value]
  5308.     set XferDatasize [VtGetValues [VxGetVar $dialog datasize] -value]
  5309.     keylset attrs XferIn $XferIn
  5310.     keylset attrs XferPerNs $XferPerNs 
  5311.     keylset attrs XferDatasize $XferDatasize
  5312.     set objcall [list ObjectReplace {sco dNSystem} [SetInstance "NULL"] $attrs]
  5313.     set bmipResponse [SaMakeObjectCall $objcall]
  5314.     set firstBmip [lindex $bmipResponse 0]
  5315.     set errStack [BmipResponseErrorStack firstBmip]
  5316.     if { ![lempty $errStack] } {
  5317.         ErrorPush errStack 0 SCO_DNS_ERR_SAVE_FORWARDERS
  5318.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5319.         VtUnLock
  5320.     return
  5321.     }
  5322.     VxEndFormCB $cbs
  5323.     VtUnLock
  5324. }
  5325. proc GetOptions {cbs} {
  5326.     global OPTIONS
  5327.     keylget cbs dialog dialog
  5328.     set objcall [list ObjectGet {sco dNSystem} [SetInstance "NULL"] \
  5329.         {slave OptsNoRecursion OptsQueryLog OptsFetchGlue}]
  5330.     set bmipResponse [SaMakeObjectCall $objcall]
  5331.     set firstBmip [lindex $bmipResponse 0]
  5332.     set errStack [BmipResponseErrorStack firstBmip]
  5333.     if { ![lempty $errStack] } {
  5334.         ErrorPush errStack 0 SCO_DNS_ERR_GET_OPTIONS
  5335.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5336.         VtUnLock
  5337.         return -code return
  5338.     } else {
  5339.     set attrs [BmipResponseAttrValList firstBmip]
  5340.     set OPTIONS(recursion)      [keylget attrs OptsNoRecursion]
  5341.     set OPTIONS(query_log)      [keylget attrs OptsQueryLog]
  5342.     set OPTIONS(fetch_glue)      [keylget attrs OptsFetchGlue]
  5343.     }
  5344. }
  5345. proc ConfigOptionsCB { cbs } {
  5346.     keylget cbs dialog dialog
  5347.     GetOptions $cbs
  5348.     set form [VtFormDialog $dialog.configOpts \
  5349.                 -ok -reset -cancel -help \
  5350.                 -okCallback UpdateOptsCB \
  5351.         -resetCallback ResetOptionsCB \
  5352.                 -cancelCallback VxEndFormCB \
  5353.                 -autoLock UpdateOptsCB \
  5354.                 -title [IntlLocalizeMsg SCO_DNS_MSG_CONFIG_OPTS_TITLE] ]
  5355.     set alform [SaAlignedForm $form.align [list \
  5356.     [list SCO_DNS_MSG_OPTS_NO_RECURSION \
  5357.         [list VtRadioBox -horizontal -callback "SaSetFocus next"]] \
  5358.     [list SCO_DNS_MSG_OPTS_FETCH_GLUE \
  5359.         [list VtRadioBox -horizontal -callback "SaSetFocus next"]] \
  5360.     [list SCO_DNS_MSG_OPTS_QUERY_LOG \
  5361.         [list VtRadioBox -horizontal -callback "SaSetFocus next"]] \
  5362.     ]]
  5363.     VtSetValues $alform -rightSide FORM
  5364.     set sep [VtSeparator $form.sep1 -horizontal \
  5365.         -leftSide FORM -rightSide FORM \
  5366.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  5367.         -topSide $alform -CHARM_topOffset 1]
  5368.     set status [SaStatusBar $form.status 0]
  5369.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  5370.     set rb1 [VxGetVar $alform widget1]
  5371.     set rb2 [VxGetVar $alform widget2]
  5372.     set rb3 [VxGetVar $alform widget3]
  5373.     VtToggleButton $rb1.RECURSION \
  5374.     -label [IntlLocalizeMsg SCO_DNS_MSG_YES] \
  5375.     -shortHelpCallback SaShortHelpCB \
  5376.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_OPTS_RECURSION_SH]
  5377.     VtToggleButton $rb1.NO_RECURSION \
  5378.     -label [IntlLocalizeMsg SCO_DNS_MSG_NO] \
  5379.     -shortHelpCallback SaShortHelpCB \
  5380.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_OPTS_NO_RECURSION_SH]
  5381.     VtToggleButton $rb2.FETCH_GLUE \
  5382.     -label [IntlLocalizeMsg SCO_DNS_MSG_YES] \
  5383.     -shortHelpCallback SaShortHelpCB \
  5384.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_OPTS_FETCH_GLUE_SH]
  5385.     VtToggleButton $rb2.NO_FETCH_GLUE \
  5386.     -label [IntlLocalizeMsg SCO_DNS_MSG_NO] \
  5387.     -shortHelpCallback SaShortHelpCB \
  5388.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_OPTS_NO_FETCH_GLUE_SH]
  5389.     VtToggleButton $rb3.QUERY_LOG \
  5390.     -label [IntlLocalizeMsg SCO_DNS_MSG_YES] \
  5391.     -shortHelpCallback SaShortHelpCB \
  5392.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_OPTS_QUERY_LOG_SH]
  5393.     VtToggleButton $rb3.NO_QUERY_LOG \
  5394.     -label [IntlLocalizeMsg SCO_DNS_MSG_NO] \
  5395.     -shortHelpCallback SaShortHelpCB \
  5396.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_OPTS_NO_QUERY_LOG_SH]
  5397.     VxSetVar $form recursion    $rb1
  5398.     VxSetVar $form fetch_glue    $rb2
  5399.     VxSetVar $form query_log    $rb3
  5400.     ResetOptionsCB [list [list dialog $form]]
  5401.     VtShow $form
  5402.     VtUnLock
  5403. }
  5404. proc ResetOptionsCB {cbs} {
  5405.     global OPTIONS
  5406.     keylget cbs dialog dialog
  5407.     VtSetValues [VxGetVar $dialog recursion] \
  5408.     -value [expr {($OPTIONS(recursion) != 0) ? \
  5409.         "NO_RECURSION" : "RECURSION"}]
  5410.     VtSetValues [VxGetVar $dialog fetch_glue] \
  5411.     -value [expr {($OPTIONS(fetch_glue) != 0) ? \
  5412.         "NO_FETCH_GLUE" : "FETCH_GLUE"}]
  5413.     VtSetValues [VxGetVar $dialog query_log] \
  5414.     -value [expr {($OPTIONS(query_log) != 0) ? \
  5415.         "QUERY_LOG" : "NO_QUERY_LOG"}]
  5416. }
  5417. proc UpdateOptsCB {cbs} {
  5418.     keylget cbs dialog dialog
  5419.     set recursion  [VxGetShortName [VtGetValues \
  5420.            [VxGetVar $dialog recursion] -value]]
  5421.     set fetch_glue [VxGetShortName [VtGetValues \
  5422.            [VxGetVar $dialog fetch_glue] -value]]
  5423.     set query_log  [VxGetShortName [VtGetValues \
  5424.            [VxGetVar $dialog query_log] -value]]
  5425.     if [cequal $recursion RECURSION] {
  5426.     keylset attrs OptsNoRecursion 0
  5427.     } else {
  5428.     keylset attrs OptsNoRecursion 1
  5429.     }
  5430.     if [cequal $fetch_glue FETCH_GLUE] {
  5431.     keylset attrs OptsFetchGlue 0
  5432.     } else {
  5433.     keylset attrs OptsFetchGlue 1
  5434.     }
  5435.     if [cequal $query_log QUERY_LOG] {
  5436.     keylset attrs OptsQueryLog 1
  5437.     } else {
  5438.     keylset attrs OptsQueryLog 0
  5439.     }
  5440.     set objcall [list ObjectReplace {sco dNSystem} [SetInstance "NULL"] $attrs]
  5441.     set bmipResponse [SaMakeObjectCall $objcall]
  5442.     set firstBmip [lindex $bmipResponse 0]
  5443.     set errStack [BmipResponseErrorStack firstBmip]
  5444.     if { ![lempty $errStack] } {
  5445.         ErrorPush errStack 0 SCO_DNS_ERR_SAVE_FORWARDERS
  5446.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5447.         VtUnLock
  5448.     return
  5449.     }
  5450.     VxEndFormCB $cbs
  5451.     VtUnLock
  5452. }
  5453. proc CheckSoa {strict pic refresh retry expire ttl} {
  5454.     if {$strict} {
  5455.     if {[llength $pic] == 0} {
  5456.                 ErrorPush {} 1 SCO_DNS_ERR_NO_PIC
  5457.         }
  5458.     if {[regexp -- {[^A-Za-z0-9.-]} $pic inval]} {
  5459.         ctoken pic $inval
  5460.         ErrorPush {} 1 SCO_DNS_ERR_CHAR1 [list $pic]
  5461.     }
  5462.         if {[llength $refresh] == 0} {
  5463.             ErrorPush {} 1 SCO_DNS_ERR_NO_REFRESH
  5464.         }
  5465.         if {[llength $retry] == 0} {
  5466.             ErrorPush {} 1 SCO_DNS_ERR_NO_RETRY
  5467.         }
  5468.         if {[llength $expire] == 0} {
  5469.                ErrorPush {} 1 SCO_DNS_ERR_NO_EXPIRE
  5470.         }
  5471.         if {[llength $ttl] == 0} {
  5472.                ErrorPush {} 1 SCO_DNS_ERR_NO_TTL
  5473.         }
  5474.     }
  5475.     if {[llength $refresh] != 0} {
  5476.         if {![ctype digit $refresh] || ($refresh < 1) || ($refresh > 99999999)} {
  5477.             ErrorPush {} 1 SCO_DNS_ERR_BAD_REFRESH
  5478.         }
  5479.     }
  5480.     if {[llength $retry] != 0} {
  5481.         if {![ctype digit $retry] || ($retry < 1) || ($retry > 99999999)} {
  5482.             ErrorPush {} 1 SCO_DNS_ERR_BAD_RETRY
  5483.         }
  5484.     }
  5485.     if {[llength $expire] != 0} {
  5486.         if {![ctype digit $expire] || ($expire < 2) || ($expire > 99999999)} {
  5487.             ErrorPush {} 1 SCO_DNS_ERR_BAD_EXPIRE1
  5488.         }
  5489.         if {($expire <= $refresh) || ($expire <= $retry)} {
  5490.             ErrorPush {} 1 SCO_DNS_ERR_BAD_EXPIRE2
  5491.         }
  5492.     }
  5493.     if {[llength $ttl] != 0} {
  5494.         if {![ctype digit $ttl] || ($ttl < 1) || ($ttl > 99999999)} {
  5495.             ErrorPush {} 1 SCO_DNS_ERR_BAD_TTL
  5496.         }
  5497.     }
  5498. }
  5499. proc SetDefaultSoaCB {cbs} {
  5500.     global DEFAULTS DEFAULTS_MODIFIED
  5501.     keylget cbs dialog dialog
  5502.     set picW     [VxGetVar $dialog pic ]
  5503.     set refreshW [VxGetVar $dialog refresh]
  5504.     set retryW   [VxGetVar $dialog retry ]
  5505.     set expireW  [VxGetVar $dialog expire]
  5506.     set ttlW     [VxGetVar $dialog ttl]
  5507.     set pic     [VtGetValues $picW -value]
  5508.     set refresh [VtGetValues $refreshW -value]
  5509.     set retry   [VtGetValues $retryW -value]
  5510.     set expire  [VtGetValues $expireW -value]
  5511.     set ttl     [VtGetValues $ttlW -value]
  5512.     if [ErrorCatch errStack 0 "CheckSoa 0 \"$pic\" \"$refresh\" \"$retry\" \"$expire\" \"$ttl\"" {}] {
  5513.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5514.         VtUnLock
  5515.         return
  5516.     }
  5517.     regsub "@" $pic "\." pic
  5518.     set DEFAULTS(SOA_pic)     $pic
  5519.     set DEFAULTS(SOA_refresh) $refresh
  5520.     set DEFAULTS(SOA_retry)   $retry
  5521.     set DEFAULTS(SOA_expire)  $expire
  5522.     set DEFAULTS(SOA_ttl)     $ttl
  5523.     set DEFAULTS_MODIFIED 1
  5524.     VxEndFormCB $cbs
  5525.     VtUnLock
  5526. }
  5527. proc SetZoneSoaCB {action cbs} {
  5528.     global Main ZONE managedHost tempSOA
  5529.     keylget cbs dialog dialog
  5530.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  5531.     set picW     [VxGetVar $dialog pic ]
  5532.     set refreshW [VxGetVar $dialog refresh]
  5533.     set retryW   [VxGetVar $dialog retry ]
  5534.     set expireW  [VxGetVar $dialog expire]
  5535.     set ttlW     [VxGetVar $dialog ttl]
  5536.     set pic     [VtGetValues $picW -value]
  5537.     set refresh [VtGetValues $refreshW -value]
  5538.     set retry   [VtGetValues $retryW -value]
  5539.     set expire  [VtGetValues $expireW -value]
  5540.     set ttl     [VtGetValues $ttlW -value]
  5541.     if [ErrorCatch errStack 0 "CheckSoa 1 \"$pic\" \"$refresh\" \"$retry\" \"$expire\" \"$ttl\"" {}] {
  5542.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5543.         VtUnLock
  5544.         return
  5545.     }
  5546.     regsub "@" $pic "\." pic
  5547.     set tempSOA {}
  5548.     keylset tempSOA origin  $managedHost
  5549.     keylset tempSOA pic     $pic
  5550.     keylset tempSOA refresh $refresh
  5551.     keylset tempSOA retry   $retry
  5552.     keylset tempSOA expire  $expire
  5553.     keylset tempSOA ttl     $ttl
  5554.     VxEndFormCB $cbs
  5555.     VtUnLock
  5556. }
  5557. proc SoaCB { action cbs } {
  5558.     global DEFAULTS Main tempSOA
  5559.     keylget cbs dialog dialog
  5560.     switch -- $action {
  5561.          ADD_ZONE       -
  5562.          MOD_ZONE       { set callback "SetZoneSoaCB $action"
  5563.                           set title    "SCO_DNS_MSG_SOA_TITLE"
  5564.                         }
  5565.          DEFAULTS       { set callback "SetDefaultSoaCB"
  5566.                           set title    "SCO_DNS_MSG_DEFAULT_SOA_TITLE"
  5567.                         }
  5568.     }
  5569.     set form [VtFormDialog $dialog.soa \
  5570.                 -ok \
  5571.                 -okCallback "$callback" \
  5572.                 -autoLock [lindex $callback 0] \
  5573.                 -cancel \
  5574.                 -cancelCallback VxEndFormCB \
  5575.                 -cancelButton CANCEL \
  5576.                 -help \
  5577.                 -title [IntlLocalizeMsg $title] ]
  5578.     set alform [SaAlignedForm $form.align [list \
  5579.         [list SCO_DNS_MSG_PIC \
  5580.             [list VtText -columns 21 \
  5581.                         -shortHelpCallback SaShortHelpCB \
  5582.                         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_PIC_SH] ]] \
  5583.         [list SCO_DNS_MSG_REFRESH \
  5584.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  5585.         [list SCO_DNS_MSG_RETRY \
  5586.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  5587.         [list SCO_DNS_MSG_EXPIRE \
  5588.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  5589.         [list SCO_DNS_MSG_TTL \
  5590.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  5591.         ]]
  5592.     VtSetValues $alform -rightSide FORM
  5593.     set sep [VtSeparator $form.sep1 -horizontal \
  5594.         -leftSide FORM -rightSide FORM \
  5595.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  5596.         -topSide $alform -CHARM_topOffset 1]
  5597.     set status [SaStatusBar $form.status 0]
  5598.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  5599.     set refreshF [VxGetVar $alform widget2] 
  5600.     set refreshSB [VxSpinButton $refreshF.refresh 8 1 {} 99999999 {} 600 1 DummyCB {} ]
  5601.     set refresh [VxGetVar $refreshSB text]
  5602.     VtSetValues $refresh -shortHelpCallback SaShortHelpCB \
  5603.     -valueChangedCallback "UpdateLabelCB refresh" \
  5604.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_REFRESH_SH]
  5605.     set refreshL [VtLabel $refreshF.label -label " " \
  5606.     -font medNormalFont -labelLeft \
  5607.     -leftSide $refreshSB -topSide FORM -rightSide FORM -bottomSide FORM]
  5608.     set retryF [VxGetVar $alform widget3] 
  5609.     set retrySB [VxSpinButton $retryF.retry 8 1 {} 99999999 {} 600 1 DummyCB {} ]
  5610.     set retry [VxGetVar $retrySB text]
  5611.     VtSetValues $retry -shortHelpCallback SaShortHelpCB \
  5612.     -valueChangedCallback "UpdateLabelCB retry" \
  5613.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_RETRY_SH]
  5614.     set retryL [VtLabel $retryF.label -label " " \
  5615.     -font medNormalFont -labelLeft \
  5616.     -leftSide $retrySB -topSide FORM -rightSide FORM -bottomSide FORM]
  5617.     set expireF [VxGetVar $alform widget4] 
  5618.     set expireSB [VxSpinButton $expireF.expire 8 2 {} 99999999 {} 600 1 DummyCB {} ]
  5619.     set expire [VxGetVar $expireSB text]
  5620.     VtSetValues $expire -shortHelpCallback SaShortHelpCB \
  5621.     -valueChangedCallback "UpdateLabelCB expire" \
  5622.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_EXPIRE_SH]
  5623.     set expireL [VtLabel $expireF.label -label " " \
  5624.     -font medNormalFont -labelLeft \
  5625.     -leftSide $expireSB -topSide FORM -rightSide FORM -bottomSide FORM]
  5626.     set ttlF [VxGetVar $alform widget5] 
  5627.     set ttlSB [VxSpinButton $ttlF.ttl 8 1 {} 99999999 {} 600 1 DummyCB {} ]
  5628.     set ttl [VxGetVar $ttlSB text]
  5629.     VtSetValues $ttl -shortHelpCallback SaShortHelpCB \
  5630.     -valueChangedCallback "UpdateLabelCB ttl" \
  5631.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_TTL_SH]
  5632.     set ttlL [VtLabel $ttlF.label -label " " \
  5633.     -font medNormalFont -labelLeft \
  5634.     -leftSide $ttlSB -topSide FORM -rightSide FORM -bottomSide FORM]
  5635.     set pic [VxGetVar $alform widget1]
  5636.     switch -- $action {
  5637.          ADD_ZONE   -
  5638.          MOD_ZONE   { 
  5639.                       VtSetValues $pic      -value [keylget tempSOA pic]
  5640.                       VtSetValues $refresh  -value [keylget tempSOA refresh]
  5641.                       VtSetValues $refreshL -label [cvtsecs [keylget tempSOA refresh]]
  5642.                       VtSetValues $retry    -value [keylget tempSOA retry]
  5643.                       VtSetValues $retryL   -label [cvtsecs [keylget tempSOA retry]]
  5644.                       VtSetValues $expire   -value [keylget tempSOA expire]
  5645.                       VtSetValues $expireL  -label [cvtsecs [keylget tempSOA expire]]
  5646.                       VtSetValues $ttl      -value [keylget tempSOA ttl]
  5647.                       VtSetValues $ttlL     -label [cvtsecs [keylget tempSOA ttl]]
  5648.                     }
  5649.          DEFAULTS   { VtSetValues $pic      -value $DEFAULTS(SOA_pic)
  5650.                   VtSetValues $refresh  -value $DEFAULTS(SOA_refresh)
  5651.                   VtSetValues $refreshL -label [cvtsecs $DEFAULTS(SOA_refresh)]
  5652.                   VtSetValues $retry    -value $DEFAULTS(SOA_retry)
  5653.                   VtSetValues $retryL   -label [cvtsecs $DEFAULTS(SOA_retry)]
  5654.                   VtSetValues $expire   -value $DEFAULTS(SOA_expire)
  5655.                   VtSetValues $expireL  -label [cvtsecs $DEFAULTS(SOA_expire)]
  5656.                   VtSetValues $ttl      -value $DEFAULTS(SOA_ttl)
  5657.                   VtSetValues $ttlL     -label [cvtsecs $DEFAULTS(SOA_ttl)]
  5658.                     }
  5659.     }
  5660.     VxSetVar $form pic      [VxGetVar $alform widget1]
  5661.     VxSetVar $form refresh  $refresh
  5662.     VxSetVar $form refreshL $refreshL
  5663.     VxSetVar $form retry    $retry
  5664.     VxSetVar $form retryL   $retryL
  5665.     VxSetVar $form expire   $expire
  5666.     VxSetVar $form expireL  $expireL
  5667.     VxSetVar $form ttl      $ttl
  5668.     VxSetVar $form ttlL     $ttlL
  5669.     VtShow $form
  5670.     VtUnLock
  5671. }
  5672. proc DoSearchCB {cbs} {
  5673.     global Main SEARCH_VAL
  5674.     keylget cbs dialog dialog
  5675.     set searchW [VxGetVar $dialog search]
  5676.     set search  [VtGetValues $searchW -value]
  5677.     if [lempty $search] {
  5678.         ErrorPush errStack 0 SCO_DNS_ERR_NO_SEARCH
  5679.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5680.         VtUnLock
  5681.         return
  5682.     }
  5683.     set SEARCH_VAL $search
  5684.     VxEndFormCB $cbs
  5685.     StatusTemp $Main(Dialog) [IntlLocalizeMsg SCO_DNS_MSG_SEARCHING]
  5686.     set mainlist [VxGetVar $Main(Dialog) mainlist]
  5687.     set found [browser:Search $search highlight]
  5688.     StatusRestore $Main(Dialog)
  5689.     if {$found == 0} {
  5690.     VtShow [VtWarningDialog $Main(Dialog).needPort \
  5691.                 -ok \
  5692.                 -message [IntlLocalizeMsg SCO_DNS_MSG_NOT_FOUND [list $search]] \
  5693.               ]
  5694.     }
  5695.     VtUnLock
  5696. }
  5697. proc SearchCB {cbs} {
  5698.     global SEARCH_VAL
  5699.     keylget cbs dialog dialog
  5700.     set form [VtFormDialog $dialog.search \
  5701.                 -ok \
  5702.                 -okCallback DoSearchCB \
  5703.                 -autoLock DoSearchCB \
  5704.                 -cancel \
  5705.                 -cancelCallback VxEndFormCB \
  5706.                 -cancelButton CANCEL \
  5707.                 -help \
  5708.                 -title [IntlLocalizeMsg SCO_DNS_MSG_SEARCH_TITLE] ]
  5709.     set alform [SaAlignedForm $form.align [list \
  5710.                         [list SCO_DNS_MSG_SEARCH \
  5711.                               [list VtText \
  5712.                 -columns 15 \
  5713.                         -shortHelpCallback SaShortHelpCB \
  5714.                         -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_SEARCH_SH] ]] \
  5715.         ]]
  5716.     set sep [VtSeparator $form.sep1 -horizontal \
  5717.         -leftSide FORM -rightSide FORM \
  5718.         -MOTIF_leftOffset -5 -MOTIF_rightOffset -5 \
  5719.         -topSide $alform -CHARM_topOffset 1]
  5720.     set status [SaStatusBar $form.status 0]
  5721.     VtSetValues $sep -bottomSide $status -bottomOffset 0
  5722.     VxSetVar $form search  [VxGetVar $alform widget1]
  5723.     if [info exists SEARCH_VAL] {
  5724.     VtSetValues [VxGetVar $form search] -value $SEARCH_VAL
  5725.     }
  5726.     VtShow $form
  5727.     VtUnLock
  5728. }
  5729. proc DoTransferCB {cbs} {
  5730.     global ZONES
  5731.     global managedHost
  5732.     keylget cbs dialog dialog
  5733.     set zoneW   [VxGetVar $dialog zone]
  5734.     set serverW [VxGetVar $dialog server]
  5735.     set zone   [VtGetValues $zoneW -value]
  5736.     set server [getIPwidgetValue $serverW]
  5737.     set zoneInfo $ZONES($zone)
  5738.     set type [lindex $zoneInfo 0]
  5739.     if [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  5740.     set type "dNSPrimary"
  5741.     } elseif [cequal $type [IntlLocalizeMsg SCO_DNS_MSG_SECONDARY]] {
  5742.     set type "dNSSecondary"
  5743.     } else {
  5744.     set type "dNSStub"
  5745.     }
  5746.     set objcall [list ObjectGet [list sco $type] \
  5747.           [SetInstance $zone] file]
  5748.     set bmipResponse [SaMakeObjectCall $objcall]
  5749.     set firstBmip [lindex $bmipResponse 0]
  5750.     set errStack [BmipResponseErrorStack firstBmip]
  5751.     if { ![lempty $errStack] } {
  5752.             ErrorPush errStack 0 SCO_DNS_ERR_GET_SOA
  5753.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5754.             VtUnLock
  5755.             return
  5756.     } else {
  5757.     set attrs [BmipResponseAttrValList firstBmip]
  5758.         set file [keylget attrs file]
  5759.     }
  5760.     if [ErrorCatch errStack 0 \
  5761.     "RunRemoteCmd $managedHost /usr/sbin/named-xfer \
  5762.         \"-z $zone -f $file $server\" \"SCO_DNS_ERR_UNIX\"" \
  5763.         {} SCO_DNS_ERR_UNIX] {
  5764.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5765.     }
  5766.     VxEndFormCB $cbs
  5767.     VtUnLock
  5768. }
  5769. proc TransferCB {cbs} {
  5770.     global ZONES ZONE
  5771.     keylget cbs dialog dialog
  5772.     set zones [GetZones]
  5773.     set form [VtFormDialog $dialog.transfer \
  5774.                   -title [IntlLocalizeMsg SCO_DNS_MSG_TRANSFER_TITLE] \
  5775.                   -ok \
  5776.                   -okCallback DoTransferCB \
  5777.                   -autoLock DoTransferCB \
  5778.                   -cancel \
  5779.                   -cancelCallback VxEndFormCB \
  5780.                   -cancelButton CANCEL \
  5781.                   -help \
  5782.                  ]
  5783.     set alform [SaAlignedForm $form.align [list \
  5784.         [list SCO_DNS_MSG_ZONE \
  5785.             [list VtComboBox \
  5786.             -readOnly -columns 15 \
  5787.             -itemList $zones \
  5788.             -value $ZONE \
  5789.             -shortHelpCallback SaShortHelpCB \
  5790.             -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_ZONE_SH] ]] \
  5791.         [list SCO_DNS_MSG_SERVER \
  5792.             [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  5793.         ]]
  5794.     VtSetValues $alform -rightSide FORM
  5795.     VtSetValues [VxGetVar $alform widget1] -rightSide NONE
  5796.     VtSetValues [VxGetVar $alform form2] -MOTIF_topOffset 20 -CHARM_topOffset 1
  5797.     VtSetValues [VxGetVar $alform widget2] -rightSide NONE
  5798.     createIPwidget [VxGetVar $alform widget2] "..." SCO_DNS_MSG_SERVER_SH
  5799.     set sep1 [VtSeparator $form.sep1 -horizontal -leftSide FORM \
  5800.         -rightSide FORM -leftOffset -5 -rightOffset -5]
  5801.     set status [SaStatusBar $form.status 0]
  5802.     VtSetValues $sep1 -bottomSide $status -bottomOffset 0
  5803.     VxSetVar $form zone   [VxGetVar $alform widget1]
  5804.     VxSetVar $form server [VxGetVar $alform widget2]
  5805.     VtShow $form
  5806.     VtUnLock
  5807. }
  5808. proc ImportCB {cbs} {
  5809.     global HOST_FILE
  5810.     keylget cbs dialog dialog
  5811.     if ![info exists HOST_FILE] {
  5812.     set HOST_FILE /etc/hosts
  5813.     }
  5814.     VtShow [VtFileSelectionDialog $dialog.fileSelect \
  5815.     -title [IntlLocalizeMsg SCO_DNS_MSG_TEST_TITLE] \
  5816.     -okCallback "DoImportCB $dialog" \
  5817.     -filter [format "%s/*" [file dirname $HOST_FILE]] \
  5818.     -selection $HOST_FILE]
  5819.     VtUnLock
  5820. }
  5821. proc DoImportCB {dialog cbs} {
  5822.     global Main ZONE ZONES DEFAULTS
  5823.     global NETWORKS HOST_FILE host_file
  5824.     keylget cbs selection pathname
  5825.     if {![owner file exists $pathname]} {
  5826.     VtShow [VtWarningDialog $Main(Dialog).needPort -ok \
  5827.         -message [IntlLocalizeMsg SCO_DNS_MSG_NOT_FOUND [list $pathname]] \
  5828.     ]
  5829.     VtUnLock
  5830.     return
  5831.     }
  5832.     set HOST_FILE $pathname
  5833.     set host_file $pathname        ;# dnsOsa global - not good!
  5834.     StatusTemp $Main(Dialog) [IntlLocalizeMsg SCO_DNS_MSG_IMPORTING]
  5835.     set records {}
  5836.     set objcall [list ObjectGet -scope 1 {sco hostTab} \
  5837.         [SetInstance /etc/hosts] name]
  5838.     set bmipResponse [SaMakeObjectCall $objcall]
  5839.     set firstBmip [lindex $bmipResponse 0]
  5840.     set errStack [BmipResponseErrorStack firstBmip]
  5841.     if { ![lempty $errStack] } {
  5842.          ErrorPush errStack 0 SCO_DNS_ERR_GET_SERVER_CONFIG
  5843.         SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5844.         VtUnLock
  5845.         StatusRestore $Main(Dialog)
  5846.         return
  5847.     } else {
  5848.     foreach item $bmipResponse {
  5849.         set attrs [BmipResponseAttrValList item]
  5850.         lappend records [keylget attrs name]
  5851.     }
  5852.     }
  5853.     set default(mx) {}
  5854.     set pref 5
  5855.     foreach exchanger $DEFAULTS(MX_exchangers) {
  5856.     lappend default(mx) [list $pref $exchanger]
  5857.     incr pref 5        ;# 5 step increments
  5858.     }
  5859.     keylset default(hinfo) hw $DEFAULTS(HINFO_hw)
  5860.     keylset default(hinfo) os $DEFAULTS(HINFO_os)
  5861.     set default(rp) [list $DEFAULTS(RP_owner) $DEFAULTS(RP_mx)]
  5862.     foreach record $records {
  5863.         set objcall [list ObjectGet {sco hostTabEntry} \
  5864.                     [SetInstance "/etc/hosts $record"] \
  5865.                     {addrList aliasList comment}]
  5866.         set bmipResponse [SaMakeObjectCall $objcall]
  5867.         set firstBmip [lindex $bmipResponse 0]
  5868.         set errStack [BmipResponseErrorStack firstBmip]
  5869.         if { ![lempty $errStack] } {
  5870.                ErrorPush errStack 0 SCO_DNS_ERR_GET_SERVER_CONFIG
  5871.             SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  5872.             VtUnLock
  5873.             StatusRestore $Main(Dialog)
  5874.             return
  5875.         } else {
  5876.         set attrs [BmipResponseAttrValList firstBmip]
  5877.         keylget attrs aliasList aliases
  5878.         if {[cequal $record $aliases]} {
  5879.             keylset attrs aliasList {}
  5880.         }
  5881.         keylget attrs comment   txt
  5882.         keyldel attrs comment
  5883.         if [lempty $txt] {
  5884.             keylset attrs txtList {}
  5885.         } else {
  5886.             keylset attrs txtList [list $txt]
  5887.         }
  5888.         keylset attrs mxList $default(mx)
  5889.         keylset attrs rpList [list $default(rp)]
  5890.         keylset attrs hinfoList [list $default(hinfo)]
  5891.         }
  5892.     keylget attrs addrList addr
  5893.     if [cequal [lindex [split $addr .] 0] "127"] {
  5894.         continue
  5895.     }
  5896.     set found 0
  5897.         foreach net [keylget NETWORKS $ZONE] {
  5898.         if {[string first $net $addr] == 0} {
  5899.         if {[cequal [string index $addr [string length $net]] "."]} {
  5900.             set found 1
  5901.             break
  5902.         }
  5903.         }
  5904.     }
  5905.     if {! $found} {
  5906.         continue
  5907.     }
  5908.     keylget attrs aliasList aliasList
  5909.     set name [lindex [split [lindex $aliasList end] .] 0]
  5910.     set index [lsearch -exact $aliasList $name]
  5911.     if {$index != -1} {
  5912.        lvarpop aliasList $index 
  5913.        keylset attrs aliasList $aliasList
  5914.     }
  5915.     set hostAttrs($name) $attrs
  5916.     if {[info exists hostAddrs($name)]} {
  5917.         lappend hostAddrs($name) $addr
  5918.     } else {
  5919.         set hostAddrs($name) $addr
  5920.     }
  5921.     }
  5922.     for_array_keys hostname hostAttrs {
  5923.     set attrs $hostAttrs($hostname)
  5924.     keylset attrs addrList $hostAddrs($hostname)
  5925.         set objcall [list ObjectCreate {sco hostTabEntry} \
  5926.             [SetInstance "$ZONE $hostname"] $attrs]
  5927.         set bmipResponse [SaMakeObjectCall $objcall]
  5928.         set firstBmip [lindex $bmipResponse 0]
  5929.         set errStack [BmipResponseErrorStack firstBmip]
  5930.         if { ![lempty $errStack] } {
  5931.         continue
  5932.         } 
  5933.     keylset attrs hinfoList $default(hinfo)
  5934.         set recData {}
  5935.         keylset recData type "A"
  5936.         keylset recData name $hostname
  5937.         keylset recData data $attrs
  5938.     DisplayRecord A $recData 0 COLLAPSED
  5939.     }
  5940.     browser:ReDisplay        ;#sort browser
  5941.     StatusRestore $Main(Dialog)
  5942.     VtUnLock
  5943. }
  5944. proc DoTestCB {cbs} {
  5945.     global managedHost
  5946.     keylget cbs dialog dialog
  5947.     set data    [VxGetVar $dialog data]
  5948.     set results [VxGetVar $dialog results]
  5949.     set value   [VtGetValues $data -value]
  5950.     VtSetValues $results -value ""
  5951.     set objcall [list ObjectAction {sco dNSystem} \
  5952.                         [SetInstance NULL] "test" $value]
  5953.     set bmipResponse [SaMakeObjectCall $objcall]
  5954.     set firstBmip [lindex $bmipResponse 0]
  5955.     set errStack [BmipResponseErrorStack firstBmip]
  5956.     if { ![lempty $errStack] } {
  5957.             set output [ErrorText errStack]
  5958.     } else {
  5959.             set output [BmipResponseActionInfo firstBmip]
  5960.     }
  5961.     VtSetValues $results -value $output
  5962.     VtSetValues $data -value ""
  5963.     VtUnLock
  5964. }
  5965. proc SetDoItButtonSensitivityCB {cbs} {
  5966.     keylget cbs dialog dialog
  5967.     set data [VxGetVar $dialog data]
  5968.     set doit [VxGetVar $dialog doit]
  5969.     set value [VtGetValues $data -value]
  5970.     if [lempty $value] {
  5971.         VtSetSensitive $doit 0
  5972.     } else {
  5973.         VtSetSensitive $doit 1
  5974.     }
  5975. }
  5976. proc TestCB {cbs} {
  5977.     keylget cbs dialog dialog
  5978.     set form [VtFormDialog $dialog.test \
  5979.                   -title [IntlLocalizeMsg SCO_DNS_MSG_TEST_TITLE] \
  5980.                   -ok -okLabel [IntlLocalizeMsg SCO_DNS_MSG_CLOSE] \
  5981.                   -okCallback VxEndFormCB \
  5982.                   -cancelButton OK \
  5983.                   -help \
  5984.                  ]
  5985.     set alform [SaAlignedForm $form.align [list \
  5986.                         [list SCO_DNS_MSG_HOST_PROMPT \
  5987.                   [list VtForm -marginWidth 0 -marginHeight 0 ]] \
  5988.                         [list SCO_DNS_MSG_RESULTS \
  5989.                   [list VtText \
  5990.                 -rows 5 -columns 70 \
  5991.                     -shortHelpCallback SaShortHelpCB \
  5992.                     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_RESULTS_SH] ]] \
  5993.         ]]
  5994.     VtSetValues $alform -leftSide FORM -rightSide FORM
  5995.     VtSetValues [VxGetVar $alform label2] -bottomSide NONE
  5996.     set subform [VxGetVar $alform widget1]
  5997.     set data [VtText $subform.data \
  5998.     -valueChangedCallback SetDoItButtonSensitivityCB \
  5999.     -callback DoTestCB \
  6000.     -autoLock DoTestCB \
  6001.         -shortHelpCallback SaShortHelpCB \
  6002.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_TEST_PROMPT_SH] \
  6003.     -topSide FORM -bottomSide FORM]
  6004.     set doit [VtPushButton $subform.doit \
  6005.     -leftSide $data -topSide FORM -bottomSide FORM \
  6006.         -label "[IntlLocalizeMsg SCO_DNS_MSG_QUERY]" \
  6007.     -callback DoTestCB \
  6008.     -autoLock DoTestCB \
  6009.         -MOTIF_labelCenter \
  6010.         -shortHelpCallback SaShortHelpCB \
  6011.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_QUERY_SH]]
  6012.     set sep1 [VtSeparator $form.sep1 -horizontal -leftSide FORM \
  6013.         -rightSide FORM -leftOffset -5 -rightOffset -5]
  6014.     set status [SaStatusBar $form.status 0]
  6015.     VtSetValues $sep1 -bottomSide $status -bottomOffset 0
  6016.     VtSetSensitive $doit 0
  6017.     VxSetVar $form data    $data
  6018.     VxSetVar $form results [VxGetVar $alform widget2]
  6019.     VxSetVar $form doit    $doit
  6020.     VtShow $form
  6021.     VtUnLock
  6022. }
  6023. proc RebuildZone {zone} {
  6024.     global Main ZONES
  6025.     set zoneInfo $ZONES($zone)
  6026.     set zonetype [lindex $zoneInfo 0]
  6027.     if ![cequal $zonetype [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  6028.     return
  6029.     }
  6030.     set zonetype "dNSPrimary"
  6031.     set data {}
  6032.     set networks [lindex $zoneInfo 1]
  6033.     foreach net $networks {
  6034.     set network [ReverseAddr $net]
  6035.         set objcall [list ObjectGet [list sco $zonetype] \
  6036.               [SetInstance "$network.in-addr.arpa"] \
  6037.               {file}]
  6038.         set bmipResponse [SaMakeObjectCall $objcall]
  6039.         set firstBmip [lindex $bmipResponse 0]
  6040.         set errStack [BmipResponseErrorStack firstBmip]
  6041.         if { ![lempty $errStack] } {
  6042.              ErrorPush errStack 1 SCO_DNS_ERR_GET_SERVER_CONFIG
  6043.         } else {
  6044.         set attrs [BmipResponseAttrValList firstBmip]
  6045.             set file  [keylget attrs file]
  6046.     }
  6047.     lappend data [list $net $file]
  6048.     }
  6049.     set objcall [list ObjectAction {sco dNSystem} \
  6050.         [SetInstance NULL] "create_ptr" [list $zone $data]]
  6051.     set bmipResponse [SaMakeObjectCall $objcall]
  6052.     set firstBmip [lindex $bmipResponse 0]
  6053.     set errStack [BmipResponseErrorStack firstBmip]
  6054.     if { ![lempty $errStack] } {
  6055.     ErrorPush errStack 1 SCO_DNS_ERR_BUILD_PTR_FILES
  6056.     }
  6057. }
  6058. proc DoUpdateCB {cbs} {
  6059.     global ZONES ZONE Main
  6060.     set info [VtInformationDialog $Main(Dialog).info \
  6061.         -message [IntlLocalizeMsg SCO_DNS_MSG_UPDATING] \
  6062.     -ok ]
  6063.     VtShow $info
  6064.     if [ErrorCatch errStack 0 "CreateCache" {}] {
  6065.         SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  6066.     VtDestroyDialog $info
  6067.         VtUnLock
  6068.         return
  6069.     }
  6070.     VtDestroyDialog $info
  6071.     VtUnLock
  6072. }
  6073. proc UpdateCB { cbs } {
  6074.     keylget cbs dialog dialog
  6075.     set YN [VtQuestionDialog $dialog.YN \
  6076.         -okCallback DoUpdateCB \
  6077.         -autoLock DoUpdateCB \
  6078.         -cancel \
  6079.         -message [IntlLocalizeMsg SCO_DNS_MSG_UPDATE_ROOT] ]
  6080.     VtShow $YN
  6081.     VtUnLock
  6082. }
  6083. proc EnableDisableCB {cbs} {
  6084.     keylget cbs dialog dialog
  6085.     if {[ErrorCatch errStack 0 "ServerRunning" serverIsRunning] != 0} then {
  6086.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  6087.     VtUnLock
  6088.     return
  6089.     }
  6090.     if {! $serverIsRunning} {
  6091.     SaveConfig master
  6092.     }
  6093.     set w [keylget cbs widget]
  6094.     set newStatus [SetServerMenu $w]
  6095.     SetServerStatus $newStatus
  6096.     if {[ErrorCatch errStack 0 "ServerRunning" serverIsRunning] != 0} then {
  6097.     SaDisplayErrorStacks $dialog.err [list $errStack] NOHELP
  6098.     VtUnLock
  6099.     return
  6100.     }
  6101.     SetServerMenu $w $serverIsRunning
  6102.     VtUnLock
  6103. }
  6104. proc SetServerMenu {w {status {}}} {
  6105.     set enabled     [IntlLocalizeMsg SCO_DNS_MSG_MENU_ENABLED]
  6106.     set disabled [IntlLocalizeMsg SCO_DNS_MSG_MENU_DISABLED]
  6107.     if [lempty $status] {
  6108.     set oldVal [VtGetValues $w -label]
  6109.     } else {
  6110.     set oldVal [expr {($status == 0) ? "$enabled" : "$disabled"}]
  6111.     }
  6112.     if [cequal $oldVal $enabled] {
  6113.     set newStatus disable
  6114.     VtSetValues $w -label $disabled \
  6115.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_DISABLED_SH]
  6116.     } else {
  6117.     set newStatus enable
  6118.     VtSetValues $w -label $enabled \
  6119.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_ENABLED_SH]
  6120.     }
  6121.     return $newStatus
  6122. }
  6123. proc BuildMenu {serverStatus} {
  6124.     global Main 
  6125.     set UpperMenu [VtMenuBar $Main(Dialog).uppermenu \
  6126.            -helpMenuItemList [SaHelpGetOptionsList] ]
  6127.     set hostMenu [VtPulldown $UpperMenu.hostMenu \
  6128.                 -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_HOST] \
  6129.                 -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_HOST_MN] ]
  6130.     set openHost [VtPushButton $hostMenu.openHost \
  6131.                 -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_OPEN_HOST] \
  6132.                 -shortHelpString  [IntlLocalizeMsg SCO_DNS_MSG_MENU_OPEN_HOST_SH] \
  6133.                 -shortHelpCallback SaShortHelpCB \
  6134.                 -callback SaOpenHostCB -autoLock SaOpenHostCB \
  6135.                 -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_OPEN_HOST_MN] ]
  6136.     VtSeparator $hostMenu.separator
  6137.     set exit [VtPushButton $hostMenu.exit \
  6138.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_EXIT] \
  6139.     -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_EXIT_MN] \
  6140.     -shortHelpCallback SaShortHelpCB \
  6141.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_EXIT_SH] \
  6142.     -callback ClosePrgCB \
  6143.     -autoLock ClosePrgCB ]
  6144.     set serverMenu [VtPulldown $UpperMenu.serverMenu \
  6145.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_SERVER] \
  6146.     -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_SERVER_MN] ]
  6147.     set forward [VtPushButton $serverMenu.forward \
  6148.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_FORWARDERS] \
  6149.     -callback GetFwdersCB \
  6150.     -autoLock GetFwdersCB \
  6151.         -shortHelpCallback SaShortHelpCB \
  6152.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_FORWARDERS_SH] ]
  6153.     set sortlist [VtPushButton $serverMenu.sortlist \
  6154.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_SORTLIST] \
  6155.     -callback GetSortlistCB \
  6156.     -autoLock GetSortlistCB \
  6157.         -shortHelpCallback SaShortHelpCB \
  6158.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_SORTLIST_SH] ]
  6159.     set bogusns [VtPushButton $serverMenu.bogusns \
  6160.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_BOGUSNS] \
  6161.     -callback GetBogusnsCB \
  6162.     -autoLock GetBogusnsCB \
  6163.         -shortHelpCallback SaShortHelpCB \
  6164.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_BOGUSNS_SH] ]
  6165.     set xfernets [VtPushButton $serverMenu.xfernets \
  6166.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_XFERNETS] \
  6167.     -callback GetXfernetsCB \
  6168.     -autoLock GetXfernetsCB \
  6169.         -shortHelpCallback SaShortHelpCB \
  6170.         -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_XFERNETS_SH] ]
  6171.     set limits [VtPushButton $serverMenu.limits \
  6172.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_LIMITS] \
  6173.     -callback ConfigLimitsCB \
  6174.     -autoLock ConfigLimitsCB \
  6175.     -shortHelpCallback SaShortHelpCB \
  6176.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_LIMITS_SH] ]
  6177.     set options [VtPushButton $serverMenu.options \
  6178.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_OPTS] \
  6179.     -callback ConfigOptionsCB \
  6180.     -autoLock ConfigOptionsCB \
  6181.     -shortHelpCallback SaShortHelpCB \
  6182.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_OPTS_SH] ]
  6183.     set zoneMenu [VtPulldown $UpperMenu.zoneMenu \
  6184.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_ZONES] \
  6185.     -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_ZONES_MN] ]
  6186.     set zoneAdd [VtPushButton $zoneMenu.add \
  6187.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_ADD] \
  6188.     -callback AddZoneCB \
  6189.     -autoLock AddZoneCB \
  6190.     -shortHelpCallback SaShortHelpCB \
  6191.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_ADD_SH] ]
  6192.     set zoneModify [VtPushButton $zoneMenu.modify \
  6193.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_MOD] \
  6194.     -callback ModifyCB \
  6195.     -autoLock ModifyCB \
  6196.     -shortHelpCallback SaShortHelpCB \
  6197.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_MOD_SH] ]
  6198.     set zoneDelete [VtPushButton $zoneMenu.delete \
  6199.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEL] \
  6200.     -callback DeleteZoneCB \
  6201.     -autoLock DeleteZoneCB \
  6202.     -shortHelpCallback SaShortHelpCB \
  6203.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEL_SH] ]
  6204.     set recMenu [VtPulldown $UpperMenu.recMenu \
  6205.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_REC] \
  6206.     -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_REC_MN] ]
  6207.     set addMenu [VtPulldown $recMenu.addMenu \
  6208.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_ADD] \
  6209.     -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_ADD_MN] ]
  6210.     set hosts [VtPushButton $addMenu.hosts \
  6211.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_HOSTS] \
  6212.     -callback "AddHostCB 1" \
  6213.     -autoLock AddHostCB \
  6214.     -shortHelpCallback SaShortHelpCB \
  6215.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_HOSTS_SH] ]
  6216.     set import [VtPushButton $addMenu.import \
  6217.     -callback ImportCB \
  6218.     -autoLock ImportCB \
  6219.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_IMPORT] \
  6220.     -shortHelpCallback SaShortHelpCB \
  6221.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_IMPORT_SH] ]
  6222.     VtSeparator $addMenu.separator
  6223.     set modify [VtPushButton $recMenu.modify \
  6224.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_MOD] \
  6225.     -callback ModifyCB \
  6226.     -autoLock ModifyCB \
  6227.     -shortHelpCallback SaShortHelpCB \
  6228.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_MOD_SH] ]
  6229.     set delete [VtPushButton $recMenu.delete \
  6230.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEL] \
  6231.     -callback DeleteHostCB \
  6232.     -autoLock DeleteHostCB \
  6233.     -shortHelpCallback SaShortHelpCB \
  6234.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEL_SH] ]
  6235.     set viewMenu [VtPulldown $UpperMenu.viewMenu \
  6236.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_VIEW] \
  6237.     -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_VIEW_MN] ]
  6238.     set change [VtPushButton $viewMenu.zones \
  6239.     -callback ViewZonesCB \
  6240.     -autoLock ViewZonesCB \
  6241.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_VIEW_ZONES] \
  6242.     -shortHelpCallback SaShortHelpCB \
  6243.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_ZONES_SH] ]
  6244.     set zonerec [VtPushButton $viewMenu.zoneRecords \
  6245.     -callback ViewZoneRecordsCB \
  6246.     -autoLock ViewZoneRecordsCB \
  6247.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_VIEW_ZONEREC] \
  6248.     -shortHelpCallback SaShortHelpCB \
  6249.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_VIEW_ZONEREC_SH] ]
  6250.     VtSeparator $viewMenu.separator -allowDuplicateName
  6251.     set sort [VtPushButton $viewMenu.sort \
  6252.     -callback SortByCB \
  6253.     -autoLock SortByCB \
  6254.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_SORT] \
  6255.     -shortHelpCallback SaShortHelpCB \
  6256.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_SORT_SH] ]
  6257.     set search [VtPushButton $viewMenu.search \
  6258.     -callback SearchCB \
  6259.     -autoLock SearchCB \
  6260.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_SEARCH] \
  6261.     -shortHelpCallback SaShortHelpCB \
  6262.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_SEARCH_SH] ]
  6263.     VtSeparator $viewMenu.separator -allowDuplicateName
  6264.     browser:MenuOpts "SCO_DNS" $viewMenu $Main(Dialog)
  6265.     set optMenu [VtPulldown $UpperMenu.optMenu \
  6266.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_OPTIONS] \
  6267.     -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_OPTIONS_MN] ]
  6268.     set defaultMenu [VtPulldown $optMenu.defaults \
  6269.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEFAULTS] \
  6270.     -mnemonic [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEFAULTS_MN] ]
  6271.     set defSoa [VtPushButton $defaultMenu.defSoa \
  6272.     -callback "SoaCB DEFAULTS" \
  6273.     -autoLock SoaCB \
  6274.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_SOA] \
  6275.     -shortHelpCallback SaShortHelpCB \
  6276.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEFSOA_SH] ]
  6277.     set defMx [VtPushButton $defaultMenu.defMx \
  6278.     -callback "MxCB DEFAULTS" \
  6279.     -autoLock MxCB \
  6280.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_MX] \
  6281.     -shortHelpCallback SaShortHelpCB \
  6282.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEFMX_SH] ]
  6283.     set defRp [VtPushButton $defaultMenu.defRp \
  6284.     -callback "RpCB DEFAULTS" \
  6285.     -autoLock RpCB \
  6286.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_RP] \
  6287.     -shortHelpCallback SaShortHelpCB \
  6288.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEFRP_SH] ]
  6289.     set defHinfo [VtPushButton $defaultMenu.defHinfo \
  6290.     -callback "HinfoCB DEFAULTS" \
  6291.     -autoLock HinfoCB \
  6292.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_HINFO] \
  6293.     -shortHelpCallback SaShortHelpCB \
  6294.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_DEFHINFO_SH] ]
  6295.     set transfer [VtPushButton $optMenu.transfer \
  6296.     -callback TransferCB \
  6297.     -autoLock TransferCB \
  6298.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_TRANSFER] \
  6299.     -shortHelpCallback SaShortHelpCB \
  6300.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_TRANSFER_SH] ]
  6301.     set update [VtPushButton $optMenu.update \
  6302.     -callback UpdateCB \
  6303.     -autoLock UpdateCB \
  6304.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_UPDATE] \
  6305.     -shortHelpCallback SaShortHelpCB \
  6306.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_UPDATE_SH] ]
  6307.     set test [VtPushButton $optMenu.test \
  6308.     -callback TestCB \
  6309.     -autoLock TestCB \
  6310.     -label [IntlLocalizeMsg SCO_DNS_MSG_MENU_TEST] \
  6311.     -shortHelpCallback SaShortHelpCB \
  6312.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_TEST_SH] ]
  6313.     VtSeparator $optMenu.separator -allowDuplicateName
  6314.     set enable [VtPushButton $optMenu.enable \
  6315.     -shortHelpCallback SaShortHelpCB \
  6316.     -shortHelpString [IntlLocalizeMsg SCO_DNS_MSG_MENU_ENABLED_SH] \
  6317.     -callback EnableDisableCB \
  6318.     -autoLock EnableDisableCB ]
  6319.     SetServerMenu $enable $serverStatus
  6320.     VtSeparator $optMenu.separator -allowDuplicateName
  6321.     SaShortHelpMenuOptions $optMenu
  6322.     VxSetVar $Main(Dialog) change    $change
  6323.     VxSetVar $Main(Dialog) zonerec    $zonerec
  6324.     VxSetVar $Main(Dialog) zoneadd    $zoneAdd
  6325.     VxSetVar $Main(Dialog) zonemodify    $zoneModify
  6326.     VxSetVar $Main(Dialog) zonedelete    $zoneDelete
  6327.     VxSetVar $Main(Dialog) sort        $sort
  6328.     VxSetVar $Main(Dialog) search      $search
  6329.     VxSetVar $Main(Dialog) import      $import 
  6330.     VxSetVar $Main(Dialog) transfer    $transfer
  6331.     VxSetVar $Main(Dialog) test        $test
  6332.     VxSetVar $Main(Dialog) hosts       $hosts
  6333.     VxSetVar $Main(Dialog) modify      $modify
  6334.     VxSetVar $Main(Dialog) delete      $delete
  6335.     VxSetVar $Main(Dialog) view        $viewMenu
  6336. }
  6337. proc SetSensitivityCB {cbs} {
  6338.     global Main ZONES
  6339.     set mainlist    [VxGetVar $Main(Dialog) mainlist]
  6340.     set sort        [VxGetVar $Main(Dialog) sort]
  6341.     set search      [VxGetVar $Main(Dialog) search]
  6342.     set import      [VxGetVar $Main(Dialog) import]
  6343.     set transfer    [VxGetVar $Main(Dialog) transfer]
  6344.     set test        [VxGetVar $Main(Dialog) test]
  6345.     set zones [GetZones]
  6346.     set selected [VtDrawnListGetSelectedItem $mainlist]
  6347.     if {$selected == 0} {
  6348.     set pos     [lindex [VtDrawnListGetSelectedItem $mainlist \
  6349.                 -byPositionList] 0]
  6350.         set parent  [browser:FindItemParent $pos]
  6351.         set entry   [browser:GetItemFromPos $parent]
  6352.         set primary [lindex $entry 0]
  6353.         set type    [lindex $primary 0]
  6354.     }
  6355.     set primZones {}
  6356.     foreach zone $zones {
  6357.     set entry $ZONES($zone)
  6358.     if [cequal [lindex $entry 0] [IntlLocalizeMsg SCO_DNS_MSG_PRIMARY]] {
  6359.         lappend primZones $zone
  6360.     }
  6361.     }
  6362.     if [lempty $zones] {
  6363.         VtSetSensitive $test 0
  6364.     } else {
  6365.         VtSetSensitive $test 1
  6366.     }
  6367.     if [lempty $primZones] {
  6368.         VtSetSensitive $transfer 0
  6369.         VtSetSensitive $search 0
  6370.         VtSetSensitive $sort 0
  6371.     } else {
  6372.         VtSetSensitive $transfer 1
  6373.         VtSetSensitive $search 1
  6374.         VtSetSensitive $sort 1
  6375.     }
  6376.     browser:SetSensitivity $Main(Dialog)
  6377.     ZoneSetSensitivity $Main(Dialog)
  6378.     VtUnLock -once
  6379. }
  6380. proc CreateCache {} {
  6381.     set objcall [list ObjectAction {sco dNSystem} \
  6382.                         [SetInstance NULL] "create_root" {}]
  6383.     set bmipResponse [SaMakeObjectCall $objcall]
  6384.     set firstBmip [lindex $bmipResponse 0]
  6385.     set errStack [BmipResponseErrorStack firstBmip]
  6386.     if { ![lempty $errStack] } {
  6387.         ErrorPush errStack 1 SCO_DNS_ERR_UPDATE_ROOT
  6388.     }
  6389. }
  6390. proc RestartServer {} {
  6391.     global Main
  6392.     set objcall [list ObjectAction {sco dNSystem} \
  6393.         [SetInstance NULL] {restart} {}]
  6394.     set bmipResponse [SaMakeObjectCall $objcall]
  6395.     set firstBmip [lindex $bmipResponse 0]
  6396.     set errStack [BmipResponseErrorStack firstBmip]
  6397.     if { ![lempty $errStack] } {
  6398.     ErrorPush errStack 0 SCO_DNS_ERR_GET_SERVER_CONFIG
  6399.     }
  6400. }
  6401. proc SetServerStatus {status} {
  6402.     global Main
  6403.     set retVal {}
  6404.     set objcall [list ObjectAction {sco dNSystem} \
  6405.         [SetInstance NULL] [list $status] {}]
  6406.     set bmipResponse [SaMakeObjectCall $objcall]
  6407.     set firstBmip [lindex $bmipResponse 0]
  6408.     set errStack [BmipResponseErrorStack firstBmip]
  6409.     if { ![lempty $errStack] } {
  6410.     ErrorPush errStack 0 SCO_DNS_ERR_BUILD_PTR_FILES
  6411.     SaDisplayErrorStacks $Main(Dialog).err [list $errStack] NOHELP
  6412.     } else {
  6413.     set retVal [BmipResponseActionInfo firstBmip]
  6414.     }
  6415.     return $retVal
  6416. }
  6417. proc ServerRunning {} {
  6418.     global Main
  6419.     set retVal 0
  6420.     set objcall [list ObjectAction {sco dNSystem} \
  6421.         [SetInstance NULL] {status} {}]
  6422.     set bmipResponse [SaMakeObjectCall $objcall]
  6423.     set firstBmip [lindex $bmipResponse 0]
  6424.     set errStack [BmipResponseErrorStack firstBmip]
  6425.     if { ![lempty $errStack] } {
  6426.     ErrorPush errStack 1 SCO_DNS_ERR_BUILD_PTR_FILES
  6427.     } else {
  6428.     set retVal [BmipResponseActionInfo firstBmip]
  6429.     }
  6430.     return $retVal
  6431. }
  6432. proc dnsGUI {} {
  6433.     global Main managedHost versionNumber DEFAULTS DEFAULTS_MODIFIED
  6434.     global ZONE ICON_PATH SORT VIEW
  6435.     set shortHostname [SaHostExtractSystemName $managedHost]
  6436.     set Main(debug) FALSE
  6437.     set VIEW ZONES
  6438.     set SORT(ITEM) host
  6439.     set SORT(ORDER) up
  6440.     set dnsConf [VtOpen dnsConf dnsGUI]
  6441.     VtSetAppValues $dnsConf \
  6442.     -versionString [IntlLocalizeMsg SCO_DNS_MSG_VERSION $versionNumber]
  6443.     set Main(Dialog) [VtFormDialog $dnsConf.mainD \
  6444.         -title [IntlLocalizeMsg SCO_DNS_MSG_TITLE "$shortHostname"] \
  6445.         -marginHeight 0 -marginWidth 0 \
  6446.         -wmShadowThickness 0 \
  6447.         -wmCloseCallback ClosePrgCB \
  6448.         ]
  6449.     VtLock
  6450.     if {[ErrorCatch errStack 0 "ServerRunning" status] != 0} then {
  6451.     SaDisplayErrorStacks $Main(Dialog).load_err \
  6452.             [list $errStack] NOHELP \
  6453.             {VtClose; exit 0;}
  6454.     VtUnLock
  6455.     return
  6456.     }
  6457.     BuildMenu $status
  6458.     set prompt [VtLabel $Main(Dialog).mode \
  6459.         -MOTIF_leftOffset 4 -MOTIF_topOffset 20 \
  6460.         -CHARM_leftOffset 1 \
  6461.         -leftSide FORM \
  6462.             -label [IntlLocalizeMsg SCO_DNS_MSG_HOSTS [list "<none>" "$managedHost"]] ]
  6463.     set mainlist [VtDrawnList $Main(Dialog).mainlist \
  6464.         -callback SetSensitivityCB \
  6465.         -defaultCallback browser:ExpandCollapseCB \
  6466.         -autoLock {SetSensitivityCB browser:ExpandCollapseCB} \
  6467.         -selection SINGLE -horizontalScrollBar 1 \
  6468.         -columns 75 \
  6469.         -MOTIF_rows 8 -CHARM_rows 12 \
  6470.         -leftSide FORM -rightSide FORM \
  6471.                -MOTIF_leftOffset 4 -MOTIF_rightOffset 4 \
  6472.         -iconList [list    "$ICON_PATH/host.px" \
  6473.                 "$ICON_PATH/zone.px"] \
  6474.         -CHARM_iconList [list "H" "Z"] \
  6475.             ]
  6476.     VxSetVar $Main(Dialog) mainlist  $mainlist
  6477.     VxSetVar $Main(Dialog) prompt   $prompt
  6478.     set status [SaStatusBar $Main(Dialog).status 1]
  6479.     VtSetValues $mainlist -bottomSide $status
  6480.     SaCharmSetMaxFormDimensions $Main(Dialog)
  6481.     VtShow $Main(Dialog)
  6482.     if {[id userid] != 0 && !([isOwner] && \
  6483.     [isOwner -host $managedHost])} then {
  6484.         SaDisplayNoAuths $Main(Dialog).noAuthBox \
  6485.                [IntlLocalizeMsg SCO_DNS_MSG_APP_TITLE] \
  6486.                {VtClose; exit 0;} $managedHost
  6487.      VtUnLock
  6488.      return
  6489.     }
  6490.     SaStatusBarSet [VxGetVar $Main(Dialog) statusBar] \
  6491.            [IntlLocalizeMsg SCO_DNS_MSG_INITIALIZING]
  6492.     browser:Init $mainlist
  6493.     StatusTemp $Main(Dialog) [IntlLocalizeMsg SCO_DNS_MSG_LOAD_DEFAULTS]
  6494.     if {[ErrorCatch errStack 0 LoadDefaults {}] != 0} then {
  6495.         set ZONE ""
  6496.     set DEFAULTS(SOA_pic)     {}
  6497.     set DEFAULTS(SOA_refresh) 10800
  6498.      set DEFAULTS(SOA_retry)   1800
  6499.     set DEFAULTS(SOA_expire)  14000000
  6500.     set DEFAULTS(SOA_ttl)     86400
  6501.     set DEFAULTS(MX_exchangers)  {}
  6502.     set DEFAULTS(RP_owner)    {}
  6503.     set DEFAULTS(RP_mx)       {}
  6504.     set DEFAULTS(HINFO_hw)    {}
  6505.     set DEFAULTS(HINFO_os)    {}
  6506.         set DEFAULTS_MODIFIED 1
  6507.         if {[ErrorCatch errStack 0 "SaveDefaults" {}] != 0} then {
  6508.         SaDisplayErrorStacks $Main(Dialog).save_err \
  6509.                      [list $errStack] NOHELP
  6510.         }
  6511.     }
  6512.     StatusRestore $Main(Dialog)
  6513.     if {[ErrorCatch errStack 0 "LoadServerConfig" {}] != 0} then {
  6514.     SaDisplayErrorStacks $Main(Dialog).load_err \
  6515.             [list $errStack] NOHELP \
  6516.             {VtClose; exit 0;}
  6517.     VtUnLock
  6518.     return
  6519.     }
  6520.     ViewZonesCB [list [list dialog $Main(Dialog)]]    ;# view zones
  6521.     SetSensitivityCB [list [list dialog $Main(Dialog)]]
  6522.     SaStatusBarClear [VxGetVar $Main(Dialog) statusBar]
  6523.     VtUnLock
  6524. }
  6525. loadlibindex /usr/lib/sysadm.tlib
  6526. set managedHost [GetManagedHost]
  6527. set versionNumber [SaGetSSOVersion]
  6528. set ICON_PATH /usr/lib/scoadmin/neticons
  6529. ErrorTopLevelCatch dnsGUI [IntlLocalizeMsg SCO_DNS_MSG_APP_TITLE]
  6530. VtMainLoop
  6531.