Hi folks,

I'm sending a fix to Justin Hopper 'Quota patch for
QmailAdmin 1.0.4'[1] work with QmailAdmin 1.0.6.

Addictionaly, I updated brazilian portuguese (pt-BR)
translation file.

Can someone tell me if there is a CVS server and how
to access it?

[1] http://www.digitaloasys.com/contrib.php

Best regards,

-- 

Dorneles Treméa
Caxias do Sul - RS - Brasil
+55 54 9114 9312 - UIN: 2413568
X3ng Web Technology <http://www.x3ng.com.br>

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS/IT d- s:->: a23 C+++ UBL++++$ P--- L++ E-- W+++
N++ o? K? w+ O M+ V-- PS+ PE- Y-- PGP++ t+ 5 X++ R+
tv+ b(++) DI+ D++ G+>+++ e++>++++ h---- r+++ y+++**
------END GEEK CODE BLOCK------

diff -ruN qmailadmin-1.0.6-original/html/add_user.html 
qmailadmin-1.0.6/html/add_user.html
--- qmailadmin-1.0.6-original/html/add_user.html        2002-10-24 15:58:18.000000000 
-0300
+++ qmailadmin-1.0.6/html/add_user.html 2002-10-24 17:18:04.000000000 -0300
@@ -28,6 +28,10 @@
                                                                                       
                 <td><b>##X002&nbsp;</b></td>
                                                                                       
                 <td align="left"><input type="text" size="16" name="newu" 
maxlength="128">@##D</td>
                                                                                       
         </tr>
+                                                                                      
+          <tr>
+                                                                                      
+                   <td><b>##X249&nbsp;</b></td>
+                                                                                      
+                   <td align="left"><input type="text" size="16" name="quota" 
+maxlength="128">&nbsp;##X252</td>
+                                                                                      
+         </tr>
                                                                                       
         <tr>
                                                                                       
                 <td><b>##X057&nbsp;</b></td>
                                                                                       
                 <td align="left"><input type="password" size="16" name="password1" 
maxlength="128"></td>
diff -ruN qmailadmin-1.0.6-original/html/en qmailadmin-1.0.6/html/en
--- qmailadmin-1.0.6-original/html/en   2002-10-24 15:58:18.000000000 -0300
+++ qmailadmin-1.0.6/html/en    2002-10-24 21:01:16.000000000 -0300
@@ -247,3 +247,10 @@
 246 Digest Subscriber<br>Address
 247 List Digest Subscribers
 248 List of digest email addresses on mailing list
