226 lines
8.8 KiB
Diff
226 lines
8.8 KiB
Diff
|
diff -uNr postfix-2.5.6-vda-ng.orig/src/util/vbuf_print.c postfix-2.5.6/src/util/vbuf_print.c
|
||
|
--- postfix-2.5.6-vda-ng.orig/src/util/vbuf_print.c 2006-12-10 18:13:07.000000000 +0100
|
||
|
+++ postfix-2.5.6/src/util/vbuf_print.c 2008-08-25 12:20:41.032890016 +0200
|
||
|
@@ -193,8 +193,13 @@
|
||
|
msg_warn("%s: bad precision %d in %.50s", myname, prec, format);
|
||
|
prec = 0;
|
||
|
}
|
||
|
- if ((long_flag = (*cp == 'l')) != 0)/* long whatever */
|
||
|
+ if ((long_flag = (*cp == 'l')) != 0) { /* long whatever */
|
||
|
VSTRING_ADDCH(fmt, *cp++);
|
||
|
+ if (*cp == 'l') { /* we have long long param */
|
||
|
+ long_flag = 2;
|
||
|
+ VSTRING_ADDCH(fmt, *cp++);
|
||
|
+ }
|
||
|
+ }
|
||
|
if (*cp == 0) /* premature end, punt */
|
||
|
break;
|
||
|
VSTRING_ADDCH(fmt, *cp); /* type (checked below) */
|
||
|
@@ -226,8 +231,10 @@
|
||
|
case 'X':
|
||
|
if (VBUF_SPACE(bp, (width > prec ? width : prec) + INT_SPACE))
|
||
|
return (bp);
|
||
|
- if (long_flag)
|
||
|
+ if (long_flag == 1)
|
||
|
sprintf((char *) bp->ptr, vstring_str(fmt), va_arg(ap, long));
|
||
|
+ else if (long_flag == 2)
|
||
|
+ sprintf((char *) bp->ptr, vstring_str(fmt), va_arg(ap, long long));
|
||
|
else
|
||
|
sprintf((char *) bp->ptr, vstring_str(fmt), va_arg(ap, int));
|
||
|
VBUF_SKIP(bp);
|
||
|
diff -uNr postfix-2.5.6-vda-ng.orig/src/virtual/mailbox.c postfix-2.5.6/src/virtual/mailbox.c
|
||
|
--- postfix-2.5.6-vda-ng.orig/src/virtual/mailbox.c 2008-08-25 11:57:48.000000000 +0200
|
||
|
+++ postfix-2.5.6/src/virtual/mailbox.c 2008-08-25 12:20:41.032890016 +0200
|
||
|
@@ -120,7 +120,6 @@
|
||
|
myname, usr_attr.mailbox, OFF_T_MAX);
|
||
|
}
|
||
|
else {
|
||
|
- /* Invalid limit size (negative). Use default virtual_mailbox_limit. */
|
||
|
set_file_limit(var_virt_mailbox_limit);
|
||
|
status = NO;
|
||
|
}
|
||
|
diff -uNr postfix-2.5.6-vda-ng.orig/src/virtual/maildir.c postfix-2.5.6/src/virtual/maildir.c
|
||
|
--- postfix-2.5.6-vda-ng.orig/src/virtual/maildir.c 2008-08-25 11:57:48.000000000 +0200
|
||
|
+++ postfix-2.5.6/src/virtual/maildir.c 2008-08-25 12:20:41.033889864 +0200
|
||
|
@@ -65,6 +65,8 @@
|
||
|
|
||
|
/* Patch library. */
|
||
|
|
||
|
+#include <syslog.h>
|
||
|
+#include <stdint.h>
|
||
|
#include <sys/types.h> /* opendir(3), stat(2) */
|
||
|
#include <sys/stat.h> /* stat(2) */
|
||
|
#include <dirent.h> /* opendir(3) */
|
||
|
@@ -98,14 +100,14 @@
|
||
|
* Returns the size of all mails as read from maildirsize,
|
||
|
* zero if it couldn't read the file.
|
||
|
*/
|
||
|
-static long read_maildirsize(char *dirname, long *countptr)
|
||
|
+static uint64_t read_maildirsize(char *dirname, uint64_t *countptr)
|
||
|
{
|
||
|
struct stat statbuf;
|
||
|
VSTRING *sizefilename = vstring_alloc(1024);
|
||
|
VSTREAM *sizefile;
|
||
|
char *p;
|
||
|
int len, first;
|
||
|
- long sum = 0, count = 0;
|
||
|
+ uint64_t sum = 0, count = 0;
|
||
|
|
||
|
vstring_sprintf(sizefilename, "%s/%s", dirname, "maildirsize");
|
||
|
|
||
|
@@ -128,7 +130,7 @@
|
||
|
first = 1;
|
||
|
|
||
|
while (*p) {
|
||
|
- long n = 0, c = 0;
|
||
|
+ uint64_t n = 0, c = 0;
|
||
|
char *q = p;
|
||
|
|
||
|
while (*p) {
|
||
|
@@ -143,7 +145,7 @@
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
- if(sscanf(q, "%ld %ld", &n, &c) == 2) {
|
||
|
+ if(sscanf(q, "%llu %llu", &n, &c) == 2) {
|
||
|
sum += n;
|
||
|
count += c;
|
||
|
}
|
||
|
@@ -179,7 +181,7 @@
|
||
|
* Returns the size given in ",S=<size>" in the filename,
|
||
|
* zero if it cannot find ",S=<size>" in the filename.
|
||
|
*/
|
||
|
-static long maildir_parsequota(const char *n)
|
||
|
+static uint64_t maildir_parsequota(const char *n)
|
||
|
{
|
||
|
const char *o;
|
||
|
int yes = 0;
|
||
|
@@ -204,7 +206,7 @@
|
||
|
}
|
||
|
|
||
|
if (yes) {
|
||
|
- long s = 0;
|
||
|
+ uint64_t s = 0;
|
||
|
|
||
|
while (*o >= '0' && *o <= '9')
|
||
|
s = s*10 + (*o++ - '0');
|
||
|
@@ -231,17 +233,17 @@
|
||
|
* Returns the sum of the sizes of all measurable files,
|
||
|
* zero if the directory could not be opened.
|
||
|
*/
|
||
|
-static long check_dir_size(char *dirname, long *countptr)
|
||
|
+static uint64_t check_dir_size(char *dirname, uint64_t *countptr)
|
||
|
{
|
||
|
char *myname = "check_dir_size";
|
||
|
DIR *dir;
|
||
|
- long sum = 0;
|
||
|
+ uint64_t sum = 0;
|
||
|
struct dirent *ent;
|
||
|
struct stat statbuf;
|
||
|
|
||
|
if (!var_virt_mailbox_limit_inbox && var_virt_maildir_extended && (sum = read_maildirsize(dirname, countptr))) {
|
||
|
if (msg_verbose)
|
||
|
- msg_info("%s: maildirsize used: dir=%s sum=%ld count=%ld", myname, dirname, sum, *countptr);
|
||
|
+ msg_info("%s: maildirsize used: dir=%s sum=%llu count=%llu", myname, dirname, sum, *countptr);
|
||
|
return sum;
|
||
|
}
|
||
|
|
||
|
@@ -262,7 +264,7 @@
|
||
|
|
||
|
while ((ent = readdir(dir)) != NULL) {
|
||
|
char *name = ent->d_name;
|
||
|
- long tmpsum = 0;
|
||
|
+ uint64_t tmpsum = 0;
|
||
|
VSTRING *buffer;
|
||
|
|
||
|
if (var_virt_trash_count) {
|
||
|
@@ -325,7 +327,7 @@
|
||
|
closedir(dir);
|
||
|
|
||
|
if (msg_verbose)
|
||
|
- msg_info("%s: full scan done: dir=%s sum=%ld count=%ld", myname, dirname, sum, *countptr);
|
||
|
+ msg_info("%s: full scan done: dir=%s sum=%llu count=%llu", myname, dirname, sum, *countptr);
|
||
|
|
||
|
return sum;
|
||
|
}
|
||
|
@@ -443,9 +445,9 @@
|
||
|
char *sizefilename = (char *) 0; /* Maildirsize file name. */
|
||
|
VSTRING *filequota; /* Quota setting from the maildirsize file. */
|
||
|
VSTREAM *sizefile; /* Maildirsize file handle. */
|
||
|
- long n = 0; /* Limit in long integer format. */
|
||
|
- long saved_count = 0; /* The total number of files. */
|
||
|
- long saved_size = 0; /* The total quota of all files. */
|
||
|
+ uint64_t n = 0; /* Limit in long integer format. */
|
||
|
+ uint64_t saved_count = 0; /* The total number of files. */
|
||
|
+ uint64_t saved_size = 0; /* The total quota of all files. */
|
||
|
struct stat mail_stat; /* To check the size of the mail to be written. */
|
||
|
struct stat sizefile_stat; /* To check the size of the maildirsize file. */
|
||
|
time_t tm; /* To check the age of the maildirsize file. */
|
||
|
@@ -520,7 +522,8 @@
|
||
|
* warn the user, else use the value directly as the maildir limit.
|
||
|
*/
|
||
|
if (*var_virt_mailbox_limit_maps != 0 && (limit_res = mail_addr_find(virtual_mailbox_limit_maps, state.msg_attr.user, (char **) NULL)) != 0) {
|
||
|
- n = atol(limit_res);
|
||
|
+ /* if there is some unexpected char in limit_res var, n will be zero! */
|
||
|
+ n = strtoull(limit_res, NULL, 10);
|
||
|
if (n > 0) {
|
||
|
if ((n < var_message_limit) && (!var_virt_mailbox_limit_override)) {
|
||
|
n = var_virt_mailbox_limit;
|
||
|
@@ -535,13 +538,13 @@
|
||
|
}
|
||
|
else {
|
||
|
if (msg_verbose)
|
||
|
- msg_info("%s: set virtual maildir limit size for %s to %ld",
|
||
|
+ msg_info("%s: set virtual maildir limit size for %s to %llu",
|
||
|
myname, usr_attr.mailbox, n);
|
||
|
}
|
||
|
}
|
||
|
else if (n == 0) {
|
||
|
if (msg_verbose)
|
||
|
- msg_info("%s: set virtual maildir limit size for %s to %ld",
|
||
|
+ msg_info("%s: set virtual maildir limit size for %s to %llu",
|
||
|
myname, usr_attr.mailbox, n);
|
||
|
}
|
||
|
else {
|
||
|
@@ -662,7 +665,7 @@
|
||
|
*/
|
||
|
if (stat(tmpfile, &mail_stat) == 0) {
|
||
|
if (n != 0) {
|
||
|
- saved_size += (long) mail_stat.st_size;
|
||
|
+ saved_size += (uint64_t) mail_stat.st_size;
|
||
|
saved_count++;
|
||
|
}
|
||
|
if (var_virt_maildir_extended) {
|
||
|
@@ -866,7 +869,9 @@
|
||
|
filequota = vstring_alloc(128);
|
||
|
vstring_get_null_bound(filequota, sizefile, 127);
|
||
|
vstream_fclose(sizefile);
|
||
|
- if (atol(vstring_export(filequota)) != n)
|
||
|
+ /* if there will be some unexpected char in filequota var, strtoull() return 0
|
||
|
+ and this probably != n, so file will be rewritten */
|
||
|
+ if (strtoull(vstring_export(filequota), NULL, 10) != n)
|
||
|
unlink(sizefilename);
|
||
|
}
|
||
|
|
||
|
@@ -886,7 +891,7 @@
|
||
|
|
||
|
/* If the creation worked, write to the file, otherwise just give up. */
|
||
|
if (sizefile) {
|
||
|
- vstream_fprintf(sizefile, "%ldS\n%ld %ld\n", n, saved_size, saved_count);
|
||
|
+ vstream_fprintf(sizefile, "%lluS\n%llu %llu\n", n, saved_size, saved_count);
|
||
|
vstream_fclose(sizefile);
|
||
|
}
|
||
|
}
|
||
|
diff -uNr postfix-2.5.6-vda-ng.orig/src/virtual/Makefile.in postfix-2.5.6/src/virtual/Makefile.in
|
||
|
--- postfix-2.5.6-vda-ng.orig/src/virtual/Makefile.in 2007-03-17 18:51:46.000000000 +0100
|
||
|
+++ postfix-2.5.6/src/virtual/Makefile.in 2008-08-25 12:20:41.034889712 +0200
|
||
|
@@ -4,7 +4,7 @@
|
||
|
HDRS = virtual.h
|
||
|
TESTSRC =
|
||
|
DEFS = -I. -I$(INC_DIR) -D$(SYSTYPE)
|
||
|
-CFLAGS = $(DEBUG) $(OPT) $(DEFS)
|
||
|
+CFLAGS = $(DEBUG) $(OPT) $(DEFS) -std=gnu99
|
||
|
PROG = virtual
|
||
|
TESTPROG=
|
||
|
INC_DIR = ../../include
|