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 </b></td> <td align="left"><input type="text" size="16" name="newu" maxlength="128">@##D</td> </tr> + + <tr> + + <td><b>##X249 </b></td> + + <td align="left"><input type="text" size="16" name="quota" +maxlength="128"> ##X252</td> + + </tr> <tr> <td><b>##X057 </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 </td> + + <td align="left"><input type="password" name="password1" +maxlength="128" size="16"></td> + + </tr> + + <tr> + + <td align="left">##X091 </td> + <td align="left"><input +type="password" name="password2" maxlength="128" size="16"></td> + + </tr> + + <tr> + + <td align="left">##X249 </td> + + <td align="left"><input type="text" name="quota" maxlength="128" +size="16"> ##X251</td> + + </tr> + + + <tr> + + <td align="left">##X092 </td> + + <td align="left"><input type="text" name="gecos" maxlength="128" +size="32" value="##i7"></td> + + </tr> + + <tr> + + <td align="left">##X205 </td> + + <td align="left"><input type="radio" name="cforward" value="disable" +##i0></td> + + </tr> + + <tr> + + <td align="left">##X209 </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 </td> + + <td align="left"><input type="text" +size="50" name="nforward" value="##i2"></td> + + </tr> + + <tr> + + <td align="left">##X210 </td> + + <td align="left"><input type="checkbox" +name="fsaved" ##i3></td> + + </tr> + + </table> + + </td> + + </tr> + + <tr> + + <td align="left">##X212 </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 </td> + + <td align="left"><input type="text" +name="vsubject" size="50" value="##i5"></td> + + </td> + + <tr> + + <td align="left">##X214 </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> + + [ + + <a href="##C/com/showmenu?user=##U&dom=##D&time=##T&">##X001</a> + + ] + + </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 / </font></th> + + <th align="left"><font size="2">##X249</font> </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 </b></td> + + <td align="left"><input type="text" size="16" name="newu" +maxlength="128">@##D</td> + + </tr> ++ + <tr> ++ + <td><b>##X249 </b></td> ++ + <td align="left"><input type="text" size="16" name="quota" +maxlength="128"> ##X252</td> ++ + </tr> + + <tr> + + <td><b>##X057 </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 </td> ++ + <td align="left"><input type="password" name="password1" +maxlength="128" size="16"></td> ++ + </tr> ++ + <tr> ++ + <td align="left">##X091 </td> ++ <td align="left"><input +type="password" name="password2" maxlength="128" size="16"></td> ++ + </tr> ++ + <tr> ++ + <td align="left">##X249 </td> ++ + <td align="left"><input type="text" name="quota" maxlength="128" +size="16"> ##X251</td> ++ + </tr> ++ ++ + <tr> ++ + <td align="left">##X092 </td> ++ + <td align="left"><input type="text" name="gecos" maxlength="128" +size="32" value="##i7"></td> ++ + </tr> ++ + <tr> ++ + <td align="left">##X205 </td> ++ + <td align="left"><input type="radio" name="cforward" value="disable" +##i0></td> ++ + </tr> ++ + <tr> ++ + <td align="left">##X209 </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 </td> ++ + <td align="left"><input type="text" +size="50" name="nforward" value="##i2"></td> ++ + </tr> ++ + <tr> ++ + <td align="left">##X210 </td> ++ + <td align="left"><input type="checkbox" +name="fsaved" ##i3></td> ++ + </tr> ++ + </table> ++ + </td> ++ + </tr> ++ + <tr> ++ + <td align="left">##X212 </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 </td> ++ + <td align="left"><input type="text" +name="vsubject" size="50" value="##i5"></td> ++ + </td> ++ + <tr> ++ + <td align="left">##X214 </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> ++ + [ ++ + <a href="##C/com/showmenu?user=##U&dom=##D&time=##T&">##X001</a> ++ + ] ++ + </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 / </font></th> ++ + <th align="left"><font size="2">##X249</font> </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 / </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, "[ "); @@ -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; +}
msg02884/pgp00000.pgp
Description: PGP signature