+249 Quota (MB)
+250 Used
+251 (Enter NOQUOTA for unlimited quota)
+252 (Leave empty for unlimited quota)
+253 Limit:
+254 Used:
+
diff -ruN qmailadmin-1.0.6-original/html/mod_user_new.html 
qmailadmin-1.0.6/html/mod_user_new.html
--- qmailadmin-1.0.6-original/html/mod_user_new.html    1969-12-31 21:00:00.000000000 
-0300
+++ qmailadmin-1.0.6/html/mod_user_new.html     2002-10-24 17:18:04.000000000 -0300
@@ -0,0 +1,110 @@
+       </head>
+       <body bgcolor="#ffffff">
+               <center>
+                       <h2>##S</h2>
+                       <!-- Black frame 2 pixels wide -->
+                       <table cellpadding="2" cellspacing="0" border="0" 
+align="center" valign="top" width="600" bgcolor="#000000"><tr><td>
+                               <!-- Frame content -->
+                               <table cellpadding="0" cellspacing="0" border="0" 
+align="center" valign="top" width="100%" bgcolor="#ffffff">
+                                       <!-- Form title -->
+                                       <tr>
+                                               <td bgcolor="#000000" align="center">
+                                                       <font color="#ffffff" size="3">
+                                                       <b>##X109: ##A@##D</b>
+                                                       </font>
+                                               </td>
+                                       </tr>
+                                       <!-- End of form title -->
+                                       <!-- Form content -->
+                                       <tr>
+                                               <td>
+                                                       <table cellpadding="5" 
+cellspacing="1" border="0" width="100%">
+                                                               <!-- Form fields -->
+                                                               <tr>
+                                                                       <td>
+                                                                               <form 
+method="post" name="logon" action="##C/com/modusernow">
+                                                                                      
+ <table cellpadding="0" cellspacing="0" border="0">
+                                                                                      
+         <tr>
+                                                                                      
+                 <td align="left">##X110&nbsp;</td>
+                                                                                      
+                 <td align="left"><input type="password" name="password1" 
+maxlength="128" size="16"></td>
+                                                                                      
+         </tr>
+                                                                                      
+         <tr>
+                                                                                      
+                 <td align="left">##X091&nbsp;</td>
+                                                    <td align="left"><input 
+type="password" name="password2" maxlength="128" size="16"></td>
+                                                                                      
+         </tr>
+                                                                                      
+          <tr>
+                                                                                      
+                  <td align="left">##X249&nbsp;</td>
+                                                                                      
+                  <td align="left"><input type="text" name="quota" maxlength="128" 
+size="16">&nbsp;##X251</td>
+                                                                                      
+          </tr>
+
+                                                                                      
+         <tr>
+                                                                                      
+                 <td align="left">##X092&nbsp;</td>
+                                                                                      
+                 <td align="left"><input type="text" name="gecos" maxlength="128" 
+size="32" value="##i7"></td>
+                                                                                      
+         </tr>
+                                                                                      
+         <tr>
+                                                                                      
+                 <td align="left">##X205&nbsp;</td>
+                                                                                      
+                 <td align="left"><input type="radio" name="cforward" value="disable" 
+##i0></td>
+                                                                                      
+         </tr>
+                                                                                      
+         <tr>
+                                                                                      
+                 <td align="left">##X209&nbsp;</td>
+                                                                                      
+                 <td align="left"><input type="radio" name="cforward" value="forward" 
+##i1></td>
+                                                                                      
+         </tr>
+                                                                                      
+         <tr>
+                                                                                      
+                 <td colspan="2">
+                                                                                      
+                         <table id="AutoNumber1" cellspacing="0" cellpadding="0" 
+border="0">
+                                                                                      
+                                 <tr>
+                                                                                      
+                                         <td align="left">##X211&nbsp;</td>
+                                                                                      
+                                         <td align="left"><input type="text" 
+size="50" name="nforward" value="##i2"></td>
+                                                                                      
+                                 </tr>
+                                                                                      
+                                 <tr>
+                                                                                      
+                                         <td align="left">##X210&nbsp;</td>
+                                                                                      
+                                         <td align="left"><input type="checkbox" 
+name="fsaved" ##i3></td>
+                                                                                      
+                                 </tr>
+                                                                                      
+                         </table>
+                                                                                      
+                 </td>
+                                                                                      
+         </tr>
+                                                                                      
+         <tr>
+                                                                                      
+                 <td align="left">##X212&nbsp;</td>
+                                                                                      
+                 <td align="left"><input type="radio" name="cforward" 
+value="vacation" ##i4></td>
+                                                                                      
+         </tr>
+                                                                                      
+         <tr>
+                                                                                      
+                 <td colspan="2">
+                                                                                      
+                         <table id="AutoNumber2" cellspacing="0" cellpadding="0" 
+border="0">
+                                                                                      
+                                 <tr>
+                                                                                      
+                                         <td align="left">##X213&nbsp;</td>
+                                                                                      
+                                         <td align="left"><input type="text" 
+name="vsubject" size="50" value="##i5"></td>
+                                                                                      
+                                 </td>
+                                                                                      
+                                 <tr>
+                                                                                      
+                                         <td align="left">##X214&nbsp;</td>
+                                                                                      
+                                         <td align="left"><textarea name="vmessage" 
+rows="10" cols="50">##i6</textarea></td>
+                                                                                      
+                                 </tr>
+                                                                                      
+                         </table>
+                                                                                      
+                 </td>
+                                                                                      
+         </tr>
+                                                                                      
+ </table>
+                                                                                      
+ <input type="hidden" name="modu" value="##A">
+                                                                                      
+ <input type="hidden" name="do.login" value="ChangePassword">
+                                                                                      
+ <input type="hidden" name="user" value="##U">
+                                                                                      
+ <input type="hidden" name="dom" value="##D">
+                                                                                      
+ <input type="hidden" name="time" value="##T">
+                                                                                      
+ <input type="submit" name="##X111" value="##X111">
+                                                                               </form>
+                                                                               <div 
+align="right">
+                                                                                      
+ <hr>
+                                                                                      
+ <font size="2"><b>
+                                                                                      
+ [&nbsp;
+                                                                                      
+ <a href="##C/com/showmenu?user=##U&dom=##D&time=##T&">##X001</a>
+                                                                                      
+ &nbsp;]
+                                                                                      
+ </b></font>
+                                                                               </div>
+                                                                       </td>
+                                                               </tr>
+                                                               <!-- End of form 
+fields -->
+                                                       </table>
+                                               </td>
+                                       </tr>
+                               </table>
+                               <!-- End of frame content -->
+                       </td></tr></table>
+                       <!-- End of black frame -->
+               </center>
diff -ruN qmailadmin-1.0.6-original/html/pt-BR qmailadmin-1.0.6/html/pt-BR
--- qmailadmin-1.0.6-original/html/pt-BR        2002-10-24 15:58:18.000000000 -0300
+++ qmailadmin-1.0.6/html/pt-BR 2002-10-24 21:01:24.000000000 -0300
@@ -228,7 +228,29 @@
 227 Resumo
 228 Total:
 229 ilimitado
