The
rpc.ypxfrd
utility is used to speed up the distribution of very large NIS maps
from NIS master to NIS slave servers.
The normal method for transferring
maps involves several steps:
- The master server calls
yppush(8)
to inform the slave servers to start a transfer.
- The slave servers invoke
ypxfr(8),
which reads the entire contents of a map from the master server
using the yp_all() function.
- The
ypxfr(8)
program then creates a new map database file by using the
db(3)
library hash method to store the data that it receives from the server.
- When all the data has been retrieved,
ypxfr(8)
moves the new file into place and sends
ypserv(8)
on the local machine a YPPROC_CLEAR to tell it to refresh its
database handles.
This process can take several minutes when there are very large
maps involved.
For example: a passwd database with several tens of
thousands of entries can consume several megabytes of disk space,
and it can take the
db(3)
library package a long time to sort and store all the records
in a hash database.
Consider also that there are two sets of map
files:
master.passwd.by{name,uid}
and
passwd.by{name,uid}.
The
rpc.ypxfrd
utility speeds up the transfer process by allowing NIS slave servers to
simply copy the master server's map files rather than building their
own from scratch.
Simply put,
rpc.ypxfrd
implements an RPC-based file transfer protocol.
Transferring even
a multi-megabyte file in this fashion takes only a few seconds compared
to the several minutes it would take even a reasonably fast slave server
to build a new map from scratch.
The
rpc.ypxfrd
utility uses the same access restriction mechanism as
ypserv(8).
This means that slave servers will only be permitted to transfer
files if the rules in the
securenets
database permit it (see
ypserv(8)
for more information on
securenets).
Furthermore, only slave servers using reserved
ports will be allowed to transfer the
master.passwd
maps.