.\"## fam.1m.in
.\"##
.\"## When configure.in generates fam.1m, lines starting with .\"##
.\"## should be removed; when building on IRIX, lines starting with
.\"## .\"IRIX should have that part removed (uncommenting the rest
.\"## of the line).
.\"##
.\"## In retrospect, I'm not sure this was better than maintaining two
.\"## separate files.
.\"##
.nr X
.if \nX=0 .ds x} fam 1M "Silicon Graphics" "\&"
.TH \*(x}
.SH NAME
fam \- file alteration monitor
.SH SYNOPSIS
.nf
\f3/usr/etc/fam\f1 [ \f3\-f\f1 | \f3\-v\f1 | \f3\-d\f1 ] [ \f3\-l\f1 | \c
\f3\-t\f1 \f2NFS_polling_interval\f1 ]
[ \f3\-T\f1 \f2idle_timeout\f1 ] [ \f3\-p\f1 \c
\f2program\f3.\f2version\f1 ] [ \f3\-L\f1 ] [ \f3-C\f1 ]
[ \f3-c\f1 \f2config_file\f1 ]
.fi
.SH DESCRIPTION
\f2fam\f1 is a server that tracks changes to the filesystem and
relays these changes to interested applications.
Applications such as
\f2fm\f1(1G) and \f2mailbox\f1(1) present an up-to-date view of the filesystem.
In the absence of \f2fam\f1, these applications and others like them
are forced to poll the filesystem to detect changes.
\f2fam\f1 is
more efficient.
.P
Applications can request \f2fam\f1 to monitor any files or directories in
any filesystem.
When \f2fam\f1 detects changes to monitored files, it notifies
the appropriate application.
The FAM API provides a programmatic interface to \f2fam\f1; see
.IR fam (3X).
.P
\f2fam\f1 is informed of filesystem changes as they happen by the
kernel through the \f2imon\f1(7M) pseudo device driver.
If asked to
monitor files on an NFS mounted filesystem, \f2fam\f1 tries to use
\f2fam\f1 on the NFS server to monitor files.
If \f2fam\f1 cannot
contact a remote \f2fam\f1, it polls the files instead.
\f2fam\f1 also polls special files.
.P
Normally, \f2fam\f1 is started by \f2inetd\f1(1M).
It is registered with
\f2portmap\f1(1M) as performing the sgi_fam service.
.SH OPTIONS
.TP 26
\f3\-l\f1
Disable polling of NFS
files.
It does not disable use of remote \f2fam\f1 on NFS servers,
nor does it disable polling of local files.
.TP
\f3\-t\f1 \f2NFS_polling_interval\f1
Set the interval for polling files to \f2NFS_polling_interval\f1 seconds.
The default
is six seconds.
.TP
\f3\-T\f1 \f2idle_timeout\f1
Set the idle timeout interval to \f2idle_timeout\f1.
fam exits \f2idle_timeout\f1 seconds after its
last client disconnects.
A value of 0 causes fam to wait indefinitely for new connections.
The default is five seconds.
.TP
\f3\-f\f1
Remain in the foreground instead of spawning a child and exiting.
This option is ignored if \f2fam\f1 is started by \f2inetd\f1.
.TP
\f3\-v\f1
Turn on verbose messages.
.TP
\f3\-d\f1
Enable verbose messages and debug messages.
.TP
\f3\-p\f1 \f2program\f3.\f2version\f1
Use the specified RPC program and version numbers.
.TP
\f3\-L\f1
Local-only mode. \f2fam\f1 will only accept requests from clients running on the
local machine. This overrides the \f2local_only\f1 flag in the configuration
file. This option is ignored if \f2fam\f1 is started by \f2inetd\f1.
.TP
\f3\-C\f1
Compatibility mode. This disables authentication and reduces access security
as described under SECURITY below. This overrides the
\f2insecure_compatibility\f1 flag in the configuration file.
.TP
\f3\-c\f1 \f2config_file\f1
Read configuration information from the given file rather than the default,
which is \f2XXX_FAM_CONF\f1.
.SH "CONFIGURATION FILE"
In addition to its command-line options, \f2fam\f1's behavior can also be
controlled through its configuration file. By default, this is
\f2XXX_FAM_CONF\f1; the \f3\-c\f1 command-line option can be used to specify
an alternate file. Configuration lines are in the format \f2option=value\f1.
Lines beginning with \f2#\f1 or \f2!\f1 are ignored.
\f2fam\f1 recognizes the following options:
.TP 26
\f3insecure_compatibility\f1
If set to \f2true\f1, this disables authentication and reduces access security
as described under SECURITY below. This is \f2false\f1 by default. Setting
this option to \f2true\f1 is the same as using the \f3\-C\f1 command-line
option.
.TP
\f3untrusted_user\f1
This is the user name or UID of the user account which \f2fam\f1 will use for
unauthenticated clients. If a file can't be \f2stat\f1'ed by this user,
\f2fam\f1 will not tell unauthenticated clients about the file's existence.
If an untrusted user is not given in the configuration file, \f2fam\f1 will
write an error message to the system log and terminate.
.TP
\f3local_only\f1
If set to \f2true\f1, \f2fam\f1 will ignore requests from remote \f2fam\f1s.
This is \f2false\f1 by default. Setting this option to \f2true\f1 is the same
as using the \f3\-L\f1 command-line option. This option is ignored if
\f2fam\f1 is started by \f2inetd\f1.
.TP
\f3idle_timeout\f1
This is the time in seconds that fam will wait before exiting after its last
client disconnects. The default is five seconds. This option is overridden
by the \f3-T\f1 command-line option.
.TP
\f3nfs_polling_interval\f1
This is the interval in seconds between polling files over an NFS filesystem.
The default is six seconds. This option is overridden by the \f3-t\f1
command-line option.
.TP
\f3xtab_verification\f1
If set to \f2true\f1, \f2fam\f1 will check the list of exported filesystems
when remote requests are received to verify that the requests fall on
filesystems which are exported to the requesting hosts. This is
\f2true\f1 by default. If this option is set to \f2false\f1, \f2fam\f1 will
service remote requests without attempting to perform the verification. If
the \f2local_only\f1 configuration option or \f3-L\f1 command-line option is
used, \f2xtab_verification\f1 has no effect.
.\"##
.\"## This stuff is removed because the MAC and SAT stuff isn't implemented.
.\"## If you put this back, add sysconf(1) to the SEE ALSO section.
.\"##
.\"##.TP
.\"##\f3disable_mac\f1
.\"##If set to \f2true\f1, \f2fam\f1 will ignore its clients' MAC labels. By
.\"##default, \f2fam\f1 will use MAC labels if MAC and IP_SECOPTS are
.\"##\f2sysconf\f1'd on, and will ignore this option if the system doesn't support
.\"##MAC and TSIX. The only use for this option is to disable MAC-label-setting on
.\"##a system which supports it, which is probably undesirable.
.\"##.TP
.\"##\f3disable_audit\f1
.\"##If set to \f2true\f1, \f2fam\f1 will not log auditing information. By
.\"##default, \f2fam\f1 will use SAT (security audit trail) if _SC_AUDIT is
.\"##\f2sysconf\f1'd on, and will ignore this option if the system doesn't support
.\"##SAT. The only use for this option is to disable auditing on a system which
.\"##supports it, which is probably undesirable.
.\"##
.\"## End of stuff to remove
.\"##
.SH SECURITY
For backward compatibility, the \f3\-C\f1 command-line option and
\f2insecure_compatibility\f1 configuration option can be used to disable
authentication. Configuring \f2fam\f1 this way opens a publically known
security weakness whereby a "rogue client" can obtain the names of all the
files and directories on the system.
.\"IRIX .P
.\"IRIX You might want to configure \f2fam\f1 this way if you have a client
.\"IRIX program which is statically linked to an older version of libfam.a
.\"IRIX which does not perform authentication; see COMPATIBILITY below.
.P
\f2Note that fam never opens the files it's monitoring\f1, and cannot
be used by a rogue client to read the contents of any file on the system.
\f2fam\f1 only gives out the names of monitored files, and only monitors files
which the client can
.IR stat (1M).
Users can stat a file without having read permission on it as long as
they have search permission on the directory containing it.
.\"IRIX .SH COMPATIBILITY
.\"IRIX If you have an existing FAM client which isn't seeing files which
.\"IRIX you think it should be able to see, or which doesn't seem to be
.\"IRIX responding to file operations, try running \f2fam\f1 with the
.\"IRIX \f3-C\f1 flag and restarting the client. If that appears to fix the
.\"IRIX problem, the client is probably statically linked with a
.\"IRIX non-authenticating version of libfam. (libfam on IRIX prior to
.\"IRIX 6.5.8 does not perform authentication.)
.\"IRIX .P
.\"IRIX The best way to fix this is to recompile your program with a current
.\"IRIX version of libfam.
.\"##.\"IRIX (Unfortunately, you can't simply install a new
.\"##.\"IRIX DSO, because libfam on IRIX prior to 6.5.8 has been a static
.\"##.\"IRIX archive.)
.\"##.\"IRIX .P
.\"IRIX If recompiling isn't an option, and the client only monitors a few
.\"IRIX known files, you might add a user account named "fammable" (for
.\"IRIX example), add that account to a group which can
.\"IRIX .IR stat (1M)
.\"IRIX those files, and change the \f2untrusted_user\f1 option in the
.\"IRIX configuration file to make \f2fam\f1 use that account for requests
.\"IRIX from unauthenticated clients.
.SH FILES
XXX_FAM_CONF
.SH "SEE ALSO"
.\"IRIX fm(1G),
inetd(1M),
.\"IRIX mailbox(1),
portmap(1M),
fam(3X),
imon(7M),
stat(1M).