home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / port-lpr / part01 / README < prev    next >
Text File  |  1993-04-09  |  9KB  |  219 lines

  1. This is something I threw together to allow various non-BSD systems to
  2. print over the network to print queues on BSD-style systems (like
  3. SunOS and Ultrix and...).  Basically, it's a standalone clone of the
  4. BSD "lpr" command -- like BSD lpr but it doesn't need a print spooler
  5. on the local machine.  This program also runs on VMS systems, and
  6. there's a gateway to allow the VMS systems to talk lpr over DECnet as
  7. long as you have a UNIX host that also speaks DECnet which can act as
  8. a gateway.
  9.  
  10. If you are running UNIX, you have to have a Berkeley-style TCP
  11. implementation on your machine (with socket(), bind() and that sort of
  12. stuff), and access to an Berkeley lpd server somewhere on the network.
  13. If you are running VMS, you can use either DEC's Ultrix connection or
  14. Wollongong WIN/TCP for VMS, or you can run lpr over DECnet.  The
  15. latter requires that you have access to a UNIX host that can speak
  16. DECnet (either SunLink DNI or DECnet-Ultrix), and which can talk to an
  17. lpr server somewhere.
  18.  
  19. At one time or another, I have tested the lpr program on SCO ODT 1.0,
  20. SunOS 4.1, Ultrix 3.x, Ultrix 4.x, 4.3 BSD, an IBM RS/6000 running AIX
  21. 3.x, and on a Stardent Titan running some variant of SysV.  It also
  22. works on VAX/VMS 5.4 with UCX TCP and DECnet.  (I got it to compile on
  23. a machine with an old version of WIN/TCP, but I couldn't fully test it
  24. because I don't have privileged access to that machine.)  The dnet-lpr
  25. gateway program has been tested on a Sun/3 running SunOS 4.1 and
  26. SunLink DNI 6.0, and a DecStation 5000 running Ultrix 4.2 and
  27. DECnet-Ultrix.
  28.  
  29. I have used SunOS and Ultrix machines as printer servers, but I would
  30. expect this program to work with any lpd server running 4.2BSD or
  31. 4.3BSD-derived code.
  32.  
  33. * Warranty:
  34.  
  35. READ THIS BEFORE INSTALLING THIS CODE ON ANY MACHINE:
  36.  
  37. There is NO WARRANTY for this software, not even for merchantability
  38. nor for fitness for any particular purpose.  Anyone who installs or uses
  39. this software, does so entirely at his or her own risk.  The author
  40. will not be responsible for any ill consequences of the installation
  41. or use of this software, no matter how terrible.
  42.  
  43. * Copyright, use and redistribution:
  44.  
  45. The source code for this program is Copyright 1990, 1991 by Keith Moore
  46.  
  47. Use of this program and distribution of the code in either source or
  48. compiled binary form are governed by the GNU General Public License, 
  49. Version 2.  See the file LICENSE for details.
  50.  
  51. * Compiling on UNIX:
  52.  
  53. On many UNIX systems you can simply type "make".
  54.  
  55. On UNIX, if your C compiler does not define the macro "unix", add a
  56. "CFLAGS=-Dunix" to the "make" command line, like so:
  57.  
  58.     make CFLAGS=-Dunix
  59.  
  60. If you have SunLink DNI or DECnet-Ultrix and want to compile the
  61. decnet lpd gateway, type "make dnet-lpd-gw".
  62.  
  63. * Compiling on VMS:
  64.  
  65. On VMS systems you need to edit the DESCRIP.MMS file first (assuming
  66. you have DEC/MMS), and pick which transport you want to use.  Also, be
  67. sure to select the proper object library.  Then type "mms" to make
  68. things.  If you use some other "make" clone besides DEC/MMS, then you
  69. may have to make small changes to the DESCRIP.MMS file and rename it
  70. to something like MAKEFILE.
  71.  
  72. If you don't have DEC/MMS or some flavor of "make", do the following:
  73.  
  74. cc/debug lpr.c
  75. cc/debug DRIVER.c
  76. link lpr,DRIVER,LIBRARY/lib
  77.  
  78. where DRIVER and LIBRARY are chosen from the following, based on whether
  79. you are using UCX TCP, Wollongong TCP, or DECnet:
  80.  
  81. Transport    DRIVER        LIBRARY
  82. UCX TCP        vms-ucx-tcp    sys$library:ucx$ipc.olb
  83. WIN/TCP        vms-win-tcp    twg$tcp:[netdist.lib]twglib.olb
  84. DECnet        vms-decnet    (not needed)
  85.  
  86. * UNIX Installation:
  87.  
  88. On UNIX, "make install" should do the trick to install the lpr
  89. program.  (NOTE:: make install creates a set-uid program.  See below
  90. under IMPORTANT NOTES for details.)  You may have to edit the Makefile
  91. to change the installation directory.  Install the man page by hand,
  92. if your system supports these.  The file "lpr.cat" is a preformatted
  93. man page, in case your system does not support nroff.  If your system
  94. has a man command, you may be able to copy the lpr.cat file into an
  95. appropriate directory with an appropriate name so that "man lpr" will
  96. work.
  97.  
  98. lpr expects a file named /etc/LPD_SERVER that contains the host name
  99. of a machine that has a working BSD-style line printer daemon.
  100. Failing this, it checks the environment variable LPD_SERVER for the
  101. printer server host, so users can override the system default.  Either
  102. of these can be manually overriden with the -S command line option.
  103. However the print server is specified, the client machine must have
  104. permission to print on the server's print queues.  Generally this is
  105. done by editing either /etc/hosts.lpd or /etc/hosts.equiv on the
  106. server.
  107.  
  108. * VMS Installation:
  109.  
  110. To run lpr on VMS, copy LPR.EXE to an appropriate directory and define a 
  111. DCL symbol to point to it, e.g.:
  112.  
  113. lpr == "$some$system$directory:[some.sub.directory]lpr.exe"
  114.  
  115. You may need to install the image with privileges; see below.
  116.  
  117. after which it works almost, but not quite, just like on UNIX.
  118. Unfortunately, the VAX C library is really brain dead, so wildcards do
  119. not work, the entire command line is lower cased, and you can't have
  120. embedded spaces in file names.  (The effect of the last restriction is
  121. that you can't use lpr to print a file on a remote DECnet node if you
  122. don't have proxy access to that machine.)  If someone wants to
  123. contribute a CLD based front end for this program, I'll be happy to
  124. include it in a future release.
  125.  
  126. On VMS, the logical name LPD_SERVER must be defined to point to the
  127. name of the host acting as a print server (for TCP, this is the
  128. Internet domain name of the server; for DECnet, it's the DECnet node
  129. name of the machine where the gateway runs).  This can either be
  130. defined by the user or as a system-wide logical name.
  131.  
  132. To do the equivalent of lprm or lpq on VMS, define symbols like the
  133. following:
  134.  
  135. lpq == "$some$system$directory:[some.sub.directory]lpr.exe -showqueue"
  136. lprm == "$some$system$directory:[some.sub.directory]lpr.exe -remove"
  137.  
  138. * Installation of the DECnet lpr gateway on SunOS:
  139.  
  140. (You must be running SunLink DNI to do this:)
  141.  
  142. "make install-gw" will install the dnet-lpd-gw program in an
  143. appropriate directory.  You might need to edit the Makefile, however,
  144. if /usr/sunlink/dni is not an appropriate directory on your machine.
  145. "dnet-lpd-gw" is also installed set-uid to root.
  146.  
  147. The dnet-lpd-gw program should be installed so that it will be run
  148. with an remote DECnet client tries to connect to object 223.  On Sun
  149. systems, do this by editing the file /usr/sunlink/dni/dniserver.reg
  150. and adding a line like the following:
  151.  
  152. 223     DNETLPD /usr/sunlink/dni/dnet-lpd-gw
  153.  
  154. (Currently, the number 223 is wired into vms-decnet.c.  This may
  155. change at some point.)  "make install-gw" will copy dnet-lpd-gw to the
  156. /usr/sunlink/dni directory and install it with appropriate
  157. permissions.
  158.  
  159. * Installation of the DECnet lpr gateway on Ultrix:
  160.  
  161. (You have to be running DECnet-Ultrix to do this:)
  162.  
  163. Become root and use the "ncp" program to define the DNETLPD object as follows:
  164.  
  165. # ncp
  166. ncp>clear object dnetlpd
  167. ncp>set object dnetlpd
  168. Number :  223
  169. File :  /usr/local/lib/dnet-lpd-gw
  170. Default User :  daemon
  171. Type :  sequenced packet
  172. Accept :  deferred
  173. ncp> ^D
  174.  
  175. (Note: you can set the "default user" to "root" instead of "daemon",
  176. in which case dnet-lpd-gw need not be set-uid to root.  The set-uid
  177. approach is probably safer in this case.)
  178.  
  179. * IMPORTANT NOTES: 
  180.  
  181. On UNIX, the program is installed set-uid to root, which is necessary
  182. so that lpr can bind to a privileged TCP port.  This should not
  183. present a security risk since the first thing that the program does is
  184. to create the socket and bind it to the privileged port, after which
  185. it immediately disables its special privileges.  All file opens,
  186. reads, etc., are then done with the invoking user's normal privileges.
  187.  
  188. On VMS, similar concerns apply if using TCP -- the program must be
  189. installed as a privileged image with the INSTALL utility.  UCX TCP
  190. requires either BYPASS or SYSPRV privilege in order to allow lpr to
  191. bind to a privileged port.  I'm not sure offhand what privileges
  192. WIN/TCP requires.  Anyway, immediately after successfully binding to a
  193. privileged port, the lpr program turns off all image-installed
  194. privileges.
  195.  
  196. For VMS systems using a DECnet-based lpr, no special installation is
  197. required, but the UNIX-based server does have to be installed set-uid
  198. to root.  If when using lpr over DECnet you get the message "your host
  199. does not have line printer access", you need to put "localhost" or the
  200. hostname of the print server in the print server machine's
  201. /etc/hosts.lpd file.  You may then have to kill and restart lpd on the
  202. server to get it to recognize the changed /etc/hosts.lpd file.
  203.  
  204. * Miscellaneous:
  205.  
  206. The UNIX Makefile has rules to generate this package in various
  207. formats to allow it to be moved from system to system.  Of special
  208. interest is the rule for "make port-lpr.vms", which creates a VMS .COM
  209. file that extracts itself when run in an empty VMS directory.
  210.  
  211. Sorry, there's no special HELP file for lpr on VMS.  Perhaps someone
  212. will contribute one.
  213.  
  214. If you find bugs and can supply fixes, please let me know and I'll try
  215. and have the fixes incorporated into a future release.
  216.  
  217. Keith Moore
  218. moore@cs.utk.edu
  219.