From: Timo Sirainen Date: Wed, 19 Nov 2008 14:28:46 +0000 (+0200) Subject: Changed all config file readers to not ignore the last line if it's missing LF. X-Git-Tag: 1.2.alpha4~50 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d4854db53e9c141db3d02821ed857bea101b1cc2;p=thirdparty%2Fdovecot%2Fcore.git Changed all config file readers to not ignore the last line if it's missing LF. --HG-- branch : HEAD --- diff --git a/src/auth/db-passwd-file.c b/src/auth/db-passwd-file.c index f9d6015451..4877827c0b 100644 --- a/src/auth/db-passwd-file.c +++ b/src/auth/db-passwd-file.c @@ -183,6 +183,7 @@ static bool passwd_file_open(struct passwd_file *pw) str_hash, (hash_cmp_callback_t *)strcmp); input = i_stream_create_fd(pw->fd, 4096, FALSE); + i_stream_set_return_partial_line(input, TRUE); while ((line = i_stream_read_next_line(input)) != NULL) { if (*line == '\0' || *line == ':' || *line == '#') continue; /* no username or comment */ diff --git a/src/deliver/deliver.c b/src/deliver/deliver.c index 87a74241fe..bbd47a88f5 100644 --- a/src/deliver/deliver.c +++ b/src/deliver/deliver.c @@ -334,6 +334,7 @@ static void config_file_init(const char *path) i_fatal_status(EX_CONFIG, "open(%s) failed: %m", path); input = i_stream_create_fd(fd, 1024, TRUE); + i_stream_set_return_partial_line(input, TRUE); while ((line = i_stream_read_next_line(input)) != NULL) { /* @UNSAFE: line is modified */ diff --git a/src/lib-settings/settings.c b/src/lib-settings/settings.c index 5ec5530b39..528a52c86c 100644 --- a/src/lib-settings/settings.c +++ b/src/lib-settings/settings.c @@ -93,20 +93,8 @@ settings_read_real(const char *path, const char *section, full_line = t_str_new(512); linenum = 0; sections = 0; root_section = 0; errormsg = NULL; input = i_stream_create_fd(fd, 2048, TRUE); - for (;;) { - line = i_stream_read_next_line(input); - if (line == NULL) { - /* EOF. Also handle the last line even if it doesn't - contain LF. */ - const unsigned char *data; - size_t size; - - data = i_stream_get_data(input, &size); - if (size == 0) - break; - line = t_strdup_noconst(t_strndup(data, size)); - i_stream_skip(input, size); - } + i_stream_set_return_partial_line(input, TRUE); + while ((line = i_stream_read_next_line(input)) != NULL) { linenum++; /* @UNSAFE: line is modified */ diff --git a/src/plugins/acl/acl-backend-vfile.c b/src/plugins/acl/acl-backend-vfile.c index 5349da527b..500440eea5 100644 --- a/src/plugins/acl/acl-backend-vfile.c +++ b/src/plugins/acl/acl-backend-vfile.c @@ -496,6 +496,7 @@ acl_backend_vfile_read(struct acl_object_vfile *aclobj, i_info("acl vfile: reading file %s", path); input = i_stream_create_fd(fd, 4096, FALSE); + i_stream_set_return_partial_line(input, TRUE); linenum = 1; while ((line = i_stream_read_next_line(input)) != NULL) { T_BEGIN { diff --git a/src/plugins/trash/trash-plugin.c b/src/plugins/trash/trash-plugin.c index 5dfb45f111..12585b129b 100644 --- a/src/plugins/trash/trash-plugin.c +++ b/src/plugins/trash/trash-plugin.c @@ -264,6 +264,7 @@ static int read_configuration(struct mail_user *user, const char *path) p_array_init(&tuser->trash_boxes, user->pool, INIT_TRASH_MAILBOX_COUNT); input = i_stream_create_fd(fd, (size_t)-1, FALSE); + i_stream_set_return_partial_line(input, TRUE); while ((line = i_stream_read_next_line(input)) != NULL) { /* */ name = strchr(line, ' '); diff --git a/src/plugins/virtual/virtual-config.c b/src/plugins/virtual/virtual-config.c index 10cc0210e4..777074ab0b 100644 --- a/src/plugins/virtual/virtual-config.c +++ b/src/plugins/virtual/virtual-config.c @@ -271,6 +271,7 @@ int virtual_config_read(struct virtual_mailbox *mbox) ctx.pool = mbox->ibox.box.pool; ctx.rule = t_str_new(256); ctx.input = i_stream_create_fd(fd, (size_t)-1, FALSE); + i_stream_set_return_partial_line(ctx.input, TRUE); while ((line = i_stream_read_next_line(ctx.input)) != NULL) { linenum++; if (*line == '#')