Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
LPD(8)				   lpd daemon				  LPD(8)

NAME
     lpd - line printer daemon

SYNOPSIS
     lpd [-L logfile] [-F] [-V] [-D debugopt] [-p port]

DESCRIPTION
     The  lpd program is the printer server program of the LPRng software suite.
     This software is an enhanced and modified version of the Berkeley LPD soft-
     ware.

OPTIONS
     -L logfile
	    specifies an alternate file to be used for logging error and  debug-
	    ging  messages.  The syslog(8) facility is used to log critical mes-
	    sages as well.  Please note that you need  to  create  the	file  by
	    yourself, a 'touch' is sufficient.	This is needed for security rea-
	    sons.

     -F     Under  normal operation, the LPD server will run in background mode.
	    The -F flag forces it to run in foreground mode, where  it	is  more
	    easily debugged.

     -V     Print program version information.

     -D debugopt
	    Debugging  is  controlled using the -D option. This accepts a comma-
	    separated list of debugging settings. These settings take one of two
	    forms: facility=value , or value to set an	overall  default  value.
	    The  available facilities can be determined by invoking LPD with the
	    -D= parameter.

     -p port
	    Bind to the  specified  port  rather  than	port  515  specified  by
	    RFC1179.

OPERATION
     Lpd  is  the  line printer daemon (spool queue handler) and is normally in-
     voked at boot time from the rc(8) file; it can also be started by	a  user.
     Note that the lpd server needs only run on systems where actual printing or
     spooling is taking place.	lpr(1) and other related programs transfer files
     using network facilities to the lpd.

     When  started,  lpd  reads a configuration file to obtain basic operational
     parameters and then reads the printcap(5) database information to determine
     the which printers have spool  queues  and  to  start  spool  queue  server
     processes.   If running as a background server, it will disconnect from its
     control terminal and run in the background.  It uses the system calls  lis-
     ten(2)  and  accept(2)  to  receive  requests  to print files in the queue,
     transfer files to the spooling area, display the queue,  remove  jobs  from
     the queue, or perform a spool queue control function.  In each case it cre-
     ates one or more server processes to handle the request and the lpd process
     will listen for more requests.

     Sending  the server a SIGHUP signal causes the server to reread the various
     configuration and inititialization files.	This action is similar	to  that
     of  the  INETD  and  other  servers.   The same action is taken when sent a
     reread command by the lpc(1) program.  At	an  interval  specified  by  the
     poll_time configuration variable, lpd will check for spool queues with jobs
     and no printing activity, and start printing.

     LPD  access control is done using a rule set and match algorithm similar to
     a packet filter.  Each request for printing, status, or control  operations
     is  matched  against the rule set, and the first ACCEPT or REJECT value de-
     termines if the operation can be performed.  The  following  is  a  typical
     permissions file:
	    # Set default permissions
	    DEFAULT ACCEPT
	    # Reject any connections from outside our subnet
	    REJECT SERVICE=X NOT IP=130.191.0.0/255.255.0.0
	    # Only accept Printing (P) and spooling (LPR) from
	    # the private network, the 10.0.0.0/8  network and fw
	    REJECT SERVICE=P,R NOT REMOTEHOST=*.private,10.0.0.0/8,fw.astart.com
	    # Do not accept forwarded jobs for printing
	    REJECT SERVICE=P FORWARD
	    # Allow only the administrators control access
	    ACCEPT SERVICE=C,M REMOTEHOST=spooler.astart.com USER=root,papowell
	    ACCEPT SERVICE=C,M SERVER REMOTEUSER=root,papowell
	    # Allow only the user on the same host who spooled job to remove it
	    ACCEPT SERVICE=M SAMEUSER SAMEHOST
	    REJECT SERVICE=M,C

     Permission checking is done by using a set of keys (or fields) with associ-
     ated  values  to  check  for  permission.	 The SERVICE key has value P for
     printing (i.e.- unspooling), R for spooling (i.e.- LPR request),  C  and  S
     for  printer control and status respectively (i.e.- LPC request), M for re-
     moval (i.e.- LPRM request), Q for queue information (i.e.-  LPRM  request),
     and  so  forth.   The  X  key  indicates  the initial connection to the LPD
     spooler, and can be used to control connections from remote  systems.   The
     values  of the USER, HOST, and IP keys taken from the control file which is
     being received or checked for permissions.  The REMOTEUSER, REMOTEHOST  and
     REMOTEIP  keys  are those either sent as part of a command, or derived from
     information about the current network connection.	Each line of the permis-
     sions file is scanned for key names  and  values,	and  these  are  matched
     against the request keys information.  When all matches on a line are made,
     then  search  terminates  with the specified action (ACCEPT/REJECT).  If no
     match is found the default permission value is used.  The	DEFAULT  key  is
     used  to  specify	the current default permission to be used for successful
     matches or if there is no match after scanning the entire permissions data-
     base.

     The GROUP entry is used to check that the USER name appears in a group  en-
     try  in the system user group database.  For example, GROUP=student*,staff*
     would check to see if any of the group name  matching  student*  or  staff*
     have  the specified user name in them.  If a system has the netgroups capa-
     bility, a group name starting with a @ will be treated as a netgroup  name,
     and  current user name from the job file will be checked to see if it is in
     the group.  Similarly, the REMOTEGROUP entry will check a remote user name.
     The PORT entry can be used to ensure that a connection to the server origi-
     nates from  a  specified  range  of  ports.   For	more  details,	see  the
     lpd.perm(5) man page.

     The  permissions database is scanned in order of the fixed file entries and
     then by invoking the specified filters for each of the  permissions  lists.
     It  is recommended that the filters be placed at the end of the permissions
     lists.  The user name is one of the parameters passed to  the  filter,  and
     can be used to determine if a user has permissions to print a file.

     Key	  Match Connect Job   Job    LPQ  LPRM	LPC
				Spool Print
     SERVICE	  S	'X'	'R'   'P'    'Q'  'M'	'C,S'
     USER	  S	-	JUSR  JUSR   JUSR JUSR	JUSR
     HOST	  S	RH	JH    JH     JH   JH	JH
     GROUP	  S	-	JUSR  JUSR   JUSR JUSR	JUSR
     IP 	  IP	RIP	JIP   JIP    RIP  JIP	JIP
     PORT	  N	PORT	PORT  -      PORT PORT	PORT
     REMOTEUSER   S	-	JUSR  JUSR   JUSR CUSR	CUSR
     REMOTEHOST   S	RH	RH    JH     RH   RH	RH
     REMOTEGROUP  S	-	JUSR  JUSR   JUSR CUSR	CUSR
     REMOTEIP	  IP	RIP	RIP   JIP    RIP  RIP	RIP
     CONTROLLINE  S	-	CL    CL     CL   CL	CL
     PRINTER	  S	-	PR    PR     PR   PR	PR
     FORWARD	  V	-	SA    -      -	  SA	SA SA
     SAMEHOST	  V	-	SA    -      SA   SA	SA
     SAMEUSER	  V	-	-     -      SU   SU	SU
     SERVER	  V	-	SV    -      SV   SV	SV
     AUTH	  V	-	AU    -      AU   AU	AU
     AUTHTYPE	  S	-	AU    -      AU   AU	AU
     AUTHUSER	  S	-	AU    -      AU   AU	AU
     FWDUSER	  S	-	AU    -      AU   AU	AU

     KEY:
	JH = HOST	   host in control file
	RH = REMOTEHOST    connecting host name
	JUSR = USER	   user in control file
	CUSR = REMOTEUSER  user from control request
	JIP= IP 	   IP address of host in control file
	RIP= REMOTEIP	   IP address of requesting host
	PORT=		   connecting host origination port
	CONTROLLINE=	   pattern match of control line in control file
	FW= IP of source of request = IP of host in control file
	SA= IP of source of request = IP of host in control file
	SU= user from request = user in control file
	SA= IP of source of request = IP of server host
	SV= matches if remote host is the server
	AU= authentication information
	IFIP= IP address of remote end of connection

     Match: S = string with wild card, IP = IP address[/netmask],
	N = low[-high] number range, V = exact value match
     SERVICE: 'X' - Connection request; 'R' - lpr request from remote host;
	 'P' - print job in queue; 'Q' - lpq request, 'M' - lprm request;
	 'C' - lpc spool control request; 'S' - lpc spool status request
     NOTE: when printing (P action), the remote and job check values
	(i.e. - RUSR, JUSR) are identical.

     The  special  key	letter=patterns  searches the control file line starting
     with the (upper case) letter, and is usually used with printing and  spool-
     ing  checks.   For  example, C=A*,B* would check that the class information
     (i.e.- line in the control file starting with C) had a value starting  with
     A or B.

