git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Upgrade appendfile so that it is capable of handling quotas that are
[exim.git]
/
src
/
src
/
rda.c
diff --git
a/src/src/rda.c
b/src/src/rda.c
index 443cbb1bdcd64103217a7d36b96ed9c59e0ea486..8f972ca4ec4bc64e9002658f6fc61d81d6da8d2a 100644
(file)
--- a/
src/src/rda.c
+++ b/
src/src/rda.c
@@
-1,10
+1,10
@@
-/* $Cambridge: exim/src/src/rda.c,v 1.
2 2004/11/04 10:42:11
ph10 Exp $ */
+/* $Cambridge: exim/src/src/rda.c,v 1.
6 2005/06/07 15:20:56
ph10 Exp $ */
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
/*************************************************
* Exim - an Internet mail transport agent *
*************************************************/
-/* Copyright (c) University of Cambridge 1995 - 200
4
*/
+/* Copyright (c) University of Cambridge 1995 - 200
5
*/
/* See the file NOTICE for conditions of use and distribution. */
/* This module contains code for extracting addresses from a forwarding list
/* See the file NOTICE for conditions of use and distribution. */
/* This module contains code for extracting addresses from a forwarding list
@@
-299,14
+299,8
@@
if (fread(filebuf, 1, statbuf.st_size, fwd) != statbuf.st_size)
}
filebuf[statbuf.st_size] = 0;
}
filebuf[statbuf.st_size] = 0;
-/* Don't pass statbuf.st_size directly to debug_printf. On some systems it
-is a long, which may not be the same as an int. */
-
DEBUG(D_route)
DEBUG(D_route)
- {
- int size = (int)statbuf.st_size;
- debug_printf("%d bytes read from %s\n", size, filename);
- }
+ debug_printf("%.30g bytes read from %s\n", (double)statbuf.st_size, filename);
fclose(fwd);
return filebuf;
fclose(fwd);
return filebuf;
@@
-333,6
+327,8
@@
Arguments:
options the options bits
include_directory restrain to this directory
sieve_vacation_directory passed to sieve_interpret
options the options bits
include_directory restrain to this directory
sieve_vacation_directory passed to sieve_interpret
+ sieve_useraddress passed to sieve_interpret
+ sieve_subaddress passed to sieve_interpret
generated where to hang generated addresses
error for error messages
eblockp for details of skipped syntax errors
generated where to hang generated addresses
error for error messages
eblockp for details of skipped syntax errors
@@
-348,7
+344,8
@@
Returns: a suitable return for rda_interpret()
static int
rda_extract(redirect_block *rdata, int options, uschar *include_directory,
static int
rda_extract(redirect_block *rdata, int options, uschar *include_directory,
- uschar *sieve_vacation_directory, address_item **generated, uschar **error,
+ uschar *sieve_vacation_directory, uschar *sieve_useraddress,
+ uschar *sieve_subaddress, address_item **generated, uschar **error,
error_block **eblockp, int *filtertype)
{
uschar *data;
error_block **eblockp, int *filtertype)
{
uschar *data;
@@
-378,7
+375,7
@@
if (*filtertype != FILTER_FORWARD)
(*filtertype == FILTER_EXIM)? "an Exim" : "a Sieve");
/* RDO_FILTER is an "allow" bit */
(*filtertype == FILTER_EXIM)? "an Exim" : "a Sieve");
/* RDO_FILTER is an "allow" bit */
-
+
if ((options & RDO_FILTER) == 0)
{
*error = US"filtering not enabled";
if ((options & RDO_FILTER) == 0)
{
*error = US"filtering not enabled";
@@
-388,18
+385,18
@@
if (*filtertype != FILTER_FORWARD)
expand_forbid =
(expand_forbid & ~RDO_FILTER_EXPANSIONS) |
(options & RDO_FILTER_EXPANSIONS);
expand_forbid =
(expand_forbid & ~RDO_FILTER_EXPANSIONS) |
(options & RDO_FILTER_EXPANSIONS);
-
+
/* RDO_{EXIM,SIEVE}_FILTER are forbid bits */
/* RDO_{EXIM,SIEVE}_FILTER are forbid bits */
-
+
if (*filtertype == FILTER_EXIM)
{
if ((options & RDO_EXIM_FILTER) != 0)
{
*error = US"Exim filtering not enabled";
return FF_ERROR;
if (*filtertype == FILTER_EXIM)
{
if ((options & RDO_EXIM_FILTER) != 0)
{
*error = US"Exim filtering not enabled";
return FF_ERROR;
- }
+ }
frc = filter_interpret(data, options, generated, error);
frc = filter_interpret(data, options, generated, error);
- }
+ }
else
{
if ((options & RDO_SIEVE_FILTER) != 0)
else
{
if ((options & RDO_SIEVE_FILTER) != 0)
@@
-407,9
+404,9
@@
if (*filtertype != FILTER_FORWARD)
*error = US"Sieve filtering not enabled";
return FF_ERROR;
}
*error = US"Sieve filtering not enabled";
return FF_ERROR;
}
- frc = sieve_interpret(data, options, sieve_vacation_directory,
generated,
- error);
- }
+ frc = sieve_interpret(data, options, sieve_vacation_directory,
+
sieve_useraddress, sieve_subaddress, generated,
error);
+ }
expand_forbid = old_expand_forbid;
return frc;
expand_forbid = old_expand_forbid;
return frc;
@@
-515,6
+512,8
@@
Arguments:
plus ENOTDIR and EACCES handling bits
include_directory restrain :include: to this directory
sieve_vacation_directory directory passed to sieve_interpret()
plus ENOTDIR and EACCES handling bits
include_directory restrain :include: to this directory
sieve_vacation_directory directory passed to sieve_interpret()
+ sieve_useraddress passed to sieve_interpret
+ sieve_subaddress passed to sieve_interpret
ugid uid/gid to run under - if NULL, no change
generated where to hang generated addresses, initially NULL
error pointer for error message
ugid uid/gid to run under - if NULL, no change
generated where to hang generated addresses, initially NULL
error pointer for error message
@@
-541,7
+540,8
@@
Returns: values from extraction function, or FF_NONEXIST:
int
rda_interpret(redirect_block *rdata, int options, uschar *include_directory,
int
rda_interpret(redirect_block *rdata, int options, uschar *include_directory,
- uschar *sieve_vacation_directory, ugid_block *ugid, address_item **generated,
+ uschar *sieve_vacation_directory, uschar *sieve_useraddress,
+ uschar *sieve_subaddress, ugid_block *ugid, address_item **generated,
uschar **error, error_block **eblockp, int *filtertype, uschar *rname)
{
int fd, rc, pfd[2];
uschar **error, error_block **eblockp, int *filtertype, uschar *rname)
{
int fd, rc, pfd[2];
@@
-586,7
+586,8
@@
if (!ugid->uid_set || /* Either there's no uid, or */
Ustrstr(data, ":include:") == NULL)) /* and there's no :include: */
{
return rda_extract(rdata, options, include_directory,
Ustrstr(data, ":include:") == NULL)) /* and there's no :include: */
{
return rda_extract(rdata, options, include_directory,
- sieve_vacation_directory, generated, error, eblockp, filtertype);
+ sieve_vacation_directory, sieve_useraddress, sieve_subaddress,
+ generated, error, eblockp, filtertype);
}
/* We need to run the processing code in a sub-process. However, if we can
}
/* We need to run the processing code in a sub-process. However, if we can
@@
-631,7
+632,8
@@
if ((pid = fork()) == 0)
/* Now do the business */
yield = rda_extract(rdata, options, include_directory,
/* Now do the business */
yield = rda_extract(rdata, options, include_directory,
- sieve_vacation_directory, generated, error, eblockp, filtertype);
+ sieve_vacation_directory, sieve_useraddress, sieve_subaddress, generated,
+ error, eblockp, filtertype);
/* Pass back whether it was a filter, and the return code and any overall
error text via the pipe. */
/* Pass back whether it was a filter, and the return code and any overall
error text via the pipe. */