changeset 8439:596a577698c1 HEAD

Changed all config file readers to not ignore the last line if it's missing LF.
author Timo Sirainen <tss@iki.fi>
date Wed, 19 Nov 2008 16:28:46 +0200
parents 1baa595093f5
children a3feb99907af
files src/auth/db-passwd-file.c src/deliver/deliver.c src/lib-settings/settings.c src/plugins/acl/acl-backend-vfile.c src/plugins/trash/trash-plugin.c src/plugins/virtual/virtual-config.c
diffstat 6 files changed, 7 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/db-passwd-file.c	Wed Nov 19 16:28:22 2008 +0200
+++ b/src/auth/db-passwd-file.c	Wed Nov 19 16:28:46 2008 +0200
@@ -183,6 +183,7 @@
 				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 */
--- a/src/deliver/deliver.c	Wed Nov 19 16:28:22 2008 +0200
+++ b/src/deliver/deliver.c	Wed Nov 19 16:28:46 2008 +0200
@@ -334,6 +334,7 @@
 		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 */
 
--- a/src/lib-settings/settings.c	Wed Nov 19 16:28:22 2008 +0200
+++ b/src/lib-settings/settings.c	Wed Nov 19 16:28:46 2008 +0200
@@ -93,20 +93,8 @@
 	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 */
--- a/src/plugins/acl/acl-backend-vfile.c	Wed Nov 19 16:28:22 2008 +0200
+++ b/src/plugins/acl/acl-backend-vfile.c	Wed Nov 19 16:28:46 2008 +0200
@@ -496,6 +496,7 @@
 		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 {
--- a/src/plugins/trash/trash-plugin.c	Wed Nov 19 16:28:22 2008 +0200
+++ b/src/plugins/trash/trash-plugin.c	Wed Nov 19 16:28:46 2008 +0200
@@ -264,6 +264,7 @@
 	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) {
 		/* <priority> <mailbox name> */
 		name = strchr(line, ' ');
--- a/src/plugins/virtual/virtual-config.c	Wed Nov 19 16:28:22 2008 +0200
+++ b/src/plugins/virtual/virtual-config.c	Wed Nov 19 16:28:46 2008 +0200
@@ -271,6 +271,7 @@
 	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 == '#')