PERMISSIONS, MULTIHOMED HOSTS, IPV6
     There  is	a  subtle problem with names and IP addresses which are obtained
     for 'multi-homed hosts', i.e. - those with  multiple  Ethernet  interfaces,
     and  for IPV6 (IP Version 6),  in which a host can have multiple addresses,
     and for the normal host which can have both a short name and a fully quali-
     fied domain name.	In addition, a host can have multiple IP addresses,  de-
     pending on the complexity of its configuration.

     The  IFIP	(interface  IP) field can be used to check the IP address of the
     origination of the request,  as reported by the information returned by the
     accept() system call.  Note that this information may be IPV4 or  IPV6  in-
     formation,   depending  on the origination of the system.	This information
     is used by gethostbyaddr() to obtain the originating host	fully  qualified
     domain  name  (FQDN)  and set of IP addresses.  Note that this FQDN will be
     for the originating interface,  and may not be  the  canonical  host  name.
     Some  systems  which  use	the  Domain Name Server (DNS) system may add the
     canonical system name as an alias.

     When performing an IP address match,  the entire list of IP addresses for a
     system will now be checked.  If one of these matches, then success  is  re-
     ported.   Similarly,   the  entire  list  of host names and aliases will be
     checked.  If one of these matches,  then success will be reported.

     In addition,  when checking for printing, if the name lookup for  the  host
     reported  in  the	control file fails,  then we assume that the host is un-
     known and all match checks for names or IP addresses will	fail.	You  can
     determine	if  a host has an entry by using the following check, which will
     reject all requests from a remotehost which does not have a DNS entry.
       REJECT NOT REMOTEHOST=*

PRINTCAP DATABASE
     Individual printer operations are controlled  by  values  in  the	printcap
     database.	 See  printcap(5)  for	details of the format and content of the
     various entries.  The following are typical printer entries for a local and
     remote printer.

	    # main or shared printcap file - usually /etc/printcap
	    # remote postscript printer
	    fullpage
	       |postscript
	       :lp=postscript@farside.astart.com
	    # give access to (remote) hosts
	    t1|postscript2
	       :cm=Test Printer 1
	       :lp=postscript2@nearside.astart.com

	    # local printcap file
	    # specification for local printer on nearside
	    t1|postscript2
	       :oh=nearside.astart.com
	       :cd=/usr/spool/LPD/safe
	       :sd=/usr/spool/LPD/t1
	    #
	    # /usr/spool/LPD/t1/printcap file -
	    t1:
	       :lp=/dev/pr
	       :if=/usr/lib/pr/if
	       :of=/usr/lib/pr/if

     Printcap information can be distributed by individual files or shared using
     NSF, YP, or other methods; see lpd.conf(5) for the exact details of the lo-
     cation of printcap files and  programs,  given  by  the  printcap_path  and
     lpd_printcap_path configuration information.  The usual printcap configura-
     tion  is  to  have  a  main (shared) printcap database which is used by all
     hosts.  The printcap information is usually  extremely  simple,  consisting
     only of the printer name and host (i.e. - fullpage printer entry).

     On  hosts	which  have  printers  attached or which are to provide spooling
     queue directories, more extensive printcap information is needed.	 In  the
     shared  database,	oh (options for specified host only) field restricts use
     of this entry to the specified host.  This entry can contain host	specific
     information,  such  as the location of the spool queue and/or actual device
     to be used for output.

     In the above example, the main printcap file, /etc/printcap has entries for
     all printers.  Note that these entries do not specify the spool directories
     (sd and cd fields), but this could be provided.  On a host with  a  printer
     specific  information  can be provided in several ways.  The simplest is to
     simply put an additional entry in the shared printcap  file,  with  the  oh
     field set to the support host name.  An alternative would be to specify the
     spool  directories (sd and cd fields) in the shared information, and to put
     the printer specific information in a printcap file.

     In addition to the oh flag, the server flag indicates that  this  entry  is
     for  a the LPD server only.  This can be used to simplify the management of
     client and server entries.

     The printcap information is  obtained  in	the  following	order.	 If  the
     lpd_printcap_path	configuration value is nonblank then the lpd server will
     process only this information otherwise it uses the printcap_path	informa-
     tion.   All  client  programs  use the contents of the configuration print-
     cap_path variable to get a list of locations of printcap  files.	Each  of
     these entries in the path lists are processed, and the printcap information
     is  extracted.  Entries which have oh fields are only used by the specified
     host.  The files and information is processed in linear  order,  later  en-
     tries overriding preceeding ones.

     When  processing  jobs or performing spool queue specific requests, the LPD
     server will check to see if there is a printcap file in the control  direc-
     tory  for	the  spool queue and the contents will be processed.  Since only
     the LPD server has access to the spool and control queues, this information
     is processed only by the server.

     In addition to files, printcap information can be obtained from programs or
     filters.	For  example,  the  printcap_path  of	the   form   /etc/print-
     cap:|/usr/lib/getpr  will	use  the contents of the /etc/printcap file, and
     then use the /usr/lib/getpr program to get  information  about  a	specific
     printer.  When information about a particular spool queue is needed and one
     or  more  filters are specified as the source of printcap information, then
     the filter will be started and the printer name written on its standard in-
     put.  The filter must provide a printcap entry for the requested printer on
     its standard output.

     The filter can be used to interface to databases or nonstandard information
     sources which do not produce printcap information in an acceptable form.

