diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2004-12-06 14:08:34 +0000 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2004-12-06 14:08:34 +0000 |
commit | 35862246396aa2374bf4463dcba8b39fd84416b8 (patch) | |
tree | 6afa19e260af7ed86420352b1b7af06df104ad6d /doc | |
parent | af93b83370e35f449da922c8b858c6f1b49fbf30 (diff) | |
download | mailutils-35862246396aa2374bf4463dcba8b39fd84416b8.tar.gz mailutils-35862246396aa2374bf4463dcba8b39fd84416b8.tar.bz2 |
Documented mailbox quotas
Diffstat (limited to 'doc')
-rw-r--r-- | doc/texinfo/programs.texi | 212 |
1 files changed, 199 insertions, 13 deletions
diff --git a/doc/texinfo/programs.texi b/doc/texinfo/programs.texi index bd99623cf..b48a11181 100644 --- a/doc/texinfo/programs.texi +++ b/doc/texinfo/programs.texi @@ -268,24 +268,40 @@ name of @acronym{pam} service to be used when authenticating. The following options exist in this group if the package was configured with @option{--enable-sql} option. They take effect only if the @samp{sql} module is used in authentication and/or authorization. -Currently only MySQL is supported. @table @option -@item --sql-getpwnam @var{query} -@acronym{sql} query to retrieve a passwd entry based on username -@item --sql-getpwuid @var{query} -@item --sql-getpass @var{query} -@acronym{sql} query to retrieve a password from the database +@item --sql-interface @var{iface} +Specify @sc{sql} interface to use. @var{Iface} is either @samp{mysql} +or @samp{postgres}. This allows to select @sc{sql} subsystem on +runtime if @code{mailutils} was compiled with support for several +@sc{sql} drivers. + +If this option is omitted, @code{mailutils} will use the first +available @sc{sql} driver. + @item --sql-host @var{name} Name or IP of MySQL server to connect to. + @item --sql-user @var{name} @acronym{sql} user name + @item --sql-passwd @var{string} @acronym{sql} connection password + @item --sql-db @var{string} Name of the database to connect to. + @item --sql-port @var{number} Port to use + +@item --sql-getpwnam @var{query} +@acronym{sql} query to retrieve a passwd entry based on username + +@item --sql-getpwuid @var{query} +@acronym{sql} query to retrieve a passwd entry based on user ID + +@item --sql-getpass @var{query} +@acronym{sql} query to retrieve a password from the database @end table @node encryption @@ -2856,18 +2872,27 @@ not specified, @command{mail.local} first looks into the first line from the standard input. If it starts with @samp{From }, it is assumed to contain a valid envelope. If it does not, @command{mail.local} creates the envelope by using current user name and date. + @item -h @itemx --help -Display this help and exit. +Display usage summary and exit. + @item -L @itemx --license Display @sc{gnu} General Public License and exit. + @item -m @var{path} @itemx --mail-spool @var{path} Specify path to mailspool directory. + @item -q @itemx --quota-db @var{file} -Specify path to mailbox quota database (@pxref{Mailbox Quotas}). +Specify path to DBM mailbox quota database (@pxref{Mailbox Quotas}). + +@item --quota-query +Specify SQL query that should be used to obtain user mailbox +quotas from the SQL database (@pxref{Mailbox Quotas}). + @item -s @var{pattern} @itemx --source @var{pattern} Set name pattern for user-defined mail filters written in Scheme @@ -2968,7 +2993,7 @@ Mlocal, P=/usr/local/libexec/mail.local, F=lsDFMAw5:/|@@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL, T=DNS/RFC822/X-Unix, - A=mail -s %h/.filter.scm -q /etc/mail/userquota $u + A=mail $u @end smallexample To define local mailer in @samp{mc} source file, it will suffice to @@ -2976,8 +3001,7 @@ set: @smallexample define(`LOCAL_MAILER_PATH', `/usr/local/libexec/mail.local') -define(`LOCAL_MAILER_ARGS', - `mail -s %h/.filter.scm -q /etc/mail/userquota $u') +define(`LOCAL_MAILER_ARGS', `mail $u') @end smallexample @node Exim @@ -2991,8 +3015,7 @@ and director in @file{exim.conf}: # transport mail_local_pipe: driver = pipe - command = /usr/local/libexec/mail.local -s %h/.filter.scm \ - -q /etc/mail/userquota $local_part + command = /usr/local/libexec/mail.local $local_part return_path_add delivery_date_add envelope_to_add @@ -3006,6 +3029,169 @@ mail_local: @node Mailbox Quotas @subsection Setting up Mailbox Quotas +Sometimes it is necessary to limit the maximum size of a user's +mailbox. Such maximum size is called @dfn{mailbox quota} for this +user. + +When delivering a message, @command{mail.local} first cheks if +the mailbox quota is specified for the recipient. If so, +@command{mail.local} computes the difference between the quota +value and the actual size of the recipient's mailbox. This difference +represents the maximum size of the message the receipient's mailbox is +able to accomodate. Let's call it @var{msize}. Depending on its value, +@command{mail.local} takes decision on whether to deliver the message. +There are three possible cases: + +@enumerate 1 +@item @var{msize} equals zero. This means that the mailbox size has +reached its limit). In this case the message is not delivered and +the sender receives following notification message: + +@smallexample +@var{user}: mailbox quota exceeded for this recipient +@end smallexample + +@item @var{msize} is less than the size of the message +@command{mail.local} is about to deliver. In this case the message is +not delivered and the sender receives following notification message: + +@smallexample +@var{user}: message would exceed maximum mailbox size for this recipient +@end smallexample + +@item @var{msize} is greater than or equal to the size of the +message. In this case @command{mail.local} does deliver the message. +@end enumerate + +Version @value{VERSION} of @sc{gnu} mailutils is able to retrieve +mailbox quotas from a @sc{dbm} or @sc{sql} database. + +@menu +* DBM Quotas:: Keeping Quotas in DBM Database. +* SQL Quotas:: Keeping Quotas in SQL Database. +@end menu + +@node DBM Quotas +@subsubsection Keeping Quotas in DBM Database + +To use the @sc{dbm} quota database, your copy of @code{mailutils} must +be compiled with @sc{dbm} support (one of @option{--with-gdbm}, +@option{--with-db2}, @option{--with-ndbm}, @option{--with-dbm} options +to @code{configure}). Examine the of +@command{mail.local --show-config-options} if not sure. + +The quota database should have the following structure: + +@table @asis +@item Key +Key represents the user name. Special key @samp{DEFAULT} means default +quota value, i.e. the one to be used if the user is not explicitely +listed in the database. + +@item Value +The mailbox quota for this user. If it is a number, it represents the +maximum mailbox size in bytes. A number may optionally be followed by +@samp{kb} or @samp{mb}, meaning kilobytes and megabytes, respectively. + +A special value @samp{NONE} means no mailbox size limitation for this user. +@end table + +Here is an example of a valid quota database + +@smallexample +# Default quota value: +DEFAULT 5mb + +# Following users have unlimited mailbox size +root NONE +smith NONE + +# Rest of users +plog 26214400 +karin 10mB +@end smallexample + +To use the @sc{dbm} database, specify its full name using @option{-q} +or @samp{--quota-db} in the invocation of @command{mail.local}. For +example, in @command{sendmail} @code{.mc} file: + +@smallexample +define(`LOCAL_MAILER_PATH', `/usr/local/libexec/mail.local') +define(`LOCAL_MAILER_ARGS', `mail -q /etc/mail/quota.db $u') +@end smallexample + +@node SQL Quotas +@subsubsection Keeping Quotas in SQL Database + +Option @option{--quota-query} allows to specify a special query to +retrieve the quota from the database. Currently (as of mailutils +version @value{VERSION}) it is assumed that this table can be accessed +using the same credentials as @sc{sql} authentication tables +(@xref{daemon}, for the detailed discussion of @option{--sql-} options). + +For example, suppose you have the following quota table: + +@smallexample +create table mailbox_quota ( + user_name varchar(32) binary not null, + quota int, + unique (user_name) +); +@end smallexample + +@noindent + +To retrieve the quota for user @code{%u} you may then use the +following query: + +@smallexample +SELECT quota +FROM mailbox_quota +WHERE user_name='%u' +@end smallexample + +There is no special provisions for specifying group quotas, similar to +@samp{DEFAULT} in @sc{dbm} databases. This is because group quotas can +easily be implemented using @sc{sql} language. @command{Mail.local} +always uses the first tuple from the set returned by mailbox quota +query. So, you may add a special entry to the @code{mailbox_quota} +table that would keep the group quota. For the following discussion, +it is important that the @code{user_name} column for this entry be +lexicographically less than any other user name in the table. Let's +suppose the group quota name is @samp{00DEFAULT}. Then the following +query: + +@smallexample +SELECT quota +FROM mailbox_quota +WHERE user_name IN ('%u','00DEFAULT') +ORDER BY user_name DESC +@end smallexample + +@noindent +will return two tuples if user @code{%u} is found in +@code{mailbox_quota}. Due to @code{ORDER} statement, the first tuple +will contain the quota for the user, which will be used by +@command{mail.local}. On the other hand, if user name @code{%u} is not +present in the table, the above query will return a single tuple +containing the group quota. + +To summarize this, here is a working @file{mailutils.rc} entry for +@command{mail.local}: + +@smallexample +:mail.local \ + --sql-db MAILAUTH \ + --sql-host some.host.net \ + --sql-user mail.local \ + --sql-passwd guessme \ + --quota-query "SELECT quota \ + FROM mailbox_quota \ + WHERE user_name IN ('%u','00DEFAULT') \ + ORDER BY user_name DESC" +@end smallexample + + @node Sieve Filters @subsection Implementing User-defined Sieve Mail Filters |