To enable quota using unix 'quota' command.
Enable Quota on your server, assign the required quota to all users in /home folder.
Add the following lines in your horde/imp/config/servers.php as a part of mail server configuration.
'quota' => array( 'driver' => 'command', 'params' => array( 'quota_path' => '/usr/bin/quota', 'grep_path' => '/bin/grep' ) ),
For newer 'quota' command follow the instructions given on this link. I have tested that on RHEL 3, it works fine. I am not sure if further work has been done on new format 'quota' command, in case anyone knows of new improved version on the list archive, please update the link here.
Here is another lengthy hack that displays quota on a server not supporting quota, like dovecot or any mail server without using the built in quota feature(If you find this simpler).
Edit your /etc/sudoer, add the following lines. Replace apache with whatever your httpd/apache user is. RHEL/Fedora user is apache.
apache ALL = NOPASSWD: /usr/bin/du apache ALL = NOPASSWD: /bin/ls
create a folder 'quota' on your server '/' partition
mkdir /quota
to assign quota to any user
echo "10000" > /quota/username
Change permissions of /quota folder and all the files created in it to allow apache to read it.
This would give 10MB quota to a user. Give whatever you wish to assign.
Create the following file
/var/www/html/horde/quota.php
<?php { $user=Auth::getAuth(); $usage = `sudo du -s /home/$user/mail | cut -d "/" -f 1` + `sudo du -s /var/spool/mail/$user | cut -d "/" -f 1` ; $usedmb = round($usage / 1000); $quota = `cat /quota/$user`+ 1; $quotamb = round($quota / 1000); $percent = round($usage * 100 / $quota); if ($quota > 1) { echo '<table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td class= "item"><table border="0" cellspacing="0" cellpadding="0" width="100%"><tr>'; echo '<td align="left" class="header">Login: ' . $user . '</td>'; echo '<td align="right" class="header">'; echo "Quota Used $usedmb MB of $quotamb MB ($percent %)"; echo '</td></tr></table></td></tr></table>'; } if ($percent >= 100 && $quota > 2) { echo '<script language="JavaScript" type="text/javascript"><!-- alert("QUOTA EXCEEDED, DELETE EMAILS TO CONTINUE THE USE OF EMAIL FACILITY") // --> </script>';} if ($percent >= 80 && $quota > 2) { echo '<script language="JavaScript" type="text/javascript"><!-- alert("You are nearing your mailbox quota limit, please delete & purge emails to avoid any inconvenience.") // --> </script>';} }
Change the above reflecting your mailserver's folder locations. Above is for dovecot on RHEL 3, with mails in /home/username/mail and /var/spool/mail/username.
Add this in horde/imp/templates/common-headers.inc (line 27, 28,29)
$page_title = $GLOBALS['registry']->get('name'); if (!empty($title)) $page_title .= ' :: ' . $title; if (!empty($refresh_time) && !empty($refresh_url)) { echo "<meta http-equiv="refresh" content="$refresh_time;url=$refresh_url" />n"; } Horde::includeScriptFiles(); ?> <title><?php echo htmlspecialchars($page_title) ?></title> //--->Add the following here <---- <?php include_once HORDE_BASE . '/quota.php'; ?> //---end--- <link href="<?php echo $GLOBALS['registry']->getImageDir()?>/favicon.ico" rel="SHORTCUT ICON" /> <?php if (isset($mailbox_url)): ?>
Using du instead of using cyrus quota on large number of mailboxes is very inefficient, this hack has just advantages: it does not depend on OS/mail server quota. Usage of only mailboxes can be counted regardless of the partitions they are on. Quota assigned are for mailboxes only, they do not apply anywhere else.