diff --git a/misc/logsave.c b/misc/logsave.c
index f0011f8..77a0a16 100644
--- a/misc/logsave.c
+++ b/misc/logsave.c
@@ -203,6 +203,17 @@ static int copy_from_stdin(void)
 	return 0;
 }

+static void should_background(int err, int *nobackground) {
+	switch (err) {
+		case EPERM:
+		case EACCES:
+			*nobackground = err;
+			break;
+		default :
+			*nobackground = 0;
+	}
+	return ;
+}


 int main(int argc, char **argv)
@@ -211,7 +222,7 @@ int main(int argc, char **argv)
 	char	*outfn, **cpp;
 	int	openflags = O_CREAT|O_WRONLY|O_TRUNC;
 	int	send_flag = SEND_LOG;
-	int	do_stdin;
+	int	do_stdin, nobackground = 0;
 	time_t	t;

 	while ((c = getopt(argc, argv, "+asv")) != EOF) {
@@ -237,6 +248,8 @@ int main(int argc, char **argv)
 	argc -= optind;

 	outfd = open(outfn, openflags, 0644);
+	if (outfd < 0)
+		should_background(errno, &nobackground);
 	do_stdin = !strcmp(argv[0], "-");

 	send_output("Log of ", 0, send_flag);
@@ -263,7 +276,7 @@ int main(int argc, char **argv)
 	send_output(ctime(&t), 0, send_flag);
 	send_output("----------------\n", 0, send_flag);

-	if (outbuf) {
+	if (!nobackground) {
 		pid = fork();
 		if (pid < 0) {
 			perror("fork");
@@ -282,6 +295,8 @@ int main(int argc, char **argv)
 		}
 		write(outfd, outbuf, outbufsize);
 		free(outbuf);
+	} else {
+		printf("Unable to save log to %s : %s\n", outfn, strerror(nobackground));
 	}
 	close(outfd);

