"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/lib-storage/index/dbox-common/dbox-file.c" between
dovecot-2.3.16.tar.gz and dovecot-2.3.17.tar.gz

About: Dovecot is an IMAP and POP3 server, written with security primarily in mind.

dbox-file.c  (dovecot-2.3.16):dbox-file.c  (dovecot-2.3.17)
skipping to change at line 98 skipping to change at line 98
*_file = NULL; *_file = NULL;
i_assert(file->refcount > 0); i_assert(file->refcount > 0);
if (--file->refcount == 0) if (--file->refcount == 0)
file->storage->v.file_unrefed(file); file->storage->v.file_unrefed(file);
} }
static int dbox_file_parse_header(struct dbox_file *file, const char *line) static int dbox_file_parse_header(struct dbox_file *file, const char *line)
{ {
const char *const *tmp, *value; const char *const *tmp, *value;
unsigned int pos;
enum dbox_header_key key; enum dbox_header_key key;
file->file_version = *line - '0'; file->file_version = *line - '0';
if (!i_isdigit(line[0]) || line[1] != ' ' || if (!i_isdigit(line[0]) || line[1] != ' ' ||
(file->file_version != 1 && file->file_version != DBOX_VERSION)) { (file->file_version != 1 && file->file_version != DBOX_VERSION)) {
dbox_file_set_corrupted(file, "Invalid dbox version"); dbox_file_set_corrupted(file, "Invalid dbox version");
return -1; return -1;
} }
line += 2; line += 2;
pos = 2;
file->msg_header_size = 0; file->msg_header_size = 0;
for (tmp = t_strsplit(line, " "); *tmp != NULL; tmp++) { for (tmp = t_strsplit(line, " "); *tmp != NULL; tmp++) {
uintmax_t time; uintmax_t time;
key = **tmp; key = **tmp;
value = *tmp + 1; value = *tmp + 1;
switch (key) { switch (key) {
case DBOX_HEADER_OLDV1_APPEND_OFFSET: case DBOX_HEADER_OLDV1_APPEND_OFFSET:
skipping to change at line 134 skipping to change at line 132
} }
break; break;
case DBOX_HEADER_CREATE_STAMP: case DBOX_HEADER_CREATE_STAMP:
if (str_to_uintmax_hex(value, &time) < 0) { if (str_to_uintmax_hex(value, &time) < 0) {
dbox_file_set_corrupted(file, "Invalid create tim e stamp"); dbox_file_set_corrupted(file, "Invalid create tim e stamp");
return -1; return -1;
} }
file->create_time = (time_t)time; file->create_time = (time_t)time;
break; break;
} }
pos += strlen(value) + 2;
} }
if (file->msg_header_size == 0) { if (file->msg_header_size == 0) {
dbox_file_set_corrupted(file, "Missing message header size"); dbox_file_set_corrupted(file, "Missing message header size");
return -1; return -1;
} }
return 0; return 0;
} }
static int dbox_file_read_header(struct dbox_file *file) static int dbox_file_read_header(struct dbox_file *file)
skipping to change at line 313 skipping to change at line 310
} else if (file->fd != -1) { } else if (file->fd != -1) {
if (close(file->fd) < 0) if (close(file->fd) < 0)
dbox_file_set_syscall_error(file, "close()"); dbox_file_set_syscall_error(file, "close()");
file->fd = -1; file->fd = -1;
} }
file->cur_offset = UOFF_T_MAX; file->cur_offset = UOFF_T_MAX;
} }
int dbox_file_try_lock(struct dbox_file *file) int dbox_file_try_lock(struct dbox_file *file)
{ {
const char *error;
int ret; int ret;
i_assert(file->fd != -1); i_assert(file->fd != -1);
#ifdef DBOX_FILE_LOCK_METHOD_FLOCK #ifdef DBOX_FILE_LOCK_METHOD_FLOCK
struct file_lock_settings lock_set = {
.lock_method = FILE_LOCK_METHOD_FLOCK,
};
ret = file_try_lock(file->fd, file->cur_path, F_WRLCK, ret = file_try_lock(file->fd, file->cur_path, F_WRLCK,
FILE_LOCK_METHOD_FLOCK, &file->lock); &lock_set, &file->lock, &error);
if (ret < 0) { if (ret < 0) {
mail_storage_set_critical(&file->storage->storage, mail_storage_set_critical(&file->storage->storage,
"file_try_lock(%s) failed: %m", file->cur_path); "file_try_lock(%s) failed: %s", file->cur_path, error);
} }
#else #else
ret = file_dotlock_create(&dotlock_set, file->cur_path, ret = file_dotlock_create(&dotlock_set, file->cur_path,
DOTLOCK_CREATE_FLAG_NONBLOCK, &file->lock); DOTLOCK_CREATE_FLAG_NONBLOCK, &file->lock);
if (ret < 0) { if (ret < 0) {
mail_storage_set_critical(&file->storage->storage, mail_storage_set_critical(&file->storage->storage,
"file_dotlock_create(%s) failed: %m", file->cur_path); "file_dotlock_create(%s) failed: %m", file->cur_path);
} }
#endif #endif
return ret; return ret;
 End of changes. 7 change blocks. 
5 lines changed or deleted 6 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)