pcnfsd, rpc.pcnfsd - (PC)NFS authentication and print request server
pcnfsd is an RPC server that supports Sun ONC clients on PC (DOS, OS/2, Macintosh, and
other) systems. This page describes version two of the pcnfsd server.
rpc.pcnfsd may be started from /etc/rc.local or by the inetd(8) superdaemon. It reads the
configuration file /etc/pcnfsd.conf if present, and then services RPC requests directed to
program number 150001. This release of the pcnfsd daemon supports both version 1 and ver-
sion 2 of the pcnfsd protocol. Consult the rpcgen source file pcnfsd.x for details of the
The requests serviced by pcnfsd fall into three categories: authentication, printing, and
other. Only the authentication and printing services have administrative significance.
When pcnfsd receives a PCNFSD_AUTH or PCNFSD2_AUTH request, it will "log in" the user by
validating the username and password and returning the corresponding uid, gids, home
directory, and umask. If pcnfsd was built with the WTMP compile-time option, it will also
append a record to the wtmp(5) data base. If you do not wish to record PC "logins" in this
way, you should add a line of the form
to the /etc/pcnfsd.conf file.
pcnfsd supports a printing model based on the use of NFS to transfer the actual print data
from the client to the server. The client system issues a PCNFSD_PR_INIT or PCN-
FSD2_PR_INIT request, and the server returns the path to a spool directory which the
client may use and which is exported by NFS. pcnfsd creates a subdirectory for each of
its clients: the parent directory is normally /export/pcnfs and the subdirectory is the
hostname of the client system. If you wish to use a different parent directory, you
should add a line of the form
to the /etc/pcnfsd.conf file.
Once a client has mounted the spool directory using NFS and has transferred print data to
a file in this directory, it will issue a PCNFSD_PR_START or PCNFSD2_PR_START request.
pcnfsd handles this, and most other print-related requests, by constructing a command
based on the printing services of the server operating system and executing the command
using the identity of the PC user. Since this involves set-user-id privileges, pcnfsd must
be run as root.
Every print request from the client includes the name of the printer which is to be used.
In SunOS, this name corresponds to a printer definition in the /etc/printcap(5) database.
If you wish to define a non-standard way of processing print data, you should define a new
printer and arrange for the client to print to this printer. There are two ways of setting
up a new printer. The first involves the addition of an entry to /etc/printcap(5) and the
creation of filters to perform the required processing. This is outside the scope of this
discussion. In addition, pcnfsd includes a mechanism by which you can define virtual
printers known only to pcnfsd clients. Each printer is defined by a line in the /etc/pcn-
fsd.conf file of the following form
printer name alias-for command
name is the name of the printer you want to define. alias-for is the name of a "real"
printer which corresponds to this printer. For example, a request to display the queue for
name will be translated into the corresponding request for the printer alias-for. If you
have defined a printer in such a way that there is no "real" printer to which it corre-
sponds, use a single "-" for this field. (See the definition of the printer test below for
an example.) command is a command which will be executed whenever a file is printed on
name. This command is executed by the Bourne shell, /bin/sh using the -c option. For com-
plex operations you should construct an executable shell program and invoke that in com-
mand. Within command the following tokens will be replaced:
$FILE Replaced by the full path name of the print data file. When the command has been
executed, the file will be unlinked.
$USER Replaced by the username of the user logged in to the client system.
$HOST Replaced by the host name of the client system.
Consider the following example /etc/pcnfsd.conf file:
printer rotated lw /usr/local/bin/enscript -2r $FILE
printer test - /usr/bin/cp $FILE /usr/tmp/$HOST-$USER
If a client system prints a job on the printer rotated the utility enscript will be
invoked to pre-process the file $FILE. In this case, the -2r option causes the file to be
printed in two-column rotated format on the default PostScript(R) printer. If the client
requests a list of the print queue for the printer rotated the pcnfsd daemon will trans-
late this into a request for a listing for the printer lw.
The printer test is used only for testing. Any file sent to this printer will be copied
into /usr/tmp. Any request to list the queue, check the status, etc. of printer test will
be rejected because the alias-for has been specified as "-".
/etc/pcnfsd.conf configuration file
/export/pcnfs default print spool directory
The pcnfsd source code is distributed by Sun Microsystems, Inc. with their PC/NFS product
under terms described in common.h in that source code. Those terms require that you be
informed that this version of pcnfsd was modified to run on NetBSD and is NOT supported by
25 April 1991 RPC.PCNFSD(8)