-230 Total de assinantes:
-231 No Mailing Lists to Display
-232 No Aliases/Forwards to Display
-233 No Mail Robots to Display
+230 Total de Assinantes:
+231 Nenhum lista de distribuição para exibir
+232 Nenhum Apelido/Redirecionamento para exibir
+233 Nenhum Robô para exibir
+234 Por favor digite a senha
+235 Definir a conta pega-tudo como excluír 
+236 Ação padrão da conta pega-tudo: excluir 
+237 Cadastrar<br>Assinante Digest                 
+238 Excluir<br>Assinante Digest
+239 Exibir<br>Assinante Digest
+240 Endereço de Email adicionado como assinante digest na lista de distribuição
+241 Cadastrar Assinante Digest na lista de distribuição
+242 excluído da lista de distribuição          
+243 Excluir assinante digest da lista de distribuição
+244 Total de Assinantes Digest:      
+245 Excluir<br>Assinante Digest                  
+246 Assinante Digest<br>Endereço              
+247 Listar Assinantes Digest
+248 Lista de endereços dos assinantes digest na lista de distribuição
+249 Quota (MB)
+250 Usado               
+251 (Digite NOQUOTA para quota ilimitada)
+252 (Deixe em branco para quota ilimitada)
+253 Limite:
+254 Utilizado:
+
diff -ruN qmailadmin-1.0.6-original/html/show_users.html 
qmailadmin-1.0.6/html/show_users.html
--- qmailadmin-1.0.6-original/html/show_users.html      2002-10-24 15:58:18.000000000 
-0300
+++ qmailadmin-1.0.6/html/show_users.html       2002-10-24 17:18:04.000000000 -0300
@@ -31,6 +31,8 @@
                                                                                       
 <tr bgcolor="#cccccc">
                                                                                       
         <th align="left"><font size="2">##X002</font></th>
                                                                                       
         <th align="left"><font size="2">##X063</font></th>
+                                                                                      
+          <th align="right"><font size="2">##X250&nbsp;/&nbsp;</font></th>
+                                                                                      
+          <th align="left"><font size="2">##X249</font>&nbsp;&nbsp;</th>
                                                                                       
         <th><font size="2">##X064</font></th>
                                                                                       
         <th><font size="2">##X065</font></th>
                                                                                       
         <th><font size="2">##X066</font></th>
diff -ruN qmailadmin-1.0.6-original/qmailadmin.c qmailadmin-1.0.6/qmailadmin.c
--- qmailadmin-1.0.6-original/qmailadmin.c      2002-10-24 15:58:18.000000000 -0300
+++ qmailadmin-1.0.6/qmailadmin.c       2002-10-24 17:18:04.000000000 -0300
@@ -33,6 +33,7 @@
 char Domain[MAX_BUFF];
 char Password[MAX_BUFF];
 char Gecos[MAX_BUFF];
+char Quota[MAX_BUFF];
 char Time[MAX_BUFF];
 char ActionUser[MAX_BUFF];
 char Newu[MAX_BUFF];
@@ -276,6 +277,7 @@
   memset(Username,0, MAX_BUFF);
   memset(Domain,0, MAX_BUFF);
   memset(Password,0, MAX_BUFF);
+  memset(Quota,0, MAX_BUFF);
   memset(Time,0, MAX_BUFF);
   memset(ActionUser,0, MAX_BUFF);
   memset(Newu,0, MAX_BUFF);
diff -ruN qmailadmin-1.0.6-original/qmailadmin.h qmailadmin-1.0.6/qmailadmin.h
--- qmailadmin-1.0.6-original/qmailadmin.h      2002-10-24 15:58:18.000000000 -0300
+++ qmailadmin-1.0.6/qmailadmin.h       2002-10-24 17:18:04.000000000 -0300
@@ -47,3 +47,8 @@
 
 char *get_html_text( char *index );
 int open_lang( char *lang);
+
+char *get_quota_used(char*);           //jhopper prototype
+int quota_to_bytes(char[], char*);     //jhopper prototype
+int quota_to_megabytes(char[], char*); //jhopper prototype
+double get_du(char*);                  //jhopper prototype
diff -ruN qmailadmin-1.0.6-original/qmailadminx.h qmailadmin-1.0.6/qmailadminx.h
--- qmailadmin-1.0.6-original/qmailadminx.h     2002-10-24 15:58:18.000000000 -0300
+++ qmailadmin-1.0.6/qmailadminx.h      2002-10-24 17:18:04.000000000 -0300
@@ -20,6 +20,7 @@
 extern char Domain[MAX_BUFF];
 extern char Password[MAX_BUFF];
 extern char Gecos[MAX_BUFF];
+extern char Quota[MAX_BUFF];
 extern char Time[MAX_BUFF];
 extern char ActionUser[MAX_BUFF];
 extern char Newu[MAX_BUFF];