SPOOL DIRECTORY CONTENTS
     Each spool queue has a spool directory (sd) and optional control  directory
     (cd)   where  job	and control information is kept.  Under normal operation
     the spool and control directories are identical, but if the spool directory
     is NFS exported for use by other printer spoolers	which  write  files  di-
     rectly into the spool queue, then it is recommended that the control direc-
     tory  be a separate directory and not NFS mounted.  The following files are
     used for printer operations.  Per job entries are marked with  an	asterisk
     (*).

     File Name		 Dir	 Purpose
     printer		 CD	 lock file and server process PID
     unspooler.printer	 CD	 subserver process PID
     control.printer	 CD	 queue control information
     *hfAnnn		 SD	 job hold file
     *cfAnnnHOST	 SD	 job control file
     *dfAnnnHOST	 SD	 job data file
     *bfAnnn.*		 SD	 temporary files

     The nnn in the file names stands for the job number.  RFC1179 requires this
     to  be  a	3  digit  number,  but the longnumber printcap flag or a nonzero
     longnumber configuration variable will enable 6 digit numbers.

     The lock file is used to prevent multiple job queue servers  from	becoming
     active  simultaneously,  and to store the server process id.  The lock file
     name is the name as the printer name; all	other  control	files  have  the
     printer name appended as indicated above.

     The  printer  spool control file contains information controlling the queue
     operations.  It consists of a series of lines with keywords and  values  to
     control printing, spooling, and automatic job holding operations.	The fol-
     lowing is an example of a typical spool control file.

	    spooling_disabled 0
	    printing_disabled 1
	    holdall 0
	    redirect p1@host2
	    debug 10,log=/tmp/log
	    class A

     The  spooling_disabled  and  printing_disabled entries control spooling and
     printing; the lpc enable, disable, start, and stop command alter these val-
     ues.  The holdall entry will prevent jobs from being  processed  until  re-
     leased  with the lpc hold or release comands; the lpc holdall and noholdall
     commands alter these values.

     The redirect entry causes the lpd server to forward jobs to  the  specified
     remote  printer;  the  lpc  redirect  command alters this field.  The class
     field controls the class of jobs being  printed.	By  default,  the  class
     value  is	a  pattern that matches the class entry in a job file; however a
     entry of the form letter=patterns will print jobs whose control  file  line
     starting  with letter matches one of the patterns.  The debug line provides
     a set of debugging parameters for diagnostic information for the particular
     spool queue.

     Each print job consists of a control file	and  one  or  more  data  files.
     Lines in the control file file specify the job data files or parameters for
     the  job  and the general format of the file is specified by RFC1179.  Each
     line consists of a flag character and a parameter;  upper	case  and  digit
     characters specify options and lower case letters specify the printing for-
     mat  and  names of data files.  The following is a list of the control file
     flag characters.

     A	    Identifier A job identifier to be used when displaying job	informa-
	    tion and/or status.  The insertion of this line is controlled by the
	    use_identifier printcap/configuration variable.

     C	    Class String to be used for the class line on the burst page.

     H	    Host Name.	Name of the machine where lpr was invoked.

     I	    Indent.   The  number  of  characters  to  indent  the output by (in
	    ascii).

     J	    Job Name.  String to be used for the job name on the burst page.

     L	    Banner user name.  Information for banner page.

     P	    Person.  Login name of the person who invoked lpr.	This is used  to
	    verify ownership by lprm.

     M	    Send  mail	to  the  specified  user when the current print job com-
	    pletes.

     N	    File name.	The original name of a data file which is in the job.

     T	    Title.  String to be used as the title for pr(1) when the LPR -p op-
	    tion was specified.

     U	    Unlink.  Job file to remove when printing completed.

     W	    Width. The page width (in characters) to used for printing.

     Z	    zoptions. Options passed by lpr -Zzoptions.   These  are  passed  to
	    output filters to aid in printing.

     f	    Formatted File.  Name of a file to print which is already formatted.

     l	    Like  ``f''  but  passes  control  characters and does not make page
	    breaks.

     p	    Name of a file to print using pr(1) as a filter.

     t	    Troff File.  The file contains troff(1) output (cat  phototypesetter
	    commands).

     d	    DVI  File.	 The  file contains Tex(l) output (DVI format from Stan-
	    ford).

     g	    Graph File.  The file contains data produced by plot(3X).

     c	    Cifplot File. The file contains data produced by cifplot.

     v	    The file contains a raster image.

     r	    The file contains text data with FORTRAN  carriage	control  charac-
	    ters.

     1	    Troff  Font  R. Name of the font file to use instead of the default.
	    (Obsolete)

     2	    Troff Font I. Name of the font file to use instead of  the	default.
	    (Obsolete)

     3	    Troff  Font  B. Name of the font file to use instead of the default.
	    (Obsolete)

     4	    Troff Font S. Name of the font file to use instead of  the	default.
	    (Obsolete)

     Each  job	in the spool queue can have an associated job hold file which is
     used by the server process to control the printing of the job.  The  status
     file contains information controlling the job hold status and error status.
     The  spool server will attempt to print a job a limited number of times be-
     fore abandoning it or setting an error status in the job status file.   The
     following is a typical job hold file.
	    hold	 0 priority    0 active      2135 redirect remove      0
	    error

     A nonzero hold entry will prevent the job from  being  processed;	the  lpc
     hold  and release commands update this field.  The priority field overrides
     the normal first-in first-out printing priority; jobs with non-zero  prior-
     ity fields are printed first.  The lpc topq command updates this field.  If
     the  active  field is non-zero, the job is being printed by the server with
     the specified process id.	The redirect field allows individual jobs to  be
     forwarded	to a different printer; the lpc move command updates this field.
     Finally, the remove and error fields are used to control printing of  prob-
     lem  jobs.  The remove field is set when a job should be removed; the error
     field records information that would prevent a job from being printed.

