Blob Blame History Raw
diff -up rng-tools-3/rngd.8.in.ignorefail rng-tools-3/rngd.8.in
--- rng-tools-3/rngd.8.in.ignorefail	2012-01-12 15:14:06.181307658 +0100
+++ rng-tools-3/rngd.8.in	2012-01-12 15:14:06.237306958 +0100
@@ -9,6 +9,7 @@ rngd \- Check and feed random data from
 .B rngd
 [\fB\-b\fR, \fB\-\-background\fR]
 [\fB\-f\fR, \fB\-\-foreground\fR]
+[\fB\-i\fR, \fB\-\-ignorefail\fR]
 [\fB\-o\fR, \fB\-\-random-device=\fIfile\fR]
 [\fB\-r\fR, \fB\-\-rng-device=\fIfile\fR]
 [\fB\-s\fR, \fB\-\-random-step=\fInnn\fR]
@@ -45,6 +46,9 @@ Become a daemon (default)
 \fB\-f\fR, \fB\-\-foreground\fR
 Do not fork and become a daemon
 .TP
+\fB\-i\fR, \fB\-\-ignorefail\fR
+Ignore repeated fips failures
+.TP
 \fB\-o\fI file\fR, \fB\-\-random-device=\fIfile\fR
 Kernel device used for random number output
 (default: /dev/random)
diff -up rng-tools-3/rngd.c.ignorefail rng-tools-3/rngd.c
--- rng-tools-3/rngd.c.ignorefail	2012-01-12 15:14:06.194307494 +0100
+++ rng-tools-3/rngd.c	2012-01-12 15:15:36.204182216 +0100
@@ -58,6 +58,7 @@
 
 /* Background/daemon mode */
 int am_daemon;				/* Nonzero if we went daemon */
+int ignorefail;				/*Nonzero if we ignore MAX_RNG_FAILURES */
 
 /* Command line arguments and processing */
 const char *argp_program_version =
@@ -75,6 +76,8 @@ static char doc[] =
 static struct argp_option options[] = {
 	{ "foreground",	'f', 0, 0, "Do not fork and become a daemon" },
 
+	{ "ignorefail", 'i', 0, 0, "Ignore repeated fips failures" },
+
 	{ "background", 'b', 0, 0, "Become a daemon (default)" },
 
 	{ "random-device", 'o', "file", 0,
@@ -103,6 +106,7 @@ static struct arguments default_argument
 	.random_step	= 64,
 	.fill_watermark	= 2048,
 	.daemon		= 1,
+	.ignorefail		= 0,
 	.enable_tpm	= 1,
 };
 struct arguments *arguments = &default_arguments;
@@ -148,6 +152,9 @@ static error_t parse_opt (int key, char
 	case 'b':
 		arguments->daemon = 1;
 		break;
+	case 'i':
+		arguments->ignorefail = 1;
+		break;
 	case 's':
 		if (sscanf(arg, "%i", &arguments->random_step) == 0)
 			argp_usage(state);
@@ -230,7 +237,7 @@ static void do_loop(int random_step, dou
 				continue;	/* succeeded, work done */
 
 			iter->failures++;
-			if (iter->failures == MAX_RNG_FAILURES) {
+			if (iter->failures == MAX_RNG_FAILURES && (!ignorefail)) {
 				message(LOG_DAEMON|LOG_ERR,
 					"too many FIPS failures, disabling entropy source\n");
 				iter->disabled = true;
@@ -281,6 +288,9 @@ int main(int argc, char **argv)
 		openlog("rngd", 0, LOG_DAEMON);
 	}
 
+	if (arguments->ignorefail)
+			ignorefail = 1;
+
 	do_loop(arguments->random_step,
 		arguments->poll_timeout ? : -1.0);
 
diff -up rng-tools-3/rngd.h.ignorefail rng-tools-3/rngd.h
--- rng-tools-3/rngd.h.ignorefail	2012-01-12 15:14:06.195307482 +0100
+++ rng-tools-3/rngd.h	2012-01-12 15:14:06.237306958 +0100
@@ -46,6 +46,7 @@ struct arguments {
 	double poll_timeout;
 
 	int daemon;
+	int ignorefail;
 	int enable_tpm;
 };
 extern struct arguments *arguments;