From: ian Date: Sun, 20 Jun 1999 17:46:12 +0000 (+0000) Subject: Regenerated formatted documentation (spec.ps, spec.html). X-Git-Tag: debian_version_0_64 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=userv.git;a=commitdiff_plain;h=70d3947fb471e0e12ef89c35f915f6acec217f4a;hp=3f4f10799993052f55b58c590475b11fe9bcb61d Regenerated formatted documentation (spec.ps, spec.html). --- diff --git a/debian/changelog b/debian/changelog index 4277873..c83253a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -userv (0.63) unstable; urgency=low +userv (0.64) unstable; urgency=low * New "shutdown" builtin service for terminating uservd. * Spec. document shows subsections in TOC. @@ -7,7 +7,9 @@ userv (0.63) unstable; urgency=low wrong environment variable settings). (Thanks to Ben Harris.) * Makefile bug fixed (tokens.h would sometimes not be rebuilt). - -- Ian Jackson Wed, 2 Jun 1999 20:58:07 +0100 + * Regenerated formatted documentation (spec.ps, spec.html). + + -- Ian Jackson Sun, 20 Jun 1999 18:45:54 +0100 userv (0.62) unstable; urgency=low diff --git a/spec.html/ch-client.html b/spec.html/ch-client.html index e8f0a09..4c079db 100644 --- a/spec.html/ch-client.html +++ b/spec.html/ch-client.html @@ -1,110 +1,159 @@ - -User service daemon and client specification - Client program usage - - - + + + + + + +User service daemon and client specification - Client program usage + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 2
+User service daemon and client specification - Chapter 2
Client program usage -

-
userv options [--] service-user service-name [argument ...]
-userv options -B|--builtin [--] builtin-service [info-argument ...]

+


+ +

+

+userv options [--] service-user service-name [argument ...]
+userv options -B|--builtin [--] builtin-service [info-argument ...]
+
+

+ +

service-user specifies which user is to provide the service. -The user may be a login name or a numeric uid, or - to indicate -that the service user is to be the same as the calling user.

+The user may be a login name or a numeric uid, or - to indicate +that the service user is to be the same as the calling user. +

-The service name is interpreted by the userv[1] +

+The service name is interpreted by the userv[1] daemon on behalf of the service user. It will often be the name of a program. +

+
-

-2.1 Options -

+

+2.1 Options +

+ +

Single-letter options may be combined as is usual with Unix programs, and the value for such an option may appear in the same argument or in the next.

-
-B
--builtin
Requests that a builtin service be provided. This is equivalent to -using the --override option to specify a string consisting of -execute-builtin followed by the builtin-service -requested, and requesting a service user of - (indicating the -calling user).

+

-B

--builtin
Requests that a builtin service be provided. This is equivalent to +using the --override option to specify a string consisting of +execute-builtin followed by the builtin-service +requested, and requesting a service user of - (indicating the +calling user). If the builtin service being requested requires a service-argument then this must be supplied to the client in the -same argument as the builtin-service. See Directives for changing execution settings, subsection 4.2.4 for details of the builtin services available, -and Security-overriding options, section 2.2 for details of the --override -options.

+same argument as the builtin-service. See Directives for changing execution settings, subsection 4.2.4 for details of the builtin services available, +and Security-overriding options, section 2.2 for details of the --override +options. The actual service name passed will be the builtin-service; note that this actual service name (as opposed to the override data) and the info-arguments supplied will be ignored by most builtin -services; the override mechanism and execute-builtin will be +services; the override mechanism and execute-builtin will be used to ensure that the right builtin service is called with the right service-arguments. -

-ffd[modifiers]=filename
--file fd[modifiers]=filename
Requests that data be copied in and out of the service using pipes. + +

-ffd[modifiers]=filename

--file fd[modifiers]=filename
Requests that data be copied in and out of the service using pipes. For each file or descriptor this will be done by creating a pipe, one end of which is passed to the service program and the other end of -which is passed to a copy of cat invoked by the client; the -other file descriptor passed to cat will be one inherited by +which is passed to a copy of cat invoked by the client; the +other file descriptor passed to cat will be one inherited by the client program from the caller or one opened by the client program -on behalf of the caller.

+on behalf of the caller. The descriptor in the service program that should be connected must be specified as fd, either as a decimal number or as one of the -strings stdin, stdout or stderr. The next argument is +strings stdin, stdout or stderr. The next argument is a filename which will be opened by the client with the privileges of the calling user. -

+ modifiers is used to specify whether the file or descriptor is to be read from or written to. It consists of a series of words separated by commas. A comma may separate the modifiers from the fd and is required if fd is not numeric. -

+ +

The modifier words are:

-
read
O_RDONLY: Allow reading and not writing. May not be used with -write or things that imply it. -
write
O_WRONLY: Allow writing and not reading. Doesn't truncate or -create without truncate or create. write or things -that imply it may not be used with read. -
overwrite
Equivalent to write,create,truncate. -
create
creat
O_CREAT: Creates the file if necessary. Implies write. -
exclusive
excl
O_EXCL: Fails if the file already exists. Implies write and -create. May not be used with truncate. -
truncate
trunc
O_TRUNC: Truncate any existing file. Implies write. -May not be used with exclusive. -
append
O_APPEND: All writes will append to the file. Implies write -(but not create). -
sync
O_SYNC: Do writes synchronously. Implies write. -
wait
nowait
close
These modifiers control the behaviour of the client, with respect to +
read
O_RDONLY: Allow reading and not writing. May not be used with +write or things that imply it. + +
write
O_WRONLY: Allow writing and not reading. Doesn't truncate or +create without truncate or create. write or things +that imply it may not be used with read. + +
overwrite
Equivalent to write,create,truncate. + +
create
creat
O_CREAT: Creates the file if necessary. Implies write. + +
exclusive
excl
O_EXCL: Fails if the file already exists. Implies write and +create. May not be used with truncate. + +
truncate
trunc
O_TRUNC: Truncate any existing file. Implies write. +May not be used with exclusive. + +
append
O_APPEND: All writes will append to the file. Implies write +(but not create). + +
sync
O_SYNC: Do writes synchronously. Implies write. + +
wait
nowait
close
These modifiers control the behaviour of the client, with respect to the pipes carrying data to and from the service, when the service terminates. See below. -
fd
The filename is not a filename but a numeric file descriptor. -One or both of read and write must be specified, and no -other words are allowed. The filename may also be stdin, -stdout or stderr for file descriptor 0, 1 or 2 respectively. + +
fd
The filename is not a filename but a numeric file descriptor. +One or both of read and write must be specified, and no +other words are allowed. The filename may also be stdin, +stdout or stderr for file descriptor 0, 1 or 2 respectively. +
-

+

-If no modifiers which imply read or write are used it -is as if write had been specified, except that if the +

+If no modifiers which imply read or write are used it +is as if write had been specified, except that if the filedescriptor 0 of the service is being opened (either specified -numerically or with stdin) it is as if overwrite had been -specified (or write if only fd was specified).

+numerically or with stdin) it is as if overwrite had been +specified (or write if only fd was specified). +

-The client will also use O_NOCTTY when opening files specified by -the caller, to avoid changing its controlling terminal.

+

+The client will also use O_NOCTTY when opening files specified by +the caller, to avoid changing its controlling terminal. +

+

By default stdin, stdout and stderr of the service will be connected to the corresponding descriptors on the client. Diagnostics from -the client and daemon will also appear on stderr.

+the client and daemon will also appear on stderr. +

-If wait is specified, the client will wait for the pipe to be +

+If wait is specified, the client will wait for the pipe to be closed, and only exit after this has happened. This means that either the receiving end of the pipe connection was closed while data was still available at the sending end, or that the end of file was @@ -112,102 +161,128 @@ reached on the reading file descriptor. Errors encountered reading or writing in the client at this stage will be considered a system error and cause the client to exit with status 255, but will not cause disconnection at the service side since the service has already -exited.

+exited. +

-If close is specified the client will immediately close the pipe -connection by killing the relevant copy of cat. If the service -uses the descriptor it will get SIGPIPE (or EPIPE) for a +

+If close is specified the client will immediately close the pipe +connection by killing the relevant copy of cat. If the service +uses the descriptor it will get SIGPIPE (or EPIPE) for a writing descriptor or end of file for a reading one; the descriptor -opened by or passed to the client will also be closed.

+opened by or passed to the client will also be closed. +

-If nowait is specified then the client will not wait and the +

+If nowait is specified then the client will not wait and the connection will remain open after the client terminates. Data may continue to be passed between the inheritors of the relevant descriptor on the service side and the corresponding file or descriptor on the client side until either side closes their descriptor. This should not usually be specified for stderr (or -stdout if --signals stdout is used) since diagnostics from +stdout if --signals stdout is used) since diagnostics from the service side may arrive after the client has exited and be -confused with expected output.

+confused with expected output. +

-The default is wait for writing file descriptors and close +

+The default is wait for writing file descriptors and close for reading ones. -

-wfd=action
--fdwaitfd=action
Sets the action on termination of the service for the specified file -descriptor; action must be wait, nowait or close +