JOB SUBMISSION
     The LPR program is used to submit a job to the LPRng system.  The LPR  pro-
     gram opens a connection to the LPD server and then transfer the job control
     file  and	data files.  The LPD server checks to see if the remote host and
     user has permissions to spool to the requested printer, and then checks  to
     see  if the printer is accepting jobs.  If both conditions are met, the job
     is accepted and the control and data files are placed in the  spool  direc-
     tory.   The  LPRng  software  sends the control file first, followed by the
     data files.

     If the LPR program is acting as a filter, it is not necessary to  temporar-
     ily  store  the print job on the local machine.  The input data can be sent
     directly to the LPD server for spooling using an implicit job size of 0 and
     sending data until the connection is terminated to  the  server.	However,
     some  LPD servers do not accept 0 size jobs, even though it is specified by
     the RFC1179, so by default LPR will create a temporary file.   The  LPR  -k
     (seKure) option specifies this direct transmission mode be used.

JOB TRANSMISSION
     When  LPR is to send a job to the server, it must determine the location of
     the server.  It does this by examining the values of the specified  printer
     and host.

     If  the  printer and host are explicitly specified in the form pr@host then
     the LPR program will send the job to the specified spool queue  pr  and  to
     the  server  running  on  host.   This  can  be explicitly specified by the
     PRINTER environment variable or by the LPR -P option.

     If the printer is specified only by a name, then  the  information  in  the
     printcap  database is used.  The printcap entry for the printer is searched
     for and the remote host and printer information extracted.  The job is sent
     to the server running on the specified host.

     This action can be modified by  the  following  printcap  or  configuration
     tags.

     1. default_host=host
	  (Configuration) If there is no printcap entry for the printer, the job
	  is sent to the LPD server running on host.

     2. force_localhost
	  (Configuration  or  printcap) If this flag is specified,  then LPR and
	  other client programs will send the job to the server running  on  the
	  localhost.  This overrides the default_host information.

FORWARDING OPERATIONS
     The  LPD system can forward jobs from one spool directory to another.  This
     is controlled by the following options.

     1.   The forward field in the spool control file has a value  rp@rm.   This
	  can be set using the LPC forward command.

     2.   The  lp  (line printer) printcap entry has the form rp@rm.  There is a
	  rm (remote machine) and optional rp (remote printer) printcap entry.

     The first of the above conditions to be met will determine the destination.
     If printing is enabled, then jobs will be forwarded to the remote	destina-
     tion.  Example:
     # using lp=rp@host
     test:sd=/usr/spool/test
       :lp=test@host
     test:sd=/usr/spool/test
       :lp=test@host%port
     # using :rp:rm:
     test:sd=/usr/spool/test
       :rp=test:rm=host

     3.   The  LPD  server  uses  the same algorithm for sending jobs as the LPR
	  program.  A connection is made to the remote server and the files  are
	  copied  to the server.  A set of timeouts is used to control error re-
	  cover and retry operations.  The printcap and configuration  variables
	  connect_timeout, connect_interval, connect_grace, and send_try control
	  connecting  to  the remote host.  A connection is attempted to the re-
	  mote server from a random port in the range of ports specified by  the
	  originate_port variable.  If a connection is not completed within con-
	  nect_timeout	seconds,  the  connection is aborted, and then after the
	  connect_interval seconds it is retried.  The procedure repeated indef-
	  initely for printing, but only once for status or control  operations.
	  A connect_timeout value of 0 indicates no timeout; a value of 0 speci-
	  fies	infinite  timeout After a job has been successfully printed, the
	  connection is closed and the server waits  for  connect_grace  seconds
	  before trying to reconnect.

BOUNCE QUEUES
     Normally  job  files  are forwarded to a printer without modification.  The
     lpd_bounce flag makes the queue a bounce queue and  allows  banners  to  be
     generated	and  data files to passed through the appropriate format filter.
     The entire output of this process is then passed to  the  destination  with
     the  format  specified  by the bq_format option (default l or binary).  See
     PRINTING OPERATIONS for details about filters.  For example, the  following
     printcap entry will filter format f files.
     testbq:sd=/usr/spool/testbq:
       :lpd_bounce
       :bq_format=l
       :lp=final@host
       :if=/usr/lib/filter_for_f
       :mf=/usr/lib/filter_for_m
       :pf=/usr/lib/filter_for_pr

CHANGING FORMAT OF DATAFILES
     Sometimes	only the indicated format of the data files needs to be changed.
     This can be done using the translate_format option.  This entry consists of
     pairs of lower case characters of the form SdSd...; S is the original and d
     is the translated format.
     changeformat:
       :sd=/usr/spool/changeformat:
       :translate_format=mfpf
       :lp=final@host

     In the example above, the m format is processed by a filter, and  then  its
     format  type  is  changed	to f; the p format is processed similarly.  Note
     that the lpr -p option specifies that the job  will  be  processed  by  the
     /bin/pr  command - the filter must do both the pr processing and any neces-
     sary format conversions.

LPR FILTER PROCESSING
     The :lpr_bounce: printcap flag will cause LPR to do bounce queue  filtering
     before  sending  the job to the remote queue.  This can have unexpected ef-
     fects if the filters are not available on the local host.

     A typical entry which will cause LPR to do filtering is shown below.
     testbq:lpr_bounce
       :lp=printer@host
       :if=/usr/lib/filter_for_f
       :vf=/usr/lib/filter_for_v
       :mf=/usr/lib/filter_for_m
       :translate_format=mfvf

     This entry will force LPR to run jobs with formats f, m, and v
     through the appropriate filter.
     It will also rename the formats to the f format.

