531215c757635cbaea0fe52c49e39b1c579a58b9
[openwrt/staging/pepe2k.git] / package / network / services / dropbear / patches / 013-make-banner-reading-failure-non-fatal.patch
1 From 62a06cd95f58060a59359f8769c3f35cd680d4fd Mon Sep 17 00:00:00 2001
2 From: Matt Johnston <matt@ucc.asn.au>
3 Date: Sun, 23 Jul 2023 21:01:48 +0800
4 Subject: Make banner reading failure non-fatal
5
6 ---
7 svr-runopts.c | 45 ++++++++++++++++++++++++++++-----------------
8 1 file changed, 28 insertions(+), 17 deletions(-)
9
10 --- a/svr-runopts.c
11 +++ b/svr-runopts.c
12 @@ -38,6 +38,7 @@ static void printhelp(const char * progn
13 static void addportandaddress(const char* spec);
14 static void loadhostkey(const char *keyfile, int fatal_duplicate);
15 static void addhostkey(const char *keyfile);
16 +static void load_banner();
17
18 static void printhelp(const char * progname) {
19
20 @@ -382,23 +383,7 @@ void svr_getopts(int argc, char ** argv)
21 }
22
23 if (svr_opts.bannerfile) {
24 - struct stat buf;
25 - if (stat(svr_opts.bannerfile, &buf) != 0) {
26 - dropbear_exit("Error opening banner file '%s'",
27 - svr_opts.bannerfile);
28 - }
29 -
30 - if (buf.st_size > MAX_BANNER_SIZE) {
31 - dropbear_exit("Banner file too large, max is %d bytes",
32 - MAX_BANNER_SIZE);
33 - }
34 -
35 - svr_opts.banner = buf_new(buf.st_size);
36 - if (buf_readfile(svr_opts.banner, svr_opts.bannerfile)!=DROPBEAR_SUCCESS) {
37 - dropbear_exit("Error reading banner file '%s'",
38 - svr_opts.bannerfile);
39 - }
40 - buf_setpos(svr_opts.banner, 0);
41 + load_banner();
42 }
43
44 #ifdef HAVE_GETGROUPLIST
45 @@ -715,3 +700,29 @@ void load_all_hostkeys() {
46 dropbear_exit("No hostkeys available. 'dropbear -R' may be useful or run dropbearkey.");
47 }
48 }
49 +
50 +static void load_banner() {
51 + struct stat buf;
52 + if (stat(svr_opts.bannerfile, &buf) != 0) {
53 + dropbear_log(LOG_WARNING, "Error opening banner file '%s'",
54 + svr_opts.bannerfile);
55 + return;
56 + }
57 +
58 + if (buf.st_size > MAX_BANNER_SIZE) {
59 + dropbear_log(LOG_WARNING, "Banner file too large, max is %d bytes",
60 + MAX_BANNER_SIZE);
61 + return;
62 + }
63 +
64 + svr_opts.banner = buf_new(buf.st_size);
65 + if (buf_readfile(svr_opts.banner, svr_opts.bannerfile) != DROPBEAR_SUCCESS) {
66 + dropbear_log(LOG_WARNING, "Error reading banner file '%s'",
67 + svr_opts.bannerfile);
68 + buf_free(svr_opts.banner);
69 + svr_opts.banner = NULL;
70 + return;
71 + }
72 + buf_setpos(svr_opts.banner, 0);
73 +
74 +}