summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/src/exim_lock.c21
-rw-r--r--src/src/sieve.c4
2 files changed, 19 insertions, 6 deletions
diff --git a/src/src/exim_lock.c b/src/src/exim_lock.c
index 541e80f3f..074a951d1 100644
--- a/src/src/exim_lock.c
+++ b/src/src/exim_lock.c
@@ -357,8 +357,7 @@ for (j = 0; j < lock_retries; j++)
/* Open the file for writing. */
- fd = open(filename, O_RDWR + O_APPEND);
- if (fd < 0)
+ if ((fd = open(filename, O_RDWR + O_APPEND)) < 0)
{
printf("exim_lock: failed to open %s for writing: %s\n", filename,
strerror(errno));
@@ -377,7 +376,6 @@ for (j = 0; j < lock_retries; j++)
a timeout changes it to blocking. */
if (!use_mbx && (use_fcntl || use_flock))
- {
if (apply_lock(fd, F_WRLCK, use_fcntl, lock_fcntl_timeout, use_flock,
lock_flock_timeout) >= 0)
{
@@ -388,8 +386,8 @@ for (j = 0; j < lock_retries; j++)
}
break;
}
- else goto RETRY; /* Message already output */
- }
+ else
+ goto RETRY; /* Message already output */
/* Lock using MBX rules. This is complicated and is documented with the
source of the c-client library that goes with Pine and IMAP. What has to
@@ -586,12 +584,25 @@ else
if (restore_times)
{
struct stat strestore;
+#ifdef EXIM_HAVE_OPENAT
+ int fd = open(filename, O_RDWR); /* use fd for both get & restore */
+ struct timespec tt[2];
+
+ fstat(fd, &strestore);
+ i = system(command);
+ tt[0] = strestore.st_atim;
+ tt[1] = strestore.st_mtim;
+ futimens(fd, tt);
+ close(fd);
+#else
struct utimbuf ut;
+
stat(filename, &strestore);
i = system(command);
ut.actime = strestore.st_atime;
ut.modtime = strestore.st_mtime;
utime(filename, &ut);
+#endif
}
else i = system(command);
diff --git a/src/src/sieve.c b/src/src/sieve.c
index e6dde77a6..19bc5337b 100644
--- a/src/src/sieve.c
+++ b/src/src/sieve.c
@@ -413,7 +413,8 @@ Returns
static int parse_mailto_uri(struct Sieve *filter, const uschar *uri, string_item **recipient, struct String *header, struct String *subject, struct String *body)
{
const uschar *start;
-struct String to,hname,hvalue;
+struct String to, hname;
+struct String hvalue = {NULL, 0};
int capacity;
string_item *new;
@@ -422,6 +423,7 @@ if (Ustrncmp(uri,"mailto:",7))
filter->errmsg=US "Unknown URI scheme";
return 0;
}
+
uri+=7;
if (*uri && *uri!='?')
for (;;)