dovecot-1.2: Added file_dotlock_open_mode().
dovecot at dovecot.org
dovecot at dovecot.org
Sun Jul 20 23:20:23 EEST 2008
details: http://hg.dovecot.org/dovecot-1.2/rev/b3303b65c3f2
changeset: 8036:b3303b65c3f2
user: Timo Sirainen <tss at iki.fi>
date: Sun Jul 20 23:19:34 2008 +0300
description:
Added file_dotlock_open_mode().
diffstat:
2 files changed, 30 insertions(+)
src/lib/file-dotlock.c | 25 +++++++++++++++++++++++++
src/lib/file-dotlock.h | 5 +++++
diffs (50 lines):
diff -r ed12eee73357 -r b3303b65c3f2 src/lib/file-dotlock.c
--- a/src/lib/file-dotlock.c Sun Jul 20 23:19:25 2008 +0300
+++ b/src/lib/file-dotlock.c Sun Jul 20 23:19:34 2008 +0300
@@ -731,6 +731,31 @@ int file_dotlock_open(const struct dotlo
return dotlock->fd;
}
+int file_dotlock_open_mode(const struct dotlock_settings *set, const char *path,
+ enum dotlock_create_flags flags,
+ mode_t mode, uid_t uid, gid_t gid,
+ struct dotlock **dotlock_r)
+{
+ struct dotlock *dotlock;
+ mode_t old_mask;
+ int fd;
+
+ old_mask = umask(0666 ^ mode);
+ fd = file_dotlock_open(set, path, flags, &dotlock);
+ umask(old_mask);
+
+ if (fd != -1) {
+ if (fchown(fd, uid, gid) < 0) {
+ i_error("fchown(%s) failed: %m",
+ file_dotlock_get_lock_path(dotlock));
+ file_dotlock_delete(&dotlock);
+ return -1;
+ }
+ }
+ *dotlock_r = dotlock;
+ return fd;
+}
+
int file_dotlock_replace(struct dotlock **dotlock_p,
enum dotlock_replace_flags flags)
{
diff -r ed12eee73357 -r b3303b65c3f2 src/lib/file-dotlock.h
--- a/src/lib/file-dotlock.h Sun Jul 20 23:19:25 2008 +0300
+++ b/src/lib/file-dotlock.h Sun Jul 20 23:19:34 2008 +0300
@@ -68,6 +68,11 @@ int file_dotlock_open(const struct dotlo
int file_dotlock_open(const struct dotlock_settings *set, const char *path,
enum dotlock_create_flags flags,
struct dotlock **dotlock_r);
+/* Like file_dotlock_open(), but use the given file permissions. */
+int file_dotlock_open_mode(const struct dotlock_settings *set, const char *path,
+ enum dotlock_create_flags flags,
+ mode_t mode, uid_t uid, gid_t gid,
+ struct dotlock **dotlock_r);
/* Replaces the file dotlock protects with the dotlock file itself. */
int file_dotlock_replace(struct dotlock **dotlock,
enum dotlock_replace_flags flags);
More information about the dovecot-cvs
mailing list