From 9ff337aa3b0db3f8244ecbefe4318e32634a37ee Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Tue, 3 Dec 2013 20:59:03 +0800
Subject: [PATCH] Exit if we don't have keys and -R wasn't specified

---
 svr-runopts.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/svr-runopts.c b/svr-runopts.c
index f78190f7..9fbacf77 100644
--- a/svr-runopts.c
+++ b/svr-runopts.c
@@ -452,6 +452,7 @@ static void addhostkey(const char *keyfile) {
 void load_all_hostkeys() {
 	int i;
 	int disable_unset_keys = 1;
+	int any_keys = 0;
 
 	svr_opts.hostkey = new_sign_key();
 
@@ -484,12 +485,20 @@ void load_all_hostkeys() {
 	if (disable_unset_keys && !svr_opts.hostkey->rsakey) {
 		disablekey(DROPBEAR_SIGNKEY_RSA);
 	}
+	else
+	{
+		any_keys = 1;
+	}
 #endif
 
 #ifdef DROPBEAR_DSS
 	if (disable_unset_keys && !svr_opts.hostkey->dsskey) {
 		disablekey(DROPBEAR_SIGNKEY_RSA);
 	}
+	else
+	{
+		any_keys = 1;
+	}
 #endif
 
 
@@ -499,6 +508,10 @@ void load_all_hostkeys() {
 		&& !svr_opts.hostkey->ecckey256) {
 		disablekey(DROPBEAR_SIGNKEY_ECDSA_NISTP256);
 	}
+	else
+	{
+		any_keys = 1;
+	}
 #endif
 
 #ifdef DROPBEAR_ECC_384
@@ -506,6 +519,10 @@ void load_all_hostkeys() {
 		&& !svr_opts.hostkey->ecckey384) {
 		disablekey(DROPBEAR_SIGNKEY_ECDSA_NISTP384);
 	}
+	else
+	{
+		any_keys = 1;
+	}
 #endif
 
 #ifdef DROPBEAR_ECC_521
@@ -513,7 +530,16 @@ void load_all_hostkeys() {
 		&& !svr_opts.hostkey->ecckey521) {
 		disablekey(DROPBEAR_SIGNKEY_ECDSA_NISTP521);
 	}
+	else
+	{
+		any_keys = 1;
+	}
 #endif
 #endif /* DROPBEAR_ECDSA */
 
+	if (!any_keys)
+	{
+		dropbear_exit("No hostkeys available");
+	}
+
 }
-- 
GitLab