• Home
  • Raw
  • Download

Lines Matching +full:- +full:- +full:daemon

1 /* dnsmasq is Copyright (c) 2000-2009 Simon Kelley
29 if (ioctl(fd, SIOCGIFNAME, &ifr) == -1) return 0; in indextoname()
57 an IP address with --dhcp-bridge=interface,alias,alias */ in iface_check()
59 for (bridge = daemon->bridges; bridge; bridge = bridge->next) { in iface_check()
60 for (alias = bridge->alias; alias; alias = alias->next) in iface_check()
61 if (strncmp(name, alias->iface, IF_NAMESIZE) == 0) { in iface_check()
64 if (!(newindex = if_nametoindex(bridge->iface))) { in iface_check()
65 my_syslog(LOG_WARNING, _("unknown interface %s in bridge-interface"), name); in iface_check()
69 strncpy(name, bridge->iface, IF_NAMESIZE); in iface_check()
77 if (daemon->if_names || (addr && daemon->if_addrs)) { in iface_check()
80 for (tmp = daemon->if_names; tmp; tmp = tmp->next) in iface_check()
81 if (tmp->name && (strcmp(tmp->name, name) == 0)) ret = tmp->used = 1; in iface_check()
83 for (tmp = daemon->if_addrs; tmp; tmp = tmp->next) in iface_check()
84 if (addr && tmp->addr.sa.sa_family == family) { in iface_check()
85 if (family == AF_INET && tmp->addr.in.sin_addr.s_addr == addr->addr.addr4.s_addr) in iface_check()
86 ret = tmp->used = 1; in iface_check()
89 IN6_ARE_ADDR_EQUAL(&tmp->addr.in6.sin6_addr, &addr->addr.addr6) && in iface_check()
90 (!IN6_IS_ADDR_LINKLOCAL(&addr->addr.addr6) || in iface_check()
91 (tmp->addr.in6.sin6_scope_id == (uint32_t) *indexp))) in iface_check()
92 ret = tmp->used = 1; in iface_check()
97 for (tmp = daemon->if_except; tmp; tmp = tmp->next) in iface_check()
98 if (tmp->name && (strcmp(tmp->name, name) == 0)) ret = 0; in iface_check()
113 for (iface = *irecp; iface; iface = iface->next) in iface_allowed()
114 if (sockaddr_isequal(&iface->addr, addr)) return 1; in iface_allowed()
116 if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1 || !indextoname(fd, if_index, ifr.ifr_name) || in iface_allowed()
117 ioctl(fd, SIOCGIFFLAGS, &ifr) == -1) { in iface_allowed()
118 if (fd != -1) { in iface_allowed()
128 if (ioctl(fd, SIOCGIFMTU, &ifr) != -1) mtu = ifr.ifr_mtu; in iface_allowed()
134 if (daemon->if_names && loopback) { in iface_allowed()
136 for (lo = daemon->if_names; lo; lo = lo->next) in iface_allowed()
137 if (lo->name && strcmp(lo->name, ifr.ifr_name) == 0) { in iface_allowed()
138 lo->isloop = 1; in iface_allowed()
143 (lo->name = whine_malloc(strlen(ifr.ifr_name) + 1))) { in iface_allowed()
144 strcpy(lo->name, ifr.ifr_name); in iface_allowed()
145 lo->isloop = lo->used = 1; in iface_allowed()
146 lo->next = daemon->if_names; in iface_allowed()
147 daemon->if_names = lo; in iface_allowed()
151 if (addr->sa.sa_family == AF_INET && in iface_allowed()
152 !iface_check(AF_INET, (struct all_addr*) &addr->in.sin_addr, ifr.ifr_name, NULL)) in iface_allowed()
155 for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next) in iface_allowed()
156 if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0)) dhcp_ok = 0; in iface_allowed()
159 int ifindex = (int) addr->in6.sin6_scope_id; in iface_allowed()
160 if (addr->sa.sa_family == AF_INET6 && in iface_allowed()
161 !iface_check(AF_INET6, (struct all_addr*) &addr->in6.sin6_addr, ifr.ifr_name, &ifindex)) in iface_allowed()
167 iface->addr = *addr; in iface_allowed()
168 iface->netmask = netmask; in iface_allowed()
169 iface->dhcp_ok = dhcp_ok; in iface_allowed()
170 iface->mtu = mtu; in iface_allowed()
171 iface->next = *irecp; in iface_allowed()
190 addr.in6.sin6_port = htons(daemon->port); in iface_allowed_v6()
192 * Only populate the scope ID if the address is link-local. in iface_allowed_v6()
213 addr.in.sin_port = htons(daemon->port); in iface_allowed_v4()
220 return iface_enumerate(&daemon->interfaces, iface_allowed_v4, iface_allowed_v6); in enumerate_interfaces()
222 return iface_enumerate(&daemon->interfaces, iface_allowed_v4, NULL); in enumerate_interfaces()
230 if ((flags = fcntl(fd, F_GETFL)) == -1 || fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) in fix_fd()
249 if ((fd = socket(AF_INET6, SOCK_DGRAM, 0)) == -1) in create_ipv6_listener()
252 if ((tcpfd = socket(AF_INET6, SOCK_STREAM, 0)) == -1) return 0; in create_ipv6_listener()
254 if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || in create_ipv6_listener()
255 setsockopt(tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || in create_ipv6_listener()
256 setsockopt(fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 || in create_ipv6_listener()
257 setsockopt(tcpfd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 || !fix_fd(fd) || in create_ipv6_listener()
260 setsockopt(fd, IPV6_LEVEL, IPV6_RECVPKTINFO, &opt, sizeof(opt)) == -1 || in create_ipv6_listener()
262 setsockopt(fd, IPV6_LEVEL, IPV6_PKTINFO, &opt, sizeof(opt)) == -1 || in create_ipv6_listener()
264 bind(tcpfd, (struct sockaddr*) &addr, sa_len(&addr)) == -1 || listen(tcpfd, 5) == -1 || in create_ipv6_listener()
265 bind(fd, (struct sockaddr*) &addr, sa_len(&addr)) == -1) in create_ipv6_listener()
269 l->fd = fd; in create_ipv6_listener()
270 l->tcpfd = tcpfd; in create_ipv6_listener()
271 l->family = AF_INET6; in create_ipv6_listener()
272 l->iface = NULL; in create_ipv6_listener()
273 l->next = NULL; in create_ipv6_listener()
284 int tcpfd = -1, fd = -1; in create_wildcard_listeners()
289 addr.in.sin_port = htons(daemon->port); in create_wildcard_listeners()
291 if (daemon->port != 0) { in create_wildcard_listeners()
292 if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1 || in create_wildcard_listeners()
293 (tcpfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) in create_wildcard_listeners()
296 if (setsockopt(tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || in create_wildcard_listeners()
297 bind(tcpfd, (struct sockaddr*) &addr, sa_len(&addr)) == -1 || listen(tcpfd, 5) == -1 || in create_wildcard_listeners()
300 !create_ipv6_listener(&l6, daemon->port) || in create_wildcard_listeners()
302 setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || !fix_fd(fd) || in create_wildcard_listeners()
304 setsockopt(fd, SOL_IP, IP_PKTINFO, &opt, sizeof(opt)) == -1 || in create_wildcard_listeners()
306 setsockopt(fd, IPPROTO_IP, IP_RECVDSTADDR, &opt, sizeof(opt)) == -1 || in create_wildcard_listeners()
307 setsockopt(fd, IPPROTO_IP, IP_RECVIF, &opt, sizeof(opt)) == -1 || in create_wildcard_listeners()
309 bind(fd, (struct sockaddr*) &addr, sa_len(&addr)) == -1) in create_wildcard_listeners()
313 uint32_t mark = daemon->listen_mark; in create_wildcard_listeners()
314 if (mark != 0 && (setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) == -1 || in create_wildcard_listeners()
315 setsockopt(tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) == -1 || in create_wildcard_listeners()
316 setsockopt(l6->fd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) == -1 || in create_wildcard_listeners()
317 setsockopt(l6->tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) == -1)) { in create_wildcard_listeners()
321 close(l6->fd); in create_wildcard_listeners()
322 close(l6->tcpfd); in create_wildcard_listeners()
329 l->family = AF_INET; in create_wildcard_listeners()
330 l->fd = fd; in create_wildcard_listeners()
331 l->tcpfd = tcpfd; in create_wildcard_listeners()
332 l->iface = NULL; in create_wildcard_listeners()
333 l->next = l6; in create_wildcard_listeners()
346 * iface - input of the new interface details to listen on
347 * listeners - output. Creates a new struct listener and inserts at head of the list
358 new->family = iface->addr.sa.sa_family; in create_bound_listener()
359 new->iface = iface; in create_bound_listener()
360 new->next = *listeners; in create_bound_listener()
361 new->tcpfd = -1; in create_bound_listener()
362 new->fd = -1; in create_bound_listener()
364 if (daemon->port != 0) { in create_bound_listener()
365 if ((new->tcpfd = socket(iface->addr.sa.sa_family, SOCK_STREAM, 0)) == -1 || in create_bound_listener()
366 (new->fd = socket(iface->addr.sa.sa_family, SOCK_DGRAM, 0)) == -1 || in create_bound_listener()
367 setsockopt(new->fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || in create_bound_listener()
368 setsockopt(new->tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || in create_bound_listener()
369 !fix_fd(new->tcpfd) || !fix_fd(new->fd)) in create_bound_listener()
373 if (iface->addr.sa.sa_family == AF_INET6) { in create_bound_listener()
374 if (setsockopt(new->fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 || in create_bound_listener()
375 setsockopt(new->tcpfd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1) in create_bound_listener()
386 if ((rc = bind(new->fd, &iface->addr.sa, sa_len(&iface->addr))) != -1) break; in create_bound_listener()
395 if (iface->addr.sa.sa_family == AF_INET6 && in create_bound_listener()
404 if (rc == -1 || bind(new->tcpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1) { in create_bound_listener()
405 prettyprint_addr(&iface->addr, daemon->namebuff); in create_bound_listener()
406 close(new->fd); in create_bound_listener()
407 close(new->tcpfd); in create_bound_listener()
409 syslog(LOG_ERR, _("failed to bind listening socket for %s"), daemon->namebuff); in create_bound_listener()
413 uint32_t mark = daemon->listen_mark; in create_bound_listener()
414 if (mark != 0 && (setsockopt(new->fd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) == -1 || in create_bound_listener()
415 setsockopt(new->tcpfd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) == -1)) in create_bound_listener()
418 if (listen(new->tcpfd, 5) == -1) die(_("failed to listen on socket: %s"), NULL, EC_BADNET); in create_bound_listener()
437 for (l = daemon->listeners; l; l = l->next) { in fixup_possible_existing_listener()
438 struct irec* listener_iface = l->iface; in fixup_possible_existing_listener()
440 if (sockaddr_isequal(&listener_iface->addr, &new_iface->addr)) { in fixup_possible_existing_listener()
441 l->iface = new_iface; in fixup_possible_existing_listener()
456 if (listener->iface) { in delete_listener()
457 int port = prettyprint_addr(&listener->iface->addr, daemon->namebuff); in delete_listener()
458 my_syslog(LOG_INFO, _("Closing listener [%s]:%d"), daemon->namebuff, port); in delete_listener()
460 my_syslog(LOG_INFO, _("Closing wildcard listener family=%d"), listener->family); in delete_listener()
463 if (listener->tcpfd != -1) { in delete_listener()
464 close(listener->tcpfd); in delete_listener()
465 listener->tcpfd = -1; in delete_listener()
467 if (listener->fd != -1) { in delete_listener()
468 close(listener->fd); in delete_listener()
469 listener->fd = -1; in delete_listener()
471 *l = listener->next; in delete_listener()
473 return -1; in delete_listener()
481 * until we exited. Now, if an interface moves off the to-listen list we need to
484 * interface - input of the interface details to listen on
489 struct listener** l = &daemon->listeners; in close_bound_listener()
491 struct irec* listener_iface = (*l)->iface; in close_bound_listener()
492 struct listener** next = &((*l)->next); in close_bound_listener()
493 if (iface && listener_iface && sockaddr_isequal(&listener_iface->addr, &iface->addr)) { in close_bound_listener()
519 for (iface = daemon->interfaces; iface; iface = iface->next) { in create_bound_listeners()
524 new->family = iface->addr.sa.sa_family; in create_bound_listeners()
525 new->iface = iface; in create_bound_listeners()
526 new->next = listeners; in create_bound_listeners()
527 new->tcpfd = -1; in create_bound_listeners()
528 new->fd = -1; in create_bound_listeners()
531 if (daemon->port != 0) { in create_bound_listeners()
532 if ((new->tcpfd = socket(iface->addr.sa.sa_family, SOCK_STREAM, 0)) == -1 || in create_bound_listeners()
533 (new->fd = socket(iface->addr.sa.sa_family, SOCK_DGRAM, 0)) == -1 || in create_bound_listeners()
534 setsockopt(new->fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || in create_bound_listeners()
535 setsockopt(new->tcpfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)) == -1 || in create_bound_listeners()
536 !fix_fd(new->tcpfd) || !fix_fd(new->fd)) in create_bound_listeners()
540 if (iface->addr.sa.sa_family == AF_INET6) { in create_bound_listeners()
541 if (setsockopt(new->fd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1 || in create_bound_listeners()
542 setsockopt(new->tcpfd, IPV6_LEVEL, IPV6_V6ONLY, &opt, sizeof(opt)) == -1) in create_bound_listeners()
549 if ((rc = bind(new->fd, &iface->addr.sa, sa_len(&iface->addr))) != -1) break; in create_bound_listeners()
555 if (iface->addr.sa.sa_family == AF_INET6 && in create_bound_listeners()
564 if (rc == -1 || bind(new->tcpfd, &iface->addr.sa, sa_len(&iface->addr)) == -1) { in create_bound_listeners()
565 prettyprint_addr(&iface->addr, daemon->namebuff); in create_bound_listeners()
566 die(_("failed to bind listening socket for %s: %s"), daemon->namebuff, in create_bound_listeners()
570 if (listen(new->tcpfd, 5) == -1) in create_bound_listeners()
584 if ((fd = socket(family, SOCK_DGRAM, 0)) != -1) { in random_sock()
586 unsigned int ports_avail = 65536u - (unsigned short) daemon->min_port; in random_sock()
595 while (tries--) { in random_sock()
598 if (daemon->min_port != 0) in random_sock()
599 port = htons(daemon->min_port + (port % ((unsigned short) ports_avail))); in random_sock()
617 return -1; in random_sock()
632 if (bind(fd, (struct sockaddr*) &addr_copy, sa_len(&addr_copy)) == -1) return 0; in local_bind()
636 setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, intname, strlen(intname)) == -1) in local_bind()
640 if (mark != 0 && setsockopt(fd, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)) == -1) return 0; in local_bind()
651 if (!daemon->osport && intname[0] == 0) { in allocate_sfd()
654 if (addr->sa.sa_family == AF_INET && addr->in.sin_addr.s_addr == INADDR_ANY && in allocate_sfd()
655 addr->in.sin_port == htons(0)) in allocate_sfd()
659 if (addr->sa.sa_family == AF_INET6 && in allocate_sfd()
660 memcmp(&addr->in6.sin6_addr, &in6addr_any, sizeof(in6addr_any)) == 0 && in allocate_sfd()
661 addr->in6.sin6_port == htons(0)) in allocate_sfd()
667 for (sfd = daemon->sfds; sfd; sfd = sfd->next) in allocate_sfd()
668 if (sockaddr_isequal(&sfd->source_addr, addr) && mark == sfd->mark && in allocate_sfd()
669 strcmp(intname, sfd->interface) == 0) in allocate_sfd()
676 if ((sfd->fd = socket(addr->sa.sa_family, SOCK_DGRAM, 0)) == -1) { in allocate_sfd()
681 if (!local_bind(sfd->fd, addr, intname, mark, 0) || !fix_fd(sfd->fd)) { in allocate_sfd()
683 close(sfd->fd); in allocate_sfd()
689 strcpy(sfd->interface, intname); in allocate_sfd()
690 sfd->source_addr = *addr; in allocate_sfd()
691 sfd->mark = mark; in allocate_sfd()
692 sfd->next = daemon->sfds; in allocate_sfd()
693 daemon->sfds = sfd; in allocate_sfd()
702 if (daemon->query_port != 0) { in pre_allocate_sfds()
707 addr.in.sin_port = htons(daemon->query_port); in pre_allocate_sfds()
713 addr.in6.sin6_port = htons(daemon->query_port); in pre_allocate_sfds()
718 for (srv = daemon->servers; srv; srv = srv->next) in pre_allocate_sfds()
719 if (!(srv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR)) && in pre_allocate_sfds()
720 !allocate_sfd(&srv->source_addr, srv->interface, srv->mark) && errno != 0 && in pre_allocate_sfds()
721 (daemon->options & OPT_NOWILD)) { in pre_allocate_sfds()
722 prettyprint_addr(&srv->addr, daemon->namebuff); in pre_allocate_sfds()
723 if (srv->interface[0] != 0) { in pre_allocate_sfds()
724 strcat(daemon->namebuff, " "); in pre_allocate_sfds()
725 strcat(daemon->namebuff, srv->interface); in pre_allocate_sfds()
727 die(_("failed to bind server socket for %s: %s"), daemon->namebuff, EC_BADNET); in pre_allocate_sfds()
736 for (new = daemon->servers; new; new = tmp) { in check_servers()
737 tmp = new->next; in check_servers()
739 if (!(new->flags&(SERV_LITERAL_ADDRESS | SERV_NO_ADDR))) { in check_servers()
740 port = prettyprint_addr(&new->addr, daemon->namebuff); in check_servers()
743 if (new->addr.sa.sa_family == AF_INET && new->addr.in.sin_addr.s_addr == 0) { in check_servers()
748 for (iface = daemon->interfaces; iface; iface = iface->next) in check_servers()
749 if (sockaddr_isequal(&new->addr, &iface->addr)) break; in check_servers()
751 my_syslog(LOG_WARNING, _("ignoring nameserver %s - local interface"), in check_servers()
752 daemon->namebuff); in check_servers()
758 if (!new->sfd && in check_servers()
759 !(new->sfd = allocate_sfd(&new->source_addr, new->interface, new->mark)) && in check_servers()
761 my_syslog(LOG_WARNING, _("ignoring nameserver %s - cannot make/bind socket: %s"), in check_servers()
762 daemon->namebuff, strerror(errno)); in check_servers()
768 /* reverse order - gets it right. */ in check_servers()
769 new->next = ret; in check_servers()
772 if (new->flags&(SERV_HAS_DOMAIN | SERV_FOR_NODOTS)) { in check_servers()
774 if (!(new->flags& SERV_HAS_DOMAIN)) in check_servers()
776 else if (strlen(new->domain) == 0) in check_servers()
779 s1 = _("domain"), s2 = new->domain; in check_servers()
781 if (new->flags & SERV_NO_ADDR) in check_servers()
783 else if (!(new->flags& SERV_LITERAL_ADDRESS)) in check_servers()
784 my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, in check_servers()
786 } else if (new->interface[0] != 0) in check_servers()
787 my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, in check_servers()
788 new->interface); in check_servers()
790 my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port); in check_servers()
793 daemon->servers = ret; in check_servers()
802 * interfaces - input in the format "bt-pan|eth0|wlan0|..>" up to 1024 bytes long
816 prev_if_names = daemon->if_names; in set_interfaces()
817 daemon->if_names = NULL; in set_interfaces()
819 prev_interfaces = daemon->interfaces; in set_interfaces()
820 daemon->interfaces = NULL; in set_interfaces()
834 if ((if_tmp->name = strdup(interface)) == NULL) { in set_interfaces()
837 if_tmp->next = daemon->if_names; in set_interfaces()
838 daemon->if_names = if_tmp; in set_interfaces()
843 * daemon->interfaces for interface names listed in daemon->if_names. in set_interfaces()
849 if (daemon->if_names != NULL && !enumerate_interfaces()) { in set_interfaces()
853 for (if_tmp = daemon->if_names; if_tmp; if_tmp = if_tmp->next) { in set_interfaces()
854 if (if_tmp->name && !if_tmp->used) { in set_interfaces()
855 my_syslog(LOG_ERR, _("unknown interface given %s in set_interfaces()"), if_tmp->name); in set_interfaces()
859 /* success! - setup to free the old */ in set_interfaces()
861 for (old_iface = prev_interfaces; old_iface; old_iface = old_iface->next) { in set_interfaces()
863 for (new_iface = daemon->interfaces; new_iface; new_iface = new_iface->next) { in set_interfaces()
864 if (sockaddr_isequal(&old_iface->addr, &new_iface->addr)) { in set_interfaces()
875 prettyprint_addr(&old_iface->addr, debug_buff); in set_interfaces()
885 if (was_wild) daemon->options |= OPT_NOWILD; in set_interfaces()
888 for (new_iface = daemon->interfaces; new_iface; new_iface = new_iface->next) { in set_interfaces()
893 for (old_iface = prev_interfaces; old_iface; old_iface = old_iface->next) { in set_interfaces()
894 if (sockaddr_isequal(&old_iface->addr, &new_iface->addr)) { in set_interfaces()
895 found = -1; in set_interfaces()
903 prettyprint_addr(&new_iface->addr, debug_buff); in set_interfaces()
906 create_bound_listener(&(daemon->listeners), new_iface); in set_interfaces()
911 if (prev_if_names->name) free(prev_if_names->name); in set_interfaces()
912 if_tmp = prev_if_names->next; in set_interfaces()
917 struct irec* tmp_irec = prev_interfaces->next; in set_interfaces()
927 * Takes a string in the format "0x100b|1.2.3.4|1.2.3.4|..." - up to 1024 bytes in length
928 * - The first element is the socket mark to set on sockets that forward DNS queries.
929 * - The subsequent elements are the DNS servers to forward queries to.
941 /* move old servers to free list - we can reuse the memory in set_servers()
944 for (serv = daemon->servers; serv;) { in set_servers()
945 struct server* tmp = serv->next; in set_servers()
946 if (serv->flags & SERV_FROM_RESOLV) { in set_servers()
947 serv->next = old_servers; in set_servers()
952 serv->next = new_servers; in set_servers()
974 source_addr.in.sin_port = htons(daemon->query_port); in set_servers()
981 source_addr.in6.sin6_port = htons(daemon->query_port); in set_servers()
989 old_servers = old_servers->next; in set_servers()
995 serv->next = new_servers; in set_servers()
997 serv->addr = addr; in set_servers()
998 serv->source_addr = source_addr; in set_servers()
999 serv->domain = NULL; in set_servers()
1000 serv->interface[0] = 0; in set_servers()
1001 serv->mark = mark; in set_servers()
1002 serv->sfd = NULL; in set_servers()
1003 serv->flags = SERV_FROM_RESOLV; in set_servers()
1004 serv->queries = serv->failed_queries = 0; in set_servers()
1009 struct server* tmp = old_servers->next; in set_servers()
1014 daemon->servers = new_servers; in set_servers()
1020 This is a protection against an update-time/write race on resolv.conf */
1035 /* move old servers to free list - we can reuse the memory in reload_servers()
1038 for (serv = daemon->servers; serv;) { in reload_servers()
1039 struct server* tmp = serv->next; in reload_servers()
1040 if (serv->flags & SERV_FROM_RESOLV) { in reload_servers()
1041 serv->next = old_servers; in reload_servers()
1046 serv->next = new_servers; in reload_servers()
1052 while ((line = fgets(daemon->namebuff, MAXDNAME, f))) { in reload_servers()
1067 source_addr.in.sin_port = htons(daemon->query_port); in reload_servers()
1074 source_addr.in6.sin6_port = htons(daemon->query_port); in reload_servers()
1082 old_servers = old_servers->next; in reload_servers()
1088 serv->next = new_servers; in reload_servers()
1090 serv->addr = addr; in reload_servers()
1091 serv->source_addr = source_addr; in reload_servers()
1092 serv->domain = NULL; in reload_servers()
1093 serv->interface[0] = 0; in reload_servers()
1094 serv->mark = 0; in reload_servers()
1095 serv->sfd = NULL; in reload_servers()
1096 serv->flags = SERV_FROM_RESOLV; in reload_servers()
1097 serv->queries = serv->failed_queries = 0; in reload_servers()
1103 struct server* tmp = old_servers->next; in reload_servers()
1108 daemon->servers = new_servers; in reload_servers()
1119 for (l = daemon->listeners; l && l->family != AF_INET; l = l->next) in get_ifaddr()
1125 if (!l || ioctl(l->fd, SIOCGIFADDR, &ifr) == -1) in get_ifaddr()
1126 ((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr.s_addr = -1; in get_ifaddr()
1128 return ((struct sockaddr_in*) &ifr.ifr_addr)->sin_addr; in get_ifaddr()