ROUTING JOBS TO PRINTERS
     When a job is submitted for printing, sometimes it is desirable to have  it
     dynamically  rerouted  to	another  spool queue, or multiple copies send to
     various destination.  This can be done by using a routing_filter.

     When a job is accepted by the LPD server, part of the  processing	includes
     passing  it to a program specified by the printcap router entry.  This fil-
     ter is invoked with the original control file as STDIN, and the default set
     of filter options.  The output of the routing filter will be a set  of  di-
     rectives  used by LPD when forwarding the job to another printer or in pro-
     cessing the job.  The environment and options flags are set as for a  stan-
     dard  filter.   (See "FILTERS" for details.)  Here is a sample printcap en-
     try:
     t2|Test Printer 2
	 :sd=/var/spool/LPD/t2
	 :lf=log
	 :lp=t2@printserver
	 :bq=t1@localhost
	 :destinations=t1@localhost,t2@localhost
	 :router=/usr/local/libexec/filters/router

     The routing filter exit status is used as follows:
			 0  (JSUCC) - normal processing
			 37 (JHOLD) - job is held
			 any other value - job is deleted from queue

     The router filter returns one or more routing entries  with  the  following
     format.   Note  that  entry order is not important, but each entry will end
     with the 'end' tag.  dest <destination queue> copies <number of  copies  to
     be made> X<controlfile modifications> end

     Example of router output:
     dest t1@localhost
     copies 2
     CA
     end
     dest t2@localhost
     CZ
     end

     The above routing information will have copies of the job sent to
     the t1 and t2 spool queue servers.  If no valid routing information
     is returned by the router filter the job will be sent to the default
     bounce queue destination.

REFORMATING CONTROL FILES
     Sometimes	it  is	desirable to reformat a control file before sending to a
     remote destination.  If the control_filter printcap entry is present,  then
     the  control  file  is passed through the filter.	If the filter exits with
     status JSUCC, then the job is process normally; status  JABORT  causes  the
     job  processing  to be aborted, status JREMOVE causes the job processing to
     be removed, and any other status is treated as JFAIL.

     After passing the control file through the control_filter, the  LPD  server
     will  reread it, and transfer only the data files specified in the new con-
     trol file to the destination.

SPOOL QUEUE NAME OPTION
     The qq printcap entry and the use_queuename configuration entry causes  the
     name  of  the spool queue to be placed in the job control file.  This value
     can be used by the filter to determine how to process a job.  When combined
     with the use of the Bounce Queue, this can be used to reformat jobs  before
     sending to another printer spooler system.

PRINTING OPERATIONS
     When printing is enabled, the LPD server will create a spool server process
     to  carry	out  printing  operations.  For each job in the queue, the spool
     server process will create a subserver process  to  carry	out  the  actual
     printing  operations.   If  the subserver process fails, the server process
     will initiate recovery operations.  Job will be attempted to be printed un-
     til all are done or a subserver returns an  ABORT	indication;  the  server
     will then terminate operations.

     The  server  process  normally  scans the queue once, at initiation; if the
     spool control file is modified, usually by using the lpc command, the spool
     queue is rescanned.  The overall algorithm for job printing is:
     open the print device;
     send some initialization strings;
     send a banner to the device;
     send the job data files to the device;
     send some termination strings;
     close the print device;

     In order to handle the various device requirements, the  subserver  process
     in turn uses 'filter' programs specified in the printcap entry to carry out
     the individual steps.

     OF Filter
	  The  'of'  filter  is used for initialization, banner printing and the
	  termination strings.	It has the peculiar property of  suspending  it-
	  self	when  sent a special escape string, allowing other filters to be
	  used to print the individual job files.

     Data Filters
	  Each data file in a job has format specified by a lower case character
	  and an associated filter specified in the printcap file.  For example,
	  the 'g' format is printed by the 'gf' filter, and so forth.	By  con-
	  vention,  the 'if' filter is used to print 'f' (ordinary text) and 'l'
	  (binary) format jobs.

     lp-pipe Filters
	  If the printcap device specification has the form  |program  then  the
	  output  device  is accessed by the specified program.  This allows the
	  program to take care of any required initialization  or  communication
	  requirements.

     The  following  is  a concise summary of the actual algorithm used to print
     files.  Note that LP stands for the printer device or filter  specified  by
     the  'lp' printcap entry; OF stands for the 'of' printcap filter; IF is the
     default 'if' filter; BP is the banner printing filter; and  ?F  stands  for
     the  filter  for  data  file.   The  '??' values stand for entries from the
     printcap file.

     LP = open( 'lp' );  // open device, filter, or network connection
     OF = IF = LP;	 // set defaults
     set up accounting according to 'af' entry;
     if( 'of' ) OF = filter( 'of' ) -> LP;// make OF filter
     if 'as' then record start of job accounting information.
     if 'achk' then check for accounting limits.
     if( leader on open 'ld' ) `ld` -> OF// send leader
     if( FF on open 'fo' ) `fo` -> OF	 // send leader

     // print a banner
     // first check to see if required
     //   and then to see if not suppressed by printcap
     //   or by user
     do_banner =
	 (always banner 'ab'
	     || (!suppress banner 'sb' && job has banner ));
     if( ! header last 'hl' && do_banner ){
	 if( banner program 'bp' ){
	     fork and exec bp to generate banner, but into temp file.
	     cat temp file -> OF;
	 } else {
	     short banner info -> OF;
	 }
     }

     // now we suspend the OF filter, use other filters
     if( OF != LP ) suspend OF filter;

     for each data file df in job do
	 // send FF between files of job
	 if( !first job && ! no FF separator 'sf' ){
	     if( OF != LP ) wake up OF filter;
	     'ff' -> OF;
	     if( OF != LP ) suspend OF filter;
	 }

	 // get filter for job
	 format = jobformat;
	 if( jobformat == 'f' or jobformat = 'l' ){
	     format = 'f';
	 }
	 filter = check pc for filter for format;
	 ?F = LP; // default - no filter
	 if( filter ){
	     ?F = filter( filter ) -> LP;
	 }

	 data file -> ?F;
	 // note: if :direct_read: flag set, filter input
	 // is directly from the file,	otherwise the
	 // file contents are written to the filter input.

	 if( ?F != LP ) close( ?F )
     endfor

     // finish printing

     if( OF != LP ) wake up OF filter;
     if( header last 'hl' && do_banner ){
	 if( ! no FF separator 'sf' ){
	     'ff' -> OF;
	 }
	 if( banner program 'bp' ){
	     fork and exec bp to generate banner, but into temp file.
	     cat temp file -> OF;
	 } else {
	     short banner info -> OF;
	 }
     }

     if( ff on close 'fq' ){
	 'ff' -> OF;
     }

     if( trailer on close 'tr' ){
	 tr -> OF;
     }

     if 'ae' then record end of job accounting information.

     if( OF != LP ) close( OF );
     close( LP );

     When printing or transferring a job to a spool queue fails, it  is  retried
     the  number  of times specified by the rt (or send_try ) printcap variable.
     A 0 value specifies an infinite number or retries.  When the retry count is
     exceeded, then the send_failure_action printcap variable determines the ac-
     tion to be taken.	The variable can be the values succ , fail , abort , re-
     move , ignore , or hold , which will cause the job to be  treated	as  nor-
     mally  completed,	retried,  aborted,  removed, or ignored and retried at a
     later time respectively.  These names correspond to the  JSUCC  ,	JFAIL  ,
     etc.  error codes returned by filters.  If the variable has the form |/fil-
     ter , then the filter is run and passed the number of attempts on the stan-
     dard input.  The filter must exits with a JSUCC, JFAIL,  etc.,  error  code
     and the server will take the appropriate action as listed above.

     The  print  filters  normally  have their input provided by a process via a
     pipe.  However, if the direct_read printcap flag is set,  then  the  filter
     input  is	taken  directly  from the job file.  This is compatible with the
     vintage BSD method, but loses the ability to track the job progress.

     After the job print or transfer attempt, if the job is to	be  removed  and
     the  printcap  variable  save_on_error is true, the job will not be removed
     from the spool queue but only flagged with an error.  The job can	then  be
     retried  at a later time.	If the job is successfully printed it is usually
     removed  from  the  spool	queue.	 However,  if  the   printcap	variable
     save_when_done  is  true the job will merely be marked as completed and not
     removed from the queue.

