Mercurial > dovecot > original-hg > dovecot-1.2
changeset 8036:b3303b65c3f2 HEAD
Added file_dotlock_open_mode().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 20 Jul 2008 23:19:34 +0300 |
parents | ed12eee73357 |
children | ab1c170b1559 |
files | src/lib/file-dotlock.c src/lib/file-dotlock.h |
diffstat | 2 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ 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) {
--- 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 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);