diff -ruN qmailadmin-1.0.6-original/quotafix-patch.diff 
qmailadmin-1.0.6/quotafix-patch.diff
--- qmailadmin-1.0.6-original/quotafix-patch.diff       1969-12-31 21:00:00.000000000 
-0300
+++ qmailadmin-1.0.6/quotafix-patch.diff        2002-10-24 17:18:04.000000000 -0300
@@ -0,0 +1,193 @@
+diff -urN ../qmailadmin-1.0.4/html/add_user.html ./html/add_user.html
+--- ../qmailadmin-1.0.4/html/add_user.html     Thu Feb 28 18:32:58 2002
++++ ./html/add_user.html       Mon May  6 23:10:22 2002
+@@ -28,6 +28,10 @@
+                                                                                      
+                 <td><b>##X002&nbsp;</b></td>
+                                                                                      
+                 <td align="left"><input type="text" size="16" name="newu" 
+maxlength="128">@##D</td>
+                                                                                      
+         </tr>
++                                                                                     
+           <tr>
++                                                                                     
+                    <td><b>##X249&nbsp;</b></td>
++                                                                                     
+                    <td align="left"><input type="text" size="16" name="quota" 
+maxlength="128">&nbsp;##X252</td>
++                                                                                     
+         </tr>
+                                                                                      
+         <tr>
+                                                                                      
+                 <td><b>##X057&nbsp;</b></td>
+                                                                                      
+                 <td align="left"><input type="password" size="16" name="password1" 
+maxlength="128"></td>
+diff -urN ../qmailadmin-1.0.4/html/en ./html/en
+--- ../qmailadmin-1.0.4/html/en        Fri Mar 15 08:26:14 2002
++++ ./html/en  Mon May  6 23:10:01 2002
+@@ -247,3 +247,7 @@
+ 246 Digest Subscriber<br>Address
+ 247 List Digest Subscribers
+ 248 List of digest email addresses on mailing list
++249 Quota (MB)
++250 Used
++251 (Enter NOQUOTA for unlimited quota)
++252 (Leave empty for unlimited quota)
+diff -urN ../qmailadmin-1.0.4/html/mod_user_new.html ./html/mod_user_new.html
+--- ../qmailadmin-1.0.4/html/mod_user_new.html Wed Dec 31 16:00:00 1969
++++ ./html/mod_user_new.html   Mon May  6 23:07:34 2002
+@@ -0,0 +1,110 @@
++      </head>
++      <body bgcolor="#ffffff">
++              <center>
++                      <h2>##S</h2>
++                      <!-- Black frame 2 pixels wide -->
++                      <table cellpadding="2" cellspacing="0" border="0" 
+align="center" valign="top" width="600" bgcolor="#000000"><tr><td>
++                              <!-- Frame content -->
++                              <table cellpadding="0" cellspacing="0" border="0" 
+align="center" valign="top" width="100%" bgcolor="#ffffff">
++                                      <!-- Form title -->
++                                      <tr>
++                                              <td bgcolor="#000000" align="center">
++                                                      <font color="#ffffff" size="3">
++                                                      <b>##X109: ##A@##D</b>
++                                                      </font>
++                                              </td>
++                                      </tr>
++                                      <!-- End of form title -->
++                                      <!-- Form content -->
++                                      <tr>
++                                              <td>
++                                                      <table cellpadding="5" 
+cellspacing="1" border="0" width="100%">
++                                                              <!-- Form fields -->
++                                                              <tr>
++                                                                      <td>
++                                                                              <form 
+method="post" name="logon" action="##C/com/modusernow">
++                                                                                     
+ <table cellpadding="0" cellspacing="0" border="0">
++                                                                                     
+         <tr>
++                                                                                     
+                 <td align="left">##X110&nbsp;</td>
++                                                                                     
+                 <td align="left"><input type="password" name="password1" 
+maxlength="128" size="16"></td>
++                                                                                     
+         </tr>
++                                                                                     
+         <tr>
++                                                                                     
+                 <td align="left">##X091&nbsp;</td>
++                                                    <td align="left"><input 
+type="password" name="password2" maxlength="128" size="16"></td>
++                                                                                     
+         </tr>
++                                                                                     
+           <tr>
++                                                                                     
+                   <td align="left">##X249&nbsp;</td>
++                                                                                     
+                   <td align="left"><input type="text" name="quota" maxlength="128" 
+size="16">&nbsp;##X251</td>
++                                                                                     
+           </tr>
++
++                                                                                     
+         <tr>
++                                                                                     
+                 <td align="left">##X092&nbsp;</td>
++                                                                                     
+                 <td align="left"><input type="text" name="gecos" maxlength="128" 
+size="32" value="##i7"></td>
++                                                                                     
+         </tr>
++                                                                                     
+         <tr>
++                                                                                     
+                 <td align="left">##X205&nbsp;</td>
++                                                                                     
+                 <td align="left"><input type="radio" name="cforward" value="disable" 
+##i0></td>
++                                                                                     
+         </tr>
++                                                                                     
+         <tr>
++                                                                                     
+                 <td align="left">##X209&nbsp;</td>
++                                                                                     
+                 <td align="left"><input type="radio" name="cforward" value="forward" 
+##i1></td>
++                                                                                     
+         </tr>
++                                                                                     
+         <tr>
++                                                                                     
+                 <td colspan="2">
++                                                                                     
+                         <table id="AutoNumber1" cellspacing="0" cellpadding="0" 
+border="0">
++                                                                                     
+                                 <tr>
++                                                                                     
+                                         <td align="left">##X211&nbsp;</td>
++                                                                                     
+                                         <td align="left"><input type="text" 
+size="50" name="nforward" value="##i2"></td>
++                                                                                     
+                                 </tr>
++                                                                                     
+                                 <tr>
++                                                                                     
+                                         <td align="left">##X210&nbsp;</td>
++                                                                                     
+                                         <td align="left"><input type="checkbox" 
+name="fsaved" ##i3></td>
++                                                                                     
+                                 </tr>
++                                                                                     
+                         </table>
++                                                                                     
+                 </td>
++                                                                                     
+         </tr>
++                                                                                     
+         <tr>
++                                                                                     
+                 <td align="left">##X212&nbsp;</td>
++                                                                                     
+                 <td align="left"><input type="radio" name="cforward" 
+value="vacation" ##i4></td>
++                                                                                     
+         </tr>
++                                                                                     
+         <tr>
++                                                                                     
+                 <td colspan="2">
++                                                                                     
+                         <table id="AutoNumber2" cellspacing="0" cellpadding="0" 
+border="0">
++                                                                                     
+                                 <tr>
++                                                                                     
+                                         <td align="left">##X213&nbsp;</td>
++                                                                                     
+                                         <td align="left"><input type="text" 
+name="vsubject" size="50" value="##i5"></td>
++                                                                                     
+                                 </td>
++                                                                                     
+                                 <tr>
++                                                                                     
+                                         <td align="left">##X214&nbsp;</td>
++                                                                                     
+                                         <td align="left"><textarea name="vmessage" 
+rows="10" cols="50">##i6</textarea></td>
++                                                                                     
+                                 </tr>
++                                                                                     
+                         </table>
++                                                                                     
+                 </td>
++                                                                                     
+         </tr>
++                                                                                     
+ </table>
++                                                                                     
+ <input type="hidden" name="modu" value="##A">
++                                                                                     
+ <input type="hidden" name="do.login" value="ChangePassword">
++                                                                                     
+ <input type="hidden" name="user" value="##U">
++                                                                                     
+ <input type="hidden" name="dom" value="##D">
++                                                                                     
+ <input type="hidden" name="time" value="##T">
++                                                                                     
+ <input type="submit" name="##X111" value="##X111">
++                                                                              </form>
++                                                                              <div 
+align="right">
++                                                                                     
+ <hr>
++                                                                                     
+ <font size="2"><b>
++                                                                                     
+ [&nbsp;
++                                                                                     
+ <a href="##C/com/showmenu?user=##U&dom=##D&time=##T&">##X001</a>
++                                                                                     
+ &nbsp;]
++                                                                                     
+ </b></font>
++                                                                              </div>
++                                                                      </td>
++                                                              </tr>
++                                                              <!-- End of form 
+fields -->
++                                                      </table>
++                                              </td>
++                                      </tr>
++                              </table>
++                              <!-- End of frame content -->
++                      </td></tr></table>
++                      <!-- End of black frame -->
++              </center>
+diff -urN ../qmailadmin-1.0.4/html/show_users.html ./html/show_users.html
+--- ../qmailadmin-1.0.4/html/show_users.html   Thu Feb 28 18:32:58 2002
++++ ./html/show_users.html     Mon May  6 22:51:19 2002
+@@ -31,6 +31,8 @@
+                                                                                      
+ <tr bgcolor="#cccccc">
+                                                                                      
+         <th align="left"><font size="2">##X002</font></th>
+                                                                                      
+         <th align="left"><font size="2">##X063</font></th>
++                                                                                     
+           <th align="right"><font size="2">##X250&nbsp;/&nbsp;</font></th>
++                                                                                     
+           <th align="left"><font size="2">##X249</font>&nbsp;&nbsp;</th>
+                                                                                      
+         <th><font size="2">##X064</font></th>
+                                                                                      
+         <th><font size="2">##X065</font></th>
+                                                                                      
+         <th><font size="2">##X066</font></th>
+diff -urN ../qmailadmin-1.0.4/qmailadmin.c ./qmailadmin.c
+--- ../qmailadmin-1.0.4/qmailadmin.c   Wed Mar 27 13:56:28 2002
++++ ./qmailadmin.c     Mon May  6 21:44:15 2002
+@@ -33,6 +33,7 @@
+ char Domain[MAX_BUFF];
+ char Password[MAX_BUFF];
+ char Gecos[MAX_BUFF];
++char Quota[MAX_BUFF];
+ char Time[MAX_BUFF];
+ char ActionUser[MAX_BUFF];
+ char Newu[MAX_BUFF];
+@@ -276,6 +277,7 @@
+   memset(Username,0, MAX_BUFF);
+   memset(Domain,0, MAX_BUFF);
+   memset(Password,0, MAX_BUFF);
++  memset(Quota,0, MAX_BUFF);
+   memset(Time,0, MAX_BUFF);
+   memset(ActionUser,0, MAX_BUFF);
+   memset(Newu,0, MAX_BUFF);
+diff -urN ../qmailadmin-1.0.4/qmailadmin.h ./qmailadmin.h
+--- ../qmailadmin-1.0.4/qmailadmin.h   Wed Mar 27 13:55:55 2002
++++ ./qmailadmin.h     Thu May  9 10:34:53 2002
+@@ -47,3 +47,8 @@
+ 
+ char *get_html_text( char *index );
+ int open_lang( char *lang);
++
++char *get_quota_used(char*);           //jhopper prototype
++int quota_to_bytes(char[], char*);     //jhopper prototype
++int quota_to_megabytes(char[], char*); //jhopper prototype
++double get_du(char*);                  //jhopper prototype
+diff -urN ../qmailadmin-1.0.4/qmailadminx.h ./qmailadminx.h
+--- ../qmailadmin-1.0.4/qmailadminx.h  Wed Mar 27 13:55:51 2002
++++ ./qmailadminx.h    Mon May  6 22:56:26 2002
+@@ -20,6 +20,7 @@
+ extern char Domain[MAX_BUFF];
+ extern char Password[MAX_BUFF];
+ extern char Gecos[MAX_BUFF];
++extern char Quota[MAX_BUFF];
+ extern char Time[MAX_BUFF];
+ extern char ActionUser[MAX_BUFF];
+ extern char Newu[MAX_BUFF];
diff -ruN qmailadmin-1.0.6-original/template.c qmailadmin-1.0.6/template.c
--- qmailadmin-1.0.6-original/template.c        2002-10-24 15:58:18.000000000 -0300
+++ qmailadmin-1.0.6/template.c 2002-10-24 21:22:11.000000000 -0300
@@ -57,7 +57,9 @@
  int testint;
  char *tmpstr;
  struct stat mystat;
