6.0.0-git
2020-09-21

Diff for QuotaHack between 10 and 11

To enable quota using unix 'quota' command.

Enable Quota on your server, assign the required quota to all users in /home folder.


Enable Quota on your server, assign the required quota to all users in /home folder.



AddAdd the following lines in your horde/imp/config/servers.php as a part of  mail server configuration.



<code type="php">

    'quota' => array(

    'driver' => 'command',

      'params' => array(

         'quota_path' => '/usr/bin/quota',

          'grep_path'  => '/bin/grep'

      )

  ),
</code>

</code>



ForFor newer 'quota' command follow the instructions given on this [http://lists.horde.org/archives/dev/Week-of-Mon-20040126/012982.html 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.



<code type="bash">

apache  ALL = NOPASSWD: /usr/bin/du
apache ALL = NOPASSWD: /bin/ls
</code>

apache ALL = NOPASSWD: /bin/ls

</code>



createcreate a folder 'quota' on your server '/' partition



<code type="bash">

mkdir /quota

</code>



to assign quota to any user



<code type="bash">
echo "10000" > /quota/username
</code>

echo "10000" > /quota/username

</code>



ChangeChange permissions of /quota folder and all the files created in it to allow apache to read it.



This

This would give 10MB quota to a user. Give whatever you wish to assign.



Create the following file



/var/www/html/horde/quota.php



<code type="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>';}

</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>';}
}
</code>

</script>';}

}

</code>



ChangeChange 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)



<code type="php">

$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>

?>

<title><?php echo htmlspecialchars($page_title) ?></title>



//--->Add//--->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)): ?>

</code>

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.


I prefer the method given above for several reasons: I do not have to 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.



Do let me know if this was useful or send in any improvements/suggestions.



jigish dot gohil at gmail dot com