home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / MISC / NETWORK / NETLOC11.ZIP / NETLOCK.DOC next >
Encoding:
Text File  |  1991-07-29  |  26.2 KB  |  573 lines

  1.                                     NETLOCK
  2.                                     -------
  3.                                   Version 1.1
  4.                   Copyright 1st July 1991. All rights reserved.
  5.                                  Julian Byrne
  6.  
  7. Introduction
  8. ------------
  9.  
  10. NETLOCK enhances the security features of a Novell Netware network, on an
  11. MSDOS/PCDOS workstation, to include:
  12.  
  13. - Restricting an application to run only when the user is logged in to a
  14.   nominated file server.
  15. - Limiting the number of simultaneous users of an application.
  16. - Broadcasting a message to a nominated user when an application is run.
  17. - Logging to file an application's usage.
  18. - Password protection of an application.
  19.  
  20. It does this by modifying a copy of the binary of an application and making it
  21. execute-only. NETLOCK is run once and thereafter whenever the application is
  22. run the above actions will occur. Features of the program include:
  23.  
  24. - As secure as a local area network allows. The user must break network
  25.   security to stop the above actions occurring.
  26. - No extra memory occupied while application is running.
  27. - Works in a complex multi-server environment where network drives are
  28.   arbitrarily assigned to file servers.
  29. - Can be placed in a batch file to make application upgrades easier.
  30. - User's environment (LOGIN name, MAPped drives, access privileges and
  31.   environment variables) is not affected.
  32. - Password protection does not require network access.
  33.  
  34. Restrictions
  35. ------------
  36.  
  37. NETLOCK cannot be applied to applications which place overlays in the
  38. executable binary itself. NETLOCK will tell you if this is the case.
  39. See below for an alternative. Applications which place overlays in a separate
  40. file CAN be protected. ".COM" files cannot be protected but by using the
  41. public domain utility COMTOEXE they can be converted to ".EXE" form which can
  42. be protected. The size of an application on disk is increased by about 2K but
  43. by using the public domain utility LZEXE space can frequently be reduced to
  44. half that of the original application. Only MSDOS (not Windows) applications
  45. can be protected when running under Microsoft Windows. Windows support is
  46. planned for a future release.
  47.  
  48. Requirements
  49. ------------
  50.  
  51. NETLOCK has been tested under MSDOS 3.30A with Novell Netware 2.12, 2.15 and
  52. 3.10a. It should work with MSDOS 2.00 (or PCDOS equivalent) or greater and
  53. Novell Netware 2.0 or greater. It checks all system result codes and will let
  54. you know if there is an error. It makes a strong effort to not silently cause
  55. problems.
  56.  
  57. Usage
  58. -----
  59.  
  60. The one NETLOCK program can lock an application, unlock an application, and
  61. list an application lock log file. It determines which operation to perform
  62. based on the file it is applied to - an ordinary application, a locked
  63. application or a lock log file.
  64.  
  65. Usage - Locking an application
  66. ------------------------------
  67.  
  68. NETLOCK OrigAppl [Switches]          ; Original application left as "Appl.UNL"
  69. NETLOCK OrigAppl LockAppl [Switches] ; Original application unchanged
  70.  
  71. Switches and arguments can be entered in any order. No switch is mandatory.
  72. One or two application names must be given. The default is no application
  73. restrictions. In the following description [] denotes an optional value, "" a
  74. string value and | one of two possible values.
  75.  
  76. /?              List a two page usage message. Can be redirected to file.
  77. /D              List this program documentation. Can be redirected to file.
  78. /X              Make execute-only.
  79.                 More secure where user has access to a debugger.
  80.                 Default is non-execute-only, which is not recommended.
  81. /U [number]     Maximum number of simultaneous users. 0 means no limit.
  82.                 Default is a limit of one.
  83.                 If /U is not specified then the default is no limit.
  84. /L ["logfile"]  Name of log file. Default is "Application.LOG".
  85.                 If /L is not specified then the default is no logging.
  86.                 Log files should be given a non-obvious name (ie. a password)
  87.                 and placed in a directory for which the application user
  88.                 has only Write/Open/Create privileges.
  89. /N ["address"]  Name of user to be notified by broadcast.
  90.                 Default is "SUPERVISOR".
  91.                 If /N is not specified then the default is no broadcast.
  92. /P ["password"] Password. Not echoed when typed by application user.
  93.                 If no password is specified then one will be generated.
  94.                 If /P is not specified then the default is no password.
  95. /F "name"|hex   Name or hex address of file server application user is
  96.                 required to be logged in to. If /F is not specified then the
  97.                 default is the file server the output file or log file is on.
  98.                 A hex address is specified with a leading decimal digit.
  99.                 A name is specified without a leading decimal digit.
  100. /S "name"       Name of lock semaphore used to restrict simultaneous users.
  101.                 Default is randomly generated. Should be given a non-obvious
  102.                 name.
  103.  
  104. Messages output if:
  105.  
  106. /MF ["message"] Error accessing file server.
  107. /ML ["message"] Error accessing log file.
  108. /MA ["message"] Error accessing software lock (semaphore).
  109. /MU ["message"] User limit exceeded.
  110. /MP ["message"] Password is bad.
  111. /MQ ["message"] Prompting for password.
  112. /MS ["message"] Successful application start.
  113. /MN ["message"] Broadcast message.
  114.  
  115. Default messages are adjusted to reflect the name of the application being
  116. executed and the number of users it is limited to.
  117.  
  118. Locking usage examples
  119. ----------------------
  120.  
  121. To limit the number of simultaneous users of the application TEST to 10 and
  122. make it execute-only:
  123.  
  124.         NETLOCK TEST/U10/X
  125.  
  126. This will save the original, unlocked application under the name "TEST.UNL".
  127. It will not password protect, broadcast a message or log to file when the
  128. application runs. To do this:
  129.  
  130.         NETLOCK TEST/U10/X/P"syzygy"/L"F:UTILITY\LOGS\TEST.LOG"/N"SUPERVISOR"
  131.  
  132. This will limit the number of simultaneous users to 10, make it execute-only,
  133. force the user to enter the password "syzygy" when the application starts, log
  134. every execution to "F:UTILITY\LOGS\TEST.LOG" and broadcast a message to the
  135. supervisor. If for some reason one of these actions is not possible a message
  136. will be displayed to the user and the application terminated.
  137.  
  138. Usage - unlocking an application
  139. --------------------------------
  140.  
  141. NETLOCK LockAppl          ; Locked application left as "LockAppl.LOK"
  142. NETLOCK LockAppl OrigAppl ; Locked application unchanged
  143.  
  144. NETLOCK will output the commands which were used to lock the application so
  145. that they can be redirected to file, modified and used as a response file (see
  146. below) to lock the application again. This is not possible if the application
  147. has been made execute-only. Only the SUPERVISOR or equivalent on the file
  148. server the application is locked to can unlock it. If the application is
  149. password protected only (not tied to a file server) then any SUPERVISOR or
  150. equivalent can unlock it.
  151.  
  152.         NETLOCK TEST > TEST.RES
  153.         NETLOCK TEST @TEST
  154.  
  155. Assuming TEST was previously locked then these commands will unlock it and
  156. then relock it in the same way.
  157.  
  158. Usage - listing a lock log file
  159. ------------------------------
  160.  
  161. NETLOCK LogFile > TextLogFile   ; List a log file
  162.  
  163. LogFile is converted to ASCII and stored in TextLogFile. See below for the log
  164. file format.
  165.  
  166. Response files
  167. --------------
  168.  
  169. Long NETLOCK command lines can be placed in response files which are accessed
  170. using the "@" symbol:
  171.  
  172.         NETLOCK @switches
  173.  
  174. Response files can be nested to a depth of 8 and mixed with normal switches:
  175.  
  176.         NETLOCK @messages @password TEST /U10 @override
  177.  
  178. Later switches override earlier switches. Switches in a response file can be
  179. on the same or separate lines. Messages delimited by "'s in a response file
  180. can cross line boundaries. The default response file extension is ".RES".
  181. Comments start with a ";" and finish at the end of a line.
  182.  
  183. For example:
  184.  
  185. ;
  186. ; Sample response file
  187. ;
  188. /U10                    ; Limit program to ten users
  189. /L"TEST.LOG"            ; Log application runs to TEST.LOG
  190. /P"SYZYGY"              ; Password required
  191. /MQ"Enter password. Use Backspace to correct mistakes and Enter to finish.
  192.  
  193.         Password? "     ; A valid multiline password prompt
  194. ;
  195. ; End of response file
  196. ;
  197.  
  198. Specifying lock messages
  199. ------------------------
  200.  
  201. A message is specified using "'s eg. "Password: ". If the message contains a "
  202. then it should be doubled eg. "A "" quote". If a message contains no spaces
  203. or special characters then no "'s are necessary. The program has been written
  204. with foreign language support in mind. While the messages NETLOCK itself
  205. displays cannot be changed all messages that may be issued by the modified
  206. application can be specified by the system manager. By placing these messages
  207. in a response file they can be used without retyping on every application that
  208. needs to be protected. The normal MSDOS convention of specifying an unusual
  209. character with the ALT key and the numeric keypad (Press the ALT key, type a
  210. 1-3 digit number on the numeric keypad and release ALT) is supported. Messages
  211. can include all ASCII/display codes from 0 to 255. They are limited to 255
  212. characters in length. In a response file they can be multiple line, only
  213. terminating when a second '"' is seen.
  214.  
  215. Examples:
  216.  
  217. Valid messages:           "Hello world!"
  218.                           "Hello ""world!"""
  219.                           Hello!
  220.                           Hello_world!
  221.                           SYS:PUBLIC\NDIR.EXE
  222. Valid multiline message:  "This ""is""
  223.                           a 3 line
  224.                           message ""≈"""
  225. Invalid messages:         Hello world   (Contains a space and no " delimiters)
  226.                           Hello@world   (Contains a special character)
  227.  
  228. Making applications execute-only
  229. --------------------------------
  230.  
  231. Since NETLOCK works by modifying an application binary it follows that a
  232. dedicated cracker can modify the application binary to remove the protection.
  233. This threat can be reduced by making the application "execute-only" after it
  234. has been modified by NETLOCK. This will be done by NETLOCK itself if /X is
  235. specified. It reduces the possibility of the application binary being read
  236. into a debugger. Due to the insecure nature of LAN's (any and all messages,
  237. including passwords, can be read off a LAN with the appropriate software and
  238. a workstation) no guarantee can be given but what can be done is to make it
  239. hard enough to crack so that it's probably not worth a cracker's time.
  240.  
  241. It may be preferable to use NETLOCK with the execute-only option disabled,
  242. compress the application using the public domain program LZEXE and then make
  243. it execute-only using FILER.
  244.  
  245. "Microsoft Windows" users note: Windows cannot handle execute-only
  246. applications - to avoid this problem without compromising security create a
  247. one line batch file which executes the execute-only application and use it as
  248. the application name in the PIF program information file.
  249.  
  250. Logging application exit
  251. ------------------------
  252.  
  253. NETLOCK can log application entry only. If it is necessary to log application
  254. exit also then create a batch file of the form:
  255.  
  256.         @ECHO OFF
  257.         Application
  258.         NOP
  259.  
  260. The application is locked as usual. NOP (No operation) is a program which
  261. comes with the NETLOCK sources. It does nothing but exit with a status of
  262. zero. It can be locked in the normal manner. In particular; when it was run
  263. can be logged. This can be bypassed by running the application directly but
  264. the system manager can look at the application logs to see if a user started
  265. an application and the finish was not logged. It is not possible to securely
  266. log application exit without modifying network software as the user can either
  267. exit normally, turn off, crash or press the reset button on the workstation.
  268. If a workstation crashes then the file server eventually (after about ten
  269. minutes or when the workstation reboots) detects this and releases any user
  270. limit lock in use but provides no mechanism to log application exit.
  271.  
  272. MSDOS and Novell Netware file paths
  273. -----------------------------------
  274.  
  275. Novell Netware uses a mixture of network paths and MSDOS paths. A network path
  276. has the form "BASIL\SYS:UTILITY\TURBO\TPC.EXE" and always refers to the same
  277. file. An MSDOS path has the form "F:\UTILITY\FRED\TEST.EXE" where "F:" might
  278. be any network directory on any file server, or a local drive. NETLOCK avoids
  279. ambiguity in MSDOS paths by converting any MSDOS path specified to it's
  280. equivalent network path so that different workstations will always refer to
  281. the same file. Since MSDOS itself is not "network aware" files using the
  282. network paths are automatically accessed internally via the current MSDOS
  283. drive. This process is normally invisible but can cause problems if a program
  284. tries to access other files simultaneously using the same drive. These
  285. problems should not occur during normal operation of NETLOCK.
  286.  
  287. Locking unmodifiable applications
  288. ---------------------------------
  289.  
  290. If the application binary is unmodifiable, either because it contains overlays
  291. in the executable itself or because it is a COM file which can't be converted
  292. (eg. COMMAND.COM), then execute a command of the form:
  293.  
  294.         PATCHANY ANY.EXE ApplicationPath
  295.  
  296. PATCHANY.EXE and ANY.EXE are programs which come with the NETLOCK sources.
  297. Once patched ANY.EXE will execute the application as a sub-process, occupying
  298. about 700 bytes of memory while it is running. ANY can be locked as usual after
  299. being patched, including making it execute-only. If an error occurs it will
  300. exit with the MSDOS error status. If no error occurs it will exit with the
  301. application's exit status. PATCHANY and ANY require the application path
  302. (including the extension ".COM" or ".EXE") to be fully specified. Security can
  303. be improved by giving the application a non-obvious name in a directory where
  304. the user does not have search privileges. Any arguments given to ANY are
  305. passed on unchanged to the application.
  306.  
  307. The application path should normally be specified as a network style path,
  308. so that the application will be found no matter what the workstation drive
  309. mappings are. Unfortunately, some applications are not "network aware" and
  310. have trouble finding their own directory when this is done.
  311.  
  312. This can be avoided by:
  313. - Specifying an MSDOS style path instead and making sure all
  314.   workstations have the same drive mapping. If a workstation is likely to
  315.   login to more than one file server this is difficult.
  316. - Specifying a network style path not prefixed by the server name but prefixed
  317.   with one of the server search drives. This causes the nominated search
  318.   drive rather than the default drive to be used when loading the application.
  319.   eg. "Z:SYS:PUBLIC\FILER.EXE"
  320. - If the application binary is configurable tell it where it's directory is.
  321.   Some Borland programs can be configured in this way.
  322.  
  323. How it works
  324. ------------
  325.  
  326. NETLOCK attaches an assembly language program to the tail end of the
  327. application binary and modifies the application start address so that it will
  328. be executed before the main application. This program performs the tasks
  329. detailed above, erases itself and then starts the application as usual.
  330. Password, log file and broadcast message are straightforward calls to the
  331. appropriate system facilities. File logging uses the file server to determine
  332. user name and current time. The user limit is done by opening a semaphore
  333. (with a name which is unique to the application) on the file server specified
  334. and checking for the current number of users of the semaphore. If the limit is
  335. exceeded the assembly language program forces an exit. The semaphore is
  336. implicitly closed on application exit by the network software so that it is
  337. not necessary to occupy memory while waiting to close it explicitly.
  338.  
  339. Application lock actions
  340. ------------------------
  341.  
  342. 1. Access file server
  343. 2. Get user limit lock
  344. 3. Get password
  345. 4. Update log file
  346. 5. Check user limit lock
  347. 6. Check password
  348. 7. Send broadcast message
  349. 8. Start application
  350.  
  351. If the lock fails for any reason it erases itself and forces application
  352. termination with a status of 255. If the application starts successfully then
  353. the exit status is whatever the application sets it to.
  354.  
  355.     1. Access file server
  356.     ---------------------
  357.  
  358. If the lock entails any operation requiring file server access (user limit,
  359. log, broadcast) then the lock will check if the user of the application is
  360. currently logged into the file server specified in the lock binary. If not
  361. then a message will be output, the lock erased and the application terminated.
  362.  
  363.     2. Get user limit lock
  364.     ----------------------
  365.  
  366. A semaphore is opened on the file server and the number of users currently
  367. holding it open is checked. If the user limit is exceeded the lock is
  368. immediately released but execution continues. The semaphore name is chosen at
  369. random so that a normal user can't close it once the application is running. A
  370. user with console privilege can use FCONSOLE to list a connection's semaphores
  371. and close the lock semaphore.
  372.  
  373.     3. Get password
  374.     ---------------
  375.  
  376. If the user limit was not exceeded in step 2 the user is asked to enter a
  377. password. It will timeout if the complete password is not entered within 30
  378. seconds. The backspace key can be used to correct mistakes, Ctrl/C to abort
  379. input and Enter to end input. The password is converted to uppercase and
  380. compared with an encoded password in the application binary. If the password
  381. is incorrect this is recorded but execution continues.
  382.  
  383.     4. Update log file
  384.     ------------------
  385.  
  386. A record is appended to the specified log file which details the application
  387. user, the time they logged in, the time they used the application, the current
  388. number of users of the application, the maximum number of users and whether
  389. the password was okay. The time is taken from the file server, not the
  390. workstation. If there is any error (apart from a file sharing error which is
  391. retried) accessing the log file then a message will be output, the lock erased
  392. and the application terminated. The lock will try to update the log file a
  393. number of times before terminating with failure.
  394.  
  395. Since the log file needs to be world writeable it is possible for any user to
  396. modify it. This risk can be reduced by giving the log file a non-obvious name
  397. (ie. a password) and placing it in a directory for which the application user
  398. only has the privileges Write/Open/Create.
  399.  
  400.     5. Check user limit lock
  401.     ------------------------
  402.  
  403. If the user limit lock in step 2 exceeds the limit then a message is output,
  404. the lock is erased and the application terminated.
  405.  
  406.     6. Check password
  407.     -----------------
  408.  
  409. If the password in step 3 does not match there is a delay, a message is
  410. output, the lock erased and the application terminated. The delay is to deter
  411. password attacks using keyboard macro programs.
  412.  
  413.     7. Send broadcast message
  414.     -------------------------
  415.  
  416. A message is broadcast to a nominated user on the file server found in step 1
  417. notifying him/her that the application is being used. If no nominated user is
  418. logged on to that server or the user doesn't exist then the message is lost -
  419. the application will continue on regardless.
  420.  
  421.     8. Start application
  422.     --------------------
  423.  
  424. The lock is erased and the application is started.
  425.  
  426. Usage variations
  427. ----------------
  428.  
  429. Running FCONSOLE, selecting "File/Lock Activity"/"Semaphore Information"/
  430. "Semaphore Name" and entering the name of the lock semaphore will dynamically
  431. list all connections currently using the locked application. Unfortunately,
  432. some versions of FCONSOLE are buggy and this may not be possible. A program
  433. called SEMLIST is provided with the NETLOCK sources which performs this task.
  434. SEMLIST can list all semaphores in use on a file server simultaneously.
  435.  
  436. Specifying a semaphore name without a user limit can be used to restrict an
  437. application to a file server without limiting the number of users. This can
  438. also be useful in conjunction with the SEMLIST program to keep track of
  439. application usage without restricting users unnecessarily.
  440.  
  441. It is sometimes useful to restrict a program which is not network aware to one
  442. user to stop file update problems caused by multiple users accessing it
  443. simultaneously.
  444.  
  445. If the same lock semaphore name is used for several applications then the
  446. total number of simultaneous users for all the applications will be
  447. restricted. Statistical packages are typical of program suites which have
  448. multiple applications and a restricted license for all members of the suite.
  449.  
  450. Broadcasts from an application can be turned off by using the CASTOFF command.
  451. Some applications enable broadcasts as a side effect, limiting the usefulness
  452. of this command. PCWrite is one such application.
  453.  
  454. Some applications cannot be effectively run off a network drive, but by
  455. locking the application to a file server it then becomes possible to copy the
  456. application to local hard disk and run it there while still making it
  457. unuseable when not logged in to the file server.
  458.  
  459. It is sometimes useful to unlock an application making the output file NUL,
  460. just to obtain the switches that were used to lock it. For example, assuming
  461. NDIRLOCK is a locked version of NDIR then "NETLOCK NDIRLOCK NUL > NDIR.RES"
  462. will create a response file NDIR.RES while discarding the unlocked version of
  463. NDIRLOCK.
  464.  
  465. Log file format - binary
  466. ------------------------
  467.  
  468. 16 byte header: "Lock log v1.1", ^M, ^J, ^Z
  469.  
  470. followed by a series of 88 byte fixed length records:
  471.  
  472. Offset Size Name/value Description
  473.   1      1  LogNum     Current number of application users
  474.   2      1  LogLim     Maximum number of application users
  475.   3      1  Connection Connection number user used to access application.
  476.   4      7  UseDatTim  Use Year/Month/Day/Hour/Minute/Second/DayOfWeek
  477.  11      2  12         "Get Internet Address" record length
  478.  13      4  NetNum     Net file server net number
  479.  17      6  NodeNum    Net workstation physical address
  480.  23      2  Socket     Connection socket
  481.  25      2  62         "Get Connection Information" record length
  482.  27      4  ObjID      Object ID of connection owner
  483.  31      2  ObjType    Object type of connection owner (USER = Swap(1) = 256)
  484.  33     48  ObjName    Null terminated object name of connection owner
  485.  81      7  LogDatTim  Login Year/Month/Day/Hour/Minute/Second/DayOfWeek
  486.  88      1  PassOk     If non-zero then password was correctly entered
  487.  89
  488.  
  489. If (LogNum > LogLim) and (LogLim > 0) then the application itself was not
  490. started. If (PassOk = 0) then the application itself was not started.
  491. If (LogLim = 0) then no user limit was in force. If the lock does not require
  492. a password then PassOk will always be non-zero.
  493.  
  494. The connection number can be used to match lock log records with system
  495. login/logout records. Note that the network word byte order (high to low) used
  496. in this log file is the opposite of the PC's. All word and long integer values
  497. should have byte order swapped before display or calculation.
  498.  
  499. Log file format - text
  500. ----------------------
  501.  
  502. All fields are separated by spaces. For field descriptions see the previous
  503. section. The MSDOS SORT command may be useful when examining this file. To
  504. facilitate sorting and concatenation the log file contains no header.
  505.  
  506. Field Name
  507.   1   LogNum
  508.   2   LogLim
  509.   3   PassOk (Not present for version 1.0 log files)
  510.   4   Connection
  511.   5   UseDatTim-Date
  512.   6            -Time
  513.   7   NetNum:NodeNum
  514.   8   LogDatTim-Date
  515.   9            -Time
  516.  10   ObjName
  517.  
  518. Credits
  519. -------
  520.  
  521. NETLOCK is written in approximately 4500 lines of Turbo Pascal v5.0
  522. and 1000 lines of Turbo Assembler v2.0.
  523. The EXE was compressed using LZEXE v0.91, reducing it's size by over 50%.
  524. The editor used was PCWrite v3.01 from Quicksoft.
  525. Turbo Pascal and Turbo Assembler are trademarks of Borland International, Inc.
  526. MSDOS and Microsoft Windows are trademarks of Microsoft Corporation.
  527. PCDOS is a trademark of International Business Machines.
  528. Novell Netware is a trademark of Novell, Inc.
  529. COMTOEXE and LZEXE are freeware written by Fabrice BELLARD. They can be found
  530. in the Internet anonymous ftp archive simtel20 and it's mirrors, for example
  531. the version current when this documentation was written can be found at
  532. "wuarchive.wustl.edu" in "/mirrors/msdos/filutl/lzexe91e.zip".
  533.  
  534. Shareware
  535. ---------
  536.  
  537. Shareware gives you a chance to try before you buy. It depends on your
  538. honesty. You may use this program for a short time to test it. Two days are
  539. suggested. If you will then be using it regularly you are expected to pay. The
  540. price is low given the improved functionality this program will give to your
  541. network. Not only do the logging features allow you to determine when new
  542. application licenses may be necessary, use of this program shows that, legally,
  543. you are making a best effort to fulfill the licensing provisions of the
  544. application software. By registering you can also get the most recent version
  545. of the program, all the extra utilities and the sources. Send electronic mail
  546. once you've registered with the subject heading "NETLOCK Registered" if you
  547. wish to be placed on an electronic mailing list for tips, bug fixes and
  548. updates.
  549.  
  550. To encourage you to register: The binaries and sources for a graphical network
  551. activity monitor and a network batch job processing system totaling 2500
  552. lines of code is included with the NETLOCK sources. The activity monitor
  553. displays a dynamic bar graph showing the activity of all current connections
  554. to the server. It requires console privilege to run. The batch system allows
  555. batch jobs and print jobs to be submitted to a dedicated PC from anywhere in
  556. the network. It also allows jobs to be run at nominated times and at regular
  557. intervals.
  558.  
  559. See "NETLOCK /?" for the program licensing terms.
  560.  
  561. Please register now, don't just forget about it. Thanks!
  562.                 ---
  563. Enquiries
  564. ---------
  565.  
  566. Name:     Julian Byrne
  567. Internet: julian.byrne@monash.edu.au (preferred)
  568. Airmail:  Normanby House, Monash University, Clayton, 3168, Australia
  569. ------------------------------------------------------------------------------
  570. This document can be saved in a text file by entering:
  571.  
  572.         NETLOCK /D > NETLOCK.DOC
  573.