|
0
|
1 |
=head1 NAME
|
|
|
2 |
|
|
|
3 |
checkvpw - check passwords for virtual and non-virtual users
|
|
|
4 |
|
|
|
5 |
=head1 SYNOPSIS
|
|
|
6 |
|
|
|
7 |
B<checkvpw> B<subprogram> [B<arguments...>]
|
|
|
8 |
|
|
|
9 |
=head1 DESCRIPTION
|
|
|
10 |
|
|
|
11 |
This program is a drop-in replacement for the standard checkpassword,
|
|
|
12 |
written by D. J. Bernstein (djb@pobox.com).
|
|
|
13 |
In the absence of virtual hosting (determined by the use of
|
|
|
14 |
F</var/qmail/control/virtualdomainss> and IP aliases),
|
|
|
15 |
it behaves identically to checkpassword.
|
|
|
16 |
When virtual hosting is used, it permits logins from a unique set of
|
|
|
17 |
users for each of the aliases.
|
|
|
18 |
|
|
|
19 |
F<checkvpw> must be run from either the F<tcp-env> program
|
|
|
20 |
(part of the F<qmail>
|
|
|
21 |
package) or from a suitable substitute, such as F<tcpserver>
|
|
|
22 |
(part of the F<ucspi-tcp> package).
|
|
|
23 |
These packages are used to determine to
|
|
|
24 |
which address a remote host is connecting.
|
|
|
25 |
F<checkvpw> must also be passed the checkpassword-compatible
|
|
|
26 |
authentication data on file descriptor three.
|
|
|
27 |
This can be accomplished by running it from a tool such as
|
|
|
28 |
F<qmail-popup>.
|
|
|
29 |
|
|
|
30 |
F<checkvpw> accepts a command line in the following format:
|
|
|
31 |
|
|
|
32 |
checkvpw [subprogram] [arguments...]
|
|
|
33 |
|
|
|
34 |
If the authentication information is valid, the subprogram is run,
|
|
|
35 |
otherwise F<checkvpw> returns an error to the program that invokes it.
|
|
|
36 |
|
|
|
37 |
If the user name contains the character C<@>, the host name
|
|
|
38 |
reported by F<tcp-env> is replaced by the string following the
|
|
|
39 |
C<@>, and the user name is replaced by the string preceding the
|
|
|
40 |
C<@>.
|
|
|
41 |
If the local host name reported by F<tcp-env> matches one of those
|
|
|
42 |
in F</var/qmail/control/virtualdomains>, F<checkvpw> prepends the
|
|
|
43 |
I<prepend> string associated with the host name to the given user
|
|
|
44 |
name.
|
|
|
45 |
Wildcards in F<virtualdomains> are permitted and are handled in the
|
|
|
46 |
same way F<qmail> handles them (see L<qmail-send>).
|
|
|
47 |
For example, if the line C<.bar.com:bar> appears in the virtual hosts
|
|
|
48 |
file, it matches C<one.two.bar.com> but not C<bar.com>.
|
|
|
49 |
|
|
|
50 |
If the user name resulting from the above step appears in the system
|
|
|
51 |
password file (typically F</etc/passwd>), the user is treated as a
|
|
|
52 |
local user and authenticated with the information from that file.
|
|
|
53 |
If this authentication succeeds, the mail directory is set to the
|
|
|
54 |
subdirectory named on the command line.
|
|
|
55 |
If the user name does not appear in the system password file and is of
|
|
|
56 |
the form C<name-ext> where C<name> does appear in the password
|
|
|
57 |
file, the user is treated as a "virtual" user and authenticated with the
|
|
|
58 |
information from a file named F<passwd> in the user's home directory.
|
|
|
59 |
If this authentication succeeds, the mail directory is set to the
|
|
|
60 |
subdirectory F<users/ext/> in the user's home directory, where
|
|
|
61 |
C<ext> is from the above step.
|
|
|
62 |
|
|
|
63 |
F<checkvpw> also does some rewriting on the arguments of the
|
|
|
64 |
subprogram.
|
|
|
65 |
Any argument matching the string "C<maildir>" (ignoring case) is
|
|
|
66 |
replaced with the full path of the mail directory, as determined by the
|
|
|
67 |
steps above.
|
|
|
68 |
|
|
|
69 |
This program may be invoked in combination with F<qmail-popup> and
|
|
|
70 |
F<qmail-pop3d> from inetd by placing the following line in the
|
|
|
71 |
F</etc/inetd.conf> configuration file (all one line):
|
|
|
72 |
|
|
|
73 |
pop-3 stream tcp nowait root /var/qmail/bin/tcp-env tcp-env -R /var/qmail/bin/qmail-popup <hostname> /usr/bin/checkvpw /var/qmail/bin/qmail-pop3d Maildir/
|
|
|
74 |
|
|
|
75 |
=head1 RETURN VALUE
|
|
|
76 |
|
|
|
77 |
0 if the user is successfully authenticated, nonzero if any error
|
|
|
78 |
occurred. Exit code 1 indicates that a bad password was given, 2
|
|
|
79 |
indicates that the program was used incorrectly, and 111 indicates
|
|
|
80 |
a temporary failure.
|
|
|
81 |
|
|
|
82 |
=head1 ENVIRONMENT
|
|
|
83 |
|
|
|
84 |
F<checkvpw> requires that C<TCPLOCALHOST> be set to the host name of
|
|
|
85 |
the local address of the connection.
|
|
|
86 |
|
|
|
87 |
=head1 SEE ALSO
|
|
|
88 |
|
|
|
89 |
vdeliver(1)
|
|
|
90 |
|
|
|
91 |
=head1 AUTHOR
|
|
|
92 |
|
|
|
93 |
Bruce Guenter <F<bruceg@em.ca>>.
|
|
|
94 |
|