pcnfsd - PC-NFS authentication and print request server
pcnfsd is an RPC server that supports ONC clients on PC (DOS, OS/2,
Macintosh, and other) systems. This describes version two of the
pcnfsd can be started from the /sbin/init.d/nfs.server startup script
by setting the PCNFS_SERVER variable to 1 in /etc/rc.config.d/nfsconf,
or from the inetd daemon (see inetd(1M)). It reads the configuration
file /etc/pcnfsd.conf, if present, and services RPC requests directed
to program number 150001. The pcnfsd daemon now supports version 1
and version 2 of the PCNFSD protocol.
The requests serviced by pcnfsd fall into three categories:
authentication, printing, and other. Only the authentication and
printing categories have administrative significance.
When pcnfsd receives a PCNFSD_AUTH or PCNFSD2_AUTH request, it will
"log in" the user by validating the user name and password, returning
the corresponding user ID, group IDs, home directory, and umask. It
will also append a record to the wtmp data base (see wtmp(4)). If you
do not want PC "logins" recorded in this way, add a line to the
/etc/pcnfsd.conf file in the form:
By default, pcnfsd will only allow authentication or print requests
for users with user IDs in the range 101 to 60002 (this corresponds,
in SVR4, to the range for nonsystem accounts). To override this, add
a line to the /etc/pcnfsd.conf file in the form:
uidrange range [, range ]...
where each range is a user ID number in the form
or an inclusive range of user ID numbers in the form
NOTE: pcnfsd will deny authentication if the /etc/shells file is
Hewlett-Packard Company - 1 - HP-UX Release 11i: November 2000
pcnfsd supports a printing model that uses NFS to transfer print data
from the client to the server. The client system issues a
PCNFSD_PR_INIT or PCNFSD2_PR_INIT request, and the server returns the
path to a spool directory that is exported by NFS for use by the
client. pcnfsd creates a subdirectory for each client. By default,
the parent directory is /var/spool/pcnfs, and the name of each
subdirectory is the same as its client's host name. To use a
different parent directory, add a line to the /etc/pcnfsd.conf file in
Once a client has mounted the spool directory using NFS, and
transferred print data to a file in that directory, it will issue a
PCNFSD_PR_START or PCNFSD2_PR_START request. pcnfsd handles most
print-related requests by constructing a command based on the printing
services of the server's operating system, and executing that command
using the identity of the PC user. Because this involves set-user-ID
privileges, pcnfsd must be run as root.
Every print request from a client includes the name of the printer to
be used. This name corresponds to a printer that has been configured
into the line printer spooling system using the lpadmin command.
To process print data in a special way (for example, to print it in
landscape mode, or to print it in duplex mode), define a new printer
and arrange for the client to print to that printer. There are two
ways to define the new printer:
+ You can add a new printer to the line printer spooling system
that uses a different printer model script, and arrange for
the client to use the new printer. Do this using the lpadmin
command (see lpadmin(1m)).
+ pcnfsd includes a mechanism to define virtual printers known
only to pcnfsd clients. Each of these printers is defined by
an entry in the file /etc/pcnfsd.conf using the following
printer name alias-for command
with the following values:
name The name of the printer, as it will be
referred to in print requests from
alias-for The corresponding name for the printer, as
it is defined in the line printer spooling
system. For example, a request to display
Hewlett-Packard Company - 2 - HP-UX Release 11i: November 2000
the queue for name will be translated into
the corresponding request for the printer
alias-for. If you have defined a printer
within pcnfsd that has no corresponding
printer defined in the line printer
spooling system, use a single hyphen (-)
for this field. For an example, see the
definition of the printer test in the
examples section, below.
command A command that will be executed whenever a
file is printed on name. This command is
executed by the POSIX shell, /usr/bin/sh
using the -c option. For complex
operations, construct an executable shell
program and execute that in command.
Within command the following tokens will
$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 user name
of the user logged in to
the client system.
$HOST Replaced by the host name
of the client system.
By checking the modification time (and contents) of the file
/var/spool/lp/pstatus, pcnfsd will detect when printers have been
added or deleted, and will rebuild its list of valid printers.
However, pcnfsd does not monitor the file /etc/pcnfsd.conf for
updates; if you change this file, you must kill and restart pcnfsd for
the changes to take effect.
Given the following entries for the file /etc/pcnfsd.conf:
printer abc lj lp -dlj -oraw
printer test - /usr/bin/cp $FILE /usr/tmp/$HOST-$USER
If a user on a client system prints a job on printer abc, the request
will be sent to destination lj in raw mode.
Hewlett-Packard Company - 3 - HP-UX Release 11i: November 2000
If the client requests a list of the print queue for printer abc, the
pcnfsd daemon will translate this into a request for a listing for
Printer test is used only for testing. Any file sent to this printer
will be copied into the directory /usr/tmp. Any request to list the
queue, check the status, etc., of printer test will be rejected
because alias-for has been specified as a hyphen (-).
lp(1), lpstat(1), inetd(1M), lpadmin(1M), wtmp(4).
Hewlett-Packard Company - 4 - HP-UX Release 11i: November 2000