mirror of
https://github.com/openbsd/src.git
synced 2025-01-10 06:47:55 -08:00
remove the use of O_EXLOCK, when open()ing a file, and use flock() instead.
ok gilles@
This commit is contained in:
parent
cdb7d48829
commit
4277a387fe
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: queue.c,v 1.7 2008/11/10 21:29:18 chl Exp $ */
|
||||
/* $OpenBSD: queue.c,v 1.8 2008/11/11 01:01:39 chl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org>
|
||||
@ -794,7 +794,7 @@ queue_record_submission(struct message *message)
|
||||
char *spool;
|
||||
size_t spoolsz;
|
||||
int fd;
|
||||
int mode = O_CREAT|O_TRUNC|O_WRONLY|O_EXCL|O_SYNC|O_EXLOCK;
|
||||
int mode = O_CREAT|O_TRUNC|O_WRONLY|O_EXCL|O_SYNC;
|
||||
int spret;
|
||||
FILE *fp;
|
||||
int hm;
|
||||
@ -844,6 +844,9 @@ queue_record_submission(struct message *message)
|
||||
if (unlink(linkname) == -1)
|
||||
fatal("queue_record_submission: unlink");
|
||||
|
||||
if (flock(fd, LOCK_EX) == -1)
|
||||
fatal("queue_record_submission: flock");
|
||||
|
||||
fp = fdopen(fd, "w");
|
||||
if (fp == NULL)
|
||||
fatal("fdopen");
|
||||
@ -1115,9 +1118,12 @@ queue_update_database(struct message *message)
|
||||
if (spret == -1 || spret >= MAXPATHLEN)
|
||||
fatal("queue_update_database: pathname too long");
|
||||
|
||||
if ((fd = open(pathname, O_RDWR|O_EXLOCK)) == -1)
|
||||
if ((fd = open(pathname, O_RDWR)) == -1)
|
||||
fatal("queue_update_database: cannot open database");
|
||||
|
||||
if (flock(fd, LOCK_EX) == -1)
|
||||
fatal("queue_update_database: cannot get a lock on database");
|
||||
|
||||
fp = fdopen(fd, "w");
|
||||
if (fp == NULL)
|
||||
fatal("fdopen");
|
||||
@ -1142,7 +1148,7 @@ queue_record_daemon(struct message *message)
|
||||
char message_uid[MAXPATHLEN];
|
||||
size_t spoolsz;
|
||||
int fd;
|
||||
int mode = O_CREAT|O_TRUNC|O_WRONLY|O_EXCL|O_SYNC|O_EXLOCK;
|
||||
int mode = O_CREAT|O_TRUNC|O_WRONLY|O_EXCL|O_SYNC;
|
||||
int spret;
|
||||
FILE *fp;
|
||||
|
||||
@ -1179,6 +1185,9 @@ queue_record_daemon(struct message *message)
|
||||
if (unlink(linkname) == -1)
|
||||
err(1, "unlink");
|
||||
|
||||
if (flock(fd, LOCK_EX) == -1)
|
||||
err(1, "flock");
|
||||
|
||||
fp = fdopen(fd, "w");
|
||||
if (fp == NULL)
|
||||
fatal("fdopen");
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: smtpd.c,v 1.6 2008/11/10 17:24:24 deraadt Exp $ */
|
||||
/* $OpenBSD: smtpd.c,v 1.7 2008/11/11 01:01:39 chl Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org>
|
||||
@ -781,7 +781,7 @@ parent_open_mailbox(struct batch *batchp, struct path *path)
|
||||
if (spret == -1 || spret >= MAXPATHLEN)
|
||||
return -1;
|
||||
|
||||
fd = open(pathname, O_CREAT|O_APPEND|O_RDWR|O_EXLOCK|O_SYNC|O_NONBLOCK, 0600);
|
||||
fd = open(pathname, O_CREAT|O_APPEND|O_RDWR|O_SYNC|O_NONBLOCK, 0600);
|
||||
if (fd == -1) {
|
||||
/* XXX - this needs to be discussed ... */
|
||||
switch (errno) {
|
||||
@ -805,6 +805,12 @@ parent_open_mailbox(struct batch *batchp, struct path *path)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (flock(fd, LOCK_EX) == -1) {
|
||||
close(fd);
|
||||
batchp->message.status |= S_MESSAGE_TEMPFAILURE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fchown(fd, pw->pw_uid, 0);
|
||||
|
||||
return fd;
|
||||
@ -842,12 +848,18 @@ parent_open_maildir(struct batch *batchp, struct path *path)
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd = open(pathname, O_CREAT|O_RDWR|O_TRUNC|O_EXLOCK|O_SYNC, 0600);
|
||||
fd = open(pathname, O_CREAT|O_RDWR|O_TRUNC|O_SYNC, 0600);
|
||||
if (fd == -1) {
|
||||
batchp->message.status |= S_MESSAGE_TEMPFAILURE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (flock(fd, LOCK_EX) == -1) {
|
||||
close(fd);
|
||||
batchp->message.status |= S_MESSAGE_TEMPFAILURE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
fchown(fd, pw->pw_uid, pw->pw_gid);
|
||||
|
||||
return fd;
|
||||
@ -986,7 +998,7 @@ parent_open_filename(struct batch *batchp, struct path *path)
|
||||
if (spret == -1 || spret >= MAXPATHLEN)
|
||||
return -1;
|
||||
|
||||
fd = open(pathname, O_CREAT|O_APPEND|O_RDWR|O_EXLOCK|O_SYNC|O_NONBLOCK, 0600);
|
||||
fd = open(pathname, O_CREAT|O_APPEND|O_RDWR|O_SYNC|O_NONBLOCK, 0600);
|
||||
if (fd == -1) {
|
||||
/* XXX - this needs to be discussed ... */
|
||||
switch (errno) {
|
||||
@ -1010,6 +1022,12 @@ parent_open_filename(struct batch *batchp, struct path *path)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (flock(fd, LOCK_EX) == -1) {
|
||||
close(fd);
|
||||
batchp->message.status |= S_MESSAGE_TEMPFAILURE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user