FILTERS
     As described in the previous section, filters are created to handle  output
     to devices or other filters.  The command line to invoke a filter is gener-
     ated in the following manner.

     1.   The  printcap entry or configuration value defining the filter command
	  is obtained.

     2.   The file to be printed or the banner line/file generated by the banner
	  printer will be written to STDIN  (file descriptor 0) of  the  filter.
	  The output device (or /dev/null if this is not a printing filter) will
	  be  be STDOUT  (file descriptor 1) and STDERR (file descriptor 2) will
	  be connected to the error logging file.  If this is a printing filter,
	  the error log will be determined by the :af: printcap field and  FD  3
	  will	be  opened and set to the either the file, remote host, or input
	  of the filter program.

     3.   Filter specifications starting with ROOT will be run as root	(EUID  =
	  0).	This  can be a serious security loophole and should only be used
	  as a last resort for specific problems.

     4.   The options for the filter command line will be replaced by  appropri-
	  ate  values.	Option specifications have the form $[0| ][-]X.  The de-
	  fault option expansion has the form $X -> -X'value'; the form  $0X  or
	  $(space)X adds a space after the -X, i.e.- $0X -> -X 'value'; the form
	  $-X  suppresses  the -X, i.e. - $-X -> value.  The options will be ex-
	  panded as follows:

	  Key  Value
	  a    Accounting file (printcap 'af' entry)
	  b    Job size, i.e.- total data file size, in bytes
	  c    if binary (format 'l') expands to -c
	  d    Control directory
	  e    job data file
	  f    original print file name (control file N field)
	  h    Control file hostname
	  i    Control file indent (I) field
	  j    job number from control file name
	  k    Control file name
	  l    printcap Page length (pl) value
	  m    printcap Cost factor (co) value
	  n    Control file user logname (P) field
	  p    Remote Printer name for forwarded jobs
	  r    Remote Host name for forwarded jobs
	  s    printer Status file (ps) value
	  t    current time in simple format
	  w    printcap Page width (pw) value
	  x    printcap x dimension (px) value
	  y    printcap y dimension (py) value
	  F    data file format character
	  P    Printer name
	  S    printcap Comment tag (cm) value
	  Upper Case   control file line starting with letter
	  Digit control file line starting with digit

     5.   The options specified by the filter_options (for none OF  filters)  or
	  of_filter_options  (for the OF filter) will be appended to the command
	  line and expanded.  To suppress adding options, you can use  the  form
	  '-$ filter', i.e. - of=-$/bin/cat.  If the 'bkf' (backwards compatible
	  filter  options)  printcap flag is set, the of filter is given the op-
	  tions specified by bk_of_filter_options and  other  filters  those  by
	  bk_filter_options.   The following shows the various combinations pos-
	  sible, and typical values for the options.

	  Options
	  filter_options    $C $F $H $J $L $P $Q $R $Z $a $c $d $e $f $h $i \
			    $j $k $l $n $s $w $x $y $-a
	  bk_filter_options $P $w $l $x $y $F $c $L $i $J $C $0n $0h $-a
	  bk_of_filter_options $w $l $x $y

     6.   A printing filter which executes correctly and completely should
	  exit with a 0 error status.
	  A nonzero error status will be interpreted as follows:
	  JFAIL    32	failed - retry later
	  JABORT   33	aborted - do not try again, but keep job
	  JREMOVE  34	failed - remove job

     The JFAIL will cause the job to be retried at a later time.  A limit can be
     placed on the number of retries using the :rt: or :send_try:  printcap  en-
     try.  A retry value of 0 will cause infinite retries.  The JABORT indicates
     serious  problems and will cause printing operations on the job to stop un-
     til restarted by operator intervention.  The JREMOVE status indicates prob-
     lems, and the job should be removed from the spool queue.

     The environment variables for filters are highly  restricted,  due  to  the
     possibility for abuse by users.  The following variables are set:

     USER and LOGNAME
	  user name or daemon name.

     LOGDIR
	  home directory of user or daemon.

     PATH from the filter_path configuration variable.

     LD_LIBRARY_PATH
	  from the filter_ld_path configuration variable.

     SHELLset to /bin/sh

     IFS  set to blank and tab.

     TZ   the TZ environment variable.

     SPOOL_DIR
	  the spool directory for the printer

     CONTROL_DIR
	  the control directory for the printer

     PRINTCAP_ENTRY
	  the printcap entry for the printer

     PPD  the content of the ppd field in printcap (if there is any)

     CONTROL
	  the control file for the print job

     pass_env environment variables
	  Values  of  environment variables listed in the pass_env configuration
	  variable.

