1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
|
From 91e0865f0bd42d28d50ddd1fc1fae6cfaab17e46 Mon Sep 17 00:00:00 2001
From: Michael Forney <mforney@mforney.org>
Date: Wed, 1 Dec 2021 16:08:12 -0800
Subject: [PATCH] Allow building daemon without remote control
---
daemon/daemon.c | 13 +++++++++++++
daemon/unbound.c | 5 +++++
daemon/worker.c | 8 ++++++++
util/fptr_wlist.c | 4 ++++
4 files changed, 30 insertions(+)
diff --git a/daemon/daemon.c b/daemon/daemon.c
index 0e3923b4..27132ce1 100644
--- a/daemon/daemon.c
+++ b/daemon/daemon.c
@@ -68,7 +68,9 @@
#include "daemon/daemon.h"
#include "daemon/worker.h"
+#ifdef WITH_REMOTE
#include "daemon/remote.h"
+#endif
#include "daemon/acl_list.h"
#include "util/log.h"
#include "util/config_file.h"
@@ -378,9 +380,16 @@ daemon_open_shared_ports(struct daemon* daemon)
if(daemon->cfg->remote_control_enable &&
daemon->cfg->control_port != daemon->rc_port) {
listening_ports_free(daemon->rc_ports);
+#ifdef WITH_REMOTE
if(!(daemon->rc_ports=daemon_remote_open_ports(daemon->cfg)))
return 0;
daemon->rc_port = daemon->cfg->control_port;
+#else
+ log_err("unbound built without remote control");
+ daemon->rc_ports = NULL;
+ daemon->rc_port = 0;
+ return 0;
+#endif
}
return 1;
}
@@ -738,8 +747,10 @@ daemon_cleanup(struct daemon* daemon)
daemon->views = NULL;
if(daemon->env->auth_zones)
auth_zones_cleanup(daemon->env->auth_zones);
+#ifdef WITH_REMOTE
/* key cache is cleared by module desetup during next daemon_fork() */
daemon_remote_clear(daemon->rc);
+#endif
for(i=0; i<daemon->num; i++)
worker_delete(daemon->workers[i]);
free(daemon->workers);
@@ -764,7 +775,9 @@ daemon_delete(struct daemon* daemon)
if(!daemon)
return;
modstack_desetup(&daemon->mods, daemon->env);
+#ifdef WITH_REMOTE
daemon_remote_delete(daemon->rc);
+#endif
for(i = 0; i < daemon->num_ports; i++)
listening_ports_free(daemon->ports[i]);
free(daemon->ports);
diff --git a/daemon/unbound.c b/daemon/unbound.c
index 2baf4dba..7925d91b 100644
--- a/daemon/unbound.c
+++ b/daemon/unbound.c
@@ -490,8 +490,13 @@ perform_setup(struct daemon* daemon, struct config_file* cfg, int debug_mode,
w_config_adjust_directory(cfg);
#endif
+
+#ifdef WITH_REMOTE
if(!(daemon->rc = daemon_remote_create(cfg)))
fatal_exit("could not set up remote-control");
+#else
+ daemon->rc = NULL;
+#endif
/* read ssl keys while superuser and outside chroot */
#ifdef HAVE_SSL
diff --git a/daemon/worker.c b/daemon/worker.c
index 5d2483cd..f3c32279 100644
--- a/daemon/worker.c
+++ b/daemon/worker.c
@@ -376,10 +376,12 @@ worker_handle_control_cmd(struct tube* ATTR_UNUSED(tube), uint8_t* msg,
verbose(VERB_ALGO, "got control cmd stats_noreset");
server_stats_reply(worker, 0);
break;
+#ifdef WITH_REMOTE
case worker_cmd_remote:
verbose(VERB_ALGO, "got control cmd remote");
daemon_remote_exec(worker);
break;
+#endif
default:
log_err("bad command %d", (int)cmd);
break;
@@ -1731,11 +1733,13 @@ worker_init(struct worker* worker, struct config_file *cfg,
return 0;
}
#endif /* LIBEVENT_SIGNAL_PROBLEM */
+#ifdef WITH_REMOTE
if(!daemon_remote_open_accept(worker->daemon->rc,
worker->daemon->rc_ports, worker)) {
worker_delete(worker);
return 0;
}
+#endif
#ifdef UB_ON_WINDOWS
wsvc_setup_worker(worker);
#endif /* UB_ON_WINDOWS */
@@ -2007,16 +2011,20 @@ void worker_start_accept(void* arg)
{
struct worker* worker = (struct worker*)arg;
listen_start_accept(worker->front);
+#ifdef WITH_REMOTE
if(worker->thread_num == 0)
daemon_remote_start_accept(worker->daemon->rc);
+#endif
}
void worker_stop_accept(void* arg)
{
struct worker* worker = (struct worker*)arg;
listen_stop_accept(worker->front);
+#ifdef WITH_REMOTE
if(worker->thread_num == 0)
daemon_remote_stop_accept(worker->daemon->rc);
+#endif
}
/* --- fake callbacks for fptr_wlist to work --- */
diff --git a/util/fptr_wlist.c b/util/fptr_wlist.c
index f8dac65c..f98ec5f3 100644
--- a/util/fptr_wlist.c
+++ b/util/fptr_wlist.c
@@ -118,8 +118,10 @@ fptr_whitelist_comm_point_raw(comm_point_callback_type *fptr)
{
if(fptr == &tube_handle_listen) return 1;
else if(fptr == &tube_handle_write) return 1;
+#ifdef WITH_REMOTE
else if(fptr == &remote_accept_callback) return 1;
else if(fptr == &remote_control_callback) return 1;
+#endif
return 0;
}
@@ -587,7 +589,9 @@ int fptr_whitelist_print_func(void (*fptr)(char*,void*))
{
if(fptr == &config_print_func) return 1;
else if(fptr == &config_collate_func) return 1;
+#ifdef WITH_REMOTE
else if(fptr == &remote_get_opt_ssl) return 1;
+#endif
return 0;
}
--
2.34.1
|