+ +
-wfd=action
--fdwaitfd=action
Sets the action on termination of the service for the specified file +descriptor; action must be wait, nowait or close as described above. The file descriptor must be specified as open when this option is encountered; this option is overridden by any -later --file or --fdwait option - even by a ---file which does not specify an action on termination (in this +later --file or --fdwait option - even by a +--file which does not specify an action on termination (in this case the default will be used, as described above). -
-Dname=value
--defvar name=value
Set a user-defined variable name to value. These + +
-Dname=value
--defvar name=value
Set a user-defined variable name to value. These user-defined variables are made available in the configuration -language as the parameters u-name and are passed to the -service in environment variables USERV_U_name. name +language as the parameters u-name and are passed to the +service in environment variables USERV_U_name. name may contain only alphanumerics and underscores, and must start with a letter. If several definitions are given for the same name then only the last is effective. -
-t seconds
--timeout seconds
Time out the service if it takes longer than seconds seconds (a + +
-t seconds
--timeout seconds
Time out the service if it takes longer than seconds seconds (a positive integer, in decimal). Timeout will produce a diagnostic on stderr and an exit status of 255. If seconds is zero then no timeout will be implemented (this is the default). -
-S method
--signals method
Affects the handling of the exit status when the service terminates + +
-S method
--signals method
Affects the handling of the exit status when the service terminates due to a signal. (The client will always finish by calling -_exit, so that only numbers from 0 to 255 can be returned and +_exit, so that only numbers from 0 to 255 can be returned and not the full range of numbers and signal indications which can be -returned by the wait family of system calls.)

+returned by the wait family of system calls.) +

The method may be one of the following:

status
The client's exit status will be status. This will not be distinguishable from the service really having exited with code status. This method is the default, with a status of 254. -
number
number-nocore
The client's exit status will be the number of the signal which caused -the termination of the service. If number is used rather than -number-nocore then 128 will be added if the service dumped core. -number is very like the exit code mangling done by the Bourne + +
number
number-nocore
The client's exit status will be the number of the signal which caused +the termination of the service. If number is used rather than +number-nocore then 128 will be added if the service dumped core. +number is very like the exit code mangling done by the Bourne shell. -
highbit
The client's exit status will be the number of the signal with + +
highbit
The client's exit status will be the number of the signal with 128 added. If the service exits normally with an exit code of greater than 127 then 127 will be returned. -
stdout
The service's numeric wait status as two decimal numbers (high byte + +
stdout
The service's numeric wait status as two decimal numbers (high byte first) and a textual description of its meaning will be printed to the client's standard output. It will be preceded by a newline and followed by an extra newline, and the numbers are separated from each other and from the textual description by single spaces. The exit status of the client will be zero, unless a system error occurs in which case no exit status and description will be printed to stdout, -and an error message will be printed to stderr as usual.
+and an error message will be printed to stderr as usual. -

+

+

+ +

Problems such as client usage errors, the service not being found or permission being denied or failure of a system call are system errors. An error message describing the problem will be printed on the client's stderr, and the client's exit status will be 255. If the client dies due to a signal this should be treated as a serious system error. -

-H
--hidecwd
Prevents the calling process's current directory name from being +

+ +
-H
--hidecwd
Prevents the calling process's current directory name from being passed to the service; the null string will be passed instead. -
-P
--sigpipe
If the service program is terminated due to a SIGPIPE the exit + +
-P
--sigpipe
If the service program is terminated due to a SIGPIPE the exit status of the client will be zero, even if it would have been something else according to the exit status method specified. This option has no effect on the code and description printed if the exit -status method stdout is in use. -
-h
--help
--copyright
-h or --help prints the client's usage message; ---copyright prints the copyright and lack of warranty notice. +status method stdout is in use. + +
-h
--help
--copyright
-h or --help prints the client's usage message; +--copyright prints the copyright and lack of warranty notice. + +


-

-2.2 Security-overriding options -

+

+2.2 Security-overriding options +

+ +

There are also some options which are available for debugging and to allow the system administrator to override a user's policy. These options are available only if the client is called by root or if the calling user is the same as the service user.

-
--override configuration-data
--override-file filename
Do not read the usual configuration files. Instead, the client sends +

--override configuration-data

--override-file filename
Do not read the usual configuration files. Instead, the client sends configuration-data (followed by a newline) or the contents of filename (which is opened in the context of the client) to the daemon and the daemon uses that data instead. The @@ -215,22 +290,36 @@ daemon and the daemon uses that data instead. The single newline appended so that a single directive can easily be given, but if more than one directive is required it will have to contain one or more real newlines. -

--spoof-user user
Pretend to the service that it is being called by user (which + +

--spoof-user user
Pretend to the service that it is being called by user (which may be a username or a uid). This will also affect the group and supplementary groups supplied to the service; they will be the standard group and supplementary groups for user. The ---spoof-user option will not affect which user is chosen if -the service user is specified as just -; in this case the service +--spoof-user option will not affect which user is chosen if +the service user is specified as just -; in this case the service user will be the real calling user. -

+ +


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+ +User service daemon and client specification
+ +
+0.62
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff --git a/spec.html/ch-config.html b/spec.html/ch-config.html index 946de10..7647ad1 100644 --- a/spec.html/ch-config.html +++ b/spec.html/ch-config.html @@ -1,40 +1,73 @@ - + + + + + + User service daemon and client specification - Service-side configuration - - + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 4
+User service daemon and client specification - Chapter 4
Service-side configuration

+
+ +

Which services may be run by whom and under what conditions is -controlled by configuration files.

+controlled by configuration files. +

+

The daemon will read these files in order. Certain directives in the files modify the daemon's execution settings for invoking the service, for example allowing certain file descriptors to be specified by the -client or specifying which program to execute to provide the service.

+client or specifying which program to execute to provide the service. +

+

The last instance of each such setting will take effect. The directives which specify which program to execute will not stop the configuration file from being read; they will be remembered and will -only take effect if they are not overridden by a later directive.

+only take effect if they are not overridden by a later directive. +

-The daemon will first read /etc/userv/system.default. Then, by +

+The daemon will first read /etc/userv/system.default. Then, by default (this behaviour may be modified), it will read a per-user file -~/.userv/rc, if it exists and the service user's shell is in -/etc/shells. Finally it will read -/etc/userv/system.override.

+~/.userv/rc, if it exists and the service user's shell is in +/etc/shells. Finally it will read +/etc/userv/system.override. +

+

When it has read all of these files it will act according to the currently values of of the execution settings. +

+
-

-4.1 Configuration file syntax -

+

+4.1 Configuration file syntax +

+ +

The configuration file is a series of directives, usually one per -line. The portion of a line following a hash character # is +line. The portion of a line following a hash character # is taken as a comment and ignored. Each directive consists of a series of tokens separated by linear whitespace (spaces and tabs); tokens may be words consisting of non-space characters, or, where a string is @@ -42,77 +75,104 @@ required, a string in double quotes. Double-quoted strings may contain the following backslash escapes:

-
\n
newline
\t
tab
\r
carriage return
\OOO
character whose octal code is OOO
\xXX
character whose hex code is XX
\punctuation
literal punctuation character (eg \\, \")
\newline (ie, backslash at end of line)
string continues on next line
-

+

\n
newline + +
\t
tab + +
\r
carriage return + +
\OOO
character whose octal code is OOO +
\xXX
character whose hex code is XX + +
\punctuation
literal punctuation character (eg \\, \") + +
\newline (ie, backslash at end of line)
string continues on next line + + +

+ +

Relative pathnames in directives are relative to the service program's current directory (usually the service user's home directory). -Pathnames starting with the two characters ~/ are taken to be +Pathnames starting with the two characters ~/ are taken to be relative to the service user's home directory. +

+
-

-4.2 Configuration file directives -

+ +

+4.2 Configuration file directives +

+
-

-4.2.1 Immediate directives -

+

+4.2.1 Immediate directives +

+ +

The following directives take effect immediately:

-
cd pathname
Change directory in the service program. cd is cumulative. It -is an error if the directory cannot be changed to.

+

cd pathname
Change directory in the service program. cd is cumulative. It +is an error if the directory cannot be changed to. -cd should not be used between execute-from-directory and +cd should not be used between execute-from-directory and the invocation of the service program, as the test for the availability of the service program would be done with the old current directory and the actual execution with the new (probably causing an error). -

eof
Stop reading the configuration file in question, as if end of file had -been reached. Any control constructs (if, catch-quit or -errors-push) which were started in that file will be considered + +

eof
Stop reading the configuration file in question, as if end of file had +been reached. Any control constructs (if, catch-quit or +errors-push) which were started in that file will be considered finished. Parsing will continue in the file which caused the file -containing the eof to be read. -

quit
Stop reading configuration files and act immediately on the current -settings. The behaviour of quit is subject to the -catch-quit control construct. -

include filename
include-ifexist filename
Read the configuration file filename, and then return to this +containing the eof to be read. + +

quit
Stop reading configuration files and act immediately on the current +settings. The behaviour of quit is subject to the +catch-quit control construct. + +

include filename

include-ifexist filename
Read the configuration file filename, and then return to this file and continue parsing it with the next directive. It is an error -if the file cannot be opened and read, unless include-ifexist +if the file cannot be opened and read, unless include-ifexist is used and the file does not exist, in which case the directive is silently ignored. -

include-lookup parameter directory
include-lookup-all parameter directory
Read the configuration file in directory whose name is the value -of parameter (see the description of if, Control structure directives, subsection 4.2.3). If parameter has several values they will -be tried in order; with include-lookup this search will stop -when one is found, but with include-lookup-all the search will -continue and any files appropriate to other values will be read too.

+ +

include-lookup parameter directory

include-lookup-all parameter directory
Read the configuration file in directory whose name is the value +of parameter (see the description of if, Control structure directives, subsection 4.2.3). If parameter has several values they will +be tried in order; with include-lookup this search will stop +when one is found, but with include-lookup-all the search will +continue and any files appropriate to other values will be read too. If none of the parameter's values had a corresponding file then the -file :default will be read, if it exists. If parameter's -list of values was empty then the file :none will be tried first -and read if it exists, otherwise :default will be tried.

+file :default will be read, if it exists. If parameter's +list of values was empty then the file :none will be tried first +and read if it exists, otherwise :default will be tried. -It is not an error for any of the files (including :default) not +It is not an error for any of the files (including :default) not to exist, but it is an error if a file exists and cannot be read or if the directory cannot be accessed. -

+ A translation will be applied to values before they are used to construct a filename, so that the lookup cannot access dotfiles or files in other directories: values starting with full stops will have -a colon prepended (making :.), colons will be doubled, and each -slash will be replaced with a colon followed by a hyphen :-. A +a colon prepended (making :.), colons will be doubled, and each +slash will be replaced with a colon followed by a hyphen :-. A parameter value which is the empty string will be replaced with -:empty (note that this is different from a parameter not having +:empty (note that this is different from a parameter not having any values). -

include-directory directory
Read configuration from all files in directory directory which + +

include-directory directory
Read configuration from all files in directory directory which are plain files whose names consist only of alphanumerics and hyphens and start with an alphanumeric. They will be read in lexical order. It is an error for the directory not to exist or for it or any of the files found not to be read successfully, or for anything with an appropriate name not to be a plain file or a symbolic link to a plain file. -

error text ...
Causes an error whose message includes the descriptive string + +

error text ...
Causes an error whose message includes the descriptive string text. text may consist of several tokens with intervening whitespace. The whitespace will be included in the message as found in the configuration file: all the characters until the end of the @@ -121,159 +181,203 @@ double-quoted string, in which case the usual meaning of the string (i.e., after backslash escape processing) will be used. Comments and linear whitespace at the end of the line (or just before the comment) will still be ignored. -

message text ...
Causes a message including the descriptive string text to be + +

message text ...
Causes a message including the descriptive string text to be delivered as if it were an error message, but does not actually cause -an error.

+an error. + + +


-

-4.2.2 Directives with delayed effect -

+

+4.2.2 Directives with delayed effect +

+ +

The following directives have no immediate effect, but are remembered and have an effect on later processing of the configuration files.

-
user-rcfile filename
Specifies that the file filename should be read instead of the -user's ~/.userv/rc. This does not happen immediately; +

user-rcfile filename
Specifies that the file filename should be read instead of the +user's ~/.userv/rc. This does not happen immediately; instead, the setting is remembered and used after the -system.default configuration file has been read. This +system.default configuration file has been read. This directive has no effect in a user's configuration file or in the -system.override file, as the user's configuration file has +system.override file, as the user's configuration file has already been found and read by then and will not be re-read. -

errors-to-stderr
Causes error messages to be delivered to the client's stderr. -

errors-to-file filename
Error messages will be written to filename, which will be opened + +

errors-to-stderr
Causes error messages to be delivered to the client's stderr. + +

errors-to-file filename
Error messages will be written to filename, which will be opened in the context of and with the privileges of the service user. -

errors-to-syslog [facility [level]]
Error messages will be delivered using syslog. The default -facility is user; the default level is error.

+ +

errors-to-syslog [facility [level]]
Error messages will be delivered using syslog. The default +facility is user; the default level is error. + + +


-

-4.2.3 Control structure directives -

+

+4.2.3 Control structure directives +

+ +

The following directives are used to create control structures. If the end of the file is encountered before the end of any control structure which was started inside it then that control structure is considered finished. This is not an error.

-
if condition
elif condition
else
fi
Lines following if are interpreted only if the condition is +

if condition

elif condition

else

fi
Lines following if are interpreted only if the condition is true. Many conditions are properties of parameter values. Most parameters have a single string as a value; however, some may yield zero or several strings, in which case the condition is true if it is true of any of the strings individually. Parameters are described -below.

+below. +

The conditions are:

-
glob parameter glob-pattern ...
The value of the parameter whose name is given matches one of the glob +
glob parameter glob-pattern ...
The value of the parameter whose name is given matches one of the glob patterns (anchored at both ends; backslashes can be used to escape metacharacters). -
range parameter min max
The value of the parameter is a nonnegative integer and lies within -the range specified. min or max may be $ to indicate + +
range parameter min max
The value of the parameter is a nonnegative integer and lies within +the range specified. min or max may be $ to indicate no lower or upper limit, respectively. -
grep parameter filename
The filename refers to a file one of whose lines is the value of + +
grep parameter filename
The filename refers to a file one of whose lines is the value of the parameter (leading or trailing whitespace on each line and empty lines in the file are ignored). It is an error for the file not to be opened and read. -
! condition
The condition is not true. -
Conjunctions: & and |
( condition
+
+
! condition
The condition is not true. + +
Conjunctions: & and |
+( condition
 & condition
 & condition
 ...
-)
-is true if all the listed conditions are true; where | is used it +) +
+ +is true if all the listed conditions are true; where | is used it is true if any of them is true. Newlines must be used to separate one condition from the next, as shown, and the parentheses are mandatory. -These conjunctions do not do lazy evaluation.
-

+These conjunctions do not do lazy evaluation. + +

+

+

The parameters are:

-
service
The service name specified when the client was called. -
calling-user
Two strings: the login name of the calling user (determined as for -USERV_USER, above) and the calling uid (represented in +
service
The service name specified when the client was called. + +
calling-user
Two strings: the login name of the calling user (determined as for +USERV_USER, above) and the calling uid (represented in decimal). -
calling-group
Several strings: the primary and supplementary group names and gids + +
calling-group
Several strings: the primary and supplementary group names and gids (in decimal) of the calling process. All the group names come first, and then the gids. If the first supplementary group is the same as the primary group then it is elided. -
calling-user-shell
The calling user's shell, as listed in the password entry for the -calling login name (as determined for USERV_USER, above). -
service-user
Two strings: the name of the service user (as specified to the client) + +
calling-user-shell
The calling user's shell, as listed in the password entry for the +calling login name (as determined for USERV_USER, above). + +
service-user
Two strings: the name of the service user (as specified to the client) and their uid (represented in decimal). -
service-group
Several strings: the primary and supplementary group names and gids + +
service-group
Several strings: the primary and supplementary group names and gids (in decimal) of the service user. -
service-user-shell
The service user's shell, as listed in their password entry. -
u-name
The value of the user-defined variable name passed by the caller -using the --defvar command-line option to the client. If the + +
service-user-shell
The service user's shell, as listed in their password entry. + +
u-name
The value of the user-defined variable name passed by the caller +using the --defvar command-line option to the client. If the variable was not defined then this parameter is an empty list of strings; in this case any condition which tests it will be false, and -include-lookup on it will read the :none file, or -:default if :none is not found. +include-lookup on it will read the :none file, or +:default if :none is not found. +
+

+ +
errors-push filename
srorre
Stacks the error handling behaviour currently in effect. Any changes +to error handling will take effect only between errors-push and +srorre. -
errors-push filename
srorre
Stacks the error handling behaviour currently in effect. Any changes -to error handling will take effect only between errors-push and -srorre. -
catch-quit
hctac
Any use of quit inside catch-quit will merely cause the -parsing to continue at hctac instead. Any control constructs -started since the catch-quit will be considered finished if a -quit is found.

+

catch-quit
hctac
Any use of quit inside catch-quit will merely cause the +parsing to continue at hctac instead. Any control constructs +started since the catch-quit will be considered finished if a +quit is found. -If an error occurs inside catch-quit the execution settings -will be reset (as if by the reset directive) and parsing will -likewise continue at hctac.

+If an error occurs inside catch-quit the execution settings +will be reset (as if by the reset directive) and parsing will +likewise continue at hctac. If a lexical or syntax error is detected in the same configuration -file as the catch-quit, while looking for the hctac -after an error or quit, that new error will not be caught. +file as the catch-quit, while looking for the hctac +after an error or quit, that new error will not be caught. + +


-

-4.2.4 Directives for changing execution settings -

+

+4.2.4 Directives for changing execution settings +

+ +

The following directives modify the execution settings; the server will remember the fact that the directive was encountered and act on it only after all the configuration has been parsed. The last directive which modifies any particuar setting will take effect.

-
reject
Reject the request. execute, execute-from-directory and -execute-from-path will change this setting. -

execute program [argument ...]
Execute the program program, with the arguments as specified, +

reject
Reject the request. execute, execute-from-directory and +execute-from-path will change this setting. + +

execute program [argument ...]
Execute the program program, with the arguments as specified, followed by any arguments given to the client if -no-suppress-args is in effect. It is an error for the +no-suppress-args is in effect. It is an error for the execution to fail when it is attempted (after all the configuration has been parsed). If program does not contain a slash it will be searched for on the service user's path. -

execute-from-directory pathname [argument ...]
Take all the characters after the last slash of the service name + +

execute-from-directory pathname [argument ...]
Take all the characters after the last slash of the service name specified when the client was called, and execute that program in the directory named by pathname as if it had been specified for execute. The part of the service name used may contain only alphanumerics and hyphens and must start with an alphanumeric (and it -must be non-empty), otherwise it is an error.

+must be non-empty), otherwise it is an error. This directive is ignored if the relevant program does not exist in the directory specified; in this case the program to execute is left -at its previous setting (or unset, if it was not set before).

+at its previous setting (or unset, if it was not set before). It is an error for the test for the existence of the program to fail other than with a `no such file or directory' indication. It is also an error for the execution to fail if and when it is attempted (after all the configuration has been parsed). -

execute-from-path
service is interpreted as a program on the default PATH -(or as a pathname of an executable, if it contains a /). This + +

execute-from-path
service is interpreted as a program on the default PATH +(or as a pathname of an executable, if it contains a /). This directive is very dangerous, and is only provided to make the ---override options effective. It should not normally be used. +--override options effective. It should not normally be used. It is an error for the execution to fail when it is attempted (after all the configuration has been parsed). -

execute-builtin service-name service-arguments
Executes the builtin service service-name. These builtin + +

execute-builtin service-name service-arguments

+Executes the builtin service service-name. These builtin services display information about the server and/or the request, and ignore any arguments passed from the service side except possibly to print them as part of their output. They write their results to their @@ -281,129 +385,166 @@ standard output (i.e., wherever file descriptor 1 is directed). The builtin services are:

-
execute
Displays the execution settings, defined variables, +
execute
Displays the execution settings, defined variables, arguments, etc. with which the builtin service was invoked. -
environment
Displays the environment variable settings with which the builtin + +
environment
Displays the environment variable settings with which the builtin service was invoked. -
parameter parameter
Displays the values of the service configuration language parameter + +
parameter parameter
Displays the values of the service configuration language parameter specified. -
version
Displays the version string and compilation details of the uservd + +
version
Displays the version string and compilation details of the uservd server program. -
reset
Displays the default reset configuration (evaluated when reset + +
reset
Displays the default reset configuration (evaluated when reset is found in a configuration file, or when an error is caught by -catch-quit). -
toplevel
Displays the top-level default configuration (the configuration data, +catch-quit). + +
toplevel
Displays the top-level default configuration (the configuration data, evaluated by the server, which calls all the other configuration files). -
override
Displays the top-level override configuration (the configuration data, + +
override
Displays the top-level override configuration (the configuration data, evaluated by the server, which causes all the other configuration data to be parsed). -
help
Displays a list of the understood builtin service names and arguments.
+
help
Displays a list of the understood builtin service names and arguments. -In the future other builtin services may be defined which do more than -just print information. -
set-environment
no-set-environment
Runs /etc/environment to set the service user's environment. +
shutdown
Arranges for the uservd to shut down. Available only when the +service user is root. This only affects new requests; it doesn't +terminate any currently-running requests + +
+

+ +
set-environment
no-set-environment
Runs /etc/environment to set the service user's environment. This adds the overhead of invoking a shell, but doesn't cause any shell (de)mangling of the service's arguments. This is achieved by invoking -
.../program arg arg arg ...
+
+.../program arg arg arg ...
+
+ as -
/bin/sh -c '. /etc/environment; exec "$@"' - .../program arg arg arg ...
-no-set-environment cancels the effect of -set-environment. -
no-suppress-args
suppress-args
Include any arguments given to the client as arguments to the program -invoked as a result of an execute, -execute-from-directory or execute-from-path directive. -suppress-args undoes the effect of no-suppress-args. -
require-fd fd-range read|write
Insist that the filedescriptor(s) be opened for reading resp. writing. +
+/bin/sh -c '. /etc/environment; exec "$@"' - .../program arg arg arg ...
+
+ +no-set-environment cancels the effect of +set-environment. + +
no-suppress-args
suppress-args
Include any arguments given to the client as arguments to the program +invoked as a result of an execute, +execute-from-directory or execute-from-path directive. +suppress-args undoes the effect of no-suppress-args. + +
require-fd fd-range read|write
Insist that the filedescriptor(s) be opened for reading resp. writing. It is an error if any descriptor marked as required when the service is about to be invoked (after the configuration has been parsed) was not specified when the client was invoked. Each file descriptor has a -separate setting, and the last one of require-fd, -allow-fd, ignore-fd, null-fd or reject-fd -which affected a particular file descriptor will take effect.

+separate setting, and the last one of require-fd, +allow-fd, ignore-fd, null-fd or reject-fd +which affected a particular file descriptor will take effect. fd-range may be a single number, two numbers separated by a hyphen, or one number followed by a hyphen (indicating all descriptors from that number onwards). It may also be one of the words -stdin, stdout or stderr. Open-ended file descriptor -rangers are allowed only with reject-fd and ignore-fd, +stdin, stdout or stderr. Open-ended file descriptor +rangers are allowed only with reject-fd and ignore-fd, as otherwise the service program would find itself with a very large -number of file descriptors open.

+number of file descriptors open. When the configuration has been parsed, and before the service is about to be executed, stderr (fd 2) must be required or allowed -(require-fd or allow-fd) for writing; this is so that +(require-fd or allow-fd) for writing; this is so that the error message printed by the server's child process if it cannot -exec the service program is not lost. -

allow-fd fd-range [read|write]
Allow the descriptor(s) to be opened for reading resp. writing, or -either if neither read nor write is specified. If a +exec the service program is not lost. + +
allow-fd fd-range [read|write]
Allow the descriptor(s) to be opened for reading resp. writing, or +either if neither read nor write is specified. If a particular descriptor not specified by the client then it will be open -onto /dev/null (for reading, writing, or both, depending on -whether read, write or neither was specified). -
null-fd fd-range [read|write]
Specify that the descriptor(s) be opened onto /dev/null for -reading resp. writing, or both if neither read nor write +onto /dev/null (for reading, writing, or both, depending on +whether read, write or neither was specified). + +
null-fd fd-range [read|write]
Specify that the descriptor(s) be opened onto /dev/null for +reading resp. writing, or both if neither read nor write is specified. Any specification of these file descriptors by the client will be silently ignored; the client will see its ends of the descriptors being closed immediately. -
reject-fd fd-range
Do not allow the descriptor(s) to be specified by the client. It is + +
reject-fd fd-range
Do not allow the descriptor(s) to be specified by the client. It is an error if any descriptor(s) marked for rejection are specified when the service is about to be invoked (after the configuration has been parsed). -
ignore-fd fd-range
Silently ignore any specification by the client of those + +
ignore-fd fd-range
Silently ignore any specification by the client of those descriptor(s). The pipes corresponding to these descriptors will be closed just before the service is invoked. -
disconnect-hup
no-disconnect-hup
Causes the service's process group to get a SIGHUP if the + +
disconnect-hup
no-disconnect-hup
Causes the service's process group to get a SIGHUP if the client disconnects before the main service process terminates. -no-disconnect-hup cancels disconnect-hup.

+no-disconnect-hup cancels disconnect-hup. If one of the reading descriptors specified when the client is called gets a read error, or if the service is disconnected for some other -reason, then the SIGHUP will be delivered before the +reason, then the SIGHUP will be delivered before the writing end(s) of the service's reading pipe(s) are closed, so that the client can distinguish disconnection from reading EOF on a pipe. -

reset
Resets the execution settings to the default. This is equivalent to: -
cd ~/
+
+
reset
Resets the execution settings to the default. This is equivalent to: +
+cd ~/
 reject
 no-set-environment
 suppress-args
 allow-fd 0 read
 allow-fd 1-2 write
 reject-fd 3-
-disconnect-hup
+disconnect-hup +
+ -If no execute, execute-from-path, -execute-from-directory or builtin is interpreted before +If no execute, execute-from-path, +execute-from-directory or builtin is interpreted before all the files are read then the request is rejected. +


-

-4.3 Errors in the configuration file -

+

+4.3 Errors in the configuration file +

+ +

If a syntax error or other problem occurs when processing a configuration file then a diagnostic will be issued, to wherever the -error messages are currently being sent (see the errors- family -of directives, above).

+error messages are currently being sent (see the errors- family +of directives, above). +

+

The error will cause processing of the configuration files to cease at -that point, unless the error was inside a catch-quit construct. +that point, unless the error was inside a catch-quit construct. In this case the settings controlling the program's execution will be -reset to the defaults as if a reset directive had been issued, -and parsing continues after hctac. +reset to the defaults as if a reset directive had been issued, +and parsing continues after hctac. +


-

-4.4 Defaults -

+

+4.4 Defaults +

+ +

The default configuration processing is as if the daemon were parsing an overall configuration file whose contents were as follows: -

reset
+
+reset
 user-rcfile ~/.userv/rc
 errors-to-stderr
 include /etc/userv/system.default
@@ -415,23 +556,41 @@ if grep service-user-shell /etc/shells
    srorre
 fi
 include /etc/userv/system.override
-quit

+quit +

+

-If one of the --override options to the client is used then it +

+If one of the --override options to the client is used then it will instead be as if the daemon were parsing an overall configuration as follows: -

reset
+
+reset
 errors-to-stderr
 include file containing configuration data sent by client
-quit
+quit +
+

+ +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next]
-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +User service daemon and client specification
+ +
+0.62
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff --git a/spec.html/ch-envir.html b/spec.html/ch-envir.html index 64819a3..40b79cd 100644 --- a/spec.html/ch-envir.html +++ b/spec.html/ch-envir.html @@ -1,125 +1,192 @@ - + + + + + + User service daemon and client specification - Execution environment of the service program - - + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 3
+User service daemon and client specification - Chapter 3
Execution environment of the service program

+
+ +

The daemon which is handling the service user side of things will read configuration files to decide what to do. If it decides to allow the service to be provided it will fork a subprocess to execute the -service.

+service. +

+

The service will have no controlling terminal, but it will be a -process group leader.

+process group leader. +

+

If the client is killed or times out or a file or descriptor being read or written by the client process gets an error then the service will be disconnected from the client. The client will return an exit status of 255 and some the service's pipes may be closed at the other -end. The service will become a child of init. The service may +end. The service will become a child of init. The service may well not notice the disconnection, though writing to a pipe after this -may produce a SIGPIPE and the facility exists to have a -SIGHUP sent to the service on disconnection. +may produce a SIGPIPE and the facility exists to have a +SIGHUP sent to the service on disconnection. +

+
-

-3.1 File descriptors -

+

+3.1 File descriptors +

+ +

The service program's standard filedescriptors, and possibly other file descriptors, will be connected to pipes or to -/dev/null. The userv client/daemon pair will arrange +/dev/null. The userv client/daemon pair will arrange that data is copied between the files or file descriptors specified to -to the client by the caller and these these pipes.

+to the client by the caller and these these pipes. +

+

Pipes which may be written to will be closed if a write error occurs on the corresponding client-side file or descriptor, which may result -in a SIGPIPE in the service program; pipes open for reading -will get EOF if the client-side file descriptor gets EOF -or an error.

+in a SIGPIPE in the service program; pipes open for reading +will get EOF if the client-side file descriptor gets EOF +or an error. +

+

If the service closes one of its reading file descriptors the writing -end of the corresponding pipe will generate a SIGPIPE when +end of the corresponding pipe will generate a SIGPIPE when attempts are made by the client/daemon pair to write to it. This will not be considered an error; rather, the relevant pipe will be discarded and the corresponding file or file descriptor held by the -client will be closed.

+client will be closed. +

+

Likewise, if one of the file descriptors held by the client for writing by the service is a pipe whose other end is closed by the caller then the client/daemon pair will see an error when trying to copy data provided by the service. This too will not be considered an error; rather, the pipe correspondong to that descriptor will be closed and any further writes will cause the service to get a -SIGPIPE.

+SIGPIPE. +

+

Note that not all write errors or broken pipes on file descriptors may be visible to the service, since buffered data may be discarded by the operating system and there will be a finite interval between the error happening and the service being disconnected from the client or the -next write causing a SIGPIPE.

+next write causing a SIGPIPE. +

+

Read errors on file descriptors (and disconnection) will only be visible to the service and distinguishable from normal end of file if -disconnect-hup is in effect.

+disconnect-hup is in effect. +

+

Read and write errors (other than broken pipes, as described above) will always be visible to the caller; they are system errors, and will therefore cause the client to print an error message to stderr and -return with an exit status of 255.

+return with an exit status of 255. +

+

If the main service program process exits while it still has running children any file descriptors held by those children can remain open, -depending on the use of wait, nowait or close for the +depending on the use of wait, nowait or close for the relevant file descriptor in the client's arguments. By default writing filedescriptors remain open and the client will wait for them to be closed at the service end, and reading file descriptors are closed immediately. These leftover child processes will not get a any -SIGHUP even if a read or write error occurs or the client +SIGHUP even if a read or write error occurs or the client disconnects before then. +

+
-

-3.2 Environment -

+

+3.2 Environment +

+ +

The service will have some information in environment variables:

-
USERV_USER
The login name of the calling user. If the LOGNAME variable is -set (or, if that is unset, if the USER variable is set) in the +
USERV_USER
The login name of the calling user. If the LOGNAME variable is +set (or, if that is unset, if the USER variable is set) in the environment passed to the client by the caller then the password entry for that login name will be looked up; if that password entry's uid is the same as that of the calling process then that login name will be -used, otherwise (or if neither LOGNAME nor USER is set) +used, otherwise (or if neither LOGNAME nor USER is set) the calling process's uid will be looked up to determine their login name (and if this lookup fails then the service will not be invoked). -
USERV_UID
The uid of the calling process. -
USERV_GID
The gid and supplementary group list of the calling process: first the + +
USERV_UID
The uid of the calling process. + +
USERV_GID
The gid and supplementary group list of the calling process: first the group in gid and then those in the supplementary group list, in decimal, separated by spaces. -
USERV_GROUP
The group names of the calling process, listed in the same way as the -ids are in USERV_GID. If no name can be found for any of the + +
USERV_GROUP
The group names of the calling process, listed in the same way as the +ids are in USERV_GID. If no name can be found for any of the calling process's group(s) then the service will not be invoked. -
USERV_CWD
The client's current working directory name (this directory may not be + +
USERV_CWD
The client's current working directory name (this directory may not be accessible to the service). If it could not be determined or the ---hidecwd flag was used then this variable will be set to an +--hidecwd flag was used then this variable will be set to an empty string (this is not considered an error). -
USERV_SERVICE
The service name requested by the caller. -
USERV_U_name
The value supplied to the client by the caller using -Dname. + +
USERV_SERVICE
The service name requested by the caller. + +
USERV_U_name
The value supplied to the client by the caller using -Dname. +
-HOME, PATH, SHELL, LOGNAME and USER +HOME, PATH, SHELL, LOGNAME and USER will be set appropriately (according to the details of the service user). +


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+ +User service daemon and client specification
+ +
+0.62
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff --git a/spec.html/ch-intro.html b/spec.html/ch-intro.html index e8a9dc3..c74b554 100644 --- a/spec.html/ch-intro.html +++ b/spec.html/ch-intro.html @@ -1,32 +1,68 @@ - + + + + + + User service daemon and client specification - Introduction - - + + + + + +
+ + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 1
+User service daemon and client specification - Chapter 1
Introduction

+ +
+ +

There is a daemon which invokes user service programs (henceforth `services') in response to requests by callers of a companion client program (henceforth the `client') and according to rules set forth in system-wide and user-specific configuration files. The companion client program is setuid root, and negotiates with the daemon through -an AF_UNIX socket and associated objects in a system-wide +an AF_UNIX socket and associated objects in a system-wide private directory set aside for the purpose. The user who wishes the service to be performed and calls the client is called the `calling user'; the process which calls the client is called the `calling process'. -

+

+ +

The daemon and the client are responsible for ensuring that information is safely carried across the security boundary between the two users, and that the processes on either side cannot interact with each other in any unexpected ways. +

+ +
+ + [Abstract] + [Copyright Notice] + [Contents] + [next] +
-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +User service daemon and client specification
+ +
+0.62
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff --git a/spec.html/ch-ipass.html b/spec.html/ch-ipass.html index 38b87dc..766ef4e 100644 --- a/spec.html/ch-ipass.html +++ b/spec.html/ch-ipass.html @@ -1,101 +1,144 @@ - + + + + + + User service daemon and client specification - Information passed through the client/daemon combination - - + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+

-User service daemon and client specification - chapter 5
+User service daemon and client specification - Chapter 5
Information passed through the client/daemon combination

+
+ +

The information described below is the only information which passes between the caller and the service.

    -
  • The service name supplied by the caller is available in the +

  • The service name supplied by the caller is available in the configuration language for deciding whether and which service program -to invoke, in the service parameter, and is used by the -execute-from-directory and execute-from-path +to invoke, in the service parameter, and is used by the +execute-from-directory and execute-from-path configuration directives. It is usually used to select which service program to invoke. It is also passed to the service program in the -USERV_SERVICE environment variable. +USERV_SERVICE environment variable. +

  • File descriptors specified by the client and allowed according to the configuration language will be connected. Each file descriptor is opened for reading or writing. Communication is via pipes, one end of each pipe being open on the appropriate file descriptor in the service program (when it is invoked) and the other end being held by the client process, which will read and write files it opens on behalf of -its caller or file descriptors it is passed by its caller.

    +its caller or file descriptors it is passed by its caller. Data may be passed into the service through reading pipes and out of it through writing pipes. These pipes can remain open only until the service and client have terminated, or can be made to stay open after the client has terminated and (if the service program forks) the main service process has exited; the behaviour is controlled by options -passed to the client by its caller.

    +passed to the client by its caller. The caller can arrange that a writing pipe be connected to a pipe or similar object and cause attempts to write to that descriptor by the -service to generate a SIGPIPE (or EPIPE if -SIGPIPE is caught or ignored) in the service.

    +service to generate a SIGPIPE (or EPIPE if +SIGPIPE is caught or ignored) in the service. Likewise, the service can close filedescriptors specified for reading, which will cause the corresponding filedescriptors passed by the caller to be closed, so that if these are pipes processes which write -to them will receive SIGPIPE or EPIPE. -

  • If no-suppress-args is set then arguments passed to the client +to them will receive SIGPIPE or EPIPE. + +

  • If no-suppress-args is set then arguments passed to the client by its caller will be passed on, verbatim, to the service. +

  • Fatal signals and system call failures experienced by the client will result in the disconnection of the service from the client and possibly some of the communication file descriptors described above; -if disconnect-hup is set then the service will also be sent a -SIGHUP. -

  • The value of the LOGNAME (or USER) environment variable +if disconnect-hup is set then the service will also be sent a +SIGHUP. + +

  • The value of the LOGNAME (or USER) environment variable as passed to the client will be used as the login name of the calling user if the uid of the calling process matches the uid corresponding to that login name. Otherwise the calling uid's password entry will -be used to determine the calling user's login name.

    +be used to determine the calling user's login name. This login name and the calling uid are available in the configuration -language in the calling-user parameter and are passed to the -service program in environment variables USERV_USER and -USERV_UID.

    +language in the calling-user parameter and are passed to the +service program in environment variables USERV_USER and +USERV_UID. The shell corresponding to that login name (according to the password entry) is available as in the configuration language's -calling-user-shell parameter.

    +calling-user-shell parameter. If no relevant password entry can be found then no service will be invoked. +

  • The numeric values and textual names for calling gid and supplementary group list are available in the configuration language in the -calling-group parameter and are passed to the service in -environment variables.

    +calling-group parameter and are passed to the service in +environment variables. If no name can be found for a numeric group to which the calling process belongs then no service will be invoked. +

  • The name of the current working directory in which the client was -invoked is passed, if available and not hidden using --hidecwd, -to the service program in the USERV_CWD variable. This grants no +invoked is passed, if available and not hidden using --hidecwd, +to the service program in the USERV_CWD variable. This grants no special access to that directory unless it is a subdirectory of a directory which is executable (searchable) but not readable by the service user. -

  • Settings specified by the caller using the --defvar -name=value option to the client are available in the -configuration language as the corresponding u-name + +

  • Settings specified by the caller using the --defvar +name=value option to the client are available in the +configuration language as the corresponding u-name parameters and are passed to the service program in environment -variables USERV_U_name. +variables USERV_U_name. +

  • If the calling user is root or the same as the service user then options may be given to the client which bypass the usual security features; in this case other information may pass between the caller and the service. -

+ + +


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; next; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +[back] + [Abstract] + [Copyright Notice] + [Contents] + [next] + +
+ +User service daemon and client specification
+ +
+0.62
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff --git a/spec.html/ch-notes.html b/spec.html/ch-notes.html index 74d81cf..e49eb2a 100644 --- a/spec.html/ch-notes.html +++ b/spec.html/ch-notes.html @@ -1,106 +1,156 @@ - + + + + + + User service daemon and client specification - Applications and notes on use - - + + + + + +
+ +[back] + [Abstract] + [Copyright Notice] + [Contents] + +
+

-User service daemon and client specification - chapter 6
+User service daemon and client specification - Chapter 6
Applications and notes on use

+
-

-6.1 Standard services and directory management -

+

+6.1 Standard services and directory management +

+ +

In later versions of this specification standard service names and interfaces for common services such as mail delivery and WWW CGI -scripts will be specified.

+scripts will be specified. +

-userv-using applications and system services which hide -userv behind wrapper scripts may need to store information in +

+userv-using applications and system services which hide +userv behind wrapper scripts may need to store information in the user's filespace to preserve the correct placement of the security perimiters. Such applications should usually do so in a directory -(created by them) ~/.userv/.servdata/service, where -service is the service name or application in question.

+(created by them) ~/.userv/.servdata/service, where +service is the service name or application in question. +

-The use of a dot-directory inside ~/.userv will hopefully avoid +

+The use of a dot-directory inside ~/.userv will hopefully avoid the user becoming confused by finding parts of a semi-privileged application's internal state in their filespace, and or discourage them from fiddling with and thus corrupting it. (Note that such applications should of course not rely for their global integrity on the integrity of the data on the user's side of the security boundary.) +

+
-

-6.2 Reducing the number of absolutely privileged subsystems -

+

+6.2 Reducing the number of absolutely privileged subsystems +

+ +

Currently most Unix systems have many components which need to run as root, even though most of their activity does not strictly require it. This gives rise to a large and complex body of code which must be -trusted with the security of the system.

+trusted with the security of the system. +

-Using userv many of these subsystems no longer need any unusual -privilege.

+

+Using userv many of these subsystems no longer need any unusual +privilege. +

-cron and at, lpr and the system's mail transfer -agent (sendmail, smail, exim or the like) all +

+cron and at, lpr and the system's mail transfer +agent (sendmail, smail, exim or the like) all fall into this category. +

+
-

-6.3 Do not give away excessive privilege to userv-using facilities -

+

+6.3 Do not give away excessive privilege to userv-using facilities +

+ +

There is a danger that people reimplementing the facilities I mention -above using userv will discard much of the security benefit by +above using userv will discard much of the security benefit by using a naive implementation technique. This will become clearer with -an example:

+an example: +

-Consider the lpr program. In current systems this needs to +

+Consider the lpr program. In current systems this needs to have an absolutely privileged component in order to support delayed printing without copying: when the user queues a file to be printed the filename is stored in the print queue, rather than a copy of it, and the printer daemon accesses the file directly when it is ready to print the job. In order that the user can print files which are not world-readable the daemon is given root privilege so that it can open -the file in the context of the user, rather than its own.

- -A simple-minded approach to converting this scheme to use userv -might involve giving the printer daemon (the lp user) the -ability to read the file by allowing them to run cat (or a -special-purpose file-reading program) as any user. The lpr -program would use a userv service to store the filename in the +the file in the context of the user, rather than its own. +

+ +

+A simple-minded approach to converting this scheme to use userv +might involve giving the printer daemon (the lp user) the +ability to read the file by allowing them to run cat (or a +special-purpose file-reading program) as any user. The lpr +program would use a userv service to store the filename in the printer daemon's queues, and the daemon would read the file later when -it felt like it.

+it felt like it. +

+

However, this would allow the printer daemon to read any file on the system, whether or not someone had asked for it to be printed. Since many files will contain passwords and other security-critical information this is nearly as bad as giving the daemon root access in the first place. Any security holes in the print server which allow a -user to execute commands as the lp user will give the user the -ability to read any file on the system.

+user to execute commands as the lp user will give the user the +ability to read any file on the system. +

+

Instead, it is necessary to keep a record of which files the daemon has been asked to print outside the control of the print daemon. This record could be kept by a new root-privileged component, but this is not necessary: the record of which files a user has asked to be printed can be kept under the control of the user in question. The -submission program lpr will make a record in an area under the +submission program lpr will make a record in an area under the user's control before communicating with the print server, and the print server would be given the ability to run a special file-reading program which would only allow files to be read which were listed in -the user's file of things they'd asked to print.

+the user's file of things they'd asked to print. +

+

Now security holes in most of the printing system do not critically affect the security of the entire system: they only allow the attacker to read and interfere with print jobs. Bugs in the programs run by the print server to read users' files (and to remove entries from the list of files when it has done with them) will still be serious, but this -program can be quite simple.

+program can be quite simple. +

-Similar considerations apply to many userv-based versions of -facilities which currently run as root.

+

+Similar considerations apply to many userv-based versions of +facilities which currently run as root. +

+

It is debatable whether the user-controlled state should be kept in the user's filespace (in dotfiles, say) or kept in a separate area set aside for the purpose; however, using the user's home directory (and @@ -108,43 +158,68 @@ probably creating a separate subdirectory of it as a dotfile to contain many subsystems' state) has fewer implications for the rest of the system and makes it entirely clear where the security boundaries lie. +

+
-

-6.4 userv is not a replacement for really and sudo -

-userv is not intended as a general-purpose system +

+6.4 userv is not a replacement for really and sudo +

+ +

+userv is not intended as a general-purpose system administration tool with which system administrators can execute privileged programs when they need to. It is unsuitable for this purpose precisely because it enforces a strong separation between the -calling and the called program, which is undesirable in this context.

+calling and the called program, which is undesirable in this context. +

+

Its facilities for restricting activities to running certain programs may at first glance seem to provide similar functionality to -sudo[2]. However, the +sudo[2]. However, the separation mentioned above is a problem here too, particular for -interaction - it can be hard for a userv service program to +interaction - it can be hard for a userv service program to interact with its real caller or the user in question. +

+
-

-6.5 Don't give access to general-purpose utilities -

-Do not specify general purpose programs like mv or cat -in execute- directives without careful thought about their -arguments, and certainly not if no-suppress-args is specified. +

+6.5 Don't give access to general-purpose utilities +

+ +

+Do not specify general purpose programs like mv or cat +in execute- directives without careful thought about their +arguments, and certainly not if no-suppress-args is specified. If you do so it will give the caller much more privilige than you -probably intend.

+probably intend. +

+

It is a shame that I have to say this here, but inexperienced administrators have made similar mistakes with programs like -sudo. +sudo. +

+
-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract; back. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +[back] + [Abstract] + [Copyright Notice] + [Contents] + +
+ +User service daemon and client specification
+ +
+0.62
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff --git a/spec.html/footnotes.html b/spec.html/footnotes.html index 9cf549f..6ec7665 100644 --- a/spec.html/footnotes.html +++ b/spec.html/footnotes.html @@ -1,21 +1,54 @@ - -User service daemon and client specification - footnotes - - -

User service daemon and client specification - footnotes

-

1

-

-userv is -short for `user services', and is pronounced `you-serve'.

2

-

-sudo is a program which allows users to + + + + + + +User service daemon and client specification - Footnotes + + + + + +


+ + [Abstract] + [Copyright Notice] + [Contents] + +
+ +

User service daemon and client specification - Footnotes

+ +
+ +

1 +

+

+userv is +short for `user services', and is pronounced `you-serve'. +

2 +

+

+sudo is a program which allows users to execute certain programs as root, according to configuration files -specified by the system administrator.


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- +specified by the system administrator. +


+ + [Abstract] + [Copyright Notice] + [Contents] + +
+ +User service daemon and client specification
+ +
+0.62
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff --git a/spec.html/index.html b/spec.html/index.html index 6a8d323..46e8edc 100644 --- a/spec.html/index.html +++ b/spec.html/index.html @@ -1,73 +1,117 @@ - + + + + + + User service daemon and client specification - - + + + + + +
+ + [Abstract] + [Copyright Notice] + [Contents] + +
+

User service daemon and client specification

-

-0.1 Abstract -

+
+ +

Abstract

This is a specification for a Unix system facility to allow one program to invoke another when only limited trust exists between them. +

Copyright Notice

+ +

+userv is Copyright 1996-1999 Ian Jackson. +

+ +

+userv is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or (at +your option) any later version. +

+ +

+This program is distributed in the hope that it will be useful, but +without any warranty; without even the implied warranty of +merchantability or fitness for a particular purpose. See +the GNU General Public License for more details. +

+ +

+You should have received a copy of the GNU General Public License +along with userv; if not, write to the Free Software +Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +

+ + +
-

-0.2 Table of contents -

+ +

Contents

+ -

0.3 Copyright

-userv is Copyright 1996-1999 Ian Jackson.

-userv is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or (at -your option) any later version.

+


-This program is distributed in the hope that it will be useful, but -without any warranty; without even the implied warranty of -merchantability or fitness for a particular purpose. See -the GNU General Public License for more details.

+ [Abstract] + [Copyright Notice] + [Contents] -You should have received a copy of the GNU General Public License -along with userv; if not, write to the Free Software -Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


-User service daemon and client specification -- userv is Copyright 1996-1999 Ian Jackson. -
-Contents; abstract. -
-
0.62
-Ian Jackson ian@davenant.greenend.org.uk
- + +User service daemon and client specification
+ +
+0.62
+Ian Jackson ian@davenant.greenend.org.uk +
+ + + + + diff --git a/spec.ps b/spec.ps index 7a17c9e..a428309 100644 --- a/spec.ps +++ b/spec.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: Basser Lout Version 3.10 (November 1996) -%%CreationDate: Sun Apr 18 20:08:36 1999 +%%CreationDate: Sun Jun 20 18:45:09 1999 %%DocumentData: Binary %%DocumentNeededResources: (atend) %%DocumentMedia: Plain 595 842 0 white () @@ -278,12 +278,12 @@ closepath fill grestore 320 fnt84 0 5(0.1.)m 628(Abstract)s grestore -0 10791(This)m 476(is)s +0 10959(This)m 476(is)s 686(a)s 852(speci\207cation)s 2117(for)s 2455(a)s 2621(Unix)s 3155(system)s 3879(f)s 2(acility)k 4606(to)s 4845(allo)s 6(w)k 5424(one)s 5826(program)s 6696(to)s 6935(in)s 9(v)k 4(ok)k 2(e)k -7628(another)s 8405(when)s 0 10551(only)m 480(limited)s 1214(trust)s -1698(e)s 3(xists)k 2290(between)s 3144(them.)s 9066 610 0 610 240 240 60 0 9587 LoutGr2 +7628(another)s 8405(when)s 0 10719(only)m 480(limited)s 1214(trust)s +1698(e)s 3(xists)k 2290(between)s 3144(them.)s 9066 670 0 670 240 240 60 0 9695 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -291,102 +291,92 @@ xsize neg 0 rlineto closepath fill grestore 320 fnt84 -0 6(0.2.)m 628(Contents)s -grestore -240 fnt84 0 9175(1.)m 1200(Intr)s 4(oduction)k -8953(3)s 0 8818(2.)m 1200(Client)s 1883(pr)s 4(ogram)k -2839(usage)s 8952(4)s 240 fnt82 0 8579(2.1.)m 1200(Options)s -8952(4)s 0 8342(2.2.)m 1200(Security-o)s 3(v)k 3(erriding)k -3118(options)s 8958(7)s 240 fnt84 0 7997(3.)m 1200(Execution)s -2279(en)s 9(vir)k 4(onment)k 3627(of)s 3899(the)s -4273(ser)s 2(vice)k 5030(pr)s 4(ogram)k 8952(8)s -240 fnt82 0 7758(3.1.)m 1200(File)s 1627(descriptors)s 8959(8)s -0 7521(3.2.)m 1200(En)s 9(vironment)k 8955(9)s 240 fnt84 -0 7176(4.)m 1200(Ser)s 2(vice-side)k 2474(con\207guration)s 8831(10)s -240 fnt82 0 6937(4.1.)m 1200(Con\207guration)s 2587(\207le)s 2948(syntax)s -8831(10)s 0 6700(4.2.)m 1200(Con\207guration)s 2587(\207le)s 2948(directi)s 6(v)k 3(es)k -8831(10)s 0 6462(4.3.)m 1200(Errors)s 1847(in)s 2090(the)s -2438(con\207guration)s 3771(\207le)s 8833(16)s 0 6225(4.4.)m 1200(Def)s 2(aults)k -8838(17)s 240 fnt84 0 5880(5.)m 1200(Inf)s 6(ormation)k -2498(passed)s 3231(thr)s 4(ough)k 4106(the)s 4480(client/daemon)s -5969(combination)s 8832(18)s 0 5523(6.)m 1200(A)s 6(pplications)k -2536(and)s 2977(notes)s 3562(on)s 3871(use)s 8831(20)s -240 fnt82 0 5284(6.1.)m 1200(Standard)s 2108(services)s 2928(and)s -3332(directory)s 4248(management)s 8831(20)s 0 5046(6.2.)m 1200(Reducing)s -2171(the)s 2519(number)s 3310(of)s 3581(absolutely)s 4618(pri)s 6(vile)k 3(ged)k -5636(subsystems)s 8831(20)s 0 4808(6.3.)m 1200(Do)s 1546(not)s -1912(gi)s 6(v)k 3(e)k 2371(a)s 3(w)k 2(ay)k -2925(e)s 3(xcessi)k 6(v)k 3(e)k 3885(pri)s 6(vile)k 3(ge)k -4781(to)s gsave -5020 4862 translate -0.6953 1.0000 scale -240 fnt31 0 -52(userv)m +0 66(0.2.)m 628(Copyright)s 2109(Notice)s grestore -5520(-using)s 6171(f)s 2(acilities)k -8831(20)s 0 4570(6.4.)m gsave -1200 4624 translate +gsave +0 9455 translate 0.6953 1.0000 scale -240 fnt31 0 -52(userv)m +240 fnt31 0 -52(userv)m + grestore -1760(is)s -1970(not)s 2336(a)s 2502(replacement)s 3729(for)s gsave -4067 4624 translate +560 9401(is)m 770(Cop)s 2(yright)k 1799(1996-1999)s 2889(Ian)s +3251(Jackson.)s gsave +0 9047 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(really)m +240 fnt31 0 -52(userv)m grestore -4727(and)s gsave -5131 4624 translate +544 8993(is)m 737(free)s +1146(softw)s 2(are;)k 2062(you)s 2460(can)s 2832(redistrib)s 4(ute)k +3955(it)s 4130(and/or)s 4784(modify)s 5512(it)s 5688(under)s +6276(the)s 6607(terms)s 7172(of)s 7426(the)s 7757(GNU)s +8315(General)s 0 8753(Public)m 659(License)s 1453(as)s 1698(published)s +2682(by)s 2971(the)s 3314(Free)s 3789(Softw)s 2(are)k +4699(F)s 3(oundation;)k 5894(either)s 6492(v)s 3(ersion)k +7245(2)s 7414(of)s 7680(the)s 8023(License,)s 8867(or)s +0 8513(\(at)m 311(your)s 810(option\))s 1550(an)s 3(y)k +1947(later)s 2430(v)s 3(ersion.)k 0 8105(This)m 476(program)s +1346(is)s 1556(distrib)s 4(uted)k 2632(in)s 2875(the)s +3223(hope)s 3745(that)s 4163(it)s 4355(will)s 4781(be)s +5063(useful,)s 5754(b)s 4(ut)k 240 fnt83 6116 8107(without)m +6898(any)s 7300(warr)s 3(anty)k 240 fnt82 8171 8105(;)m +8283(without)s 0 7864(e)m 6(v)k 3(en)k 500(the)s +848(implied)s 1636(w)s 2(arranty)k 2537(of)s 240 fnt83 +2808 7866(mer)m 8(c)k 3(hantability)k 240 fnt82 4367 7864(or)m +240 fnt83 4626 7866(\207tness)m 5279(for)s 5623(a)s 5798(particular)s +6833(purpose)s 240 fnt82 7598 7864(.)m 7702(See)s 8103(the)s +8451(GNU)s 0 7624(General)m 811(Public)s 1475(License)s 2274(for)s +2612(more)s 3159(details.)s 0 7216(Y)m 26(ou)k 442(should)s +1139(ha)s 4(v)k 3(e)k 1640(re)s 1821(cei)s 6(v)k 3(ed)k +2494(a)s 2660(cop)s 2(y)k 3178(of)s 3449(the)s +3797(GNU)s 4372(Gen)s 4768(er)s 4953(al)s 5180(Pub)s +5546(lic)s 5837(Li)s 6043(cense)s 6630(along)s 7215(with)s +gsave +7697 7270 translate 0.6953 1.0000 scale -240 fnt31 0 -52(sudo)m +240 fnt31 0 -52(userv)m grestore -8851(21)s -0 4331(6.5.)m 1200(Don')s 4(t)k 1814(gi)s 6(v)k 3(e)k -2273(access)s 2934(to)s 3173(general-purpose)s 4769(utilities)s 8851(21)s -9066 670 0 670 240 240 60 0 3080 LoutGr2 +8197(;)s 8309(if)s 8526(not,)s +0 6975(write)m 546(to)s 785(the)s 1133(Free)s 1613(Soft)s +2011(w)s 2(are)k 2529(F)s 3(oun)k 3016(da)s +3242(tion,)s 3721(59)s 4012(T)s 16(em)k 4434(ple)s +4782(Place)s 5355(-)s 5483(Suite)s 6030(330,)s 6497(Boston,)s +7283(MA)s 7726(02111-1307,)s 0 6735(USA.)m 9066 610 0 610 240 240 60 0 5771 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto xsize neg 0 rlineto closepath fill grestore -320 fnt84 0 66(0.3.)m 628(Copyright)s 2109(Notice)s -grestore -gsave -0 2970 translate -0.6953 1.0000 scale -240 fnt31 -0 -460(userv)m -grestore -560 2916(is)m 770(Cop)s 2(yright)k 1799(1996-1999)s -2889(Ian)s 3251(Jackson.)s gsave -0 2357 translate -0.6953 1.0000 scale -240 fnt31 0 -52(userv)m -grestore -544 2303(is)m -737(free)s 1146(softw)s 2(are;)k 2062(you)s 2460(can)s -2832(redistrib)s 4(ute)k 3955(it)s 4130(and/or)s 4784(modify)s -5512(it)s 5688(under)s 6276(the)s 6607(terms)s 7172(of)s -7426(the)s 7757(GNU)s 8315(General)s 0 2063(Public)m 659(License)s -1453(as)s 1698(published)s 2682(by)s 2971(the)s 3314(Free)s -3789(Softw)s 2(are)k 4699(F)s 3(oundation;)k 5894(either)s -6492(v)s 3(ersion)k 7245(2)s 7414(of)s 7680(the)s -8023(License,)s 8867(or)s 0 1823(\(at)m 311(your)s 810(option\))s -1550(an)s 3(y)k 1947(later)s 2430(v)s 3(ersion.)k -0 1415(This)m 476(program)s 1346(is)s 1556(distrib)s 4(uted)k -2632(in)s 2875(the)s 3223(hope)s 3745(that)s 4163(it)s -4355(will)s 4781(be)s 5063(useful,)s 5754(b)s 4(ut)k -240 fnt83 6116 1417(without)m 6898(any)s 7300(warr)s 3(anty)k -240 fnt82 8171 1415(;)m 8283(without)s 0 1174(e)m 6(v)k 3(en)k -500(the)s 848(implied)s 1636(w)s 2(arranty)k 2537(of)s -240 fnt83 2808 1176(mer)m 8(c)k 3(hantability)k 240 fnt82 -4367 1174(or)m 240 fnt83 4626 1176(\207tness)m 5279(for)s 5623(a)s -5798(particular)s 6833(purpose)s 240 fnt82 7598 1174(.)m 7702(See)s -8103(the)s 8451(GNU)s 0 934(General)m 811(Public)s 1475(License)s -2274(for)s 2612(more)s 3159(details.)s 0 52(User)m 511(service)s -1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s 8652(0.62)s - +320 fnt84 0 6(0.3.)m +628(Contents)s +grestore +0 5477(1.)m 1200(Introduction)s 8962(3)s 0 5250(2.)m +1200(Client)s 1844(program)s 2714(usage)s 8952(4)s 0 5013(2.1.)m +1200(Options)s 8952(4)s 0 4776(2.2.)m 1200(Security-o)s 3(v)k 3(erriding)k +3118(options)s 8958(7)s 0 4539(3.)m 1200(Ex)s 3(ecution)k +2224(en)s 9(vironment)k 3484(of)s 3755(the)s 4103(service)s +4835(program)s 8959(8)s 0 4302(3.1.)m 1200(File)s 1627(descriptors)s +8959(8)s 0 4065(3.2.)m 1200(En)s 9(vironment)k 8955(9)s +0 3838(4.)m 1200(Service-side)s 2436(con\207guration)s 8831(10)s 0 3601(4.1.)m +1200(Con\207guration)s 2587(\207le)s 2948(syntax)s 8831(10)s 0 3364(4.2.)m +1200(Con\207guration)s 2587(\207le)s 2948(directi)s 6(v)k 3(es)k +8831(10)s 0 3127(4.2.1.)m 1200(Immediate)s 2277(directi)s 6(v)k 3(es)k +8851(11)s 0 2900(4.2.2.)m 1200(Directi)s 6(v)k 3(es)k +2223(with)s 2705(delayed)s 3507(ef)s 6(fect)k 8832(12)s +0 2663(4.2.3.)m 1200(Control)s 1986(structure)s 2877(directi)s 6(v)k 3(es)k +8832(12)s 0 2436(4.2.4.)m 1200(Directi)s 6(v)k 3(es)k +2223(for)s 2561(changing)s 3492(e)s 3(x)k 3(ecution)k +4473(settings)s 8832(14)s 0 2198(4.3.)m 1200(Errors)s 1847(in)s +2090(the)s 2438(con\207guration)s 3771(\207le)s 8833(16)s 0 1960(4.4.)m +1200(Def)s 2(aults)k 8833(16)s 0 1733(5.)m 1200(Information)s +2398(passed)s 3094(through)s 3896(the)s 4244(client/daemon)s 5655(combination)s +8839(18)s 0 1495(6.)m 1200(Applications)s 2473(and)s 2877(notes)s +3433(on)s 3730(use)s 8831(20)s 0 1257(6.1.)m 1200(Standard)s +2108(services)s 2928(and)s 3332(directory)s 4248(management)s 8831(20)s +0 1019(6.2.)m 1200(Reducing)s 2171(the)s 2519(number)s 3310(of)s +3581(absolutely)s 4618(pri)s 6(vile)k 3(ged)k 5636(subsystems)s +8831(20)s 0 52(User)m 511(service)s 1243(daemon)s 2058(and)s +2462(client)s 3052(speci\207cation)s 8652(0.62)s grestore grestore @@ -424,24 +414,37 @@ gsave gsave 0 LoutMargSet grestore -240 fnt84 0 13842(2)m 240 fnt82 0 13254(Y)m 26(ou)k -442(should)s 1139(ha)s 4(v)k 3(e)k 1640(re)s -1821(cei)s 6(v)k 3(ed)k 2494(a)s 2660(cop)s 2(y)k -3178(of)s 3449(the)s 3797(GNU)s 4372(Gen)s 4768(er)s -4953(al)s 5180(Pub)s 5546(lic)s 5837(Li)s 6043(cense)s -6630(along)s 7215(with)s gsave -7697 13308 translate +240 fnt84 0 13842(2)m 240 fnt82 0 13253(6.3.)m 1200(Do)s +1546(not)s 1912(gi)s 6(v)k 3(e)k 2371(a)s 3(w)k 2(ay)k +2925(e)s 3(xcessi)k 6(v)k 3(e)k 3885(pri)s 6(vile)k 3(ge)k +4781(to)s gsave +5020 13307 translate +0.6953 1.0000 scale +240 fnt31 0 -52(userv)m +grestore +5520(-using)s 6171(f)s 2(acilities)k +8831(20)s 0 13015(6.4.)m gsave +1200 13069 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m grestore -8197(;)s -8309(if)s 8526(not,)s 0 13013(write)m 546(to)s 785(the)s -1133(Free)s 1613(Soft)s 2011(w)s 2(are)k 2529(F)s 3(oun)k -3016(da)s 3242(tion,)s 3721(59)s 4012(T)s 16(em)k -4434(ple)s 4782(Place)s 5355(-)s 5483(Suite)s 6030(330,)s -6497(Boston,)s 7283(MA)s 7726(02111-1307,)s 0 12773(USA.)m 0 52(0.62)m -4809(User)s 5320(service)s 6052(daemon)s 6867(and)s 7271(client)s -7861(speci\207cation)s +1760(is)s +1970(not)s 2336(a)s 2502(replacement)s 3729(for)s gsave +4067 13069 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(really)m +grestore +4727(and)s gsave +5131 13069 translate +0.6953 1.0000 scale +240 fnt31 0 -52(sudo)m +grestore +8851(21)s +0 12776(6.5.)m 1200(Don')s 4(t)k 1814(gi)s 6(v)k 3(e)k +2273(access)s 2934(to)s 3173(general-purpose)s 4769(utilities)s 8851(21)s +0 52(0.62)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s +7271(client)s 7861(speci\207cation)s grestore grestore @@ -580,7 +583,7 @@ grestore 1382(pr)s 6(ogram)k 2737(usage)s grestore gsave -480 12321 translate +480 12081 translate 0.6953 1.0000 scale 240 fnt31 0 -52(userv)m gsave @@ -625,12 +628,12 @@ grestore 9029(\202])s grestore 240 fnt83 -0 11448(service-user)m 240 fnt82 1232 11446(speci\207es)m 2106(which)s 2748(user)s +0 11208(service-user)m 240 fnt82 1232 11206(speci\207es)m 2106(which)s 2748(user)s 3206(is)s 3416(to)s 3655(pro)s 3(vide)k 4439(the)s 4787(service.)s 5567(The)s 5995(user)s 6453(may)s 6919(be)s 7201(a)s 7367(login)s 7916(name)s 8490(or)s 8749(a)s -0 11206(numeric)m 836(uid,)s 1249(or)s gsave -1508 11260 translate +0 10966(numeric)m 836(uid,)s 1249(or)s gsave +1508 11020 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211)m @@ -638,12 +641,12 @@ grestore 1668(to)s 1907(indicate)s 2719(that)s 3137(the)s 3485(service)s 4217(user)s 4675(is)s 4885(to)s 5124(be)s 5406(the)s 5754(same)s 6301(as)s 6551(the)s 6899(calling)s 7602(user)s 13(.)k -0 10798(The)m 428(service)s 1160(name)s 1734(is)s 1944(interpreted)s -3036(by)s 3330(the)s 3678(userv)s 153 fnt82 4191 10887(1)m -240 fnt82 4311 10798(daemon)m 5126(on)s 5423(behalf)s 6092(of)s +0 10558(The)m 428(service)s 1160(name)s 1734(is)s 1944(interpreted)s +3036(by)s 3330(the)s 3678(userv)s 153 fnt82 4191 10647(1)m +240 fnt82 4311 10558(daemon)m 5126(on)s 5423(behalf)s 6092(of)s 6363(the)s 6711(service)s 7443(user)s 13(.)k 7932(It)s -8137(will)s 8563(often)s 0 10558(be)m 282(the)s 630(name)s -1204(of)s 1475(a)s 1641(program.)s 9066 670 0 670 240 240 60 0 9534 LoutGr2 +8137(will)s 8563(often)s 0 10318(be)m 282(the)s 630(name)s +1204(of)s 1475(a)s 1641(program.)s 9066 670 0 670 240 240 60 0 9294 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -653,201 +656,236 @@ grestore 320 fnt84 0 66(2.1.)m 628(Options)s grestore -0 9072(Single-letter)m 1233(options)s 1983(may)s 2442(be)s +0 8832(Single-letter)m 1233(options)s 1983(may)s 2442(be)s 2718(combined)s 3714(as)s 3957(is)s 4161(usual)s 4714(with)s 5190(Unix)s 5718(programs,)s 6721(and)s 7119(the)s 7461(v)s 6(alue)k -8022(for)s 8354(such)s 8843(an)s 0 8832(option)m 669(may)s +8022(for)s 8354(such)s 8843(an)s 0 8592(option)m 669(may)s 1135(appear)s 1832(in)s 2075(the)s 2423(same)s 2970(ar)s 4(gument)k 3929(or)s 4188(in)s 4431(the)s 4779(ne)s 3(xt.)k gsave -120 8478 translate +120 8238 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211B)m grestore gsave -120 8238 translate +120 7998 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211builtin)m grestore -480 7944(Requests)m -1387(that)s 1797(a)s 1955(b)s 4(uiltin)k 2624(service)s -3347(be)s 3621(pro)s 3(vided.)k 4565(This)s 5033(is)s -5235(equi)s 6(v)k 6(alent)k 6270(to)s 6501(using)s -7065(the)s gsave -7405 7998 translate +480 7704(Re)m +742(quests)s 1385(that)s 1797(a)s 1956(b)s 4(uiltin)k +2627(ser)s 2905(vice)s 3352(be)s 3628(pro)s 3940(vid)s +4244(ed.)s 4567(This)s 5037(is)s 5241(equi)s 6(v)k +5762(a)s 5868(lent)s 6279(to)s 6512(us)s 6716(ing)s +7068(the)s gsave +7410 7758 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override)m grestore -8457(option)s 480 7703(to)m -719(specify)s 1463(a)s 1629(string)s 2226(consisting)s 3249(of)s +8464(op)s 8697(tion)s +480 7463(to)m 719(spec)s 1137(i)s 1197(fy)s 1450(a)s +1616(string)s 2213(con)s 2556(sist)s 2874(ing)s 3233(of)s gsave -3520 7757 translate +3504 7517 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211builtin)m grestore -5081(follo)s 6(wed)k 5983(by)s -6277(the)s 240 fnt83 6625 7705(b)m 4(uiltin-service)k 240 fnt82 -8053 7703(requested,)m 480 7463(and)m 884(requesting)s 1933(a)s 2099(service)s -2831(user)s 3289(of)s gsave -3560 7517 translate -0.6953 1.0000 scale -240 fnt31 0 -52(\211)m -grestore -3720(\(indicating)s -4808(the)s 5156(calling)s 5859(user\).)s 480 7055(If)m 701(the)s -1039(b)s 4(uiltin)k 1707(ser)s 1985(vice)s 2429(be)s -2651(ing)s 3000(re)s 3181(quest)s 3686(ed)s 3961(re)s -4142(quires)s 4767(a)s 240 fnt83 4924 7057(service-)m 5667(ar)s 8(gument)k -240 fnt82 6631 7055(then)m 7090(this)s 7477(must)s 7992(be)s -8264(sup)s 8590(plied)s 480 6814(to)m 712(the)s 1052(client)s -1635(in)s 1870(the)s 2211(same)s 2750(ar)s 2935(gu)s -3170(ment)s 3700(as)s 3943(the)s 240 fnt83 4283 6816(b)m 4(uiltin-)k -4970(service)s 240 fnt82 5639 6814(.)m 5736(See)s 6129(`Di)s -6441(rec)s 6725(ti)s 6(v)k 3(es)k 7211(for)s -7541(chang)s 8106(ing)s 8457(e)s 3(x)k 8675(e)s -8777(cu)s 8998(-)s 480 6574(tion)m 909(set)s 1174(tings',)s -1825(page)s 2333(14)s 2627(for)s 2965(de)s 3187(tails)s -3635(of)s 3906(the)s 4254(b)s 4(uiltin)k 4931(ser)s -5209(vices)s 5751(a)s 4(v)k 6(ail)k 6200(able,)s -6705(and)s 7109(`Security-)s 8052(o)s 3(v)k 3(erriding)k -480 6334(op)m 713(tions',)s 1364(page)s 1872(7)s 2040(for)s -2378(de)s 2600(tails)s 3048(of)s 3319(the)s gsave -3667 6388 translate +5065(fol)s 5325(lo)s 6(wed)k +5962(by)s 6256(the)s 240 fnt83 6604 7465(b)m 4(uiltin-)k +7291(service)s 240 fnt82 8020 7463(re)m 8201(quest)s 8706(ed,)s +480 7223(and)m 870(re)s 1051(quest)s 1556(ing)s 1900(a)s +2052(ser)s 2330(vice)s 2769(user)s 3213(of)s gsave +3469 7277 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(\211)m +grestore +3615(\(in)s 3877(di)s 4057(cat)s 4335(ing)s +4679(the)s 5012(call)s 5351(ing)s 5696(user\).)s 6322(If)s +6538(the)s 6871(b)s 4(uiltin)k 7534(ser)s 7812(vice)s +8251(be)s 8473(ing)s 8817(re)s 8998(-)s 480 6983(quest)m +985(ed)s 1254(re)s 1435(quires)s 2054(a)s 240 fnt83 +2204 6985(service-)m 2947(ar)s 8(gument)k 240 fnt82 3905 6983(then)m +4358(this)s 4738(must)s 5247(be)s 5513(sup)s 5839(plied)s +6359(to)s 6582(the)s 6914(client)s 7488(in)s 7715(the)s +8047(same)s 8578(ar)s 8763(gu)s 8998(-)s 480 6742(ment)m +1012(as)s 1256(the)s 240 fnt83 1598 6744(b)m 4(uiltin-)k +2285(service)s 240 fnt82 2954 6742(.)m 3052(See)s 3447(`Di)s +3759(rec)s 4043(ti)s 6(v)k 3(es)k 4530(for)s +4862(chang)s 5427(ing)s 5780(e)s 3(x)k 5998(e)s +6100(cu)s 6321(tion)s 6744(set)s 7009(tings',)s 7654(page)s +8156(14)s 8444(for)s 8776(de)s 8998(-)s 480 6502(tails)m +921(of)s 1184(the)s 1524(b)s 4(uiltin)k 2193(ser)s +2471(vices)s 3006(a)s 4(v)k 6(ail)k 3455(able,)s +3952(and)s 4348(`Security-)s 5291(o)s 3(v)k 3(erriding)k +6326(op)s 6559(tions',)s 7203(page)s 7703(7)s 7863(for)s +8193(de)s 8415(tails)s 8855(of)s 480 6261(the)m gsave +822 6315 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override)m grestore -4728(op)s 4961(tions.)s 480 5926(The)m 897(actual)s -1511(service)s 2232(name)s 2794(passed)s 3479(will)s 3894(be)s -4164(the)s 240 fnt83 4501 5928(b)m 4(uiltin-service)k 240 fnt82 -5869 5926(;)m 5970(note)s 6427(that)s 6833(this)s 7218(actual)s -7832(service)s 8552(name)s 480 5686(\(as)m 809(opposed)s 1666(to)s -1905(the)s 2253(o)s 3(v)k 3(erride)k 3099(data\))s -3625(and)s 4029(the)s 240 fnt83 4377 5688(info-ar)m 8(gument)k -240 fnt82 5742 5686(s)m 5886(supplied)s 6755(will)s 7181(be)s -7463(ignored)s 8252(by)s 8546(most)s 480 5446(b)m 4(uiltin)k -1149(services;)s 2022(the)s 2361(o)s 3(v)k 3(erride)k -3199(mechanism)s 4339(and)s gsave -4735 5500 translate +1877(op)s 2110(tions.)s 2733(The)s 3155(ac)s +3360(tu)s 3541(al)s 3762(ser)s 4040(vice)s 4488(name)s +5056(passed)s 5746(will)s 6166(be)s 6442(the)s 240 fnt83 +6784 6263(b)m 4(uiltin-)k 7471(service)s 240 fnt82 8140 6261(;)m +8246(note)s 8708(that)s 480 6021(this)m 876(ac)s 1081(tu)s +1262(al)s 1489(ser)s 1767(vice)s 2221(name)s 2795(\(as)s +3124(op)s 3357(posed)s 3974(to)s 4213(the)s 4561(o)s 3(v)k 3(er)k +4980(ride)s 5407(data\))s 5933(and)s 6337(the)s 240 fnt83 +6685 6023(info-)m 7124(ar)s 8(gument)k 240 fnt82 8038 6021(s)m +8182(sup)s 8508(plied)s 480 5781(will)m 906(be)s 1188(ig)s +1367(nored)s 1970(by)s 2264(most)s 2789(b)s 4(uiltin)k +3466(ser)s 3744(vices;)s 4347(the)s 4695(o)s 3(v)k 3(er)k +5114(ride)s 5541(mech)s 6056(a)s 6162(nism)s 6687(and)s +gsave +7091 5835 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211builtin)m grestore -6287(will)s -6705(be)s 6978(used)s 7467(to)s 7697(ensure)s 8369(that)s -8778(the)s 480 5206(right)m 991(b)s 4(uiltin)k 1668(service)s -2400(is)s 2610(called)s 3238(with)s 3720(the)s 4068(right)s -240 fnt83 4579 5208(service-ar)m 8(gument)k 240 fnt82 6248 5206(s.)m -gsave -120 4866 translate +8652(will)s 480 5541(be)m 762(used)s +1259(to)s 1498(en)s 1721(sure)s 2175(that)s 2593(the)s +2941(right)s 3452(b)s 4(uiltin)k 4129(ser)s 4407(vice)s +4861(is)s 5071(called)s 5699(with)s 6181(the)s 6529(right)s +240 fnt83 7040 5543(service-)m 7783(ar)s 8(gument)k 240 fnt82 +8697 5541(s.)m gsave +120 5201 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211f)m gsave 288 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd)m +240 fnt83 0 -52(fd)m + grestore -561([)s -gsave +561([)s gsave 705 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(modi\207er)m 2(s)k grestore -1961(]=)s gsave +1961(]=)s +gsave 2249 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(\207lename)m +240 fnt83 0 -52(\207lename)m grestore grestore gsave -120 4626 translate +120 4961 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211file)m gsave 1008 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd)m - +240 fnt83 +0 -52(fd)m grestore 1281([)s gsave 1425 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(modi\207er)m 2(s)k +240 fnt83 0 -52(modi\207er)m 2(s)k + grestore -2681(]=)s -gsave +2681(]=)s gsave 2969 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(\207lename)m grestore grestore -480 4332(Requests)m 1384(that)s 1791(data)s -2238(be)s 2509(copied)s 3194(in)s 3426(and)s 3819(out)s -4174(of)s 4434(the)s 4771(service)s 5492(using)s 6053(pipes.)s -6651(F)s 3(or)k 7029(each)s 7513(\207le)s 7863(or)s -8111(descriptor)s 480 4092(this)m 858(will)s 1266(be)s 1530(done)s -2033(by)s 2309(creating)s 3113(a)s 3261(pipe,)s 3761(one)s -4145(end)s 4531(of)s 4784(which)s 5407(is)s 5599(passed)s -6277(to)s 6498(the)s 6827(service)s 7541(program)s 8393(and)s -8778(the)s 480 3852(other)m 1028(end)s 1429(of)s 1697(which)s -2336(is)s 2543(passed)s 3236(to)s 3472(a)s 3635(cop)s 2(y)k -4149(of)s gsave -4417 3906 translate +480 4667(Requests)m 1384(that)s +1791(data)s 2238(be)s 2509(copied)s 3194(in)s 3426(and)s +3819(out)s 4174(of)s 4434(the)s 4771(service)s 5492(using)s +6053(pipes.)s 6651(F)s 3(or)k 7029(each)s 7513(\207le)s +7863(or)s 8111(descriptor)s 480 4427(this)m 858(will)s 1266(be)s +1530(done)s 2033(by)s 2309(creating)s 3113(a)s 3261(pipe,)s +3761(one)s 4145(end)s 4531(of)s 4784(which)s 5407(is)s +5599(passed)s 6277(to)s 6498(the)s 6827(service)s 7541(program)s +8393(and)s 8778(the)s 480 4187(other)m 1028(end)s 1429(of)s +1697(which)s 2336(is)s 2543(passed)s 3236(to)s 3472(a)s +3635(cop)s 2(y)k 4149(of)s gsave +4417 4241 translate 0.6953 1.0000 scale -240 fnt31 0 -52(cat)m +240 fnt31 0 -52(cat)m + grestore -4774(in)s 9(v)k 4(ok)k 2(ed)k -5586(by)s 5877(the)s 6222(client;)s 6861(the)s 7206(other)s -7754(\207le)s 8111(descriptor)s 480 3612(passed)m 1176(to)s gsave -1415 3666 translate +4774(in)s 9(v)k 4(ok)k 2(ed)k 5586(by)s +5877(the)s 6222(client;)s 6861(the)s 7206(other)s 7754(\207le)s +8111(descriptor)s 480 3947(passed)m 1161(to)s gsave +1384 4001 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(cat)m -grestore -1775(will)s 2201(be)s 2483(one)s 2885(inherited)s -3792(by)s 4086(the)s 4434(client)s 5024(program)s 5894(from)s -6418(the)s 6766(caller)s 7355(or)s 7614(one)s 8016(opened)s -8766(by)s 480 3372(the)m 828(client)s 1418(program)s 2288(on)s -2585(behalf)s 3254(of)s 3525(the)s 3873(caller)s 13(.)k -480 2964(The)m 890(descriptor)s 1886(in)s 2110(the)s 2439(service)s -3152(program)s 4004(that)s 4403(should)s 5081(be)s 5344(connected)s -6353(must)s 6860(be)s 7123(speci\207ed)s 8012(as)s 240 fnt83 -8243 2966(fd)m 240 fnt82 8435 2964(,)m 8523(either)s 480 2724(as)m -728(a)s 891(decimal)s 1699(number)s 2487(or)s 2743(as)s -2990(one)s 3389(of)s 3657(the)s 4002(strings)s gsave -4688 2778 translate +240 fnt31 0 -52(cat)m + +grestore +1728(will)s 2139(be)s 2405(one)s 2791(inherited)s 3683(by)s +3961(the)s 4293(client)s 4868(program)s 5722(from)s 6230(the)s +6563(caller)s 7136(or)s 7379(one)s 7766(opened)s 8500(by)s +8778(the)s 480 3707(client)m 1063(program)s 1926(on)s 2215(behalf)s +2877(of)s 3140(the)s 3481(caller)s 13(.)k 4153(The)s +4574(descriptor)s 5581(in)s 5817(the)s 6157(service)s 6882(program)s +7744(that)s 8155(should)s 8844(be)s 480 3466(connected)m 1503(must)s +2023(be)s 2299(speci\207ed)s 3202(as)s 240 fnt83 3446 3468(fd)m +240 fnt82 3638 3466(,)m 3740(either)s 4338(as)s 4582(a)s +4743(decimal)s 5548(number)s 6334(or)s 6588(as)s 6832(one)s +7229(of)s 7494(the)s 7837(strings)s gsave +8519 3520 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(stdin)m +240 fnt31 0 -52(stdin)m + grestore -5188(,)s gsave -5292 2778 translate +9019(,)s gsave +480 3280 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdout)m grestore -5949(or)s +1126 3226(or)m gsave +1370 3280 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(stderr)m +grestore +1970(.)s 2059(The)s 2473(ne)s 3(xt)k +2927(ar)s 4(gument)k 3871(is)s 4067(a)s 4218(\207lename)s +5082(which)s 5709(will)s 6121(be)s 6388(opened)s 7123(by)s +7403(the)s 7736(client)s 8311(with)s 8778(the)s 480 2985(pri)m 6(vile)k 3(ges)k +1458(of)s 1722(the)s 2064(calling)s 2760(user)s 13(.)k +240 fnt83 3303 2987(modi\207er)m 2(s)k 240 fnt82 4240 2985(is)m +4444(used)s 4934(to)s 5166(specify)s 5904(whether)s 6727(the)s +7069(\207le)s 7423(or)s 7676(descriptor)s 8684(is)s 8887(to)s +480 2745(be)m 762(read)s 1230(from)s 1754(or)s 2012(written)s +2745(to.)s 3034(It)s 3239(consists)s 4046(of)s 4317(a)s +4482(series)s 5076(of)s 5346(w)s 2(ords)k 5980(separated)s +6939(by)s 7233(commas.)s 8133(A)s 8362(comma)s 480 2504(may)m +946(separate)s 1784(the)s 240 fnt83 2132 2506(modi\207er)m 2(s)k +240 fnt82 3076 2504(from)m 3600(the)s 240 fnt83 3948 2506(fd)m +240 fnt82 4200 2504(and)m 4604(is)s 4814(required)s 5668(if)s +240 fnt83 5885 2506(fd)m 240 fnt82 6137 2504(is)m 6347(not)s +6713(numeric.)s 7660(The)s 8088(modi\207er)s 480 2264(w)m 2(ords)k +1114(are:)s gsave +600 2078 translate +0.6953 1.0000 scale +240 fnt31 0 -52(read)m +grestore gsave -6205 2778 translate +960 1838 translate 0.6953 1.0000 scale -240 fnt31 0 -52(stderr)m +240 fnt31 0 -52(O_RDONLY)m + grestore -6805(.)s 6906(The)s 7331(ne)s 3(xt)k -7797(ar)s 4(gument)k 8753(is)s 8960(a)s 480 2484(\207lename)m -1359(which)s 2001(will)s 2427(be)s 2709(opened)s 3459(by)s -3753(the)s 4101(client)s 4691(with)s 5173(the)s 5521(pri)s 6(vile)k 3(ges)k -6505(of)s 6776(the)s 7124(calling)s 7827(user)s 13(.)k -240 fnt83 480 2078(modi\207er)m 2(s)k 240 fnt82 1424 2076(is)m -1634(used)s 2131(to)s 2370(specify)s 3114(whether)s 3944(the)s -4292(\207le)s 4653(or)s 4912(descriptor)s 5927(is)s 6137(to)s -6376(be)s 6658(read)s 7127(from)s 7651(or)s 7910(written)s -8643(to.)s 480 1835(It)m 682(consists)s 1487(of)s 1755(a)s -1918(series)s 2508(of)s 2776(w)s 2(ords)k 3407(separated)s -4364(by)s 4655(commas.)s 5552(A)s 5779(comma)s 6540(may)s -7003(separate)s 7838(the)s 240 fnt83 8182 1837(modi\207er)m 2(s)k -240 fnt82 480 1594(from)m 1004(the)s 240 fnt83 1352 1596(fd)m -240 fnt82 1604 1594(and)m 2008(is)s 2218(required)s 3072(if)s -240 fnt83 3289 1596(fd)m 240 fnt82 3541 1594(is)m 3751(not)s -4117(numeric.)s 1134 0 0 0 240 240 60 0 948 LoutGr2 +1761 1784(:)m 1867(Allo)s 6(w)k 2513(reading)s 3283(and)s +3687(not)s 4053(writing.)s 4847(May)s 5340(not)s 5706(be)s +5988(used)s 6485(with)s gsave +6967 1838 translate +0.6953 1.0000 scale +240 fnt31 0 -52(write)m +grestore +7527(or)s +7786(things)s 8422(that)s 960 1544(imply)m 1572(it.)s gsave +600 1358 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(write)m +grestore +1134 0 0 0 240 240 60 0 948 LoutGr2 0 0 moveto xsize 0 lineto stroke grestore @@ -900,482 +938,412 @@ gsave gsave 1 LoutMargSet grestore -240 fnt84 8953 13844(5)m 240 fnt82 480 13254(The)m 908(modi\207er)s -1778(w)s 2(ords)k 2412(are:)s gsave -600 13068 translate -0.6953 1.0000 scale -240 fnt31 0 -52(read)m - -grestore -gsave -960 12828 translate -0.6953 1.0000 scale -240 fnt31 0 -52(O_RDONLY)m -grestore -1761 12774(:)m 1867(Allo)s 6(w)k -2513(reading)s 3283(and)s 3687(not)s 4053(writing.)s 4847(May)s -5340(not)s 5706(be)s 5988(used)s 6485(with)s gsave -6967 12828 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(write)m -grestore -7527(or)s 7786(things)s 8422(that)s 960 12534(imply)m -1572(it.)s gsave -600 12348 translate -0.6953 1.0000 scale -240 fnt31 0 -52(write)m -grestore -gsave -960 12108 translate +240 fnt84 8953 13844(5)m gsave +960 13308 translate 0.6953 1.0000 scale -240 fnt31 0 -52(O_WRONLY)m - +240 fnt31 0 -52(O_WRONLY)m grestore -1761 12054(:)m 1867(Allo)s 6(w)k 2513(writing)s 3256(and)s -3660(not)s 4026(reading.)s 240 fnt83 4847 12056(Doesn')m 7(t)k +240 fnt82 +1761 13254(:)m 1867(Allo)s 6(w)k 2513(writing)s 3256(and)s +3660(not)s 4026(reading.)s 240 fnt83 4847 13256(Doesn')m 7(t)k 5661(truncate)s 6511(or)s 6789(cr)s 8(eate)k 240 fnt82 -7431 12054(without)m gsave -8222 12108 translate +7431 13254(without)m gsave +8222 13308 translate 0.6953 1.0000 scale 240 fnt31 0 -52(truncate)m grestore -960 11814(or)m gsave -1219 11868 translate +960 13014(or)m gsave +1219 13068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(create)m grestore 1819(.)s gsave -1923 11868 translate +1923 13068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 2483(or)s 2742(things)s 3378(that)s 3796(imply)s 4408(it)s 4600(may)s 5066(not)s 5432(be)s 5714(used)s 6211(with)s gsave -6693 11868 translate +6693 13068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 7093(.)s gsave -600 11628 translate +600 12828 translate 0.6953 1.0000 scale 240 fnt31 0 -52(overwrite)m grestore -960 11334(Equi)m 6(v)k 6(alent)k +960 12534(Equi)m 6(v)k 6(alent)k 2044(to)s gsave -2283 11388 translate +2283 12588 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write,create,truncate)m grestore 4385(.)s gsave -600 11148 translate +600 12348 translate 0.6953 1.0000 scale 240 fnt31 0 -52(create)m grestore gsave -600 10908 translate +600 12108 translate 0.6953 1.0000 scale 240 fnt31 0 -52(creat)m grestore gsave -960 10668 translate +960 11868 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_CREAT)m grestore -1660 10614(:)m 1766(Creates)s 2533(the)s 2881(\207le)s 3242(if)s +1660 11814(:)m 1766(Creates)s 2533(the)s 2881(\207le)s 3242(if)s 3459(necessary)s 15(.)k 4477(Implies)s gsave -5244 10668 translate +5244 11868 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 5744(.)s gsave -600 10428 translate +600 11628 translate 0.6953 1.0000 scale 240 fnt31 0 -52(exclusive)m grestore gsave -600 10188 translate +600 11388 translate 0.6953 1.0000 scale 240 fnt31 0 -52(excl)m grestore gsave -960 9948 translate +960 11148 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_EXCL)m grestore -1560 9894(:)m 1666(F)s 3(ails)k +1560 11094(:)m 1666(F)s 3(ails)k 2178(if)s 2395(the)s 2743(\207le)s 3104(already)s 3861(e)s 3(xists.)k 4506(Implies)s gsave -5273 9948 translate +5273 11148 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 5833(and)s gsave -6237 9948 translate +6237 11148 translate 0.6953 1.0000 scale 240 fnt31 0 -52(create)m grestore 6837(.)s 6941(May)s 7434(not)s 7800(be)s 8082(used)s 8579(with)s gsave -960 9708 translate +960 10908 translate 0.6953 1.0000 scale 240 fnt31 0 -52(truncate)m grestore -1761 9654(.)m +1761 10854(.)m gsave -600 9468 translate +600 10668 translate 0.6953 1.0000 scale 240 fnt31 0 -52(truncate)m grestore gsave -600 9228 translate +600 10428 translate 0.6953 1.0000 scale 240 fnt31 0 -52(trunc)m grestore gsave -960 8988 translate +960 10188 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_TRUNC)m grestore -1660 8934(:)m 1766(T)s 8(runcate)k 2663(an)s 3(y)k +1660 10134(:)m 1766(T)s 8(runcate)k 2663(an)s 3(y)k 3060(e)s 3(xisting)k 3867(\207le.)s 4276(Implies)s gsave -5043 8988 translate +5043 10188 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 5543(.)s 5647(May)s 6140(not)s 6506(be)s 6788(used)s 7285(with)s gsave -7767 8988 translate +7767 10188 translate 0.6953 1.0000 scale 240 fnt31 0 -52(exclusive)m grestore 8668(.)s gsave -600 8748 translate +600 9948 translate 0.6953 1.0000 scale 240 fnt31 0 -52(append)m grestore gsave -960 8508 translate +960 9708 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_APPEND)m grestore -1761 8454(:)m +1761 9654(:)m 1867(All)s 2227(writes)s 2861(will)s 3287(append)s 4037(to)s 4276(the)s 4624(\207le.)s 5033(Implies)s gsave -5800 8508 translate +5800 9708 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 6360(\(b)s 4(ut)k 6801(not)s gsave -7167 8508 translate +7167 9708 translate 0.6953 1.0000 scale 240 fnt31 0 -52(create)m grestore 7767(\).)s gsave -600 8268 translate +600 9468 translate 0.6953 1.0000 scale 240 fnt31 0 -52(sync)m grestore gsave -960 8028 translate +960 9228 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_SYNC)m grestore -1560 7974(:)m 1666(Do)s 2012(writes)s 2646(synchronously)s 15(.)k +1560 9174(:)m 1666(Do)s 2012(writes)s 2646(synchronously)s 15(.)k 4132(Implies)s gsave -4899 8028 translate +4899 9228 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 5399(.)s gsave -600 7788 translate +600 8988 translate 0.6953 1.0000 scale 240 fnt31 0 -52(wait)m grestore gsave -600 7548 translate +600 8748 translate 0.6953 1.0000 scale 240 fnt31 0 -52(nowait)m grestore gsave -600 7308 translate +600 8508 translate 0.6953 1.0000 scale 240 fnt31 0 -52(close)m grestore -960 7014(These)m 1587(modi\207ers)s 2541(control)s 3273(the)s 3621(beha)s 4(viour)k +960 8214(These)m 1587(modi\207ers)s 2541(control)s 3273(the)s 3621(beha)s 4(viour)k 4634(of)s 4905(the)s 5253(client,)s 5890(with)s 6372(respect)s -7108(to)s 7347(the)s 7695(pipes)s 8251(carrying)s 960 6774(data)m +7108(to)s 7347(the)s 7695(pipes)s 8251(carrying)s 960 7974(data)m 1418(to)s 1657(and)s 2061(from)s 2585(the)s 2933(service,)s 3716(when)s 4292(the)s 4640(service)s 5372(terminates.)s 6470(See)s 6871(belo)s 6(w)k 15(.)k gsave -600 6588 translate +600 7788 translate 0.6953 1.0000 scale 240 fnt31 0 -52(fd)m grestore -960 6294(The)m 240 fnt83 1388 6296(\207lename)m 240 fnt82 2252 6294(is)m +960 7494(The)m 240 fnt83 1388 7496(\207lename)m 240 fnt82 2252 7494(is)m 2462(not)s 2828(a)s 2994(\207lename)s 3873(b)s 4(ut)k 4235(a)s 4401(numeric)s 5237(\207le)s 5598(descriptor)s 13(.)k 6644(One)s 7099(or)s 7358(both)s 7841(of)s gsave -8112 6348 translate +8112 7548 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 8572(and)s gsave -960 6107 translate +960 7307 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore -1520 6053(must)m +1520 7253(must)m 2045(be)s 2327(speci\207ed,)s 3284(and)s 3688(no)s 3981(other)s 4532(w)s 2(ords)k 5166(are)s 5513(allo)s 6(wed.)k -6368(The)s 240 fnt83 6796 6055(\207lename)m 240 fnt82 7660 6053(may)m +6368(The)s 240 fnt83 6796 7255(\207lename)m 240 fnt82 7660 7253(may)m 8126(also)s 8564(be)s gsave -960 5867 translate +960 7067 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdin)m grestore -1460 5813(,)m +1460 7013(,)m gsave -1567 5867 translate +1567 7067 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdout)m grestore 2227(or)s gsave -2486 5867 translate +2486 7067 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stderr)m grestore 3146(for)s 3484(\207le)s 3845(descriptor)s 4860(0,)s 5087(1)s 5242(or)s 5501(2)s 5675(respecti)s 6(v)k 3(ely)k 15(.)k -480 5251(If)m 701(no)s 240 fnt83 984 5253(modi\207er)m 2(s)k -240 fnt82 1918 5251(which)m 2550(imply)s gsave -3152 5305 translate +480 6748(If)m 701(no)s 240 fnt83 984 6750(modi\207er)m 2(s)k +240 fnt82 1918 6748(which)m 2550(imply)s gsave +3152 6802 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 3602(or)s gsave -3851 5305 translate +3851 6802 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 4401(are)s 4738(used)s 5226(it)s 5408(is)s 5608(as)s 5848(if)s gsave -6055 5305 translate +6055 6802 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 6605(had)s 6999(been)s 7498(speci\207ed,)s 8445(e)s 3(xcept)k -480 5011(that)m 898(if)s 1115(the)s 1463(\207ledescriptor)s 2783(0)s +480 6508(that)m 898(if)s 1115(the)s 1463(\207ledescriptor)s 2783(0)s 2958(of)s 3229(the)s 3577(service)s 4309(is)s 4519(being)s 5104(opened)s 5854(\(either)s 6536(speci\207ed)s 7444(numerically)s 8639(or)s -480 4771(with)m gsave -962 4825 translate +480 6268(with)m gsave +962 6322 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdin)m grestore 1462(\))s 1590(it)s 1782(is)s 1992(as)s 2242(if)s gsave -2459 4825 translate +2459 6322 translate 0.6953 1.0000 scale 240 fnt31 0 -52(overwrite)m grestore 3420(had)s 3824(been)s 4333(speci\207ed)s 5241(\(or)s gsave -5579 4825 translate +5579 6322 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore 6139(if)s 6356(only)s gsave -6836 4825 translate +6836 6322 translate 0.6953 1.0000 scale 240 fnt31 0 -52(fd)m grestore -7096(w)s 2(as)k 7517(speci\207ed\).)s 480 4363(The)m 892(client)s -1465(will)s 1874(also)s 2296(use)s gsave -2654 4417 translate +7096(w)s 2(as)k 7517(speci\207ed\).)s 8610(The)s 480 6028(client)m +1064(will)s 1483(also)s 1915(use)s gsave +2283 6082 translate 0.6953 1.0000 scale 240 fnt31 0 -52(O_NOCTTY)m grestore -3498(when)s 4057(opening)s 4866(\207les)s 5298(speci\207ed)s 6189(by)s -6466(the)s 6798(caller)s 9(,)k 7408(to)s 7630(a)s 4(v)k 4(oid)k -8195(changing)s 480 4123(its)m 756(controlling)s 1858(terminal.)s 480 3715(By)m -810(de)s 1032(f)s 2(ault)k 1523(stdin,)s 2091(std)s -2368(out)s 2729(and)s 3129(stderr)s 3728(of)s 3995(the)s -4338(ser)s 4616(vice)s 5066(will)s 5488(be)s 5766(con)s -6109(nect)s 6507(ed)s 6786(to)s 7021(the)s 7365(cor)s -7670(re)s 7851(spond)s 8422(ing)s 8776(de)s 8998(-)s -480 3475(scrip)m 937(tors)s 1346(on)s 1643(the)s 1991(client.)s -2625(Di)s 2858(ag)s 3077(nos)s 3401(tics)s 3783(from)s -4307(the)s 4655(client)s 5245(and)s 5649(dae)s 5977(mon)s -6460(will)s 6886(also)s 7324(ap)s 7543(pear)s 8014(on)s -8311(stderr)s 13(.)k 480 3067(If)m gsave -710 3121 translate -0.6953 1.0000 scale -240 fnt31 0 -52(wait)m - -grestore -1170(is)s 1380(speci\207ed,)s 2337(the)s 2685(client)s 3275(will)s -3701(w)s 2(ait)k 4170(for)s 4508(the)s 4856(pipe)s -5324(to)s 5563(be)s 5845(closed,)s 6563(and)s 6967(only)s -7447(e)s 3(xit)k 7862(after)s 8358(this)s 480 2827(has)m -850(happened.)s 1872(This)s 2348(means)s 3010(that)s 3428(either)s -4031(the)s 4379(recei)s 6(ving)k 5315(end)s 5719(of)s -5990(the)s 6338(pipe)s 6806(connection)s 7913(w)s 2(as)k -8334(closed)s 480 2587(while)m 1067(data)s 1525(w)s 2(as)k -1946(still)s 2358(a)s 4(v)k 6(ailable)k 3266(at)s -3498(the)s 3846(sending)s 4644(end,)s 5097(or)s 5356(that)s -5774(the)s 6122(end)s 6526(of)s 6797(\207le)s 7158(w)s 2(as)k -7579(reached)s 8380(on)s 8677(the)s 480 2347(reading)m 1250(\207le)s -1611(descriptor)s 13(.)k 2657(Errors)s 3304(encountered)s 4531(reading)s -5301(or)s 5560(writing)s 6303(in)s 6546(the)s 6894(client)s -7484(at)s 7716(this)s 8112(stage)s 8659(will)s 480 2106(be)m -762(considered)s 1855(a)s 2021(system)s 2744(error)s 3266(and)s -3670(cause)s 4256(the)s 4603(client)s 5193(to)s 5431(e)s 3(xit)k -5845(with)s 6327(status)s 6921(255,)s 7387(b)s 4(ut)k -7749(will)s 8174(not)s 8539(cause)s 480 1866(disconnection)m 1866(at)s -2098(the)s 2446(service)s 3178(side)s 3619(since)s 4166(the)s -4514(service)s 5246(has)s 5616(already)s 6373(e)s 3(xited.)k -480 1458(If)m gsave -710 1512 translate -0.6953 1.0000 scale -240 fnt31 0 -52(close)m -grestore -1270(is)s 1480(speci\207ed)s -2388(the)s 2736(client)s 3326(will)s 3752(immediately)s 5000(close)s -5547(the)s 5895(pipe)s 6363(connection)s 7470(by)s 7764(killing)s -8441(the)s 480 1218(rele)m 6(v)k 6(ant)k 1297(cop)s 2(y)k -1815(of)s gsave -2086 1272 translate +3137(when)s 3707(opening)s 4525(\207les)s 4968(speci\207ed)s 5869(by)s +6156(the)s 6498(caller)s 9(,)k 7118(to)s 7351(a)s 4(v)k 4(oid)k +7926(changing)s 8850(its)s 480 5788(controlling)m 1581(terminal.)s 2539(By)s +2871(def)s 2(ault)k 3591(stdin,)s 4161(stdout)s 4805(and)s +5207(stderr)s 5809(of)s 6079(the)s 6425(service)s 7156(will)s +7580(be)s 7861(connected)s 8887(to)s 480 5548(the)m 811(corresponding)s +2216(descriptors)s 3297(on)s 3577(the)s 3907(client.)s 4524(Diagnostics)s +5686(from)s 6193(the)s 6523(client)s 7096(and)s 7482(daemon)s +8280(will)s 8688(also)s 480 5308(appear)m 1177(on)s 1473(stderr)s 13(.)k +2167(If)s gsave +2396 5362 translate 0.6953 1.0000 scale -240 fnt31 0 -52(cat)m +240 fnt31 0 -52(wait)m grestore -2386(.)s 2490(If)s -2720(the)s 3068(service)s 3800(uses)s 4263(the)s 4611(descriptor)s -5626(it)s 5818(will)s 6244(get)s gsave -6596 1272 translate +2856(is)s 3065(speci\207ed,)s +4022(the)s 4369(client)s 4959(will)s 5384(w)s 2(ait)k +5853(for)s 6190(the)s 6538(pipe)s 7005(to)s 7244(be)s +7525(closed,)s 8243(and)s 8646(only)s 480 5068(e)m 3(xit)k +889(after)s 1379(this)s 1769(has)s 2132(happened.)s 3148(This)s +3618(means)s 4274(that)s 4685(either)s 5282(the)s 5624(recei)s 6(ving)k +6554(end)s 6951(of)s 7216(the)s 7558(pipe)s 8019(connection)s +480 4828(w)m 2(as)k 901(closed)s 1570(while)s 2157(data)s +2615(w)s 2(as)k 3036(still)s 3448(a)s 4(v)k 6(ailable)k +4356(at)s 4588(the)s 4936(sending)s 5734(end,)s 6187(or)s +6446(that)s 6864(the)s 7212(end)s 7616(of)s 7887(\207le)s +8248(w)s 2(as)k 480 4588(reached)m 1279(on)s 1573(the)s +1919(reading)s 2686(\207le)s 3045(descriptor)s 13(.)k 4088(Errors)s +4732(encountered)s 5957(reading)s 6724(or)s 6981(writing)s 7721(in)s +7962(the)s 8307(client)s 8894(at)s 480 4347(this)m 876(stage)s +1423(will)s 1849(be)s 2131(considered)s 3225(a)s 3391(system)s +4115(error)s 4638(and)s 5042(cause)s 5629(the)s 5977(client)s +6567(to)s 6806(e)s 3(xit)k 7221(with)s 7703(status)s +8298(255,)s 8764(b)s 4(ut)k 480 4107(will)m 896(not)s +1251(cause)s 1827(disconnection)s 3203(at)s 3424(the)s 3761(service)s +4482(side)s 4913(since)s 5449(the)s 5786(service)s 6507(has)s +6867(already)s 7613(e)s 3(xited.)k 8347(If)s gsave +8566 4161 translate 0.6953 1.0000 scale -240 fnt31 0 -52(SIGPIPE)m - +240 fnt31 +0 -52(close)m grestore -7356(\(or)s gsave -7694 1272 translate +480 3867(is)m 676(speci\207ed)s 1569(the)s 1902(client)s +2477(will)s 2888(immediately)s 4121(close)s 4653(the)s 4987(pipe)s +5440(connection)s 6532(by)s 6811(killing)s 7473(the)s 7806(rele)s 6(v)k 6(ant)k +8608(cop)s 2(y)k 480 3627(of)m gsave +744 3681 translate 0.6953 1.0000 scale -240 fnt31 0 -52(EPIPE)m -grestore -8194(\))s 8322(for)s -8660(a)s 480 978(writing)m 1218(descriptor)s 2228(or)s 2482(end)s -2881(of)s 3147(\207le)s 3502(for)s 3835(a)s 3996(reading)s -4761(one;)s 5214(the)s 5557(descriptor)s 6566(opened)s 7311(by)s -7600(or)s 7854(passed)s 8545(to)s 8778(the)s 480 738(client)m -1070(will)s 1496(also)s 1934(be)s 2216(closed.)s 0 52(User)m -511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s -8652(0.62)s -grestore - -grestore - -pgsave restore -showpage +240 fnt31 0 -52(cat)m -%%Page: 6 6 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -%%+ font Times-Italic -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup -gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet grestore +1044(.)s 1141(If)s 1364(the)s 1705(service)s 2429(uses)s +2885(the)s 3226(descriptor)s 4234(it)s 4418(will)s 4837(get)s gsave -0 16840 translate -0.0000 rotate - +5182 3681 translate +0.6953 1.0000 scale +240 fnt31 0 -52(SIGPIPE)m grestore +5935(\(or)s gsave +6265 3681 translate +0.6953 1.0000 scale +240 fnt31 0 -52(EPIPE)m grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -0 LoutMargSet -grestore -240 fnt84 0 13842(6)m 240 fnt82 480 13251(If)m gsave -707 13305 translate +6765(\))s 6886(for)s 7217(a)s 7376(writing)s 8111(descriptor)s +480 3387(or)m 736(end)s 1137(of)s 1404(\207le)s 1762(for)s +2096(a)s 2259(reading)s 3025(one;)s 3480(the)s 3824(descriptor)s +4836(opened)s 5582(by)s 5873(or)s 6128(passed)s 6821(to)s +7056(the)s 7401(client)s 7987(will)s 8410(also)s 8844(be)s +480 3147(closed.)m 1255(If)s gsave +1485 3201 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(nowait)m -grestore -1364(is)s 1570(speci\207ed)s 2475(then)s 2941(the)s -3285(client)s 3872(will)s 4294(not)s 4657(w)s 2(ait)k -5123(and)s 5523(the)s 5868(connection)s 6972(will)s 7394(remain)s -8111(open)s 8630(after)s 480 13011(the)m 824(client)s 1409(terminates.)s -2502(Data)s 3008(may)s 3469(continue)s 4344(to)s 4578(be)s -4856(passed)s 5547(between)s 6396(the)s 6739(inheritors)s 7700(of)s -7966(the)s 8309(rele)s 6(v)k 6(ant)k 480 12771(descriptor)m -1484(on)s 1770(the)s 2107(service)s 2828(side)s 3258(and)s -3651(the)s 3988(corresponding)s 5399(\207le)s 5749(or)s 5997(descriptor)s -7001(on)s 7287(the)s 7624(client)s 8203(side)s 8633(until)s -480 12531(either)m 1071(side)s 1499(closes)s 2121(their)s 2606(descriptor)s 13(.)k -3639(This)s 4102(should)s 4786(not)s 5140(usually)s 5872(be)s -6141(speci\207ed)s 7036(for)s 7362(stderr)s 7952(\(or)s 8277(stdout)s -8909(if)s gsave -480 12345 translate -0.6953 1.0000 scale -240 fnt31 0 -52(\211\211signals)m 1440(stdout)s -grestore -2141 12291(is)m -2350(used\))s 2916(since)s 3462(diagnostics)s 4588(from)s 5111(the)s -5457(service)s 6188(side)s 6628(may)s 7093(arri)s 6(v)k 3(e)k -7695(after)s 8190(the)s 8536(client)s 480 12051(has)m 850(e)s 3(xited)k -1489(and)s 1893(be)s 2175(confused)s 3097(with)s 3579(e)s 3(xpected)k -4484(output.)s 480 11643(The)m 908(def)s 2(ault)k 1629(is)s -gsave -1839 11697 translate +240 fnt31 0 -52(nowait)m +grestore +2145(is)s +2355(speci\207ed)s 3263(then)s 3732(the)s 4080(client)s 4670(will)s +5096(not)s 5462(w)s 2(ait)k 5931(and)s 6335(the)s +6683(connection)s 7790(will)s 8216(remain)s 480 2907(open)m 1003(after)s +1499(the)s 1847(client)s 2437(terminates.)s 3535(Data)s 4046(may)s +4512(continue)s 5392(to)s 5631(be)s 5913(passed)s 6609(between)s +7463(the)s 7811(inheritors)s 8777(of)s 480 2667(the)m 828(rele)s 6(v)k 6(ant)k +1645(descriptor)s 2660(on)s 2957(the)s 3305(service)s 4037(side)s +4478(and)s 4882(the)s 5230(corresponding)s 6652(\207le)s 7013(or)s +7272(descriptor)s 8287(on)s 8584(the)s 480 2427(client)m 1070(side)s +1511(until)s 2004(either)s 2607(side)s 3048(closes)s 3683(their)s +4180(descriptor)s 13(.)k 5226(This)s 5702(should)s 6399(not)s +6765(usually)s 7510(be)s 7792(speci\207ed)s 8700(for)s 480 2187(stderr)m +1083(\(or)s 1421(stdout)s 2066(if)s gsave +2283 2241 translate +0.6953 1.0000 scale +240 fnt31 0 -52(\211\211signals)m +1440(stdout)s +grestore +3945(is)s 4155(used\))s 4722(since)s 5269(diagnostics)s +6396(from)s 6920(the)s 7268(service)s 8000(side)s 8441(may)s +480 1947(arri)m 6(v)k 3(e)k 1083(after)s 1579(the)s +1927(client)s 2517(has)s 2887(e)s 3(xited)k 3526(and)s +3930(be)s 4212(confused)s 5134(with)s 5616(e)s 3(xpected)k +6521(output.)s 7297(The)s 7725(def)s 2(ault)k 8446(is)s +gsave +8656 2001 translate 0.6953 1.0000 scale 240 fnt31 0 -52(wait)m grestore -2299(for)s 2637(writing)s 3380(\207le)s -3741(descriptors)s 4840(and)s gsave -5244 11697 translate +480 1707(for)m 818(writing)s 1561(\207le)s +1922(descriptors)s 3021(and)s gsave +3425 1761 translate 0.6953 1.0000 scale 240 fnt31 0 -52(close)m grestore -5804(for)s -6142(reading)s 6912(ones.)s gsave -120 11303 translate +3985(for)s +4323(reading)s 5093(ones.)s gsave +120 1367 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211w)m gsave 288 0 translate @@ -1391,7 +1359,7 @@ grestore grestore gsave -120 11063 translate +120 1127 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211fdwait)m gsave @@ -1407,55 +1375,96 @@ grestore grestore grestore -480 10769(Sets)m 924(the)s 1267(action)s 1903(on)s +480 833(Sets)m 924(the)s 1267(action)s 1903(on)s 2194(termination)s 3347(of)s 3613(the)s 3956(service)s 4682(for)s 5015(the)s 5358(speci\207ed)s 6261(\207le)s 6616(descriptor;)s 240 fnt83 -7678 10771(action)m 240 fnt82 8325 10769(must)m 8844(be)s gsave -480 10583 translate +7678 835(action)m 240 fnt82 8325 833(must)m 8844(be)s 0 52(User)m +511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s +8652(0.62)s +grestore + +grestore + +pgsave restore +showpage + +%%Page: 6 6 +%%BeginPageSetup +%%PageResources: font Times-Roman +%%+ font Times-Bold +%%+ font Courier-Bold +%%+ font Times-Italic +/pgsave save def +0.0500 dup scale 10 setlinewidth +%%EndPageSetup +gsave +0 0 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic +gsave +LoutPageSet +grestore +gsave +0 16840 translate +0.0000 rotate + +grestore + +grestore +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +0 LoutMargSet +grestore +240 fnt84 0 13842(6)m gsave +480 13305 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(wait)m +240 fnt31 0 -52(wait)m grestore -880 10529(,)m gsave -981 10583 translate +240 fnt82 +880 13251(,)m gsave +981 13305 translate 0.6953 1.0000 scale 240 fnt31 0 -52(nowait)m grestore -1634(or)s -gsave -1886 10583 translate +1634(or)s gsave +1886 13305 translate 0.6953 1.0000 scale -240 fnt31 0 -52(close)m +240 fnt31 +0 -52(close)m grestore 2439(as)s 2682(described)s 3650(abo)s 3(v)k 3(e.)k 4313(The)s 4734(\207le)s 5088(descriptor)s 6096(must)s 6615(be)s -6890(speci\207ed)s 7791(as)s 8034(open)s 8550(when)s 480 10289(this)m +6890(speci\207ed)s 7791(as)s 8034(open)s 8550(when)s 480 13011(this)m 876(option)s 1545(is)s 1755(encountered;)s 3036(this)s 3432(option)s 4101(is)s 4311(o)s 3(v)k 3(erridden)k 5398(by)s 5692(an)s 3(y)k 6089(later)s gsave -6572 10343 translate +6572 13065 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211file)m grestore 7232(or)s gsave -7491 10343 translate +7491 13065 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211fdwait)m grestore -8352(option)s 480 10049(-)m +8352(option)s 480 12771(-)m 608(e)s 6(v)k 3(en)k 1108(by)s 1402(a)s gsave -1568 10103 translate +1568 12825 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211file)m grestore 2228(which)s 2870(does)s 3360(not)s 3726(specify)s 4470(an)s 4753(action)s 5394(on)s 5691(termination)s 6849(\(in)s 7171(this)s 7567(case)s 8034(the)s 8382(def)s 2(ault)k -480 9809(will)m 906(be)s 1188(used,)s 1734(as)s 1984(described)s +480 12531(will)m 906(be)s 1188(used,)s 1734(as)s 1984(described)s 2958(abo)s 3(v)k 3(e\).)k gsave -120 9479 translate +120 12201 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211D)m gsave @@ -1472,7 +1481,7 @@ grestore grestore gsave -120 9239 translate +120 11961 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211defvar)m gsave 1296 0 translate @@ -1487,17 +1496,17 @@ gsave grestore grestore -480 8945(Set)m 845(a)s 1011(user)s 4(-)k +480 11667(Set)m 845(a)s 1011(user)s 4(-)k 1473(de\207ned)s 2236(v)s 6(ari)k 2595(able)s 240 fnt83 -3049 8947(name)m 240 fnt82 3621 8945(to)m 240 fnt83 3860 8947(val)m -4152(ue)s 240 fnt82 4371 8945(.)m 4475(These)s 5102(user)s 4(-)k +3049 11669(name)m 240 fnt82 3621 11667(to)m 240 fnt83 3860 11669(val)m +4152(ue)s 240 fnt82 4371 11667(.)m 4475(These)s 5102(user)s 4(-)k 5564(de\207ned)s 6327(v)s 6(ari)k 6686(ables)s 7228(are)s 7575(made)s 8149(a)s 4(v)k 6(ail)k 8598(able)s -480 8705(in)m 723(the)s 1071(con)s 1414(\207g)s 1660(u)s +480 11427(in)m 723(the)s 1071(con)s 1414(\207g)s 1660(u)s 1775(ra)s 1960(tion)s 2389(lan)s 2678(guage)s 3306(as)s 3556(the)s 3904(pa)s 4130(ram)s 4501(e)s 4603(ters)s gsave -4998 8759 translate +4998 11481 translate 0.6953 1.0000 scale 240 fnt31 0 -52(u\211)m gsave 288 0 translate @@ -1508,10 +1517,10 @@ grestore grestore 5764(and)s 6168(are)s 6515(passed)s 7211(to)s 7450(the)s 7798(ser)s -8076(vice)s 8530(in)s 8773(en)s 8996(-)s 480 8465(vi)m +8076(vice)s 8530(in)s 8773(en)s 8996(-)s 480 11187(vi)m 660(ron)s 976(ment)s 1508(v)s 6(ari)k 1867(ables)s gsave -2402 8519 translate +2402 11241 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_U_)m gsave 1152 0 translate @@ -1521,18 +1530,18 @@ grestore grestore 3709(.)s -240 fnt83 3806 8467(name)m 240 fnt82 4371 8465(may)m 4831(con)s +240 fnt83 3806 11189(name)m 240 fnt82 4371 11187(may)m 4831(con)s 5174(tain)s 5582(only)s 6055(al)s 6222(phanu)s 6803(mer)s 7174(ics)s 7483(and)s 7880(un)s 8117(der)s 8422(scores,)s -480 8225(and)m 884(must)s 1409(start)s 1879(with)s 2360(a)s +480 10947(and)m 884(must)s 1409(start)s 1879(with)s 2360(a)s 2526(let)s 2764(ter)s 13(.)k 3106(If)s 3335(se)s 6(v)k 3643(er)s 3828(al)s 4055(de\207)s 4406(ni)s 4586(tions)s 5102(are)s 5449(gi)s 6(v)k 5744(en)s 6026(for)s -6364(the)s 6712(same)s 240 fnt83 7258 8227(name)m 240 fnt82 -7830 8225(then)m 8299(only)s 8778(the)s 480 7985(last)m 871(is)s +6364(the)s 6712(same)s 240 fnt83 7258 10949(name)m 240 fnt82 +7830 10947(then)m 8299(only)s 8778(the)s 480 10707(last)m 871(is)s 1081(ef)s 1278(fec)s 1562(ti)s 6(v)k 3(e.)k gsave -120 7694 translate +120 10416 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211t)m gsave 432 0 translate @@ -1542,7 +1551,7 @@ grestore grestore gsave -120 7454 translate +120 10176 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211timeout)m gsave @@ -1552,130 +1561,170 @@ gsave grestore grestore -480 7160(T)m 8(ime)k +480 9882(T)m 8(ime)k 1029(out)s 1392(the)s 1736(service)s 2465(if)s 2678(it)s 2867(tak)s 2(es)k 3403(longer)s 4071(than)s 240 fnt83 -4536 7162(seconds)m 240 fnt82 5346 7160(seconds)m 6151(\(a)s 6393(positi)s 6(v)k 3(e)k +4536 9884(seconds)m 240 fnt82 5346 9882(seconds)m 6151(\(a)s 6393(positi)s 6(v)k 3(e)k 7193(inte)s 3(ger)k 9(,)k 7948(in)s 8187(decimal\).)s -480 6919(T)m 8(imeout)k 1331(will)s 1746(produce)s 2562(a)s +480 9641(T)m 8(imeout)k 1331(will)s 1746(produce)s 2562(a)s 2717(diagnostic)s 3742(on)s 4028(stderr)s 4620(and)s 5013(an)s 5284(e)s 3(xit)k 5688(status)s 6272(of)s 6532(255.)s -6985(If)s 240 fnt83 7204 6921(seconds)m 240 fnt82 8006 6919(is)m -8205(zero)s 8657(then)s 480 6679(no)m 773(timeout)s 1563(will)s +6985(If)s 240 fnt83 7204 9643(seconds)m 240 fnt82 8006 9641(is)m +8205(zero)s 8657(then)s 480 9401(no)m 773(timeout)s 1563(will)s 1989(be)s 2271(implemented)s 3577(\(this)s 4052(is)s 4262(the)s 4610(def)s 2(ault\).)k gsave -120 6339 translate +120 9061 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211S)m grestore 240 fnt83 -380 6287(method)m gsave -120 6099 translate +380 9009(method)m gsave +120 8821 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211signals)m grestore -1081 6047(method)m 240 fnt82 -480 5805(Af)m 6(fects)k 1212(the)s 1544(handling)s 2420(of)s +1081 8769(method)m 240 fnt82 +480 8527(Af)m 6(fects)k 1212(the)s 1544(handling)s 2420(of)s 2675(the)s 3008(e)s 3(xit)k 3407(status)s 3987(when)s 4547(the)s 4879(service)s 5596(terminates)s 6625(due)s 7012(to)s -7235(a)s 7386(signal.)s 8045(\(The)s 8536(client)s 480 5564(will)m +7235(a)s 7386(signal.)s 8045(\(The)s 8536(client)s 480 8286(will)m 906(al)s 2(w)k 2(ays)k 1617(\207nish)s 2206(by)s 2500(calling)s gsave -3203 5618 translate +3203 8340 translate 0.6953 1.0000 scale 240 fnt31 0 -52(_exit)m grestore 3703(,)s 3810(so)s 4076(that)s 4494(only)s 4974(numbers)s 5849(from)s 6373(0)s 6548(to)s 6787(255)s 7193(can)s 7582(be)s 7864(returned)s -8718(and)s 480 5324(not)m 830(the)s 1162(full)s 1532(range)s +8718(and)s 480 8046(not)m 830(the)s 1162(full)s 1532(range)s 2102(of)s 2357(numbers)s 3216(and)s 3603(signal)s 4213(indications)s 5297(which)s 5922(can)s 6295(be)s 6561(returned)s 7398(by)s 7676(the)s gsave -8008 5378 translate +8008 8100 translate 0.6953 1.0000 scale 240 fnt31 0 -52(wait)m grestore 8451(f)s 2(amily)k -480 5084(of)m 751(system)s 1475(calls.\))s 480 4676(The)m 240 fnt83 -908 4678(method)m 240 fnt82 1679 4676(may)m 2145(be)s 2427(one)s -2829(of)s 3100(the)s 3448(follo)s 6(wing:)k 240 fnt83 -600 4438(status)m 240 fnt82 960 4196(The)m 1386(client')s 13(s)k +480 7805(of)m 751(system)s 1475(calls.\))s 2160(The)s 240 fnt83 +2588 7807(method)m 240 fnt82 3359 7805(may)m 3825(be)s 4107(one)s +4509(of)s 4780(the)s 5128(follo)s 6(wing:)k 240 fnt83 +600 7567(status)m 240 fnt82 960 7325(The)m 1386(client')s 13(s)k 2123(e)s 3(xit)k 2536(status)s 3128(will)s 3552(be)s -240 fnt83 3831 4198(status)m 240 fnt82 4384 4196(.)m 4486(This)s +240 fnt83 3831 7327(status)m 240 fnt82 4384 7325(.)m 4486(This)s 4959(will)s 5383(not)s 5746(be)s 6026(distinguishable)s 7527(from)s -8049(the)s 8394(service)s 960 3955(really)m 1557(ha)s 4(ving)k +8049(the)s 8394(service)s 960 7084(really)m 1557(ha)s 4(ving)k 2258(e)s 3(xited)k 2897(with)s 3379(code)s 240 fnt83 -3887 3957(status)m 240 fnt82 4440 3955(.)m 4544(This)s 5020(method)s +3887 7086(status)m 240 fnt82 4440 7084(.)m 4544(This)s 5020(method)s 5796(is)s 6006(the)s 6354(def)s 2(ault,)k 7122(with)s -7604(a)s 240 fnt83 7770 3957(status)m 240 fnt82 8383 3955(of)m +7604(a)s 240 fnt83 7770 7086(status)m 240 fnt82 8383 7084(of)m 8654(254.)s gsave -600 3769 translate +600 6898 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number)m grestore gsave -600 3529 translate +600 6658 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number\211nocore)m grestore -960 3235(The)m 1388(client')s 13(s)k 2128(e)s 3(xit)k +960 6364(The)m 1388(client')s 13(s)k 2128(e)s 3(xit)k 2543(status)s 3138(will)s 3564(be)s 3846(the)s 4194(number)s 4985(of)s 5256(the)s 5604(signal)s 6230(which)s 6872(caused)s -7581(the)s 7929(termination)s 960 2995(of)m 1231(the)s 1579(service.)s +7581(the)s 7929(termination)s 960 6124(of)m 1231(the)s 1579(service.)s 2359(If)s gsave -2589 3049 translate +2589 6178 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number)m grestore 3249(is)s 3459(used)s 3956(rather)s 4572(than)s gsave -5041 3049 translate +5041 6178 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number\211nocore)m grestore 6402(then)s -6871(128)s 7278(will)s 7704(be)s 7986(added)s 960 2755(if)m +6871(128)s 7278(will)s 7704(be)s 7986(added)s 960 5884(if)m 1177(the)s 1525(service)s 2257(dumped)s 3087(core.)s gsave -3602 2809 translate +3602 5938 translate 0.6953 1.0000 scale 240 fnt31 0 -52(number)m grestore 4262(is)s 4472(v)s 3(ery)k 4948(lik)s 2(e)k 5360(the)s 5708(e)s 3(xit)k 6123(code)s 6631(mangling)s -7588(done)s 8110(by)s 8404(the)s 960 2515(Bourne)m 1721(shell.)s +7588(done)s 8110(by)s 8404(the)s 960 5644(Bourne)m 1721(shell.)s gsave -600 2329 translate +600 5458 translate 0.6953 1.0000 scale 240 fnt31 0 -52(highbit)m grestore -960 2035(The)m 1388(client')s 13(s)k +960 5164(The)m 1388(client')s 13(s)k 2128(e)s 3(xit)k 2543(status)s 3138(will)s 3564(be)s 3846(the)s 4194(number)s 4985(of)s 5256(the)s 5604(signal)s 6230(with)s 6712(128)s 7119(added.)s 7795(If)s 8025(the)s -8373(service)s 960 1795(e)m 3(xits)k 1459(normally)s 2376(with)s +8373(service)s 960 4924(e)m 3(xits)k 1459(normally)s 2376(with)s 2858(an)s 3141(e)s 3(xit)k 3556(code)s 4064(of)s 4335(greater)s 5057(than)s 5526(127)s 5934(then)s 6403(127)s 6811(will)s 7237(be)s 7519(returned.)s gsave -600 1609 translate +600 4738 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdout)m grestore -960 1315(The)m 1375(service')s 13(s)k 2247(numeric)s 3069(w)s 2(ait)k +960 4444(The)m 1375(service')s 13(s)k 2247(numeric)s 3069(w)s 2(ait)k 3524(status)s 4105(as)s 4341(tw)s 2(o)k 4737(decimal)s 5534(numbers)s 6395(\(high)s 6943(byte)s 7397(\207rst\))s 7882(and)s -8272(a)s 8424(te)s 3(xtual)k 960 1075(description)m 2079(of)s +8272(a)s 8424(te)s 3(xtual)k 960 4204(description)m 2079(of)s 2350(its)s 2626(meaning)s 3503(will)s 3929(be)s 4211(printed)s 4946(to)s 5185(the)s 5533(client')s 13(s)k 6273(standard)s -7141(output.)s 7857(It)s 8062(will)s 8488(be)s 960 835(preceded)m +7141(output.)s 7857(It)s 8062(will)s 8488(be)s 960 3964(preceded)m 1865(by)s 2142(a)s 2292(ne)s 6(wline)k 3082(and)s 3470(follo)s 6(wed)k 4355(by)s 4633(an)s 4899(e)s 3(xtra)k 5417(ne)s 6(wline,)k 6258(and)s 6646(the)s 6977(numbers)s -7836(are)s 8166(separated)s 0 52(0.62)m 4809(User)s 5320(service)s -6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +7836(are)s 8166(separated)s 960 3724(from)m 1484(each)s 1979(other)s +2530(and)s 2934(from)s 3458(the)s 3806(te)s 3(xtual)k +4508(description)s 5627(by)s 5921(single)s 6548(spaces.)s 7276(The)s +7704(e)s 3(xit)k 8119(status)s 8714(of)s 960 3484(the)m +1308(client)s 1898(will)s 2324(be)s 2606(zero,)s 3124(unless)s +3773(a)s 3939(system)s 4663(error)s 5186(occurs)s 5861(in)s +6104(which)s 6746(case)s 7213(no)s 7506(e)s 3(xit)k +7921(status)s 8516(and)s 960 3244(description)m 2079(will)s 2505(be)s +2787(printed)s 3522(to)s 3761(stdout,)s 4453(and)s 4857(an)s +5140(error)s 5663(message)s 6529(will)s 6955(be)s 7237(printed)s +7972(to)s 8211(stderr)s 960 3004(as)m 1210(usual.)s 480 2791(Problems)m +1420(such)s 1902(as)s 2137(client)s 2713(usage)s 3299(errors,)s +3948(the)s 4281(service)s 4999(not)s 5351(being)s 5921(found)s +6524(or)s 6768(permission)s 7860(being)s 8430(denied)s 480 2551(or)m +739(f)s 2(ailure)k 1415(of)s 1686(a)s 1852(system)s +2576(call)s 2975(are)s 3322(system)s 4046(errors.)s 4706(An)s +5056(error)s 5579(message)s 6445(describing)s 7494(the)s 7842(problem)s +8699(will)s 480 2310(be)m 758(printed)s 1489(on)s 1782(the)s +2125(client')s 13(s)k 2861(stderr)s 9(,)k 3498(and)s +3898(the)s 4241(client')s 13(s)k 4977(e)s 3(xit)k +5388(status)s 5978(will)s 6400(be)s 6678(255.)s 7138(If)s +7363(the)s 7707(client)s 8293(dies)s 8724(due)s 480 2070(to)m +719(a)s 885(signal)s 1511(this)s 1907(should)s 2604(be)s +2886(treated)s 3593(as)s 3843(a)s 4009(serious)s 4737(system)s +5461(error)s 13(.)k gsave +120 1730 translate +0.6953 1.0000 scale +240 fnt31 0 -52(\211H)m +grestore +gsave +120 1490 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(\211\211hidecwd)m +grestore +480 1196(Pre)m 6(v)k 3(ents)k 1345(the)s +1693(calling)s 2396(process')s 13(s)k 3323(current)s 4059(directory)s +4975(name)s 5549(from)s 6073(being)s 6658(passed)s 7354(to)s +7593(the)s 7941(service;)s 8729(the)s 480 956(null)m 907(string)s +1504(will)s 1930(be)s 2212(passed)s 2908(instead.)s 0 52(0.62)m +4809(User)s 5320(service)s 6052(daemon)s 6867(and)s 7271(client)s +7861(speci\207cation)s grestore grestore @@ -1714,115 +1763,76 @@ gsave gsave 1 LoutMargSet grestore -240 fnt84 8951 13844(7)m 240 fnt82 960 13256(from)m 1484(each)s -1979(other)s 2530(and)s 2934(from)s 3458(the)s 3806(te)s 3(xtual)k -4508(description)s 5627(by)s 5921(single)s 6548(spaces.)s 7276(The)s -7704(e)s 3(xit)k 8119(status)s 8714(of)s 960 13016(the)m -1308(client)s 1898(will)s 2324(be)s 2606(zero,)s 3124(unless)s -3773(a)s 3939(system)s 4663(error)s 5186(occurs)s 5861(in)s -6104(which)s 6746(case)s 7213(no)s 7506(e)s 3(xit)k -7921(status)s 8516(and)s 960 12776(description)m 2079(will)s 2505(be)s -2787(printed)s 3522(to)s 3761(stdout,)s 4453(and)s 4857(an)s -5140(error)s 5663(message)s 6529(will)s 6955(be)s 7237(printed)s -7972(to)s 8211(stderr)s 960 12536(as)m 1210(usual.)s 480 12024(Problems)m -1420(such)s 1902(as)s 2137(client)s 2713(usage)s 3299(errors,)s -3948(the)s 4281(service)s 4999(not)s 5351(being)s 5921(found)s -6524(or)s 6768(permission)s 7860(being)s 8430(denied)s 480 11784(or)m -739(f)s 2(ailure)k 1415(of)s 1686(a)s 1852(system)s -2576(call)s 2975(are)s 3322(system)s 4046(errors.)s 4706(An)s -5056(error)s 5579(message)s 6445(describing)s 7494(the)s 7842(problem)s -8699(will)s 480 11543(be)m 758(printed)s 1489(on)s 1782(the)s -2125(client')s 13(s)k 2861(stderr)s 9(,)k 3498(and)s -3898(the)s 4241(client')s 13(s)k 4977(e)s 3(xit)k -5388(status)s 5978(will)s 6400(be)s 6678(255.)s 7138(If)s -7363(the)s 7707(client)s 8293(dies)s 8724(due)s 480 11303(to)m -719(a)s 885(signal)s 1511(this)s 1907(should)s 2604(be)s -2886(treated)s 3593(as)s 3843(a)s 4009(serious)s 4737(system)s -5461(error)s 13(.)k gsave -120 10963 translate +240 fnt84 8951 13844(7)m gsave +120 13337 translate 0.6953 1.0000 scale -240 fnt31 0 -52(\211H)m +240 fnt31 0 -52(\211P)m grestore gsave -120 10723 translate +120 13097 translate 0.6953 1.0000 scale 240 fnt31 -0 -52(\211\211hidecwd)m -grestore -480 10429(Pre)m 6(v)k 3(ents)k 1345(the)s -1693(calling)s 2396(process')s 13(s)k 3323(current)s 4059(directory)s -4975(name)s 5549(from)s 6073(being)s 6658(passed)s 7354(to)s -7593(the)s 7941(service;)s 8729(the)s 480 10189(null)m 907(string)s -1504(will)s 1930(be)s 2212(passed)s 2908(instead.)s gsave -120 9849 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(\211P)m +0 -52(\211\211sigpipe)m grestore -gsave -120 9609 translate -0.6953 1.0000 scale -240 fnt31 0 -52(\211\211sigpipe)m -grestore -480 9315(If)m 700(the)s -1038(service)s 1760(program)s 2620(is)s 2820(terminated)s 3888(due)s -4280(to)s 4509(a)s gsave -4665 9369 translate +240 fnt82 480 12803(If)m 700(the)s 1038(service)s +1760(program)s 2620(is)s 2820(terminated)s 3888(due)s 4280(to)s +4509(a)s gsave +4665 12857 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -5415(the)s -5753(e)s 3(xit)k 6157(status)s 6742(of)s 7003(the)s -7341(client)s 7921(will)s 8337(be)s 8608(zero,)s 480 9075(e)m 6(v)k 3(en)k +5415(the)s 5753(e)s 3(xit)k +6157(status)s 6742(of)s 7003(the)s 7341(client)s 7921(will)s +8337(be)s 8608(zero,)s 480 12563(e)m 6(v)k 3(en)k 967(if)s 1170(it)s 1349(w)s 2(ould)k 1990(ha)s 4(v)k 3(e)k 2477(been)s 2973(something)s 4009(else)s 4423(according)s 5405(to)s 5630(the)s 5965(e)s 3(xit)k 6366(status)s 6948(method)s -7710(speci\207ed.)s 8650(This)s 480 8835(option)m 1149(has)s 1519(no)s +7710(speci\207ed.)s 8650(This)s 480 12323(option)m 1149(has)s 1519(no)s 1812(ef)s 6(fect)k 2408(on)s 2705(the)s 3053(code)s 3561(and)s 3965(description)s 5084(printed)s 5819(if)s 6036(the)s 6384(e)s 3(xit)k 6799(status)s 7394(method)s gsave -8170 8889 translate +8170 12377 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stdout)m grestore -8830(is)s 480 8595(in)m 723(use.)s gsave -120 8305 translate +8830(is)s 480 12083(in)m 723(use.)s gsave +120 11793 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211h)m grestore gsave -120 8065 translate +120 11553 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211help)m grestore gsave -120 7825 translate +120 11313 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211copyright)m grestore gsave -480 7585 translate +480 11073 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211h)m grestore -740 7531(or)m gsave -999 7585 translate +740 11019(or)m gsave +999 11073 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211help)m grestore 1659(prints)s 2254(the)s 2602(client')s 13(s)k 3342(usage)s 3943(message;)s gsave -4865 7585 translate +4865 11073 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211copyright)m grestore 6026(prints)s 6621(the)s 6969(cop)s 2(yright)k 7944(and)s 8348(lack)s 8807(of)s -480 7291(w)m 2(arranty)k 1381(notice.)s 9066 670 0 670 240 240 60 0 6161 LoutGr2 +480 10779(w)m 2(arranty)k 1381(notice.)s 9066 670 0 670 240 240 60 0 9649 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -1832,30 +1842,30 @@ grestore 320 fnt84 0 66(2.2.)m 628(Security-o)s 3(v)k 3(erriding)k 3373(options)s grestore -0 5699(There)m +0 9187(There)m 613(are)s 960(also)s 1398(some)s 1959(options)s 2715(which)s 3357(are)s 3704(a)s 4(v)k 6(ailable)k 4612(for)s 4950(deb)s 4(ugging)k 6011(and)s 6415(to)s 6654(allo)s 6(w)k -7233(the)s 7581(system)s 0 5459(administrator)m 1333(to)s 1572(o)s 3(v)k 3(erride)k +7233(the)s 7581(system)s 0 8947(administrator)m 1333(to)s 1572(o)s 3(v)k 3(erride)k 2418(a)s 2584(user')s 13(s)k 3192(polic)s 3(y)k 15(.)k 3876(These)s 4503(options)s 5259(are)s 5606(a)s 4(v)k 6(ailable)k 6514(only)s 6994(if)s 7211(the)s 7559(client)s 8149(is)s -8359(called)s 0 5219(by)m 294(root)s 739(or)s 998(if)s +8359(called)s 0 8707(by)m 294(root)s 739(or)s 998(if)s 1215(the)s 1563(calling)s 2266(user)s 2724(is)s 2934(the)s 3282(same)s 3829(as)s 4079(the)s 4427(service)s 5159(user)s 13(.)k gsave -120 4865 translate +120 8353 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override)m gsave 1584 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(con\207gur)m 3(ation-data)k +240 fnt83 0 -52(con\207gur)m 3(ation\211data)k grestore grestore gsave -120 4625 translate +120 8113 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override\211file)m gsave 2304 0 translate @@ -1864,29 +1874,29 @@ gsave grestore grestore -480 4331(Do)m +480 7819(Do)m 826(not)s 1192(read)s 1661(the)s 2009(usual)s 2569(con\207guration)s 3902(\207les.)s 4404(Instead,)s 5201(the)s 5549(client)s 6139(sends)s -240 fnt83 6722 4333(con\207gur)m 3(ation-data)k 240 fnt82 480 4090(\(follo)m 6(wed)k +240 fnt83 6722 7821(con\207gur)m 3(ation-data)k 240 fnt82 480 7578(\(follo)m 6(wed)k 1461(by)s 1755(a)s 1921(ne)s 6(wline\))k 2800(or)s -3059(the)s 3407(contents)s 4255(of)s 240 fnt83 4526 4092(\207lename)m -240 fnt82 5390 4090(\(which)m 6111(is)s 6321(opened)s 7071(in)s +3059(the)s 3407(contents)s 4255(of)s 240 fnt83 4526 7580(\207lename)m +240 fnt82 5390 7578(\(which)m 6111(is)s 6321(opened)s 7071(in)s 7314(the)s 7662(conte)s 3(xt)k 8423(of)s 8694(the)s -480 3849(client\))m 1138(to)s 1377(the)s 1725(daemon)s 2540(and)s +480 7337(client\))m 1138(to)s 1377(the)s 1725(daemon)s 2540(and)s 2944(the)s 3292(daemon)s 4107(uses)s 4570(that)s 4988(data)s -5446(instead.)s 6227(The)s 240 fnt83 6655 3851(con\207gur)m 3(ation-data)k -240 fnt82 8503 3849(must)m 480 3609(all)m 772(be)s 1052(in)s +5446(instead.)s 6227(The)s 240 fnt83 6655 7339(con\207gur)m 3(ation-data)k +240 fnt82 8503 7337(must)m 480 7097(all)m 772(be)s 1052(in)s 1293(one)s 1693(ar)s 4(gument.)k 2694(It)s 2897(will)s 3321(ha)s 4(v)k 3(e)k 3820(a)s 3984(single)s 4609(ne)s 6(wline)k 5414(appended)s 6388(so)s 6652(that)s 7068(a)s 7232(single)s 7857(directi)s 6(v)k 3(e)k -8737(can)s 480 3369(easily)m 1083(be)s 1357(gi)s 6(v)k 3(en,)k +8737(can)s 480 6857(easily)m 1083(be)s 1357(gi)s 6(v)k 3(en,)k 1979(b)s 4(ut)k 2333(if)s 2542(more)s 3080(than)s 3541(one)s 3935(directi)s 6(v)k 3(e)k 4809(is)s 5011(required)s 5857(it)s 6040(will)s 6458(ha)s 4(v)k 3(e)k 6951(to)s 7182(contain)s 7935(one)s 8329(or)s 8579(more)s -480 3129(real)m 892(ne)s 6(wlines.)k gsave -120 2838 translate +480 6617(real)m 892(ne)s 6(wlines.)k gsave +120 6326 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211spoof\211user)m gsave @@ -1896,33 +1906,33 @@ gsave grestore grestore -480 2544(Pretend)m 1268(to)s 1507(the)s +480 6032(Pretend)m 1268(to)s 1507(the)s 1855(service)s 2587(that)s 3005(it)s 3197(is)s 3407(being)s -3992(called)s 4620(by)s 240 fnt83 4914 2546(user)m 240 fnt82 -5391 2544(\(which)m 6112(may)s 6578(be)s 6860(a)s 7026(username)s -7998(or)s 8257(a)s 8423(uid\).)s 480 2304(This)m 956(will)s +3992(called)s 4620(by)s 240 fnt83 4914 6034(user)m 240 fnt82 +5391 6032(\(which)m 6112(may)s 6578(be)s 6860(a)s 7026(username)s +7998(or)s 8257(a)s 8423(uid\).)s 480 5792(This)m 956(will)s 1382(also)s 1820(af)s 6(fect)k 2416(the)s 2764(group)s 3376(and)s 3780(supplementary)s 5242(groups)s 5945(supplied)s 6814(to)s 7053(the)s 7401(service;)s 8189(the)s 3(y)k 8652(will)s -480 2064(be)m 759(the)s 1103(standard)s 1968(group)s 2576(and)s -2977(supplementary)s 4435(groups)s 5135(for)s 240 fnt83 5469 2066(user)m -240 fnt82 5886 2064(.)m 5987(The)s gsave -6411 2118 translate +480 5552(be)m 759(the)s 1103(standard)s 1968(group)s 2576(and)s +2977(supplementary)s 4435(groups)s 5135(for)s 240 fnt83 5469 5554(user)m +240 fnt82 5886 5552(.)m 5987(The)s gsave +6411 5606 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211spoof\211user)m grestore -7669(option)s 8334(will)s 240 fnt83 8756 2066(not)m 240 fnt82 -480 1824(af)m 6(fect)k 1076(which)s 1718(user)s 2176(is)s +7669(option)s 8334(will)s 240 fnt83 8756 5554(not)m 240 fnt82 +480 5312(af)m 6(fect)k 1076(which)s 1718(user)s 2176(is)s 2386(chosen)s 3108(if)s 3325(the)s 3673(service)s 4405(user)s 4863(is)s 5073(speci\207ed)s 5981(as)s 6231(just)s gsave -6636 1878 translate +6636 5366 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211)m grestore 6736(;)s 6848(in)s 7091(this)s 7487(case)s -7954(the)s 8302(service)s 480 1584(user)m 938(will)s 1364(be)s +7954(the)s 8302(service)s 480 5072(user)m 938(will)s 1364(be)s 1646(the)s 1994(real)s 2406(calling)s 3109(user)s 13(.)k 0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s 8652(0.62)s @@ -2725,84 +2735,84 @@ grestore 6048(It)s 6253(is)s 6463(an)s 6746(error)s 7269(if)s 7486(the)s 7834(directory)s 480 11808(cannot)m 1178(be)s 1460(changed)s 2316(to.)s gsave -480 11454 translate +2666 11862 translate 0.6953 1.0000 scale 240 fnt31 0 -52(cd)m grestore -740 11400(should)m 1437(not)s -1803(be)s 2085(used)s 2582(between)s gsave -3436 11454 translate +2926(should)s 3623(not)s +3989(be)s 4271(used)s 4768(between)s gsave +5622 11862 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m grestore -5698(and)s 6102(the)s 6450(in)s 9(v)k 4(ocation)k -7504(of)s 7775(the)s 8123(service)s 480 11160(program,)m 1397(as)s -1647(the)s 1995(test)s 2386(for)s 2724(the)s 3072(a)s 4(v)k 6(ailability)k -4190(of)s 4461(the)s 4809(service)s 5541(program)s 6411(w)s 2(ould)k -7066(be)s 7348(done)s 7870(with)s 8352(the)s 8700(old)s -480 10920(current)m 1216(directory)s 2132(and)s 2536(the)s 2884(actual)s -3509(e)s 3(x)k 3(ecution)k 4490(with)s 4972(the)s -5320(ne)s 6(w)k 5767(\(probably)s 6751(causing)s 7535(an)s -7818(error\).)s gsave -120 10580 translate +7884(and)s 8288(the)s 480 11568(in)m 9(v)k 4(ocation)k +1534(of)s 1805(the)s 2153(service)s 2885(program,)s 3802(as)s +4052(the)s 4400(test)s 4791(for)s 5129(the)s 5477(a)s 4(v)k 6(ailability)k +6595(of)s 6866(the)s 7214(service)s 7946(program)s 480 11328(w)m 2(ould)k +1117(be)s 1380(done)s 1884(with)s 2347(the)s 2677(old)s +3022(current)s 3740(directory)s 4637(and)s 5023(the)s 5352(actual)s +5959(e)s 3(x)k 3(ecution)k 6921(with)s 7385(the)s +7714(ne)s 6(w)k 8142(\(probably)s 480 11088(causing)m 1264(an)s +1547(error\).)s gsave +120 10748 translate 0.6953 1.0000 scale 240 fnt31 0 -52(eof)m grestore -480 10286(Stop)m 972(reading)s +480 10454(Stop)m 972(reading)s 1742(the)s 2090(con\207guration)s 3423(\207le)s 3784(in)s 4027(question,)s 4945(as)s 5195(if)s 5412(end)s 5816(of)s 6087(\207le)s 6448(had)s 6852(been)s 7361(reached.)s 8208(An)s 3(y)k -480 10046(control)m 1212(constructs)s 2232(\()s gsave -2305 10100 translate +480 10214(control)m 1212(constructs)s 2232(\()s gsave +2305 10268 translate 0.6953 1.0000 scale 240 fnt31 0 -52(if)m grestore 2505(,)s gsave -2612 10100 translate +2612 10268 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 3673(or)s gsave -3932 10100 translate +3932 10268 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211push)m grestore 5033(\))s 5161(which)s 5803(were)s 6323(started)s 7017(in)s 7260(that)s 7678(\207le)s 8039(will)s 8465(be)s -480 9806(considered)m 1574(\207nished.)s 2436(P)s 3(arsing)k 3203(will)s +480 9974(considered)m 1574(\207nished.)s 2436(P)s 3(arsing)k 3203(will)s 3629(continue)s 4509(in)s 4752(the)s 5100(\207le)s 5461(which)s 6103(caused)s 6812(the)s 7160(\207le)s 7521(containing)s 8584(the)s gsave -480 9620 translate +480 9788 translate 0.6953 1.0000 scale 240 fnt31 0 -52(eof)m grestore -840 9566(to)m 1079(be)s 1361(read.)s +840 9734(to)m 1079(be)s 1361(read.)s gsave -120 9276 translate +120 9444 translate 0.6953 1.0000 scale 240 fnt31 0 -52(quit)m grestore -480 8982(Stop)m 969(reading)s 1735(con\207guration)s +480 9150(Stop)m 969(reading)s 1735(con\207guration)s 3064(\207les)s 3510(and)s 3910(act)s 4244(immediately)s 5489(on)s 5782(the)s 6126(current)s 6859(settings.)s 7689(The)s 8113(beha)s 4(viour)k -480 8742(of)m gsave -751 8796 translate +480 8910(of)m gsave +751 8964 translate 0.6953 1.0000 scale 240 fnt31 0 -52(quit)m grestore 1211(is)s 1421(subject)s 2158(to)s 2397(the)s gsave -2745 8796 translate +2745 8964 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 3806(control)s 4538(construct.)s gsave -120 8402 translate +120 8570 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include)m gsave 1152 0 translate @@ -2813,7 +2823,7 @@ grestore grestore gsave -120 8162 translate +120 8330 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211ifexist)m gsave 2304 0 translate @@ -2822,25 +2832,25 @@ gsave grestore grestore -480 7868(Read)m -1026(the)s 1369(con\207guration)s 2698(\207le)s 240 fnt83 3054 7870(\207lename)m -240 fnt82 3858 7868(,)m 3961(and)s 4360(then)s 4825(return)s +480 8036(Read)m +1026(the)s 1369(con\207guration)s 2698(\207le)s 240 fnt83 3054 8038(\207lename)m +240 fnt82 3858 8036(,)m 3961(and)s 4360(then)s 4825(return)s 5447(to)s 5682(this)s 6073(\207le)s 6430(and)s 6829(continue)s -7705(parsing)s 8457(it)s 8644(with)s 480 7628(the)m 822(ne)s 3(xt)k +7705(parsing)s 8457(it)s 8644(with)s 480 7796(the)m 822(ne)s 3(xt)k 1284(directi)s 6(v)k 3(e.)k 2207(It)s 2405(is)s 2608(an)s 2884(error)s 3400(if)s 3610(the)s 3952(\207le)s 4306(cannot)s 4997(be)s 5272(opened)s 6015(and)s 6412(read,)s 6923(unless)s gsave -7565 7682 translate +7565 7850 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211ifexist)m grestore -480 7388(is)m 690(used)s +480 7556(is)m 690(used)s 1187(and)s 1591(the)s 1939(\207le)s 2300(does)s 2790(not)s 3156(e)s 3(xist,)k 3711(in)s 3954(which)s 4596(case)s 5063(the)s 5411(directi)s 6(v)k 3(e)k 6293(is)s 6503(silently)s 7260(ignored.)s gsave -120 7048 translate +120 7216 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup)m gsave 2160 0 translate @@ -2857,7 +2867,7 @@ grestore grestore gsave -120 6808 translate +120 6976 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup\211all)m gsave 2736 0 translate @@ -2872,113 +2882,113 @@ gsave grestore grestore -480 6514(Read)m 1030(the)s -1378(con\207guration)s 2711(\207le)s 3072(in)s 240 fnt83 3315 6516(dir)m 8(ectory)k -240 fnt82 4239 6514(whose)m 4907(name)s 5481(is)s 5691(the)s -6039(v)s 6(alue)k 6607(of)s 240 fnt83 6878 6516(par)m 3(ameter)k -240 fnt82 7937 6514(\(see)m 8377(the)s 480 6274(description)m 1599(of)s +480 6682(Read)m 1030(the)s +1378(con\207guration)s 2711(\207le)s 3072(in)s 240 fnt83 3315 6684(dir)m 8(ectory)k +240 fnt82 4239 6682(whose)m 4907(name)s 5481(is)s 5691(the)s +6039(v)s 6(alue)k 6607(of)s 240 fnt83 6878 6684(par)m 3(ameter)k +240 fnt82 7937 6682(\(see)m 8377(the)s 480 6442(description)m 1599(of)s gsave -1870 6328 translate +1870 6496 translate 0.6953 1.0000 scale 240 fnt31 0 -52(if)m grestore 2070(,)s 2177(`Control)s 3042(structure)s 3933(directi)s 6(v)k 3(es',)k 5038(page)s 5546(12\).)s -5969(If)s 240 fnt83 6199 6276(par)m 3(ameter)k 240 fnt82 -7258 6274(has)m 7628(se)s 6(v)k 3(eral)k 8350(v)s 6(alues)k -480 6034(the)m 3(y)k 943(will)s 1369(be)s 1651(tried)s +5969(If)s 240 fnt83 6199 6444(par)m 3(ameter)k 240 fnt82 +7258 6442(has)m 7628(se)s 6(v)k 3(eral)k 8350(v)s 6(alues)k +480 6202(the)m 3(y)k 943(will)s 1369(be)s 1651(tried)s 2146(in)s 2389(order;)s 3005(with)s gsave -3487 6088 translate +3487 6256 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup)m grestore 4948(this)s 5344(search)s 6011(will)s 6437(stop)s 6889(when)s 7465(one)s 7867(is)s 8077(found,)s 8743(b)s 4(ut)k -480 5794(with)m gsave -962 5848 translate +480 5962(with)m gsave +962 6016 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup\211all)m grestore 2824(the)s 3172(search)s 3839(will)s 4265(continue)s 5145(and)s 5549(an)s 3(y)k 5946(\207les)s 6395(appropriate)s 7539(to)s 7778(other)s 8329(v)s 6(alues)k -480 5554(will)m 906(be)s 1188(read)s 1657(too.)s 480 5146(If)m -700(none)s 1212(of)s 1473(the)s 1811(parameter')s 13(s)k -2965(v)s 6(alues)k 3610(had)s 4004(a)s 4160(corresponding)s -5572(\207le)s 5923(then)s 6381(the)s 6719(\207le)s gsave -7070 5200 translate +480 5722(will)m 906(be)s 1188(read)s 1657(too.)s 2127(If)s +2357(none)s 2879(of)s 3150(the)s 3498(parameter')s 13(s)k +4662(v)s 6(alues)k 5318(had)s 5722(a)s 5888(corresponding)s +7310(\207le)s 7671(then)s 8140(the)s 8488(\207le)s gsave +480 5536 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:default)m grestore -7921(will)s 8337(be)s 8608(read,)s 480 4906(if)m -697(it)s 889(e)s 3(xists.)k 1534(If)s 240 fnt83 -1764 4908(par)m 3(ameter)k 240 fnt82 2763 4906(')m 13(s)k -2973(list)s 3324(of)s 3595(v)s 6(alues)k 4251(w)s 2(as)k -4672(empty)s 5324(then)s 5793(the)s 6141(\207le)s gsave -6502 4960 translate +1340 5482(will)m 1765(be)s 2045(read,)s 2562(if)s +2778(it)s 2968(e)s 3(xists.)k 3612(If)s 240 fnt83 +3841 5484(par)m 3(ameter)k 240 fnt82 4840 5482(')m 13(s)k +5048(list)s 5398(of)s 5668(v)s 6(alues)k 6322(w)s 2(as)k +6742(empty)s 7393(then)s 7860(the)s 8207(\207le)s gsave +8566 5536 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:none)m grestore -7062(will)s 7488(be)s 7770(tried)s 8265(\207rst)s -8696(and)s 480 4666(read)m 949(if)s 1166(it)s 1358(e)s 3(xists,)k -2006(otherwise)s gsave -2991 4720 translate +480 5242(will)m 906(be)s 1188(tried)s 1683(\207rst)s +2114(and)s 2518(read)s 2987(if)s 3204(it)s 3396(e)s 3(xists,)k +4044(otherwise)s gsave +5029 5296 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:default)m grestore -3852(will)s 4278(be)s -4560(tried.)s 480 4258(It)m 685(is)s 895(not)s 1261(an)s -1544(error)s 2067(for)s 2405(an)s 3(y)k 2802(of)s -3073(the)s 3421(\207les)s 3870(\(including)s gsave -4906 4312 translate +5890(will)s 6316(be)s +6598(tried.)s 7199(It)s 7404(is)s 7614(not)s 7980(an)s +8263(error)s 8786(for)s 480 5002(an)m 3(y)k 877(of)s +1148(the)s 1496(\207les)s 1945(\(including)s gsave +2981 5056 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:default)m grestore -5707(\))s 5835(not)s 6201(to)s 6440(e)s 3(xist,)k -6995(b)s 4(ut)k 7357(it)s 7549(is)s 7759(an)s -8042(error)s 8565(if)s 8782(a)s 480 4018(\207le)m 841(e)s 3(xists)k -1433(and)s 1837(cannot)s 2535(be)s 2817(read)s 3286(or)s -3545(if)s 3762(the)s 4110(directory)s 5026(cannot)s 5724(be)s -6006(accessed.)s 480 3610(A)m 693(translation)s 1741(will)s 2150(be)s -2415(applied)s 3160(to)s 3382(v)s 6(alues)k 4021(before)s -4670(the)s 3(y)k 5116(are)s 5446(used)s 5926(to)s -6148(construct)s 7067(a)s 7216(\207lename,)s 8129(so)s 8378(that)s -8778(the)s 480 3370(lookup)m 1195(cannot)s 1888(access)s 2545(dot\207les)s -3295(or)s 3550(\207les)s 3994(in)s 4232(other)s 4779(directories:)s -5887(v)s 6(alues)k 6539(starting)s 7303(with)s 7781(full)s -8162(stops)s 8700(will)s 480 3130(ha)m 4(v)k 3(e)k -970(a)s 1124(colon)s 1702(prepended)s 2745(\(making)s gsave -3584 3184 translate +3782(\))s 3910(not)s 4276(to)s 4515(e)s 3(xist,)k +5070(b)s 4(ut)k 5432(it)s 5624(is)s 5834(an)s +6117(error)s 6640(if)s 6857(a)s 7023(\207le)s 7384(e)s 3(xists)k +7976(and)s 8380(cannot)s 480 4762(be)m 753(read)s 1213(or)s +1462(if)s 1670(the)s 2008(directory)s 2915(cannot)s 3603(be)s +3876(accessed.)s 4867(A)s 5087(translation)s 6143(will)s 6559(be)s +6832(applied)s 7584(to)s 7814(v)s 6(alues)k 8460(before)s +480 4522(the)m 3(y)k 943(are)s 1290(used)s 1787(to)s +2026(construct)s 2962(a)s 3128(\207lename,)s 4058(so)s 4324(that)s +4742(the)s 5090(lookup)s 5809(cannot)s 6507(access)s 7168(dot\207les)s +7923(or)s 8182(\207les)s 8631(in)s 480 4282(other)m 1031(directories:)s +2144(v)s 6(alues)k 2800(starting)s 3569(with)s 4051(full)s +4437(stops)s 4980(will)s 5406(ha)s 4(v)k 3(e)k +5907(a)s 6073(colon)s 6662(prepended)s 7717(\(making)s gsave +8567 4336 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:.)m grestore -3784(\),)s 3958(colons)s 4623(will)s 5037(be)s -5308(doubled,)s 6175(and)s 6568(each)s 7051(slash)s 7575(will)s -7989(be)s 8259(replaced)s 480 2890(with)m 962(a)s 1128(colon)s -1717(follo)s 6(wed)k 2619(by)s 2913(a)s 3079(h)s 1(yphen)k +8767(\),)s 480 4042(colons)m 1156(will)s 1582(be)s +1864(doubled,)s 2743(and)s 3147(each)s 3642(slash)s 4177(will)s +4603(be)s 4885(replaced)s 5752(with)s 6234(a)s 6400(colon)s +6989(follo)s 6(wed)k 7891(by)s 8185(a)s 8351(h)s 1(yphen)k gsave -3841 2944 translate +480 3856 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:\211)m grestore -4041(.)s 4145(A)s 4375(parameter)s -5389(v)s 6(alue)k 5957(which)s 6599(is)s 6809(the)s -7157(empty)s 7809(string)s 8406(will)s 8832(be)s 480 2650(replaced)m -1347(with)s gsave -1829 2704 translate +680 3802(.)m 784(A)s 1014(parameter)s +2028(v)s 6(alue)k 2596(which)s 3238(is)s 3448(the)s +3796(empty)s 4448(string)s 5045(will)s 5471(be)s 5753(replaced)s +6620(with)s gsave +7102 3856 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:empty)m grestore -2489(\(note)s 3036(that)s -3454(this)s 3850(is)s 4060(dif)s 6(ferent)k 4935(from)s -5459(a)s 5625(parameter)s 6639(not)s 7005(ha)s 4(ving)k -7706(an)s 3(y)k 8103(v)s 6(alues\).)k gsave -120 2310 translate +7762(\(note)s 8309(that)s +8727(this)s 480 3562(is)m 690(dif)s 6(ferent)k 1565(from)s +2089(a)s 2255(parameter)s 3269(not)s 3635(ha)s 4(ving)k +4336(an)s 3(y)k 4733(v)s 6(alues\).)k gsave +120 3222 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211directory)m gsave @@ -2988,26 +2998,26 @@ grestore grestore grestore -480 2016(Read)m +480 2928(Read)m 1030(con\207guration)s 2363(from)s 2887(all)s 3180(\207les)s 3629(in)s -3872(directory)s 240 fnt83 4788 2018(dir)m 8(ectory)k 240 fnt82 -5712 2016(which)m 6354(are)s 6701(plain)s 7236(\207les)s 7685(whose)s -8353(names)s 480 1776(consist)m 1204(only)s 1684(of)s 1955(alphanumerics)s +3872(directory)s 240 fnt83 4788 2930(dir)m 8(ectory)k 240 fnt82 +5712 2928(which)m 6354(are)s 6701(plain)s 7236(\207les)s 7685(whose)s +8353(names)s 480 2688(consist)m 1204(only)s 1684(of)s 1955(alphanumerics)s 3400(and)s 3804(h)s 1(yphens)k 4653(and)s 5057(start)s 5527(with)s 6009(an)s 6292(alphanumeric.)s 7697(The)s 3(y)k -8240(will)s 8666(be)s 480 1536(read)m 949(in)s 1192(le)s 3(xical)k +8240(will)s 8666(be)s 480 2448(read)m 949(in)s 1192(le)s 3(xical)k 1880(order)s 13(.)k 2475(It)s 2680(is)s 2890(an)s 3173(error)s 3696(for)s 4034(the)s 4382(directory)s 5298(not)s 5664(to)s 5903(e)s 3(xist)k 6411(or)s 6670(for)s 7008(it)s 7200(or)s 7459(an)s 3(y)k 7856(of)s -8127(the)s 8475(\207les)s 480 1296(found)m 1089(not)s 1447(to)s +8127(the)s 8475(\207les)s 480 2208(found)m 1089(not)s 1447(to)s 1677(be)s 1951(read)s 2411(successfully)s 15(,)k 3663(or)s 3914(for)s 4243(an)s 3(ything)k 5123(with)s 5596(an)s 5871(appropriate)s 7007(name)s 7572(not)s 7930(to)s 8160(be)s -8434(a)s 8591(plain)s 480 1056(\207le)m 841(or)s 1100(a)s +8434(a)s 8591(plain)s 480 1968(\207le)m 841(or)s 1100(a)s 1266(symbolic)s 2196(link)s 2629(to)s 2868(a)s 3034(plain)s 3569(\207le.)s gsave -120 716 translate +120 1628 translate 0.6953 1.0000 scale 240 fnt31 0 -52(error)m gsave 864 0 translate @@ -3017,8 +3027,19 @@ grestore grestore grestore -0 52(User)m 511(service)s 1243(daemon)s 2058(and)s -2462(client)s 3052(speci\207cation)s 8652(0.62)s +480 1334(Causes)m 1209(an)s 1492(error)s 2015(whose)s +2683(message)s 3549(includes)s 4397(the)s 4745(descripti)s 6(v)k 3(e)k +5840(string)s 240 fnt83 6437 1336(te)m 4(xt)k 240 fnt82 +6781 1334(.)m 240 fnt83 6885 1336(te)m 4(xt)k 240 fnt82 +7289 1334(may)m 7755(consist)s 8479(of)s 480 1094(se)m 6(v)k 3(eral)k +1192(tok)s 2(ens)k 1855(with)s 2326(interv)s 3(ening)k +3454(whitespace.)s 4609(The)s 5026(whitespace)s 6134(will)s 6549(be)s +6820(included)s 7691(in)s 7923(the)s 8260(message)s 480 854(as)m +726(found)s 1338(in)s 1576(the)s 1919(con\207guration)s 3247(\207le:)s +3653(all)s 3941(the)s 4284(characters)s 5298(until)s 5786(the)s +6129(end)s 6528(of)s 6794(the)s 7137(line)s 7546(will)s +7967(be)s 8244(included)s 0 52(User)m 511(service)s 1243(daemon)s +2058(and)s 2462(client)s 3052(speci\207cation)s 8652(0.62)s grestore grestore @@ -3030,8 +3051,8 @@ showpage %%BeginPageSetup %%PageResources: font Times-Roman %%+ font Times-Bold -%%+ font Times-Italic %%+ font Courier-Bold +%%+ font Times-Italic /pgsave save def 0.0500 dup scale 10 setlinewidth %%EndPageSetup @@ -3057,55 +3078,44 @@ gsave gsave 0 LoutMargSet grestore -240 fnt84 0 13842(12)m 240 fnt82 480 13254(Causes)m 1209(an)s -1492(error)s 2015(whose)s 2683(message)s 3549(includes)s 4397(the)s -4745(descripti)s 6(v)k 3(e)k 5840(string)s 240 fnt83 -6437 13256(te)m 4(xt)k 240 fnt82 6781 13254(.)m 240 fnt83 -6885 13256(te)m 4(xt)k 240 fnt82 7289 13254(may)m 7755(consist)s -8479(of)s 480 13014(se)m 6(v)k 3(eral)k 1192(tok)s 2(ens)k -1855(with)s 2326(interv)s 3(ening)k 3454(whitespace.)s 4609(The)s -5026(whitespace)s 6134(will)s 6549(be)s 6820(included)s 7691(in)s -7923(the)s 8260(message)s 480 12774(as)m 726(found)s 1338(in)s -1576(the)s 1919(con\207guration)s 3247(\207le:)s 3653(all)s 3941(the)s -4284(characters)s 5298(until)s 5786(the)s 6129(end)s 6528(of)s -6794(the)s 7137(line)s 7546(will)s 7967(be)s 8244(included)s -480 12534(v)m 3(erbatim,)k 1433(unless)s 2082(the)s 3(y)k -2545(are)s 2892(part)s 3323(of)s 3594(a)s 3760(double-quoted)s -5201(string,)s 5852(in)s 6095(which)s 6737(case)s 7204(the)s -7552(usual)s 8112(meaning)s 480 12294(of)m 751(the)s 1099(string)s -1696(\(i.e.,)s 2174(after)s 2670(backslash)s 3657(escape)s 4350(processing\))s -5501(will)s 5927(be)s 6209(used.)s 6752(Comments)s 7840(and)s -8244(linear)s 480 12054(whitespace)m 1598(at)s 1830(the)s 2178(end)s -2582(of)s 2853(the)s 3201(line)s 3615(\(or)s 3953(just)s -4358(before)s 5024(the)s 5372(comment\))s 6390(will)s 6816(still)s -7228(be)s 7510(ignored.)s gsave -120 11714 translate +240 fnt84 0 13842(12)m 240 fnt82 480 13254(v)m 3(erbatim,)k +1433(unless)s 2082(the)s 3(y)k 2545(are)s 2892(part)s +3323(of)s 3594(a)s 3760(double-quoted)s 5201(string,)s 5852(in)s +6095(which)s 6737(case)s 7204(the)s 7552(usual)s 8112(meaning)s +480 13014(of)m 751(the)s 1099(string)s 1696(\(i.e.,)s 2174(after)s +2670(backslash)s 3657(escape)s 4350(processing\))s 5501(will)s 5927(be)s +6209(used.)s 6752(Comments)s 7840(and)s 8244(linear)s 480 12774(whitespace)m +1598(at)s 1830(the)s 2178(end)s 2582(of)s 2853(the)s +3201(line)s 3615(\(or)s 3953(just)s 4358(before)s 5024(the)s +5372(comment\))s 6390(will)s 6816(still)s 7228(be)s 7510(ignored.)s +gsave +120 12434 translate 0.6953 1.0000 scale 240 fnt31 0 -52(message)m gsave 1152 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(te)m 4(xt)k 404(\202)s +240 fnt83 0 -52(te)m 4(xt)k +404(\202)s grestore grestore -480 11420(Causes)m 1209(a)s -1375(message)s 2241(including)s 3198(the)s 3546(descripti)s 6(v)k 3(e)k -4641(string)s 240 fnt83 5238 11422(te)m 4(xt)k 240 fnt82 -5642 11420(to)m 5881(be)s 6163(deli)s 6(v)k 3(ered)k -7101(as)s 7351(if)s 7568(it)s 7760(were)s 8280(an)s -8563(error)s 480 11180(message,)m 1397(b)s 4(ut)k 1759(does)s -2249(not)s 2615(actually)s 3425(cause)s 4012(an)s 4295(error)s 13(.)k -300 fnt84 0 10513(4.2.2.)m 813(Dir)s 5(ecti)k 3(v)k 3(es)k +480 12140(Causes)m 1209(a)s 1375(message)s 2241(including)s +3198(the)s 3546(descripti)s 6(v)k 3(e)k 4641(string)s +240 fnt83 5238 12142(te)m 4(xt)k 240 fnt82 5642 12140(to)m +5881(be)s 6163(deli)s 6(v)k 3(ered)k 7101(as)s +7351(if)s 7568(it)s 7760(were)s 8280(an)s 8563(error)s +480 11900(message,)m 1397(b)s 4(ut)k 1759(does)s 2249(not)s +2615(actually)s 3425(cause)s 4012(an)s 4295(error)s 13(.)k +300 fnt84 0 11233(4.2.2.)m 813(Dir)s 5(ecti)k 3(v)k 3(es)k 2148(with)s 2781(delay)s 3(ed)k 3828(effect)s 240 fnt82 -0 9942(The)m 428(follo)s 6(wing)k 1405(directi)s 6(v)k 3(es)k +0 10662(The)m 428(follo)s 6(wing)k 1405(directi)s 6(v)k 3(es)k 2375(ha)s 4(v)k 3(e)k 2876(no)s 3169(immediate)s 4233(ef)s 6(fect,)k 4876(b)s 4(ut)k 5238(are)s 5585(remembered)s 6837(and)s 7241(ha)s 4(v)k 3(e)k -7742(an)s 8025(ef)s 6(fect)k 8621(on)s 0 9702(later)m +7742(an)s 8025(ef)s 6(fect)k 8621(on)s 0 10422(later)m 483(processing)s 1559(of)s 1830(the)s 2178(con\207guration)s 3511(\207les.)s gsave -120 9348 translate +120 10068 translate 0.6953 1.0000 scale 240 fnt31 0 -52(user\211rcfile)m gsave 1728 0 translate @@ -3114,99 +3124,99 @@ gsave grestore grestore -480 9054(Speci\207es)m -1380(that)s 1784(the)s 2118(\207le)s 240 fnt83 2465 9056(\207lename)m -240 fnt82 3315 9054(should)m 3998(be)s 4266(read)s 4721(instead)s +480 9774(Speci\207es)m +1380(that)s 1784(the)s 2118(\207le)s 240 fnt83 2465 9776(\207lename)m +240 fnt82 3315 9774(should)m 3998(be)s 4266(read)s 4721(instead)s 5442(of)s 5699(the)s 6033(user')s 13(s)k gsave -6627 9108 translate +6627 9828 translate 0.6953 1.0000 scale 240 fnt31 0 -52(~/.userv/rc)m grestore 7728(.)s 7818(This)s 8280(does)s 240 fnt83 -8756 9056(not)m 240 fnt82 480 8814(happen)m 1229(immediately;)s 2535(instead,)s +8756 9776(not)m 240 fnt82 480 9534(happen)m 1229(immediately;)s 2535(instead,)s 3319(the)s 3667(setting)s 4357(is)s 4567(remembered)s 5819(and)s 6223(used)s 6720(after)s 7216(the)s gsave -7564 8868 translate +7564 9588 translate 0.6953 1.0000 scale 240 fnt31 0 -52(system.default)m grestore -480 8574(con\207guration)m 1812(\207le)s 2171(has)s 2539(been)s 3046(read.)s +480 9294(con\207guration)m 1812(\207le)s 2171(has)s 2539(been)s 3046(read.)s 3559(This)s 4033(directi)s 6(v)k 3(e)k 4913(has)s 5281(no)s 5572(ef)s 6(fect)k 6166(in)s 6407(a)s 6571(user')s 13(s)k 7177(con\207guration)s 8508(\207le)s 8867(or)s -480 8334(in)m 723(the)s gsave -1071 8388 translate +480 9054(in)m 723(the)s gsave +1071 9108 translate 0.6953 1.0000 scale 240 fnt31 0 -52(system.override)m grestore 2632(\207le,)s 3044(as)s 3294(the)s 3642(user')s 13(s)k 4250(con\207guration)s 5583(\207le)s 5944(has)s 6314(already)s 7071(been)s 7580(found)s -8197(and)s 8601(read)s 480 8094(by)m 774(then)s 1243(and)s +8197(and)s 8601(read)s 480 8814(by)m 774(then)s 1243(and)s 1647(will)s 2073(not)s 2439(be)s 2721(re-read.)s gsave -120 7754 translate +120 8474 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211to\211stderr)m grestore -480 7460(Causes)m 1209(error)s 1732(messages)s 2686(to)s +480 8180(Causes)m 1209(error)s 1732(messages)s 2686(to)s 2925(be)s 3207(deli)s 6(v)k 3(ered)k 4145(to)s 4384(the)s 4732(client')s 13(s)k 5472(stderr)s 13(.)k gsave -120 7120 translate +120 7840 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211to\211file)m grestore -240 fnt83 1581 7068(\207lename)m 240 fnt82 -480 6826(Error)m 1039(messages)s 1989(will)s 2410(be)s 2688(written)s -3416(to)s 240 fnt83 3651 6828(\207lename)m 240 fnt82 4455 6826(,)m +240 fnt83 1581 7788(\207lename)m 240 fnt82 +480 7546(Error)m 1039(messages)s 1989(will)s 2410(be)s 2688(written)s +3416(to)s 240 fnt83 3651 7548(\207lename)m 240 fnt82 4455 7546(,)m 4557(which)s 5195(will)s 5617(be)s 5894(opened)s 6640(in)s 6878(the)s 7222(conte)s 3(xt)k 7978(of)s 8245(and)s -8644(with)s 480 6586(the)m 828(pri)s 6(vile)k 3(ges)k +8644(with)s 480 7306(the)m 828(pri)s 6(vile)k 3(ges)k 1812(of)s 2083(the)s 2431(service)s 3163(user)s 13(.)k gsave -120 6246 translate +120 6966 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211to\211syslog)m grestore -1782 6192([)m 240 fnt83 1853 6194(facility)m -240 fnt82 2571 6192([)m 240 fnt83 2642 6194(le)m 3(vel)k -240 fnt82 3089 6192(]])m 480 5952(Error)m 1043(messages)s 1997(will)s +1782 6912([)m 240 fnt83 1853 6914(facility)m +240 fnt82 2571 6912([)m 240 fnt83 2642 6914(le)m 3(vel)k +240 fnt82 3089 6912(]])m 480 6672(Error)m 1043(messages)s 1997(will)s 2423(be)s 2705(deli)s 6(v)k 3(ered)k 3643(using)s gsave -4215 6006 translate +4215 6726 translate 0.6953 1.0000 scale 240 fnt31 0 -52(syslog)m grestore 4815(.)s 4919(The)s 5347(def)s 2(ault)k -240 fnt83 6068 5954(facility)m 240 fnt82 6786 5952(is)m gsave -6996 6006 translate +240 fnt83 6068 6674(facility)m 240 fnt82 6786 6672(is)m gsave +6996 6726 translate 0.6953 1.0000 scale 240 fnt31 0 -52(user)m grestore 7396(;)s 7508(the)s 7856(def)s 2(ault)k -240 fnt83 8577 5954(le)m 3(vel)k 240 fnt82 480 5712(is)m +240 fnt83 8577 6674(le)m 3(vel)k 240 fnt82 480 6432(is)m gsave -690 5766 translate +690 6486 translate 0.6953 1.0000 scale 240 fnt31 0 -52(error)m grestore -1190(.)s 300 fnt84 0 5095(4.2.3.)m +1190(.)s 300 fnt84 0 5815(4.2.3.)m 813(Contr)s 5(ol)k 1874(structur)s 5(e)k 3117(dir)s 5(ecti)k 3(v)k 3(es)k -240 fnt82 0 4580(The)m 421(follo)s 6(wing)k 1390(directi)s 6(v)k 3(es)k +240 fnt82 0 5300(The)m 421(follo)s 6(wing)k 1390(directi)s 6(v)k 3(es)k 2353(are)s 2692(used)s 3182(to)s 3413(create)s 4031(control)s 4755(structures.)s 5780(If)s 6002(the)s 6343(end)s 6739(of)s -7003(the)s 7343(\207le)s 7697(is)s 7899(encountered)s 0 4340(before)m +7003(the)s 7343(\207le)s 7697(is)s 7899(encountered)s 0 5060(before)m 666(the)s 1014(end)s 1418(of)s 1689(an)s 3(y)k 2086(control)s 2818(structure)s 3709(which)s 4351(w)s 2(as)k 4772(started)s 5466(inside)s 6093(it)s 6285(then)s 6754(that)s -7172(control)s 7904(structure)s 8795(is)s 0 4100(considered)m 1094(\207nished.)s +7172(control)s 7904(structure)s 8795(is)s 0 4820(considered)m 1094(\207nished.)s 1956(This)s 2432(is)s 2642(not)s 3008(an)s 3291(error)s 13(.)k gsave -120 3746 translate +120 4466 translate 0.6953 1.0000 scale 240 fnt31 0 -52(if)m gsave 432 0 translate @@ -3216,7 +3226,7 @@ grestore grestore gsave -120 3506 translate +120 4226 translate 0.6953 1.0000 scale 240 fnt31 0 -52(elif)m gsave @@ -3227,38 +3237,38 @@ grestore grestore gsave -120 3266 translate +120 3986 translate 0.6953 1.0000 scale 240 fnt31 0 -52(else)m grestore gsave -120 3026 translate +120 3746 translate 0.6953 1.0000 scale 240 fnt31 0 -52(fi)m grestore -480 2732(Lines)m 1062(follo)s 6(wing)k +480 3452(Lines)m 1062(follo)s 6(wing)k gsave -2039 2786 translate +2039 3506 translate 0.6953 1.0000 scale 240 fnt31 0 -52(if)m grestore 2299(are)s 2646(interpreted)s 3738(only)s 4218(if)s 4435(the)s 4783(condition)s 5744(is)s 5954(true.)s -6429(Man)s 3(y)k 7039(conditions)s 8087(are)s 480 2492(properties)m +6429(Man)s 3(y)k 7039(conditions)s 8087(are)s 480 3212(properties)m 1486(of)s 1757(parameter)s 2771(v)s 6(alues.)k 3480(Most)s 4032(parameters)s 5130(ha)s 4(v)k 3(e)k 5631(a)s 5797(single)s 6424(string)s 7021(as)s 7271(a)s 7437(v)s 6(alue;)k 8061(ho)s 6(we)k 6(v)k 3(er)k 9(,)k -480 2252(some)m 1035(may)s 1495(yield)s 2025(zero)s 2483(or)s +480 2972(some)m 1035(may)s 1495(yield)s 2025(zero)s 2483(or)s 2735(se)s 6(v)k 3(eral)k 3451(strings,)s 4189(in)s 4426(which)s 5062(case)s 5522(the)s 5864(condition)s 6819(is)s 7023(true)s 7444(if)s 7654(it)s 7840(is)s 8044(true)s -8465(of)s 8729(an)s 3(y)k 480 2012(of)m 751(the)s +8465(of)s 8729(an)s 3(y)k 480 2732(of)m 751(the)s 1099(strings)s 1787(indi)s 6(vidually)k 15(.)k 3026(P)s 3(arameters)k 4134(are)s 4481(described)s 5455(belo)s 6(w)k 15(.)k -480 1604(The)m 908(conditions)s 1956(are:)s gsave -600 1418 translate +6183(The)s 6611(conditions)s 7659(are:)s gsave +600 2545 translate 0.6953 1.0000 scale 240 fnt31 0 -52(glob)m gsave @@ -3269,65 +3279,25 @@ grestore gsave 2284 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(glob-pattern)m +240 fnt83 0 -52(glob\211pattern)m grestore -4120(\202)s +4178(\202)s grestore -960 1124(The)m 1388(v)s 6(alue)k 1956(of)s +960 2251(The)m 1388(v)s 6(alue)k 1956(of)s 2227(the)s 2575(parameter)s 3589(whose)s 4257(name)s 4831(is)s 5041(gi)s 6(v)k 3(en)k 5621(matches)s 6455(one)s -6857(of)s 7128(the)s 7476(glob)s 7955(patterns)s 960 884(\(anchored)m +6857(of)s 7128(the)s 7476(glob)s 7955(patterns)s 960 2011(\(anchored)m 1974(at)s 2206(both)s 2689(ends;)s 3240(backslashes)s 4420(can)s 4809(be)s 5091(used)s 5588(to)s 5827(escape)s 6520(metacharacters\).)s -0 52(0.62)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s -7271(client)s 7861(speci\207cation)s -grestore - -grestore - -pgsave restore -showpage - -%%Page: 13 13 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -%%+ font Times-Italic -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet -grestore -gsave -0 16840 translate -0.0000 rotate - -grestore - -grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -1 LoutMargSet -grestore -240 fnt84 8833 13842(13)m gsave -600 13310 translate +600 1825 translate 0.6953 1.0000 scale 240 fnt31 0 -52(range)m gsave 864 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(par)m 3(ameter)k +240 fnt83 0 -52(par)m 3(ameter)k + grestore gsave 2428 0 translate @@ -3337,19 +3307,18 @@ grestore gsave 3073 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(max)m +240 fnt83 0 -52(max)m grestore grestore -240 fnt82 960 13016(The)m 1380(v)s 6(alue)k -1940(of)s 2203(the)s 2543(parameter)s 3548(is)s 3750(a)s -3908(nonne)s 3(g)k 1(ati)k 6(v)k 3(e)k +960 1531(The)m +1380(v)s 6(alue)k 1940(of)s 2203(the)s 2543(parameter)s +3548(is)s 3750(a)s 3908(nonne)s 3(g)k 1(ati)k 6(v)k 3(e)k 5113(inte)s 3(ger)k 5825(and)s 6220(lies)s 6594(within)s -7254(the)s 7594(range)s 8172(speci\207ed.)s 240 fnt83 960 12778(min)m -240 fnt82 1373 12776(or)m 240 fnt83 1632 12778(max)m 240 fnt82 -2091 12776(may)m 2557(be)s gsave -2839 12830 translate +7254(the)s 7594(range)s 8172(speci\207ed.)s 240 fnt83 960 1293(min)m +240 fnt82 1373 1291(or)m 240 fnt83 1632 1293(max)m 240 fnt82 +2091 1291(may)m 2557(be)s gsave +2839 1345 translate 0.6953 1.0000 scale 240 fnt31 0 -52($)m grestore @@ -3357,7 +3326,7 @@ grestore 3238(indicate)s 4050(no)s 4343(lo)s 6(wer)k 4941(or)s 5200(upper)s 5805(limit,)s 6362(respecti)s 6(v)k 3(ely)k 15(.)k gsave -600 12589 translate +600 1104 translate 0.6953 1.0000 scale 240 fnt31 0 -52(grep)m gsave 720 0 translate @@ -3372,44 +3341,84 @@ gsave grestore grestore -960 12295(The)m 240 fnt83 1388 12297(\207lename)m -240 fnt82 2252 12295(refers)m 2845(to)s 3084(a)s 3250(\207le)s +960 810(The)m 240 fnt83 1388 812(\207lename)m +240 fnt82 2252 810(refers)m 2845(to)s 3084(a)s 3250(\207le)s 3611(one)s 4013(of)s 4284(whose)s 4952(lines)s 5454(is)s 5664(the)s 6012(v)s 6(alue)k 6580(of)s 6851(the)s -7199(parameter)s 8213(\(leading)s 960 12055(or)m 1211(trailing)s 1944(whitespace)s -3053(on)s 3341(each)s 3827(line)s 4232(and)s 4627(empty)s -5270(lines)s 5764(in)s 5998(the)s 6337(\207le)s 6689(are)s -7027(ignored\).)s 7932(It)s 8128(is)s 8329(an)s 8603(error)s -960 11815(for)m 1298(the)s 1646(\207le)s 2007(not)s 2373(to)s -2612(be)s 2894(opened)s 3644(and)s 4048(read.)s gsave -600 11628 translate +7199(parameter)s 8213(\(leading)s 0 52(0.62)m 4809(User)s 5320(service)s +6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +grestore + +grestore + +pgsave restore +showpage + +%%Page: 13 13 +%%BeginPageSetup +%%PageResources: font Times-Roman +%%+ font Times-Bold +%%+ font Courier-Bold +%%+ font Times-Italic +/pgsave save def +0.0500 dup scale 10 setlinewidth +%%EndPageSetup +gsave +0 0 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic +gsave +LoutPageSet +grestore +gsave +0 16840 translate +0.0000 rotate + +grestore + +grestore +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +1 LoutMargSet +grestore +240 fnt84 8833 13842(13)m 240 fnt82 960 13251(or)m 1211(trailing)s +1944(whitespace)s 3053(on)s 3341(each)s 3827(line)s 4232(and)s +4627(empty)s 5270(lines)s 5764(in)s 5998(the)s 6337(\207le)s +6689(are)s 7027(ignored\).)s 7932(It)s 8128(is)s 8329(an)s +8603(error)s 960 13011(for)m 1298(the)s 1646(\207le)s 2007(not)s +2373(to)s 2612(be)s 2894(opened)s 3644(and)s 4048(read.)s +gsave +600 12824 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(!)m gsave +240 fnt31 0 -52(!)m gsave 288 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(condition)m grestore grestore -960 11334(The)m 240 fnt83 -1388 11336(condition)m 240 fnt82 2346 11334(is)m 240 fnt83 2556 11336(not)m -240 fnt82 2926 11334(true.)m 600 11094(Conjunctions:)m gsave -1983 11148 translate +960 12530(The)m +240 fnt83 1388 12532(condition)m 240 fnt82 2346 12530(is)m 240 fnt83 +2556 12532(not)m 240 fnt82 2926 12530(true.)m 600 12290(Conjunctions:)m gsave +1983 12344 translate 0.6953 1.0000 scale -240 fnt31 0 -52(&)m - +240 fnt31 +0 -52(&)m grestore 2143(and)s gsave -2547 11148 translate +2547 12344 translate 0.6953 1.0000 scale 240 fnt31 0 -52(|)m grestore gsave -1440 10901 translate +1440 11864 translate 0.6953 1.0000 scale -240 fnt31 0 -52(\()m -gsave +240 fnt31 +0 -52(\()m gsave 288 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(condition)m @@ -3417,113 +3426,113 @@ grestore 0 -292(&)m gsave 288 -240 translate 1.4219 1.0000 scale -240 fnt83 0 -52(condition)m - +240 fnt83 +0 -52(condition)m grestore 0 -532(&)m gsave 288 -480 translate 1.4219 1.0000 scale 240 fnt83 0 -52(condition)m grestore -0 -772(\202)m 0 -1012(\))m - +0 -772(\202)m +0 -1012(\))m grestore -960 9635(is)m 1170(true)s 1597(if)s 1814(all)s 2107(the)s -2455(listed)s 3030(conditions)s 4078(are)s 4425(true;)s 4908(where)s -gsave -5548 9689 translate +960 10598(is)m 1170(true)s 1597(if)s 1814(all)s +2107(the)s 2455(listed)s 3030(conditions)s 4078(are)s 4425(true;)s +4908(where)s gsave +5548 10652 translate 0.6953 1.0000 scale 240 fnt31 0 -52(|)m grestore -5708(is)s 5918(used)s 6415(it)s -6607(is)s 6817(true)s 7244(if)s 7461(an)s 3(y)k -7858(of)s 8129(them)s 8667(is)s 960 9390(true.)m 1428(Ne)s 6(wlines)k +5708(is)s 5918(used)s +6415(it)s 6607(is)s 6817(true)s 7244(if)s 7461(an)s 3(y)k +7858(of)s 8129(them)s 8667(is)s 960 10353(true.)m 1428(Ne)s 6(wlines)k 2368(must)s 2885(be)s 3159(used)s 3648(to)s 3879(separate)s 4709(one)s 5104(condition)s 6057(from)s 6573(the)s 6913(ne)s 3(xt,)k 7421(as)s 7663(sho)s 6(wn,)k 8382(and)s 8778(the)s -960 9150(parentheses)m 2126(are)s 2473(mandatory)s 15(.)k 3585(These)s +960 10113(parentheses)m 2126(are)s 2473(mandatory)s 15(.)k 3585(These)s 4212(conjunctions)s 5486(do)s 5779(not)s 6145(do)s 6438(lazy)s -6890(e)s 6(v)k 6(aluation.)k 480 8588(The)m 908(parameters)s +6890(e)s 6(v)k 6(aluation.)k 480 9850(The)m 908(parameters)s 2006(are:)s gsave -600 8402 translate +600 9664 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service)m grestore -960 8108(The)m 1388(service)s +960 9370(The)m 1388(service)s 2120(name)s 2694(speci\207ed)s 3602(when)s 4178(the)s 4526(client)s 5116(w)s 2(as)k 5537(called.)s gsave -600 7922 translate +600 9184 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211user)m grestore -960 7628(T)m 19(w)k 2(o)k 1431(strings:)s 2174(the)s +960 8890(T)m 19(w)k 2(o)k 1431(strings:)s 2174(the)s 2522(login)s 3071(name)s 3645(of)s 3916(the)s 4264(calling)s 4967(user)s 5425(\(determined)s 6637(as)s 6887(for)s gsave -7225 7682 translate +7225 8944 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_USER)m grestore 8226(,)s 8333(abo)s 3(v)k 3(e\))k -960 7388(and)m 1364(the)s 1712(calling)s 2415(uid)s 2779(\(represented)s +960 8650(and)m 1364(the)s 1712(calling)s 2415(uid)s 2779(\(represented)s 4017(in)s 4260(decimal\).)s gsave -600 7202 translate +600 8464 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211group)m grestore -960 6908(Se)m 6(v)k 3(eral)k +960 8170(Se)m 6(v)k 3(eral)k 1722(strings:)s 2465(the)s 2813(primary)s 3623(and)s 4027(supplementary)s 5489(group)s 6101(names)s 6763(and)s 7167(gids)s 7617(\(in)s -7939(decimal\))s 960 6668(of)m 1231(the)s 1579(calling)s 2282(process.)s +7939(decimal\))s 960 7930(of)m 1231(the)s 1579(calling)s 2282(process.)s 3103(All)s 3463(the)s 3811(group)s 4423(names)s 5085(come)s 5659(\207rst,)s 6137(and)s 6541(then)s 7010(the)s 7358(gids.)s -7861(If)s 8091(the)s 8439(\207rst)s 960 6428(supplementary)m 2422(group)s +7861(If)s 8091(the)s 8439(\207rst)s 960 7690(supplementary)m 2422(group)s 3034(is)s 3244(the)s 3592(same)s 4139(as)s 4389(the)s 4737(primary)s 5547(group)s 6159(then)s 6628(it)s 6820(is)s 7030(elided.)s gsave -600 6242 translate +600 7504 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211user\211shell)m grestore -960 5948(The)m 1388(calling)s +960 7210(The)m 1388(calling)s 2091(user')s 13(s)k 2699(shell,)s 3257(as)s 3507(listed)s 4082(in)s 4325(the)s 4673(passw)s 2(ord)k 5633(entry)s 6178(for)s 6516(the)s 6864(calling)s 7567(login)s 8116(name)s -8690(\(as)s 960 5708(determined)m 2093(for)s gsave -2431 5762 translate +8690(\(as)s 960 6970(determined)m 2093(for)s gsave +2431 7024 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_USER)m grestore 3432(,)s 3539(abo)s 3(v)k 3(e\).)k gsave -600 5522 translate +600 6784 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service\211user)m grestore -960 5228(T)m 19(w)k 2(o)k 1431(strings:)s +960 6490(T)m 19(w)k 2(o)k 1431(strings:)s 2174(the)s 2522(name)s 3096(of)s 3367(the)s 3715(service)s 4447(user)s 4905(\(as)s 5234(speci\207ed)s 6142(to)s 6381(the)s -6729(client\))s 7387(and)s 7791(their)s 8288(uid)s 960 4988(\(represented)m +6729(client\))s 7387(and)s 7791(their)s 8288(uid)s 960 6250(\(represented)m 2198(in)s 2441(decimal\).)s gsave -600 4802 translate +600 6064 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service\211group)m grestore -960 4508(Se)m 6(v)k 3(eral)k +960 5770(Se)m 6(v)k 3(eral)k 1722(strings:)s 2465(the)s 2813(primary)s 3623(and)s 4027(supplementary)s 5489(group)s 6101(names)s 6763(and)s 7167(gids)s 7617(\(in)s -7939(decimal\))s 8823(of)s 960 4268(the)m 1308(service)s 2040(user)s 13(.)k +7939(decimal\))s 8823(of)s 960 5530(the)m 1308(service)s 2040(user)s 13(.)k gsave -600 4082 translate +600 5344 translate 0.6953 1.0000 scale 240 fnt31 0 -52(service\211user\211shell)m grestore -960 3788(The)m 1388(service)s 2120(user')s 13(s)k +960 5050(The)m 1388(service)s 2120(user')s 13(s)k 2728(shell,)s 3286(as)s 3536(listed)s 4111(in)s 4354(their)s 4851(passw)s 2(ord)k 5811(entry)s 15(.)k gsave -600 3602 translate +600 4864 translate 0.6953 1.0000 scale 240 fnt31 0 -52(u\211)m gsave @@ -3533,240 +3542,239 @@ grestore grestore grestore -960 3308(The)m 1388(v)s 6(alue)k +960 4570(The)m 1388(v)s 6(alue)k 1956(of)s 2227(the)s 2575(user)s 4(-de\207ned)k 3811(v)s 6(ariable)k -240 fnt83 4630 3310(name)m 240 fnt82 5202 3308(passed)m 5898(by)s +240 fnt83 4630 4572(name)m 240 fnt82 5202 4570(passed)m 5898(by)s 6192(the)s 6540(caller)s 7129(using)s 7701(the)s gsave -8049 3362 translate +8049 4624 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211defvar)m grestore -960 3068(command-line)m 2397(option)s 3066(to)s 3305(the)s +960 4330(command-line)m 2397(option)s 3066(to)s 3305(the)s 3653(client.)s 4287(If)s 4517(the)s 4865(v)s 6(ariable)k 5684(w)s 2(as)k 6105(not)s 6471(de\207ned)s 7234(then)s -7703(this)s 8099(parameter)s 960 2828(is)m 1170(an)s 1453(empty)s +7703(this)s 8099(parameter)s 960 4090(is)m 1170(an)s 1453(empty)s 2105(list)s 2456(of)s 2727(strings;)s 3476(in)s 3719(this)s 4115(case)s 4582(an)s 3(y)k 4979(condition)s 5940(which)s 6582(tests)s 7057(it)s 7249(will)s 7675(be)s 7957(f)s 2(alse,)k 8512(and)s gsave -960 2642 translate +960 3904 translate 0.6953 1.0000 scale 240 fnt31 0 -52(include\211lookup)m grestore -2421 2588(on)m 2718(it)s +2421 3850(on)m 2718(it)s 2910(will)s 3336(read)s 3805(the)s gsave -4153 2642 translate +4153 3904 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:none)m grestore 4713(\207le,)s 5125(or)s gsave -5384 2642 translate +5384 3904 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:default)m grestore 6245(if)s gsave -6462 2642 translate +6462 3904 translate 0.6953 1.0000 scale 240 fnt31 0 -52(:none)m grestore 7022(is)s 7232(not)s 7598(found.)s gsave -120 2219 translate +120 3481 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211push)m grestore -240 fnt83 1281 2167(\207lename)m gsave -120 1979 translate +240 fnt83 1281 3429(\207lename)m gsave +120 3241 translate 0.6953 1.0000 scale 240 fnt31 0 -52(srorre)m grestore -240 fnt82 480 1685(Stacks)m 1155(the)s 1503(error)s +240 fnt82 480 2947(Stacks)m 1155(the)s 1503(error)s 2026(handling)s 2917(beha)s 4(viour)k 3930(currently)s 4846(in)s 5089(ef)s 6(fect.)k 5729(An)s 3(y)k 6193(changes)s -7015(to)s 7254(error)s 7777(handling)s 8668(will)s 480 1445(tak)m 2(e)k +7015(to)s 7254(error)s 7777(handling)s 8668(will)s 480 2707(tak)m 2(e)k 932(ef)s 6(fect)k 1528(only)s 2008(between)s gsave -2862 1499 translate +2862 2761 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211push)m grestore 4023(and)s gsave -4427 1499 translate +4427 2761 translate 0.6953 1.0000 scale 240 fnt31 0 -52(srorre)m grestore 5027(.)s gsave -120 1105 translate +120 2367 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore gsave -120 865 translate +120 2127 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -0 52(User)m -511(service)s 1243(daemon)s 2058(and)s 2462(client)s 3052(speci\207cation)s -8652(0.62)s -grestore - -grestore - -pgsave restore -showpage - -%%Page: 14 14 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -%%+ font Times-Italic -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup -gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet -grestore -gsave -0 16840 translate -0.0000 rotate - -grestore - -grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -0 LoutMargSet -grestore -240 fnt84 0 13842(14)m 240 fnt82 480 13254(An)m 3(y)k +480 1833(An)m 3(y)k 935(use)s 1301(of)s gsave -1563 13308 translate +1563 1887 translate 0.6953 1.0000 scale 240 fnt31 0 -52(quit)m grestore 2013(inside)s gsave -2631 13308 translate +2631 1887 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 3683(will)s 4100(merely)s 4807(cause)s 5385(the)s 5724(parsing)s 6472(to)s 6701(continue)s 7572(at)s gsave -7795 13308 translate +7795 1887 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -8345(instead.)s 480 13014(An)m 3(y)k +8345(instead.)s 480 1593(An)m 3(y)k 944(control)s 1676(constructs)s 2696(started)s 3390(since)s 3937(the)s gsave -4285 13068 translate +4285 1647 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 5346(will)s 5772(be)s 6054(considered)s 7148(\207nished)s 7964(if)s 8181(a)s gsave -8347 13068 translate +8347 1647 translate 0.6953 1.0000 scale 240 fnt31 0 -52(quit)m grestore -480 12774(is)m 690(found.)s 480 12366(If)m 710(an)s 993(error)s -1516(occurs)s 2191(inside)s gsave -2818 12420 translate +8807(is)s 480 1353(found.)m 1203(If)s 1433(an)s 1716(error)s +2239(occurs)s 2914(inside)s gsave +3541 1407 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore -3879(the)s -4227(e)s 3(x)k 3(ecution)k 5208(settings)s 5989(will)s -6415(be)s 6697(reset)s 7207(\(as)s 7536(if)s 7753(by)s -8047(the)s gsave -8395 12420 translate +4602(the)s +4950(e)s 3(x)k 3(ecution)k 5931(settings)s 6712(will)s +7138(be)s 7420(reset)s 7930(\(as)s 8259(if)s 8476(by)s +8770(the)s gsave +480 1167 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reset)m grestore -480 12126(directi)m 6(v)k 3(e\))k -1434(and)s 1838(parsing)s 2595(will)s 3021(lik)s 2(e)k 6(wise)k -3865(continue)s 4745(at)s gsave -4977 12180 translate +1040 1113(directi)m 6(v)k 3(e\))k +1994(and)s 2398(parsing)s 3155(will)s 3581(lik)s 2(e)k 6(wise)k +4425(continue)s 5305(at)s gsave +5537 1167 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -5477(.)s -480 11718(If)m 705(a)s 865(le)s 3(xical)k 1548(or)s -1801(syntax)s 2476(error)s 2993(is)s 3198(detected)s 4046(in)s -4283(the)s 4626(same)s 5167(con\207guration)s 6495(\207le)s 6850(as)s -7095(the)s gsave -7437 11772 translate +6037(.)s +6201(If)s 6431(a)s 6597(le)s 3(xical)k 7285(or)s +7544(syntax)s 8224(error)s 8747(is)s 480 873(detected)m 1334(in)s +1577(the)s 1925(same)s 2472(con\207guration)s 3805(\207le)s 4166(as)s +4416(the)s gsave +4764 927 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore -8438(,)s 8539(while)s -480 11478(looking)m 1265(for)s 1603(the)s gsave -1951 11532 translate +5765(,)s 5872(while)s +6459(looking)s 7244(for)s 7582(the)s gsave +7930 927 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -2511(after)s 3007(an)s 3290(error)s 3813(or)s gsave -4072 11532 translate +8490(after)s 0 52(User)m 511(service)s 1243(daemon)s 2058(and)s +2462(client)s 3052(speci\207cation)s 8652(0.62)s +grestore + +grestore + +pgsave restore +showpage + +%%Page: 14 14 +%%BeginPageSetup +%%PageResources: font Times-Roman +%%+ font Times-Bold +%%+ font Courier-Bold +%%+ font Times-Italic +/pgsave save def +0.0500 dup scale 10 setlinewidth +%%EndPageSetup +gsave +0 0 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic +gsave +LoutPageSet +grestore +gsave +0 16840 translate +0.0000 rotate + +grestore + +grestore +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +0 LoutMargSet +grestore +240 fnt84 0 13842(14)m 240 fnt82 480 13254(an)m 763(error)s +1286(or)s gsave +1545 13308 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(quit)m +240 fnt31 0 -52(quit)m grestore -4472(,)s 4579(that)s 4997(ne)s 6(w)k -5444(error)s 5967(will)s 6393(not)s 6759(be)s 7041(caught.)s -300 fnt84 0 10811(4.2.4.)m 813(Dir)s 5(ecti)k 3(v)k 3(es)k +1945(,)s 2052(that)s +2470(ne)s 6(w)k 2917(error)s 3440(will)s 3866(not)s +4232(be)s 4514(caught.)s 300 fnt84 0 12587(4.2.4.)m 813(Dir)s 5(ecti)k 3(v)k 3(es)k 2148(f)s 7(or)k 2595(changing)s 3829(execution)s 5112(settings)s -240 fnt82 0 10240(The)m 419(follo)s 6(wing)k 1386(directi)s 6(v)k 3(es)k +240 fnt82 0 12016(The)m 419(follo)s 6(wing)k 1386(directi)s 6(v)k 3(es)k 2346(modify)s 3082(the)s 3420(e)s 3(x)k 3(ecution)k 4391(settings;)s 5223(the)s 5562(serv)s 3(er)k 6192(will)s 6608(remember)s 7627(the)s 7965(f)s 2(act)k 8370(that)s -8778(the)s 0 9999(directi)m 6(v)k 3(e)k 881(w)s 2(as)k +8778(the)s 0 11775(directi)m 6(v)k 3(e)k 881(w)s 2(as)k 1300(encountered)s 2525(and)s 2927(act)s 3263(on)s 3559(it)s 3749(only)s 4227(after)s 4721(all)s 5012(the)s 5359(con\207guration)s 6690(has)s 7058(been)s 7565(parsed.)s 8291(The)s 240 fnt83 -8717 10001(last)m 240 fnt82 0 9759(directi)m 6(v)k 3(e)k +8717 11777(last)m 240 fnt82 0 11535(directi)m 6(v)k 3(e)k 882(which)s 1524(modi\207es)s 2399(an)s 3(y)k 2796(particuar)s 3704(setting)s 4394(will)s 4820(tak)s 2(e)k 5272(ef)s 6(fect.)k gsave -120 9405 translate +120 11181 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reject)m grestore -480 9111(Reject)m 1150(the)s 1498(request.)s +480 10887(Reject)m 1150(the)s 1498(request.)s gsave -2292 9165 translate +2292 10941 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute)m grestore 2992(,)s gsave -3099 9165 translate +3099 10941 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m grestore 5361(and)s gsave -5765 9165 translate +5765 10941 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore 7527(will)s 7953(change)s -480 8871(this)m 876(setting.)s gsave -120 8531 translate +480 10647(this)m 876(setting.)s gsave +120 10307 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute)m gsave 1152 0 translate @@ -3782,13 +3790,13 @@ gsave grestore 4048(\202])s grestore -480 8237(Ex)m 3(ecute)k -1300(the)s 1645(program)s 240 fnt83 2512 8239(pr)m 10(o)k 2(gr)k 3(am)k -240 fnt82 3332 8237(,)m 3436(with)s 3915(the)s 4259(ar)s 4(guments)k +480 10013(Ex)m 3(ecute)k +1300(the)s 1645(program)s 240 fnt83 2512 10015(pr)m 10(o)k 2(gr)k 3(am)k +240 fnt82 3332 10013(,)m 3436(with)s 3915(the)s 4259(ar)s 4(guments)k 5299(as)s 5546(speci\207ed,)s 6500(follo)s 6(wed)k 7399(by)s -7690(an)s 3(y)k 8083(ar)s 4(guments)k 480 7997(gi)m 6(v)k 3(en)k +7690(an)s 3(y)k 8083(ar)s 4(guments)k 480 9773(gi)m 6(v)k 3(en)k 1052(to)s 1282(the)s 1621(client)s 2203(if)s gsave -2411 8051 translate +2411 9827 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m @@ -3796,15 +3804,15 @@ grestore 4064(is)s 4266(in)s 4500(ef)s 6(fect.)k 5131(It)s 5328(is)s 5529(an)s 5803(error)s 6318(for)s 6647(the)s 6986(e)s 3(x)k 3(ecution)k 7959(to)s -8189(f)s 2(ail)k 8550(when)s 480 7757(it)m 672(is)s +8189(f)s 2(ail)k 8550(when)s 480 9533(it)m 672(is)s 882(attempted)s 1882(\(after)s 2457(all)s 2750(the)s 3098(con\207guration)s 4431(has)s 4801(been)s 5310(parsed\).)s 6117(If)s 240 fnt83 -6347 7759(pr)m 10(o)k 2(gr)k 3(am)k 240 fnt82 -7227 7757(does)m 7717(not)s 8083(contain)s 8844(a)s 480 7517(slash)m +6347 9535(pr)m 10(o)k 2(gr)k 3(am)k 240 fnt82 +7227 9533(does)m 7717(not)s 8083(contain)s 8844(a)s 480 9293(slash)m 1015(it)s 1207(will)s 1633(be)s 1915(searched)s 2809(for)s 3147(on)s 3444(the)s 3792(service)s 4524(user')s 13(s)k 5132(path.)s gsave -120 7177 translate +120 8953 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m gsave 3312 0 translate @@ -3820,117 +3828,172 @@ grestore 6376(\202])s grestore -480 6883(T)m 19(ak)k 2(e)k 993(all)s 1286(the)s +480 8659(T)m 19(ak)k 2(e)k 993(all)s 1286(the)s 1634(characters)s 2652(after)s 3148(the)s 3496(last)s 3887(slash)s 4422(of)s 4693(the)s 5041(service)s 5773(name)s 6347(speci\207ed)s -7255(when)s 7831(the)s 8179(client)s 480 6642(w)m 2(as)k +7255(when)s 7831(the)s 8179(client)s 480 8418(w)m 2(as)k 901(called,)s 1578(and)s 1982(e)s 3(x)k 3(ecute)k 2762(that)s 3180(program)s 4050(in)s 4293(the)s 4641(directory)s -5557(named)s 6253(by)s 240 fnt83 6547 6644(pathname)m 240 fnt82 -7545 6642(as)m 7795(if)s 8012(it)s 8204(had)s 8608(been)s -480 6402(speci\207ed)m 1388(for)s 240 fnt83 1726 6404(e)m 4(xecute)k -240 fnt82 2431 6402(.)m 2535(The)s 2963(part)s 3394(of)s +5557(named)s 6253(by)s 240 fnt83 6547 8420(pathname)m 240 fnt82 +7545 8418(as)m 7795(if)s 8012(it)s 8204(had)s 8608(been)s +480 8178(speci\207ed)m 1388(for)s 240 fnt83 1726 8180(e)m 4(xecute)k +240 fnt82 2431 8178(.)m 2535(The)s 2963(part)s 3394(of)s 3665(the)s 4013(service)s 4745(name)s 5319(used)s 5816(may)s -6282(contain)s 7043(only)s 7523(alphanumerics)s 480 6162(and)m 884(h)s 1(yphens)k +6282(contain)s 7043(only)s 7523(alphanumerics)s 480 7938(and)m 884(h)s 1(yphens)k 1732(and)s 2136(must)s 2660(start)s 3130(with)s 3611(an)s 3894(alphanumeric)s 5247(\(and)s 5730(it)s 5921(must)s 6446(be)s -6727(non-empty\),)s 7950(otherwise)s 8934(it)s 480 5922(is)m 690(an)s -973(error)s 13(.)k 480 5514(This)m 956(directi)s 6(v)k 3(e)k -1838(is)s 2048(ignored)s 2837(if)s 3054(the)s 3402(rele)s 6(v)k 6(ant)k -4219(program)s 5089(does)s 5579(not)s 5945(e)s 3(xist)k -6453(in)s 6696(the)s 7044(directory)s 7960(speci\207ed;)s 480 5274(in)m -723(this)s 1119(case)s 1586(the)s 1934(program)s 2804(to)s -3043(e)s 3(x)k 3(ecute)k 3823(is)s 4033(left)s -4410(at)s 4642(its)s 4918(pre)s 6(vious)k 5787(setting)s -6477(\(or)s 6815(unset,)s 7427(if)s 7644(it)s 7836(w)s 2(as)k -8257(not)s 480 5034(set)m 805(before\).)s 480 4626(It)m 672(is)s -869(an)s 1139(error)s 1649(for)s 1974(the)s 2309(test)s -2687(for)s 3012(the)s 3347(e)s 3(xistence)k 4276(of)s -4533(the)s 4868(program)s 5725(to)s 5951(f)s 2(ail)k -6308(other)s 6846(than)s 7302(with)s 7771(a)s 7924(`no)s -8283(such)s 8765(\207le)s 480 4386(or)m 729(directory')s 1693(indication.)s -2743(It)s 2938(is)s 3138(also)s 3566(an)s 3839(error)s -4352(for)s 4680(the)s 5018(e)s 3(x)k 3(ecution)k -5989(to)s 6218(f)s 2(ail)k 6578(if)s 6785(and)s -7179(when)s 7745(it)s 7927(is)s 8126(attempted)s 480 4146(\(after)m -1055(all)s 1348(the)s 1696(con\207guration)s 3029(has)s 3399(been)s -3908(parsed\).)s gsave -120 3806 translate +6727(non-empty\),)s 7950(otherwise)s 8934(it)s 480 7698(is)m 690(an)s +973(error)s 13(.)k 1587(This)s 2063(directi)s 6(v)k 3(e)k +2945(is)s 3155(ignored)s 3944(if)s 4161(the)s 4509(rele)s 6(v)k 6(ant)k +5326(program)s 6196(does)s 6686(not)s 7052(e)s 3(xist)k +7560(in)s 7803(the)s 8151(directory)s 480 7458(speci\207ed;)m 1437(in)s +1675(this)s 2066(case)s 2528(the)s 2871(program)s 3735(to)s +3969(e)s 3(x)k 3(ecute)k 4744(is)s 4949(left)s +5321(at)s 5548(its)s 5818(pre)s 6(vious)k 6682(setting)s +7367(\(or)s 7700(unset,)s 8307(if)s 8519(it)s 8705(w)s 2(as)k +480 7218(not)m 846(set)s 1171(before\).)s 2024(It)s 2229(is)s +2439(an)s 2722(error)s 3245(for)s 3583(the)s 3931(test)s +4322(for)s 4660(the)s 5008(e)s 3(xistence)k 5950(of)s +6221(the)s 6569(program)s 7439(to)s 7678(f)s 2(ail)k +8048(other)s 8599(than)s 480 6978(with)m 958(a)s 1120(`no)s +1488(such)s 1980(\207le)s 2336(or)s 2591(directory')s 3561(indication.)s +4617(It)s 4818(is)s 5023(also)s 5457(an)s 5736(error)s +6255(for)s 6589(the)s 6932(e)s 3(x)k 3(ecution)k +7909(to)s 8144(f)s 2(ail)k 8510(if)s 8722(and)s +480 6738(when)m 1056(it)s 1248(is)s 1458(attempted)s 2458(\(after)s +3033(all)s 3326(the)s 3674(con\207guration)s 5007(has)s 5377(been)s +5886(parsed\).)s gsave +120 6398 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore -240 fnt83 480 3514(service)m -240 fnt82 1202 3512(is)m 1404(interpreted)s 2488(as)s 2731(a)s +240 fnt83 480 6106(service)m +240 fnt82 1202 6104(is)m 1404(interpreted)s 2488(as)s 2731(a)s 2889(program)s 3751(on)s 4041(the)s 4381(def)s 2(ault)k gsave -5094 3566 translate +5094 6158 translate 0.6953 1.0000 scale 240 fnt31 0 -52(PATH)m grestore 5546(\(or)s 5877(as)s 6119(a)s 6277(pathname)s 7256(of)s 7519(an)s 7794(e)s 3(x)k 3(ecutable,)k -8909(if)s 480 3271(it)m 660(contains)s 1495(a)s gsave -1649 3325 translate +8909(if)s 480 5863(it)m 660(contains)s 1495(a)s gsave +1649 5917 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/)m grestore 1749(\).)s 1919(This)s 2383(directi)s 6(v)k 3(e)k -3252(is)s 240 fnt83 3450 3273(very)m 3904(dang)s 2(er)k 10(ous)k -240 fnt82 4899 3271(,)m 4994(and)s 5385(is)s 5583(only)s +3252(is)s 240 fnt83 3450 5865(very)m 3904(dang)s 2(er)k 10(ous)k +240 fnt82 4899 5863(,)m 4994(and)s 5385(is)s 5583(only)s 6050(pro)s 3(vided)k 6944(to)s 7170(mak)s 2(e)k 7730(the)s gsave -8065 3325 translate +8065 5917 translate 0.6953 1.0000 scale 240 fnt31 0 -52(\211\211override)m grestore -480 3031(options)m 1230(ef)s 6(fecti)k 6(v)k 3(e.)k +480 5623(options)m 1230(ef)s 6(fecti)k 6(v)k 3(e.)k 2146(It)s 2344(should)s 3034(not)s 3393(normally)s 4304(be)s 4579(used.)s 5115(It)s 5313(is)s 5516(an)s 5792(error)s 6309(for)s 6640(the)s 6981(e)s 3(x)k 3(ecution)k -7955(to)s 8187(f)s 2(ail)k 8550(when)s 480 2791(it)m +7955(to)s 8187(f)s 2(ail)k 8550(when)s 480 5383(it)m 672(is)s 882(attempted)s 1882(\(after)s 2457(all)s 2750(the)s 3098(con\207guration)s 4431(has)s 4801(been)s 5310(parsed\).)s gsave -120 2451 translate +120 5043 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211builtin)m gsave 2304 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(service-name)m +240 fnt83 0 -52(service\211name)m grestore gsave -4249 0 translate +4307 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(service-ar)m 8(guments)k +240 fnt83 0 -52(service\211ar)m 8(guments)k grestore grestore -480 2157(Ex)m 3(ecutes)k 1388(the)s 1732(b)s 4(uiltin)k -2405(service)s 240 fnt83 3133 2159(service-name)m 240 fnt82 4400 2157(.)m +480 4749(Ex)m 3(ecutes)k 1388(the)s 1732(b)s 4(uiltin)k +2405(service)s 240 fnt83 3133 4751(service-name)m 240 fnt82 4400 4749(.)m 4500(These)s 5123(b)s 4(uiltin)k 5796(services)s 6612(display)s -7353(information)s 8534(about)s 480 1917(the)m 822(serv)s 3(er)k +7353(information)s 8534(about)s 480 4509(the)m 822(serv)s 3(er)k 1455(and/or)s 2120(the)s 2461(request,)s 3252(and)s 3649(ignore)s 4310(an)s 3(y)k 4700(ar)s 4(guments)k 5737(passed)s 6426(from)s 6944(the)s 7285(service)s 8011(side)s 8445(e)s 3(xcept)k -480 1677(possibly)m 1320(to)s 1547(print)s 2046(them)s 2572(as)s +480 4269(possibly)m 1320(to)s 1547(print)s 2046(them)s 2572(as)s 2810(part)s 3228(of)s 3487(their)s 3972(output.)s 4676(The)s 3(y)k 5207(write)s 5740(their)s 6225(results)s 6887(to)s 7114(their)s -7599(standard)s 8454(output)s 480 1437(\(i.e.,)m 958(where)s 6(v)k 3(er)k +7599(standard)s 8454(output)s 480 4029(\(i.e.,)m 958(where)s 6(v)k 3(er)k 1898(\207le)s 2259(descriptor)s 3274(1)s 3429(is)s 3639(directed\).)s 4591(The)s 5019(b)s 4(uiltin)k 5696(services)s 6516(are:)s gsave -600 1251 translate +600 3843 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute)m grestore -960 957(Displays)m 1848(the)s 2196(e)s 3(x)k 3(ecution)k +960 3549(Displays)m 1848(the)s 2196(e)s 3(x)k 3(ecution)k 3177(settings,)s 4014(de\207ned)s 4777(v)s 6(ariables,)k 5740(ar)s 4(guments,)k -6839(etc.)s 7221(with)s 7703(which)s 8345(the)s 960 717(b)m 4(uiltin)k +6839(etc.)s 7221(with)s 7703(which)s 8345(the)s 960 3309(b)m 4(uiltin)k 1637(service)s 2369(w)s 2(as)k 2790(in)s 9(v)k 4(ok)k 2(ed.)k -0 52(0.62)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s -7271(client)s 7861(speci\207cation)s +gsave +600 3123 translate +0.6953 1.0000 scale +240 fnt31 0 -52(environment)m +grestore +960 2829(Dis)m 1283(plays)s 1839(the)s +2187(en)s 2410(vi)s 2590(ron)s 2906(ment)s 3444(v)s 6(ari)k +3803(able)s 4257(set)s 4522(tings)s 5038(with)s 5520(which)s +6162(the)s 6510(b)s 4(uiltin)k 7187(ser)s 7465(vice)s +7919(w)s 2(as)k 960 2589(in)m 1143(v)s 4(ok)k 2(ed.)k +gsave +600 2403 translate +0.6953 1.0000 scale +240 fnt31 0 -52(parameter)m gsave +1440 0 translate +1.4219 1.0000 scale +240 fnt83 0 -52(par)m 3(ameter)k + +grestore + +grestore +960 2109(Displays)m 1848(the)s 2196(v)s 6(alues)k 2852(of)s +3123(the)s 3471(service)s 4203(con\207guration)s 5536(language)s 6456(parameter)s +7470(speci\207ed.)s gsave +600 1923 translate +0.6953 1.0000 scale +240 fnt31 0 -52(version)m +grestore +960 1629(Displays)m 1848(the)s +2196(v)s 3(ersion)k 2954(string)s 3551(and)s 3955(compilation)s +5154(details)s 5828(of)s 6099(the)s 6447(uservd)s 7143(serv)s 3(er)k +7783(program.)s gsave +600 1443 translate +0.6953 1.0000 scale +240 fnt31 0 -52(reset)m +grestore +960 1149(Dis)m 1283(plays)s +1838(the)s 2184(de)s 2406(f)s 2(ault)k 2899(re)s +3080(set)s 3403(con)s 3746(\207g)s 3992(u)s 4107(ra)s +4292(tion)s 4719(\(e)s 6(v)k 6(al)k 5179(u)s +5294(at)s 5466(ed)s 5748(when)s gsave +6323 1203 translate +0.6953 1.0000 scale +240 fnt31 0 -52(reset)m + +grestore +6881(is)s 7089(found)s 7704(in)s 7945(a)s 8109(con)s +8452(\207g)s 8698(u)s 8813(ra)s 8998(-)s 960 909(tion)m +1389(\207le,)s 1801(or)s 2060(when)s 2636(an)s 2919(er)s +3104(ror)s 3442(is)s 3652(caught)s 4350(by)s gsave +4644 963 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(catch\211quit)m +grestore +5645(\).)s 0 52(0.62)m 4809(User)s 5320(service)s +6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s grestore grestore @@ -3970,435 +4033,361 @@ gsave 1 LoutMargSet grestore 240 fnt84 8833 13842(15)m gsave -600 13310 translate -0.6953 1.0000 scale -240 fnt31 0 -52(environment)m -grestore -240 fnt82 -960 13016(Dis)m 1283(plays)s 1839(the)s 2187(en)s 2410(vi)s -2590(ron)s 2906(ment)s 3444(v)s 6(ari)k 3803(able)s -4257(set)s 4522(tings)s 5038(with)s 5520(which)s 6162(the)s -6510(b)s 4(uiltin)k 7187(ser)s 7465(vice)s 7919(w)s 2(as)k -960 12776(in)m 1143(v)s 4(ok)k 2(ed.)k gsave -600 12590 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(parameter)m gsave -1440 0 translate -1.4219 1.0000 scale -240 fnt83 0 -52(par)m 3(ameter)k -grestore - -grestore -960 12296(Displays)m -1848(the)s 2196(v)s 6(alues)k 2852(of)s 3123(the)s -3471(service)s 4203(con\207guration)s 5536(language)s 6456(parameter)s 7470(speci\207ed.)s -gsave -600 12110 translate -0.6953 1.0000 scale -240 fnt31 0 -52(version)m -grestore -960 11816(Displays)m 1848(the)s 2196(v)s 3(ersion)k -2954(string)s 3551(and)s 3955(compilation)s 5154(details)s 5828(of)s -6099(the)s 6447(uservd)s 7143(serv)s 3(er)k 7783(program.)s -gsave -600 11630 translate -0.6953 1.0000 scale -240 fnt31 0 -52(reset)m -grestore -960 11336(Dis)m 1283(plays)s 1838(the)s -2184(de)s 2406(f)s 2(ault)k 2899(re)s 3080(set)s -3403(con)s 3746(\207g)s 3992(u)s 4107(ra)s 4292(tion)s -4719(\(e)s 6(v)k 6(al)k 5179(u)s 5294(at)s -5466(ed)s 5748(when)s gsave -6323 11390 translate -0.6953 1.0000 scale -240 fnt31 0 -52(reset)m -grestore -6881(is)s -7089(found)s 7704(in)s 7945(a)s 8109(con)s 8452(\207g)s -8698(u)s 8813(ra)s 8998(-)s 960 11096(tion)m 1389(\207le,)s -1801(or)s 2060(when)s 2636(an)s 2919(er)s 3104(ror)s -3442(is)s 3652(caught)s 4350(by)s gsave -4644 11150 translate -0.6953 1.0000 scale -240 fnt31 0 -52(catch\211quit)m - -grestore -5645(\).)s gsave -600 10910 translate +600 13318 translate 0.6953 1.0000 scale 240 fnt31 0 -52(toplevel)m grestore -960 10616(Displays)m 1848(the)s -2196(top-le)s 6(v)k 3(el)k 3091(def)s 2(ault)k -3812(con\207guration)s 5145(\(the)s 5572(con\207guration)s 6905(data,)s 7410(e)s 6(v)k 6(aluated)k -8372(by)s 8666(the)s 960 10376(serv)m 3(er)k 9(,)k -1638(which)s 2280(calls)s 2768(all)s 3061(the)s 3409(other)s -3960(con\207guration)s 5293(\207les\).)s gsave -600 10190 translate +240 fnt82 +960 13024(Displays)m 1848(the)s 2196(top-le)s 6(v)k 3(el)k +3091(def)s 2(ault)k 3812(con\207guration)s 5145(\(the)s 5572(con\207guration)s +6905(data,)s 7410(e)s 6(v)k 6(aluated)k 8372(by)s +8666(the)s 960 12784(serv)m 3(er)k 9(,)k 1638(which)s +2280(calls)s 2768(all)s 3061(the)s 3409(other)s 3960(con\207guration)s +5293(\207les\).)s gsave +600 12598 translate 0.6953 1.0000 scale 240 fnt31 0 -52(override)m grestore -960 9896(Displays)m -1847(the)s 2194(top-le)s 6(v)k 3(el)k 3088(o)s 3(v)k 3(erride)k +960 12304(Displays)m 1847(the)s +2194(top-le)s 6(v)k 3(el)k 3088(o)s 3(v)k 3(erride)k 3932(con\207guration)s 5264(\(the)s 5690(con\207guration)s 7021(data,)s 7525(e)s 6(v)k 6(aluated)k -8486(by)s 8778(the)s 960 9656(serv)m 3(er)k 9(,)k +8486(by)s 8778(the)s 960 12064(serv)m 3(er)k 9(,)k 1638(which)s 2280(causes)s 2955(all)s 3248(the)s 3596(other)s 4147(con\207guration)s 5480(data)s 5938(to)s 6177(be)s 6459(parsed\).)s gsave -600 9470 translate +600 11878 translate 0.6953 1.0000 scale 240 fnt31 0 -52(help)m grestore -960 9176(Displays)m 1848(a)s 2014(list)s +960 11584(Displays)m 1848(a)s 2014(list)s 2365(of)s 2636(the)s 2984(understood)s 4106(b)s 4(uiltin)k 4783(service)s 5515(names)s 6177(and)s 6581(ar)s 4(guments.)k -480 8913(In)m 736(the)s 1084(fu)s 1278(ture)s 1705(oth)s -2008(er)s 2253(b)s 4(uiltin)k 2930(ser)s 3208(vices)s -3750(may)s 4216(be)s 4498(de)s 4720(\207ned)s 5257(which)s -5899(do)s 6192(more)s 6739(than)s 7208(just)s 7613(print)s -8124(in)s 8307(for)s 8585(-)s 480 8673(ma)m 772(tion.)s gsave -120 8383 translate +600 11398 translate 0.6953 1.0000 scale -240 fnt31 0 -52(set\211environment)m +240 fnt31 0 -52(shutdown)m grestore +960 11104(Arranges)m 1876(for)s 2203(the)s gsave -120 8143 translate +2540 11158 translate 0.6953 1.0000 scale -240 fnt31 0 -52(no\211set\211environment)m +240 fnt31 0 -52(uservd)m +grestore +3189(to)s 3417(shut)s 3865(do)s 6(wn.)k +4485(A)s 17(v)k 6(ailable)k 5435(only)s 5904(when)s +6469(the)s 6806(service)s 7527(user)s 7974(is)s 8173(root.)s +8650(This)s 960 10864(only)m 1440(af)s 6(fects)k 2120(ne)s 6(w)k +2567(requests;)s 3462(it)s 3654(doesn')s 4(t)k 4414(terminate)s +5371(an)s 3(y)k 5768(currently-running)s 7507(requests)s gsave +120 10476 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(set\211environment)m grestore -480 7849(Runs)m gsave -1024 7903 translate +120 10236 translate 0.6953 1.0000 scale -240 fnt31 0 -52(/etc/environment)m +240 fnt31 0 -52(no\211set\211environment)m +grestore +480 9942(Runs)m gsave +1024 9996 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(/etc/environment)m grestore -2686(to)s 2925(set)s 3250(the)s -3598(service)s 4330(user')s 13(s)k 4938(en)s 9(vironment.)k -6242(This)s 6718(adds)s 7208(the)s 7556(o)s 3(v)k 3(erhead)k -8485(of)s 480 7609(in)m 9(v)k 4(oking)k 1372(a)s +2686(to)s 2925(set)s 3250(the)s 3598(service)s +4330(user')s 13(s)k 4938(en)s 9(vironment.)k 6242(This)s +6718(adds)s 7208(the)s 7556(o)s 3(v)k 3(erhead)k +8485(of)s 480 9702(in)m 9(v)k 4(oking)k 1372(a)s 1538(shell,)s 2096(b)s 4(ut)k 2458(doesn')s 4(t)k 3218(cause)s 3805(an)s 3(y)k 4202(shell)s 4708(\(de\)mangling)s 6049(of)s 6320(the)s 6668(service')s 13(s)k 7554(ar)s 4(guments.)k -8650(This)s 480 7369(is)m 690(achie)s 6(v)k 3(ed)k +8650(This)s 480 9462(is)m 690(achie)s 6(v)k 3(ed)k 1589(by)s 1883(in)s 9(v)k 4(oking)k gsave -960 7183 translate +960 9276 translate 0.6953 1.0000 scale 240 fnt31 0 -52(.../program)m 1728(arg)s 2304(arg)s 2880(arg)s 3456(\202)s grestore -480 6938(as)m gsave -960 6752 translate +480 9031(as)m gsave +960 8845 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/bin/sh)m 1152(\211c)s 1584('.)s 2016(/etc/environment;)s 4608(exec)s 5328("$@"')s 6192(\211)s 6480(.../program)s 8208(arg)s 8784(arg)s 9360(arg)s 9936(\202)s grestore gsave -480 6508 translate +480 8601 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211set\211environment)m grestore -2342 6454(cancels)m 3096(the)s 3444(ef)s 6(fect)k +2342 8547(cancels)m 3096(the)s 3444(ef)s 6(fect)k 4040(of)s gsave -4311 6508 translate +4311 8601 translate 0.6953 1.0000 scale 240 fnt31 0 -52(set\211environment)m grestore 5812(.)s gsave -120 6164 translate +120 8257 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m grestore gsave -120 5924 translate +120 8017 translate 0.6953 1.0000 scale 240 fnt31 0 -52(suppress\211args)m grestore -480 5630(Include)m 1253(an)s 3(y)k +480 7723(Include)m 1253(an)s 3(y)k 1650(ar)s 4(guments)k 2693(gi)s 6(v)k 3(en)k 3273(to)s 3512(the)s 3860(client)s 4450(as)s 4700(ar)s 4(guments)k 5743(to)s 5982(the)s 6330(program)s 7200(in)s 9(v)k 4(ok)k 2(ed)k -8015(as)s 8265(a)s 8431(result)s 480 5390(of)m 749(an)s +8015(as)s 8265(a)s 8431(result)s 480 7483(of)m 749(an)s gsave -1030 5444 translate +1030 7537 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute)m grestore 1730(,)s gsave -1834 5444 translate +1834 7537 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211directory)m grestore 4094(or)s gsave -4351 5444 translate +4351 7537 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore 6110(directi)s 6(v)k 3(e.)k gsave -7038 5444 translate +7038 7537 translate 0.6953 1.0000 scale 240 fnt31 0 -52(suppress\211args)m grestore -8396(undoes)s 480 5150(the)m 828(ef)s 6(fect)k +8396(undoes)s 480 7243(the)m 828(ef)s 6(fect)k 1424(of)s gsave -1695 5204 translate +1695 7297 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m grestore 3297(.)s gsave -120 4829 translate +120 6922 translate 0.6953 1.0000 scale 240 fnt31 0 -52(require\211fd)m gsave 1584 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k +240 fnt83 0 -52(fd\211r)m 3(ang)k 2(e)k grestore -2882(read|write)s +2940(read|write)s grestore -480 4530(In)m 676(sist)s 1054(that)s 1472(the)s +480 6623(In)m 676(sist)s 1054(that)s 1472(the)s 1820(\207ledescrip)s 2808(tor\(s\))s 3373(be)s 3655(opened)s 4405(for)s 4743(read)s 5152(ing)s 5511(resp.)s 6013(writ)s 6397(ing.)s 6807(It)s 7012(is)s 7222(an)s 7505(er)s 7690(ror)s 8028(if)s 8245(an)s 3(y)k 8642(de)s 8864(-)s -480 4290(scrip)m 937(tor)s 1258(mark)s 2(ed)k 2027(as)s +480 6383(scrip)m 937(tor)s 1258(mark)s 2(ed)k 2027(as)s 2272(re)s 2453(quired)s 3118(when)s 3689(the)s 4033(ser)s 4311(vice)s 4760(is)s 4966(about)s 5554(to)s 5788(be)s 6066(in)s 6249(v)s 4(ok)k 2(ed)k 6882(\(af)s 7158(ter)s 7465(the)s 7808(con)s 8151(\207g)s 8397(u)s -8512(ra)s 8697(tion)s 480 4050(has)m 850(been)s 1359(parsed\))s +8512(ra)s 8697(tion)s 480 6143(has)m 850(been)s 1359(parsed\))s 2111(w)s 2(as)k 2532(not)s 2898(spec)s 3316(i)s 3376(\207ed)s 3793(when)s 4369(the)s 4717(client)s 5307(w)s 2(as)k 5728(in)s 5911(v)s 4(ok)k 2(ed.)k 6595(Each)s 7130(\207le)s 7491(de)s 7713(scrip)s 8170(tor)s 8495(has)s -480 3810(a)m 646(sep)s 958(a)s 1064(rate)s 1477(set)s +480 5903(a)m 646(sep)s 958(a)s 1064(rate)s 1477(set)s 1742(ting,)s 2221(and)s 2625(the)s 2973(last)s 3364(one)s 3766(of)s gsave -4037 3864 translate +4037 5957 translate 0.6953 1.0000 scale 240 fnt31 0 -52(require\211fd)m grestore 5038(,)s gsave -5145 3864 translate +5145 5957 translate 0.6953 1.0000 scale 240 fnt31 0 -52(allow\211fd)m grestore 5946(,)s gsave -6053 3864 translate +6053 5957 translate 0.6953 1.0000 scale 240 fnt31 0 -52(ignore\211fd)m grestore 6954(,)s gsave -7061 3864 translate +7061 5957 translate 0.6953 1.0000 scale 240 fnt31 0 -52(null\211fd)m grestore 7821(or)s gsave -8080 3864 translate +8080 5957 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reject\211fd)m grestore -480 3570(which)m 1122(af)s 1319(fect)s 1676(ed)s 1960(a)s +480 5662(which)m 1122(af)s 1319(fect)s 1676(ed)s 1960(a)s 2126(par)s 2431(tic)s 2662(u)s 2777(lar)s 3088(\207le)s 3449(de)s 3671(scrip)s 4128(tor)s 4453(will)s 4879(tak)s 2(e)k -5331(ef)s 5528(fect.)s 240 fnt83 480 3164(fd-r)m 3(ang)k 2(e)k -240 fnt82 1352 3162(may)m 1818(be)s 2100(a)s 2266(single)s -2893(number)s 9(,)k 3722(tw)s 2(o)k 4132(numbers)s -5007(separated)s 5967(by)s 6261(a)s 6427(h)s 1(yphen,)k -7239(or)s 7498(one)s 7900(number)s 480 2922(follo)m 6(wed)k -1382(by)s 1676(a)s 1842(h)s 1(yphen)k 2604(\(indicating)s -3692(all)s 3985(descriptors)s 5084(from)s 5608(that)s 6026(number)s -6817(onw)s 2(ards\).)k 7809(It)s 8014(may)s 8480(also)s -480 2682(be)m 760(one)s 1159(of)s 1428(the)s 1773(w)s 2(ords)k -gsave -2405 2736 translate +5331(ef)s 5528(fect.)s 240 fnt83 6049 5664(fd-)m 6302(r)s 3(ang)k 2(e)k +240 fnt82 6909 5662(may)m 7375(be)s 7657(a)s 7823(sin)s +8099(gle)s 8447(num)s 8873(-)s 480 5422(ber)m 9(,)k +883(tw)s 2(o)k 1293(num)s 1719(bers)s 2168(sep)s +2480(a)s 2586(rat)s 2837(ed)s 3121(by)s 3415(a)s +3581(h)s 1(y)k 3814(phen,)s 4387(or)s 4646(one)s +5048(num)s 5474(ber)s 5839(fol)s 6099(lo)s 6(wed)k +6736(by)s 7030(a)s 7196(h)s 1(y)k 7429(phen)s +7952(\(in)s 8214(di)s 8394(cat)s 8672(ing)s 480 5182(all)m +772(de)s 994(scrip)s 1451(tors)s 1858(from)s 2380(that)s +2796(num)s 3222(ber)s 3585(on)s 3822(w)s 2(ards\).)k +4573(It)s 4776(may)s 5240(also)s 5676(be)s 5956(one)s +6357(of)s 6626(the)s 6972(w)s 2(ords)k gsave +7604 5236 translate 0.6953 1.0000 scale -240 fnt31 0 -52(stdin)m +240 fnt31 +0 -52(stdin)m grestore -2905(,)s gsave -3009 2736 translate +8104(,)s gsave +8209 5236 translate 0.6953 1.0000 scale -240 fnt31 0 -52(stdout)m - +240 fnt31 0 -52(stdout)m grestore -3667(or)s gsave -3923 2736 translate +8867(or)s +gsave +480 4996 translate 0.6953 1.0000 scale 240 fnt31 0 -52(stderr)m grestore -4523(.)s 4625(Open-ended)s -5850(\207le)s 6209(descriptor)s 7221(rangers)s 7973(are)s 8317(allo)s 6(wed)k -480 2442(only)m 960(with)s gsave -1442 2496 translate +1080 4942(.)m 1174(Open-)s 1761(ended)s +2380(\207le)s 2730(de)s 2952(scrip)s 3409(tor)s 3723(rangers)s +4466(are)s 4802(al)s 4969(lo)s 6(wed)k 5596(only)s +6065(with)s gsave +6536 4996 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reject\211fd)m grestore -2403(and)s -gsave -2807 2496 translate -0.6953 1.0000 scale -240 fnt31 0 -52(ignore\211fd)m -grestore -3708(,)s 3815(as)s 4065(otherwise)s -5050(the)s 5398(service)s 6130(program)s 7000(w)s 2(ould)k -7655(\207nd)s 8086(itself)s 8634(with)s 480 2202(a)m 646(v)s 3(ery)k -1122(lar)s 4(ge)k 1651(number)s 2442(of)s 2713(\207le)s -3074(descriptors)s 4173(open.)s 480 1794(When)m 1109(the)s 1457(con\207guration)s -2790(has)s 3160(been)s 3669(parsed,)s 4400(and)s 4804(before)s -5470(the)s 5818(service)s 6550(is)s 6760(about)s 7352(to)s -7591(be)s 7873(e)s 3(x)k 3(ecuted,)k 480 1554(stderr)m -1082(\(fd)s 1417(2\))s 1663(must)s 2187(be)s 2468(required)s -3320(or)s 3578(allo)s 6(wed)k 4385(\()s gsave -4458 1608 translate +7486(and)s gsave +7879 4996 translate 0.6953 1.0000 scale 240 fnt31 -0 -52(require\211fd)m +0 -52(ignore\211fd)m +grestore +8780(,)s 8876(as)s 480 4702(oth)m 783(er)s +968(wise)s 1457(the)s 1799(ser)s 2077(vice)s 2526(pro)s +2838(gram)s 3383(w)s 2(ould)k 4033(\207nd)s 4458(it)s +4590(self)s 5001(with)s 5477(a)s 5638(v)s 3(ery)k +6108(lar)s 4(ge)k 6632(num)s 7058(ber)s 7417(of)s +7683(\207le)s 8038(de)s 8260(scrip)s 8717(tors)s 480 4462(open.)m +1090(When)s 1699(the)s 2027(con)s 2370(\207g)s 2616(u)s +2731(ra)s 2916(tion)s 3325(has)s 3674(been)s 4163(parsed,)s +4874(and)s 5258(be)s 5480(fore)s 5900(the)s 6227(ser)s +6505(vice)s 6939(is)s 7129(about)s 7701(to)s 7920(be)s +8181(e)s 3(x)k 8399(e)s 8501(cut)s 8793(ed,)s +480 4222(stderr)m 1083(\(fd)s 1418(2\))s 1665(must)s 2189(be)s +2470(re)s 2651(quired)s 3320(or)s 3578(al)s 3745(lo)s 6(wed)k +4381(\()s gsave +4454 4276 translate +0.6953 1.0000 scale +240 fnt31 0 -52(require\211fd)m grestore -5518(or)s gsave -5776 1608 translate +5514(or)s gsave +5772 4276 translate 0.6953 1.0000 scale -240 fnt31 0 -52(allow\211fd)m +240 fnt31 +0 -52(allow\211fd)m grestore -6577(\))s -6703(for)s 7040(writing;)s 7841(this)s 8235(is)s 8444(so)s -8708(that)s 480 1314(the)m 823(error)s 1341(message)s 2202(printed)s -2931(by)s 3220(the)s 3563(serv)s 3(er')k 13(s)k -4348(child)s 4878(process)s 5641(if)s 5853(it)s 6040(cannot)s -gsave -6732 1368 translate +6573(\))s 6701(for)s 7038(writ)s 7422(ing;)s +7839(this)s 8234(is)s 8443(so)s 8708(that)s 480 3982(the)m +825(er)s 1010(ror)s 1345(mes)s 1721(sage)s 2198(print)s +2649(ed)s 2930(by)s 3220(the)s 3565(serv)s 3958(er')s 13(s)k +4350(child)s 4882(pro)s 5194(cess)s 5640(if)s 5853(it)s +6042(can)s 6371(not)s gsave +6734 4036 translate 0.6953 1.0000 scale 240 fnt31 0 -52(exec)m grestore -7187(the)s 7530(service)s 8256(program)s -480 1074(is)m 690(not)s 1056(lost.)s gsave -120 784 translate +7190(the)s +7535(ser)s 7813(vice)s 8263(pro)s 8575(gram)s 480 3742(is)m +690(not)s 1056(lost.)s gsave +120 3452 translate 0.6953 1.0000 scale -240 fnt31 0 -52(allow\211fd)m -gsave +240 fnt31 0 -52(allow\211fd)m gsave 1296 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k -grestore -2594([read|write])s - -grestore -0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s -3052(speci\207cation)s 8652(0.62)s -grestore - -grestore - -pgsave restore -showpage - -%%Page: 16 16 -%%BeginPageSetup -%%PageResources: font Times-Roman -%%+ font Times-Bold -%%+ font Courier-Bold -%%+ font Times-Italic -/pgsave save def -0.0500 dup scale 10 setlinewidth -%%EndPageSetup -gsave -0 0 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic -gsave -LoutPageSet -grestore -gsave -0 16840 translate -0.0000 rotate - -grestore - +240 fnt83 +0 -52(fd\211r)m 3(ang)k 2(e)k grestore -gsave -0 16840 translate -0.0000 rotate -gsave -1417 -15423 translate -240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic -gsave -0 LoutMargSet +2652([read|write])s grestore -240 fnt84 0 13842(16)m 240 fnt82 480 13251(Allo)m 6(w)k +480 3153(Allo)m 6(w)k 1126(the)s 1474(descriptor\(s\))s 2729(to)s 2968(be)s 3250(opened)s 4000(for)s 4338(reading)s 5108(resp.)s 5610(writing,)s 6407(or)s 6666(either)s 7269(if)s 7486(neither)s gsave -8209 13305 translate +8209 3207 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 8669(nor)s gsave -480 13065 translate +480 2967 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore -1040 13011(is)m 1250(speci\207ed.)s +1040 2913(is)m 1250(speci\207ed.)s 2204(If)s 2434(a)s 2600(particular)s 3574(descriptor)s 4589(not)s 4955(speci\207ed)s 5863(by)s 6157(the)s 6505(client)s 7095(then)s -7564(it)s 7756(will)s 8182(be)s 8464(open)s 480 12771(onto)m +7564(it)s 7756(will)s 8182(be)s 8464(open)s 480 2673(onto)m gsave -959 12825 translate +959 2727 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/dev/null)m grestore 1920(\(for)s 2337(reading,)s 3161(writing,)s 3958(or)s 4217(both,)s 4750(depending)s 5801(on)s 6098(whether)s gsave -6928 12825 translate +6928 2727 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 7328(,)s gsave -7435 12825 translate +7435 2727 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m grestore -7995(or)s 8254(neither)s 480 12531(w)m 2(as)k 901(speci\207ed\).)s +7995(or)s 8254(neither)s 480 2433(w)m 2(as)k 901(speci\207ed\).)s gsave -120 12191 translate +120 2093 translate 0.6953 1.0000 scale 240 fnt31 0 -52(null\211fd)m gsave 1152 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k +240 fnt83 0 -52(fd\211r)m 3(ang)k 2(e)k grestore -2450([read|write])s +2508([read|write])s grestore -480 11892(Spec)m 938(i)s 998(fy)s 1251(that)s +480 1794(Spec)m 938(i)s 998(fy)s 1251(that)s 1669(the)s 2017(de)s 2239(scrip)s 2696(tor\(s\))s 3261(be)s 3543(opened)s 4293(onto)s gsave -4772 11946 translate +4772 1848 translate 0.6953 1.0000 scale 240 fnt31 0 -52(/dev/null)m grestore 5733(for)s 6071(read)s 6480(ing)s 6839(resp.)s 7341(writ)s 7725(ing,)s -8138(or)s 8397(both)s 8880(if)s 480 11652(nei)m 766(ther)s +8138(or)s 8397(both)s 8880(if)s 480 1554(nei)m 766(ther)s gsave -1181 11706 translate +1181 1608 translate 0.6953 1.0000 scale 240 fnt31 0 -52(read)m grestore 1624(nor)s gsave -1986 11706 translate +1986 1608 translate 0.6953 1.0000 scale 240 fnt31 0 -52(write)m @@ -4407,141 +4396,189 @@ grestore 4093(spec)s 4511(i)s 4571(\207)s 4696(ca)s 4908(tion)s 5320(of)s 5574(these)s 6104(\207le)s 6448(de)s 6670(scrip)s 7127(tors)s 7519(by)s 7796(the)s 8127(client)s 8700(will)s -480 11412(be)m 762(silent)s 1279(ly)s 1519(ig)s 1698(nored;)s +480 1314(be)m 762(silent)s 1279(ly)s 1519(ig)s 1698(nored;)s 2355(the)s 2703(client)s 3293(will)s 3719(see)s 4080(its)s 4356(ends)s 4846(of)s 5117(the)s 5465(de)s 5687(scrip)s 6144(tors)s 6553(be)s 6775(ing)s 7134(closed)s 7803(im)s 8055(me)s 8343(di)s 8523(ate)s 8797(ly)s 15(.)k gsave -120 11072 translate +120 974 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reject\211fd)m gsave 1440 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k +240 fnt83 0 -52(fd\211r)m 3(ang)k 2(e)k + +grestore +grestore +0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s +3052(speci\207cation)s 8652(0.62)s grestore grestore -480 10778(Do)m 824(not)s 1187(allo)s 6(w)k 1764(the)s -2109(descriptor\(s\))s 3362(to)s 3598(be)s 3878(speci\207ed)s 4783(by)s -5075(the)s 5420(client.)s 6052(It)s 6254(is)s 6462(an)s -6742(error)s 7263(if)s 7477(an)s 3(y)k 7871(descriptor\(s\))s -480 10538(mark)m 2(ed)k 1253(for)s 1591(rejection)s 2483(are)s -2830(speci\207ed)s 3738(when)s 4314(the)s 4662(service)s 5394(is)s -5604(about)s 6196(to)s 6435(be)s 6717(in)s 9(v)k 4(ok)k 2(ed)k -7532(\(after)s 8107(the)s 480 10298(con\207guration)m 1813(has)s 2183(been)s + +pgsave restore +showpage + +%%Page: 16 16 +%%BeginPageSetup +%%PageResources: font Times-Roman +%%+ font Times-Bold +%%+ font Courier-Bold +%%+ font Times-Italic +/pgsave save def +0.0500 dup scale 10 setlinewidth +%%EndPageSetup +gsave +0 0 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 240 60 LoutGraphic +gsave +LoutPageSet +grestore +gsave +0 16840 translate +0.0000 rotate + +grestore + +grestore +gsave +0 16840 translate +0.0000 rotate +gsave +1417 -15423 translate +240 fnt82 0.0 0.0 0.0 setrgbcolor 9066 14006 0 14006 240 240 60 LoutGraphic +gsave +0 LoutMargSet +grestore +240 fnt84 0 13842(16)m 240 fnt82 480 13251(Do)m 824(not)s +1187(allo)s 6(w)k 1764(the)s 2109(descriptor\(s\))s 3362(to)s +3598(be)s 3878(speci\207ed)s 4783(by)s 5075(the)s 5420(client.)s +6052(It)s 6254(is)s 6462(an)s 6742(error)s 7263(if)s +7477(an)s 3(y)k 7871(descriptor\(s\))s 480 13011(mark)m 2(ed)k +1253(for)s 1591(rejection)s 2483(are)s 2830(speci\207ed)s 3738(when)s +4314(the)s 4662(service)s 5394(is)s 5604(about)s 6196(to)s +6435(be)s 6717(in)s 9(v)k 4(ok)k 2(ed)k +7532(\(after)s 8107(the)s 480 12771(con\207guration)m 1813(has)s 2183(been)s 2692(parsed\).)s gsave -120 9958 translate +120 12431 translate 0.6953 1.0000 scale 240 fnt31 0 -52(ignore\211fd)m gsave 1440 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(fd-r)m 3(ang)k 2(e)k +240 fnt83 0 -52(fd\211r)m 3(ang)k 2(e)k grestore grestore -480 9664(Silent)m 1037(ly)s 1260(ig)s 1439(nore)s 1902(an)s 3(y)k +480 12137(Silent)m 1037(ly)s 1260(ig)s 1439(nore)s 1902(an)s 3(y)k 2281(spec)s 2699(i)s 2759(\207)s 2884(ca)s 3096(tion)s 3507(by)s 3783(the)s 4113(client)s 4685(of)s 4938(those)s 5481(de)s 5703(scrip)s 6160(tor\(s\).)s 6762(The)s 7172(pipes)s -7710(cor)s 8015(re)s 8196(spond)s 8767(ing)s 480 9424(to)m +7710(cor)s 8015(re)s 8196(spond)s 8767(ing)s 480 11897(to)m 719(these)s 1266(de)s 1488(scrip)s 1945(tors)s 2354(will)s 2780(be)s 3062(closed)s 3731(just)s 4136(be)s 4358(fore)s 4798(the)s 5146(ser)s 5424(vice)s 5878(is)s 6088(in)s 6271(v)s 4(ok)k 2(ed.)k gsave -120 9084 translate +120 11557 translate 0.6953 1.0000 scale 240 fnt31 0 -52(disconnect\211hup)m grestore gsave -120 8844 translate +120 11317 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211disconnect\211hup)m grestore -480 8550(Causes)m 1209(the)s 1557(service')s 13(s)k -2443(process)s 3211(group)s 3823(to)s 4062(get)s 4414(a)s -gsave -4580 8604 translate +480 11023(Caus)m 950(es)s 1200(the)s +1548(ser)s 1826(vice')s 13(s)k 2434(pro)s 2746(cess)s +3195(group)s 3807(to)s 4046(get)s 4398(a)s gsave +4564 11077 translate 0.6953 1.0000 scale -240 fnt31 0 -52(SIGHUP)m +240 fnt31 +0 -52(SIGHUP)m grestore -5240(if)s 5457(the)s 5805(client)s -6395(disconnects)s 7562(before)s 8228(the)s 8576(main)s 480 8310(service)m -1212(process)s 1980(terminates.)s gsave -3078 8364 translate +5224(if)s 5441(the)s 5789(client)s 6379(dis)s +6649(con)s 6992(nects)s 7534(be)s 7756(fore)s 8196(the)s +8544(main)s 480 10783(ser)m 758(vice)s 1209(pro)s 1521(cess)s +1966(ter)s 2217(mi)s 2463(nates.)s gsave +3055 10837 translate 0.6953 1.0000 scale -240 fnt31 0 -52(no\211disconnect\211hup)m +240 fnt31 0 -52(no\211disconnect\211hup)m + grestore -4840(cancels)s -gsave -5594 8364 translate +4813(can)s 5142(cels)s gsave +5560 10837 translate 0.6953 1.0000 scale 240 fnt31 0 -52(disconnect\211hup)m grestore -6995(.)s 480 7902(If)m 700(one)s -1091(of)s 1352(the)s 1689(reading)s 2449(descriptors)s 3537(speci\207ed)s -4435(when)s 5000(the)s 5337(client)s 5917(is)s 6116(called)s -6734(gets)s 7159(a)s 7315(read)s 7773(error)s 9(,)k -8324(or)s 8572(if)s 8778(the)s 480 7661(service)m 1212(is)s -1422(disconnected)s 2729(for)s 3067(some)s 3628(other)s 4179(reason,)s -4910(then)s 5379(the)s gsave -5727 7715 translate +6961(.)s +7122(If)s 7348(one)s 7747(of)s 8014(the)s 8358(read)s +8767(ing)s 480 10543(de)m 702(scrip)s 1159(tors)s 1568(spec)s +1986(i)s 2046(\207ed)s 2463(when)s 3039(the)s 3387(client)s +3977(is)s 4187(called)s 4815(gets)s 5251(a)s 5417(read)s +5886(er)s 6071(ror)s 9(,)k 6447(or)s 6706(if)s +6923(the)s 7271(ser)s 7549(vice)s 8003(is)s 8213(dis)s +8483(con)s 8826(-)s 480 10302(nect)m 878(ed)s 1162(for)s +1500(some)s 2061(oth)s 2364(er)s 2609(rea)s 2900(son,)s +3340(then)s 3809(the)s gsave +4157 10356 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGHUP)m grestore -6387(will)s -6813(be)s 7095(deli)s 6(v)k 3(ered)k 240 fnt83 -8033 7663(befor)m 8(e)k 240 fnt82 8689 7661(the)m 480 7421(writing)m -1223(end\(s\))s 1869(of)s 2140(the)s 2488(service')s 13(s)k -3374(reading)s 4144(pipe\(s\))s 4856(are)s 5203(closed,)s 5921(so)s -6187(that)s 6605(the)s 6953(client)s 7543(can)s 7932(distinguish)s -480 7181(disconnection)m 1866(from)s 2390(reading)s 3160(EOF)s 3670(on)s -3967(a)s 4133(pipe.)s gsave -120 6841 translate +4817(will)s +5243(be)s 5525(de)s 5747(li)s 6(v)k 5988(ered)s +240 fnt83 6457 10304(be)m 6676(for)s 8(e)k 240 fnt82 +7106 10302(the)m 7454(writ)s 7838(ing)s 8197(end\(s\))s 8843(of)s +480 10062(the)m 818(ser)s 1096(vice')s 13(s)k 1694(read)s +2103(ing)s 2452(pipe\(s\))s 3154(are)s 3491(closed,)s 4199(so)s +4455(that)s 4863(the)s 5201(client)s 5781(can)s 6160(dis)s +6430(tin)s 6679(guish)s 7245(dis)s 7515(con)s 7858(nec)s +8183(tion)s 8602(from)s 480 9822(read)m 889(ing)s 1248(EOF)s +1758(on)s 2055(a)s 2221(pipe.)s gsave +120 9482 translate 0.6953 1.0000 scale -240 fnt31 0 -52(reset)m +240 fnt31 0 -52(reset)m + grestore -480 6547(Resets)m -1155(the)s 1503(e)s 3(x)k 3(ecution)k 2484(settings)s -3265(to)s 3504(the)s 3852(def)s 2(ault.)k 4617(This)s -5093(is)s 5303(equi)s 6(v)k 6(alent)k 6347(to:)s -gsave -960 6361 translate +480 9188(Resets)m 1155(the)s 1503(e)s 3(x)k 3(ecution)k +2484(settings)s 3265(to)s 3504(the)s 3852(def)s 2(ault.)k +4617(This)s 5093(is)s 5303(equi)s 6(v)k 6(alent)k +6347(to:)s gsave +960 9002 translate 0.6953 1.0000 scale -240 fnt31 0 -52(cd)m 432(~/)s 0 -292(reject)m 0 -532(no\211set\211environment)m -0 -772(suppress\211args)m 0 -1012(allow\211fd)m 1296(0)s 1584(read)s 0 -1252(allow\211fd)m -1296(1\2112)s 1872(write)s 0 -1492(reject\211fd)m 1440(3\211)s 0 -1732(disconnect\211hup)m - +240 fnt31 0 -52(cd)m 432(~/)s 0 -292(reject)m +0 -532(no\211set\211environment)m 0 -772(suppress\211args)m 0 -1012(allow\211fd)m 1296(0)s 1584(read)s +0 -1252(allow\211fd)m 1296(1\2112)s 1872(write)s 0 -1492(reject\211fd)m 1440(3\211)s +0 -1732(disconnect\211hup)m grestore -0 4085(If)m 230(no)s gsave -523 4139 translate +0 7025(If)m 230(no)s gsave +523 7079 translate 0.6953 1.0000 scale -240 fnt31 0 -52(execute)m +240 fnt31 0 -52(execute)m + grestore -1223(,)s -gsave -1330 4139 translate +1223(,)s gsave +1330 7079 translate 0.6953 1.0000 scale 240 fnt31 0 -52(execute\211from\211path)m grestore 3032(,)s gsave -3139 4139 translate +3139 7079 translate 0.6953 1.0000 scale -240 fnt31 0 -52(execute\211from\211directory)m - +240 fnt31 +0 -52(execute\211from\211directory)m grestore 5401(or)s gsave -5660 4139 translate +5660 7079 translate 0.6953 1.0000 scale 240 fnt31 0 -52(builtin)m grestore -6420(is)s 6630(interpreted)s -7722(before)s 8388(all)s 8681(the)s 0 3845(\207les)m 449(are)s -796(read)s 1265(then)s 1734(the)s 2082(request)s 2832(is)s -3042(rejected.)s 9066 670 0 670 240 240 60 0 2821 LoutGr2 +6420(is)s +6630(interpreted)s 7722(before)s 8388(all)s 8681(the)s 0 6785(\207les)m +449(are)s 796(read)s 1265(then)s 1734(the)s 2082(request)s +2832(is)s 3042(rejected.)s 9066 670 0 670 240 240 60 0 5761 LoutGr2 newpath 0 ysize 0.3 ft sub moveto xsize 0 rlineto 0 0.1 ft rlineto @@ -4551,35 +4588,35 @@ grestore 320 fnt84 0 66(4.3.)m 628(Err)s 5(ors)k 1618(in)s 1958(the)s 2458(con\207guration)s 4359(\207le)s grestore -0 2359(If)m +0 5299(If)m 230(a)s 396(syntax)s 1076(error)s 1599(or)s 1858(other)s 2409(problem)s 3266(occurs)s 3941(when)s 4517(processing)s 5593(a)s 5759(con\207guration)s 7092(\207le)s 7453(then)s 7922(a)s 8088(diagnostic)s -0 2119(will)m 422(be)s 699(issued,)s 1399(to)s 1633(where)s 6(v)k 3(er)k +0 5059(will)m 422(be)s 699(issued,)s 1399(to)s 1633(where)s 6(v)k 3(er)k 2568(the)s 2911(error)s 3429(messages)s 4378(are)s 4721(currently)s 5632(being)s 6212(sent)s 6652(\(see)s 7087(the)s gsave -7430 2173 translate +7430 5113 translate 0.6953 1.0000 scale 240 fnt31 0 -52(errors\211)m grestore -8185(f)s 2(amily)k 8855(of)s 0 1879(directi)m 6(v)k 3(es,)k -1026(abo)s 3(v)k 3(e\).)k 0 1471(The)m 428(error)s +8185(f)s 2(amily)k 8855(of)s 0 4819(directi)m 6(v)k 3(es,)k +1026(abo)s 3(v)k 3(e\).)k 0 4411(The)m 428(error)s 951(will)s 1377(cause)s 1964(processing)s 3040(of)s 3311(the)s 3659(con\207guration)s 4992(\207les)s 5441(to)s 5680(cease)s 6253(at)s 6485(that)s 6903(point,)s 7502(unless)s 8151(the)s 8499(error)s -0 1231(w)m 2(as)k 421(inside)s 1048(a)s gsave -1214 1285 translate +0 4171(w)m 2(as)k 421(inside)s 1048(a)s gsave +1214 4225 translate 0.6953 1.0000 scale 240 fnt31 0 -52(catch\211quit)m grestore 2275(construct.)s 3255(In)s 3511(this)s 3907(case)s 4374(the)s 4722(settings)s 5503(controlling)s 6605(the)s 6953(program')s 13(s)k -7973(e)s 3(x)k 3(ecution)k 0 991(will)m 426(be)s +7973(e)s 3(x)k 3(ecution)k 0 3931(will)m 426(be)s 708(reset)s 1218(to)s 1457(the)s 1805(def)s 2(aults)k 2610(as)s 2860(if)s 3077(a)s gsave -3243 1045 translate +3243 3985 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reset)m @@ -4587,11 +4624,25 @@ grestore 3803(directi)s 6(v)k 3(e)k 4685(had)s 5089(been)s 5598(issued,)s 6303(and)s 6707(parsing)s 7464(continues)s 8432(after)s gsave -0 805 translate +0 3745 translate 0.6953 1.0000 scale 240 fnt31 0 -52(hctac)m grestore -500 751(.)m 0 52(0.62)m 4809(User)s +500 3691(.)m 9066 609 0 609 240 240 60 0 2728 LoutGr2 +newpath 0 ysize 0.3 ft sub moveto +xsize 0 rlineto +0 0.1 ft rlineto +xsize neg 0 rlineto +closepath fill +grestore +320 fnt84 0 5(4.4.)m +628(Defaults)s +grestore +0 2266(The)m 428(def)s 2(ault)k 1149(con\207guration)s +2482(processing)s 3558(is)s 3768(as)s 4018(if)s 4235(the)s +4583(daemon)s 5398(were)s 5918(parsing)s 6675(an)s 6958(o)s 3(v)k 3(erall)k +7670(con\207guration)s 0 2026(\207le)m 361(whose)s 1029(contents)s 1877(were)s +2397(as)s 2647(follo)s 6(ws:)k 0 52(0.62)m 4809(User)s 5320(service)s 6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s grestore @@ -4633,51 +4684,34 @@ gsave 1 LoutMargSet grestore 240 fnt84 8831 13842(17)m gsave -0 12808 translate -240 fnt82 9066 609 0 609 240 240 60 LoutGraphic -gsave -newpath 0 ysize 0.3 ft sub moveto -xsize 0 rlineto -0 0.1 ft rlineto -xsize neg 0 rlineto -closepath fill -grestore -320 fnt84 0 5(4.4.)m 628(Defaults)s - -grestore -240 fnt82 0 12346(The)m 428(def)s 2(ault)k 1149(con\207guration)s -2482(processing)s 3558(is)s 3768(as)s 4018(if)s 4235(the)s -4583(daemon)s 5398(were)s 5918(parsing)s 6675(an)s 6958(o)s 3(v)k 3(erall)k -7670(con\207guration)s 0 12106(\207le)m 361(whose)s 1029(contents)s 1877(were)s -2397(as)s 2647(follo)s 6(ws:)k gsave -480 11920 translate +480 13335 translate 0.6953 1.0000 scale -240 fnt31 0 -52(reset)m -0 -292(user\211rcfile)m 1728(~/.userv/rc)s 0 -532(errors\211to\211stderr)m 0 -772(include)m 1152(/etc/userv/system.default)s -0 -1012(if)m 432(grep)s 1152(service\211user\211shell)s 3888(/etc/shells)s 432 -1252(errors\211push)m -720 -1492(catch\211quit)m 1008 -1732(include\211ifexist)m gsave +240 fnt31 0 -52(reset)m 0 -292(user\211rcfile)m +1728(~/.userv/rc)s 0 -532(errors\211to\211stderr)m 0 -772(include)m 1152(/etc/userv/system.default)s 0 -1012(if)m +432(grep)s 1152(service\211user\211shell)s 3888(/etc/shells)s 432 -1252(errors\211push)m 720 -1492(catch\211quit)m +1008 -1732(include\211ifexist)m gsave 3312 -1680 translate 1.4219 1.0000 scale -240 fnt83 0 -52(\207le)m 345(speci\207ed)s -1248(by)s 1530(most)s 2046(r)s 8(ecent)k 2699(user\211r)s 8(c\207le)k +240 fnt83 0 -52(\207le)m 345(speci\207ed)s 1248(by)s +1530(most)s 2046(r)s 8(ecent)k 2699(user\211r)s 8(c\207le)k 3767(dir)s 8(ective)k grestore 720 -1972(hctac)m 432 -2212(srorre)m 0 -2452(fi)m 0 -2692(include)m 1152(/etc/userv/system.override)s 0 -2932(quit)m grestore -0 8444(If)m 226(one)s -624(of)s 891(the)s gsave -1235 8498 translate +240 fnt82 0 9859(If)m +226(one)s 624(of)s 891(the)s gsave +1235 9913 translate 0.6953 1.0000 scale -240 fnt31 0 -52(\211\211override)m +240 fnt31 0 -52(\211\211override)m + grestore -2292(options)s -3044(to)s 3279(the)s 3623(client)s 4209(is)s 4415(used)s -4908(then)s 5373(it)s 5561(will)s 5983(instead)s 6714(be)s -6992(as)s 7238(if)s 7451(the)s 7795(daemon)s 8606(were)s -0 8204(parsing)m 757(an)s 1040(o)s 3(v)k 3(erall)k +2292(options)s 3044(to)s 3279(the)s 3623(client)s 4209(is)s +4415(used)s 4908(then)s 5373(it)s 5561(will)s 5983(instead)s +6714(be)s 6992(as)s 7238(if)s 7451(the)s 7795(daemon)s +8606(were)s 0 9619(parsing)m 757(an)s 1040(o)s 3(v)k 3(erall)k 1752(con\207guration)s 3085(as)s 3335(follo)s 6(ws:)k gsave -480 8018 translate +480 9433 translate 0.6953 1.0000 scale 240 fnt31 0 -52(reset)m 0 -292(errors\211to\211stderr)m 0 -532(include)m gsave @@ -4790,73 +4824,73 @@ grestore 832(pipes,)s 1444(one)s 1846(end)s 2250(of)s 2521(each)s 3016(pipe)s 3484(being)s 4069(open)s 4592(on)s 4889(the)s 5237(appropriate)s 6381(\207le)s 6742(descriptor)s 7757(in)s 8000(the)s -8348(service)s 480 9505(program)m 1350(\(when)s 2005(it)s 2197(is)s -2407(in)s 9(v)k 4(ok)k 2(ed\))k 3292(and)s -3696(the)s 4044(other)s 4595(end)s 4999(being)s 5584(held)s -6054(by)s 6348(the)s 6696(client)s 7286(process,)s 8110(which)s -480 9265(will)m 906(read)s 1375(and)s 1779(write)s 2325(\207les)s -2774(it)s 2966(opens)s 3576(on)s 3873(behalf)s 4542(of)s -4813(its)s 5089(caller)s 5678(or)s 5937(\207le)s 6298(descriptors)s -7397(it)s 7589(is)s 7799(passed)s 8495(by)s 480 9025(its)m -756(caller)s 13(.)k 480 8617(Data)m 991(may)s 1457(be)s +8348(service)s 480 9505(program)m 1347(\(when)s 1999(it)s 2188(is)s +2394(in)s 9(v)k 4(ok)k 2(ed\))k 3276(and)s +3677(the)s 4022(other)s 4569(end)s 4970(being)s 5552(held)s +6019(by)s 6309(the)s 6654(client)s 7241(process,)s 8062(which)s +8700(will)s 480 9265(read)m 942(and)s 1339(write)s 1878(\207les)s +2320(it)s 2505(opens)s 3108(on)s 3398(behalf)s 4060(of)s +4324(its)s 4593(caller)s 5175(or)s 5427(\207le)s 5781(descriptors)s +6873(it)s 7058(is)s 7261(passed)s 7950(by)s 8237(its)s +8506(caller)s 13(.)k 480 9025(Data)m 991(may)s 1457(be)s 1739(passed)s 2435(into)s 2860(the)s 3208(service)s 3940(through)s 4742(reading)s 5512(pipes)s 6068(and)s 6472(out)s 6838(of)s -7109(it)s 7301(through)s 8103(writing)s 480 8377(pipes.)m 1083(These)s +7109(it)s 7301(through)s 8103(writing)s 480 8785(pipes.)m 1083(These)s 1703(pipes)s 2252(can)s 2634(remain)s 3347(open)s 3864(only)s 4337(until)s 4823(the)s 5164(service)s 5889(and)s 6287(client)s 6870(ha)s 4(v)k 3(e)k 7364(terminated,)s 8485(or)s -8737(can)s 480 8137(be)m 762(made)s 1336(to)s 1575(stay)s +8737(can)s 480 8545(be)m 762(made)s 1336(to)s 1575(stay)s 2014(open)s 2537(after)s 3033(the)s 3381(client)s 3971(has)s 4341(terminated)s 5420(and)s 5824(\(if)s 6120(the)s 6468(service)s -7200(program)s 8070(forks\))s 8689(the)s 480 7897(main)m 1015(service)s -1747(process)s 2515(has)s 2885(e)s 3(xited;)k 3578(the)s -3926(beha)s 4(viour)k 4939(is)s 5149(controlled)s 6176(by)s -6470(options)s 7226(passed)s 7922(to)s 8161(the)s 8509(client)s -480 7657(by)m 774(its)s 1050(caller)s 13(.)k 480 7249(The)m -901(caller)s 1483(can)s 1864(arrange)s 2629(that)s 3039(a)s -3198(writing)s 3934(pipe)s 4394(be)s 4669(connected)s 5689(to)s -5921(a)s 6080(pipe)s 6540(or)s 6792(similar)s 7506(object)s -8143(and)s 8539(cause)s 480 7009(attempts)m 1340(to)s 1579(write)s -2125(to)s 2364(that)s 2782(descriptor)s 3797(by)s 4091(the)s -4439(service)s 5171(to)s 5410(generate)s 6275(a)s gsave -6441 7063 translate +7200(program)s 8070(forks\))s 8689(the)s 480 8305(main)m 998(service)s +1712(process)s 2462(has)s 2814(e)s 3(xited;)k 3489(the)s +3820(beha)s 4(viour)k 4815(is)s 5007(controlled)s 6016(by)s +6292(options)s 7031(passed)s 7709(to)s 7930(the)s 8260(client)s +8832(by)s 480 8065(its)m 751(caller)s 13(.)k 1426(The)s +1848(caller)s 2432(can)s 2816(arrange)s 3582(that)s 3995(a)s +4156(writing)s 4893(pipe)s 5356(be)s 5633(connected)s 6655(to)s +6889(a)s 7050(pipe)s 7512(or)s 7766(similar)s 8482(object)s +480 7825(and)m 884(cause)s 1471(attempts)s 2331(to)s 2570(write)s +3116(to)s 3355(that)s 3773(descriptor)s 4788(by)s 5082(the)s +5430(service)s 6162(to)s 6401(generate)s 7266(a)s gsave +7432 7879 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -7201(\(or)s gsave -7539 7063 translate +8192(\(or)s gsave +8530 7879 translate 0.6953 1.0000 scale 240 fnt31 0 -52(EPIPE)m grestore -8099(if)s +480 7585(if)m gsave -8316 7063 translate +684 7639 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -480 6769(is)m 690(caught)s 1388(or)s -1647(ignored\))s 2506(in)s 2749(the)s 3097(service.)s 480 6361(Lik)m 2(e)k 6(wise,)k -1455(the)s 1803(service)s 2535(can)s 2924(close)s 3471(\207ledescriptors)s -4875(speci\207ed)s 5783(for)s 6121(reading,)s 6945(which)s 7587(will)s -8013(cause)s 8600(the)s 480 6121(corresponding)m 1902(\207ledescriptors)s 3306(passed)s -4002(by)s 4296(the)s 4644(caller)s 5233(to)s 5472(be)s -5754(closed,)s 6472(so)s 6738(that)s 7156(if)s 7373(these)s -7920(are)s 8267(pipes)s 480 5881(processes)m 1447(which)s 2089(write)s -2635(to)s 2874(them)s 3412(will)s 3838(recei)s 6(v)k 3(e)k +1431(is)s 1628(caught)s 2313(or)s +2559(ignored\))s 3405(in)s 3635(the)s 3970(service.)s 4797(Lik)s 2(e)k 6(wise,)k +5759(the)s 6094(service)s 6813(can)s 7189(close)s 7722(\207ledescriptors)s +480 7345(speci\207ed)m 1373(for)s 1696(reading,)s 2505(which)s 3132(will)s +3543(cause)s 4115(the)s 4448(corresponding)s 5855(\207ledescriptors)s 7244(passed)s +7925(by)s 8204(the)s 8537(caller)s 480 7105(to)m 716(be)s +995(closed,)s 1709(so)s 1972(that)s 2387(if)s 2600(these)s +3144(are)s 3488(pipes)s 4040(processes)s 5004(which)s 5643(write)s +6185(to)s 6421(them)s 6956(will)s 7378(recei)s 6(v)k 3(e)k gsave -4574 5935 translate +8111 7159 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGPIPE)m grestore -5334(or)s gsave -5593 5935 translate +8867(or)s gsave +480 6919 translate 0.6953 1.0000 scale 240 fnt31 0 -52(EPIPE)m grestore -6093(.)s 0 5426(\213)m 480(If)s gsave -706 5480 translate +980 6865(.)m 0 6460(\213)m 480(If)s gsave +706 6514 translate 0.6953 1.0000 scale 240 fnt31 0 -52(no\211suppress\211args)m @@ -4864,96 +4898,133 @@ grestore 2363(is)s 2568(set)s 2888(then)s 3353(ar)s 4(guments)k 4391(passed)s 5082(to)s 5316(the)s 5660(client)s 6245(by)s 6534(its)s 6805(caller)s 7390(will)s 7811(be)s 8088(passed)s -8779(on,)s 480 5186(v)m 3(erbatim,)k 1433(to)s 1672(the)s -2020(service.)s 0 4750(\213)m 480(F)s 3(a)k 716(tal)s +8779(on,)s 480 6220(v)m 3(erbatim,)k 1433(to)s 1672(the)s +2020(service.)s 0 5784(\213)m 480(F)s 3(a)k 716(tal)s 1009(sig)s 1281(nals)s 1717(and)s 2121(sys)s 2418(tem)s 2836(call)s 3235(f)s 2(ail)k 3545(ures)s 3994(e)s 3(x)k 4212(pe)s 4434(ri)s 4573(enced)s 5189(by)s 5483(the)s 5831(client)s 6421(will)s 6847(re)s 7028(sult)s 7433(in)s 7676(the)s 8024(dis)s 8294(con)s 8637(nec)s 8962(-)s -480 4510(tion)m 909(of)s 1180(the)s 1528(ser)s 1806(vice)s +480 5544(tion)m 909(of)s 1180(the)s 1528(ser)s 1806(vice)s 2260(from)s 2784(the)s 3132(client)s 3722(and)s 4126(pos)s 4450(si)s 4603(bly)s 4963(some)s 5524(of)s 5795(the)s 6143(com)s 6555(mu)s 6856(ni)s 7036(ca)s 7248(tion)s -7677(\207le)s 8038(de)s 8260(scrip)s 8717(tors)s 480 4270(de)m +7677(\207le)s 8038(de)s 8260(scrip)s 8717(tors)s 480 5304(de)m 702(scribed)s 1450(abo)s 3(v)k 3(e;)k 2128(if)s gsave -2345 4324 translate +2345 5358 translate 0.6953 1.0000 scale 240 fnt31 0 -52(disconnect\211hup)m grestore 3806(is)s 4016(set)s 4341(then)s 4810(the)s 5158(ser)s 5436(vice)s 5890(will)s 6316(also)s 6754(be)s 7036(sent)s 7481(a)s gsave -7647 4324 translate +7647 5358 translate 0.6953 1.0000 scale 240 fnt31 0 -52(SIGHUP)m grestore -8247(.)s 0 3834(\213)m 480(The)s 908(v)s 6(alue)k +8247(.)s 0 4868(\213)m 480(The)s 908(v)s 6(alue)k 1476(of)s 1747(the)s gsave -2095 3888 translate +2095 4922 translate 0.6953 1.0000 scale 240 fnt31 0 -52(LOGNAME)m grestore 2855(\(or)s gsave -3193 3888 translate +3193 4922 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USER)m grestore 3593(\))s 3721(en)s 9(vironment)k 4981(v)s 6(ariable)k 5800(as)s 6050(passed)s 6746(to)s -6985(the)s 7333(client)s 7923(will)s 8349(be)s 480 3594(used)m +6985(the)s 7333(client)s 7923(will)s 8349(be)s 480 4628(used)m 977(as)s 1227(the)s 1575(login)s 2124(name)s 2698(of)s 2969(the)s 3317(calling)s 4020(user)s 4478(if)s 4695(the)s 5043(uid)s 5407(of)s 5678(the)s 6026(calling)s 6729(process)s -7497(matches)s 8331(the)s 8679(uid)s 480 3354(corresponding)m 1902(to)s +7497(matches)s 8331(the)s 8679(uid)s 480 4388(corresponding)m 1902(to)s 2141(that)s 2559(login)s 3108(name.)s 3730(Otherwise)s 4768(the)s 5116(calling)s 5819(uid')s 13(s)k 6335(passw)s 2(ord)k -7295(entry)s 7840(will)s 8266(be)s 8548(used)s 480 3114(to)m -719(determine)s 1730(the)s 2078(calling)s 2781(user')s 13(s)k -3389(login)s 3938(name.)s 480 2706(This)m 956(login)s 1505(name)s -2079(and)s 2483(the)s 2831(calling)s 3534(uid)s 3898(are)s -4245(a)s 4(v)k 6(ailable)k 5153(in)s 5396(the)s -5744(con\207guration)s 7077(language)s 7997(in)s 8240(the)s gsave -480 2520 translate +7295(entry)s 7840(will)s 8266(be)s 8548(used)s 480 4148(to)m +708(determine)s 1708(the)s 2045(calling)s 2737(user')s 13(s)k +3334(login)s 3872(name.)s 4543(This)s 5007(login)s 5545(name)s +6108(and)s 6501(the)s 6838(calling)s 7530(uid)s 7883(are)s +8218(a)s 4(v)k 6(ailable)k 480 3908(in)m 723(the)s +1071(con\207guration)s 2404(language)s 3324(in)s 3567(the)s gsave +3915 3962 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211user)m grestore -1741 2466(parameter)m 2755(and)s 3159(are)s 3506(passed)s -4202(to)s 4441(the)s 4789(service)s 5521(program)s 6391(in)s -6634(en)s 9(vironment)k 7894(v)s 6(ariables)k gsave -480 2280 translate +5176(parameter)s 6190(and)s 6594(are)s 6941(passed)s +7637(to)s 7876(the)s 8224(service)s 480 3668(program)m 1334(in)s +1561(en)s 9(vironment)k 2805(v)s 6(ariables)k gsave +3696 3722 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_USER)m grestore -1541 2226(and)m gsave -1945 2280 translate +4741(and)s gsave +5129 3722 translate 0.6953 1.0000 scale 240 fnt31 0 -52(USERV_UID)m grestore -2846(.)s -480 1818(The)m 901(shell)s 1400(corresponding)s 2815(to)s 3047(that)s -3458(login)s 4000(name)s 4567(\(according)s 5635(to)s 5867(the)s -6208(passw)s 2(ord)k 7161(entry\))s 7773(is)s 7976(a)s 4(v)k 6(ailable)k -8876(as)s 480 1578(in)m 723(the)s 1071(con\207guration)s 2404(language')s 13(s)k +6030(.)s +6178(The)s 6590(shell)s 7080(corresponding)s 8486(to)s 8708(that)s +480 3428(login)m 1023(name)s 1591(\(according)s 2659(to)s 2892(the)s +3233(passw)s 2(ord)k 4187(entry\))s 4799(is)s 5003(a)s 4(v)k 6(ailable)k +5904(as)s 6148(in)s 6384(the)s 6726(con\207guration)s 8052(language')s 13(s)k gsave -3478 1632 translate +480 3242 translate 0.6953 1.0000 scale 240 fnt31 0 -52(calling\211user\211shell)m grestore -5340(parameter)s 13(.)k 480 1170(If)m -710(no)s 1003(rele)s 6(v)k 6(ant)k 1820(passw)s 2(ord)k -2780(entry)s 3325(can)s 3714(be)s 3996(found)s 4613(then)s -5082(no)s 5375(service)s 6107(will)s 6533(be)s 6815(in)s 9(v)k 4(ok)k 2(ed.)k -0 715(\213)m 480(The)s 908(numeric)s 1744(v)s 6(alues)k +2342 3188(parameter)m 13(.)k 3447(If)s +3677(no)s 3970(rele)s 6(v)k 6(ant)k 4787(passw)s 2(ord)k +5747(entry)s 6292(can)s 6681(be)s 6963(found)s 7580(then)s +8049(no)s 8342(service)s 480 2948(will)m 906(be)s 1188(in)s 9(v)k 4(ok)k 2(ed.)k +0 2542(\213)m 480(The)s 908(numeric)s 1744(v)s 6(alues)k 2400(and)s 2804(te)s 3(xtual)k 3506(names)s 4168(for)s 4506(calling)s 5209(gid)s 5573(and)s 5977(supplementary)s 7439(group)s -8051(list)s 8402(are)s 0 52(0.62)m 4809(User)s 5320(service)s -6052(daemon)s 6867(and)s 7271(client)s 7861(speci\207cation)s +8051(list)s 8402(are)s 480 2302(a)m 4(v)k 6(ailable)k +1380(in)s 1615(the)s 1955(con\207guration)s 3280(language)s 4192(in)s +4427(the)s gsave +4766 2356 translate +0.6953 1.0000 scale +240 fnt31 0 -52(calling\211group)m +grestore +6119(parameter)s 7125(and)s +7521(are)s 7860(passed)s 8548(to)s 8778(the)s 480 2062(service)m +1212(in)s 1455(en)s 9(vironment)k 2715(v)s 6(ariables.)k +3735(If)s 3965(no)s 4258(name)s 4832(can)s 5221(be)s +5503(found)s 6120(for)s 6458(a)s 6624(numeric)s 7460(group)s +8072(to)s 8311(which)s 480 1822(the)m 828(calling)s 1531(process)s +2299(belongs)s 3095(then)s 3564(no)s 3857(service)s 4589(will)s +5015(be)s 5297(in)s 9(v)k 4(ok)k 2(ed.)k +0 1367(\213)m 480(The)s 908(name)s 1482(of)s 1753(the)s +2101(current)s 2837(w)s 2(orking)k 3686(directory)s 4602(in)s +4845(which)s 5487(the)s 5835(client)s 6425(w)s 2(as)k +6846(in)s 9(v)k 4(ok)k 2(ed)k 7661(is)s +7871(passed,)s 8616(if)s 480 1127(a)m 4(v)k 6(ailable)k +1388(and)s 1792(not)s 2158(hidden)s 2867(using)s gsave +3439 1181 translate +0.6953 1.0000 scale +240 fnt31 +0 -52(\211\211hidecwd)m +grestore +4340(,)s 4447(to)s 4686(the)s 5034(service)s +5766(program)s 6636(in)s 6879(the)s gsave +7227 1181 translate +0.6953 1.0000 scale +240 fnt31 0 -52(USERV_CWD)m + +grestore +8188(v)s 6(ariable.)k 480 887(This)m 946(grants)s 1570(no)s +1852(special)s 2560(access)s 3210(to)s 3438(that)s 3846(directory)s +4751(unless)s 5389(it)s 5571(is)s 5770(a)s 5925(subdirectory)s +7164(of)s 7424(a)s 7579(directory)s 8484(which)s 0 52(0.62)m +4809(User)s 5320(service)s 6052(daemon)s 6867(and)s 7271(client)s +7861(speci\207cation)s grestore grestore @@ -4992,101 +5063,65 @@ gsave gsave 1 LoutMargSet grestore -240 fnt84 8832 13842(19)m 240 fnt82 480 13251(a)m 4(v)k 6(ailable)k -1380(in)s 1615(the)s 1955(con\207guration)s 3280(language)s 4192(in)s -4427(the)s gsave -4766 13305 translate -0.6953 1.0000 scale -240 fnt31 0 -52(calling\211group)m -grestore -6119(parameter)s 7125(and)s -7521(are)s 7860(passed)s 8548(to)s 8778(the)s 480 13011(service)m -1212(in)s 1455(en)s 9(vironment)k 2715(v)s 6(ariables.)k -480 12603(If)m 710(no)s 1003(name)s 1577(can)s 1966(be)s -2248(found)s 2865(for)s 3203(a)s 3369(numeric)s 4205(group)s -4817(to)s 5056(which)s 5698(the)s 6046(calling)s 6749(process)s -7517(belongs)s 8313(then)s 8782(no)s 480 12363(service)m 1212(will)s -1638(be)s 1920(in)s 9(v)k 4(ok)k 2(ed.)k -0 11957(\213)m 480(The)s 908(name)s 1482(of)s 1753(the)s -2101(current)s 2837(w)s 2(orking)k 3686(directory)s 4602(in)s -4845(which)s 5487(the)s 5835(client)s 6425(w)s 2(as)k -6846(in)s 9(v)k 4(ok)k 2(ed)k 7661(is)s -7871(passed,)s 8616(if)s 480 11717(a)m 4(v)k 6(ailable)k -1388(and)s 1792(not)s 2158(hidden)s 2867(using)s gsave -3439 11771 translate -0.6953 1.0000 scale -240 fnt31 -0 -52(\211\211hidecwd)m -grestore -4340(,)s 4447(to)s 4686(the)s 5034(service)s -5766(program)s 6636(in)s 6879(the)s gsave -7227 11771 translate +240 fnt84 8832 13842(19)m 240 fnt82 480 13251(is)m 690(e)s 3(x)k 3(ecutable)k +1762(\(searchable\))s 2977(b)s 4(ut)k 3339(not)s 3705(readable)s +4570(by)s 4864(the)s 5212(service)s 5944(user)s 13(.)k +0 12794(\213)m 480(Settings)s 1301(speci\207ed)s 2209(by)s 2503(the)s +2851(caller)s 3440(using)s 4012(the)s gsave +4360 12848 translate 0.6953 1.0000 scale -240 fnt31 0 -52(USERV_CWD)m - -grestore -8188(v)s 6(ariable.)k 480 11477(This)m 946(grants)s 1570(no)s -1852(special)s 2560(access)s 3210(to)s 3438(that)s 3846(directory)s -4751(unless)s 5389(it)s 5571(is)s 5770(a)s 5925(subdirectory)s -7164(of)s 7424(a)s 7579(directory)s 8484(which)s 480 11237(is)m -690(e)s 3(x)k 3(ecutable)k 1762(\(searchable\))s 2977(b)s 4(ut)k -3339(not)s 3705(readable)s 4570(by)s 4864(the)s 5212(service)s -5944(user)s 13(.)k 0 10780(\213)m 480(Settings)s 1301(speci\207ed)s -2209(by)s 2503(the)s 2851(caller)s 3440(using)s 4012(the)s +240 fnt31 0 -52(\211\211defvar)m gsave -4360 10834 translate -0.6953 1.0000 scale -240 fnt31 0 -52(\211\211defvar)m gsave 1295 0 translate 1.4219 1.0000 scale 240 fnt83 0 -52(name)m grestore -2023(=)s -gsave +2023(=)s gsave 2167 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(value)m +240 fnt83 0 -52(value)m + grestore grestore -6432(option)s 7101(to)s 7340(the)s -7688(client)s 8278(are)s 480 10540(a)m 4(v)k 6(ailable)k -1388(in)s 1631(the)s 1979(con\207guration)s 3312(language)s 4232(as)s -4482(the)s 4830(corresponding)s gsave -6252 10594 translate +6432(option)s 7101(to)s 7340(the)s 7688(client)s 8278(are)s +480 12554(a)m 4(v)k 6(ailable)k 1388(in)s 1631(the)s +1979(con\207guration)s 3312(language)s 4232(as)s 4482(the)s 4830(corresponding)s +gsave +6252 12608 translate 0.6953 1.0000 scale 240 fnt31 0 -52(u\211)m gsave 288 0 translate 1.4219 1.0000 scale -240 fnt83 -0 -52(name)m +240 fnt83 0 -52(name)m grestore grestore -7018(parameters)s 8116(and)s 8520(are)s 480 10300(passed)m -1176(to)s 1415(the)s 1763(service)s 2495(program)s 3365(in)s -3608(en)s 9(vironment)k 4868(v)s 6(ariables)k gsave -5775 10354 translate +7018(parameters)s +8116(and)s 8520(are)s 480 12314(passed)m 1176(to)s 1415(the)s +1763(service)s 2495(program)s 3365(in)s 3608(en)s 9(vironment)k +4868(v)s 6(ariables)k gsave +5775 12368 translate 0.6953 1.0000 scale -240 fnt31 -0 -52(USERV_U_)m gsave +240 fnt31 0 -52(USERV_U_)m gsave 1152 0 translate 1.4219 1.0000 scale -240 fnt83 0 -52(name)m +240 fnt83 +0 -52(name)m grestore grestore -7082(.)s 0 9845(\213)m -480(If)s 710(the)s 1058(calling)s 1761(user)s 2219(is)s -2429(root)s 2874(or)s 3133(the)s 3481(same)s 4028(as)s -4278(the)s 4626(service)s 5358(user)s 5816(then)s 6285(options)s -7041(may)s 7507(be)s 7789(gi)s 6(v)k 3(en)k -8369(to)s 8608(the)s 480 9605(client)m 1070(which)s 1712(bypass)s -2415(the)s 2763(usual)s 3323(security)s 4133(features;)s 5000(in)s -5243(this)s 5639(case)s 6106(other)s 6657(information)s 7842(may)s -8308(pass)s 480 9365(between)m 1334(the)s 1682(caller)s 2271(and)s -2675(the)s 3023(service.)s 0 52(User)m 511(service)s 1243(daemon)s -2058(and)s 2462(client)s 3052(speci\207cation)s 8652(0.62)s +7082(.)s 0 11859(\213)m 480(If)s 710(the)s +1058(calling)s 1761(user)s 2219(is)s 2429(root)s 2874(or)s +3133(the)s 3481(same)s 4028(as)s 4278(the)s 4626(service)s +5358(user)s 5816(then)s 6285(options)s 7041(may)s 7507(be)s +7789(gi)s 6(v)k 3(en)k 8369(to)s 8608(the)s +480 11619(client)m 1070(which)s 1712(bypass)s 2415(the)s 2763(usual)s +3323(security)s 4133(features;)s 5000(in)s 5243(this)s 5639(case)s +6106(other)s 6657(information)s 7842(may)s 8308(pass)s 480 11379(between)m +1334(the)s 1682(caller)s 2271(and)s 2675(the)s 3023(service.)s +0 52(User)m 511(service)s 1243(daemon)s 2058(and)s 2462(client)s +3052(speci\207cation)s 8652(0.62)s grestore grestore