-    
+ char *quotaptr;
+ char qconvert[11];
+ char *qnote = " MB";
 
   if (strstr(filename, "/")!= NULL||strstr(filename,"..")!=NULL) {
     printf("warning: invalid file name %s\n", filename );
@@ -195,14 +197,25 @@
                   get_html_text("080"));
               }
             } else {
+             // Code added by jhopper
+              struct vqpasswd *vpw;
+              vpw = vauth_getpw(Username, Domain);
+
                fprintf(actout, 
        "<a href=\"%s/com/moduser?user=%s&time=%i&dom=%s&moduser=%s\">",
                  CGIPATH,Username,Mytime,Domain,Username);
                fprintf(actout, 
        "<font size=\"2\" color=\"#000000\"><b>%s %s</b></font></a><br><br>",
                  get_html_text("111"), Username);
-             }
 
+              // Code added by jhopper
+              if (strncmp(vpw->pw_shell, "NOQUOTA", 2) != 0) { 
+quota_to_megabytes(qconvert, vpw->pw_shell); }
+              else { sprintf(qconvert, "unlimited"); qnote = ""; }
+              fprintf(actout, "<font size=\"2\" color=\"#000000\"><b>Quota:</b><br>%s 
+%s %s", get_html_text("253"), qconvert, qnote);
+              fprintf(actout, "<br>%s ", get_html_text("254"));
+              quotaptr = get_quota_used(vpw->pw_dir);
+              fprintf(actout, "%s MB</font><br>", quotaptr);
+             }
              if (AdminType == DOMAIN_ADMIN) {
                fprintf(actout, "<br>");
                fprintf(actout, 
diff -ruN qmailadmin-1.0.6-original/user.c qmailadmin-1.0.6/user.c
--- qmailadmin-1.0.6-original/user.c    2002-10-24 15:58:18.000000000 -0300
+++ qmailadmin-1.0.6/user.c     2002-10-24 17:18:04.000000000 -0300
@@ -65,13 +65,15 @@
  struct vqpasswd *pw;
  int totalpages;
  int bounced;
+ int colspan = 7;
+ char qconvert[11];
 
   if (MaxPopAccounts == 0) return 0;
 
   /* Get the default catchall box name */
   if ((fs=fopen(".qmail-default","r")) == NULL) {
-    fprintf(actout,"<tr><td colspan=\"5\">%s .qmail-default</tr></td>", 
-      get_html_text("144"));
+    fprintf(actout,"<tr><td colspan=\"%i\">%s .qmail-default</tr></td>", 
+      colspan, get_html_text("144"));
     vclose();
     exit(0);
   }
@@ -133,8 +135,8 @@
   }
 
   if (pw == NULL) {
-    fprintf(actout, "<tr><td colspan=\"5\" bgcolor=%s>%s</td></tr>\n", 
-      get_color_text("000"), get_html_text("131"));
+    fprintf(actout, "<tr><td colspan=\"%i\" bgcolor=%s>%s</td></tr>\n", 
+      colspan, get_color_text("000"), get_html_text("131"));
       moreusers = 0;
     } else {
       while ((pw != NULL) && ((k < MAXUSERSPERPAGE + startnumber) ||  
@@ -146,6 +148,17 @@
           fprintf(actout, "<tr bgcolor=%s>", get_color_text("000"));
           fprintf(actout, "<td align=\"left\">%s</td>", pw->pw_name);
           fprintf(actout, "<td align=\"left\">%s</td>", pw->pw_gecos);
+
+         // Code added by jhopper
+         fprintf(actout, "<td align=\"right\">%s&nbsp;/&nbsp;</td>", 
+get_quota_used(pw->pw_dir));
+          if (strncmp(pw->pw_shell, "NOQUOTA", 2) != 0) {
+              if(quota_to_megabytes(qconvert, pw->pw_shell)) { 
+                  fprintf(actout, "<td align=\"left\">(BAD)</td>");
+              }
+              else { fprintf(actout, "<td align=\"left\">%s</td>", qconvert); }
+          }
+          else { fprintf(actout, "<td align=\"left\">unlimited</td>"); }
+
           fprintf(actout, "<td align=\"center\">");
           fprintf(actout, "<a 
href=\"%s/com/moduser?user=%s&dom=%s&time=%d&moduser=%s\">",
             CGIPATH,user,dom,mytime,pw->pw_name);
@@ -220,7 +233,7 @@
     if (AdminType == DOMAIN_ADMIN) {
 #ifdef USER_INDEX
       fprintf(actout, "<tr bgcolor=%s>", get_color_text("000"));
-      fprintf(actout, "<td colspan=\"5\" align=\"center\">");
+      fprintf(actout, "<td colspan=\"%i\" align=\"center\">", colspan);
       fprintf(actout, "<hr>");
       fprintf(actout, "<b>%s</b>", get_html_text("133"));
       fprintf(actout, "<br>");
@@ -237,7 +250,7 @@
       fprintf(actout, "</tr>\n");
 
       fprintf(actout, "<tr bgcolor=%s>", get_color_text("000"));
-      fprintf(actout, "<td colspan=\"5\">");
+      fprintf(actout, "<td colspan=\"%i\">", colspan);
       fprintf(actout, "<table border=\"0\" cellpadding=\"3\" cellspacing=\"0\" 
width=\"100%\"><tr><td align=\"center\"><br>");
       fprintf(actout, "<form method=\"get\" action=\"%s/com/showusers\">", 
         CGIPATH);
@@ -257,7 +270,7 @@
 #endif
 
       fprintf(actout, "<tr bgcolor=%s>", get_color_text("000"));
-      fprintf(actout, "<td colspan=\"5\" align=\"right\">");
+      fprintf(actout, "<td colspan=\"%i\" align=\"right\">", colspan);
 #ifdef USER_INDEX
       fprintf(actout, "<font size=\"2\"><b>");
       fprintf(actout, "[&nbsp;");
@@ -328,7 +341,8 @@
     vclose();
     exit(0);
   }
-  send_template( "mod_user.html" );
+  if (AdminType == DOMAIN_ADMIN) { send_template( "mod_user_new.html" ); }
+  else { send_template( "mod_user.html" ); }
 } 
 
 addusernow()
@@ -340,8 +354,11 @@
  char *tmp;
  char *email;
  char **arguments;
+ char tmpstr[MAX_BUFF];
+ char qconvert[11];
  int pid;
  int i;
+ int tmpint;
  int error;
  struct vqpasswd *mypw;
 
@@ -383,6 +400,9 @@
     vclose();
     exit(0);
   } 
+  // Coded added by jhopper
+  GetValue(TmpCGI, Quota, "quota=", MAX_BUFF);
+
   GetValue(TmpCGI,Password1, "password1=", MAX_BUFF);
   GetValue(TmpCGI,Password2, "password2=", MAX_BUFF);
   if ( strncmp( Password1, Password2, MAX_BUFF ) != 0 ) {
@@ -459,6 +479,10 @@
     if( DisableRelay > 0 )  mypw->pw_gid |= NO_RELAY; 
     if( DefaultQuota[0]!= 0 ) mypw->pw_shell = DefaultQuota;
 
+    // Code added by jhopper
+    if(quota_to_bytes(qconvert, Quota)) { sprintf(StatusMessage, "Bad quota 
+supplied"); }
+    else { vsetuserquota( Newu, Domain, qconvert ); }
+
     /* update the user information */
     if ( vauth_setpw( mypw, Domain ) != VA_SUCCESS ) {
 
@@ -751,6 +775,8 @@
  struct vqpasswd *vpw=NULL;
  static char box[50];
  static char NewBuf[156];
+ char *quotaptr;
+ char qconvert[11];
  int count;
  FILE *fs;
 
@@ -777,6 +803,29 @@
     }
   }
 
+  // Code added by jhopper
+  if (AdminType == DOMAIN_ADMIN) {
+      GetValue(TmpCGI, Quota, "quota=", MAX_BUFF);
+      if (strlen(Quota) == 0) { }  // Do nothing
+      else if ((strncmp(Quota, "NOQUOTA", 2)) == 0) {
+          if (vsetuserquota( ActionUser, Domain, Quota )) {
+              sprintf(StatusMessage, "Invalid quota");
+          }
+          else { sprintf(StatusMessage, "Quota set to %s", Quota); }
+      }
+      else if (atoi(Quota)) { 
+          quotaptr = Quota;
+          if (quota_to_bytes(qconvert, quotaptr)) { sprintf(StatusMessage, "Invalid 
+quota"); }
+          else {
+              if(vsetuserquota( ActionUser, Domain, qconvert )) {
+                  sprintf(StatusMessage, "Invalid quota");
+              }
+              else { sprintf(StatusMessage, "Quota set to %s bytes", qconvert); }
+          }
+      }
+      else { sprintf(StatusMessage, "Invalid quota"); }
+  }
+
   GetValue(TmpCGI,Gecos, "gecos=", MAX_BUFF);
   if ( strlen( Gecos ) != 0 ) {
     vpw = vauth_getpw(ActionUser, Domain); 
diff -ruN qmailadmin-1.0.6-original/util.c qmailadmin-1.0.6/util.c
--- qmailadmin-1.0.6-original/util.c    2002-10-24 15:58:18.000000000 -0300
+++ qmailadmin-1.0.6/util.c     2002-10-24 17:18:04.000000000 -0300
@@ -24,6 +24,7 @@
 #include <unistd.h>
 #include <pwd.h>
 #include <dirent.h>
+#include <fts.h>
 #include "config.h"
 #include "qmailadmin.h"
 #include "qmailadminx.h"
@@ -252,3 +253,59 @@
   }
   return("");
 }
+char *get_quota_used(char *dir) {
+    char *tmpstr;
+    char tmpbuff[MAX_BUFF];
+    double size;
+
+    size = get_du(dir);
+    if (size != 0) { 
+        size = size / 1048576;  // Convert to MBs.
+    }
+    sprintf(tmpbuff, "%-2.2f", size);
+    tmpstr = tmpbuff;
+    return tmpstr;
+}
+int quota_to_bytes(char returnval[], char *quota) {
+    char *tmpstr;
+    unsigned long tmpint;
+
+    if (quota == NULL) { return 1; }
+    if (tmpint = atoi(quota)) { tmpint = tmpint * 1048576; }
+    else { return 1; }
+    sprintf(returnval, "%i", tmpint);
+    return 0;
+}
+int quota_to_megabytes(char returnval[], char *quota) {
+    char *tmpstr;
+    unsigned long tmpint;
+
+    if (quota == NULL) { return 1; }
+    if (tmpint = atoi(quota)) {
+         if (tmpint != 0) { tmpint = tmpint / 1048576; }
+    }
+    else { return 0; }
+    sprintf(returnval, "%i", tmpint);
+    return 0;
+}
+double get_du(char *path) {
+    FTS *fileheir;
+    FTSENT *fsentry;
+    char **dirnames;
+    ssize_t size = 0;
+
+    dirnames = malloc(2 * sizeof(char*));
+    dirnames[0] = path;
+    dirnames[1] = NULL;
+
+    fileheir = fts_open(dirnames, FTS_PHYSICAL, NULL);
+    while ((fsentry = fts_read(fileheir)) != NULL) {
+        if (fsentry->fts_number == 0) {
+            size = size + fsentry->fts_statp->st_size;
+            fsentry->fts_number = 1;
+        }
+    }
+    fts_close(fileheir);
+    free(dirnames);
+    return size;
+}

Attachment: msg02884/pgp00000.pgp
Description: PGP signature

Reply via email to