ACCOUNTING
     The LPRng software provides several methods of performing accounting.   The
     printcap  af  (accounting field), as and ae (accounting start and end), and
     achk (accounting check) provide a basic set of facilities.   The  af  field
     specifies	a  file,  filter,  or  TCP  network  connection to an accounting
     server.  If af has the form |filter or |-$ filter then  a	filter	will  be
     started  and  all	accounting  information will be sent to the filter.  The
     first form passes the filter the command line options specified by the fil-
     ter_options configuration variable and the second suppresses  option  pass-
     ing.   If af has the form host%port then a TCP connection will be opened to
     the port on the specified host and accounting information sent there.   All
     other  forms  will be treated as a pathname relative to the queue spool di-
     rectory.

     If af specifies a file, then the accounting information is appended  to  an
     existing file; the accounting file will not be created.

     When  af specifies a filter or network connection and the achk flag is set,
     then after writing the initial  accounting  information  (see  as	printcap
     field  below)  the server will wait for a reply of the form ACCEPT from the
     filter or server.	If not received, the job will not be printed.

     The as (accounting start) and ae (accounting  end)  fields  can  specify  a
     string  to  be printed or a filter.  Options in the string will be expanded
     as for filters, and the strings printed to either the  accounting	informa-
     tion  destination.   If  the  as  field  specifies a filter, then the print
     server will wait for the filter to exit before printing the  job.	 If  the
     exit status is 0 (successful), the job will be printed.  A non-zero JREMOVE
     status  will  remove  the	job, while any other status will terminate queue
     printing operations.  After printing the job, the ae filter will be started
     and the server will wait for it to complete before printing the next job.

     The as and ae filters will have STDOUT set to the printing  device  and  or
     filter,  and  the STDERR set to the error log file for the print queue, and
     file descriptor 3 set to the destination specified by the af field.

     As a convenience, all format filters for printing will be started with file
     descriptor 3 set to the destination  (file  or  filter)  specified  by  the
     printcap af field.  This allows special filters which can query devices for
     page  counts  to  pass their information directly to an accounting program.
     The descriptor will READ/WRITE, allowing filters to  query  the  accounting
     program and/or update the information directly.

LOGGING INFORMATION
     In  order	to provide a centralized method to track job status and informa-
     tion, the printcap/configuration  variable  logger_destination  enable  the
     send  of  status  and  other information to a remote destination.	The log-
     ger_destination value has the form
	    host[%port][,protocol]
	Examples:
	    taco%451,UDP
	    dickory%2001,TCP
     where host is the host name or IP address, port is an optional port number,
     and protocol is an optional protocol type such as UDP or TCP.  The configu-
     ration variables default_logger_port  and	default_logger_protocol  can  be
     used  to  override  the default port number (2001) and protocol (UDP) to be
     used if none is specified.  Logging information has the format below.
	    IDENTIFIER jobid [PRINTER name] at timestamp \
	       STATUS | TRACE | FILTER_STATUS PID nnn
	    [ status information]

     The status information format consists of an identifier line, followed by a
     specifier of the status type.  The logging information entry is  terminated
     by  a  line  with a single period on it.  Lines with a starting period have
     the period duplicated.

AUTHENTICATION
     Rather than building authentication facilties into LPRng, an  interface  to
     authentication  programs  is  defined,  and  will	be used as follows.  The
     printcap and configuration entries auth, auth_client_filter,  auth_forward,
     auth_forward_id,	   auth_forward_filter,     auth_receive_filter,     and
     auth_server_id entries control authentication.  The  auth	value  specifies
     the  type of authentication to be used for client to server authentication.
     Typical values would be kerberos, md5, etc.  If the authentication type  is
     not  built-in,  the  client  programs use the auth_client_filter program to
     perform authentication.  When a server gets and an authentication	request,
     it will use the auth_receive_filter program to perform authentication.  The
     auth_server_id  is  the remote server id used when a client is sending jobs
     to the server or when the server is originating a request.  When  a  server
     forwards  a request, it uses auth_forward value to determine if authentica-
     tion is to be done, and the auth_forward_id as the destination server id.

Client To Server Authentication
     1.  The client will open a connection to the server  and  sends  a  command
	 with  the following format.  The REQ_SECURE field in the command corre-
	 sponds to the one-byte command type used by the LPR protocol.
	    Commands:
		\REQ_SECUREprinter C user\n
	    Print job transfers:
		\REQ_SECUREprinter C user controfilename\n

     2.  On reception of this command,	the server will send a one byte  success
	 code  as  below.  An error code may be followed by additional error in-
	 formation.  The values used by LPRng include:
	    ACK_SUCCESS     0	success, no error
	    ACK_STOP_Q	    1	failed; no spooling to the remote queue
	    ACK_RETRY	    2	failed; retry later
	    ACK_FAIL	    3	failed; job rejected, no retry

     3.  If there is an error the connection will  be  terminated.   The  server
	 will  then  start  an authentication process, and provide the following
	 open file descriptors for it.	The authenticator process  will  run  as
	 the UID of the server (i.e.- usually daemon).
	    FD	  Options Purpose
	    0	  R/W	  socket connection to remote host (R/W)
	    1	  W	  pipe or file descriptor
			  for information for server
	    2	  W	  error log
	    3	  R	  pipe or file descriptor
			  for responses to client

	 The command line arguments will have the form:
	    program -S -Pprinter -nuser -Rserver_user -Ttempfile

	 The printer and user information will be obtained from the command line
	 sent  to the server.  The authenticator can create additional temporary
	 or working files with the  pathnames  tempfile.ext;   these  should  be
	 deleted after the authentication process has been completed.

     4.  After	receiving  \ACK_SUCCESS,  the  client  starts  an  authenticator
	 process, and provides the following open file descriptors for it.   The
	 authenticator process will run UID user.
	    FD	  Options Purpose
	    0	  R/W	  socket connection to remote host (R/W)
	    1	  W	  pipe or file descriptor
			  for responses to client
	    2	  W	  error log

	 The command line arguments will have the form:
	    program -C -Pprinter -nuser -Rserver_user -Ttempfile

     5.  The authenticator can create additional temporary or working files with
	 the  pathnames tempfile.ext;  these will be deleted after the authenti-
	 cation process has been completed.  The client  authenticator	will  be
	 running as the client user.

     6.  After	exchanging  authentication information, the client authenticator
	 will transfer the contents of the temporary file to the server  authen-
	 ticator,  using FD 0.	It will then wait for reply status on FD 0.   If
	 the transfer step fails, or there is no reply	status	of  the  correct
	 format,   the	client authenticator will print any received information
	 on FD 1, error information on FD 2,  and  then  exit  with  error  code
	 JFAIL.

     7.  After	receiving the files on FD 0,  the server authenticator will per-
	 form the required authentication procedures and leave	the  results  in
	 tempfile.   The  server authenticator will write the following to FD 1,
	 for use by the server:
	    authentication_info\n

	 If the transfer step or authentication fails,	 then  the  server  will
	 write	an  error  message  to FD 2 and exit with error code JFAIL.  The
	 server will use this authentication information to determine if the re-
	 mote user has permission to access the system.

     8.  The server authentication process will read input from FD 3  until  and
	 end  of  file, and then proceed to transfer the input to the client au-
	 thenticator.  If the data transfer fails,  then the process  will  exit
	 with error code JFAIL, otherwise it will exit with error code JSUCC.

     9.  The  client  authenticator  will read the status information from FD 0,
	 and after performing authentication will write it to  FD  1.	If  data
	 transfer  or authentication fails,  the authenticator will write an er-
	 ror message to FD 2 and exit with error code JFAIL, otherwise	it  will
	 exit with error code JSUCC.

