15
15
#include "dnsmasq.h"
17
static char *compile_opts =
22
#ifndef HAVE_GETOPT_LONG
26
#ifdef HAVE_BROKEN_RTC
29
#ifndef HAVE_ISC_READER
17
42
static volatile int sigterm, sighup, sigusr1, sigalarm, num_kids, in_child;
19
44
static int set_dns_listeners(struct daemon *daemon, fd_set *set, int maxfd);
26
51
int first_loop = 1;
27
52
int bind_fallback = 0;
28
53
time_t now, last = 0;
29
struct irec *interfaces;
30
54
struct sigaction sigact;
32
56
struct iname *if_tmp;
59
setlocale(LC_ALL, "");
60
bindtextdomain("dnsmasq", LOCALEDIR);
61
textdomain("dnsmasq");
34
64
sighup = 1; /* init cache the first time through */
35
65
sigusr1 = 0; /* but don't dump */
36
66
sigterm = 0; /* or die */
64
94
sigaddset(&sigact.sa_mask, SIGCHLD);
65
95
sigprocmask(SIG_BLOCK, &sigact.sa_mask, &sigmask);
67
daemon = read_opts(argc, argv);
97
daemon = read_opts(argc, argv, compile_opts);
69
99
if (daemon->edns_pktsz < PACKETSZ)
70
100
daemon->edns_pktsz = PACKETSZ;
80
110
#ifndef HAVE_ISC_READER
81
111
else if (!daemon->dhcp)
82
die("ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h", NULL);
112
die(_("ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"), NULL);
85
if (!enumerate_interfaces(daemon, &interfaces, NULL, NULL))
86
die("failed to find list of interfaces: %s", NULL);
115
if (!enumerate_interfaces(daemon, &daemon->interfaces, NULL, NULL))
116
die(_("failed to find list of interfaces: %s"), NULL);
88
118
if (!(daemon->options & OPT_NOWILD) &&
89
119
!(daemon->listeners = create_wildcard_listeners(daemon->port)))
95
125
if (daemon->options & OPT_NOWILD)
97
daemon->listeners = create_bound_listeners(interfaces, daemon->port);
127
daemon->listeners = create_bound_listeners(daemon->interfaces, daemon->port);
99
129
for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
100
130
if (if_tmp->name && !if_tmp->used)
101
die("unknown interface %s", if_tmp->name);
131
die(_("unknown interface %s"), if_tmp->name);
103
133
for (if_tmp = daemon->if_addrs; if_tmp; if_tmp = if_tmp->next)
104
134
if (!if_tmp->used)
106
char *addrbuff = daemon->namebuff;
108
if (if_tmp->addr.sa.sa_family == AF_INET)
109
inet_ntop(AF_INET, &if_tmp->addr.in.sin_addr,
110
addrbuff, ADDRSTRLEN);
112
inet_ntop(AF_INET6, &if_tmp->addr.in6.sin6_addr,
113
addrbuff, ADDRSTRLEN);
115
strcpy(addrbuff, inet_ntoa(if_tmp->addr.in.sin_addr));
117
die("no interface with address %s", addrbuff);
136
prettyprint_addr(&if_tmp->addr, daemon->namebuff);
137
die(_("no interface with address %s"), daemon->namebuff);
124
144
#ifdef HAVE_BROKEN_RTC
125
145
if ((daemon->uptime_fd = open(UPTIME, O_RDONLY)) == -1)
126
die("cannot open " UPTIME ":%s", NULL);
146
die(_("cannot open %s:%s"), UPTIME);
129
149
now = dnsmasq_time(daemon->uptime_fd);
137
157
if (!tmp->isloop)
140
die("must set exactly one interface on broken systems without IP_RECVIF", NULL);
160
die(_("must set exactly one interface on broken systems without IP_RECVIF"), NULL);
142
162
dhcp_init(daemon);
143
163
lease_init(daemon, now);
166
if (daemon->options & OPT_DBUS)
171
daemon->watches = NULL;
172
if ((err = dbus_init(daemon)))
173
die(_("DBus error: %s"), err);
176
if (daemon->options & OPT_DBUS)
177
die(_("DBus not available: set HAVE_DBUS in src/config.h"), NULL);
146
180
/* If query_port is set then create a socket now, before dumping root
147
181
for use to access nameservers without more specific source addresses.
148
182
This allows query_port to be a low port */
173
207
if (!(daemon->options & OPT_DEBUG))
176
struct serverfd *serverfdp;
177
struct listener *listener;
178
210
struct passwd *ent_pw;
215
maxfd = set_dns_listeners(daemon, &test_set, -1);
217
maxfd = set_dbus_listeners(daemon, maxfd, &test_set, &test_set, &test_set);
181
220
/* The following code "daemonizes" the process.
182
221
See Stevens section 12.4 */
185
224
if (!(daemon->options & OPT_NO_FORK))
209
248
for (i=0; i<64; i++)
211
for (listener = daemon->listeners; listener; listener = listener->next)
212
if (listener->fd == i || listener->tcpfd == i)
217
250
#ifdef HAVE_BROKEN_RTC
218
251
if (i == daemon->uptime_fd)
222
255
if (daemon->dhcp &&
223
256
(i == daemon->lease_fd ||
224
257
i == daemon->dhcpfd ||
225
258
i == daemon->dhcp_raw_fd ||
226
259
i == daemon->dhcp_icmp_fd))
229
for (serverfdp = daemon->sfds; serverfdp; serverfdp = serverfdp->next)
230
if (serverfdp->fd == i)
262
if (i <= maxfd && FD_ISSET(i, &test_set))
257
287
DNSMASQ_LOG_FAC(daemon->options & OPT_DEBUG));
259
289
if (daemon->cachesize != 0)
260
syslog(LOG_INFO, "started, version %s cachesize %d", VERSION, daemon->cachesize);
290
syslog(LOG_INFO, _("started, version %s cachesize %d"), VERSION, daemon->cachesize);
262
syslog(LOG_INFO, "started, version %s cache disabled", VERSION);
292
syslog(LOG_INFO, _("started, version %s cache disabled"), VERSION);
294
syslog(LOG_INFO, _("compile time options: %s"), compile_opts);
297
if (daemon->options & OPT_DBUS)
300
syslog(LOG_INFO, _("DBus support enabled: connected to system bus"));
302
syslog(LOG_INFO, _("DBus support enabled: bus connection pending"));
264
306
if (bind_fallback)
265
syslog(LOG_WARNING, "setting --bind-interfaces option because of OS limitations");
307
syslog(LOG_WARNING, _("setting --bind-interfaces option because of OS limitations"));
267
309
if (!(daemon->options & OPT_NOWILD))
268
310
for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next)
269
311
if (if_tmp->name && !if_tmp->used)
270
syslog(LOG_WARNING, "warning: interface %s does not currently exist", if_tmp->name);
312
syslog(LOG_WARNING, _("warning: interface %s does not currently exist"), if_tmp->name);
272
314
if (daemon->dhcp)
284
326
strcpy(daemon->dhcp_buff, inet_ntoa(dhcp_tmp->start));
286
328
(dhcp_tmp->flags & CONTEXT_STATIC) ?
287
"DHCP, static leases only on %.0s%s, lease time %s" :
288
"DHCP, IP range %s -- %s, lease time %s",
329
_("DHCP, static leases only on %.0s%s, lease time %s") :
330
_("DHCP, IP range %s -- %s, lease time %s"),
289
331
daemon->dhcp_buff, inet_ntoa(dhcp_tmp->end), daemon->dhcp_buff2);
296
338
if (daemon->min_leasetime < 60)
297
339
daemon->min_leasetime = 60;
298
340
prettyprint_time(daemon->dhcp_buff2, daemon->min_leasetime);
299
syslog(LOG_INFO, "DHCP, %s will be written every %s", daemon->lease_file, daemon->dhcp_buff2);
341
syslog(LOG_INFO, _("DHCP, %s will be written every %s"), daemon->lease_file, daemon->dhcp_buff2);
303
345
if (!(daemon->options & OPT_DEBUG) && (getuid() == 0 || geteuid() == 0))
304
syslog(LOG_WARNING, "running as root");
346
syslog(LOG_WARNING, _("running as root"));
306
check_servers(daemon, interfaces);
348
check_servers(daemon);
308
350
while (sigterm == 0)
352
fd_set rset, wset, eset;
314
cache_reload(daemon->options, daemon->namebuff, daemon->domain_suffix, daemon->addn_hosts);
317
if (daemon->options & OPT_ETHERS)
318
dhcp_read_ethers(daemon);
319
dhcp_update_configs(daemon->dhcp_conf);
320
lease_update_from_configs(daemon->dhcp_conf, daemon->domain_suffix);
321
lease_update_file(0, now);
322
lease_update_dns(daemon);
356
clear_cache_and_reload(daemon, now);
324
357
if (daemon->resolv_files && (daemon->options & OPT_NO_POLL))
326
359
reload_servers(daemon->resolv_files->name, daemon);
327
check_servers(daemon, interfaces);
360
check_servers(daemon);
354
int maxfd = set_dns_listeners(daemon, &rset, 0);
389
int maxfd = set_dns_listeners(daemon, &rset, -1);
391
maxfd = set_dbus_listeners(daemon, maxfd, &rset, &wset, &eset);
356
393
if (daemon->dhcp)
358
395
FD_SET(daemon->dhcpfd, &rset);
360
397
maxfd = daemon->dhcpfd;
400
/* Whilst polling for the dbus, wake every quarter second */
363
401
#ifdef HAVE_PSELECT
364
if (pselect(maxfd+1, &rset, NULL, NULL, NULL, &sigmask) < 0)
365
FD_ZERO(&rset); /* rset otherwise undefined after error */
403
struct timespec *tp = NULL;
406
if ((daemon->options & OPT_DBUS) && !daemon->dbus)
410
tp->tv_nsec = 250000000;
413
if (pselect(maxfd+1, &rset, &wset, &eset, tp, &sigmask) < 0)
415
/* otherwise undefined after error */
416
FD_ZERO(&rset); FD_ZERO(&wset); FD_ZERO(&eset);
368
421
sigset_t save_mask;
422
struct timeval *tp = NULL;
425
if ((daemon->options & OPT_DBUS) && !daemon->dbus)
429
tp->tv_usec = 250000;
369
432
sigprocmask(SIG_SETMASK, &sigmask, &save_mask);
370
if (select(maxfd+1, &rset, NULL, NULL, NULL) < 0)
371
FD_ZERO(&rset); /* rset otherwise undefined after error */
433
if (select(maxfd+1, &rset, &wset, &eset, tp) < 0)
435
/* otherwise undefined after error */
436
FD_ZERO(&rset); FD_ZERO(&wset); FD_ZERO(&eset);
372
438
sigprocmask(SIG_SETMASK, &save_mask, NULL);
378
445
now = dnsmasq_time(daemon->uptime_fd);
380
447
/* Check for changes to resolv files once per second max. */
381
if (last == 0 || difftime(now, last) > 1.0)
448
/* Don't go silent for long periods if the clock goes backwards. */
449
if (last == 0 || difftime(now, last) > 1.0 || difftime(now, last) < 1.0)
400
468
if (stat(res->name, &statbuf) == -1)
402
470
if (!res->logged)
403
syslog(LOG_WARNING, "failed to access %s: %m", res->name);
471
syslog(LOG_WARNING, _("failed to access %s: %m"), res->name);
409
477
if (statbuf.st_mtime != res->mtime)
411
479
res->mtime = statbuf.st_mtime;
412
if (difftime(statbuf.st_mtime, last_change) > 0.0)
480
if (difftime(res->mtime, last_change) > 0.0)
414
last_change = statbuf.st_mtime;
482
last_change = res->mtime;
424
492
reload_servers(latest->name, daemon);
425
check_servers(daemon, interfaces);
493
check_servers(daemon);
499
/* if we didn't create a DBus connection, retry now. */
500
if ((daemon->options & OPT_DBUS) && !daemon->dbus)
503
if ((err = dbus_init(daemon)))
504
syslog(LOG_WARNING, _("DBus error: %s"), err);
506
syslog(LOG_INFO, _("connected to system DBus"));
508
check_dbus_listeners(daemon, &rset, &wset, &eset);
430
511
check_dns_listeners(daemon, &rset, now);
432
513
if (daemon->dhcp && FD_ISSET(daemon->dhcpfd, &rset))
433
514
dhcp_packet(daemon, now);
436
syslog(LOG_INFO, "exiting on receipt of SIGTERM");
517
syslog(LOG_INFO, _("exiting on receipt of SIGTERM"));
438
519
if (daemon->dhcp)
440
521
#ifdef HAVE_BROKEN_RTC
556
void clear_cache_and_reload(struct daemon *daemon, time_t now)
558
cache_reload(daemon->options, daemon->namebuff, daemon->domain_suffix, daemon->addn_hosts);
561
if (daemon->options & OPT_ETHERS)
562
dhcp_read_ethers(daemon);
563
dhcp_update_configs(daemon->dhcp_conf);
564
lease_update_from_configs(daemon);
565
lease_update_file(0, now);
566
lease_update_dns(daemon);
474
570
static int set_dns_listeners(struct daemon *daemon, fd_set *set, int maxfd)
476
572
struct serverfd *serverfdp;