diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index 464aeb5f5a5e6b0a3ccad8e90ed8191b71063952..acb6edbc491ad662fbb74c743213dd8faf5f12e2 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -515,7 +515,7 @@ struct ostream *sieve_tool_open_output_stream(const char *filename)
 			i_fatal("failed to open file for writing: %m");
 		}
 
-		outstream = o_stream_create_fd(fd, 0, TRUE);
+		outstream = o_stream_create_fd_autoclose(&fd, 0);
 	}
 
 	return outstream;
diff --git a/src/lib-sieve/sieve-script-file.c b/src/lib-sieve/sieve-script-file.c
index 8708878c6419f24acc3c2afdc05ab84f1305da7e..13f6819ad659c390a9b83aa58be2a9504bab69d0 100644
--- a/src/lib-sieve/sieve-script-file.c
+++ b/src/lib-sieve/sieve-script-file.c
@@ -286,14 +286,14 @@ static int sieve_file_script_get_stream
 			*error_r = SIEVE_ERROR_TEMP_FAILURE;
 			result = NULL;
 		} else {
-			result = i_stream_create_fd(fd, SIEVE_FILE_READ_BLOCK_SIZE, TRUE);
+			result = i_stream_create_fd_autoclose(&fd, SIEVE_FILE_READ_BLOCK_SIZE);
 			script->st = script->lnk_st = st;
 		}
 	}
 
 	if ( result == NULL ) {
 		/* Something went wrong, close the fd */
-		if ( close(fd) != 0 ) {
+		if ( fd >= 0 && close(fd) != 0 ) {
 			sieve_sys_error(svinst,
 				"failed to close sieve script: close(fd=%s) failed: %m", script->path);
 		}
diff --git a/src/lib-sieve/sieve-script-private.h b/src/lib-sieve/sieve-script-private.h
index 174cff3cd885fe8f751cf7c4e39c14872f48cebe..3d80424e0f991a4b56c335e0fe5535e84d192012 100644
--- a/src/lib-sieve/sieve-script-private.h
+++ b/src/lib-sieve/sieve-script-private.h
@@ -89,8 +89,6 @@ struct sieve_file_script {
 	const char *filename;
 	const char *binpath;
 	const char *binprefix;
-
-	int fd;
 };
 
 extern const struct sieve_script sieve_file_script;
diff --git a/src/testsuite/testsuite-smtp.c b/src/testsuite/testsuite-smtp.c
index d2944fa95347522b2750c5eb6fc8c0dd1bef4113..27e2d462dc3eb7bb4f16e6ad4c347a8be9a07f0b 100644
--- a/src/testsuite/testsuite-smtp.c
+++ b/src/testsuite/testsuite-smtp.c
@@ -95,7 +95,7 @@ void *testsuite_smtp_start
 			smtp->msg_file);
 	}
 
-	smtp->output = o_stream_create_fd(fd, (size_t)-1, TRUE);
+	smtp->output = o_stream_create_fd_autoclose(&fd, (size_t)-1);
 
 	return (void *) smtp;
 }