Server to Server Authentication
     The Server to Server authentication procedure is used by one server to for-
     ward jobs or commands to another server.  It should be noted that this for-
     warding  operation  puts an implicit trust in the security of the client to
     server to server chain.  In the description below,  src  and  dst	are  the
     userid of the source and destination servers respectively.

     1.  The  originating host takes the part of the client, and will transfer a
	 job acting like the client.  The initial information transfer from  the
	 originating (src) server will have the format:
	    Commands:
		\REQ_SECUREprinter F user\n
	    Print job transfers:
		\REQ_SECUREprinter F user controfilename\n

	 After receiving a 0 acknowledgment byte, the src server will invoke its
	 authenticator	with  the  arguments below.  The forward_user value will
	 default to the server_user value if not explicitly provided.
	    program -C -Pprinter -nserver_user \
		-Rforward_user -Ttempfile

     2.  On the destination server the authenticator is invoked with  the  argu-
	 ments:
	    program -S -Pprinter -nserver_user \
		-Rforward_user -Ttempfile

	 The  authentication is performed to determine that the transfer was be-
	 tween the two servers,  rather than the user to server.

KERBEROS AUTHENTICATION
     As a convenience, Kerberos 5 authentication has been  built  into	the  LPD
     clients  and  servers.   If  you  are  not familiar with Kerberos, then you
     should obtain other documentation and/or assistance  before  attempting  to
     use  this.   The following facilities/configuration values are used to sup-
     port Kerberos.

     A Kerberos principal is the name used for authentication purposes	by  Ker-
     beros.  For example, user principals have the form user@REALM; for example,
     papowell@ASTART.COM.    Services	and/or	 servers   have  the  form  ser-
     vice/host@REALM; for example, the lpd server  on  dickory	would  have  the
     form:
	  lpr/astart2.astart.com@ASTART.COM

     User  to  server authentication process will use the user's principal name,
     and generate a service name for the server.  The name  generation	is  con-
     trolled by the following configuration and/or printcap values.

     serviceThe name of the service to be used to identify the service.  This is
	    usually "lpr".

     kerberos_keytab
	    The location of the server keytab file.  The keytab file corresponds
	    to	the  user  password, and must be considered a security risk.  It
	    should be owned by the LPD server user, and  readable/writable  only
	    by the server.

     kerberos_life
	    The  lifetime of the authentication ticket used by the server.  This
	    usually defaults to 10 hours.

     kerberos_renew
	    The renewal time of the ticket.

     In addition to the default values, an  explicit  server  principal  can  be
     specified in the printcap file using the kerberos_server_principal This al-
     lows cross domain authentication to be done.

     When setting up Kerberos authentication, you will need to establish princi-
     pals  for	each  server,  and to distribute and install the keytab files on
     each server.

AUTHENTICATION PERMISSIONS
     The following permissions tags are available  to  check  on  authentication
     procedures.
	    AUTH=[NONE,USER,FWD]    - authentication
		AUTH=NONE   - no authentication
		AUTH=USER   - authentication from a client
		AUTH=FWD    - forwarded authentication from a lpd server
	    AUTHTYPE=globmatch
	    AUTHUSER=globmatch
	    FWDUSER=globmatch

     1.  The  AUTH tag can be used to determine the type of authentication being
	 done.	The AUTHTYPE tag can be used to match  the  authentication  type
	 being	used or requested by the client or remote server.  The authenti-
	 cation process returns an authentication identifier for the user;  this
	 information can be matched by the AUTHUSER tag.

     2.  For  a  command sent from a client or forwarded from a server, AUTHUSER
	 matches the auth_user_id provided for the user when sent to  a  server.
	 (This	information  will  be forwarded by a remote server).  For a for-
	 warded command, FWDUSER refers to the	authentication	information  for
	 the server doing the forwarding.

     3.  For  example,	 to  reject  non-authenticated operations, the following
	 line could be put in the permissions file.
	    REJECT AUTH=NONE

     4.  To reject server  forwarded  authentication  as  well,  we  use  REJECT
	 AUTH=NONE,FWD.  If a remote server with name serverhost has id informa-
	 tion  FFEDBEEFDEAF,  then the following will accept only forwarded jobs
	 from this server.
	    ACCEPT FWDUSER=FFEDBEEFDEAF REMOTEHOST=serverhost
	    REJECT AUTH=FWD

ENVIRONMENT
     The lpd action can also be manipulated by using environment variables.

     LPR_TMP

   Authentication
     MD5KEYFILE
	    Used for md5 signated file transmission

FILES
     The files used by LPRng are set by  values  in  the  printer  configuration
     file.  The following are a commonly used set of default values.
     /usr/local/etc//lpd.conf			  LPRng configuration file
     ${HOME}/.printcap				  user printer description file
     /etc/printcap				  printer description file
     /usr/local/etc//lpd.perms			  permissions
     /var/run/lpd				  lock file for queue control
     /var/spool/lpd				  spool directories
     /var/spool/lpd/QUEUE/control		  queue control
     /var/spool/lpd/QUEUE/log			  trace or debug log file
     /var/spool/lpd/QUEUE/acct			  accounting file
     /var/spool/lpd/QUEUE/status		  status file

SEE ALSO
     lpd.conf(5),  lpc(8),  checkpc(8),  lpr(1),  lpq(1),  lprm(1), printcap(5),
     lpd.perms(5), pr(1).

AUTHOR
     Patrick Powell <papowell@lprng.com>.

DIAGNOSTICS
     Most of the diagnostics are self explanatory.  If you are puzzled over  the
     exact  cause  of  failure,  set the debugging level on (-D5) and run again.
     The debugging information will help you to  pinpoint  the	exact  cause  of
     failure.

HISTORY
     LPRng  is	a  enhanced printer spooler system with functionality similar to
     the Berkeley LPR software.  The LPRng developer mailing list  is  lprng-de-
     vel@lists.sourceforge.net;   subscribe  by  visiting  https://lists.source-
     forge.net/lists/listinfo/lprng-devel   or	 sending   mail   to   lprng-re-
     quest@lists.sourceforge.net with the word subscribe in the body.
     The software is available via http://lprng.sourceforge.net

LPRng				   2008-03-14				  LPD(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=lpd&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help